Caner Erden

Caner Erden

PhD in Industrial Engineering

Makine Öğrenmesi ile COVID19 Türkiye Verileri Analizi

Bu yazıda şimdiye kadar(18 Nisan 2020) tarihine kadar olan veriler ile COVID19 Türkiye Makine Öğrenmesi Çalışması yapılmıştır. Çalışmada makine öğrenmesi metotlarından Lineer Regresyon, Destek Vektör Makineleri(Support Vector Machine(SVM)) ve Yapay Sinir Ağları (YSA) yöntemleri kullanılmıştır.

Öncelikle belirtmem gerekir ki ben sağlık uzmanı ya da epidemiyolog değilim. Bu çalışma sadece veri bilimi ve makine öğrenimi çalışmalarına dayanmaktadır. Koronavirüs pandemisi hakkında daha fazla bilgiyi şu adresten alabilirsiniz.

Önemli Not

Veriler şu adresten (Worldometer) alınan veriler ve Sağlık Bakanlığındaki veriler ile bir araya getirilerek tabloya aktarılmıştır. Veri tablosu aşağıdaki gibidir. Yeni veriler geldikçe modele eklenecektir. Ayrıca şu adresten kullanılan veri seti csv dosyası olarak indirilebilir.

COVID19 Türkiye Verileri

tarihtest_sayisivaka_sayisitop_yogun_bakimtop_entubeiyilesen_sayisivefat_sayisi
11.03.2020010000
12.03.2020000000
13.03.2020040000
14.03.2020000000
15.03.2020280010000
16.03.20200120000
17.03.20200290001
18.03.20207197510000
19.03.20201981940002
20.03.202036561670001
21.03.202029533110005
22.03.2020175856600021
23.03.202036722930007
24.03.202039523430007
25.03.20205035561002615
26.03.20207286119600016
27.03.2020753320693442411617
28.03.2020764117044453092816
29.03.2020998218155683943523
30.03.20201153516107255235737
31.03.20201542227048476228146
1.04.20201439621489796929063
2.04.202018757245611017838279
3.04.202016160278612518676969
4.04.2020196643013131190930276
5.04.2020200653135138193525673
6.04.2020214003148141596628475
7.04.2020200233892147498725676
8.04.2020249004117149299526487
9.04.20202857840561552101729696
10.04.20203086447471667106228198
11.04.20203317051381626102154295
12.04.2020357204789166597848197
13.04.20203445640931786106353798
14.04.202033070406218091087842107
15.04.202034090428118201052875115
16.04.2020404274801185410401415125
17.04.2020402704353184510141542126
COVID19 Türkiye Verileri

Veri setindeki 15 Mart ve 18 Mart’taki sayılar o tarihteki test sayısındaki veriler günlük net olarak verilmediği için net değildir. 18 Mart’tan önce gerçekleşen test sayıları ile ilgili günlük net sayılar var ise orası güncellenebilir.

Net olmayan veri

Veri setindeki özelliklerle alakalı bilgiler aşağıda verilmiştir.

tarihtest_sayisivaka_sayisitop_yogun_bakimtop_entubeiyilesen_sayisivefat_sayisi
TarihO tarihte yapılan test sayısıO tarihte gerçekleşen vaka sayısıO tarihte yoğun bakımda olan hasta sayısıO tarihte entübe olan hasta sayısıO tarihteki iyileşen hasta sayısıO tarihteki vefat eden kişi sayısı
Veri Seti Özellikleri

COVID19 Türkiye Verileri ile Makine Öğrenmesi Çalışması

Şimdi kodlara geçelim. Öncelikle çalışmada kullanılacak olan kütüphaneleri çağıralım.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import MinMaxScaler
from sklearn.neural_network import MLPRegressor
from selenium import webdriver
from time import sleep
import re
from datetime import datetime
import smtplib

Daha sonra verilerimizi pandas’a alalım.

csv_file_url = 'https://drive.google.com/uc?export=view&id=1q8OeF9HIHLFieZ1Pmx_gRpD8loLYS3lW'
arsiv = pd.read_csv(csv_file_url, sep=';', index_col=0)
arsiv.index = pd.to_datetime(arsiv.index, format='%d.%m.%Y')
arsiv.head()
İlk 5 günlük veriler

