#3 Python Pandas İle Corona Virüs Analizi Yapalım

Dolyetyus

Özel Üye
21 Nis 2020
1,208
686
pandas-2.jpg


Hepinize tekrardan merhabalar THT üyeleri. Üst Seviye Python Veri Analizi serimizin son bölümü ile karşınızdayım. Önceki bölümlere gitmek için buradaki linkleri kullanabilirsiniz.
İlk Bölüm: Buradan, İkinci Bölüm: Buradan.

eUBHzf.png


İlk bölümümüzde Pandas kütüphanemizin temellerini atmıştık ve ikinci bölümde ise veri analizlerine basitçe bir giriş yapmıştık. Açıkçası beklediğimin çeyreği kadar bile etkileşim almadı ne yazık ki iki konu da. Yine de son bölüm ile karşınızdayım. Bu bölümde ise Brezilyadaki Corona Virüs vakaları üzerinden tamamen veri analizini öğrenip seriyi bitireceğiz. İsterseniz konu başlıklarımızı belirteyim.

eUBHzf.png


Bu Bölümdeki Konu Başlıkları:

- Daha Detaylı Veri Analizi
- Hatalı Verileri Tespit Etme, Düzeltme ve Silme


eUBHzf.png



Daha Detaylı Veri Analizi

Evet, bu bölümde bir önceki bölüme oranla daha detaylı bir veri analizi gerçekleştireceğiz. Burada birkaç tane temel örnek vereceğiz ve bu yüzden tek tek hepsinin nasıl çalıştığını göstereceğim.
Hazırsak hadi başlayalım.

eUBHzf.png


Kod:
 [COLOR="PaleGreen"]import pandas as pd

dataframe=pd.read_csv("brazil_covid19.csv") [COLOR="Pink"]#Bu komut ile veri setimizi  projeye dahil ediyoruz[/COLOR]
print(dataframe) [COLOR="Pink"]#Bu kod ile ise veri setimizi yazdırabiliriz[/COLOR] [/COLOR]
JZMCFW.jpg


Evet, genel olarak başlangıç için önce kütüphanemizi projeye ekledik ve veri setimizi de projeye ekledik. Şimdi bu veriyi de yazdırdık.

eUBHzf.png


Kod:
[COLOR="palegreen"]state=dataframe["state"] [COLOR="pink"]#state bölümündeki datayı sunar[/COLOR]
print(state) [/COLOR]
anL1y2.jpg


Bu komut ile ilk örnektekinin aksine tüm veri setini değil, sadece istediğimiz sütunu yazdırdık. Veri filtreleme açısından gayet kullanışlı bir komut. Çıktının en sonunda kaç satır ve kaç sütun’un yazdırıldığı verilmektedir.

eUBHzf.png


Kod:
[COLOR="palegreen"]both=dataframe[["state","cases"]] [COLOR="pink"]#İstenilen sütunlardaki datayı sunar[/COLOR]
print(both)[/COLOR]
e0J7Ih.jpg


Burada ise önceki örnekteki gibi sadece tek sütundan değil, 2 farklı sütundan yararlandık. Hem şehirleri, hem de şehirlerdeki vaka sayılarını böylece görebiliriz. Tabi siz istediğiniz şekilde bu sütun sayısını arttırabilir veya değiştirebilirsiniz.

eUBHzf.png


Kod:
[COLOR="palegreen"]loc=dataframe.loc[1313] [COLOR="pink"]#istenilen satırı yazdırır[/COLOR]
print(loc)[/COLOR]
wS4Qxu.jpg


loc fonkisyonunda 2 parametre vardır: Ulaşılmak istenen satır ve ulaşılmak istenen sütun. Bu bilgileri loc fonksiyonu ile kullanırsak istediğimiz bölüme ulaşabiliriz.
Biz burada 414 numaralı satırı yazdırmak için 414 verdik değer olarak ve o da bize detaylıca çıktısını verdi.

eUBHzf.png


Kod:
[COLOR="palegreen"]loc2=dataframe.loc[4141, "deaths"] [COLOR="pink"]#istenilen satırdaki sütun değerini yazdırır[/COLOR]
print(loc2)[/COLOR]
lIabSJ.jpg


Burada ise istenilen satırın istenilen sütun verisini yazdırdık. Bu daha nokta atışlı bir aramadır.

eUBHzf.png


