Merhaba, veri bilimi yolculuğumuzdaki ilk önemli deneme projemiz olan COVID-19 Veri Analizi Görselleştirme ile karşınızdayız.
Bu projemizde 2020 yılından itibaren dünyayı etkisi altına alan COVID-19 pandemisinin verilerinin incelenmesi sürecini gerçekleştirdik. Projede kullandığımız kütüphaneleri, bazı önemli grafikleri ve proje kaynaklarını yazının devamında bulacaksınız. Hadi başlayalım.
İlk olarak kullanacağımız kütüphaneleri indireceğiz.
!pip install folium
!pip install plotly
Folium kütüphanesi, Python programcılarının interaktif ve özelleştirilebilir haritalar oluşturmasına olanak tanıyan bir Python kütüphanesidir. Bu kütüphane, haritaların yanı sıra grafikler, metinler ve diğer öğeler ekleyebilmenizi sağlar. Folium, Leaflet.js kütüphanesini temel alır ve kullanımı oldukça basittir.
Folium’ün popüler bir kullanımı, veri görselleştirmesi yaparken coğrafi verileri haritalara yerleştirmektir. Örneğin, verilerinizdeki farklı şehirlerin veya bölgelerin harita üzerinde na sıl dağıldığını göstermek için Folium kullanabilirsiniz.
Folium, Python’da harita tabanlı görselleştirmeler yapmanın hızlı ve etkili bir yolunu sunar.
Projemizde Covid-19 pandemisinin ülkeler üzerindeki etkisini daha efektif bir biçimde görebilmemiz amacıyla folium kütüphanesi kullanılarak veriler dünya haritası üzerinde gösterilmiştir.
Covid-19 Veri Setini Anlama
Kullandığımız kütüphanelerin tanımlama süreci
import plotly.express as px
import plotly.graph_objects as go
import plotly.figure_factory as ff
from plotly.subplots import make_subplots
import folium
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import math
import random
from datetime import timedelta
import warnings
warnings.filterwarnings('ignore')
# color pallette
cnf = '#393e46'
dth = '#ff2e63'
rec = '#21bf73'
act = '#fe9801'
Veri Seti Hazırlama
COVID-19 vakalarının verilerini içeren github deposundan veri çekmek için aşağıdaki işlemi gerçekleştiriyoruz.
!git clone https://github.com/laxmimerit/Covid-19-Preprocessed-Dataset
Az önce yüklediğimiz veri dosyalarının okuma işlemlerini aşağıdaki kod satırlarını yazarak gerçekleştiriyoruz
df = pd.read_csv('Covid-19-Preprocessed-Dataset/preprocessed/covid_19_data_cleaned.csv', parse_dates=['Date'])
country_daywise= pd.read_csv('Covid-19-Preprocessed-Dataset/preprocessed/country_daywise.csv', parse_dates=['Date'])
countrywise = pd.read_csv('Covid-19-Preprocessed-Dataset/preprocessed/countrywise.csv')
daywise = pd.read_csv('Covid-19-Preprocessed-Dataset/preprocessed/daywise.csv', parse_dates=['Date'])
Veri dosyalarını okumak için gerekli işlemleri tanımladık. Şimdi verileri inceleyebilir ve analiz edebiliriz. İlk olarak, ülkelere göre vakalarla ilgili genel bilgileri içeren bir tablo oluşturalım.
countrywise
Ülke Listesi
(#5 Ağustos itibariyle iyileşen sayısı veri setinde yer almadığından, grafik ve tablolarda iyileşen 5 Ağustos 2021 itibariyle 0 olarak görünmektedir).
Dünya Çapında Toplam Teyit Edilen, Kurtarılan ve Ölenler
Şimdi dünya genelindeki toplam vaka, ölüm ve iyileşme verilerini incelemeye geçelim.
Pandemi verilerinin girilmeye başlandığı 22 Ocak 2020 tarihinden itibaren ilk beş günün günlük vaka verilerine göz atalım. Bunun için aşağıdaki kod satırını yazacağız;
confirmed.head()
Bu veri projesini gerçekleştirdiğimiz 26 Ocak 2022 tarihini içeren verilerin son beş gününü analiz edecek olursak; bu projeyi gerçekleştirdiğimiz gün ile dünya genelindeki toplam vaka sayısını gözlemlemek için aşağıdaki kod satırını yazacağız;
confirmed.tail()
Folium Maps
İncelediğimiz veri setlerinin folium haritalarını oluşturarak görselleştirme süreçlerine geçelim.
Folium Haritalarında Dünya Çapındaki Vakalar
temp = df[df['Date']== max (df['Date'])]
temp
temp= df[df['Date']== max (df['Date'])]
m= folium.Map(location=[0,0], tiles = 'cartodbpositron', min_zoom = 1, max_zoom=5, zoom_start=1 )
for i in range(0, len(temp)):
folium.Circle(location=[temp.iloc[i]['Lat'], temp.iloc[i]['Long']],color = 'crimson', fill = 'crimson',
toolip = '<li><bold> Country: ' + str(temp.iloc[i]['Country'])+
'<li><bold> Province : '+ str(temp.iloc[i]['Province/State'])+
'<li><bold> Confirmed: ' + str(temp.iloc[i]['Confirmed'])+
'<li><bold> Deaths: ' + str(temp.iloc[i]['Deaths']),
radius = int(temp.iloc[i]['Confirmed'])**0.5).add_to(m)
m
Choropleth Haritası ile Teyit Edilmiş Vakalar
Plotly kütüphanesinin bir özelliği olan Choropleth haritası üzerinde geçmişten günümüze değişen bir animatik oluşturmak mümkündür. Choropleth Haritası, renkli çokgenlerden oluşan bir haritadır. Bir niceliğin uzamsal değişimlerini temsil etmek için kullanılır.
Öncelikle choropleth haritasını oluşturmak için ülke verilerini tanımlayalım ve zaman değişimini yıl, ay ve gün olarak belirleyelim.
First, let’s define the country data to create the choropleth map and determine the time change as year, month and day.
fig = px.choropleth(country_daywise, locations = 'Country', locationmode='country names', color = np.log(country_daywise['Confirmed']),
hover_name='Country', animation_frame=country_daywise['Date'].dt.strftime('%Y-%m-%d'),
title='Cases over time', color_continuous_scale=px.colors.sequential.Inferno)
fig.update(layout_coloraxis_showscale= True)
fig.show()
Evet, burada bir choropleth haritası gözlemliyoruz. Verilerin yüklenmeye başladığı ilk tarihten günümüze kadar vakaların değişimine göre renk değişimi ile netleşen bir harita oluşturduk.
Statik Colormap ile Onaylanmış ve Ölüm Vakaları
Şimdi, vaka ve ölüm verilerinin choropleth harita üzerinde renkli bir biçimde gösterilmesi işlemini gerçekleştirelim.
fig_c = px.choropleth(countrywise, locations='Country', locationmode='country names',
color = np.log(countrywise['Confirmed']), hover_name = 'Country',
hover_data= ['Confirmed'])
temp = countrywise[countrywise['Deaths']>0]
fig_d = px.choropleth(temp, locations='Country', locationmode='country names',
color = np.log(temp['Deaths']), hover_name = 'Country',hover_data= ['Deaths'])
fig = make_subplots(rows=1, cols = 2, subplot_titles=['Confirmed', 'Deaths'],
specs=[[{'type' : 'choropleth'}, {'type': 'choropleth'}]])
fig.add_trace(fig_c['data'][0], row = 1, col = 1)
fig.add_trace(fig_d['data'][0], row = 1, col = 2)
fig.show()
Yukarıda oluşturduğumuz renk haritaları bize vaka ve ölüm sayılarına göre belli eşiklere göre renklendirilmiş ülkeleri gösteriyor. Bu haritaları incelediğimizde en fazla Kovid-19 vakasının görüldüğü ülkenin Amerika Birleşik Devletleri olduğunu gözlemliyoruz.
Tree Map Analiz
Ağaç haritası, bir veri kümesinin her öğesini bir dikdörtgen olarak görüntüler. Her bir unsurun bütüne oranla ne kadar orantıya sahip olduğunu görmemizi sağlar. Bu haritalar python’un matplotlib kütüphanesi ile uygulanabilir.
Öncelikle ölüm vakalarını gözlemleyeceğimiz ağaç haritasını oluşturalım.
Ölüm Vakaları
full_latest = df[df['Date'] == max(df['Date'])]
fig = px.treemap(full_latest.sort_values(by = 'Deaths', ascending = False).reset_index(drop = True),
path = ['Country', 'Province/State'], values = 'Deaths', height = 700,
title = 'Number of Deaths Cases',
color_discrete_sequence = px.colors.qualitative.Dark2)
fig.data[0].textinfo = 'label+text+value'
fig.show()
Oluşturduğumuz ağaç haritasına göre ABD, Brezilya, Rusya ve Hindistan’ın toplam ölüm vakalarına oranla ölüm vakalarındaki büyüklüğünü görüyoruz.
Teyit Edilmiş Vakalar
İkinci olarak dünyadaki toplam Covid-19 vakalarını treemap haritalar üzerinde gösterme işlemini gerçekleştirelim.
full_latest = df[df['Date'] == max (df['Date'])]
fig = px.treemap(full_latest.sort_values(by = 'Confirmed', ascending = False).reset_index(drop = True),
path = ['Country', 'Province/State'], values = 'Confirmed', height = 700,
title = 'Number of Confirmed Cases',
color_discrete_sequence = px.colors.qualitative.Dark2)
fig.data[0].textinfo = 'label+text+value'
fig.show()
Oluşturduğumuz vaka ağacı haritasında Amerika Birleşik Devletleri, Hindistan, Brezilya, Fransa ve Birleşik Krallık’ta vaka sayısının toplam vaka sayısına göre fazla olduğunu gözlemleyebiliyoruz.
Covid-19 ve Diğer Benzer Salgınlar
Wikipedia kaynaklarından edinilen bilgiye göre, COVID-19 Pandemisi ile bugüne kadar dünyada görülen diğer pandemilerin vaka ve ölüm oranlarının karşılaştırılması süreci;
epidemics = pd.DataFrame({
'epidemic' : ['COVID-19', 'SARS', 'EBOLA', 'MERS', 'H1N1'],. 'start_year' : [2019,2002,2013,2012,2009],
'end_year' : [2020, 2004,2016,2020,2010],
'Confirmed' : [full_latest['Confirmed'].sum(),8422,28646,2519,6724149],
'Deaths' : [full_latest['Deaths'].sum(),813,1323,866,19654]
})
epidemics['mortality'] = round((epidemics['Deaths']/epidemics['Confirmed'])*100,2)
epidemics.head()
#Bar Chart
temp = epidemics.melt(id_vars = 'epidemic', value_vars=['Confirmed', 'Deaths','mortality'],var_name = 'Case', value_name = 'Value')
fig = px.bar(temp, x = 'epidemic', y= 'Value', color = 'epidemic', text = 'Value', facet_col = 'Case',
color_discrete_sequence=px.colors.qualitative.Bold)
fig.update_traces(textposition = 'outside')
fig.update_layout(uniformtext_minsize = 8, uniformtext_mode = 'hide')
fig.update_yaxes(showticklabels = False)
fig.layout.yaxis2.update(matches = None)
fig.layout.yaxis3.update(matches = None)
fig.show()
Yukarıda oluşturduğumuz çubuk grafiğe bakıldığında COVID-19 pandemisinin diğer pandemilere göre çok daha fazla bulaştığı ve vaka sayısında zirvede olduğu görülmektedir. Böyle bir bulaşma oranı ölüm vakalarına da yansımış ve COVID-19 pandemisi karşılaştırdığımız diğer pandemilerden daha fazla can almıştır. Ancak ölüm oranlarına baktığımızda MERS virüsü ölüm oranlarında diğer pandemileri geride bırakmıştır. Bu durumda COVID-19 pandemisinin ölüm oranı karşılaştırdığımız diğer pandemilerden daha düşüktür.
Github repo
Projenin detaylı kısmına aşağıda linki verilecek github repolarından ulaşabilirsiniz. Projelerimizi sizlerle paylaşmak bizim için çok heyecan verici. Yazılıma yeni başlayan kişilerin bu kaynaklardan faydalanacağını ve onlar için iyi bir rehber olacağını umuyoruz. Yazılım konusunda uzman ve belli bir seviyenin üzerinde olan değerli okurlarımızın bize verecekleri tavsiyeleri memnuniyetle dinleyeceğiz.
“Veriyi alma becerisi – onu anlayabilme, işleyebilme, ondan değer çıkarabilme, görselleştirebilme ve iletebilme – önümüzdeki on yıllarda son derece önemli bir beceri olacak.”
Hal Varian, Chief Economist, Google
Yorumlar (1)
on line pharmacysays:
Ekim 27, 2023 at 12:38 pmExcellent write-up. I certainly appreciate this site. Stick with it!