Site Loader

pythonearth.com da Merhabalar arkadaşlar bu yazıda Çin’de başlayıp tüm dünyayı ekonomik, politik, sosyal ve psikolojik olarak etki altına alarak pek çok aşamada değişim ve dönüşüme sebep olan corona virüs verilerine yönelik belirli analizler yapacağız. Gündemin ana faktörü olduğu için veri analizi ve incelemesi alanında yoğunlaşanlar adına faydalı olacağını düşünüyoruz, öyleyse başlayalım.

Kütüphaleri Projeye Dahil Etme Verisetini Okuma

import numpy as np 
import pandas as pd 
import seaborn as sns 
import plotly.express as px 
import plotly.graph_objects as go 

covid = pd.read_csv('covid_19_clean_complete.csv')

 

Veriseti Genel Bakış

covid['Country/Region'].nunique()
187
max(covid['Date'])
'2020-07-10'
min(covid['Date'])
'2020-01-22'
covid['Date'].nunique()
171
covid.loc[covid['Province/State']!='None']['Country/Region'].unique()
array(['Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola',
       'Antigua and Barbuda', 'Argentina', 'Armenia', 'Australia',
       'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Bangladesh',
       'Barbados', 'Belarus', 'Belgium', 'Benin', 'Bhutan', 'Bolivia',
       'Bosnia and Herzegovina', 'Brazil', 'Brunei', 'Bulgaria',
       'Burkina Faso', 'Cabo Verde', 'Cambodia', 'Cameroon', 'Canada',
       'Central African Republic', 'Chad', 'Chile', 'China', 'Colombia',
       'Congo (Brazzaville)', 'Congo (Kinshasa)', 'Costa Rica',
       "Cote d'Ivoire", 'Croatia', 'Cuba', 'Cyprus', 'Czechia', 'Denmark',
       'Greenland', 'Djibouti', 'Dominican Republic', 'Ecuador', 'Egypt',
       'El Salvador', 'Equatorial Guinea', 'Eritrea', 'Estonia',
       'Eswatini', 'Ethiopia', 'Fiji', 'Finland', 'France', 'Gabon',
       'Gambia', 'Georgia', 'Germany', 'Ghana', 'Greece', 'Guatemala',
       'Guinea', 'Guyana', 'Haiti', 'Holy See', 'Honduras', 'Hungary',
       'Iceland', 'India', 'Indonesia', 'Iran', 'Iraq', 'Ireland',
       'Israel', 'Italy', 'Jamaica', 'Japan', 'Jordan', 'Kazakhstan',
       'Kenya', 'South Korea', 'Kuwait', 'Kyrgyzstan', 'Latvia',
       'Lebanon', 'Liberia', 'Liechtenstein', 'Lithuania', 'Luxembourg',
       'Madagascar', 'Malaysia', 'Maldives', 'Malta', 'Mauritania',
       'Mauritius', 'Mexico', 'Moldova', 'Monaco', 'Mongolia',
       'Montenegro', 'Morocco', 'Namibia', 'Nepal', 'Netherlands',
       'New Zealand', 'Nicaragua', 'Niger', 'Nigeria', 'North Macedonia',
       'Norway', 'Oman', 'Pakistan', 'Panama', 'Papua New Guinea',
       'Paraguay', 'Peru', 'Philippines', 'Poland', 'Portugal', 'Qatar',
       'Romania', 'Russia', 'Rwanda', 'Saint Lucia',
       'Saint Vincent and the Grenadines', 'San Marino', 'Saudi Arabia',
       'Senegal', 'Serbia', 'Seychelles', 'Singapore', 'Slovakia',
       'Slovenia', 'Somalia', 'South Africa', 'Spain', 'Sri Lanka',
       'Sudan', 'Suriname', 'Sweden', 'Switzerland', 'Taiwan*',
       'Tanzania', 'Thailand', 'Togo', 'Trinidad and Tobago', 'Tunisia',
       'Turkey', 'Uganda', 'Ukraine', 'United Arab Emirates',
       'United Kingdom', 'Uruguay', 'US', 'Uzbekistan', 'Venezuela',
       'Vietnam', 'Zambia', 'Zimbabwe', 'Dominica', 'Grenada',
       'Mozambique', 'Syria', 'Timor-Leste', 'Belize', 'Laos', 'Libya',
       'West Bank and Gaza', 'Guinea-Bissau', 'Mali',
       'Saint Kitts and Nevis', 'Kosovo', 'Burma', 'Botswana', 'Burundi',
       'Sierra Leone', 'Malawi', 'South Sudan', 'Western Sahara',
       'Sao Tome and Principe', 'Yemen', 'Comoros', 'Tajikistan',
       'Lesotho'], dtype=object)