Kod:
[COLOR="palegreen"]b=dataframe.loc[1500:1512] [COLOR="pink"]#istenilen aralıktaki satırlara ulaşamayı sağlar[/COLOR]
print(b)[/COLOR]
HJqkRN.jpg


Burada ise önceki örneklerdeki gibi tek bir satıra değil, belli bir aralığına ulaştık ve detaylıca bu satırların bilgilerini aldık.
Belki fark etmişsinizdir, normalde python 1:5 olarak yazılan bir aralıkta 5 değerini almazken Pandas kütüphanesi bu değeri de alır.

eUBHzf.png


Kod:
[COLOR="palegreen"]c=dataframe.loc[:,"cases"] [COLOR="pink"]#belli bir sütunun tüm değerlerini alır[/COLOR]
print(c)[/COLOR]
ddBYsk.jpg


Yukarıdaki örneklerde hep belli bir satır veya satır aralığının değerlerini almıştık fakat şimdi satır kısmını boş bırakarak sütun kısmını aldık. Böylelikle bizim için tüm satırları yazdı.

eUBHzf.png


Kod:
[COLOR="palegreen"]d=dataframe.loc[:,["state","cases"]] [COLOR="pink"]#istenilen sütunların satır değerlerini alır[/COLOR]
print(d) [/COLOR]
brjgdD.jpg


Burada ise bundan önceki örneğe ek olarak bir tane sütunun daha satır bilgilerini yazdırıyoruz.
Açıklamak gerekirse; il il corona virüs sayılarını bu kod ile gördük.

eUBHzf.png


Kod:
[COLOR="palegreen"]e=dataframe.loc[2413:2420,["state","deaths"]] [COLOR="pink"]#istenilen aralıktaki satırların belirtilen sütun değerlerini yazdırır[/COLOR]
print(e)[/COLOR]
nOJZxD.jpg


İlk önce satır aralığımızı belirttik ve sonrasında ise hangi sütunlarını okumak istiyorsak o sütunları yazdık.
Burada yaptığımız şey ise tam olarak istediğimiz satırlarda bulunan şehirdeki ölüm sayılarını gözden geçirmek oldu.

eUBHzf.png


Kod:
[COLOR="palegreen"]f=dataframe.iloc[5000] [COLOR="pink"]#istenilen index değerine sahip olan bölümü yazdırır.[/COLOR]
print(f)[/COLOR]
KwseYZ.jpg


Her zaman bizim şu an üzerinde çalıştığımız veri setindeki gibi index ile satır numaramız aynı olmaz. Bu tür durumlarda iloc fonksiyonu kullanılır. Bu fonksiyon ile istediğimiz satırdan ziyade istediğimiz index değerine sahip olan bölüm yazdırılır.
Burada 5000 index değerine sahip olan kısmı yazdırdık.

eUBHzf.png


Kod:
[COLOR="palegreen"]h=dataframe[dataframe.deaths<100] [COLOR="pink"]#istenilen sütunda belirtilen değerin altında olan bölümleri yazdırır[/COLOR]
print(h)[/COLOR]
2XvUda.jpg


Burada ise kod, amacının ne olduğunu aşırı şekilde belli ediyor. Bu komut ile istenilen değerin altındaki satırları ve sütunları listeler. İstediğiniz matematiksel koşulu kullanabilirsiniz.
Biz de ölüm sayısının 100’ün altında olduğu satırları listeledik. Toplam 2048 tane ölü sayısının 100'ün altında olduğu satır varmış.

eUBHzf.png


Kod:
[COLOR="palegreen"]g=dataframe[dataframe.cases>150000] [COLOR="pink"]#istenilen sütunda belirtilen değerin üstünde olan bölümleri yazdırır
[/COLOR]print(g)[/COLOR]
6OqJI1.jpg


Yaptığımız örnek üstteki örneğin neredeyse aynısı, en azından mantığı aynı.
Cases sütununda 150.000’den yüksek değere sahip kısımları yazdırdık. Yani vaka sayısının 150.000’in üstünde olduğu kısımları. Doğal olarak çok uzun bir liste geçti elimize. 150.000'den fazla hastanın göründüğü satır sayısı 822'miş.

Bu bölümlük bu kadar örnek yetmiştir diye düşünüyorum ve izninizle ikinci bölüme geçiyorum.

eUBHzf.png



