23 Kasım 2014 Pazar

Deprem Verilerinin Üzerine Çalışmak


Daha önce kaba haliyle ama çok da yüzeysel olmamak kaydıyla BeautifulSoup kütüphanesinin bize getirdiği kolaylıkları az çok anlattım. Şimdi bunu kullanıp, Kandilli Rasathanesinin güncel olarak yayınladığı verileri çekmeye başlayalım.
Şu durumda ben sadece örnek olması açısından derinlik ve büyüklük verilerini alacağım. Siz isterseniz tarihleri alıp, hangi tarihlerde en fazla deprem olmuş, hangi saatlerde depremler daha sık görülmüş öğrenebilir ve ya belirli bir enlem ve boylam arasında gerçekleşen depremleri ayırıp buradaki çalışmalarınıza diğerlerinden daha fazla ağırlık verebiliriz.

#!/usr/bin/env python3

import urllib.request
from bs4 import BeautifulSoup
import re

link = 'http://www.koeri.boun.edu.tr/scripts/lst0.asp'

data = urllib.request.urlopen(link)
data = data.read()
soup = BeautifulSoup(data)
tag = soup.pre.string

derinlik = []
buyukluk = []
for x in tag.splitlines():
    if x.startswith('2'):
        ayrisma = re.split(r'\s+', x)
        derinlik.append(ayrisma[4])
        buyukluk.append(ayrisma[6])
        
# Aşağıda yorumu kaldırarak derinlik ve ya büyüklük
# verilerinin herhangi birini gösterebilirsiniz.

# print(derinlik)
# print(büyüklük)

Bundan sonra yapmanız gerekenler sadece istediğiniz verinin çıktısını almak. Burada sorulabilecek tek soru 're' kütüphanesinin ne olduğu ve nasıl kullanılması gerektiği. 4. girişte yer alan split() fonksiyonunun işlevi en az 1 ve ya daha fazla boşluk bulunan yerlerden ifadeyi parçalara bölmek. Bir sonraki yazımda 'Regular Expression' -regex- kütüphanesinin detaylarını incelemek güzel bir devam filmi olacaktır.

Kodun tamamını buradan bulabilirsiniz.

----------------- EKLEME ---------------------

Bunun dışında AFAD sitesinde sayfanın aşağısında son depremlerin yer aldığı linkte, 'CSV' formatında bu verileri indirebilir ve daha kolay bir şekilde işlem yapabilirsiniz.

Aşağıda yer alan kod da benzer işlemleri CSV formatındaki veriler için yapıyor. Burada dosyanın kodlamasına dikkat edin.



import csv
from statistics import mean

d = []
s = []

with open('sismo.csv', encoding='ISO-8859-1') as f:
 doc ? csv.reader(f, delimiter=';')
 for row in doc:
  d.append(row[5])
  s.append(row[8])

d = [float(x) for x in d]
s = [float(x) for x in s]

print('Ortalama Derinlik: %s km'%(mean(d)))
print('Ortalama Şiddet: %s km'%(mean(s)))

Hiç yorum yok:

Yorum Gönder