18 Ekim 2015 Pazar

Python ve CSV İlişkileri

CSV dosyaları, açılımından da anlaşılacağı üzere (Comma-Separated Values), çoğunlukla veri analizi üzerine çalışan bilim insanlarının sıkça kullandığı, hatta günümüzde birçok kurum ve şirketin de yardımına yetişen basit bir veri depolama şeklidir. CSV dosyalarındaki asıl olay; verilerin daha önceden belirlenen bir ayrıştırıcı imge ile liste şeklinde depolanması. Mesela CSV ile şirketinizde bulunan çalışanların isim, soyad, ve iletişim bilgilerinin yer aldığı bir dosya oluşturabilirsiniz. Bunu yöneticinizle paylaşabilir, üzerinde istediğiniz an herhangi bir değişiklik yapabilirsiniz. Teknik şeylerle uğraşıp veritabanı hazırlamanıza gerek yok. Verilerinizi bir dosya aracılığıyla rahatlıkla paylaşabilirsiniz.


Bu dosya formatının çalışır ve anlaşılabilir örneklerini görelim.

  • imdb.com: Bu web sitesinde oyladığınız ya da 'watchlist'e eklediğiniz filmlerin bir listesini '.csv' olarak indirebilirsiniz.
  • deprem.gov.tr: Son yaşanan sarsıntıların bir listesini csv olarak indirebilirsiniz.
  • borsaistanbul.com: Borsada yaşanan ne varsa -pek anlamıyorum, anlayan vardır- dökümünü indirmek mümkün.
  • data.worldbank.org: Ülkeler hakkında genel veriler
  • evds.tcmb.gov.tr: Merkez Bankası verileri vs.
Hemen uygulamalara başlayalım.

Üzerinde çalışacağımız csv dosyası imdb.com sitesinden indirdiğim puanlama listem.

#!/usr/bin/env python3

import csv
from statistics import mean


with open('ratings.csv') as f:
 #DictReader() metoduyla verileri okuyoruz.
 #Bu metotta, her satır ilk satırdaki veri açıklamalarıyla
 #eşleşecek şekilde ilişkilendirilir. Her veri satırı bir
 #dictionary olacak şekilde düzenlenir.
 veriler = csv.DictReader(f, delimiter=',', quotechar='"')
 istek = []
 for row in veriler:
  #İstediğimiz dict anahtarlarını seçip alıyoruz.
  #Ben bu beşini seçtim.
  title = row['Title']
  genres = row['Genres']
  imdb_rt = row['IMDb Rating']
  me_rt = row['You rated']
  url = row['URL']
  list = [title, genres, imdb_rt, me_rt, url]
  #Aldığımız verilerle 2D array oluşturuyoruz.
  istek.append(list)
 
 #Bu 2D listemiz için küçük bir düzenleme yapıp 10 puan
 #verdiğim filmlerin kısa bir özetini çıkarabiliriz. 
 print('-'*10)
 for x in istek:
  if int(x[3]) == 10:
   print('(%s/%s)  %s - IMDb Linki'%(x[3], x[2], x[0], x[4])) 

Koda buradan ulaşabilirsiniz. Bu kod ile oluşturduğum Film Değerlendirmeleri sayfama göz atabilirsiniz.

Bunu bir başka metod ile gerçekleştirebiliriz.

#!/usr/bin/env python3

import csv
from statistics import mean


with open('ratings.csv') as f:
 #DictReader() metoduyla verileri okuyoruz.
 #Bu metotta, her satır ilk satırdaki veri açıklamalarıyla
 #eşleşecek şekilde ilişkilendirilir. Her veri satırı bir
 #dictionary olacak şekilde düzenlenir.
 veriler = csv.reader(f, delimiter=',', quotechar='"')
  
 # Listedeki isimleri çekmek istiyorsak eğer
 isimler = []
 for row in veriler:
  isimler.append(row[5])
 # İsimler liste halinde görünüyor.
 print(isimler)
 
 
 # Linkleri elde etmek istiyorsak
 puanlar = []
 for row in veriler:
  puanlar.append(row[8])
 
 # İlk sütunda 'You rated' verisi olacak. Onu silelim
 del puanlar[0]
 puanlar = [int(x) for x in puanlar]
 print(mean(puanlar))
 # Ortalamamız = 7.256

Şimdi ilk örnekteki verileri csv olarak kaydedelim:


with open('filmler.csv', 'w') as s:
  writing = csv.writer(s, delimiter=' ')
  writing.writerows(istek)


Hiç yorum yok:

Yorum Gönder