total_data= pd.DataFrame(covid.groupby('Country/Region').sum())
total_data.sample(10)

full_table = pd.read_csv('covid_19_clean_complete.csv', 
                         parse_dates=['Date'])
full_table.sample(6)

Veriseti Üzerinde Temel Feature Engineering Yapmak

ship_rows = full_table['Province/State'].str.contains('Grand Princess') | full_table['Province/State'].str.contains('Diamond Princess') | full_table['Country/Region'].str.contains('Diamond Princess') | full_table['Country/Region'].str.contains('MS Zaandam')

# ship
ship = full_table[ship_rows]

# full table 
full_table = full_table[~(ship_rows)]
full_table.sample(10)

full_table['Active'] = full_table['Confirmed'] - full_table['Deaths'] - full_table['Recovered']

full_table['Country/Region'] = full_table['Country/Region'].replace('Mainland China', 'China')

full_table[['Province/State']] = full_table[['Province/State']].fillna('')
full_table[['Confirmed', 'Deaths', 'Recovered', 'Active']] = full_table[['Confirmed', 'Deaths', 'Recovered', 'Active']].fillna(0)


full_table['Recovered'] = full_table['Recovered'].astype(int)

full_table.sample(6)

full_grouped = full_table.groupby(['Date', 'Country/Region'])['Confirmed', 'Deaths', 'Recovered', 'Active'].sum().reset_index()

temp = full_grouped.groupby(['Country/Region', 'Date', ])['Confirmed', 'Deaths', 'Recovered']
temp = temp.sum().diff().reset_index()

mask = temp['Country/Region'] != temp['Country/Region'].shift(1)

temp.loc[mask, 'Confirmed'] = np.nan
temp.loc[mask, 'Deaths'] = np.nan
temp.loc[mask, 'Recovered'] = np.nan

temp.columns = ['Country/Region', 'Date', 'New cases', 'New deaths', 'New recovered']

full_grouped = pd.merge(full_grouped, temp, on=['Country/Region', 'Date'])

full_grouped = full_grouped.fillna(0)


cols = ['New cases', 'New deaths', 'New recovered']
full_grouped[cols] = full_grouped[cols].astype('int')

full_grouped['New cases'] = full_grouped['New cases'].apply(lambda x: 0 if x<0 else x)

full_grouped.sample(6)

full_grouped.rename(columns={"Country/Region": "country"},inplace=True)

country_wise = full_grouped[full_grouped['Date']==max(full_grouped['Date'])].reset_index(drop=True).drop('Date', axis=1)

country_wise = country_wise.groupby('country')['Confirmed', 'Deaths', 'Recovered', 'Active', 'New cases'].sum().reset_index()

country_wise['Deaths / 100 Cases'] = round((country_wise['Deaths']/country_wise['Confirmed'])*100, 2)
country_wise['Recovered / 100 Cases'] = round((country_wise['Recovered']/country_wise['Confirmed'])*100, 2)
country_wise['Deaths / 100 Recovered'] = round((country_wise['Deaths']/country_wise['Recovered'])*100, 2)

cols = ['Deaths / 100 Cases', 'Recovered / 100 Cases', 'Deaths / 100 Recovered']
country_wise[cols] = country_wise[cols].fillna(0)

covid1 =country_wise
country_continent= px.data.gapminder().query("year == 2007")
country_continent.sample(5)

covid1['country'].replace('US','United States',inplace=True)
country = country_continent.loc[:,['country','continent','iso_alpha']]
covid =pd.merge(covid1,country)
covid.sample(5)

Corona Virüs Görselleştirme İşlemleri

Corona Virüs Ençok Yakalan Sayısına Göre  ilk 15 Ülke

fig = px.bar(covid.sort_values(by=['Confirmed'],ascending=False).head(15), x='Confirmed', y='country',
             labels={'Confirmed':'Count confirmed'},
             height=700,orientation='h',color='country',text='Confirmed')

fig.show()

 

Corona Virüs Ençok Ölen Sayısına Göre  ilk 15 Ülke

fig = px.bar(covid.sort_values(by=['Deaths'],ascending=False).head(15), x='Deaths', y='country',
             labels={'Deaths':'Count confirmed'},
             height=700,orientation='h',color='country',text='Deaths')

fig.show()

Yakalanan sayısına göre ilk 15 ülkenin corona virüsüne yakalanan ve ülen insan sayısı

fig = go.Figure(data=[go.Bar(name='Confirmed',x =sort['country'],y=sort['Confirmed'],text='Confirmed'),
                     go.Bar(name='Deaths',x=sort['country'],y =sort['Deaths'],text='Deaths')])