Verileri günlük Worldometers adresinden aşağıdaki gibi çekebiliriz.

# Burada https://www.worldometers.info/coronavirus/#countries 
# adresindeki verileri türkiye için filtreleyerek günlük olarak çekeceğiz.
ulke = 'Turkey'
url = 'https://www.worldometers.info/coronavirus/'

driver = webdriver.Chrome()
page = driver.get(url)
df = pd.read_html(driver.page_source)[0]
driver.close()
driver.quit()

tr_gunluk = df[df['Country,Other']=='Turkey']
bugun = pd.to_datetime('today').strftime('%d.%m.%Y')
tr_gunluk

Türkiye’nin çekilen güne ait değerleri aşağıdaki gibi gelir.

Günlük Türkiye COVID19 Verileri

COVID19 Türkiye Verilerinin Görselleştirilmesi

### verilerin görselleştirilmesi
for i, col in enumerate(arsiv.columns.tolist()):
    plt.figure(figsize=(8,6))
    plt.plot(arsiv[col].values, label=col)
    plt.title(col)
    plt.xlabel("Gün")
    plt.ylabel("Kişi Sayısı")
COVID19 Türkiye Test Sayilari
COVID19 Türkiye Toplam Yoğun Bakımdaki Hasta Sayıları
COVID19 Türkiye Toplam İyileşen Hasta Sayıları
COVID19 Türkiye Vaka Sayıları
COVID19 Türkiye Toplam Entübe Hasta Sayıları
COVID19 Türkiye Toplam Vefat Sayıları
# Veriler hakkında.
arsiv.describe()
COVID19 Türkiye Tanımlayıcı İstatistikler
# Özellik ve hedef değerlerinin belirlenmesi
X = arsiv.values[:,:5]
y = arsiv.values[:,5]
# Özelliklerin normalize edilmesi
scaler = MinMaxScaler()
scaled_X = scaler.fit_transform(X)

Lineer Regresyon(LR) ile COVID19 Türkiye Verileri Modellemesi

lr = LinearRegression()
lr.fit(scaled_X, y)
y_predicted_lr = lr.predict(scaled_X)
mean_squared_error:  35.581532349590894
r2_score:  0.9810464310580413
plt.figure(figsize=(8,4))
plt.plot(y, label='gerçek')
plt.plot(y_predicted_lr, label='tahmin')
plt.title('LR ile tahmin')
plt.xlabel('Gün')
plt.ylabel('Vefat Sayıları')
plt.legend()
plt.show()

Destek vektör makineleri ile modelleme

svm = SVR()
svm.fit(scaled_X,y)
y_predicted_svm = svm.predict(scaled_X)
# Model değerlendirmesi
r2_svm = r2_score(y,y_predicted_svm)
print("mean_squared_error: ", mean_squared_error(y,y_predicted_svm))
print("r2_score: ", r2_score(y,y_predicted_svm))

Yapay Sinir Ağları ile COVID19 Türkiye Modellemesi

mlp = MLPRegressor(hidden_layer_sizes=(15,10),max_iter=10000)
mlp.fit(scaled_X,y)
y_predicted_mlp = mlp.predict(scaled_X)
# Model değerlendirmesi
r2_mlp = r2_score(y,y_predicted_mlp)
print("mean_squared_error: ", mean_squared_error(y,y_predicted_mlp))
print("r2_score: ", r2_score(y,y_predicted_mlp))
mean_squared_error:  36.240539576444256
r2_score:  0.9806953911201125
plt.figure(figsize=(8,4))
plt.plot(y, label='gerçek')
plt.plot(y_predicted_mlp, label='tahmin')
plt.title('YSA ile tahmin')
plt.xlabel('Gün')
plt.ylabel('Vefat Sayıları')
plt.legend()
plt.show()
sonuclar = pd.DataFrame([[r2_lr,r2_mlp,r2_svm]], columns=['LR','MLP','SVM'])
# Modelin Kaydedilmesi
from joblib import dump, load
dump(mlp, 'mlp.joblib')
dump(lr, 'lr.joblib')

# Modelin çağrılması
load('lr.joblib')

Kaynaklar

Çalışma ile ilgili görüş, eleştiri ve önerileriniz için: http://canererden.com/caner-erden-about-me
cerden@sakarya.edu.tr

DROP A COMMENT

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