Hatalı Verileri Tespit Etme, Düzeltme ve Silme

Bu bölümde yapacağımız şeyler kabaca başlıktan anlaşılmakta sanırsam. Dosyamızdaki verileri tespit etmek ve üzerlerinde nasıl işlem yapılacağını yine örnekler vererek anlatacağım.

İlk olarak
Kod:
[COLOR="palegreen"]import pandas as pd
dataframe=pd.read_csv("brazil_covid19.csv") [/COLOR]
kodumuzu girerek veri setimizi ve pandas kütüphanemizi projeye dahil ediyoruz. Buradan sonra örnekler vereceği ve ne işe yaradıklarını açıklayacağım.

eUBHzf.png


Kod:
[COLOR="palegreen"]x=dataframe.sort_values(by="deaths",ascending=False).head(12) [COLOR="pink"]#en çok ölüm olan 10 satırı yazdırır[/COLOR]
print(x) [/COLOR]
UkGPvw.jpg


Burada ne yaptığımızı önce basitçe anlatalım: Ölü sayılarını çoktan aza sıraladık. En çok ölümüz 6368. satırda bulunuyormuş.
Detaylıca bahsetmek gerekirse sort, sıralama anlamına gelir. Sıralanacak sütun olarak “deaths” bölümünü aldık ve ascending, yani azdan çok’ sıralama parametine verilerimizi çoktan aza doğru sıralanması için bulunan parametreye False değeri verdik. head fonksiyonu ise en başta bulunan 12 satırı yazdırdı.

eUBHzf.png


Kod:
[COLOR="palegreen"]dataframe=dataframe.drop(6368) [COLOR="pink"]#6368. satırı bulur ve satırı siler[/COLOR]
print(dataframe.sort_values(by="deaths",ascending=False).head(12))[/COLOR]
qtehrR.jpg


Burada ise önceki örnekte en fazla ölü sayısına sahip olan satırı bulduk ve sildik. Bu satır 6368 satırıydı ve artık biz bu satırı sildiğimiz için program bu satırı yazmayıp diğer satırları yazdı.
Drop fonksiyonu belirttiğimiz verileri silmeye yarar yani.

eUBHzf.png


Kod:
[COLOR="palegreen"]dataframe.drop(6341,inplace=True) [COLOR="pink"]#6341. satırı bulur ve satırı siler[/COLOR]
print(dataframe.sort_values(by='deaths',ascending=False).head(12)) [/COLOR]
BGJmhf.jpg


Evet, burada ne yaptık? 6341. satırı sildik. Peki kodları niye farklı? Güzel soru, tam da buraya değiniyorum.
İlk silme örneğinde önce drop fonksiyonu ile veriyi sildik ve sonrasında onu tekrardan dataframe değişkenine tanımladık. Bu örnekte ise inplace parametresi kullanarak yeniden bir değişkene tanımlamamıza gerek kalmadı. Duruma göre daha basit bir kullanımı olabilir diye ekledim:) .

eUBHzf.png


Kod:
[COLOR="palegreen"]print(dataframe.columns) [COLOR="pink"]#Var olan sütunları yazdırır[/COLOR][/COLOR]
GGqDZS.jpg


Kod:
[COLOR="palegreen"]dataframe=dataframe.drop(columns="date") [COLOR="pink"]#Belirtilen sütunu siler[/COLOR]
print(dataframe.columns)[/COLOR]
vh6Hro.jpg


Bu örnekte ise satır yerine sütun sildik. Date, yani tarih verilerinin yazdığı sütunu sildik. Sonrasında zaten sütunları yazdırdığımızda date sütunun olmadığını gördük. Bunun da alternatif yolları vardır. Kısaca başka bir alternatif sütun silme kodunu aşağıya bırakıyorum:
Kod:
[COLOR="palegreen"]dataframe=dataframe.drop("date",axis=1) [COLOR="pink"]#Belirtilen sütunu siler –alternatif versiyon[/COLOR]
print(dataframe.columns)[/COLOR]

eUBHzf.png


Kod:
[COLOR="palegreen"]print(dataframe.groupby("region")["deaths"].min().head(10)) [COLOR="pink"]#istenilen sütunlardaki en düşük değere sahip satırları değerleri sıralar[/COLOR]
print(dataframe.groupby("region")["deaths"].max().head(10)) [COLOR="pink"]#istenilen sütunlardaki en yüksek değere sahip satırları değerleri sıralar[/COLOR][/COLOR]
e9PjLL.jpg