fig.update_layout(barmode='group')
fig.show()

 

fig = go.Figure(data=[
    go.Bar(name='Confirmed', x=sort['country'], y=sort['Confirmed']),
    go.Bar(name='Deaths', x=sort['country'], y=sort['Deaths']),
    
])
# Change the bar mode
fig.update_layout(barmode='stack')
fig.show()

fig = px.pie(sort, values='Deaths', names='country')
fig.update_traces(textposition='inside',textinfo='percent+label')
fig.show()

Dünya haritası üzerinde corona virüse yakalanan kişilerin ülkelere görselleştirilmesi

fig = px.scatter_geo(covid, locations="iso_alpha",
                     size="Confirmed",color="country")
fig.show()

 

 

Kıtalara Göre Ölüm Sayıları

fig = px.pie(covid, values='Deaths', names='continent')
fig.update_traces(textposition='inside',textinfo='percent+label', title='New cases')
fig.show()

Türkiye’nin zaman için ölüm, yakalan ve  yeni vaka sayıları

country_name = input('Country :')
country = full_grouped[full_grouped['country']==country_name]

# Create traces


fig = px.line(country, x="Date", y="Confirmed", color='country', height=500,
             title='Confirmed', color_discrete_sequence = px.colors.cyclical.mygbm)
fig.show()

# =========================================

fig = px.line(country, x="Date", y="Deaths", color='country', height=500,
             title='Deaths', color_discrete_sequence = px.colors.cyclical.mygbm)
fig.show()

# =========================================

fig = px.line(country, x="Date", y="New cases", color='country', height=500,
             title='New cases', color_discrete_sequence = px.colors.cyclical.mygbm)
fig.show()
"""
fig = go.Figure()
fig.add_trace(go.Scatter(x=country['Date'], y=country['Deaths'],
                    mode='lines',
                    name='Deaths'))
fig.add_trace(go.Scatter(x=country['Date'], y=country['Confirmed'],
                    mode='lines',
                    name='Confirmed'))
fig.add_trace(go.Scatter(x=country['Date'], y=country['New cases'],
                    mode='lines', name='New cases'))

fig.show()"""


Country :Turkey

Dünyada zaman için ölüm, yakalan ve  yeni vaka sayıları.

fig = px.line(full_grouped, x="Date", y="Confirmed", color='country', height=500,
             title='Confirmed', color_discrete_sequence = px.colors.cyclical.mygbm)
fig.show()

# =========================================

fig = px.line(full_grouped, x="Date", y="Deaths", color='country', height=500,
             title='Deaths', color_discrete_sequence = px.colors.cyclical.mygbm)
fig.show()

# =========================================

fig = px.line(full_grouped, x="Date", y="New cases", color='country', height=500,
             title='New cases', color_discrete_sequence = px.colors.cyclical.mygbm)
fig.show()

Hepimizin gündem maddesi olan bu virüsün veri kısmına öncelikle incelemek istediğimiz kütüphaneye göre giriş yaparak başladık. Daha sonra klasik inceleme talebimiz olan virüsün en yüksek ve en düşük olduğu günü, hangi ülkelerde dağılım gösterdiğini(ilk10/ilk6 bazında)inceledik. Verilerdeki sayılara göre iyileşme ve ölüm oranını, istenen ülkenin yeni vaka, iyileşen sayısı, aktif devam eden ‘yatan hasta sayısı’ durumunu analiz ettik. Verilerle değerleri arasındaki eşleşmeleri grafiğe dökerek devam ettik, mevcut vaka sayısını renklendirilmi, azalan içeriğiyle 15 ülke arasında görselleştirdiğimiz ilk grafik; ölü sayısını ise 2. grafik ifade etmektedir.

 

Ülkeleri pasta grafiğinde ölü sayılarıyla birlikte renklendirerek yüzdesine göre gösterdik. Onaylanmış vakaları, ölü sayısını ve yeni vakaları Türkiye ölçeğinde çizgi grafiğinde gösterme imkanı bulduk ve en son yine çizgi grafiğinde ülkelerin vaka sayısını, ölüm ve yeni vaka sayılarını karşılaştırdık. Verileri analiz etme ve grafiğe dökme süreci siz buraları okudukça kolaylaşacaktır ama dileriz ki bu pandemi süresi bir an önce son bulur.

Plotly kütüphanesi merak eden arkadaşlar buradan detaylı bilgiye ulaşabilirler.

HERKESE SAĞLIKLI GÜNLER!

Post Author: Cahit ISLEYEN

Data Scientist at @embedica.ai

One Reply to “Covid-19 Virüsü Verisetini Görselleştirme(Plotly)”

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir