Sivas Cumhuriyet Üniversitesi - Bilgisayar Mühendisliği - Bitirme Projesi

Ayşegül Kübra Kuzucu - 13.07.2020

Yeni Koronavirüs Hastalığı (Covid-19) 2020 yılının Aralık aylarının sonlarında solunum yolları semptomları (ateş, öksürük, nefes darlığı) taşıyan bir grup hasta üzerinde incelemelerin yapılması sonucunda tanısı konmuş olan bir hastalıktır. İlk olarak 13 Ocak 2020 tarihinde dünya üzerinde Çin’in Vuhan Eyaleti’nde ortaya çıktığı bilinmektedir. Hastalık bir salgın haline dönemeden önce Vuhan Eyaleti’ndeki bazı hayvan pazarlarında ve deniz ürünlerinde bulunduğu tespit edilmiştir. Daha sonra başta Vuhan Eyaleti olmak üzere ilk önce Çin’in tüm eyaletlerine, ardından hızlı bir şekilde tüm dünya ülkeleri ve şehirlerine yayılarak bir salgın haline dönüşmüştür. Ülkemizde ise ilk vaka 11 Mart 2020 tarihinde görülmüştür.

Türkiye Geneli Covid-19 araştırması sonucu elde edilmiş vaka, vefat, test, tedavi edilen ve tarih bilgileri ile alakalı “Turkiye-Korona-Virus-Verisi.csv” adlı veri seti kullanılmıştır. Aşağıda gerçekleşen tüm işlemler bu veri setinde yer alan verileri içermektedir. Başlangıç tarihi 11 Mart 2020 ve son tarihi 2 Temmuz 2020 olmak üzere toplamda 144 günlük verileri kapsamaktadır.

Öncelikle Numpy, Pandas, Matplotlib, Seaborn ve Plotly Kütüphaneleri ‘import’ edilerek içe aktarılmıştır.

In [57]:
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.graph_objects as go
from plotly.offline import init_notebook_mode, iplot
import plotly.offline as ply
ply.init_notebook_mode(connected=True)
import plotly.express as px
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))
           
import datetime
from datetime import date, timedelta        

%matplotlib inline

Veri seti Pandas Kütüphanesinin sayesinde eklemiştir. ‘turkiye’ yazıp shift+enter kısa yolu ile bu veri setine ait tabloyu görmek mümkündür.

In [58]:
#DataFrame içine virgülle ayrılmış değerler (csv) dosyası bu kısımda okunacak.
#Parametre olarak dosyanın adı girilir.
turkiye = pd.read_csv("../Veri Setleri/Turkiye-Korona-Virus-Verisi.csv")

‘turkiye' isimli veri seti 144 satır ve 14 sütundan oluşmak üzere; csv dosyasında “Province/State, Country/Region, Last_Update, Confirmed, Deaths ve Recovered” başlıkları altında veriler yer almaktadır. Ancak bu başlıklar ‘rename()’ fonksiyonuyla “Ulke, Tarih, Vaka, Vefat ve Iyilesen” olarak değiştirilmelidir. Türkiye’de Province/State olmadığı için de bu başlık ‘drop()’ fonksiyonu ile tablodan kaldırılmalıdır. Bu işlemler aşağıdaki gibi gerçekleştirilir.

In [59]:
turkiye.rename(columns={"Country/Region":"Ulke","Last_Update":"Tarih","Confirmed":"Vaka","Deaths":"Vefat","Recovered":"Iyilesen"},inplace=True)
turkiye.drop("Province/State",axis=1,inplace=True)

‘turkiye' isimli veri setinde test sayıları yer almamaktadır. Bu sebeple 144 günlük test sayıları daha sonradan elle tek tek girilerek tabloya dâhil edilecektir. Test sayısı bakanlık tarafından verilmeyen günler sıfır olarak girilecektir. Tüm bu verilerin sonucunda gerekli işlemler gerçekleştirilerek “Test Artış Sayısı, Vaka Artış Sayısı, Vefat Artış Sayısı, Test Artış Oranı, Vaka Artış Oranı, Vefat Artış Oranı, Aktif Hasta Sayısı ve Pasif Hasta Sayısı” başlıkları altında bu bilgiler hesaplanarak tabloya dâhil edilmiş olacaktır.

In [60]:
test_sayisi = [0,0,0,0,0,0,0,0,1981,3656,2953,1738,3672,3952,5035,7286,7533,
               7641,9982,11535,15422,14396,18757,16160,19664,20065,21400,20023,24900,28578,30864,33170,35720,
               34456,33070,34090,40427,40270,40520,35344,39703,39429,37535,40962,38351,38308,
               30177,20143,29230,43498,42004,41431,36318,24001,35771,33283,30303,30395,33687,35605,36187,
               32722,37351,33332,34821,38565,42236,35369,24141,25382,20838,33633,37507,40178,24589,21492,19853,
               21043,33559,36155,39230,35600,31525,32325,52305,54234,57829,35846,35335,39361,37225,
               36521,49190,41013,45092,45176,42032,46800,52901,48412,41316,41112,40496,41413,42982,53486,
               52303,51198,45213,48309,51014,50492,52313,49714]

turkiye["Test_Sayısı"] = test_sayisi

son10_gunlukTest = test_sayisi[-10:] #10 uzunluğunda

son10_gunlukVaka = [1268,1492,1458,1396,1372,1356,1374,1293,1192,1186]

vaka_orani = [0]
olum_orani = [0]
vaka_artisi = [0]
olum_artisi = [0]
test_orani = [0]
test_artisi = [0]

aktif_hasta = turkiye["Vaka"]-(turkiye["Vefat"]+turkiye["Iyilesen"])
pasif_hasta = turkiye["Vefat"]+turkiye["Iyilesen"]


for i in range(len(turkiye)-1):
    testOrani = round((turkiye["Test_Sayısı"][i+1] - turkiye["Test_Sayısı"][i]) / turkiye["Test_Sayısı"][i],2)
    
    testArtisi = turkiye["Test_Sayısı"][i+1] - turkiye["Test_Sayısı"][i]
    
    vakaArtisi = turkiye["Vaka"][i+1] - turkiye["Vaka"][i]
    
    vakaOrani = round((turkiye["Vaka"][i+1]-turkiye["Vaka"][i]) / turkiye["Vaka"][i],2)
    
    olumOrani = round((turkiye["Vefat"][i+1] - turkiye["Vefat"][i]) / turkiye["Vefat"][i],2)
    
    olumArtisi = turkiye["Vefat"][i+1] - turkiye["Vefat"][i]
        
        
    test_orani.append(testOrani)
    test_artisi.append(testArtisi)
    vaka_artisi.append(vakaArtisi)
    vaka_orani.append(vakaOrani)
    olum_orani.append(olumOrani)
    olum_artisi.append(olumArtisi)
    
    
    
    
turkiye["Test Artış Sayısı"] = test_artisi
turkiye["Test Artış Oranı"] = test_orani
turkiye["Vaka Artış Sayısı"] = vaka_artisi
turkiye["Vaka Artış Oranı"] = vaka_orani
turkiye["Vefat Artış Sayısı"] = olum_artisi
turkiye["Vefat Artış Oranı"] = olum_orani
turkiye["Aktif Hasta Sayısı"] = aktif_hasta
turkiye["Pasif Hasta Sayısı"] = pasif_hasta

vaka_test_yuzdesi = []
for i in range(len(son10_gunlukTest)):
    vaka_test_yuzdesi.append(round(((son10_gunlukVaka[i]/son10_gunlukTest[i])*100),2))
    


turkiye.fillna(0, inplace=True)
turkiye = turkiye.replace([np.inf,-np.inf], np.nan)
C:\Users\Aysegul\anaconda3\lib\site-packages\ipykernel_launcher.py:28: RuntimeWarning:

invalid value encountered in longlong_scalars

C:\Users\Aysegul\anaconda3\lib\site-packages\ipykernel_launcher.py:36: RuntimeWarning:

invalid value encountered in longlong_scalars

C:\Users\Aysegul\anaconda3\lib\site-packages\ipykernel_launcher.py:36: RuntimeWarning:

divide by zero encountered in longlong_scalars

C:\Users\Aysegul\anaconda3\lib\site-packages\ipykernel_launcher.py:28: RuntimeWarning:

divide by zero encountered in longlong_scalars

Tüm bu yapılan işlemlerin sonuçlarının yer aldığı ‘turkiye’ isimli veri setine ait tablo aşağıdaki gibidir.