“Ee, ne yaptık yani?” diye sormadan ben cevap vereyim: bölge bölge ölüm sayılarını sıraladık ama head() fonksiyonu ile bunların sadece ilk 10 veri satırını aldık.
Buradaki önemli nokta; parametlere verdiğimiz değerlerin sırasıdır. Önce region’u verdiğimiz için bize ilk 10 bölgeyi verdi. Verdiği değerler ise o bölgelerdeki uç değerlerdir.
Özet olarak, min() en düşük verileri verir ve max() da en yüksek verileri verir.

eUBHzf.png


Kod:
[COLOR="palegreen"]dataframe=(dataframe.groupby(["region"])["cases","deaths"].max().head(5)) [COLOR="pink"]#istenilen sütunlardaki en yüksek değere sahip satırları değerleri sıralar[/COLOR]
print(dataframe)[/COLOR]
VWTjGJ.jpg


Burada ise bölgelerdeki hem ölüm hem de vaka sayılarını yazdırdık. Bize çıktıda en yüksek vaka ve ölüm sayılarına sahip bölgeleri sıraladı.

eUBHzf.png


Şimdi ise artık eksik değerleri, boş değerleri bulmayı ve bunları düzenlemeyi öğrenelim. Bunun için İngilizce’de boş tanımsız anlamına gelen null() fonksiyonunu kullanacağız.

Kod:
[COLOR="palegreen"]dataframe=dataframe.isnull().sum() [COLOR="pink"]#tüm boş değerleri bulur ve toplamını yazdırır[/COLOR]
print(dataframe)[/COLOR]
1aIXs4.jpg


Gördüğümüz üzere bizlere nerelerin boş olduğu hakkında detaylı bir bilgi verdi. Fakat benim veri setimde hiç null değer yok. O yüzden buradan sonrası kısımları resimsiz şekilde göstereceğim.
Şimdi bu kısımları düzenlemeye geçelim.

eUBHzf.png


dropna() Fonksiyonu

Kod:
[COLOR="palegreen"]df=df.drop() [COLOR="pink"]#veri setindeki tüm boş değerleri siler[/COLOR][/COLOR]

Önceki örneklerde sizlere gösterdiğim üzere drop() fonkisyonu ile bir şeyler silebiliyorduk. Düz mantık olarak bakarsak bu boş verileri silmek için de drop fonkisyonu kullanabiliriz. Tabi ki de kullanabiliriz ama bu fonksiyon beraberindeki tüm değerleri sildiği için gerekmedikçe kullanılmamalıdır. Belli verileri silmenin başka yöntemleri de var.

eUBHzf.png


Kod:
[COLOR="palegreen"]dataframe=dataframe["x sütunu"].fillna(method="ffill",inplace=True) [COLOR="pink"]#Belirtilen sütundaki boş değere sahip verileri siler.[/COLOR]
print(dataframe)[/COLOR]
xH8WxI.jpg



Belirttiğim gibi bizim boş değere sahip sütunumuz yoktu ve bu yüzden ben bu veri set üzerinde detaylıca gösteremiyorum. Yine de bu komut, boş veriye sahip yerleri doldurarak bu boş kısımları siler.

Siz kendinizde bulunan boş verileri bu komut ile doldurduktan sonra bundan bir önceki örnekte bulunan boş veri kontrol etme komutunu girin. Böylelikle yaptığınız işlemden emin olabilirsiniz.

eUBHzf.png


Evet, belli ki bir serimizin sonuna geldik. Yazdığım bu seri, Python’da Pandas kütüphanesi ile nasıl ileri seviye veri analizi yapabileceğinizi öğretmeyi amaçlamıştır. Umarım sizlere faydası dokunur. Eğer boş vaktim olursa daha nice çok işe yarar konu-seri yazmaya çalışacağım.
Kendinize iyi bakın ve hoşça kalın. İyi çalışmalar…​
 

ZuL-RaA

Kadim Üye
9 Ara 2017
5,550
837
Semerkant
Ellerinize sağlık :) Yalnızca kod satırlarına ikişer satır fazla eklerseniz kodlar daha iyi görünür.

Normal ;

Kod:
print("A")

İkili ;

Kod:
print("A")
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.