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
tarih | test_sayisi | vaka_sayisi | top_yogun_bakim | top_entube | iyilesen_sayisi | vefat_sayisi |
11.03.2020 | 0 | 1 | 0 | 0 | 0 | 0 |
12.03.2020 | 0 | 0 | 0 | 0 | 0 | 0 |
13.03.2020 | 0 | 4 | 0 | 0 | 0 | 0 |
14.03.2020 | 0 | 0 | 0 | 0 | 0 | 0 |
15.03.2020 | 2800 | 1 | 0 | 0 | 0 | 0 |
16.03.2020 | 0 | 12 | 0 | 0 | 0 | 0 |
17.03.2020 | 0 | 29 | 0 | 0 | 0 | 1 |
18.03.2020 | 7197 | 51 | 0 | 0 | 0 | 0 |
19.03.2020 | 1981 | 94 | 0 | 0 | 0 | 2 |
20.03.2020 | 3656 | 167 | 0 | 0 | 0 | 1 |
21.03.2020 | 2953 | 311 | 0 | 0 | 0 | 5 |
22.03.2020 | 1758 | 566 | 0 | 0 | 0 | 21 |
23.03.2020 | 3672 | 293 | 0 | 0 | 0 | 7 |
24.03.2020 | 3952 | 343 | 0 | 0 | 0 | 7 |
25.03.2020 | 5035 | 561 | 0 | 0 | 26 | 15 |
26.03.2020 | 7286 | 1196 | 0 | 0 | 0 | 16 |
27.03.2020 | 7533 | 2069 | 344 | 241 | 16 | 17 |
28.03.2020 | 7641 | 1704 | 445 | 309 | 28 | 16 |
29.03.2020 | 9982 | 1815 | 568 | 394 | 35 | 23 |
30.03.2020 | 11535 | 1610 | 725 | 523 | 57 | 37 |
31.03.2020 | 15422 | 2704 | 847 | 622 | 81 | 46 |
1.04.2020 | 14396 | 2148 | 979 | 692 | 90 | 63 |
2.04.2020 | 18757 | 2456 | 1101 | 783 | 82 | 79 |
3.04.2020 | 16160 | 2786 | 1251 | 867 | 69 | 69 |
4.04.2020 | 19664 | 3013 | 1311 | 909 | 302 | 76 |
5.04.2020 | 20065 | 3135 | 1381 | 935 | 256 | 73 |
6.04.2020 | 21400 | 3148 | 1415 | 966 | 284 | 75 |
7.04.2020 | 20023 | 3892 | 1474 | 987 | 256 | 76 |
8.04.2020 | 24900 | 4117 | 1492 | 995 | 264 | 87 |
9.04.2020 | 28578 | 4056 | 1552 | 1017 | 296 | 96 |
10.04.2020 | 30864 | 4747 | 1667 | 1062 | 281 | 98 |
11.04.2020 | 33170 | 5138 | 1626 | 1021 | 542 | 95 |
12.04.2020 | 35720 | 4789 | 1665 | 978 | 481 | 97 |
13.04.2020 | 34456 | 4093 | 1786 | 1063 | 537 | 98 |
14.04.2020 | 33070 | 4062 | 1809 | 1087 | 842 | 107 |
15.04.2020 | 34090 | 4281 | 1820 | 1052 | 875 | 115 |
16.04.2020 | 40427 | 4801 | 1854 | 1040 | 1415 | 125 |
17.04.2020 | 40270 | 4353 | 1845 | 1014 | 1542 | 126 |
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.
tarih | test_sayisi | vaka_sayisi | top_yogun_bakim | top_entube | iyilesen_sayisi | vefat_sayisi |
Tarih | O 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ı |
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()

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.

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ı")






# Veriler hakkında. arsiv.describe()

# Ö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
- “| COVID-19 Türkiye Web Portalı”. Erişim 18 Nisan 2020. https://covid19.tubitak.gov.tr/offline.
- “1.17. Neural network models (supervised) — scikit-learn 0.22.2 documentation”. Erişim 18 Nisan 2020. https://scikit-learn.org/stable/modules/neural_networks_supervised.html.
- Springboard Blog. “A Beginner’s Guide to Neural Networks in Python”, 21 Mart 2017. https://www.springboard.com/blog/beginners-guide-neural-network-in-python-scikit-learn-0-18/.
- Coronavirus Outbreak Prediction Using Machine Learning | Covid-19 Outbreak Prediction | Simplilearn. Erişim 18 Nisan 2020. https://www.youtube.com/watch?v=sHWKN5dakPw.
- “Coronavirus Update (Live): 2,252,651 Cases and 154,331 Deaths from COVID-19 Virus Pandemic – Worldometer”. Erişim 18 Nisan 2020. https://www.worldometers.info/coronavirus/#countries.
- Simplilearn. “Coronavirus Outbreak Prediction Using Machine Learning | Covid-19 Out…”. Education, 15:29:25 UTC. https://www.slideshare.net/Simplilearn/coronavirus-outbreak-prediction-using-machine-learning-covid19-outbreak-prediction-simplilearn/Simplilearn/coronavirus-outbreak-prediction-using-machine-learning-covid19-outbreak-prediction-simplilearn.
- “T.C Sağlık Bakanlığı Korona Tablosu”. Erişim 18 Nisan 2020. https://covid19.saglik.gov.tr/.
- “Türkiye Cumhuriyeti Cumhurbaşkanlığı Dijital Dönüşüm Ofisi – Anasayfa”. Erişim 18 Nisan 2020. https://corona.cbddo.gov.tr/.
Çalışma ile ilgili görüş, eleştiri ve önerileriniz için: http://canererden.com/caner-erden-about-me
cerden@sakarya.edu.tr