In [61]:
turkiye
Out[61]:
Ulke Vaka Vefat Iyilesen Tarih Test_Sayısı Test Artış Sayısı Test Artış Oranı Vaka Artış Sayısı Vaka Artış Oranı Vefat Artış Sayısı Vefat Artış Oranı Aktif Hasta Sayısı Pasif Hasta Sayısı
0 Turkey 1 0 0 3/11/2020 0 0 0.00 0 0.00 0 0.0 1 0
1 Turkey 1 0 0 3/12/2020 0 0 0.00 0 0.00 0 0.0 1 0
2 Turkey 5 0 0 3/13/2020 0 0 0.00 4 4.00 0 0.0 5 0
3 Turkey 5 0 0 3/14/2020 0 0 0.00 0 0.00 0 0.0 5 0
4 Turkey 18 0 0 3/15/2020 0 0 0.00 13 2.60 0 0.0 18 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
109 Turkey 197239 5097 170595 6/28/2020 48309 3096 0.07 1356 0.01 15 0.0 21547 175692
110 Turkey 198613 5115 171809 6/29/2020 51014 2705 0.06 1374 0.01 18 0.0 21689 176924
111 Turkey 199906 5131 173111 6/30/2020 50492 -522 -0.01 1293 0.01 16 0.0 21664 178242
112 Turkey 201098 5150 175422 7/1/2020 52313 1821 0.04 1192 0.01 19 0.0 20526 180572
113 Turkey 202284 5167 176965 7/2/2020 49714 -2599 -0.05 1186 0.01 17 0.0 20152 182132

114 rows × 14 columns

Şimdi bu tablo referans alınarak bir takım grafikler elde edilecektir. Bu grafikler verilerin görsel halidir. Bu görseller sayesinde bilgi edinmenin daha kolay olması sağlanacaktır. Yukarıda yer alan tablo'ya göre günlük durumlar incelenecek olursa:

In [62]:
turkiye['GunlukVaka'] = turkiye['Vaka'] - turkiye['Vaka'].shift(1)
px.bar(turkiye,x='Tarih',y='GunlukVaka',title='11 Marttan 1 Temmuza Kadar olan Günlük Vaka Sayısı',color_discrete_sequence=['#FFA500'])

‘turkiye’ isimli veri setine ait Vaka verisinden bir önceki güne ait vaka verisi çıkarılarak ‘GunlukVaka’ isimli bir değişken oluşturulmuştur. Bu değişken günlük vaka sayısını ifade edecektir. İkinci kod satırında ise Plotly Kütüphanesi’nin bünyesinde yer alan ‘px.bar()’ fonksiyonu kullanılarak aldığı parametrelere göre x ekseni üzerinde tarih verisini, y ekseni üzerinde birinci satırda hesaplanmış olan gülük vaka sayısına ait veriyi ifade etmektedir. Diğer bir parametre ise dataframe olup renk değeri de eklenmiştir.

Oluşmuş olan grafik, 114 günlük verilerden iki günde bir olacak şekilde günlük vaka miktarına göre oluşturulmuştur. Bu grafiğe göre; 11 Mart itibari ile vaka sayılarının giderek arttığı, Nisan aylarında zirveyi gördüğü ve Nisan ayının son haftasından itibaren düşüşe geçerek stabil bir hal aldığı bilgisine ulaşılmaktadır. Mart, Nisan Mayıs ve Haziran ayları vaka miktarı açısından kıyaslanacak olursa “En az vaka Mart ayında görülürken; en çok vaka Nisan ayında görülmüştür.” denilebilir.

In [63]:
turkiye['GunlukOlen'] = turkiye['Vefat'] - turkiye['Vefat'].shift(1)
px.bar(turkiye,x='Tarih',y='GunlukOlen',title='11 Marttan 1 Temmuza Kadar Olan Günlük Vefat Sayısı',color_discrete_sequence=['#696969'])

Tıpkı bir önceki grafik için yazılmış olan kodlar gibi bu sefer de aynı kodlar kullanılmıştır. Ancak 'turkiye' isimli dataframe’de yer alan ve vefat eden kişiler hakkında bilgi veren veri kullanılarak, yine aynı işlemler gerçekleştirilerek günlük vefat eden kişi sayısının ‘GunlukOlen’ isimli değişkene aktarılması sonucunda px.bar() fonksiyonu kullanılmıştır.

14 günlük verilerden iki günde bir olacak şekilde günlük vefat miktarı hakkında bilgi vermesi amacıyla oluşturulmuştur. Bu grafiğe göre; 11 Mart itibari ile vefat sayılarının giderek arttığı anlaşılmaktadır. 1 Temmuz tarihine kadar her iki günde bir muhakkak ölen olmuştur. Bir günde en çok vefat eden kişi sayısı 129 kişi olup, 19 Nisan tarihinde gerçekleşmiştir. Vefat sayıları Mayıs ayından itibaren düşüşe geçerek sabit bir hal almıştır. Bir önceki grafik ile kıyas yapılacak olursa; vaka sayısı ile vefat eden kişi sayısı paralellik göstermektedir.

In [64]:
turkiye['Gunluk_Iyilesen'] = turkiye['Iyilesen'] - turkiye['Iyilesen'].shift(1)
px.bar(turkiye,x='Tarih',y='Gunluk_Iyilesen',title='11 Marttan 1 Temmuza Kadar Olan Günlük İyileşen Sayısıı',color_discrete_sequence=['#008080'])

Bu grafikte de Plotly kütüphanesinde yer alan px.bar() metodu kullanılmıştır. Bir önceki grafikten tek farklı günlük iyileşen kişi sayısının hesabı ve bu verinin sonucunda oluşturulacak olan grafiğin rengidir.

114 günlük verilerden iki günde bir olacak şekilde günlük tedavi edilen kişi miktarını göstermektedir. Bu grafiğe göre; 11 Mart itibari ile iyileşen sayılarının giderek arttığı, ancak 8 Mayıs itibari ile ciddi bir azalma yaşadığı görülmektedir. 8 Mayıs tarihinden 5 Haziran tarihine kadar iyileşen sayısı azalarak giderken 5-11 Haziran arasında iyileşen sayısında artma gözlenmektedir. Ancak bu tarihten 1 Temmuz tarihine kadar yeniden iyileşen sayısında bir düşüş yaşanmıştır. Günlük vaka verisine nazaran günlük iyileşen verisinin daha fazla olduğu anlaşılmaktadır.

In [65]:
px.bar(turkiye,x='Tarih',y='Test_Sayısı',title='11 Marttan 1 Temmuza Kadar Yapılmış Olan Günlük Test Sayısı',color_discrete_sequence=['#FFB6C1'])

Bir çubuk grafiği oluşturmak üzere yazılmış bir kod parçasıdır yukarıda görülmektedir. Diğer kod bloklarından tek farkı daha öncede bahsi geçtiği üzere veri seti içerisinde yer almayan test sayısı verisi sonradan manuel olarak veri setine dahil edildiği için ve bu dahil edilen sayılar günlük yapılan test miktarına ait olduğu için yeniden bir günlük yapılan test sayısı işlemi yapılmasına gerek yoktur. Bu da diğer kodlardan tek farkıdır. Görüldüğü üzere tek satırda yazılan kod parçası ile anlaşılabilir bir bilgi veren basit bir çubuk grafik Plotly Kütüphanesi ile oluşturulabilmektedir.

In [66]:
gunluk_test = go.Scatter(x = turkiye.Tarih, y = turkiye["Test_Sayısı"],mode = "lines+markers",
                         name = "Test Sayısı",marker = dict(color = 'rgba(34,139,34, 0.8)' , size=8),
                         line = dict(color = "rgba(34,139,34, 0.4)",width=4),text = turkiye["Test_Sayısı"])

turkey = [gunluk_test]

layout = dict(xaxis = dict(title = "Tarih"),yaxis = dict(title = "Test Sayısı"),
              title = "11 Marttan 1 Temmuza Kadar Yapılmış Olan Günlük Test Sayısı", xaxis_tickangle = -45)

fig = dict(data = turkey, layout = layout)
iplot(fig)

Bu grafiğe ait kodlar Plotly Kütüphaanesi’nde yer alan bir ‘Scatter Plots’ grafik örneğine aittir. Burada x ekseni tarihleri, y ekseni de dataframe’de yer alan test sayısını ifade etmektedir. ‘mode’ özelliğine ‘lines+markers’ özelliği verilerek saçılma grafiğini noktalar ve çizgilerden oluşturulması sağlanmıştır. Daha sonra noktalar ile ilgili boyut ve renk ayarlamaları ile çizgi ile ilgili kalınlık renk ayarlamaları yapılmıştır.

Bir önceki grafik ile kıyas edildiği zaman her iki grafik de 114 günlük verilerden üç günde bir olacak şekilde günlük yapılan test miktarına göre oluşturulmuştur. Yalnızca yöntemleri farklıdır. Bu grafiklerden de anlaşıldığı üzere; 11 Mart tarihinden itibaren 10 gün hiç test yapılmadığı, sonrasında da yapılan test sayılarının Nisan ayının ortalarına kadar arttığı, ancak bu tarihlerden sonra artış hızının yer yer yavaşladığı anlaşılmaktadır. Önceki grafikte görüldüğü üzere en çok test 57.820 tane olmak üzere 5 Haziran günü yapılmıştır.

In [67]:
test_artis_sayisi = go.Scatter(x = turkiye.Tarih[-30:],y = turkiye["Test Artış Sayısı"][-30:],
                                mode = "lines+markers",name = "Test Artış Sayısı",
                                marker = dict(color = 'rgba(255,140,0, 1)', size=15),
                                line = dict(color = "rgba(255,140,0, 0.4)" ,  width=4),
                                text = turkiye["Test Artış Sayısı"][-30:] )

turkey = [test_artis_sayisi]  
layout = dict(xaxis = dict(title = "Tarih"),yaxis = dict(title = "Önceki Güne Göre Test Farkı"),
              title = "Son 30 gün içerisinde bir önceki güne göre yapılan test farkı",xaxis_tickangle = -45)

fig = dict(data = turkey, layout = layout)
iplot(fig)

Bir saçılma grafiği oluşturulmak üzere yazılmıştır. Kodlar incelendiği zaman; yine ‘mode’ özelliğine ‘lines+markers’ değeri verilerek grafiğin çizgilerden ve noktalardan oluşması sağlanmıştır. Noktalar için ‘color’ ve ‘size’ özelliklerine verilen değerler ile rengi ve noktaların büyüklükleri belirlenmiştir. Çizgiler için de ‘color’ ve ‘ width’ özelliklerine verilen değerlerle çizginin kalınlığı ve rengi belirlenmiştir. Bu kod bloğunda dikkat çeken kısım; x ve y değerlerinde verilmiş olan “[-30]” yazan kısımdır. X ekseninde yer alacak olan turkiye isimli dataframe’de yer alan tarih bilgisi 114 günü kaplamaktadır. [-30] yazılarak bu 114 günlük veriden sadece son 30 tanesinin kullanılması sağlanmıştır.

Bir önceki grafik yakından incelendiği zaman son 30 güne ait günlük yapılan Test sayısı da Grafik 6’da görünmektedir. Yakın zamandaki veriler durumun akıbeti hakkında daha iyi bir bilgi verebilir. Yani 6 Haziran’da yapılan test sayısında aşırı bir düşme görülüyorken bu tarihten sonra yükseldiği görülüyor. Fakat buna rağmen 2 Temmuz tarihine kadar yapılmış olan testlerde önceki günlerin aksine bir artış söz konusu değil.

In [68]:
fig = go.Figure(data=[
                    go.Bar( x=turkiye['Tarih'] , y=turkiye['Test_Sayısı'] , name='Test Sayısı') ,
                    go.Bar( x=turkiye['Tarih'] , y=turkiye['GunlukVaka'] , name='Test Sonucu Pozitif Çıkan')])

fig.update_layout(barmode='stack',width=1000, height=500)
fig.update_layout(title_text='Test Yaptıran İnsanlar ve Test Sonucu Pozitif Çıkanlar')
fig.show()

Bu grafikte Plotly Kütüphanesi’nin ‘go.Figure()’ metodu kullanılmıştır. Daha önce ‘px.bar()’ metodu ile çubuk grafikler elde edilmişti. Burada daha önce hesaplanmış olan ‘GunlukVaka’ isimli günlük vaka verisi ve günlük yapılan test sayısını ifade eden ‘Test_Sayısı’ isimli veri kullanılarak bir çubuk grafik oluşturulmak istenmiştir.

Günlük yapılan test miktarı ve günlük vaka miktarları verileri sonucu ortaya çıkmıştır. Grafikte görülmekte olan çubukların tamamı günlük yapılan test sayısının bilgisini ve çubuklar üzerindeki kırmızı alanlar yapılan testlerin sonucunda sonucu negatif çıkan insanların bilgisini vermektedir. Grafikten elde edilen bilgilere göre; özellikle Nisan ayında yapılan testlerin sonucu pozitif çıkma oranı en yüksektir.

In [69]:
px.bar(turkiye, x='Tarih', y='Vaka', title='11 Marttan 1 Temmuza Kadar Olan Toplam Vaka Sayıları', color_discrete_sequence=['#FF1493'])

Bir çubuk grafik oluşturmak için rengi belirlenmiş, x ekseninde tarih göstermesi ve y ekseni boyunca ‘Vaka’ verisini göstermesi üzerine oluşturulmak istenen grafiğe ait kodların sonucunda yukarıdaki grafik elde edilmiştir. Vaka isimli veri, daha önce de bahsedildiği üzere günlük toplam vaka sayısını belirten verileri içermektedir.

11 Mart tarihinden 1 Temmuza kadar olan sürede gerçekleşen toplam vakaları gösteren bir çubuk grafiktir. Grafiğe göre; her gün gelen vaka sayısının arttığı anlaşılmaktadır. Ancak 11 Marttan itibaren hızla artan vaka sayılarının Mayıs ayı itibariyle düşüşe geçtiği görülmektedir. Yani her geçen gün bir artış söz konusu olsa da ilk 40 günkü artış Mayıs ayından sonraki artışlara göre daha fazladır.

In [70]:
vaka = go.Scatter( x = turkiye.Tarih, y = turkiye.Vaka, mode = "lines+markers", name = "Günlük Vaka",
                    marker = dict(color="rgba(255,20,147, 0.8)"),
                    line = dict(color = "rgba(127,255,212, 0.88)" ,  width=5), text = turkiye.Vaka)

layout = dict( xaxis = dict(title = "Tarih"), yaxis = dict(title = "Kişi Sayısı"), xaxis_tickangle = -60,
               title="11 Marttan 1 Temmuza Kadar Üç Günde Bir LOGARİTMİK Toplam Vaka Sayısı", yaxis_type = "log")


fig = dict(data = vaka, layout = layout)
iplot(fig)

Bu grafik daha önce oluşturulmuş olan saçılma grafiğinin aynısıdır. Oluşan grafikte x ekseninde turkiye isimli veri setinde yer alan ‘Tarih’ verisi ve Y ekseninde günlük toplam vaka sayılarının yer aldığı ‘Vaka’ verisi yer almak üzere bir ‘Scatter Plot’ oluşturulması istenmiştir. Kod bloğu incelenecek olursa; saçılma grafiğinin noktalar ve çizgilerden oluşması istenmiştir ve noktalar ve çizgilerin boyutları ve renkleri ile düzenlemeler yapılmıştır. Bunun sonucu olarak yukarıda görülmekte olan grafik elde edilmiştir.

Bu grafik bir önceki grafiğin logaritmik halidir. Logaritma fonksiyonu ile oluşturulmuştur. Diğer grafik ile aynı bilgiyi vermektedir. Yalnızca yöntemi farklıdır.
In [71]:
px.bar(turkiye, x='Tarih', y='Vefat', title='11 Marttan 1 Temmuza Kadar olan Toplam Vefat Sayıları', color_discrete_sequence=['#FF0000']) 

Yukarıdaki kodlar bir çubuk grafik oluşturulmak üzere yazılmıştır. ‘px.bar()’ fonksiyonu ile oluşturulacak çubuk grafiğin daha önceki grafiklerden tek farkı X ve Y değişkenlerine verilmiş değerleridir. Çıktığu yukarıdaki grafiktir.

11 Mart tarihinden itibaren 1 Temmuz’a kadar olan toplam vefat eden sayılarının 'turkiye' isimli veri setinden çekilmesi sonucu ortaya çıkmıştır. Örneğin grafikte de görüldüğü üzere; 2 Haziran tarihine kadar toplam vefat eden kişi sayısı 4585’tir. Grafikten elde edilen bilgi; ilk hafta hiç ölüm gerçekleşmemesine rağmen Mart ayının son haftasından itibaren ölümlerin hızla arttığı ancak Mayıs ayının ortalarından sonra ölüm sayılarında bir düşüş olduğu için toplam vefat sayılarındaki artış hızının düştüğü yönündedir.

In [72]:
px.bar(turkiye,x='Tarih',y='Iyilesen',title='11 Marttan 1 Temmuza Kadar Olan İyileşen Test Sayısı',color_discrete_sequence=['#32CD32'])

‘px.bar()’ fonksiyonu ile oluşturulmuş, X ekseninde tarihler ve Y ekseninde iyileşen sayıları olacak şekilde bir çubuk grafiği oluşturulmak üzere yazılmış kodların çıktısı yukarıdaki gibidir.

Bu grafiğe göre; 11 Mart’tan 1 Temmuza kadar yapılmış olan toplam test sayılarını gösteren bir grafik modelidir. Tablo 1’de yer alan ‘Test_Sayıları’ verisine göre test yapılmayan günlerin verisi 0 şeklinde girilmişti. Bu sebeple Grafik incelendiği zaman Korono virüsün Türkiye’de il görüldüğü tarihten Nisan ayına kadar olan 20 günlük süre zarfında hiç test yapılmadığı bilgisine ulaşılmaktadır. Nisan ayından itibaren bir buçuk aylık süre boyunca her geçen yapılan toplam test sayısında bir artış olmuştur ancak sonrasında yapılan testlerde artış hızı düşmüştür.

In [73]:
vaka_yuzdesi = go.Scatter( x = turkiye.Tarih[-10:], y = vaka_test_yuzdesi, mode = "lines+markers",
                name = "Vaka/Test Yüzdesi", marker = dict(color = "rgba(199,21,133, 0.88)", size=15), 
                line = dict(color = "rgba(255,105,180, 0.6)" ,  width=5), text = vaka_test_yuzdesi)

turkey = [vaka_yuzdesi]
layout = dict(xaxis = dict(title = "Tarih"), yaxis = dict(title = "Yüzde"),
        title = "Son 10 Günün Verilerine Göre Vaka ve Test Yüzdesi", xaxis_tickangle = -60 )

fig = dict(data = turkey, layout = layout)
iplot(fig)

Bir saçılma grafiğine ait kodlar yer ile oluşturulan grafik yukarıdadır. Bu grafik ‘go.scatter()’ fonksiyonuyla oluşturulmak istenmiştir. X ekseninde ‘Tarih’ isimli veriden ‘[-10]” yazılarak sadece son 10 veri çekilmiştir yani grafik oluştuğunda son 10 güne ait vaka test yüzdesi bilgisi verilecektir. ‘mode’ özelliğine ‘lines+markers’ değeri verilerek çizgiler ve noktalardan oluşan bir çalışma grafiği oluşacaktır.

Bu saçılma grafiğine göre; 23 Haziran’dan 2 Temmuz’a kadar olan ve 10 günü kapsayan ‘Vaka/Test Yüzdesi’ verilerinden elde edilerek oluşturulmuş bir grafiktir. Grafiğe bakılarak 27 Haziran gününün zirve yaptığı ve 1 Temmuz gününe kadar oranın düştüğü anlaşılmaktadır.

Bu aşamaya kadar günlük ve toplam durumlar incelenmiştir. Bundan sonraki grafikler ise bu incelenmiş olan durumların birbiri ile kıyaslanması amacıyla oluşturulmuş bir takım grafiklerdir:

In [74]:
olum = go.Scatter( x = turkiye.Tarih, y = turkiye.Vefat, mode = "lines+markers", name = "Toplam Vefat",
    marker = dict(color = 'rgba(139,69,19, 0.8)'), text = turkiye.Vefat)

tedavi = go.Scatter( x = turkiye.Tarih, y = turkiye.Iyilesen, mode = "lines+markers", name = "Toplam İyileşen",
                    marker = dict(color = "rgba(30,144,255, 0.5)"), text = turkiye.Iyilesen)

turkey = [olum, tedavi]

layout = dict(xaxis = dict(title = "Tarih"), yaxis = dict(title = "Kişi Sayısı"),
        title = "11 Marttan 2 Temmuza Kadar Üç Günde Bir Olan Toplam Ölen Ve Toplam İyileşen Kişi Sayıları",
        xaxis_tickangle = -60)

fig = dict(data = turkey, layout = layout)
iplot(fig)

Burada, ‘olum’ ve ‘tedavi’ değişken adlarıyla iki farklı grafik bir arada oluşturulmuştur. İkisinin de X ekseninde yer alacak veri tarihlerdir ancak Y eksenlerine verilen veri isimlerine göre bu kodlarla oluşturulabilecek bir grafik, aynı süre zarfında toplam iyileşenlerin ve toplam vefat edenlerin kıyaslandığı bir grafik yöntemi olacaktır. İki grafik de noktalar ve çizgiden oluşan ‘go.scatter()’ yöntemi ile oluşturulmuş bir saçılma grafiğidir.

11 Mart’tan 30 Haziran’a kadar olan günlük vefat eden insan sayısı ve aynı süre zarfında günlük iyileşen insanlara ait olan verilerle oluşturulmuştur. Grafiğe dikkatli bakıldığı zaman, her gün iyileşenlerin ve vefat edenlerin olduğu görülmektedir. Ancak 10 Nisan tarihinden itibaren iyileşen hasta sayısının gittikçe artarak günlük vefat eden insan sayısının çok fazla üzerine çıktığı anlaşılmaktadır. Örneğin grafikten anlaşılacağı gibi 2 Temmuz günü toplam vefat eden sayısı 5167 kişidir. 2 Temmuz günü için ‘Toplam İyileşen’ grafiğinin üzerine gelindiği zaman toplam iyileşen sayısının 176.965 olduğu görülecektir. Bu iki sayı da 114’üncü güne gelindiği zaman İyileşen sayısının vefat eden kişi sayısından çok fazla olduğunu ifade etmektedir.

In [75]:
fig = go.Figure(data = [
                        go.Bar( x = turkiye["Tarih"], y = turkiye["Aktif Hasta Sayısı"], name = "Aktif Hasta",
                        marker_color = "rgba(84, 207, 162)", marker_line_color="rgba(25,25,112, 1)"  ),
                    
                        go.Bar(x = turkiye["Tarih"], y = turkiye["Pasif Hasta Sayısı"], name = "Pasif Hasta",
                        marker_color = "rgba(255,20,147, 0.8)", marker_line_color="rgba(25,25,112, 1)" ) ] )

fig.update_layout(barmode = "group", xaxis_tickangle = -45,
    title_text = "11 Marttan 2 Temmuza Kadar Üç Günde Bir Olan Aktif Hasta Ve Pasif Hasta Sayıları")

fig.show()

‘go.bar()’ fonksiyonu ile aynı tarihlere ait ‘Aktif Hasta Sayısı’ ve ‘Pasif Hasta Sayısı’ isimli veriler Y ekseninde olacak şekilde ‘go.figure()’ yöntemi ile yazılmış kodlar. İki farklı veri aynı grafik üzerinde görülmesi 'go.figure()' fonksiyonu ile sağlanmıştır.

‘Vefat’ ve ‘Iyilesen’ verisi sonucu hesaplanan ‘Pasif Hasta’ verisi ile ‘Vaka’ verisinden ‘Pasif Hasta’ verisinin çıkarılması sonucu hesaplanmış olan ‘Aktif Hasta’ verisine ait miktarlara göre çıkarılan 11 Mart ve 2 Temmuz arasındaki sürece ait ‘Aktif Hasta ve Pasif Hasta’ grafiğidir. Grafik 15’e göre; Nisan ayı boyunca aktif hasta sayısı ve pasif hasta sayısı birebirine paralel şekilde artış göstermiştir. Daha sonrasında ise aktif hasta sayısı azalıp stabil bir hal alırken, pasif hasta sayısı her geçen gün artmıştır.

In [76]:
sns.jointplot(x="Vaka",y="Iyilesen",data=turkiye, kind="hex", size=5, color='r')
plt.show()
C:\Users\Aysegul\anaconda3\lib\site-packages\seaborn\axisgrid.py:2272: UserWarning:

The `size` parameter has been renamed to `height`; please update your code.

In [77]:
sns.jointplot(turkiye.Vaka, turkiye.Iyilesen, kind="kde", size=5)
plt.show()

Seaborn Kütüphanesine ait olan ‘Joinplot’ grafik modeline ait kod parçası ile oluşturulan iki grafik yukarıda görülmektedir. Ancak bu iki grafik arklı türlerde yazılmıştır. İki kullanımda aynı sonucu vermektedir. Bir joinplot oluşturulurken ‘kind’ özelliğine verilebilecek değerler ile grafik modelinde değişiklikler yapılabildiğinden dolayı burada birinde ‘hex’, birinde de ‘kde’ değerleri verildiği görülmektedir.

Bu iki grafik; ‘Vaka’ ve ‘Iyilesen’ verileri kullanılarak oluşturulmuş Seaborn kütüphanesine ait olan ‘Jointplot’ modelleridir. İlk grafikte şeklinden de anlaşılacağı üzere ‘kind’ özelliğine ‘hex’ değeri, ikinci grafikte ise ‘kde’ değeri verildiği için yukarıdaki gibi iki tane ‘Counterplot’ ortaya çıkmıştır. İki grafik de aynı bilgiyi vermektedir. Renklerin koyulaştığı bölgeler aynıdır ve bu koyuluk yoğunluğu ifade etmektedir.

İkili karşılaştırmalardan sonra aşağıdaki grafikler üçlü verilerin kıyaslanması amacıyla oluşturulmuştur. Bu grafikler incelenecek olursa:

In [78]:
fig = go.Figure(
    data = [
        go.Bar(x = turkiye["Tarih"][-10:], y = turkiye["Vaka"][-10:], name = "Vaka",
                marker_color = "rgba(128,0,128, 0.8)", marker_line_color="rgba(146, 18, 196, 1)", ),
        
         go.Bar(x = turkiye["Tarih"][-10:], y = turkiye["Iyilesen"][-10:], name = "Iyilesen",
                marker_color = "rgba(50,205,50, 0.8)", marker_line_color="rgba(63, 219, 20, 1)", ),
        
        go.Bar(x = turkiye["Tarih"][-10:], y = turkiye["Vefat"][-10:], name = "Vefat",
                marker_color = "rgba(255,0,0, 0.8)", marker_line_color="rgba(235, 36, 36, 1)", ) ] )

fig.update_layout( barmode = "group", xaxis_tickangle = -45,
    title_text = "Son 10 Günün Verilerine Göre Toplam Vaka, Toplam Vefat, Toplam İyileşen Hasta Sayıları" )

fig.show()

Bu grafik oluşturulurken; vaka, tedavi edilen ve vefat eden sayılarının bulunduğu veriler kullanılmıştır. ‘go.bar()’ fonksiyonu kullanılarak çubuk grafik oluşturulmuştur. Her grafiğin X’ine turkiye isimli veri setinde yer alan ‘Tarih’ verisi girilmiştir ancak Y değerleri farklıdır. ‘[-10:]’ yazılara verilerin son 10 tanesi hedef alınmıştır.

Toplam vaka sayılarının, toplam iyileşen insanların sayısının ve toplam vefat eden insanların son 10 günde, yani 23 Haziran-2 Temmuz arasında olan verileri ile oluşturulmuştur. Grafikten elde edilen bilgiye göre; vaka ve iyileşen insanların sayısı birbirine yakındır ancak günlük gelen vaka sayısı em fazladır. Aynı tarihler içerisinde olan vefat sayıları ise iyileşen ve vaka sayılarına nazaran çok yüksek oranda azdır.

In [79]:
fig = go.Figure(data = [
    go.Bar(name='Vaka', x=turkiye['Tarih'], y=turkiye['Vaka'], marker_color='#000080'),
    go.Bar(name='Vefat', x=turkiye['Tarih'], y = turkiye['Vefat'], marker_color='#FFFF00'),
    go.Bar(name='Iyilesen', x=turkiye['Tarih'], y=turkiye['Iyilesen'], marker_color='#FF1493')])

fig.update_layout(barmode='group', title_text='11 Marttan 2 Temmuza Kadar Türkiyenin Günlük Vaka, Vefat ve İyileşen Hasta Sayıları', xaxis_tickangle=-60)
fig.show()

Bu kodlar bir önceki kodların aynısıdır ancak bir önceki kodlarda ‘[-10:]’ yazıldığından son 10 günlük verilere ait bir grafik oluşmuştu. Buradaki kodlara göre ise aynı tarihlerde olan vaka sayılarının, vefat eden sayılarının ve tedavi edilenlerin sayılarının bulunduğu veriler kullanılmıştır.

Oluşan bu grafik bir önceki grafiğin aslında aynısıdır Ancak 112 günlük olan süre zarfını kapsamaktadır. 11 Mart tarihinden itibaren 30 Haziran tarihine kadar vaka sayıları ve iyileşen insanların sayıları paralellik göstermektedir. Vefat eden insanların sayısı ise çok daha azdır.

Son iki grafik kıyaslandığı zaman son 10 günlük istatistiğin bütün süreçte benzer olduğu anlaşılmaktadır.

In [80]:
veri = turkiye.melt(id_vars="Tarih", value_vars=['Vefat','Iyilesen',  'Vaka' ],
                 var_name='Durum', value_name='Kişi Sayısı')

fig = px.area(veri, x="Tarih", y="Kişi Sayısı", color='Durum',
             title='11 Marttan 2 Temmuza Kadar Olan Vaka, Vefat ve İyileşen Hasta Durumları', 
             color_discrete_sequence = ['#B22222','#DAA520','#800080'])
fig.show()

Bu grafiğin kodlarında yer alan ‘dataframe.melt()’ fonksiyonu dataframe'deki verilerin analizini kolaylaştırabilmek için Python’ın Pandas Kütüphanesinde bulunan verileri yeniden şekillendirmeye yarayan bir fonksiyondur. Kodlarda kullanılmış olan bu ‘melt()’ fonksiyonu parametre olarak ‘id_vars, value_vars, var_name ve value_name’ özelliklerini almıştır. Burada ‘id_vars’ özelliğine değer olarak, liste, dizi ya da tanımlayıcı değişken olarak sütunlar verilebilmektedir. Dolayısıyla burada ‘Tarih’ sütunu verilmiştir. ‘value_vars’ özelliğine ise açılması gereken sütunlar verilmelidir. Eğer bir değer verilmezse ‘id_vars’ olmayan tüm sütunlar değer olarak atanmış sayılır. Kodlarda ise açılması istenen sütünlar ‘Vefat’, ‘Iyilesen’ ve ‘vaka’ şeklindedir. ‘var_name’; değişken sütunu için kullanılacak ismi ifade etmektedir ve burada tercihen ‘Durum’ değeri verilmiştir. ‘value_name’ özelliğine ise değer sütunu için kullanılacak isim yazılmaktadır. Bu kodlarda value_name için ‘Kişi Sayısı’ değeri verilmiştir. Kod satırında görüldüğü üzere Plotly Kütüphanesinde bulunan ‘px.area()’ fonksiyonu kullanılmıştır.

Bu grafik ve bir önceki grafik birebir aynısıdır ancak farklı bir yöntem ile oluşturulmuştur.

In [81]:
fig = go.Figure()
fig.add_trace(go.Scatter(x=turkiye['Tarih'], y=turkiye['GunlukVaka'], mode='lines+markers',marker_color='#FA8072',name='Günlük Yeni Vaka Sayısı'))

fig.add_trace(go.Scatter(x=turkiye['Tarih'], y=turkiye['GunlukOlen'], mode='lines+markers',marker_color='red',name='Günlük Vefat Sayısı'))

fig.add_trace(go.Scatter(x=turkiye['Tarih'], y=turkiye['Gunluk_Iyilesen'], mode='lines+markers',marker_color='green',name='Günlük İyileşen Sayısı'))

fig.update_layout(title_text='Türkiyeye Ait Günlük İstatistikler')
fig.show()

‘turkiye’ isimli veri setinde bulunan veriler ile gerekli hesaplamalar sonucu elde edilmiş olan günlük vaka sayıları, günlük vefat eden insanların sayısı ve günlük tedavi edilen insanların sayılarını aynı tarih aralığında gösterecek bir saçılma grafiği oluşturulmak üzere bir figür oluşturularak ‘go.scatter()’ fonksiyonu kullanılmıştır.

Bu grafik; bir önceki iki grafiğin yani "11 Marttan 2 Temmuza Kadar Olan Vaka, Vefat ve İyileşen Hasta Durumları" isimli iki grafik ile ile aynı günler içerisinde olan günlük vaka, günlük vefat eden ve günlük iyileşen insanlara ait verilerle oluşturulmuş bir başka grafiktir. Bu grafik oluşturulurken toplam sayıdan bir önceki toplam sayılar çıkarılarak günlük sayılar elde edilmiştir. Bu veriler doğrultusunda oluşturulmuştur. Mayıs ayının ilk haftasına kadar günlük vaka sayıları ve iyileşen sayıları birbirine yakındır. Daha sonra iki veri sayısında da azalma meydana gelmiştir ve paralellikleri devam etmiştir. Ancak Haziran ayının ikinci haftasında iyileşen sayılarında artış görülmüştür.

In [82]:
turkiye['Aktif'] = turkiye['Vaka'] - turkiye['Vefat'] - turkiye['Iyilesen']
values=[turkiye['Aktif'].iloc[-1], turkiye['Iyilesen'].iloc[-1], turkiye['Vefat'].iloc[-1]]
colors = ['yellow', 'darkpink', 'pink']

fig = go.Figure(data=[go.Pie(labels=['Aktif Hasta','İyileşenler','Ölümler'], values=values)])
fig.update_traces(hoverinfo='label+percent', textinfo='label+value', textposition="outside", textfont_size=20,
                  marker=dict(colors=colors, line=dict(color='#000000')))
fig.update_layout(title_text='Türkiye nin Vaka Dağılımı')
fig.show()

Burada bir pasta grafiği oluşturulmak üzere Plotly Kütüphanesinde bulunan ‘go.pie()’ metodu kullanılmıştır. Pastanın dilimlerini oluşturması üzere; ‘Aktif Hasta’, ‘İyileşenler’ ve ‘Ölümler’ değerlerini ifade eden veriler kullanılmıştır. ‘update_traces()’ fonksiyonunun aldığı parametrelerde ise ‘hoverinfo’ özelliğine verilmiş olan ‘label+percent’ değeri ile herhangi bir pasta diliminin üzerine gelindiği zaman çıkan bilginin yüzdelik değeri ve isminin çıkması sağlanmıştır. ‘textinfo’ özelliğine verilmiş olan ‘label+value’ değeriyle ise pasta diliminin ismi ve sayısal değerinin yazılması sağlanmıştır. ‘textposition’ özelliğine ‘outside’ değeri verilerek textinfo’ya verilmiş olan değerin pasta diliminin dışına yazulması sağlamıştır.

Bu pasta grafiği, 2 Temmuz gününe kadar olan Türkiye’nin vaka dağılımı hakkında bilgi vermektedir. Toplam iyileşen insanlar ve toplam vefat eden insanların toplam vaka sayısından çıkarılmasıyla aktif hasta olan insanların bilgisi elde edilmiştir. 2 Temmuz günü toplam vaka sayısı 202.284’tür. Toplam vaka sayısının yaklaşık %2,5’i vefat etmiş, %84,5’i iyileşmiş ve yaklaşık %10’u vefat etmiştir.

In [83]:
values=[turkiye['Vaka'].iloc[-1] -turkiye['Vaka'].iloc[-2],
        turkiye['Iyilesen'].iloc[-1] - turkiye['Iyilesen'].iloc[-2], 
        turkiye['Vefat'].iloc[-1] -turkiye['Vefat'].iloc[-2]]
colors = ['#228B22', '#FF1493', 'yellow']

fig = go.Figure(data=[go.Pie(labels=['Vaka','İyileşen','Ölen'],
                             values=values)])
fig.update_traces(hoverinfo='label+percent', textinfo='label+value', textfont_size=20,
                  marker=dict(colors=colors, line=dict(color='#778899', width=2)))
fig.update_layout(title_text='Günlük '+ veri['Tarih'].iloc[-1] +' Tarihi İstatistikleri')
fig.show()

Yine burada da bir figür oluşturularak ‘go.pie()’ fonksiyonu ile bir pasta grafiğinin oluşması beklenmektedir. Son iki satırdaki kodların bir önceki grafiğin kodlarından hiçbir farkı yoktur ancak ilk üç satırda yer alan ‘values’a verilen değerler incelendiği zaman; ‘turkiye’ isimli veri setinde son güne kadar olan toplam vaka, toplam iyileşen insan ve toplam vefat eden insan sayılarından son günden bir önceki güne kadar olan toplam vaka, toplam vefat eden ve toplam iyileşen insan sayıları çıkarılarak veri setinde bulunan son güne ait olan günlük vaka, günlük iyileşen ve günlük vefat eden insanların sayısı hesaplanmıtır. 'turkiye' isimli veri setine göre son günün 2 Temmuz 2020 günü olduğu görülmektedir. Dolayısı ile yukarıda görülen kodların sonucunda 2 Temmuz 2020 tarihine ait olan günlük vaka, vefat ve iyileşen sayılarının bilgisinin alındığı bir pasta grafik oluşmuştur.

Bu aşamadan sonra dörtlü veriler ele alınarak oluşturulan grafikler incelenmiştir:

In [84]:
fig = go.Figure()
fig.add_trace(go.Scatter(x=turkiye['Tarih'], y=turkiye['Vaka'],
                    mode='lines+markers',marker_color='red',name='Toplam Vaka'))

fig.add_trace(go.Scatter(x=turkiye['Tarih'], y=turkiye['Iyilesen'],
                    mode='lines+markers',marker_color='green',name='İyileşen Vakalar'))

fig.add_trace(go.Scatter(x=turkiye['Tarih'], y=turkiye['Vefat'],
                    mode='lines+markers',marker_color='Gray',name='Ölen Vakalar'))

fig.add_trace(go.Scatter(x=turkiye['Tarih'], y=turkiye['Aktif'],
                    mode='lines+markers',marker_color='#9400D3',name='Aktif Vakalar'))

fig.update_layout(title_text='11 Marttan 2 Temmuza Kadar Olan Covid-19 Sonucunda Oluşan İstatistikler')
fig.show()

Burada ‘turkiye’ isimli veri setinden birbirinden farklı dört veri seçilerek bir saçılma grafiği oluşması beklenmektedir.

11 Mart tarihinden 30 Hazirana kadar olan 112 günlük süre zarfında gerçekleşen vakalar ile oluşturulmuştur. Daha önce hasta olup iyileşenler, hala hasta olanlar ve hastalandıktan sonra ölen insanların tümü vakaları oluşturmaktadır. Grafik incelendiği zaman vakaları oluşturan bu üç durumla ilgili olarak hasta insanların zaman içerisinde gideren iyileştiği ve iyileşme oranının arttığı ve aktif hastaların zaman içerisinde ilk önce artış gösterirken zamanla azaldığı ancak hala bitmediği bilgisine ulaşılmaktadır. Kırmızı noktalar ile gösterilen toplam vaka verisi incelendiğinde ise zaman içerisinde toplam vaka başlarda hızlı bir artış gösterirken ilerleyen zaman zarfında yavaşlayarak artmaya devam etmiştir.

In [85]:
plt.figure(figsize=(14,4.5))
plt.subplot(2,2,1)
sns.boxplot(x=['Vaka'], data=turkiye, color='#aa2200')
plt.title('Vaka Artış', fontsize=14)
plt.subplot(2,2,2)
sns.boxplot(x=['Vefat'], data=turkiye, color='#666666')
plt.title('Vefat Artış', fontsize=14)
plt.subplot(2,2,3)
sns.boxplot(x=['Iyilesen'], data=turkiye, color='#00aa00')
plt.title('İyileşen Artış', fontsize=14)
plt.subplot(2,2,4)
sns.boxplot(x=['Test_Sayısı'], data=turkiye, color='#ff8800')
plt.title('Test Artış', fontsize=14)
plt.tight_layout()
plt.show()

Burada; birden fazla grafiği bir arada oluşturmak üzere Seaborn Kütüphanesinin ‘subplot()’ fonkisiyonu kullanılmıştır. Verilen parametrelere göre 2x2 büyüklüğünde dört farklı grafik oluşması istenmiştir. Subplot’ların almış olduğu üçüncü parametre ise grafiklerin numarasıdır. ‘data’ olarak ‘turkiye’ isimli veri setinin adı verilerek her bir grafik için bu veri setinde yer alan verilerin adları da x’e atanmıştır. Her biri için ‘color’ özelliğine farklı renk değerleri verilerek renkleri belirlenmiştir.

Sonuç olarak bu graifk; toplam vaka, vefat, iyileşen insanlar ve yapılan testlere ait veriler ile oluşturulmuş olan dört farklı ‘boxplot’ modeline aittir.

In [86]:
f,ax = plt.subplots(figsize=(12,6))
sns.heatmap(turkiye.corr(), annot=True, linewidths=0.5,linecolor="salmon", fmt= '.1f',ax=ax)

plt.title("Tüm Değişkenler Arasındaki Doğrusal İlişkinin Yönünü ve Gücünü Gösteren Isı Haritası", size=20)
plt.show()

Burada dataframe’de yer alan tüm verileri yani tüm sütunları içeren bir ısı harita oluşturmak üzere yazılmış Seaborn Kütüphanesine ait olan ‘heatmap()’ fonksiyonuna ait kodları içermektedir. Kod yapısı incelendiği zaman; ‘annot’ özelliğine ‘True’ değeri verilmiştir. Bu sayede harita üzerinde yer alan kutucukların üzerine dataframe'de yer alan değerler pivot tablosuna eklenmiş hale gelmiştir. ‘linewidth’ özelliği kullanılarak harita üzerindeki değerlerin arasındaki çizginin kalınlığı 0.5 olarak belirlenmiştir.’linecolor’ özeliiğine verilen değer ile de çizgilerin rengi belirlemiştir.

Bu grafik modeli tüm değişkenlere ait verileri kapsayan ve bu veriler arasındaki doğrusal ilişkinin yönünü ve gücünü belirlemek amacıyla oluşturulmuş olan bir ‘heatmap’ yani bir sıcaklık haritasıdır.

In [87]:
sns.pairplot(turkiye)
Out[87]:
<seaborn.axisgrid.PairGrid at 0x1b337ab7f48>

Bu grafik modeli ise tıpkı sıcaklık haritasında olduğu gibi dataframe'de yer alan tüm durumların grafiklerini aynı anda çıkarmaya yarayan Seaborn kütüphanesine ait olan 'pairplot()' fonksionu ile oluşturulmuş bir grafiktir. Parametre olarak içerisine dataframe'i almıştır ancak özelleştirilebilmektedir. Grafikler net olmasa bile yakınlaştırılarak yakından incelenebilmektedir.

In [88]:
testArtis_oran_graf = go.Scatter(
    x = turkiye.Tarih[-30:],
    y = turkiye["Vaka"][-30:],
    mode = "lines+markers",
    name = "Vaka",
    marker = dict(color = "rgba(247, 42, 0, 1)", size=10),
    text = turkiye["Vaka"][-114:]
)



vaka_oran_graf = go.Scatter(
    x = turkiye.Tarih[-30:],
    y = turkiye["Iyilesen"][-30:],
    mode = "lines+markers",
    name = "İyileşen",
    marker = dict(color = "rgba(62, 193, 0, 0.9)", size=10),
    text = turkiye["Iyilesen"][-114:]
)

data2 = [testArtis_oran_graf,vaka_oran_graf]

layout = dict(
    title = "Son 30 Günün Test Artış Oranı ve Vaka Artış Oranı",
    xaxis = dict(title = "Tarih"),
    yaxis = dict(title = "Oran"),
    xaxis_tickangle = -45
)

fig = dict(data=data2,layout=layout)
iplot(fig)
In [89]:
labels = 'Ölüm', 'İyileşen', 'Aktif Vaka', 'Toplam Vaka',
sizes = [2, 35, 13, 50]
explode = (0.3, 0.1, 0.2, 0.1)  

fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels, explode=explode, autopct='%1.1f%%', 
        pctdistance=0.6, labeldistance=1.1, 
        textprops={'fontsize': 18,'color':"b"},
        radius=1.5, shadow=True, startangle=270, rotatelabels=False
       )

ax1.set_title("Toplam",color='c',size=26, x = 0.4, y = 1.3);
plt.legend(loc="center right",bbox_to_anchor=(1.3, 0, 0.5, 3))
plt.show()

Bu pasta grafiği Matplotlib kütüphanesi ile manuel olarak oluşturulmuştur. Mevcut bilgiler manuel olarak girilerek pasta grafik haline getirilmiştir. Burada istenen renk ayarlamaları yapılıp istenen değerler girilmiştir ve 'explode' özelliğine istenen değerler sırası ile girilerek pasta dilimlerinin dışarı taşma oranı ayarlanmıştır

In [90]:
plt.figure(figsize=(30,10))
sns.barplot(x=turkiye['Tarih'], y=turkiye['Vaka'])
plt.xticks(rotation= 90)
plt.xlabel('Tarih', size=20)
plt.title('Başlangıçtan Bu Yana Tüm Günlere Ait Günlük Vaka Sayıları',fontsize = 40,color='#FF1493')
plt.ylabel('Kişi Sayısı', size=20)
plt.grid()

Bu grafik ise daha önce Plotly Kütüphanesinin kullanılması ile oluşturulmuş olan ve 'turkiye' isimli veri setindeki 'Vaka' verisinin kullanılması ile oluşturulan çubuk grafiğin aynısıdır. Ancak burada Python2ın Matplotlib Kütüphanesi kullanımıştır. Plotly ile kıyaslandığı zaman daha kolay ancak daha uzun kod satırları ile oluşturulup aynı bilgilerin edinilebildiği anlaşılmaktadır.

In [91]:
plt.figure(figsize=(16, 9))

plt.stem(turkiye.Tarih, turkiye.Vaka,use_line_collection=True)

plt.title('Aktif Vakalar', size=30)

plt.xlabel('Tarih', size=20)
plt.ylabel('Kişi Sayısı', size=20)


plt.xticks(size=10,rotation=90)
plt.yticks(np.arange(0, 100000, 10000),size=20)


plt.show()

Bu grafik de daha önce aynısı oluşturulmuş olan Aktif Hasta hakkında bilgi veren bir grafik modelidir yöntemler ve tasarımlar değişse de edinilen bilgiler aynıdır.

11 Mart’tan 2 Temmuz’a kadar olan 114 günlük süreçte ortaya çıkan tüm bu istatistiklerin sonucunda görülüyor ki; Türkiye genelinde zaman içerisinde vaka sayıları artmış ve artışı sabit bir hal almıştır. Vefat sayılarında düşüş görülmüştür ancak sona yaklaştığı pek görülmemektedir. Tedavi edilen hastaların sayısı günlük gelen vaka sayılarına oranla daha fazladır ve günlük yapılan testlerde sonucu pozitif çıkan insanların sayısı zamanla azalmıştır

Bu aşamadan sonra 'İl Bazında Covid-19 İstatistikleri' incelenmiştir.

İllere Göre Covid-19 Araştırması sonucu elde edilmiş şehir, vaka, yüz ölçümü ve nüfus bilgileri ile alakalı “Sehirlere-Göre-Vaka-Verisi.csv” adlı veri seti kullanılmıştır. Aşağıda gerçekleşen tüm işlemler bu veri setinde yer alan verileri içermektedir. Şehirler Türkiye’ye bağlı olan 81 ile aittir.

İlk olarak söz konusu veri seti Pandas Kütüphanesinin sayesinde eklemiştir. ‘sehirler’ yazıp shift+enter kısa yolu ile bu veri setine ait tabloyu görmek mümkündür.

In [92]:
sehirler = pd.read_csv("../Veri Setleri/Sehirlere-Göre-Vaka-Verisi.csv")

‘sehirler’ isimli veri seti 81 satır ve 4 sütundan oluşmak üzere; csv dosyasında yer alan “Province, Number of Case, area ve population” başlıkları altında veriler yer almaktadır. Ancak bu başlıklar ‘rename()’ fonksiyonuyla “Şehir, Vaka, Yüz Ölçümü ve Nüfus” olarak değiştirilmiştir. Vaka sayıları bakanlık tarafından güncellenmediği için eskidir (3 Nisan 2020 tarihli veriler). Tüm bu verilerin sonucunda gerekli işlemler gerçekleştirilerek bir takım istatistikler çıkarılmıştır.

In [93]:
sehirler.rename(columns = {"Province":"Şehir", "Number of Case":"Vaka", "area":"Yüz_Ölçümü", "population":"Nüfus"}, inplace=True)

#Türkiye’nin 81 ilinin yer aldığı ‘sehirler’ isimli veri setine ait verilerin yer aldığı tablo aşağıdaki gibidir

In [94]:
sehirler
Out[94]:
Şehir Vaka Yüz_Ölçümü Nüfus
0 Adana 241 13844 2237940
1 Adiyaman 32 7337 626465
2 Afyonkarahisar 18 14016 729483
3 Agri 31 11099 536199
4 Aksaray 5 7659 416367
... ... ... ... ...
76 Usak 40 5555 370509
77 Van 24 20921 1136757
78 Yalova 64 798 270976
79 Yozgat 15 13690 421200
80 Zonguldak 197 3342 596053

81 rows × 4 columns

Türkiye’nin 81 iline ait ‘sehirler’ isimli veri seti ‘sort_values()’ fonksiyonu ile ‘by’ özelliğine ‘Vaka’ değeri verilerek, vaka sayısı büyükten küçüğe doğru sıralanacak şekilde yeni tablo oluşturulmuştur.

In [95]:
sehirler.sort_values(by=["Vaka"], ascending=False, inplace=True)
In [96]:
sehirler
Out[96]:
Şehir Vaka Yüz_Ölçümü Nüfus
39 Istanbul 12231 5461 15519267
40 Izmir 1105 11891 4367251
6 Ankara 860 25632 5639076
52 Konya 601 40838 2232374
51 Kocaeli 500 3397 1953035
... ... ... ... ...
4 Aksaray 5 7659 416367
53 Kutahya 5 11634 579257
8 Ardahan 5 4934 97319
19 Burdur 3 7175 270796
35 Hakkari 2 7095 280991

81 rows × 4 columns

Şimdi tablo referans alınarak bir takım grafikler elde edilecektir. Bu grafikler verilerin görsel halidir.

Şehirlere göre ‘Vaka’ verileri incelenecek olursa:

In [97]:
fig = px.bar(sehirler, x="Şehir", y="Vaka", title='81 İle Ait Vaka Sayıları')
fig.update_layout(barmode='group')
fig.update_traces(marker_color='#DAA520', marker_line_color="#556B2F",)
fig.show()

Yukarıda yer alan kodlara göre; daha önce de yapılan bir başka grafik gibi ‘px.bar()’ fonksiyonu kullanılarak X ekseninde ‘Şehir’ verisi ve Y ekseninde ‘vaka’ verisi olacak şekilde oluşturulmak istenen bir çubuk grafik modeline aittir. Bunun haricinde kodlarda çubukların rengi ve çubukların çerçevesinin renklerinin ayarlandığı görülmektedir. 'title' özelliği ile de başlık eklenmiştir.

Bu grafik; Türkiye’nin 81 iline ait olan toplam vaka sayılarını gösteren bir grafiktir. Grafikten çok net bir şekilde anlaşılacağı üzere en çok vaka İstanbul’da görünmüştür.

In [98]:
fig = px.bar(
    sehirler[0:5],
    x = "Şehir",
    y = "Vaka",
    title = "En Yüksek Vaka Sayısına Sahip İlk 5 Şehir"
)
fig.update_layout(barmode="group")
fig.update_traces(
    marker_color='rgba(255,140,0,1)',
    marker_line_color="rgba(0,128,0, 0.3)",
    marker_line_width=5
    
)
fig.show()

Bu grafiğe ait kodlar, ‘px.bar()’ fonksiyonu ile ilk beş ‘Şehir’ ve ilk beş ‘vaka’ verisinin yer aldığı bir çubuk grafik modeline ait kodlar iken; Aşağıda yer alan kodlar ise, ilk beş ‘Şehir’ ve ilk beş ‘Vaka’ verisinin yer aldığı ve ‘px.pie()’ fonksiyonunun kullanıldığı kodlardır. Pasta grafiği oluşturulurken, ilk beş veri ‘dataframe.head()’ fonksiyonu ile çekilmiştir. Bilindiği üzere ‘head()’ foksiyonu dataframe’de yer alan ik 5 veriyi listemekteydi. ‘update_traces()’ fonksiyonu ile pasta dilimlerinde ne tür bilginin hangi konumlarda yazacağı belirlenmiştir.

Yukarıda yer alan kodların sonucunda en yüksek vaka sayısına sahip ilk 5 şehir çubuk grafik ile gösterilmiştir. Fakat aşağıda yer alan kodlar sayesinde ise en yüksek vaka sayısına sahip ilk beş şehir pasta grafiği olarak görsel hale getirilmiştir.

In [99]:
fig = px.pie(sehirler.head(),values = "Vaka",names = "Şehir",title = "En Yüksek Vaka Sayısına Sahip 5 Şehir")
fig.update_traces(textposition="inside", textinfo="percent+label" , textfont_size=30)
fig.show()

Görüldüğü üzere iki grafikten de İstanbul şehrinin açık arayla daha fazla vaka sayısına sahip olduğu görülmektedir.

In [100]:
fig = px.bar(
    sehirler[5:15],
    x = "Şehir",
    y = "Vaka",
    title = "İlk Beş Şehirden Sonraki En Yüksek Vaka Sayısına Sahip 10 Şehir")
    
fig.update_layout(barmode="group")
fig.update_traces(
    marker_color='rgba(255,69,0,1)',
    marker_line_color="rgba(255,69,0, 0.6)",
    marker_line_width=5
)
fig.show()

Yukarıdaki kodlar; ‘px.bar()’ fonksiyonunun ve aşağıdaki kodlar da ‘px.pie()’ fonksiyonunun yer aldığı bir önceki kodların çok benzeridir. Bu iki tabloda yer alan kodlarda dikkat çeken nokta; ‘sehirler’ isimli dataframe’in yanına ‘[5:15]’ yazılmış olmasıdır. Bu ifade ile ‘sehirler’ isimli dataframe’den ilk beş veriden sonra on beşinci veriye kadar olan verilerin çekilmesini sağlayacaktır. Bununla ilgili olarak oluşması beklenen çubuk grafik yukarıda ve pasta grafiğine ait model de aşağıda yeralmaktadır.

In [101]:
sehirlerX = sehirler[5:15]


fig = px.pie(
    sehirlerX,
    values = "Vaka",
    names = "Şehir",
    title = "İlk Beş Şehirden Sonraki En Yüksek Vaka Sayısına Sahip 10 Şehir",
    hover_data =["Vaka"]
)
fig.update_traces(textposition="inside", textinfo="percent+label")
fig.show()

Yukarıda yer alan son iki grafik; daha önce bahsi geçen en yüksek vaka sayısına sahip ilk beş şehirden sonra gelen ilk 10 şehre ait vaka sayıları ile oluşturulmuş iki grafik modelidir. Çubuk grafikte şehirlerdeki vaka sayılarının bilgisi öğrenilebiliyorken, Pasta grafiğinde şehirlerin yüzdelik dilimleri hakkında bilgi alınabilmektedir.

In [102]:
sehirlerTum = sehirler[5:]


fig = px.pie(
    sehirlerTum,
    values = "Vaka",
    names = "Şehir",
    title = "İlk Beş Şehirin Dışındaki Şehirlerdeki Vaka Sayısı",
    hover_data =["Vaka"]
)
fig.update_traces(textposition="outside", textinfo="percent+label")
fig.show()

Yukarıda görüldüğü üzere ‘px.pie()’ ve aşağıda görüldüğü üzere ‘px.bar()’ ve fonksiyonlarının kullanıldığı kod satırları yer almaktadır. Bu kodlarda ‘sehirler’ isimli dataframe’in yanına yazılmış olan ‘[5:]’ ifadesi ile dataframe'de yer alan ilk beş veri haricinde kalan tüm verilerin çekilmesi istenmiştir. 81 adet verinin olduğu göz önünde bulundurulursa dataframe'de olan ilk beş veriden sonra gelen 76 veri yani X değerine verilmiş olan ‘Şehir’ verisi kullanılarak bir çubuk grafik ve pasta grafiği oluşması beklenmiştir. Ortaya çıkan çubuk grafik aşağıda, pasta grafiği ise yukarıda yer almaktadır.

In [103]:
fig = px.bar(
    sehirler[15:],
    x = "Şehir",
    y = "Vaka",
    title = "İlk Beş Şehirin Dışındaki Şehirlerdeki Vaka Sayısı",
    
)
fig.update_layout(barmode="group")
fig.update_traces(marker_color='rgb(255,105,180)', marker_line_color="rgb(25,25,112)",)
fig.show()

Son iki grafik; ilk beş şehirden sonra geriye kalan tüm şehirlere ait toplam vaka sayıları hakkında bilgi vermektedir. Bu iki grafik kıyaslandığı zaman pasta grafiği yüzdelik oranları gösterse de 76 veri bir arada incelendiği zaman karmaşıklık ortaya çıktığı görülmektedir. Bu sebeple çubuk grafiği daha anlaşılır bilgi vermektedir.

In [104]:
fig = px.bar(
    sehirler[70:80],
    x = "Şehir",
    y = "Vaka",
    title = "En Az Vakaya Sahip 10 Şehir")
fig.update_layout(barmode="group")
fig.update_traces(
    marker_color='#1E90FF',
    marker_line_color="rgba(153, 83, 36, 5)",
)
fig.show()

Son olarak; yukarıda çubuk grafiği oluşturulmak üzere ‘px.bar()’ fonksiyonu kullanıldığı görülmektedir. Dataframe’in yanına yazılmış olan ‘[70:80]’ ifadesi ile veri setinde yer alan 70 ve 80 arasındaki veriler çekilmiştir. 0-80 arasında bulunan 81 veriden sondan 10 verinin çekilmesi sağlanacaktır.

Aşağıda yer alan kodlarda ise ‘px.pie()’ fonksiyonu kullanılmıştır. Bir önceki kodlarda sondan on verinin çekilme işlemi burada dataframe’in yanına yazılmış olan ‘[71:]’ ifadesi ile sağlanmıştır. Bu ifade ise veri setinde yer alan 71. Veriden itibaren son veriye kadar verilerin çekilmesini sağlayacaktır.

‘[70:80]’ ve ‘[71:]’ ifadeleri birbiri yerine kullanılabilmektedir. Burada kullanım çeşitliliği açısından ikisi de kullanılarak gösterilmiştir.

En az vakaya sahip 10 şehire ait çubuk grafiği yukarıda, pasta grafiği ise aşağıda görülmektedir.

In [105]:
sehirlerX = sehirler[71:]


fig = px.pie(
    sehirlerX,
    values = "Vaka",
    names = "Şehir",
    title = "En Az Vaka Sayısına Sahip 10 Şehir",
    hover_data =["Vaka"]
)
fig.update_traces(textposition="inside", textinfo="percent+label")
fig.show()

En az vakaya sahip olan şehirlere ait bu iki grafiğe göre; Burdur’da toplamda 3 vaka görülmesi sonucu Burdur şehri en az vakaya sahip olmuştur.

Tüm bu görselleştirmelerin sonucu olarak; Türkiye’nin illerini kapsayan “Şehirlere Göre Covid-19 Araştırması” ile özellikle nüfusu fazla olan şehirlerde vaka oranının daha yüksek olduğu görülmektedir. Vaka sayılarını il bazında düşürebilmek için nüfus azalmasa bile kalabalık şehirlerdeki insanların birbiri ile temaslarını azaltması ve kurallara uyum sağlaması sonucu vaka sayılarında düşüş gözlenebilme ihtimali vardır.

Burada elde edilen istatistiksel verilerden Koronavirüsü sebebiyle hasta olan, hayatını kaybeden, hastalandıktan sonra tedavi edilen insanların günlük ve toplam sayıları hakkında bilgiye, günlük ve toplam yapılan test sayılarına, bu bilgiler doğrultusunda vaka, vefat eden ve yapılan test oranlarına dair bilgiler elde edilmiştir. Virüsün hangi zaman diliminde zirve yaptığı ve ne zaman düşüşe geçtiği, yapılan testlerin sonucunda kaç kişinin pozitif çıktığı hakkında bilgiler de oluşturulmuş grafiklerden öğrenilebilmektedir. Bunların haricinde, grafikler; günlük vakalar ve iyileşen insanlar arasında ilişki hakkında, toplam yapılan test oranı ve vaka oranı arasındaki ilişki hakkında, vefat eden insanlar, iyileşen insanlar ve yeni hasta olan insanlar hakkında bilgiler de vermektedir.

İl bazında yapılan istatistiklerin sonucunda ise 81 ile ait vaka sayıları ile ilgili olarak; tüm şehirlere ait toplam vaka sayıları hakkında, en çok vakanın görüldüğü ilk beş şehir hakkında, ilk beş şehrin peşi sıra gelen en çok vakanın görüldüğü on şehir hakkında, ilk beş şehrin dışında kalan 76 şehrin toplam vaka sayıları ve son olarak Türkiye’de en az vakanın görüldüğü on şehrin vaka sayıları hakkında bilgi alabilmek üzere bar ve pasta grafikleri oluşturulmuştur.

Korona Virüsü ile ilgili ortaya çıkan istatistikler Veri Bilim’inin önemini bir kez daha ortaya koymuştur. T.C. Sağlık Bakanlığı’dan temin edilen doğru bilgiler tek başlarına sayıdan başka bir şey ifade etmemektedir. Bu verilerden sonuçlar çıkarılması için Veri Analizi yapmak işleri daha da kolay hale getirmiştir. Yalnızca Covid-19 araştırmasında değil günlük karşılaşılan birçok durumda Veri Analizi büyük bir öneme sahiptir ve çoğu zaman işleri daha kolay hale getirdiği için pek çok alanda kullanılmaktadır.

Sağlıcakla Kalın!