Öne çıkan

Virüs, Kriz ve Yapay Zeka Arama Terimlerine Bağlı Olarak Google Trend Verilerinin Ülkeler Açısından Karşılaştırmalı Analizi: Comparative Analysis of Google Trend Data Based on Virus, Crisis and AI Search Terms by Countries

Bilindiği üzere Google Trends ile bir ülke veya bölgede öne çıkan içerikler ortaya konulabilmektedir. Google Trends, Google Arama’da en çok yapılan arama sorgularının çeşitli bölge ve dillerdeki popülerliğini analiz eden bir Google web sitesidir. Web sitesi, zaman içindeki farklı sorguların arama hacmini karşılaştırmalı olarak ortaya koyan grafikler sunmaktadır. Google Trendler ayrıca, kullanıcılara iki veya daha fazla arama terimi ile göreli arama hacmini karşılaştırmasına olanak da tanımaktadır.

Araştırma kapsamında ilk üç çalışma yapılarak ülkelere göre karşılaştırmalı olarak ortaya konulacaktır. İlk çalışmada “virüs” aramalarının seyri, ardından ise “kriz” ve “yapay zeka” arama terimlerinin ülkelere göre ve dünyadaki seyri incelenecektir. Son kısımda ise “Suriye” arama terimleri Türkiye özelinde ele alınacaktır.

Metodoloji ve Bulgular

a) İlk Çalışma

Çalışma kapsamında 01-01-2020 ile 31-01-2021 tarihleri arasında “virüs” arama terimine bağlı olarak başta COVID-19 olmak üzere bütün virüs kaynaklı aramaların Amerika, Türkiye, Kanada, Fransa özelinde ve Dünya ölçeğinde izlediği seyrin ortaya konulması amaçlanmıştır. Aynı zamanda bu arama verisinden yola çıkarak gelecek 1 yıl için tahmin yapılmıştır.

b) İkinci Çalışma

Çalışma kapsamında 01-01-2004 ile 27-10-2020 tarihleri arasında “kriz” arama terimine bağlı olarak başta ekonomik ve sağlık olmak üzere kriz aramalarının Amerika, Türkiye, Kanada, Fransa özelinde ve Dünya ölçeğinde izlediği seyrin ortaya konulması amaçlanmıştır.

c) Üçüncü Çalışma

Bu kısımda 01-01-2004 ile 31-01-2021 tarihleri arasında “yapay zeka” arama terimine bağlı olarak Amerika, Türkiye, Kanada, Fransa özelinde ve Dünya ölçeğinde yapay zeka arama teriminin hit sayıları üzerinden izlediği seyrin ortaya konulması amaçlanmıştır.

d) Dördüncü Çalışma

Bu bölümde 29-04-2011 ile 01-02-2021 tarihleri arasında “Suriye” arama terimine bağlı olarak Türkiye‘de Suriye arama teriminin hit sayıları üzerinden izlediği seyrin ortaya konulması amaçlanmıştır. Ayrıca Suriye arama terimiyle ilişkili diğer aramalar da bu çalışma kapsamında ortaya konulmuştur.

Uygulama ve Bulgular

Çalışma kapsamında R programlama dili kullanılmıştır. Veri gtrendsR paketi ile Google Trends veri tabanından eş zamanlı olarak alınacaktır. O zaman işe koyulma zamanı 🙂 . İlk olarak yüklenecek R paketlerini verelim. Arama terimleri karşılaştırılacak ülkenin kullandığı dile göre yapılmalıdır.

Yüklenecek kütüphaneler

Yüklenecek kütüphane konusunda her zamanki gibi bonkorüm galiba 🙂 ; daha az kütüphaneyle de aynı analizleri yapabilirsiniz. Ancak daha çok esneklik ve estetik tasarım tanıdığı için olması gerekenden fazla kütüphane ile çalışıyorum.

kutuphane<-c("dplyr","tibble","tidyr","ggplot2","formattable","ggthemes","readr","readxl","ggpubr","formattable", "ggstance","pander", "gtrendsR","explore", "lubridate", "writexl", "tidytext","prophet")
yukle<-sapply(kutuphane, require, character.only = TRUE)
yukle

a) İlk Çalışma

Bu kısımda 01-01-2020 ile 31-01-2021 tarihleri arasında “virüs” arama terimine bağlı olarak Amerika, Türkiye, Kanada ve Fransa özelinde izlediği seyir ortaya konulmuştur. Aynı zamanda bu arama verisinden yola çıkarak gelecek 1 yıl için tahmin yapılmıştır.

arama = gtrends(c("virus","virus","virüs", "virus"), geo = c("US","CA","TR", "FR"), gprop = "web", time = "2020-01-01 2021-01-31")[[1]]
arama=arama %>% mutate(geo = recode(geo, 
  "US" = "ABD",
  "CA" = "Kanada",
  "TR" = "Türkiye",
  "FR" = "Fransa"))

ggplot(data = arama, aes(x = date, y = hits, group = geo)) +
  geom_line(size = 1, alpha = 0.7, aes(color = geo), show.legend = FALSE) +
  geom_point(size = 0) +
  theme(legend.title=element_blank(), axis.title.x = element_blank()) +
  ylab("Hit Sayısı") + 
  xlab("Tarih")+
  ggtitle("Virüs Arama Terimine Göre Google Trendleri")+
  facet_wrap(~geo)+
  theme_hc()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra virüs arama terimine göre Google Trendleri karşılaştırmalı olarak aşağıdaki grafikte verilmiştir. Grafiğe göre virüs arama terimi hit sayısının bütün ülkelerde Mart 2020’de zirveye ulaştığı görülmektedir. Ancak bu ülkeler içerisinde en yüksek hit sayısı ABD’de görülürken en düşük hit sayısı Türkiye’de görülmüştür. 2021 yılının ocak ayında ise bütün ülkeler en düşük hit sayısına sahip olduğu görülmektedir.

Yukarıdaki arama trend verilerine bağlı olarak bir de Facebook tarafından geliştirilen prophet paketi kullanarak gelecek 1 yıla ilişkin ülkelere göre tahmin yapalım. Önceliği Türkiye’ye verelim 🙂 .

# 1 Yıllık Tahmin
TR<-filter(arama, geo=="Türkiye")

tahmin <- TR[,c("date","hits")]
colnames(tahmin) <-c("ds","y")

t1 <- prophet(tahmin)

gelecek <- make_future_dataframe(t1, periods = 365)
ongoru <- predict(t1, gelecek)
plot(t1, ongoru)

Yukarıdaki R kod bloğunun çalıştırılmasından Türkiye için gelecek 1 yıllık (2022 yılının 31 Ocağına kadar) virüs arama trendi aşağıdaki grafikte verilmiştir. Görüleceği üzere virüs arama trendinin %95 güven aralığı içerisinde azalan bir trend ortaya koyduğu görülmektedir.

Türkiye tahmin verilerini aşağıda yazdığım R kod bloğu ile xlsx uzantılı Microsoft Excel çalışma kitabına yazdırdım.

turkiye=forecast[c('ds', 'yhat',  'yhat_lower', 'yhat_upper')] 
write_xlsx(turkiye, "turkiyetahminleri.xlsx")

Yukarıdaki R kod bloğu çalıştırıldıktan sonra elde edilen Türkiye virüs arama 1 yıllık tahmin verilerini güven aralıklarıyla birlikte aşağıdan indirebilirsiniz.

Yukarıdaki arama trend verilerine bağlı olarak gelecek 1 yıla ilişkin ABD virüs arama tahminlerini ortaya koyalım.

ABD<-filter(arama, geo=="ABD")
tahmin <- ABD[,c("date","hits")]
colnames(tahmin) <-c("ds","y")

t1 <- prophet(tahmin)
gelecek <- make_future_dataframe(t1, periods = 365)
ongoru <- predict(t1, gelecek)
plot(t1, ongoru)

Yukarıdaki R kod bloğunun çalıştırılmasından ABD için gelecek 1 yıllık (2022 yılının 31 Ocağına kadar) virüs arama trendi aşağıdaki grafikte verilmiştir. Görüleceği üzere virüs arama trendinin %95 güven aralığı içerisinde azalan bir trend ortaya koyduğu görülmektedir. Ancak bu azalma trendi Türkiye’den daha hızlı ve keskindir. Bunu sol tarafta yer alan y (tahmin) değerlerinden rahatlıkla görüyoruz.

Yukarıdaki arama trend verilerine bağlı olarak şimdi de gelecek 1 yıla ilişkin Fransa virüs arama tahminlerini ortaya koyalım.

fr<-filter(arama, geo=="Fransa")
tahmin <- fr[,c("date","hits")]
colnames(tahmin) <-c("ds","y")

t1 <- prophet(tahmin)
gelecek <- make_future_dataframe(t1, periods = 365)
ongoru <- predict(t1, gelecek)
plot(t1, ongoru)

Yukarıdaki R kod bloğunun çalıştırılmasından Fransa için gelecek 1 yıllık (2022 yılının 31 Ocağına kadar) virüs arama trendi aşağıdaki grafikte verilmiştir. Görüleceği üzere virüs arama trendinin %95 güven aralığı içerisinde diğer ülkelerdekine benzer olarak azalan bir trend ortaya koyduğu görülmektedir. Ancak bu azalma trendi Türkiye’den ve ABD’den daha düşüktür. Bunu sol tarafta yer alan y (tahmin) değerlerinden rahatlıkla görüyoruz.

Yukarıdaki arama trend verilerine bağlı olarak son olarak gelecek 1 yıla ilişkin Kanada virüs arama tahminlerini ortaya koyalım.

kn<-filter(arama, geo=="Kanada")
tahmin <- kn[,c("date","hits")]
colnames(tahmin) <-c("ds","y")

t1 <- prophet(tahmin)
gelecek <- make_future_dataframe(t1, periods = 365)
ongoru <- predict(t1, gelecek)
plot(t1, ongoru)

Yukarıdaki R kod bloğunun çalıştırılmasından Kanada için gelecek 1 yıllık (2022 yılının 31 Ocağına kadar) virüs arama trendi aşağıdaki grafikte verilmiştir. Görüleceği üzere virüs arama trendinin %95 güven aralığı içerisinde diğer ülkelerdekine benzer olarak azalan bir trend ortaya koyduğu görülmektedir. Ancak bu azalma trendi Türkiye ve Fransa’dan daha yüksek iken ABD ile benzerdir. Bunu sol tarafta yer alan y (tahmin) değerlerinden rahatlıkla görüyoruz.

Virüs” arama terimine bağlı olarak Dünyadaki google trendlerine de elimiz değmişken aşağıda yazdığım R kod bloğu ile bakalım 🙂 .

virus = gtrends(c("virus","virus","virüs", "virus"), gprop = "web", time = "2020-01-01 2021-01-31")[[1]]

virus= virus  %>% mutate(hits=as.numeric(hits))

ggplot(data = virus, aes(x = date, y = hits)) +
  geom_line(size = 1, alpha = 0.7, aes(color = geo), show.legend = FALSE) +
  geom_point() +
  theme(legend.title=element_blank(), axis.title.x = element_blank()) +
  ylab("Hit Sayısı") + 
  xlab("Tarih")+
  ggtitle("Virüs Terimine Göre Dünyada Google Trendleri")+
  theme_economist_white()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Dünyadaki “virüs” arama google trendleri aşağıdaki grafikte verilmiştir.

b) İkinci Çalışma

Bu bölümde 01-01-2004 ile 27-10-2020 tarihleri arasında “kriz” arama terimine bağlı olarak başta ekonomik ve sağlık olmak üzere kriz aramalarının Amerika, Türkiye, Kanada ve Fransa özelinde izlediği seyir aşağıda yazılan kod bloğu ile ortaya konulmuştur. Elde edilen bulgular ülkelere ve yıllara göre karşılaştırmalı olarak verilmiştir.

kriz = gtrends(c("crisis","crisis","kriz", "crise"), geo = c("US","CA","TR", "FR"), gprop = "web", time = "2004-01-01 2020-10-27")[[1]]

kriz=kriz %>% mutate(geo = recode(geo, 
  "US" = "ABD",
  "CA" = "Kanada",
  "TR" = "Türkiye",
  "FR" = "Fransa"))

ggplot(data = kriz, aes(x = date, y = hits, group = geo)) +
  geom_line(size = 1, alpha = 0.7, aes(color = geo), , show.legend = FALSE) +
  geom_point(size = 0) +
  theme(legend.title=element_blank(), axis.title.x = element_blank()) +
  ylab("Hit Sayısı") + 
  xlab("Tarih")+
  ggtitle("Kriz Arama Terimine Göre Google Trendleri")+
  facet_grid(~geo)+
  theme_hc()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde “kriz” arama terimine bağlı olarak elde edilen bulgular ülkelere ve yıllara göre karşılaştırmalı olarak aşağıdaki grafikte verilmiştir. Elde edilen bulgulara göre kriz terimi arama sayısının en yüksek olduğu ülke Fransa olup, en yüksek olduğu tarih ise 01.10.2008 tarihidir. Bu tarihte Fransa’da kriz arama terimindeki hit sayısı 100’dür. Genel olarak bakıldığında karşılaştırılan ülkeler içerisinde Fransa’da kriz arama terimine bağlı olarak ortaya çıkan hit sayıları ve bu hit sayılarının seyri diğer ülkelere göre daha yüksek olduğu söylenebilir. Türkiye özelinde bakıldığında ise kriz arama terimine bağlı olarak ortaya çıkan hit sayıları açısından en düşük ülkedir. Ancak Türkiye kendi içerisinde değerlendirildiğinde kriz arama teriminin sayısının en yüksek olduğu ilk 3 tarih hit sayısına göre şöyledir: 03.01.2004 (Hit sayısı: 24), 11.01.2008 (Hit sayısı: 23) ve 05.01.2004 (Hit sayısı: 22).

Türkiye için en yüksek ilk 10 kriz hit sayısının olduğu tarihler ise aşağıda yazılan kod bloğu ile verilmiştir.

kriz %>% filter(geo=="Türkiye") %>% select(date, hits) %>% arrange(desc(hits)) %>% head(10) %>% formattable()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Türkiye için elde edilen en yüksek ilk 10 kriz hit sayısı tarihlere göre aşağıda verilmiştir.

Fransa için en yüksek ilk 10 kriz hit sayısının olduğu tarihler ise aşağıda yazılan kod bloğu ile verilmiştir.

kriz %>% filter(geo=="Fransa") %>% select(date, hits) %>% arrange(desc(hits)) %>% head(10) %>% formattable()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Fransa için elde edilen en yüksek ilk 10 kriz hit sayısı tarihlere göre aşağıda verilmiştir.

Son olarak ABD için en yüksek ilk 10 kriz hit sayısının olduğu tarihler ise aşağıda yazılan kod bloğu ile verilmiştir.

kriz %>% filter(geo=="ABD") %>% select(date, hits) %>% arrange(desc(hits)) %>% head(10) %>% formattable()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra ABD için elde edilen en yüksek ilk 10 kriz hit sayısı tarihlere göre aşağıda verilmiştir.

“Kriz” arama terimine bağlı olarak elde edilen bulguların veri seti aşağıda yazılan R kod bloğu ile ülkelere ve tarihlere göre karşılaştırmalı olarak xlsx uzantılı Microsoft Excel çalışma kitabına yazdırdım.

write_xlsx(kriz, "ulkeverileri.xlsx")

Buradan bu veri setini indirebilirsiniz.

Kriz” arama terimine bağlı olarak Dünyadaki google trendlerine de elimiz değmişken aşağıda yazdığım R kod bloğu ile bakalım :).

crisis = gtrends(c("crisis","crisis","kriz", "crise"), gprop = "web", time = "2004-01-01 2020-10-27")[[1]]

crisis= crisis  %>% mutate(hits=as.numeric(hits))

ggplot(data = crisis, aes(x = date, y = hits)) +
  geom_line(size = 1, alpha = 0.7, aes(color = geo), show.legend = FALSE) +
  geom_point() +
  theme(legend.title=element_blank(), axis.title.x = element_blank()) +
  ylab("Hit Sayısı") + 
  xlab("Tarih")+
  ggtitle("Kriz Terimine Göre Dünyada Google Trendleri")+
  theme_economist_white()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Dünyadaki “kriz” arama google trendleri aşağıdaki grafikte verilmiştir.

Dünyada en yüksek ilk 10 “kriz” arama terimi hit sayısının olduğu tarihler aşağıda yazılan kod bloğu ile verilmiştir.

crisis %>% mutate(hits=as.numeric(hits)) %>% select(date, hits) %>% arrange(desc(hits)) %>% head(10) %>% formattable()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Dünyada en yüksek ilk “kriz” arama terimi hit sayısı tarihlere göre aşağıdaki tabloda verilmiştir. Zaten ortaya konulan bu bulgular hepimizin bildiği üzere 2008 yılının son aylarında ortaya çıkan ve dünyayı etkisi altına alan 2008 Dünya ekonomik krizini doğrular niteliktedir.

“Kriz” arama terimine bağlı olarak elde edilen bulguların veri seti aşağıda yazılan R kod bloğu ile tarihlere göre karşılaştırmalı olarak xlsx uzantılı Microsoft Excel çalışma kitabına yazdırdım.

veri=crisis %>% mutate(hits=as.numeric(hits))
write_xlsx(veri, "krizdunya.xlsx")

Buradan bu Dünya kriz veri setini indirebilirsiniz.

c) Üçüncü Çalışma

Bu bölümde 01-01-2004 ile 31-01-2021 tarihleri arasında “yapay zeka” arama terimine bağlı olarak Amerika, Türkiye, Kanada ve Fransa özelinde izlediği seyir aşağıda yazılan kod bloğu ile ortaya konulmuştur. Elde edilen bulgular ülkelere ve yıllara göre karşılaştırmalı olarak verilmiştir. Elde edilen bulgular ülkelere ve yıllara göre karşılaştırmalı olarak verilmiştir.

ai = gtrends(c("artificial intelligence","artificial intelligence","yapay zeka", "intelligence artificielle"), geo = c("US","CA","TR", "FR"), gprop = "web", time = "2004-01-01 2020-01-31")[[1]]

ai=ai %>% mutate(geo = recode(geo, 
  "US" = "ABD",
  "CA" = "Kanada",
  "TR" = "Türkiye",
  "FR" = "Fransa"))

ggplot(data = ai, aes(x = date, y = hits, group = geo)) +
  geom_line(size = 1, alpha = 0.7, aes(color = geo), , show.legend = FALSE) +
  geom_point(size = 0) +
  theme(legend.title=element_blank(), axis.title.x = element_blank()) +
  ylab("Hit Sayısı") + 
  xlab("Tarih")+
  ggtitle("Yapay Zeka Arama Terimine Göre Google Trendleri")+
  facet_grid(~geo)+
  theme_hc()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde “yapay zeka” arama terimine bağlı olarak elde edilen bulgular ülkelere ve yıllara göre karşılaştırmalı olarak aşağıdaki grafikte verilmiştir. Elde edilen bulgular yapay zeka arama trendlerinin dalgalı bir seyir izlediğini göstermektedir. Yapay zeka terimi arama sayısının en yüksek olduğu ülke Türkiye olup, en yüksek olduğu tarih ise 01.11. 2004 tarihidir. Bu tarihte Türkiye’de yapay zeka arama terimindeki hit sayısı 100’dür. Genel olarak bakıldığında karşılaştırılan ülkeler içerisinde Türkiye’de yapay zeka arama terimine bağlı olarak ortaya çıkan hit sayıları ve bu hit sayılarının seyri diğer ülkelere göre daha yüksek ve bu konunun daha popüler olduğu söylenebilir. Türkiye kendi içerisinde değerlendirildiğinde yapay zeka arama teriminin sayısının en yüksek olduğu ilk 3 tarih hit sayısına göre şöyledir: 01.11. 2004 (Hit sayısı: 100), 01.10.2004 (Hit sayısı: 98) ve 01.02.2004 (Hit sayısı: 95).

Türkiye için en yüksek ilk 10 yapay zeka hit sayısının olduğu tarihler aşağıda yazılan kod bloğu ile verilmiştir.

ai %>% filter(geo=="Türkiye") %>% select(date, hits) %>% arrange(desc(hits)) %>% head(10) %>% formattable()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Türkiye için elde edilen en yüksek ilk 10 yapay zeka hit sayısı tarihlere göre aşağıda verilmiştir.

“Yapay zeka” arama terimine bağlı olarak elde edilen bulguların veri seti aşağıda yazılan R kod bloğu ile ülkelere ve tarihlere göre karşılaştırmalı olarak xlsx uzantılı Microsoft Excel çalışma kitabına yazdırdım.

write_xlsx(ai, "ulkeverileriai.xlsx")

Buradan bu veri setini indirebilirsiniz.

Yapay Zeka” arama terimine bağlı olarak Dünyadaki google trendlerine de elimiz değmişken aşağıda yazdığım R kod bloğu ile bakalım 🙂 .

ai = gtrends(c("artificial intelligence","artificial intelligence","yapay zeka", "intelligence artificielle"), gprop = "web", time = "2004-01-01 2020-01-31")[[1]]
ai= ai  %>% mutate(hits=as.numeric(hits))

ggplot(data = ai, aes(x = date, y = hits)) +
  geom_line(size = 1, alpha = 0.7, aes(color = geo), show.legend = FALSE) +
  geom_point() +
  theme(legend.title=element_blank(), axis.title.x = element_blank()) +
  ylab("Hit Sayısı") + 
  xlab("Tarih")+
  ggtitle("Yapay Zeka Terimine Göre Dünyada Google Trendleri")+
  theme_economist_white()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Dünyadaki “yapay zeka” arama google trendleri aşağıdaki grafikte verilmiştir.

d) Dördüncü Çalışma

Bu bölümde 29-04-2011 ile 01-02-2021 tarihleri arasında “Suriye” arama terimine bağlı olarak Türkiye‘de Suriye arama teriminin hit sayıları üzerinden izlediği seyrin ortaya konulması amaçlanmıştır. Ayrıca Suriye arama terimiyle ilişkili diğer aramalar da bu çalışma kapsamında ortaya konulmuştur. Elde edilen bulgular yıllara göre karşılaştırmalı olarak verilmiştir.

TUR = gtrends("suriye", geo = "TR", gprop = "web", time = "2004-01-01 2020-02-01")
top<-filter(TUR$related_topics, related_topics=="top")
top<-top[,c(3,1)] %>%  as.tibble() %>% rename(word=value, freq=subject) %>% mutate(freq=as.numeric(freq))

top  %>% mutate(word = fct_reorder(word, freq)) %>% slice(1:10) %>% 
  ggplot( aes(x=word, y=freq)) +
    geom_bar(stat="identity", fill="#f68060", alpha=.6, width=.4) +
    coord_flip() +
    xlab("") +
    ylab("Frekans")+
   theme_economist()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde “Suriye” arama terimine bağlı olarak elde edilen bulgular ilişkili konularla birlikte aşağıdaki grafikte verilmiştir. Elde edilen bulgulara bakıldığında ilişkili top konularda da Suriye 1. sırada olduğu, bunu sırasıyla harita (map) ve savaş (war) izlediği görülmektedir. Diğer top konular ise sırasıyla şöyledir: Suriye savaşı, Irak, Rusya, Iran ve Özgür Suriye Ordusu’dur.

Suriye arama terimine bağlı olarak Türkiye’de yıllara göre arama trendlerinin sayısı aşağıda yazılan kod bloğu ile verilmiştir.

TUR = gtrends("suriye", geo = "TR", gprop = "web", time = "2011-04-29 2020-02-01")[[1]]
tur= TUR  %>% mutate(hits=as.numeric(hits))
ggplot(data = tur, aes(x = date, y = hits, group = geo)) +
  geom_line(size = 1, alpha = 0.7, aes(color = geo), , show.legend = FALSE) +
  geom_point(size = 0) +
  theme(legend.title=element_blank(), axis.title.x = element_blank()) +
  ylab("Hit Sayısı") + 
  xlab("Tarih")+
  ggtitle("Türkiye'de Suriye Arama Terimine Göre Google Trendleri")+
  facet_grid(~geo)+
  theme_hc()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Suriye arama terimine göre Türkiye’de yıllara göre arama hit sayısı aşağıdaki grafikte verilmiştir.

Yapılan çalışma ile özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunulması amaçlanmıştır.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Saygılarımla.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Karar Ağacı Algoritmaları Üzerine Bir Vaka Çalışması: A Case Study on Decision Tree Algorithms in Solving Classification Problems with R Programming Language

Giriş

Günümüzde veri madenciliği uygulamalarının yaygınlaşması ve büyük veri kavramının öne çıkmasıyla birlikte analiz metotları da değişmiştir.

Bugüne kadar genellikle bulut (cloud) veri tabanları üzerindeki veri setleri indirilerek analize konu ediliyordu. Ancak gelişen teknoloji veri madenciliği yöntemlerinde de önemli değişiklikler ve bazı soruları beraberinde getirmiştir. Bu sorulardan bazıları şöyledir:

  1. Online veya offline olarak dokümanlarda analize konu edilecek veri metin verisi ise nasıl analiz edilecektir?
  2. Aynı zamanda metin verisiyle birlikte numerik veri içiçe geçmişse, yani hibrit bir veri türüyle karşı karşıya kalınırsa nasıl bir yöntem izlenecektir?
  3. Ya da xlsx, txt, csv ve diğer uzantılı dokümanlar online bir platform üzerinde ise nasıl analiz edilecektir?

İşte bu soruların cevabı istatistik biliminden de beslenerek ancak ondan öte bilgisayar mühendisliği alanına giren veri madenciliğinde yatmaktadır. Bu soruların arttırılması mümkündür.

Veri madenciliğin temel amacı veriyi analize uygun hale getirmektir. Bu amaçla geliştirilmiş bir çok programlama dili bulunmaktadır. Örnek uygulama yapılacak bu çalışma kapsamında kullanılacak programlama dili R olmakla birlikte Python, Julia gibi diğer programlama dilleri de kullanılabilmektedir.

Karar ağaçları hem sınıflandırma (kategorik veriler) hemde regresyon (numerik veriler) problemlerin çözümünde kullanılabilen veri madenciliği ve makine öğrenme algoritmasıdır. Rastgele Orman algoritmaları gibi çok güçlü algoritmalar olan karar ağaçları kompleks ve büyük veri setlerinin çözümünde oldukça yararlanılan denetimli öğrenme (supervised learning) algoritmaları ailesine aittir. Bunun yanında karar ağaçları rastgele orman (random forests) algoritmalarının temel bileşenleridir.

Karar ağaçları karar destek aracı olması yanında alınan kararların görselleştirilmesine de olanak tanır. Bir karar ağacının mimarisi Şekil 1’de verilmiştir.

Şekil 1: Karar Ağacının Mimarisi (Decision Tree Architecture)

Bir karar ağacı temel olarak 4 ana düğüm (node)’den oluşur. Bunlar sırasıyla kök (root) düğüm, iç düğümler ve yaprak (leaf) düğümlerden oluşur. Bu düğümler dallar aracılığıyla birbirine bağlanır. Şekil 1’deki karar ağacı iki daldan oluşmaktadır. Terminal ve yaprak düğümleri karar düğümleridir. Şekil 1’de kök düğümden sonraki iki kısım dalları, dalların uzantıları ise yaprakları göstermektedir. Biçimsel olarak ağaçtan, işleyiş olarak ise insan karar verme süreçinden ilham almaktadır.

Karar ağaçlarında hedef değişken (target variable) kategorik ise sınıflandırma algoritması, numerik (sürekli veya kesikli) değişken ise regresyon algoritması kullanılır. Karar ağaçları pek çok alanda kullanılmakla birlikte aşağıda belirtilen bir çok alanda kendine uygulama alanı bulmaktadır:

  1. İmalat sanayi
  2. Astronomi
  3. Moleküler biyololoji
  4. Biyomedikal mühendisliği
  5. Eczacılık
  6. Planlama
  7. Tıp

Karar ağacı algoritmaları hem sınıflandırma (classification) hem de regresyon (regression) problemlerinin çözümünde kullanılan algoritmalardır. Burada aslında sınıflandırma ve regresyondan kasıt tahmin edilecek bağımlı veya hedef değişkenin veri tipi ifade edilmektedir. Sınıflandırma ve regresyon için kullanılan veri tipleri Şekil 2’de sunulmuştur. Cevap değişkeni ya da bağımlı değişken kategorik ise karar ağaçlarında sınıflandırma, bağımlı değişken nicel ise karar ağaçlarında regresyon problemini çözmüş oluyorur.

Şekil 2: Karar Ağaçlarında Problem Sınıfına Göre Veri Türleri

Karar ağaçlarında kurulan modelin veya modellerin performansını değerlendirmede kullanılan hata metrikleri ise genel itibariyle Şekil 3’te verilmiştir. Şekil 3’te yer verilen hata metrikleri gerek makine öğrenme gerekse derin öğrenme modellerinin performansının testinde sıklıkla kullanılmaktadır.

Şekil 3: Hata Metrikleri

Şekil 3’te sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini şimdi de ele alalım. Karışıklık matrisi (confusion matrix) olarak adlandırılan bu matris sınıflandırma problemlerinin çözümünde hata metriklerini ortaya koyarak kurulan modelin veya modellerin hata oranını değerlendirmektedir. Hata matrisinin makine ve derin öğrenme metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Aşağıda yer alan tabloda sınıflandırma problemlerinde hata metriklerinin hesaplanmasına esas teşkil eden tablo verilmiştir. Bu tabloyla sınıflandırma hataları hesaplanabilmektedir. Tabloda yer verilen Tip 1 hata (Type 1 error) istatistikte alfa hatasını göstermektedir. Tip 1 hata H0 hipotezi (null hpypothesis) doğru olduğu halde reddedilmesidir. Tabloda Tip 2 hata (Type II error) olarak adlandırılan hata ise istatistikte Beta hatası olarak da bilinmektedir. Tip 2 hata ise H0 hipotezi (null hpypothesis) yanlış olduğu halde kabul edilmesidir.

Kaynak: Stanford Üniversitesi

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki metriklerden yaygın bir şekilde yararlanıldığı görülmektedir.

  • Doğruluk (Accuracy): TP+TN / TP+TN+FP+FN eşitliği ile hesaplanır. Modelin genel performansını ortaya koyar. Bu sınıflandırma metriği ile aslında biz informal bir şekilde dile getirirsek doğru tahminlerin toplam tahminler içindeki oranını hesaplamış oluyoruz.
  • Kesinlik (Precision): TP / TP+FP eşitliği ile hesaplanır. Doğru tahminlerin ne kadar kesin olduğunu gösterir.
  • Geri çağırma (Recall)TP / TP+FN eşitliği ile hesaplanır. Gerçek pozitif örneklerin oranını verir.
  • Özgünlük (Specificity): TN / TN+FP eşitliği ile hesaplanır. Gerçek negatif örneklerin oranını gösterir.
  • F1 skoru : 2TP / 2TP+FP+FN eşitliği ile hesaplanır. Dengesiz sınıflar için yararlı hibrit bir metrik olup, kesinlik (precision) ve geri çağırma (recall) skorlarının ağırlıklı ortalamasını ifade etmektedir.
  • ROC (Receiver operating characteristic): Yukarıda karışıklık matrisinde belirtilen parametrelerden yararlanılarak hesaplanır. ROC eğrisi olarak da adlandırılmaktadır. ROC eğrileri, herhangi bir tahmin modelinin doğru pozitifler (TP) ve negatifler (TN) arasında nasıl ayrım yapabileceğini görmenin güzel bir yoludur. Sınıflandırma modellerinin performansını eşik değerler üzerinden hesaplar. ROC iki parametre üzerinden hesaplanır. Doğru Pozitiflerin Oranı (TPR) ve Yanlış Pozitiflerin Oranı (FPR) bu iki parametreyi ifade eder. Burada aslında biz TPR ile Geri Çağırma (Recall), FPR ile ise 1-Özgünlük (Specificity)‘ü belirtiyoruz.
  • Cohen Kappa: Kategorik cevap seçenekleri arasındaki tutarlılığı ve uyumu gösterir. Cohen, Kappa sonucunun şu şekilde yorumlanmasını önermiştir: ≤ 0 değeri uyumun olmadığını, 0,01–0,20 çok az uyumu, 0,21-0,40 az uyumu, 0,41-0,60 orta, 0,61-0,80 iyi uyumu ve 0,81–1,00 çok iyi uyumu göstermektedir. 1 değeri ise mükemmel uyum anlamına gelmektedir.

Metodoloji ve Uygulama Sonuçları

Bu kısımda kullanılan veri setine ve adım adım karar ağacı sınıflandırma algoritmalarının uygulamasına yer verilmiştir. Analizde R programlama dili kullanılmıştır. Uygulamaya esas veri seti “iris” bitkisi veri seti olup 150 gözlem ve 6 değişkenden oluşmaktadır. Bu veri seti R’da bulunmaktadır. Veri setindeki değişkenler sırasıyla şöyledir:

  1. sepal length (cm) : Veri tipi nicel ve süreklidir.
  2. sepal width (cm) : Veri tipi nicel ve süreklidir.
  3. petal length (cm) : Veri tipi nicel ve süreklidir.
  4. petal width (cm) : Veri tipi nicel ve süreklidir.
  5. species (türler) : Veri tipi nitel ve nominaldir.
    — Iris Setosa
    — Iris Versicolour
    — Iris Virginica

Metodoloji ve uygulama sonuçları başlığı altında yapılan uygulamalar olabilecek en yalın şekilde ele alınmaya çalışılmıştır. Çalışmada amaç species (bitki türleri) hedef değişkenini diğer bağımlı değişkenler kullanılarak tahmin etmektir. Analize başlamadan önce analiz için yüklenecek R kütüphaneleri verelim. Ardından keşifsel veri analizi (EDA) ile veri setini tanıyalım.

Yüklenecek kütüphaneler

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","randomForest", "aod", "fpc", "DescTools","factoextra","dendextend", "viridis","ggpurr","psych","writexl","ggfortify", "rattle","caret","yardstick","MASS")

sapply(kütüphaneler, require, character.only = TRUE)

Veri setinin xlsx dosyasına yazdırılması

İhtiyaç duymanız halinde fonksiyonu ile birlikte yeniden kodlanan veri seti aşağıdaki kod yardımıyla xlsx uzantılı olarak excel dosyasına yazdırılmıştır.

#veri setinin xlsx dosyasına yazdırılması
df1<-iris
write_xlsx(df1, "veriseti.xlsx")

Yukarıdaki R kod bloğunun çalıştırılması ile edilen veri seti dosyası xlsx uzantılı olarak aşağıda verilmiştir.

Veri setindeki değişkenlerin tanımlayıcı istatistikleri

df1<-iris

ti<-describe(iris[,-5])
formattable(tibble(Değişken=names(df1[,-5]), Aralık=ti$range, Ort=ti$mean, Medyan=ti$median, Ssapma=ti$sd, Carpıklık=ti$skew, Basıklık=ti$kurtosis) %>% mutate_if(is.numeric, round, 1))

#iris bitki türüne göre tanımlayıcı istatistikler
describe.by(df1, df1$Species)

formattable(head(df1,10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen tanımlayıcı istatistikler aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen iris bitkisi türlerine göre tanımlayıcı istatistikler detaylı bir şekilde aşağıdaki tabloda verilmiştir.

Descriptive statistics by group 
group: setosa
             vars  n mean   sd median trimmed  mad min max range skew
Sepal.Length    1 50 5.01 0.35    5.0    5.00 0.30 4.3 5.8   1.5 0.11
Sepal.Width     2 50 3.43 0.38    3.4    3.42 0.37 2.3 4.4   2.1 0.04
Petal.Length    3 50 1.46 0.17    1.5    1.46 0.15 1.0 1.9   0.9 0.10
Petal.Width     4 50 0.25 0.11    0.2    0.24 0.00 0.1 0.6   0.5 1.18
Species*        5 50 1.00 0.00    1.0    1.00 0.00 1.0 1.0   0.0  NaN
             kurtosis   se
Sepal.Length    -0.45 0.05
Sepal.Width      0.60 0.05
Petal.Length     0.65 0.02
Petal.Width      1.26 0.01
Species*          NaN 0.00
--------------------------------------------------------- 
group: versicolor
             vars  n mean   sd median trimmed  mad min max range  skew
Sepal.Length    1 50 5.94 0.52   5.90    5.94 0.52 4.9 7.0   2.1  0.10
Sepal.Width     2 50 2.77 0.31   2.80    2.78 0.30 2.0 3.4   1.4 -0.34
Petal.Length    3 50 4.26 0.47   4.35    4.29 0.52 3.0 5.1   2.1 -0.57
Petal.Width     4 50 1.33 0.20   1.30    1.32 0.22 1.0 1.8   0.8 -0.03
Species*        5 50 2.00 0.00   2.00    2.00 0.00 2.0 2.0   0.0   NaN
             kurtosis   se
Sepal.Length    -0.69 0.07
Sepal.Width     -0.55 0.04
Petal.Length    -0.19 0.07
Petal.Width     -0.59 0.03
Species*          NaN 0.00
--------------------------------------------------------- 
group: virginica
             vars  n mean   sd median trimmed  mad min max range  skew
Sepal.Length    1 50 6.59 0.64   6.50    6.57 0.59 4.9 7.9   3.0  0.11
Sepal.Width     2 50 2.97 0.32   3.00    2.96 0.30 2.2 3.8   1.6  0.34
Petal.Length    3 50 5.55 0.55   5.55    5.51 0.67 4.5 6.9   2.4  0.52
Petal.Width     4 50 2.03 0.27   2.00    2.03 0.30 1.4 2.5   1.1 -0.12
Species*        5 50 3.00 0.00   3.00    3.00 0.00 3.0 3.0   0.0   NaN
             kurtosis   se
Sepal.Length    -0.20 0.09
Sepal.Width      0.38 0.05
Petal.Length    -0.37 0.08
Petal.Width     -0.75 0.04
Species*          NaN 0.00

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setinin ilk 10 satırı aşağıda verilmiştir.

Veri setindeki değişkenlerin özellikleri

str(df1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki değişkenlerin veri tipi ve faktör (kategori) seviyeleri aşağıda verilmiştir.

'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Veri setindeki eksik gözlemlerin (NAs)’nin tespiti

sapply(df1, function(x) sum(is.na(x)))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen çıktı aşağıda verilmiştir. Veri setinde eksik gözlem (missing data) bulunmamaktadır.

 Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
           0            0            0            0            0

Veri setinin eğitilecek veri setine ve test veri setine ayrılması

Bu kısımda basit tekrarsız tesadüfi örnekleme (SRS without replacement) yöntemi kullanılarak veri setindeki gözlemlerin % 70’i eğitilecek veri setine, % 30 ise test edilecek veri setine atanmıştır. Veri setinin eğitilecek veri seti ve test veri setine ayrılmasında genel olarak 70:30 kuralı uygulansa da bu kuralın mutlak olmadığı unutulmamalıdır. Veri setindeki gözlem sayısına göre 70:30 kuralı değişiklik gösterebilmektedir. Veri setindeki gözlem sayısı çok azsa 60:40, veri setindeki gözlem sayısı çok fazla ise 80:20 ve hatta 90:10 olabilmektedir. Şimdi soru burada şu olabilir; neden biz 80:20 veya 90:10 olarak belirliyoruz? Genel olarak buna verilebileceğim cevap şu: Bilgisayar işlemcisine bağlı olarak eğer çok yüksek gözlem sayıları ile çalışıyorsanız bu işlem çok uzun sürmesi kuvvetle muhtemeldir ki bu durumda test veri setinin oranını düşürmek analizinizi hızlandırır ve daha çabuk sonuç alırsınız.

set.seed(111)
orneklem<- sample(1:NROW(df1), NROW(df1)*0.7)
train <- df1[orneklem, ]  
test <- df1[-orneklem, ]

Modelin kurulması

model <- rpart(formula = Species ~ .,data = df1, method = "class")
model

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen model sonuçları aşağıda verilmiştir.

n= 150 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)  
  2) Petal.Length< 2.45 50   0 setosa (1.00000000 0.00000000 0.00000000) *
  3) Petal.Length>=2.45 100  50 versicolor (0.00000000 0.50000000 0.50000000)  
    6) Petal.Width< 1.75 54   5 versicolor (0.00000000 0.90740741 0.09259259) *
    7) Petal.Width>=1.75 46   1 virginica (0.00000000 0.02173913 0.97826087) *

Kurulan modele ilişkin karar ağacı

rpart.plot(model

Değişkenlerin önem düzeyleri

onem<-model$variable.importance
agirlik<-as_tibble(onem)
onemduzey<-cbind(Değişken= names(onem),  "Önem Düzeyleri"=agirlik) %>% as_tibble() %>% rename(Düzey=value)

formattable(onemduzey, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Düzey` = color_bar("#00FF7F")
))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Karışıklık parametresi (complexity parameter: CP)’nin hesaplanması

printcp(model) # CP sonuçlarını diğer hata metrikleriyle verme
plotcp(model) # CP sonuçları grafiğe taşıma

Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin CP değerleri aşağıda verilmiştir.

Classification tree:
rpart(formula = Species ~ ., data = df1, method = "class")

Variables actually used in tree construction:
[1] Petal.Length Petal.Width 

Root node error: 100/150 = 0.66667

n= 150 

    CP nsplit rel error xerror     xstd
1 0.50      0      1.00   1.18 0.050173
2 0.44      1      0.50   0.75 0.061237
3 0.01      2      0.06   0.10 0.030551

Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin CP değerleri aşağıdaki grafikte verilmiştir.

Tahmin edilen değerler ile gözlem değerlerinin karşılaştırılması

tahmin<- predict(object = model, newdata = test, type = "class")

karsilastirma<-tibble(Gozlem=as.factor(test$Species), Tahmin=tahmin)
#ilk ve son 10 tahmin değerini gözlem değerleriyle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename(Gozlemİlk_10=Gozlem, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirma, 10) %>% rename(GozlemSon_10=Gozlem, TahminSon_10=Tahmin)
formattable(cbind(Id=seq(1,10),ilk10, son10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modelden elde edilen ilk ve son 10 sınıflandırma tahmini değerleri gözlemlenen sınıflandırma değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Karışıklık matrisi (confusion matrix)’nin oluşturulması

Karışıklık matrisi kurulan model ile tahmin edilen hedef değişken bulgularını gözlemlenen hedef değişken bulguları ile karşılaştırır. Bu matris bir nevi sınıflandırma tablosu olup, gerçekleşen sınıflandırma bulguları ile tahmin edilen sınıflandırma bulgularının frekansı (n)’nı verir.

tahmin<- predict(object = model,  
                            newdata = test, type = "class")
karsilastirma<-tibble(Gozlem=as.factor(test$Species), Tahmin=tahmin)

cm <- karsilastirma %>%
  conf_mat(Gozlem, Tahmin)

#karışıklık matrisi (confusion matrix) grafiği
autoplot(cm, type = "heatmap)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisinin grafiği ise aşağıda verilmiştir.

Hata metrikleri

Kurulan modele ait sınıflandırma hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

confusionMatrix(karsilastirma$Gozlem, karsilastirma$Tahmin

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak hata metrikleri ile birlikte aşağıda verilmiştir. karar ağaçları metoduyla kurulan model iris bitki türlerini yaklaşık % 98 doğruluk (accuracy) oranı ile tahmin etmektedir. Uyumu gösteren Kappa katsayısı ise bu modelde 0,96 olup, tahmin edilen iris bitki türleri ile gözlemlenen bitki türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da doğrular niteliktedir.

Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         15          0         0
  versicolor      0         13         0
  virginica       0          1        16

Overall Statistics
                                          
               Accuracy : 0.9778          
                 95% CI : (0.8823, 0.9994)
    No Information Rate : 0.3556          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.9666          
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                 1.0000            0.9286           1.0000
Specificity                 1.0000            1.0000           0.9655
Pos Pred Value              1.0000            1.0000           0.9412
Neg Pred Value              1.0000            0.9688           1.0000
Prevalence                  0.3333            0.3111           0.3556
Detection Rate              0.3333            0.2889           0.3556
Detection Prevalence        0.3333            0.2889           0.3778
Balanced Accuracy           1.0000            0.9643           0.9828

Gözlem ve tahmin sınıflandırma sonuçlarının xlsx dosyasına yazdırılması

tahmin<- predict(object = model, newdata = test, type = "class")
karsilastirma<-tibble(Gozlem=as.factor(test$Species), Tahmin=tahmin)
write_xlsx(karsilastirma, "karsilastirma1.xlsx")

Yukarıdaki R kod bloğunun çalıştırılmasıyla elde edilen tahmin sonuçları gözlem değerleriyle birlikte xlsx uzantılı olarak aşağıdan indirebilirsiniz.

Ağaç budama işlemi (pruning)

Bu işlemde optimal karar ağaçlarına karar vermek için karışıklık parametre (CP) değeri en düşük olan değer alınarak modele sokularak kurulan model iyileştirilir. Kurulan modelin özetinde başta CP değerleri verilmişti. Ancak aşağıda yazılan küçük bir kodla tekrar verebiliriz.

#CP tablosu
cptablo<-as_tibble(model$cptable)
formattable(cptablo, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`CP` = color_bar("#FF0000")
))
#min CP değeri
model$cptable[which.min(model$cptable[,"xerror"]),"CP"]

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen CP tablosu aşağıda verilmiştir.

Tabloda görüleceği üzere minimum CP değeri 0,01’dir. Ancak yukarıdaki kod bloğunda belirtildiği üzere doğrudan minimum CP değeri bulunmak istenirse kod bloğunun son satırındaki kodun yazılması yeterlidir.

Minimum CP değerini bulduktan sonra şimdi ağaç budama işlemini yapabiliriz aşağıda yazılan kod bloğu ile.

#minimum CP değeri
minimumcp<-model$cptable[which.min(model$cptable[,"xerror"]),"CP"]

# pruning the tree
budama<- prune(model, cp=minimumcp)
budama

#budanmış karar ağacını çizme
fancyRpartPlot(budama, uniform=TRUE,main="Budanmış Karar Ağacı")

Yukarıdaki R kod bloğu çalıştırıldıktan sonra budama işlemi yapılmış karar ağacı aşağı verilmiştir.

Budama işleminden sonra karışıklık matrisi ve hata metrikleri

Kurulan modelin budanmasından sonra sınıflandırma hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

budama<- prune(model, cp=minimumcp)
budamatahmin<- predict(budama, test, type = 'class')

bkarsilastirma<-tibble(Gozlem=as.factor(test$Species), Tahmin=budamatahmin)
cm<-confusionMatrix(bkarsilastirma$Gozlem, bkarsilastirma$Tahmin)
cm

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak hata metrikleri ile birlikte aşağıda verilmiştir. karar ağaçları metoduyla kurulan model iris bitki türlerini yaklaşık % 98 doğruluk (accuracy) oranı ile tahmin etmektedir. Uyumu gösteren Kappa katsayısı ise bu modelde 0,96 olup, tahmin edilen iris bitki türleri ile gözlemlenen bitki türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da doğrular niteliktedir. Budama işleminden sonra ve öncesi elde edilen doğruluk oranı, Kappa katsayı ve karışıklık matrisi değerleri aynıdır. Sonuç olarak budama işlemi (pruning) başlangıçta kurulan modelde ilave bir iyileştirme yapmamıştır.

Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         15          0         0
  versicolor      0         13         0
  virginica       0          1        16

Overall Statistics
                                          
               Accuracy : 0.9778          
                 95% CI : (0.8823, 0.9994)
    No Information Rate : 0.3556          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.9666          
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                 1.0000            0.9286           1.0000
Specificity                 1.0000            1.0000           0.9655
Pos Pred Value              1.0000            1.0000           0.9412
Neg Pred Value              1.0000            0.9688           1.0000
Prevalence                  0.3333            0.3111           0.3556
Detection Rate              0.3333            0.2889           0.3556
Detection Prevalence        0.3333            0.2889           0.3778
Balanced Accuracy           1.0000            0.9643           0.9828

Sonuç

Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik karar ağacı algoritmaları kullanılarak ayrıntılı karşılaştırmalı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk oranı ve uyumluluk (Kappa katsayısı) ile çözüme kavuşturulduğu görülmektedir.

Yüksek doğruluk oranı elde edilen bir diğer algoritma olan Rastgele Orman (Random Forest) algoritması kullanarak sınıflandırma problemlerinin çözümüne yönelik yaptığım çalışma ile ilgilenenler için de linki aşağıda verilmiştir.

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması

Yapılan bu çalışma ile özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunulacağı düşünülmektedir.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Saygılarımla.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Küme Algoritmaları Üzerine Bir Vaka Çalışması: A Case Study on Cluster Algorithms in Solving Classification Problems with R Programming Language

Giriş

Küme geçmeden önce temel kavramları açıklamak konunun anlaşılması açısından önem taşıdığından ilk olarak kısaca bu kavramlara yer verilmiştir.

Küme, benzer özellikleri içinde barındıran topluluk olarak tanımlanabilir. Bu topluluk insan, hayvan, bitki topluluğu olabileceği gibi nesnelerin oluşturduğu topluluk da olabilir. Benzer özellikler taşıyan bu topluluklar diğer kümelerden farklılaşır.

Kümeleme (clustering) analizini ise benzer özelliklere sahip toplulukları gruplara ayırma olarak açıklayabiliriz. Bu analizle bir nevi gruplama yapılmaktadır. Bu analiz türü aynı zamanda yapay zeka öğrenme türlerinden biri olan denetimsiz öğrenme (unsupervised learning)’nin denetimsiz sınıflama (unsupervised classification) başlığı altında değerlendirilir. Çünkü denetimli öğrenme (supervised learning)’de veri önceden tanımlanmış değildir veya önceden sınıflama (denetimli sınıflama) durumu bu analiz türünde söz konusu değildir. Küme analizi bir çok alanda kullanılabilmekle birlikte öne çıkan alanlar şöyle özetlenebilir;

  • Hastalık Teşhisi
  • Tedavi Yöntemleri
  • Sigorta
  • Pazarlama
  • Arazi kullanımı
  • Şehir planlama

Küme Analiz Metodları

  • Herüstik yaklaşımlar
    1. K-Ortalama (k-means) Küme Analiz Metodu: Her bir küme, kümenin merkez noktasıyla temsil edilir.
    2. K-Medoidler (k-medoids) veya PAM Küme Analiz Metodu: Her bir küme, kümedeki nesnelerden biri tarafından temsil edilir.

Küme analizinin kalitesi, sınıf içi benzerlikleri yüksek (varyans düşük) ve kümeler arası benzerliklerin düşük (varyans yüksek) kümelerin elde edilmesine bağlıdır.

Küme algoritmaları hem sınıflandırma (classification) hem de regresyon (regression) problemlerinin çözümünde kullanılan makine öğrenmenin denetimsiz öğrenme (unsupervised) kısmında yer alan algoritmalardır. Burada aslında sınıflandırma ve regresyondan kasıt tahmin edilecek bağımlı veya hedef değişkenin veri tipi ifade edilmektedir. Sınıflandırma ve regresyon için kullanılan veri tipleri Şekil 2’de sunulmuştur. Cevap değişkeni ya da bağımlı değişken kategorik ise küme algoritmalarında sınıflandırma, bağımlı değişken nicel ise küme algoritmalarında regresyon problemini çözmüş oluyorur.

Şekil 2: Küme Analizlerinde Problem Sınıfına Göre Veri Türleri

Küme analizlerinde kurulan modelin veya modellerin performansını değerlendirmede kullanılan hata metrikleri ise genel itibariyle Şekil 3’te verilmiştir. Şekil 3’te yer verilen hata metrikleri gerek makine öğrenme gerekse derin öğrenme modellerinin performansının testinde sıklıkla kullanılmaktadır.

Şekil 3: Hata Metrikleri

Şekil 3’te sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini şimdi de ele alalım. Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris sınıflandırma problemlerinin çözümünde hata metriklerini ortaya koyarak kurulan modelin veya modellerin hata oranını değerlendirmektedir. Hata matrisinin makine ve derin öğrenme metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Aşağıda yer alan tabloda sınıflandırma problemlerinde hata metriklerinin hesaplanmasına esas teşkil eden tablo verilmiştir. Bu tabloyla sınıflandırma hataları hesaplanabilmektedir. Tabloda yer verilen Tip 1 hata (Type 1 error) istatistikte alfa hatasını göstermektedir. Tip 1 hata H0 hipotezi (null hpypothesis) doğru olduğu halde reddedilmesidir. Tabloda Tip 2 hata (Type II error) olarak adlandırılan hata ise istatistikte Beta hatası olarak da bilinmektedir. Tip 2 hata ise H0 hipotezi (null hpypothesis) yanlış olduğu halde kabul edilmesidir.

Kaynak: Stanford Üniversitesi

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki metriklerden yaygın bir şekilde yararlanıldığı görülmektedir.

  • Doğruluk (Accuracy): TP+TN / TP+TN+FP+FN eşitliği ile hesaplanır. Modelin genel performansını ortaya koyar. Bu sınıflandırma metriği ile aslında biz informal bir şekilde dile getirirsek doğru tahminlerin toplam tahminler içindeki oranını hesaplamış oluyoruz.
  • Kesinlik (Precision): TP / TP+FP eşitliği ile hesaplanır. Doğru tahminlerin ne kadar kesin olduğunu gösterir.
  • Geri çağırma (Recall)TP / TP+FN eşitliği ile hesaplanır. Gerçek pozitif örneklerin oranını verir.
  • Özgünlük (Specificity): TN / TN+FP eşitliği ile hesaplanır. Gerçek negatif örneklerin oranını gösterir.
  • F1 skoru : 2TP / 2TP+FP+FN eşitliği ile hesaplanır. Dengesiz sınıflar için yararlı hibrit bir metrik olup, kesinlik (precision) ve geri çağırma (recall) skorlarının ağırlıklı ortalamasını ifade etmektedir.
  • ROC (Receiver operating characteristic): Yukarıda karışıklık matrisinde belirtilen parametrelerden yararlanılarak hesaplanır. ROC eğrisi olarak da adlandırılmaktadır. ROC eğrileri, herhangi bir tahmin modelinin doğru pozitifler (TP) ve negatifler (TN) arasında nasıl ayrım yapabileceğini görmenin güzel bir yoludur. Sınıflandırma modellerinin performansını eşik değerler üzerinden hesaplar. ROC iki parametre üzerinden hesaplanır. Doğru Pozitiflerin Oranı (TPR) ve Yanlış Pozitiflerin Oranı (FPR) bu iki parametreyi ifade eder. Burada aslında biz TPR ile Geri Çağırma (Recall), FPR ile ise 1-Özgünlük (Specificity)‘ü belirtiyoruz.
  • Cohen Kappa: Kategorik cevap seçenekleri arasındaki tutarlılığı ve uyumu gösterir. Cohen, Kappa sonucunun şu şekilde yorumlanmasını önermiştir: ≤ 0 değeri uyumun olmadığını, 0,01–0,20 çok az uyumu, 0,21-0,40 az uyumu, 0,41-0,60 orta, 0,61-0,80 iyi uyumu ve 0,81–1,00 çok iyi uyumu göstermektedir. 1 değeri ise mükemmel uyum anlamına gelmektedir.

Metodoloji ve Uygulama Sonuçları

Bu kısımda kullanılan veri setine ve adım adım küme algoritmalarının uygulamasına yer verilmiştir. Analizde R programlama dili kullanılmıştır. Uygulamaya esas veri seti “iris” bitkisi veri seti olup 150 gözlem ve 6 değişkenden oluşmaktadır. Bu veri seti R’da bulunmaktadır. Veri setindeki değişkenler sırasıyla şöyledir:

  1. sepal length (cm) : Veri tipi nicel ve süreklidir.
  2. sepal width (cm) : Veri tipi nicel ve süreklidir.
  3. petal length (cm) : Veri tipi nicel ve süreklidir.
  4. petal width (cm) : Veri tipi nicel ve süreklidir.
  5. species (türler) : Veri tipi nitel ve nominaldir.
    — Iris Setosa
    — Iris Versicolour
    — Iris Virginica

Metodoloji ve uygulama sonuçları başlığı altında olabilecek en yalın şekilde ele alınmaya çalışılmıştır. Çalışmada amaç species hedef değişkenini diğer bağımlı değişkenler kullanılarak tahmin etmektir. Bu kısımda k-ortalamalar (k-means) ve k-medoidler (k-medoids) hata metrikleri açısından performansları karşılaştırılmıştır. Analize başlamadan önce analiz için yüklenecek R kütüphaneleri verelim. Ardından keşifsel veri analizi (EDA) ile veri setini tanıyalım.

Yüklenecek kütüphaneler

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","randomForest", "aod", "fpc", "DescTools","factoextra","dendextend", "viridis","ggpurr","psych","writexl","ggfortify", "caret","cluster", "yardstick","MASS")

sapply(kütüphaneler, require, character.only = TRUE)

Veri setinin xlsx dosyasına yazdırılması

İhtiyaç duymanız halinde fonksiyonu ile birlikte yeniden kodlanan veri seti aşağıdaki kod yardımıyla xlsx uzantılı olarak excel dosyasına yazdırılmıştır.

#veri setinin xlsx dosyasına yazdırılması
write_xlsx(df1, "veriseti.xlsx")

Yukarıdaki R kod bloğunun çalıştırılması ile edilen veri seti dosyası xlsx uzantılı olarak aşağıda verilmiştir.

Veri setindeki değişkenlerin tanımlayıcı istatistikleri

df1<-iris

ti<-describe(iris[,-5])
formattable(tibble(Değişken=names(df1[,-5]), Aralık=ti$range, Ort=ti$mean, Medyan=ti$median, Ssapma=ti$sd, Carpıklık=ti$skew, Basıklık=ti$kurtosis) %>% mutate_if(is.numeric, round, 1))

#iris bitki türüne göre tanımlayıcı istatistikler
describe.by(df1, df1$Species)

formattable(head(df1,10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen tanımlayıcı istatistikler aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen iris bitkisi türlerine göre tanımlayıcı istatistikler detaylı bir şekilde aşağıdaki tabloda verilmiştir.

Descriptive statistics by group 
group: setosa
             vars  n mean   sd median trimmed  mad min max range skew
Sepal.Length    1 50 5.01 0.35    5.0    5.00 0.30 4.3 5.8   1.5 0.11
Sepal.Width     2 50 3.43 0.38    3.4    3.42 0.37 2.3 4.4   2.1 0.04
Petal.Length    3 50 1.46 0.17    1.5    1.46 0.15 1.0 1.9   0.9 0.10
Petal.Width     4 50 0.25 0.11    0.2    0.24 0.00 0.1 0.6   0.5 1.18
Species*        5 50 1.00 0.00    1.0    1.00 0.00 1.0 1.0   0.0  NaN
             kurtosis   se
Sepal.Length    -0.45 0.05
Sepal.Width      0.60 0.05
Petal.Length     0.65 0.02
Petal.Width      1.26 0.01
Species*          NaN 0.00
--------------------------------------------------------- 
group: versicolor
             vars  n mean   sd median trimmed  mad min max range  skew
Sepal.Length    1 50 5.94 0.52   5.90    5.94 0.52 4.9 7.0   2.1  0.10
Sepal.Width     2 50 2.77 0.31   2.80    2.78 0.30 2.0 3.4   1.4 -0.34
Petal.Length    3 50 4.26 0.47   4.35    4.29 0.52 3.0 5.1   2.1 -0.57
Petal.Width     4 50 1.33 0.20   1.30    1.32 0.22 1.0 1.8   0.8 -0.03
Species*        5 50 2.00 0.00   2.00    2.00 0.00 2.0 2.0   0.0   NaN
             kurtosis   se
Sepal.Length    -0.69 0.07
Sepal.Width     -0.55 0.04
Petal.Length    -0.19 0.07
Petal.Width     -0.59 0.03
Species*          NaN 0.00
--------------------------------------------------------- 
group: virginica
             vars  n mean   sd median trimmed  mad min max range  skew
Sepal.Length    1 50 6.59 0.64   6.50    6.57 0.59 4.9 7.9   3.0  0.11
Sepal.Width     2 50 2.97 0.32   3.00    2.96 0.30 2.2 3.8   1.6  0.34
Petal.Length    3 50 5.55 0.55   5.55    5.51 0.67 4.5 6.9   2.4  0.52
Petal.Width     4 50 2.03 0.27   2.00    2.03 0.30 1.4 2.5   1.1 -0.12
Species*        5 50 3.00 0.00   3.00    3.00 0.00 3.0 3.0   0.0   NaN
             kurtosis   se
Sepal.Length    -0.20 0.09
Sepal.Width      0.38 0.05
Petal.Length    -0.37 0.08
Petal.Width     -0.75 0.04
Species*          NaN 0.00

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setinin ilk 10 satırı aşağıda verilmiştir.

Veri setindeki değişkenlerin özellikleri

str(df1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki değişkenlerin veri tipi ve faktör (kategori) seviyeleri aşağıda verilmiştir.

'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Veri setindeki eksik gözlemlerin (NAs)’nin tespiti

sapply(df1, function(x) sum(is.na(x)))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen çıktı aşağıda verilmiştir. Veri setinde eksik gözlem (missing data) bulunmamaktadır.

 Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
           0            0            0            0            0

Model 1: K Ortalamalar (K Means) Metodu

1 nolu modelin oluşturulması

set.seed(1923)
sonuc <- kmeans(df1[,-5], 3)
sonuc

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen model sonuçları aşağıda verilmiştir.

K-means clustering with 3 clusters of sizes 21, 33, 96

Cluster means:
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1     4.738095    2.904762     1.790476   0.3523810
2     5.175758    3.624242     1.472727   0.2727273
3     6.314583    2.895833     4.973958   1.7031250

Clustering vector:
  [1] 2 1 1 1 2 2 2 2 1 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 2
 [37] 2 2 1 2 2 1 1 2 2 1 2 1 2 2 3 3 3 3 3 3 3 1 3 3 1 3 3 3 3 3 3 3 3 3 3 3
 [73] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3 3 3 3 3 3 3 3 3
[109] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[145] 3 3 3 3 3 3

Within cluster sum of squares by cluster:
[1]  17.669524   6.432121 118.651875
 (between_SS / total_SS =  79.0 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"    
[5] "tot.withinss" "betweenss"    "size"         "iter"        
[9] "ifault"     

Karışıklık matrisi (confusion matrix)’nin oluşturulması

Karışıklık matrisi kurulan model ile tahmin edilen hedef değişken bulgularını gözlemlenen hedef değişken bulguları ile karşılaştırır. Bu matris bir nevi sınıflandırma tablosu olup, gerçekleşen sınıflandırma bulguları ile tahmin edilen sınıflandırma bulgularının frekansı (n)’nı verir.

karsilastirma<-tibble(Küme=ifelse(sonuc$cluster==1, "setosa",ifelse(sonuc$cluster==2, "versicolor", "virginica")), Tahmin=df1$Species)%>% group_by(Küme, Tahmin) %>% summarise(Sayi=n()) 
karsilastirma %>% spread(Tahmin, Sayi, fill = 0)

#alternatif

karsilastirmak<-tibble(Gercek=ifelse(sonuc$cluster==1, "setosa",ifelse(sonuc$cluster==2, "versicolor", "virginica")), Tahmin=df1$Species)%>% mutate_if(is.character, as.factor)
cm <- karsilastirmak %>%
  conf_mat(Tahmin, Gercek)
cm
#karışıklık matriks (confusion matrix) grafiği
autoplot(cm, type = "heatmap

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisinin grafiği ise aşağıda verilmiştir.

Hata metrikleri

Kurulan 1 nolu modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

confusionMatrix(karsilastirmak$Gercek, karsilastirmak$Tahmin)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak hata metrikleri ile birlikte aşağıda verilmiştir. K-ortalamalar metoduyla kurulan model iris bitki türlerini yaklaşık % 45 doğruluk (accuracy) oranı ile tahmin etmektedir. Uyumu gösteren Kappa katsayısı ise bu modelde 0,17 olup, tahmin edilen iris bitki türleri ile gözlemlenen bitki türleri arasında uyumun çok düşük olduğu göstermektedir. Bu bulgu aynı zamanda doğruluk oranını da doğrular niteliktedir.

Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         17          4         0
  versicolor     33          0         0
  virginica       0         46        50

Overall Statistics
                                          
               Accuracy : 0.4467          
                 95% CI : (0.3655, 0.5299)
    No Information Rate : 0.3333          
    P-Value [Acc > NIR] : 0.002528        
                                          
                  Kappa : 0.17            
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                 0.3400            0.0000           1.0000
Specificity                 0.9600            0.6700           0.5400
Pos Pred Value              0.8095            0.0000           0.5208
Neg Pred Value              0.7442            0.5726           1.0000
Prevalence                  0.3333            0.3333           0.3333
Detection Rate              0.1133            0.0000           0.3333
Detection Prevalence        0.1400            0.2200           0.6400
Balanced Accuracy           0.6500            0.3350           0.7700

Gözlem ve tahmin sınıflandırma sonuçlarının xlsx dosyasına yazdırılması

kortalama<-tibble(Gözlem=ifelse(sonuc$cluster==1, "setosa",ifelse(sonuc$cluster==2, "versicolor", "virginica")), Tahmin=df1$Species)
write_xlsx(kortalama, "kortalama.xlsx")

Yukarıdaki R kod bloğunun çalıştırılmasıyla elde edilen tahmin sonuçları gözlem değerleriyle birlikte xlsx uzantılı olarak aşağıdan indirebilirsiniz.

Kümelerin grafikle gösterilmesi

set.seed(1923)
sonuc <- kmeans(df1[,-5], 3)
fviz_cluster(sonuc, df1[, -5], ellipse.type = "norm")

Yukarıdaki R kod bloğunun yazılmasından sonra elde k-ortalamalar küme grafiği aşağıda verilmiştir. Kümelerin çok iç içe girdiği birbirinden ayrışmadığı görülmektedir. Bu durum sınıflandırmanın çok da iyi olmadığını göstermektedir.

Model 2: K-Medoidler (K Medoids) Metodu

2 nolu modelin oluşturulması

set.seed(1900)
psonuc <- pamk(df1[,-5],3)
psonuc

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen model sonuçları aşağıda verilmiştir.

$pamobject
Medoids:
      ID Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,]   8          5.0         3.4          1.5         0.2
[2,]  79          6.0         2.9          4.5         1.5
[3,] 113          6.8         3.0          5.5         2.1
Clustering vector:
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [37] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [73] 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3
[109] 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3
[145] 3 3 2 3 3 2
Objective function:
    build      swap 
0.6709391 0.6542077 

Available components:
 [1] "medoids"    "id.med"     "clustering" "objective"  "isolation" 
 [6] "clusinfo"   "silinfo"    "diss"       "call"       "data"      

$nc
[1] 3

$crit
[1] 0.000000 0.000000 0.552819

Karışıklık matrisi (confusion matrix)’nin oluşturulması

karsilastirma<-tibble(Küme=ifelse(psonuc$pamobject$clustering==1, "setosa",ifelse(psonuc$pamobject$clustering==2, "versicolor", "virginica")), Tahmin=df1$Species)%>% group_by(Küme, Tahmin) %>% summarise(Sayi=n()) 
karsilastirma<-karsilastirma %>% spread(Tahmin, Sayi, fill = 0)
formattable(karsilastirma)

#alternatif

karsilastirmat<-tibble(Gercek=ifelse(psonuc$pamobject$clustering==1, "setosa",ifelse(psonuc$pamobject$clustering==2, "versicolor", "virginica")), Tahmin=df1$Species)%>% mutate_if(is.character, as.factor)
cm <- karsilastirmat %>%
  conf_mat(Tahmin, Gercek)
cm
#karışıklık matriks (confusion matrix) grafiği
autoplot(cm, type = "heatmap")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisinin grafiği ise aşağıda verilmiştir.

Hata metrikleri

Kurulan 2 nolu modele ait hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

confusionMatrix(karsilastirmak$Gercek, karsilastirmak$Tahmin)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak hata metrikleri ile birlikte aşağıda verilmiştir. K-medoidler metoduyla kurulan model iris bitki türlerini % 89 doğruluk (accuracy) oranı ile tahmin etmektedir. Uyumu gösteren Kappa katsayısı ise bu modelde 0,84 olup, tahmin edilen iris bitki türleri ile gözlemlenen bitki türleri arasında uyumun çok yüksek olduğu göstermektedir. Bu bulgu aynı zamanda yüksek doğruluk oranını da doğrular niteliktedir.

            Truth
Prediction   setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         48        14
  virginica       0          2        36
Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         48        14
  virginica       0          2        36

Overall Statistics
                                          
               Accuracy : 0.8933          
                 95% CI : (0.8326, 0.9378)
    No Information Rate : 0.3333          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.84            
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                 1.0000            0.9600           0.7200
Specificity                 1.0000            0.8600           0.9800
Pos Pred Value              1.0000            0.7742           0.9474
Neg Pred Value              1.0000            0.9773           0.8750
Prevalence                  0.3333            0.3333           0.3333
Detection Rate              0.3333            0.3200           0.2400
Detection Prevalence        0.3333            0.4133           0.2533
Balanced Accuracy           1.0000            0.9100           0.8500

Gözlem ve tahmin sınıflandırma sonuçlarının xlsx dosyasına yazdırılması

kmedoidler<-tibble(Gözlem=ifelse(psonuc$pamobject$clustering==1, "setosa",ifelse(psonuc$pamobject$clustering==2, "versicolor", "virginica")), Tahmin=df1$Species)
write_xlsx(kmedoidler, "kmedoidler.xlsx")

Yukarıdaki R kod bloğunun çalıştırılmasıyla elde edilen tahmin sonuçları gözlem değerleriyle birlikte xlsx uzantılı olarak aşağıdan indirebilirsiniz.

Kümelerin grafikle gösterilmesi

set.seed(1900)
psonuc <- pam(df1[,-5],3)
fviz_cluster(psonuc, geom = "point", ellipse.type = "norm")

Yukarıdaki R kod bloğunun yazılmasından sonra elde edilen k-medoidler küme grafiği aşağıda verilmiştir.

Sonuç

Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik küme analiz metodlarından k-ortalama ve k-medoidler kullanılarak ayrıntılı karşılaştırmalı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin k-medoidler tarafından başarılı bir şekilde, diğer bir ifadeyle yüksek bir doğruluk oranıyla çözüme kavuşturulduğu görülmektedir.

Her iki yöntem sınıflandırma hata metrikleri açısından karşılaştırıldığında öne çıkan bulgular şöyledir: K-medoidler bağımlı değişken olan “species” değişkenini çok daha iyi tahmin etmektedir. Bu yöntemde doğruluk (accuracy) oranı % 89,3 düzeyindeyken, k-ortalamalar yönteminde bu oran yaklaşık % 45 düzeyinde kalmıştır. Diğer bir ifadeyle k-medoidler yöntemi bağımlı değişkeni k-ortalamalar yönteminden neredeyse iki kat daha iyi tahmin etmektedir. Elde edilen sonuçların uyumunu gösteren Kappa katsayısı da bunun iyi bir göstergesidir. Yüksek katsayı yüksek uyumu gösterir ve bu istenen bir durumdur. K-ortalamalar yönteminden elde Kappa katsayısı çok düşük (0,17) iken, bu katsayı k-medoidler yönteminde çok yüksek (0,84)’tir.

Yapılan bu çalışma ile özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunulacağı düşünülmektedir.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Saygılarımla.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

R Programlama Diliyle Regresyon Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Regression Problems with R Programming Language

Giriş

Rastgele Orman (RF) algoritması , 2001 yılında Breiman tarafından karar ağaçlarının bir kombinasyonu olarak önerilmiştir. RF en iyi “her ağaç, bağımsız olarak örneklenen ve ormandaki tüm ağaçlar için aynı dağılıma sahip rastgele bir vektörün değerlerine bağlı olacak şekilde ağaç belirleyicilerinin kombinasyonu” olarak tanımlanan bir topluluk makine öğrenme algoritmasıdır. Topluluk algoritması gerek regresyon gerekse sınıflandırma problemlerinde varyansı ve hatayı azaltarak daha iyi hedef değişken veya bağımlı değişkeni tahmin etmemize olanak tanır. Bunu da yeniden örnekleme yöntemi (bootstrap aggregation or bagging)’yle yapar. Bu yöntemde sırasıyla tesadüfi tekrarlı örneklem yöntemi (simple random sampling with replacement) kullanılarak veri seti alt örneklem kümelerine, diğer bir ifade ile alt örneklem ağaç kümelerine ayrılır. Bunların tamamı kurulan modelde hatayı azaltmaya yöneliktir. Anlatılanı Şekil 1 üzerinde gösterelim. Şekilde modellerin paralel düzende inşa edildiğine dikkat etmek gerekir. Modellerin oluşturulmasında çaprazlama bulunmamaktadır.

Şekil 1: Rastgele Orman Algoritmasında Yeniden Örnekleme (Bootstrapping)

RF, karar ağaçlarına dayanır. Makine öğreniminde karar ağaçları, tahmin modelleri oluşturan denetimli öğrenme tekniğidir. Bunlara karar ağaçları (decision trees) adı verilmektedir. Bu yöntemin özellikle mühendislik bilimlerinde başta sağlık sektörü olmak üzere pek çok sektörde yaygın bir şekilde kullanıldığı görülmektedir.

Rastgele orman algoritmaları hem sınıflandırma (classification) hem de regresyon (regression) problemlerinin çözümünde kullanılan makine öğrenmenin denetimli öğrenme (supervised) kısmında yer alan tahmin oranı yüksek algoritmalardır. Burada aslında sınıflandırma ve regresyondan kasıt tahmin edilecek bağımlı veya hedef değişkenin veri tipi ifade edilmektedir. Sınıflandırma ve regresyon için kullanılan veri tipleri Şekil 2’de sunulmuştur. Cevap değişkeni ya da bağımlı değişken kategorik ise rastgele orman algoritmasında sınıflandırma, bağımlı değişken nicel ise rastgele orman algoritmasında regresyon problemini çözmüş oluyoruz. RF analizlerde uç değerler (outliers)’e duyarlı değildir.

Şekil 2: Rastgele Orman (RF) Algoritmasında Proplem Sınıfına Göre Veri Tüleri

RF’te kurulan modelin veya modellerin performansını değerlendirmede kullanılan hata metrikleri ise genel itibariyle Şekil 3’te verilmiştir. Şekil 3’te yer verilen hata metrikleri gerek makine öğrenme gerekse derin öğrenme modellerinin performansının testinde sıklıkla kullanılmaktadır.

Şekil 3: Rastgele Orman Algoritması Hata Metrikleri

Şekil 3’te sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini şimdi de ele alalım. Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris sınıflandırma problemlerinin çözümünde hata metriklerini ortaya koyarak kurulan modelin veya modellerin hata oranını değerlendirmektedir. Hata matrisinin makine ve derin öğrenme metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Aşağıda yer alan tabloda hata metriklerinin hesaplanmasına esas teşkil eden tablo verilmiştir. Bu tabloyla sınıflandırma hataları hesaplanabilmektedir. Tabloda yer verilen Tip 1 hata (Type 1 error) istatistikte alfa hatasını göstermektedir. Tip 1 hata H0 hipotezi (null hpypothesis) doğru olduğu halde reddedilmesidir. Tabloda Tip 2 hata (Type II error) olarak adlandırılan hata ise istatistikte Beta hatası olarak da bilinmektedir. Tip 2 hata ise H0 hipotezi (null hpypothesis) yanlış olduğu halde kabul edilmesidir.

Kaynak: Stanford Üniversitesi

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki metriklerden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Rastgele Orman Algoritması (RF) kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language

Sınıflandırma Metrikleri

  • Doğruluk (Accuracy): TP+TN / TP+TN+FP+FN eşitliği ile hesaplanır. Modelin genel performansını ortaya koyar. Bu sınıflandırma metriği ile aslında biz informal bir şekilde dile getirirsek doğru tahminlerin toplam tahminler içindeki oranını hesaplamış oluyoruz.
  • Kesinlik (Precision): TP / TP+FP eşitliği ile hesaplanır. Doğru tahminlerin ne kadar kesin olduğunu gösterir.
  • Geri çağırma (Recall)TP / TP+FN eşitliği ile hesaplanır. Gerçek pozitif örneklerin oranını verir.
  • Özgünlük (Specificity): TN / TN+FP eşitliği ile hesaplanır. Gerçek negatif örneklerin oranını gösterir.
  • F1 skoru : 2TP / 2TP+FP+FN eşitliği ile hesaplanır. Dengesiz sınıflar için yararlı hibrit bir metrik olup, kesinlik (precision) ve geri çağırma (recall) skorlarının ağırlıklı ortalamasını ifade etmektedir.
  • ROC (Receiver operating characteristic): Yukarıda karışıklık matrisinde belirtilen parametrelerden yararlanılarak hesaplanır. ROC eğrisi olarak da adlandırılmaktadır. ROC eğrileri, herhangi bir tahmin modelinin doğru pozitifler (TP) ve negatifler (TN) arasında nasıl ayrım yapabileceğini görmenin güzel bir yoludur. Sınıflandırma modellerin perfomansını eşik değerler üzerinden hesaplar. ROC iki parametre üzerinden hesaplanır. Doğru Pozitiflerin Oranı (TPR) ve Yanlış Pozitiflerin Oranı (FPR) bu iki parametreyi ifade eder. Burada aslında biz TPR ile Geri Çağırma (Recall), FPR ile ise 1-Özgünlük (Specificity)‘ü belirtiyoruz.
  • Cohen Kappa: Kategorik cevap seçenekleri arasındaki tutarlılığı ve uyumu gösterir. Cohen, Kappa sonucunun şu şekilde yorumlanmasını önermiştir: ≤ 0 değeri uyumun olmadığını, 0,01–0,20 çok az uyumu, 0,21-0,40 az uyumu, 0,41-0,60 orta, 0,61-0,80 iyi uyumu ve 0,81–1,00 çok iyi uyumu göstermektedir. 1 değeri ise mükemmel uyum anlamına gelmektedir.

Şekil 3’te yer verilen regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki metriklerden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eştiliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.

Regresyon Metrikleri

  • SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
  • MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
  • RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
  • MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
  • MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
  • Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.

Regresyon metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Metodoloji ve Uygulama Sonuçları

Bu kısımda kullanılan veri setine ve adım adım Rastgele Orman algoritmasının regresyon problemlerinin çözümünde nasıl uygulandığına yer verilmiştir. Analizde R programlama dili kullanılmıştır. Uygulamaya esas veri seti Amerikan Ulusal Ekonomik Araştırmalar Bürosu (the National Bureau of Economic Research) kısa adıyla NBER’in resmi web sitesinden alınmıştır. Web sitesinin linki: https://data.nber.org/ dir. Veri setinin alındığı linkin tam adı ise http://data.nber.org/nberces/nberces5811/naics5811.xls dir.

Veri seti 1958’den 2011’e kadar ABD imalat sektöründeki katma değer ve toplam faktör verimliliği (TFV) göstergelerinden oluşan zengin ve hacmi geniş bir veri setidir. Orjinal (ingilizce) xlsx uzantılı veri setini aşağıdaki linkten indirebilirsiniz. Veri setindeki toplam gözlem sayısı 25542, değişken sayısı ise 25’tir.

R’da analize uygun hale getirdiğim aynı veri setinin Türkçe versiyonunu ise aşağıdaki linkten indirebilirsiniz. Veri setinin Türkçeye çevrilmesinin nedeni anlaşılırlığın artırılmak istenmesidir.

Veri seti “sira” hariç 8 değişkenden oluşmakta olup, anlaşılırlığı artırmak adına Türkçeye çevrilmiştir. Değişkenlerin tamamının veri türü nicel ve sürekli olup orjinal (ingilizce) adlarıyla birlikte aşağıda verilmiştir:

  1. tistihdam: Toplam istihdamı göstermekte olup, orjinal veri setindeki adı “emp” dir. İstihdam değerleri 1000’e bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  2. maas: Sektör çalışanlarının maaşlarını göstermekte olup, orjinal veri setindeki adı “pay” dir. Maaş değerleri 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  3. iistihdam: Üretim bandında çalışanların sayısını göstermekte olup, orjinal veri setindeki adı “prode” dur. Çalışan sayısı değerleri 1000’e bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  4. icsaati: Üretim bandında çalışanların çalışma saatlerini göstermekte olup, orjinal veri setindeki adı “prodeh” dır. Çalışma saatleri 1 milyona bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  5. sbu: Üretim bandında çalışanların ücretlerini göstermekte olup, orjinal veri setindeki adı “prodew” dır. Çalışma ücretleri 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  6. netsatis: Ne satışları göstermekte olup, orjinal veri setindeki adı “vship” tir. Net satışlar 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  7. mmaliyeti: Malzeme maliyetlerini göstermekte olup, orjinal veri setindeki adı “matcost” tur. Maliyetler 1 milyon $’a bölünerek verilmiştir. Bağımsız değişken olarak alınmıştır.
  8. katmadeger: Katma değeri göstermekte olup, orjinal veri setindeki adı “vadd” tir. Katma değer 1 milyon $’a bölünerek verilmiştir. Bağımlı / hedef değişken (target variable) olarak alınmıştır.

Çalışmanın amacı yukarıda belirtilen bağımsız değişkenler ile bağımlı değişken olan “katmadeger” değişkenini tahmin etmektir.

Metodoloji ve uygulama sonuçları başlığı altında Rastgele Orman algoritmasına üzerine kurulan modeller olabilecek en yalın şekilde karşılaştırmalı olarak ele alınmaya çalışılmıştır. Daha sonra kurulan bu modeller hata metrikleri açısından karşılaştırılmıştır.

Analize başlamadan önce analiz için yüklenecek R kütüphaneleri verelim. Ardından keşifsel veri analizi (EDA) ile veri setini tanıyalım.

Yüklenecek kütüphaneler

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","randomForest", "aod", "DescTools", "ggpurr","psych","writexl","ggfortify", "caret","Metrics", "performanceEstimation", "yardstick","MASS")

sapply(kütüphaneler, require, character.only = TRUE)

Veri setinin kaynak web sitesinden okunması

url <- "http://data.nber.org/nberces/nberces5811/naics5811.xls"
dosyaadi <- "naics5811.xls"
curl::curl_download(url, dosyaadi)
veri <- read_excel(dosyaadi)
veri

Veri setinin Türkçeye dönüştürülmesi ve analiz değişkenlerinin belirlenmesi

df<-veri[,3:10] %>% as_tibble() %>% rename(tistihdam=emp, maas=pay, iistihdam=prode, icsaati=prodh, sbu=prodw, netsatis=vship, mmaliyeti=matcost, katmadeger=vadd) %>% rowid_to_column() %>% rename(sira=rowid)
df

Veri setindeki eksik gözlemlerin (Missing Data: NA) tespit edilmesi ve veri setinden çıkarılması

#Eksik gözlemlerin (NAs) sayısının değişkene göre belirlenmesi
nan<-sapply(df, function(x) sum(is.na(x))) %>% as_tibble()
nan<-cbind(Değişken=names(df), n=nan) %>% as_tibble()
formattable(nan)

#Eksik gözlemlerin (NAs) veri setinden çıkarılması
df1<-na.omit(df)
nan1<-sapply(df1, function(x) sum(is.na(x))) %>% as_tibble()
nan1<-cbind(Değişken=names(df), n=nan1) %>% as_tibble()
formattable(nan1)

#ilk 10 kayıt
formattable(head(df1, 10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setinde değişkenlere göre belirlenen eksik veri (NA) diğer bir ifadeyle eksik gözlem sayısı aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setinde değişkenlere göre belirlenen eksik gözlemler veri setinden çıkarılmış olup aşağıdaki tabloda son durumda veri setindeki eksik gözlem sayıları gösterilmiştir.

Veri setinin xlsx dosyasına yazdırılması

İhtiyaç duymanız halinde fonksiyonu ile birlikte eksik gözlemler (NAs)’den arındırılmış veri seti aşağıdaki kod yardımıyla xlsx uzantılı olarak excel dosyasına yazdırılmıştır.

writexl::write_xlsx(df1, "verisetiturkcekayipsizveri.xlsx")

Yukarıdaki R kod bloğunun çalıştırılması ile edilen veri seti dosyası xlsx uzantılı olarak aşağıda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setinin ilk 10 satırı aşağıda verilmiştir.

Veri setindeki değişkenlerin özellikleri

str(df1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki değişkenlerin veri tipleri, gözlem sayılarıyla birlikte aşağıda verilmiştir.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	25386 obs. of  9 variables:
 $ sira      : int  1 2 3 4 5 6 7 8 9 10 ...
 $ tistihdam : num  18 17.9 17.7 17.5 17.6 17.1 16.6 16 16.1 16.7 ...
 $ maas      : num  81.3 82.5 84.8 87.4 90.2 89.8 90.8 90.8 96.1 105 ...
 $ iistihdam : num  12 11.8 11.7 11.5 11.5 11 10.6 10.2 10.2 11 ...
 $ icsaati   : num  25.7 25.5 25.4 25.4 25.2 23.9 23.5 22.7 22.6 23.9 ...
 $ sbu       : num  49.8 49.4 50 51.4 52.1 52.1 52.2 51.8 53.9 61.3 ...
 $ netsatis  : num  1042 1051 1050 1120 1176 ...
 $ mmaliyeti : num  752 759 753 804 853 ...
 $ katmadeger: num  267 269 270 288 294 ...
 - attr(*, "na.action")= 'omit' Named int  1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 ...
  ..- attr(*, "names")= chr  "1729" "1730" "1731" "1732" ...

Tanımlayıcı istatistikler

ti<-describe(df1[,-1])
formattable(tibble(Değişken=names(df1[,-1]), Aralık=ti$range, Ort=ti$mean, Medyan=ti$median, Ssapma=ti$sd, Carpıklık=ti$skew, Basıklık=ti$kurtosis) %>% mutate_if(is.numeric, round, 1))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen tanımlayıcı istatistikler aşağıdaki tabloda verilmiştir.

Değişkenler arasındaki korelasyon

Nicel ve sürekli değişkenlerin korelasyon katsayılarını hesaplamak için Pearson korelasyon katsayısı kullanılmış olup, yazılan R kod bloğu aşağıdadır.

com<-round(cor(df1[,-1]), 1)
com<-cbind(Değisken=names(df[,-1]), com) %>% as_tibble()
formattable(com)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen korelasyon katsayıları aşağıdaki tabloda verilmiştir.

Veri setinin eğitilecek veri ve test setine ayrılması

set.seed(1919)
#Eğitilecek veri seti (training set)
train1 <- df1 %>% sample_frac(.70)
train1
#Test edilecek veri seti
test1  <- anti_join(df1, train1, by = 'sira')#Anti join fonksiyonu eşleşmeyen kayıtları yani geri kalan kayıtları getirir ve onları test setine atar.
test1

Model 1

1 nolu modelin oluşturulması

model1<-randomForest(katmadeger ~ ., train1[,-1])

print(model1)

summary(model1)

plot(model1, main="Model 1: Rastgele Orman (RF) Algoritmasının Hata Oranı")

Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin açıklanan varyans (% 96,05) aşağıda verilmiştir.

Call:
 randomForest(formula = katmadeger ~ ., data = train1[, -1]) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 2

          Mean of squared residuals: 956776.9
                    % Var explained: 96.05

Yukarıdaki kod bloğunun çalıştırılmasından sonra çizilen modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelindeki regresyon hata oranlarını göstermektedir. Ağaç sayısı (ntree) arttıkça hata oranı sıfıra yaklaşır ve belirli noktadan sonra durağanlaşır. Burada ağaç sayısının az olması elde edilecek sonuçların varyansını artırarak hatayı yükseltir.

1 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model1)
k<-tibble(Değişken=as.vector(row.names(k)), Dugum_Safligi=as.vector(importance(model1)))%>%arrange(desc(Dugum_Safligi))
formattable(k, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Dugum_Safligi` = color_bar("#00FF7F")
))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri düğüm saflıkları (Inc Node Purity)’na göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Tahmin edilen değerler ile gözlem değerlerinin karşılaştırılması

pred1<-predict(model1, test1)

karsilastirma<-tibble(Gercek=test1$katmadeger, Tahmin=pred1)

#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename(Gercekİlk_10=Gercek, Tahminİlk_10=Tahmin) %>% mutate_if(is.numeric, round, 1)

son10<-tail(karsilastirma, 10) %>% rename(GercekSon_10=Gercek, TahminSon_10=Tahmin) %>% mutate_if(is.numeric, round, 1)

formattable(cbind(Sıra=seq(1,10),ilk10, son10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modelden elde edilen ilk ve son 10 gözlem değerleri ile tahmin değerleri aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Regresyon metrikleri

Kurulan 1 nolu modele ait hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

karsilastirma<-tibble(Gercek=test1$katmadeger, Tahmin=pred1)
metrik<-tibble(SSE=sse(karsilastirma$Gercek, karsilastirma$Tahmin), MSE=mse(karsilastirma$Gercek, karsilastirma$Tahmin),RMSE=rmse(karsilastirma$Gercek, karsilastirma$Tahmin), MAE= mae(karsilastirma$Gercek, karsilastirma$Tahmin),MAPE= mape(karsilastirma$Gercek, karsilastirma$Tahmin), Bias= bias(karsilastirma$Gercek, karsilastirma$Tahmin))%>% mutate_if(is.numeric, round, 1)
formattable(metrik)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait hata parametre değerleri aşağıda verilmiştir.

Çapraz performans testi (Cross validation test)

Çapraz performans testi veri setindeki gözlem sayısına ve bilgisayar işlemci kapasitelerine bağlı olarak uzun sürebilmektedir. Sabırlı olmakta fayda var 🙂

set.seed(1919)
cv<- performanceEstimation(
  PredTask(katmadeger ~ ., df1[,-1]),
    workflowVariants(learner=("randomForest")),
 EstimationTask(metrics = c("mse", "mae", "rmse"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)
plot(cv)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==

Task for estimating  mse,mae,rmse  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 

* Predictive Tasks ::  df1[, -1].katmadeger
* Workflows  ::  randomForest 

-> Task:  df1[, -1].katmadeger
  *Workflow: randomForest 
              mse       mae      rmse
avg      757383.7 195.22316  842.1489
std      399589.1  17.73925  231.3462
med      600792.8 190.91481  774.9974
iqr      722966.5  27.63886  415.4534
min      277804.7 168.18802  527.0718
max     1310045.6 222.07900 1144.5722
invalid       0.0   0.00000    0.0000

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıdaki grafikte verilmiştir.

Model 2

2 nolu modelin oluşturulması

which.min(model1$mse)#1. modelde büyütülecek ağaçlarının sayısını minimum yapan hata

set.seed(1920)
model2<-randomForest(katmadeger ~ ., train1[,-1], ntree=54, mtry=8/3)#modelde mtyr her bölümde rastgele aday olarak örneklenen değişken sayısını (p=değişken sayısı/3) göstermektedir. 

print(model2)

summary(model2)

plot(model2, main="Model 2: Rastgele Orman (RF) Algoritmasının Hata Oranı")

Yukarıdaki kod bloğunun çalıştırılmasından sonra kurulan modele ilişkin açıklanan varyans (% 97,26) aşağıda verilmiştir.

Call:
 randomForest(formula = katmadeger ~ ., data = train1[, -1], ntree = 54,      mtry = 8/3) 
               Type of random forest: regression
                     Number of trees: 54
No. of variables tried at each split: 3

          Mean of squared residuals: 719121.7
                    % Var explained: 97.26

Yukarıdaki kod bloğunun çalıştırılmasından sonra çizilen modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelindeki regresyon hata oranlarını göstermektedir. Ağaç sayısı (ntree) arttıkça hata oranı sıfıra yaklaşır ve belirli noktadan sonra durağanlaşır. Burada ağaç sayısının çok az veya fazla olması elde edilecek sonuçların varyansını artırarak hatayı yükseltebilir.

2 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model2)
k<-tibble(Değişken=as.vector(row.names(k)), Dugum_Safligi=as.vector(importance(model2)))%>%arrange(desc(Dugum_Safligi))
k

formattable(k, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Dugum_Safligi` = color_bar("#B0C4DE")
))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri düğüm saflıkları (Inc Node Purity)’na göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Regresyon metrikleri

Kurulan 2 nolu modele ait hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

pred2<-predict(model2, test1)

karsilastirma2<-tibble(Gercek=test1$katmadeger, Tahmin=pred2)

metrik<-tibble(SSE=sse(karsilastirma2$Gercek, karsilastirma2$Tahmin), MSE=mse(karsilastirma2$Gercek, karsilastirma2$Tahmin),RMSE=rmse(karsilastirma2$Gercek, karsilastirma2$Tahmin), MAE= mae(karsilastirma2$Gercek, karsilastirma2$Tahmin),MAPE= mape(karsilastirma2$Gercek, karsilastirma2$Tahmin), Bias= bias(karsilastirma2$Gercek, karsilastirma2$Tahmin))%>% mutate_if(is.numeric, round, 1)
formattable(metrik)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait hata parametre değerleri aşağıda verilmiştir.

set.seed(1920)
cv<- performanceEstimation(
  PredTask(katmadeger ~ ., df1[,-1]),
  workflowVariants(learner="randomForest", learner.pars=list(ntree=54, mtry=8/3)),
 EstimationTask(metrics = c("mse", "mae", "rmse"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)

#rankWorkflows(cv, top = 3)

plot(cv)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==

Task for estimating  mse,mae,rmse  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 

* Predictive Tasks ::  df1[, -1].katmadeger
* Workflows  ::  randomForest 

-> Task:  df1[, -1].katmadeger
  *Workflow: randomForest 
              mse       mae      rmse
avg      620028.2 154.33328  767.2455
std      311613.2  14.63084  186.6741
med      545472.8 154.55071  736.9520
iqr      295773.3  20.45502  201.6927
min      309424.4 123.09429  556.2593
max     1231557.9 167.92314 1109.7558
invalid       0.0   0.00000    0.0000

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıdaki grafikte verilmiştir.

Sonuç

Bu çalışmada regresyon (regression) probleminin çözümüne yönelik Rastgele Orman (RF) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, kurulan regresyon modelleri içerisinde 1. modeldeki bağımsız değişkenler bağımlı değişkendeki varyansın % 96’sını, 2. model ise varyansın % 97’sini açıklamaktadır. Modellere ilişkin çapraz performans testi sonuçları aşağıdaki tabloda verilmiş olup, 2. modelde üretilen ortalamalar hatalar 1. modele göre daha az olduğu için 2. model bağımlı değişken olan “katmadeger” i daha iyi tahmin ettiği söylenebilir.

ModelMSEMAERMSE
Model 1757383.7195.2842.2
Model 2620028.2154.3767,3

Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı düşünülmektedir.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Saygılarımla.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language

Giriş

Rastgele Orman (RF) algoritması , 2001 yılında Breiman tarafından karar ağaçlarının bir kombinasyonu olarak önerilmiştir. RF en iyi “her ağaç, bağımsız olarak örneklenen ve ormandaki tüm ağaçlar için aynı dağılıma sahip rastgele bir vektörün değerlerine bağlı olacak şekilde ağaç belirleyicilerinin kombinasyonu” olarak tanımlanan bir topluluk makine öğrenme algoritmasıdır. Topluluk algoritması gerek regresyon gerekse sınılandırma problemlerinde varyansı ve hatayı azaltarak daha iyi hedef değişken veya bağımlı değişkeni tahmin etmemize olanak tanır. Bunu da yeniden örnekleme yöntemi (bootstrap aggregation or bagging)’yle yapar. Bu yöntemde sırasıyla tesadüfi tekrarlı örneklem yöntemi (simple random sampling with replacement) kullanılarak veri seti alt örneklem kümelerine, diğer bir ifade ile alt örneklem ağaç kümelerine ayrılır. Bunların tamamı kurulan modelde hatayı azaltmaya yöneliktir. Anlatılanı Şekil 1 üzerinde gösterelim. Şekilde modellerin paralel düzende inşa edildiğine dikkat etmek gerekir. Modellerin oluşturulmasında çaprazlama bulunmamaktadır.

Şekil 1: Rastgele Orman Algoritmasında Yeniden Örnekleme (Bootstrapping)

RF, karar ağaçlarına dayanır. Makine öğreniminde karar ağaçları, tahmin modelleri oluşturan denetimli öğrenme tekniğidir. Bunlara karar ağaçları (decision trees) adı verilmektedir. Bu yöntemin özellikle mühendislik bilimlerinde başta sağlık sektörü olmak üzere pek çok sektörde yaygın bir şekilde kullanıldığı görülmektedir.

Rastgele orman algoritmaları hem sınıflandırma (classification) hem de regresyon (regression) problemlerinin çözümünde kullanılan makine öğrenmenin denetimli öğrenme (supervised) kısmında yer alan tahmin oranı yüksek algoritmalardır. Burada aslında sınıflandırma ve regresyondan kasıt tahmin edilecek bağımlı veya hedef değişkenin veri tipi ifade edilmektedir. Sınıflandırma ve regresyon için kullanılan veri tipleri Şekil 2’de sunulmuştur. Cevap değişkeni ya da bağımlı değişken kategorik ise rastgele orman algoritmasında sınıflandırma, bağımlı değişken nicel ise rastgele orman algoritmasında regresyon problemini çözmüş oluyoruz. RF analizlerde uç değerler (outliers)’e duyarlı değildir.

Şekil 2: Rastgele Orman (RF) Algoritmasında Proplem Sınıfına Göre Veri Tüleri

RF’te kurulan modelin veya modellerin performansını değerlendirmede kullanılan hata metrikleri ise genel itibariyle Şekil 3’te verilmiştir. Şekil 3’te yer verilen hata metrikleri gerek makine öğrenme gerekse derin öğrenme modellerinin performansının testinde sıklıkla kullanılmaktadır.

Şekil 3: Rastgele Orman Algoritması Hata Metrikleri

Şekil 3’te sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini şimdi de ele alalım. Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris sınıflandırma problemlerinin çözümünde hata metriklerini ortaya koyarak kurulan modelin veya modellerin hata oranını değerlendirmektedir. Hata matrisinin makine ve derin öğrenme metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Aşağıda yer alan tabloda hata metriklerinin hesaplanmasına esas teşkil eden tablo verilmiştir. Bu tabloyla sınıflandırma hataları hesaplanabilmektedir. Tabloda yer verilen Tip 1 hata (Type 1 error) istatistikte alfa hatasını göstermektedir. Tip 1 hata H0 hipotezi (null hpypothesis) doğru olduğu halde reddedilmesidir. Tabloda Tip 2 hata (Type II error) olarak adlandırılan hata ise istatistikte Beta hatası olarak da bilinmektedir. Tip 2 hata ise H0 hipotezi (null hpypothesis) yanlış olduğu halde kabul edilmesidir.

Kaynak: Stanford Üniversitesi

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki metriklerden yaygın bir şekilde yararlanıldığı görülmektedir.

  • Doğruluk (Accuracy): TP+TN / TP+TN+FP+FN eşitliği ile hesaplanır. Modelin genel performansını ortaya koyar. Bu sınıflandırma metriği ile aslında biz informal bir şekilde dile getirirsek doğru tahminlerin toplam tahminler içindeki oranını hesaplamış oluyoruz.
  • Kesinlik (Precision): TP / TP+FP eşitliği ile hesaplanır. Doğru tahminlerin ne kadar kesin olduğunu gösterir.
  • Geri çağırma (Recall)TP / TP+FN eşitliği ile hesaplanır. Gerçek pozitif örneklerin oranını verir.
  • Özgünlük (Specificity): TN / TN+FP eşitliği ile hesaplanır. Gerçek negatif örneklerin oranını gösterir.
  • F1 skoru : 2TP / 2TP+FP+FN eşitliği ile hesaplanır. Dengesiz sınıflar için yararlı hibrit bir metrik olup, kesinlik (precision) ve geri çağırma (recall) skorlarının ağırlıklı ortalamasını ifade etmektedir.
  • ROC (Receiver operating characteristic): Yukarıda karışıklık matrisinde belirtilen parametrelerden yararlanılarak hesaplanır. ROC eğrisi olarak da adlandırılmaktadır. ROC eğrileri, herhangi bir tahmin modelinin doğru pozitifler (TP) ve negatifler (TN) arasında nasıl ayrım yapabileceğini görmenin güzel bir yoludur. Sınıflandırma modellerin perfomansını eşik değerler üzerinden hesaplar. ROC iki parametre üzerinden hesaplanır. Doğru Pozitiflerin Oranı (TPR) ve Yanlış Pozitiflerin Oranı (FPR) bu iki parametreyi ifade eder. Burada aslında biz TPR ile Geri Çağırma (Recall), FPR ile ise 1-Özgünlük (Specificity)‘ü belirtiyoruz.
  • Cohen Kappa: Kategorik cevap seçenekleri arasındaki tutarlılığı ve uyumu gösterir. Cohen, Kappa sonucunun şu şekilde yorumlanmasını önermiştir: ≤ 0 değeri uyumun olmadığını, 0,01–0,20 çok az uyumu, 0,21-0,40 az uyumu, 0,41-0,60 orta, 0,61-0,80 iyi uyumu ve 0,81–1,00 çok iyi uyumu göstermektedir. 1 değeri ise mükemmel uyum anlamına gelmektedir.

Metodoloji ve Uygulama Sonuçları

Bu kısımda kullanılan veri setine ve adım adım Rastgele Orman algoritması uygulamasına yer verilmiştir. Analizde R programlama dili kullanılmıştır. Uygulamaya esas veri seti https://archive.ics.uci.edu/ml/machine-learning-databases/car/&#8221; veri tabanından alınmıştır. Veri seti araba seçimi yapan bireylerin cevaplarından oluşmaktadır. Orjinal (ingilizce) veri setini aşağıdaki linkten indirebilirsiniz.

R’da analize uygun hale getirdiğim aynı veri setinin Türkçe versiyonunu ise aşağıdaki linkten indirebilirsiniz. Veri setinin Türkçeye çevrilmesinin nedeni anlaşılırlığın artırılmak istenmesidir.

Veri seti ID (Sıra) hariç 7 değişkenden oluşmakta olup, anlaşılırlığı artırmak adına Türkçeye çevrilerek yeniden kodlanmıştır. Değişkenlerin tamamının veri türü kategorik olup değişkenler sırasıyla şöyledir:

  1. Fiyat: Araba fiyatlarını belirtmekte olup , “Düşük”, “Orta”, “Yüksek” ve “Çok Yüksek” cevap seviyelerinden oluşmaktadır.
  2. Bakım: Araba bakımını belirtmekte olup , “Düşük”, “Orta”, “Yüksek” ve “Çok Yüksek” cevap seviyelerinden oluşmaktadır.
  3. Kapı: Arabadaki kapı sayısını belirtmekte olup “5 ve Yukarı”, “2”, “3” ve “4” cevap seviyelerinden oluşmaktadır.
  4. Kişi: Arabanın kaç kişilik olduğunu göstermekte olup “5 ve Yukarı”, “2” ve “4” cevap seviyelerinden oluşmaktadır.
  5. Bagaj: Arabadaki bagaj hacmini değerlendirmeye yönelik “Büyük”, “Orta” ve “Küçük” cevap seviyelerinden oluşmaktadır.
  6. Güvenlik: Arabanın oluşturduğu güvenlik algısını değerlendirmeye yönelik “Yüksek”, “Orta” ve “Düşük” cevap seviyelerinden oluşmaktadır.
  7. Karar: Araba satın alma durumunu değerlendirmeye yönelik “Kabul”, “İyi”, “Red” ve “Çok İyi” cevap seviyelerinden oluşmaktadır.

Metodoloji ve uygulama sonuçları başlığı altında Rastgele Orman algoritmasına üzerine kurulan iki model olabilecek en yalın şekilde ele alınmaya çalışılmıştır. Daha sonra kurulan bu iki model hata metrikleri açısından performansları karşılaştırılmıştır. Analize başlamadan önce analiz için yüklenecek R kütüphaneleri verelim. Ardından keşifsel veri analizi (EDA) ile veri setini tanıyalım.

Yüklenecek kütüphaneler

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","randomForest", "aod", "DescTools", "readstata13","viridis","ggpurr","writexl","ggfortify", "caret", "yardstick","MASS")
sapply(kütüphaneler, require, character.only = TRUE)

Veri setinin okunması ve değişken kategorilerinin yeniden kodlanması

df <- read.csv("car.data", header=FALSE) %>% as_tibble()
df <- df %>% rename(Fiyat=V1, Bakim=V2, Kapi=V3, Kisi=V4, Bagaj=V5, Guvenlik=V6, Karar=V7) %>% rowid_to_column() %>% rename(ID=rowid)
df
df1<-df %>% mutate(Fiyat=recode_factor(Fiyat, "low"="Düşük", "med"="Orta", "high"="Yüksek", "vhigh"="Çok Yüksek"))%>% mutate(Bakim=recode_factor(Bakim, "low"="Düşük", "med"="Orta", "high"="Yüksek", "vhigh"="Çok Yüksek")) %>% mutate (Kapi= recode_factor(Kapi, "5more" = "5 ve Yukarı")) %>% mutate (Kisi= recode_factor(Kisi, "more" = "5 ve Yukarı")) %>% mutate (Bagaj= recode_factor(Bagaj, "big" = "Büyük", "med" = "Orta", "small" = "Küçük")) %>% mutate (Guvenlik= recode_factor(Guvenlik, "high" = "Yüksek", "med" = "Orta", "low" = "Düşük"))%>% mutate (Karar= recode_factor(Karar, "acc" = "Kabul", "good" = "İyi", "unacc" = "Red","vgood" = "Çok İyi"))
df1
formattable(head(df1))

Veri setinin xlsx dosyasına yazdırılması

İhtiyaç duymanız halinde fonksiyonu ile birlikte yeniden kodlanan veri seti aşağıdaki kod yardımıyla xlsx uzantılı olarak excel dosyasına yazdırılmıştır.

write_xlsx(df1, "veriseti.xlsx")

Yukarıdaki R kod bloğunun çalıştırılması ile edilen veri seti dosyası xlsx uzantılı olarak aşağıda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setinin ilk 6 satırı aşağıda verilmiştir.

Veri setindeki değişkenlerin özellikleri

str(df1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki değişkenlerin veri tipi ve faktör (kategori) seviyeleri aşağıda verilmiştir.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	1728 obs. of  8 variables:
 $ ID      : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Fiyat   : Factor w/ 4 levels "Düşük","Orta",..: 4 4 4 4 4 4 4 4 4 4 ...
 $ Bakim   : Factor w/ 4 levels "Düşük","Orta",..: 4 4 4 4 4 4 4 4 4 4 ...
 $ Kapi    : Factor w/ 4 levels "5 ve Yukarı",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ Kisi    : Factor w/ 3 levels "5 ve Yukarı",..: 2 2 2 2 2 2 2 2 2 3 ...
 $ Bagaj   : Factor w/ 3 levels "Büyük","Orta",..: 3 3 3 2 2 2 1 1 1 3 ...
 $ Guvenlik: Factor w/ 3 levels "Yüksek","Orta",..: 3 2 1 3 2 1 3 2 1 3 ...
 $ Karar   : Factor w/ 4 levels "Kabul","İyi",..: 3 3 3 3 3 3 3 3 3 3 ...

Veri setindeki eksik gözlemlerin tespiti

sapply(df1, function(x) sum(is.na(x)))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen çıktı aşağıda verilmiştir.

 ID    Fiyat    Bakim     Kapi     Kisi    Bagaj Guvenlik    Karar 
  0        0        0        0        0        0        0        0 

Değişkenler arasındaki korelasyon

Kategorik değişkenlerin korelasyon katsayılarını hesaplamak için yazılan R kod bloğu aşağıdadır. Değişkenler arasındaki korelasyonu hesaplamak için Kikare testi kullanılmıştır. Bunun nedeni korelasyon katsayısı hesaplanacak her iki değişkenin de nitel ve nominal olmasından kaynaklanmaktadır. Korelasyon katsayısı hesaplanacak değişkenlerden biri ordinal (sıralı) olsaydı bu durumda Spearman korelasyon (SpearmanRho) katsayısının hesaplanması gerekecekti. Diğer taraftan, eğer her iki değişken nicel (sürekli ve kesikli) olsaydı bu durumda Pearson korelasyon katsayısını hesaplayacaktık.

p<-data.frame(lapply(df1[,-c(1,8)], function(x) chisq.test(table(x,df1$Karar), simulate.p.value = TRUE)$p.value))
pvalue<-p %>% as_tibble() %>% pivot_longer(cols = Fiyat:Guvenlik, names_to="Degisken", values_to = "p") %>% mutate(Sonuc=ifelse(p<0.05,"Anlamlı", "Anlamlı Değil")) %>% mutate_if(is.numeric, round, 4)
chi<-data.frame(lapply(df1[,-c(1,8)], function(x) chisq.test(table(x,df1$Karar), simulate.p.value = TRUE)$statistic))
chivalue<-chi %>% as_tibble() %>% pivot_longer(cols = Fiyat:Guvenlik, names_to="Degisken", values_to = "Kikare Test İstatistiği")%>% mutate_if(is.numeric, round, 2)
formattable(cbind(chivalue, pvalue[,-1]))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen korelasyon katsayıları aşağıdaki tabloda verilmiştir.

Veri setinin eğitilecek ve test setine ayrılması

set.seed(1)
#Eğitilecek veri seti (training set)
train1 <- df1 %>% sample_frac(.70)
train1
#Test edilecek veri seti
test1  <- anti_join(df1, train1, by = 'ID')#Anti join fonksiyonu eşleşmeyen kayıtları yani geri kalan kayıtları getirir ve onları test setine atar.
test1

Model 1

1 nolu modelin oluşturulması

model1<-randomForest(Karar ~ ., train1[,-1])
model1
summary(model1)
plot(model1, main="Model 1: Rastgele Orman (RF) Algoritmasının Hata Oranı")

Yukarıdaki kod bloğunun oluşturulmasından sonra çizilen 1 nolu modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelinin sınıf hata oranlarını göstermektedir. Ağaç sayısı arttıkça hata oranı sıfıra yaklaşır.

1 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model1)
k<-tibble(Değişken=as.vector(row.names(k)), Ortalama_Gini_Katsayısı=as.vector(importance(model1)))%>%arrange(desc(Ortalama_Gini_Katsayısı))
formattable(k)
ggplot(k, aes(x=Ortalama_Gini_Katsayısı, y = Değişken, label=round(Ortalama_Gini_Katsayısı,2)))+
   geom_point()+
    xlab("Ortalama Gini Katsayısı")+
    ylab("Değişken")+
    geom_text(vjust = 0, nudge_y = 0.1)+
    theme_hc()

Yukarı kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri ortalama gini katsayısına göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Yukarı kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeylerine ilişkin grafik ise aşağıda verilmiştir.

Tahmin edilen değerler ile gözlem değerlerinin karşılaştırılması

pred1<-predict(model1, test1)
karsilastirma<-tibble(Gercek=test1$Karar, Tahmin=pred1)
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename(Gercekİlk_10=Gercek, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirma, 10) %>% rename(GercekSon_10=Gercek, TahminSon_10=Tahmin)
formattable(cbind(Id=seq(1,10),ilk10, son10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modelden elde edilen ilk ve son 10 sınıflandırma değerleri gerçekleşen sınıflandırma değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Karışıklık matrisi (confusion matrix)’nin oluşturulması

pred1<-predict(model1, test1)
karsilastirma<-tibble(Gercek=test1$Karar, Tahmin=pred1)
#alternatif cm ve grafik
cm <- karsilastirma %>%
  conf_mat(Gercek, Tahmin)
cm
autoplot(cm, type = "heatmap")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

     Truth
Prediction Kabul İyi Red Çok İyi
   Kabul     118   1   4       1
   İyi         1  22   2       0
   Red         7   0 345       0
   Çok İyi     0   4   0      13

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisinin grafiği ise aşağıda verilmiştir.

Hata parametreleri

Kurulan 1 nolu modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm<-confusionMatrix(karsilastirma$Tahmin, karsilastirma$Gercek)
cm

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait hata parametre değerleri aşağıda verilmiştir.

Confusion Matrix and Statistics
          Reference
Prediction Kabul İyi Red Çok İyi
   Kabul     118   1   4       1
   İyi         1  22   2       0
   Red         7   0 345       0
   Çok İyi     0   4   0      13
Overall Statistics
                                         
               Accuracy : 0.9614         
                 95% CI : (0.941, 0.9763)
    No Information Rate : 0.6776         
    P-Value [Acc > NIR] : < 2.2e-16      
                                         
                  Kappa : 0.9192         
                                         
 Mcnemar's Test P-Value : NA             
Statistics by Class:
                     Class: Kabul Class: İyi Class: Red Class: Çok İyi
Sensitivity                0.9365    0.81481     0.9829        0.92857
Specificity                0.9847    0.99389     0.9581        0.99206
Pos Pred Value             0.9516    0.88000     0.9801        0.76471
Neg Pred Value             0.9797    0.98986     0.9639        0.99800
Prevalence                 0.2432    0.05212     0.6776        0.02703
Detection Rate             0.2278    0.04247     0.6660        0.02510
Detection Prevalence       0.2394    0.04826     0.6795        0.03282
Balanced Accuracy          0.9606    0.90435     0.9705        0.96032

Bağımlı değişken kategorilerine göre sınıflandırma metrikleri

class<-cm$byClass#sınıfa göre hata oranları
class<-class %>% as_tibble(class) %>% add_column(Class = c("Kabul", "İyi", "Red", "Çok İyi"), .before = "Sensitivity")
class
class1<-class[, c(1, 2,3,6, 7, 8)]
pivot<-class1 %>% pivot_longer(-Class, names_to = "Parameters", values_to = "Değer")
ggplot(pivot, aes(x="", y = Değer, fill = Class))+
geom_bar(position="stack", stat="identity")+
scale_fill_viridis(discrete = T, option = "E")+
facet_grid(Class~  Parameters)+
xlab("")+
labs(fill = "Kategori")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen bağımlı değişken kategorilerine göre sınıflandırma metrikleri aşağıdaki grafikte verilmiştir.

Çapraz performans testi (Cross validation test)

set.seed(124)
cv<- performanceEstimation(
  PredTask(Karar ~ ., df1[,-1]),
    workflowVariants(learner=("randomForest")),
 EstimationTask(metrics = c("acc","err"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)
plot(cv)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==
Task for estimating  acc,err  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 
* Predictive Tasks ::  df1[, -1].Karar
* Workflows  ::  randomForest 
-> Task:  df1[, -1].Karar
  *Workflow: randomForest 
               acc         err
avg     0.96860465 0.031395349
std     0.01980161 0.019801612
med     0.96802326 0.031976744
iqr     0.03052326 0.030523256
min     0.94186047 0.005813953
max     0.99418605 0.058139535
invalid 0.00000000 0.000000000

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıdaki grafikte verilmiştir.

Yeniden örnekleme (bootstrapping) perfomans kontrolü testi

set.seed(1200)
bootstrap <- performanceEstimation(
  PredTask(Karar ~ ., df1[,-1]),
    workflowVariants(learner=("randomForest")),
  EstimationTask(metrics=c("err", "acc"),method=Bootstrap(nReps=100)))
summary(bootstrap)
topPerformers(bootstrap)
plot(bootstrap)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Bootstrap Performance Estimation Experiment ==
Task for estimating  err,acc  using
100  repetitions of  e0  Bootstrap experiment
	 Run with seed =  1234 
* Predictive Tasks ::  df1[, -1].Karar
* Workflows  ::  randomForest 
-> Task:  df1[, -1].Karar
  *Workflow: randomForest 
                err         acc
avg     0.039839321 0.960160679
std     0.008783018 0.008783018
med     0.039563417 0.960436583
iqr     0.010807524 0.010807524
min     0.020408163 0.938871473
max     0.061128527 0.979591837
invalid 0.000000000 0.000000000

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

Model 2

2 nolu modelin oluşturulması

2 nolu modelde randomForest() içerisinde ntree parametresi büyütülecek ağaç sayısını göstermektedir. Yazılmadığında otomatik (default) olarak 500 alınmaktadır. Bu sayı çok küçük bir sayıya ayarlanmamalıdır. Ağaç sayısı artıkça kurulan modelde hata oranı azalmaktadır. Fonksiyon içerisinde yer verilen mtyr parametresi ise her bir alt bölünmede tesadüfi bir şekilde örneklenen değişkenlerin sayısını göstermektedir. Fonksiyon içerisinde yer verilen importance parametresi ise değerlendirilecek değişkenlerin önem düzeyini göstermektedir.

model2 <- randomForest(Karar ~ ., train1[,-1], ntree = 500, mtry = 6, importance = TRUE)
model2
summary(model2)
plot(model2, main="Model 1: Rastgele Orman (RF) Algoritmasının Hata Oranı")

Yukarıdaki kod bloğunun oluşturulmasından sonra kurulan 2 nolu modele ait sınılandırma ve hata oranı aşağıda verilmiştir.

Call:
 randomForest(formula = Karar ~ ., data = train1[, -1], ntree = 500,      mtry = 6, importance = TRUE) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 6
        OOB estimate of  error rate: 1.32%
Confusion matrix:
        Kabul İyi Red Çok İyi class.error
Kabul     250   4   2       2  0.03100775
İyi         0  42   0       0  0.00000000
Red         6   1 852       0  0.00814901
Çok İyi     1   0   0      50  0.01960784

Yukarıdaki kod bloğunun oluşturulmasından sonra çizilen 2 nolu modelin grafiği aşağıda verilmiştir. Bu grafik rastgele orman modelinin sınıf hata (cevap değişkeni) oranlarını göstermektedir. Ağaç sayısı arttıkça hata oranı sıfıra yaklaşır.

2 nolu modeldeki değişkenlerin önem düzeyleri

k<-importance(model2)
ok<-k%>% as_tibble() 
ok<-ok[, c(5,6)]
ok
ok1<-tibble(Değişken=as.vector(row.names(k)), Ortalama_Doğruluk=ok$MeanDecreaseAccuracy,Ortalama_Gini=ok$MeanDecreaseGini )%>%mutate_if(is.numeric, round, 2)%>% arrange(desc(Ortalama_Gini))
formattable(ok1)
ogk<-ggplot(ok1, aes(x=Ortalama_Gini, y = Değişken, label=round(Ortalama_Gini,2)))+
   geom_point(color="red")+
    xlab("Ortalama Gini")+
    ylab("Değişken")+
    geom_text(vjust = 0, nudge_y = 0.1)
odk<-ggplot(ok1, aes(x=Ortalama_Doğruluk, y = Değişken, label=round(Ortalama_Doğruluk,2)))+
   geom_point(color="blue")+
    xlab("Ortalama Doğruluk")+
    ylab("Değişken")+
    geom_text(vjust = 0, nudge_y = 0.1)
ggarrange(ogk, odk, nrow=2)

Yukarı kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri ortalama gini katsayısına göre büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Yukarı kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeylerine ilişkin grafik ise aşağıda verilmiştir.

Tahmin edilen değerler ile gözlem değerlerinin karşılaştırılması

pred1<-predict(model2, test1)
karsilastirma2<-tibble(Gercek=test1$Karar, Tahmin=pred2)
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma2, 10) %>% rename(Gercekİlk_10=Gercek, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirma2, 10) %>% rename(GercekSon_10=Gercek, TahminSon_10=Tahmin)
formattable(cbind(Id=seq(1,10),ilk10, son10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modelden elde edilen ilk ve son 10 sınıflandırma değerleri gerçekleşen sınıflandırma değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Karışıklık matrisi (confusion matrix)’nin oluşturulması

pred2<-predict(model2, test1)
karsilastirma<-tibble(Gercek=test1$Karar, Tahmin=pred2)
#alternatif cm ve grafik
cm <- karsilastirma %>%
  conf_mat(Gercek, Tahmin)
cm
autoplot(cm, type = "heatmap")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

 Truth
Prediction Kabul İyi Red Çok İyi
   Kabul     119   3   2       0
   İyi         0  24   2       0
   Red         6   0 347       0
   Çok İyi     1   0   0      14

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisinin grafiği ise aşağıda verilmiştir.

Hata parametreleri

Kurulan 1 nolu modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm<-confusionMatrix(karsilastirma2$Tahmin, karsilastirma2$Gercek)
cm

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 1 nolu modele ait hata parametre değerleri aşağıda verilmiştir.

Confusion Matrix and Statistics
          Reference
Prediction Kabul İyi Red Çok İyi
   Kabul     119   3   2       0
   İyi         0  24   2       0
   Red         6   0 347       0
   Çok İyi     1   0   0      14
Overall Statistics
                                          
               Accuracy : 0.973           
                 95% CI : (0.9551, 0.9851)
    No Information Rate : 0.6776          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.9433          
                                          
 Mcnemar's Test P-Value : NA              
Statistics by Class:
                     Class: Kabul Class: İyi Class: Red Class: Çok İyi
Sensitivity                0.9444    0.88889     0.9886        1.00000
Specificity                0.9872    0.99593     0.9641        0.99802
Pos Pred Value             0.9597    0.92308     0.9830        0.93333
Neg Pred Value             0.9822    0.99390     0.9758        1.00000
Prevalence                 0.2432    0.05212     0.6776        0.02703
Detection Rate             0.2297    0.04633     0.6699        0.02703
Detection Prevalence       0.2394    0.05019     0.6815        0.02896
Balanced Accuracy          0.9658    0.94241     0.9763        0.99901

Bağımlı değişken kategorilerine göre sınıflandırma metrikleri

cm<-confusionMatrix(karsilastirma2$Tahmin, karsilastirma2$Gercek)
cm
class<-cm$byClass#sınıfa göre hata oranları
class<-class %>% as_tibble(class) %>% add_column(Class = c("Kabul", "İyi", "Red", "Çok İyi"), .before = "Sensitivity")
class
class1<-class[, c(1, 2,3,6, 7, 8)]
pivot<-class1 %>% pivot_longer(-Class, names_to = "Parameters", values_to = "Değer")
ggplot(pivot, aes(x="", y = Değer, fill = Class))+
geom_bar(position="stack", stat="identity")+
scale_fill_viridis(discrete = T, option = "E")+
facet_grid(Class~  Parameters)+
xlab("")+
labs(fill = "Kategori")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen bağımlı değişken kategorilerine göre sınıflandırma metrikleri aşağıdaki grafikte verilmiştir.

Çapraz performans testi (Cross validation test)

set.seed(12)
cv<- performanceEstimation(
  PredTask(Karar ~ ., df1[,-1]),
    workflowVariants(learner="randomForest", learner.pars=list(ntree = 500, mtry = 6, importance = TRUE)),
 EstimationTask(metrics = c("acc","err"),
                method = CV(nReps = 1, nFolds = 10)))
summary(cv)
plot(cv)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Cross Validation Performance Estimation Experiment ==
Task for estimating  acc,err  using
 1 x 10 - Fold Cross Validation
	 Run with seed =  1234 
* Predictive Tasks ::  df1[, -1].Karar
* Workflows  ::  randomForest 
-> Task:  df1[, -1].Karar
  *Workflow: randomForest 
               acc         err
avg     0.98255814 0.017441860
std     0.01162791 0.011627907
med     0.98837209 0.011627907
iqr     0.02180233 0.021802326
min     0.96511628 0.005813953
max     0.99418605 0.034883721
invalid 0.00000000 0.000000000

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değeri aşağıdaki grafikte verilmiştir.

Yeniden örnekleme (bootstrapping) perfomans kontrolü testi

set.seed(1234)
bootstrap <- performanceEstimation(
  PredTask(Karar ~ ., df1[,-1]),
    workflowVariants(learner="randomForest", learner.pars=list(ntree = 500, mtry = 6, importance = TRUE)),
  EstimationTask(metrics=c("err", "acc"),method=Bootstrap(nReps=100)))
summary(bootstrap)
topPerformers(bootstrap)
plot(bootstrap)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

== Summary of a  Bootstrap Performance Estimation Experiment ==
Task for estimating  err,acc  using
100  repetitions of  e0  Bootstrap experiment
	 Run with seed =  1234 
* Predictive Tasks ::  df1[, -1].Karar
* Workflows  ::  randomForest 
-> Task:  df1[, -1].Karar
  *Workflow: randomForest 
                err         acc
avg     0.024709802 0.975290198
std     0.007599525 0.007599525
med     0.025197100 0.974802900
iqr     0.011384685 0.011384685
min     0.004680187 0.952978056
max     0.047021944 0.995319813
invalid 0.000000000 0.000000000

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 2 nolu modele ait elde edilen performans parametre değerleri aşağıda verilmiştir.

Sonuç

Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik Rastgele Orman (RF) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin RF algoritması tarafından çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk oranıyla çözüme kavuşturulduğu görülmektedir.

Her iki Rastgele Orman modeli (Model 1 ve 2) performans ölçüleri açısından karşılaştırıldığında öne çıkan bulgular şöyledir: Kurulan 2. model 1. modele göre bağımlı değişken olan “Karar” değişkenini daha iyi tahmin etmektedir. Model 2’de doğruluk (accuracy) oranı performans ölçüm metotlarından capraz kontrol (cross validation)’de % 98,26 iken, model 1’de bu oran % 96,86’da kalmıştır. Aşağıdaki tabloda her iki modelin hata ve doğruluk oranları verilmiştir. Performans ölçüm metotlarından yeniden örnekleme (bootstrapping) kullanıldığında model 2’den üretilen doğruluk oranı % 97,53 (yaklaşık % 98) iken bu oran model 1’de % 96,02’dir. Tabloda belirtilen hata (error) oranı 1-Doğruluk eşitliğinden hesaplanmaktadır. Buradan doğruluk oranı artıkça hata oranının azalacağı anlamı çıkarılması gerekir.

Yukarıdaki tablonun elde edilmesine yönelik yazılan R kod bloğu aşağıdadır. Aşağıdaki kod bloğunda aynı zamanda yukarıdaki tabloda verilen parametreler aşağıda yazılan kod bloğu aracılığıyla grafiğe taşınmıştır.

model1<-tibble(Model=rep("Model 1", 4), Performans_Metodu= c(rep("Capraz Kontrol",2), rep("Yeniden Örnekleme",2)), Parametre=rep(c("Doğruluk", "Hata Oranı"),2), Değer=c(round(0.96860465*100,2),round(0.03139535*100,2), round(0.960160679*100,2), round(0.039839321*100,2)))
         
model2<-tibble(Model=rep("Model 2", 4), Performans_Metodu= c(rep("Capraz Kontrol",2), rep("Yeniden Örnekleme",2)), Parametre=rep(c("Doğruluk", "Hata Oranı"),2), Değer=c(round(0.98255814*100,2),round(0.017441860*100,2), round(0.975290198*100,2), round(0.024709802*100,2)))
modeltum<-bind_rows(model1, model2)
formattable(modeltum)
  ggplot(modeltum, aes(x=Parametre, y = Değer, fill = Model))+
  geom_bar(position="stack", stat="identity")+
  scale_fill_viridis(discrete = T, option = "C")+
  facet_grid(Performans_Metodu~ Model)+
  xlab("Parametre")+
  ylab("Değer (%)")
  labs(fill = "Kategori")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra kurulan her iki Rastgele Orman (RF) modeli hata metrikleri açısından aşağıdaki grafikte karşılaştırılmıştır.

Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı düşünülmektedir.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Saygılarımla.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

14 Nisan 2020 Tarihi İtibariyle COVID-19 Pandemi Vakalarının Tahmini ve İnterpolasyonu: Türkiye Örneği (As of April 14, 2020, Prediction and Interpolation of COVID-19 Pandemic Cases)

Giriş / Introduction

Coronavirüsler (CoV), soğuk algınlığından Orta Doğu Solunum Sendromu (MERS-CoV) ve Şiddetli Akut Solunum Sendromu (SARS-CoV) gibi daha ciddi hastalıklara kadar pek çok hastalığa neden olan büyük bir virüs ailesidir. Bu yeni virüse, yüzey çıkıntıları taç görünümünde olduğu için coronavirus adı verilmiş olup, bu virüs ailesi tek zincirli, pozitif polariteli, zarflı RNA virüsleridir.

Koronavirüs hastalığı (COVID-19), 2019 yılında keşfedilen ve daha önce insanlarda tanımlanmamış yeni bir suştur. Suş, bir bakteri veya virüsün farklı alt türlerinin, aralarında genetik farklılıklar bulunan grupları olarak adlandırılır.

Bu Koronavirüsler zoonotiktir, yani hayvanlar ve insanlar arasında bulaşırlar. Ayrıntılı araştırmalar SARS-CoV’nin misk kedilerinden insanlara ve MERS-CoV’un tek hörgüçlü develerden insanlara bulaştığını göstermiştir. Bilinen birkaç koronavirüs henüz insanları enfekte etmeyen hayvanlarla taşınmaktadır.

Enfeksiyon belirtileri arasında solunum semptomları, ateş, öksürük, nefes darlığı ve solunum güçlüğü bulunur. Daha ciddi vakalarda, enfeksiyon pnömoniye, ciddi akut solunum sendromuna, böbrek yetmezliğine ve hatta ölüme neden olabilir. Solunum sistemi hastalıklarından biri olan pnömoni ya da halk arasında zatürre bakteriler başta olmak üzere mikroorganizmalara bağlı olarak ortaya çıkan akciğer dokusunun iltihaplanmasıdır. Grip gibi bu hastalık da bağışıklık (immun) sistemini baskılayan hastalıklardan biridir. Özellikle ileri yaşlardaki bireylerde hem bağışıklık sisteminin yaşla birlikte yavaşlaması hem de yaşa ve/veya diğer nedenlere bağlı olarak kronik ve diğer hastalıkların görülmesi bu yaşlardaki bireylerde ölüm oranlarını artırabilmektedir. Diğer bir deyişle, bu enfeksiyon komplikasyon yaratarak ve mevcut diğer hastalıkları tetikleyerek bu yaş gruplarında diğer yaş gruplarına göre daha öldürücü olabilir.

Enfeksiyonun yayılmasını önlemek için standart öneriler arasında düzenli el yıkama, öksürme ve hapşırma sırasında ağız ve burnun kapatılması, et ve yumurtaların iyice pişirilmesi yer alır. Öksürme ve hapşırma gibi solunum yolu rahatsızlığı belirtileri gösteren kişilerle yakın temastan kaçınmak bu hastalıktan korunmak için atılacak önemli koruyucu tedbirlerden biridir.

Hastalıktan nasıl korunulacağı hakkında bilgi verdikten sonra bu hastalığın teşhisinde kullanılan ve adı son zamanlarda sık sık duyulan PCR testi hakkında bilgi vermek faydalı olacaktır. PCR, ingilizce adıyla “Polymerase Chain Reaction” kelimelerinin bir araya gelmesinden oluşan ve moleküler biyoloji alanında kullanılan bir tekniktir.Türkçe ise ise polimeraz zincir reaksiyonu olarak adlandırılır. Bazen PCR moleküler fotokopi (molecular photocopying) olarak da adlandırılabilmektedir. DNA’nın küçük bölümlerini kopyalamak için kullanılan hızlı ve ucuz bir tekniktir. Moleküler ve genetik analizler için büyük miktarlarda DNA örneği gerekli olduğundan, izole edilmiş DNA parçaları üzerinde çalışmalar PCR amplifikasyonu olmadan neredeyse imkansızdır. PCR’ın kullanım alanları şöyle özetlenebilir:

  1. Amplifiye edildikten sonra PCR ile üretilen DNA, birçok farklı laboratuvar prosedüründe kullanılabilir. Örneğin, İnsan Genom Projesindeki (HGP) çoğu haritalama tekniği PCR’a dayanmaktadır.
  2. Parmak izi, bakteri veya virüslerin (özellikle AIDS) tespiti ve genetik bozuklukların teşhisi gibi bir dizi laboratuvar ve klinik teknikte de değerlidir.

PCR ( Polimeraz Zincir Reaksiyonu) tekniğinin çalışma şeması ise aşağıdaki şekilde verilmiştir.

polymerase chain reaction diagram
Kaynak: The National Human Genome Research Institute (NHGRI)

PCR tekniğini kullanarak koronavirüs teşhisinin nasıl konulduğuna ilişkin bir video aşağıda verilerek teşhis süreci hakkında bilgi verilmesi amaçlanmıştır.

Kaynak:
AMBOSS: Medical Knowledge Distilled

Bilindiği üzere koronavirüs hastalığının teşhis ve özellikle tedavisine yönelik olarak ilaç ve aşı geliştirme alanında Dünya’da ve ülkemizde yoğun bir mesai harcanmaktadır. Bunlardan biri ülkemizde 02.04.2020 tarihinde Sanayi ve Teknoloji Bakanlığı ve TÜBİTAK bünyesinde “Covid-19 Türkiye Platformu Aşı ve İlaç Geliştirme” bilim insanların katıldığı sanal bir konferans gerçekleştirilmiştir. Türkiye dışında da benzer çalışmalar sanal ortamda çalıştay ve konferans olarak yapılmaktadır. Dünyada yapılan ve benim de katılım sağladığım önde giden bu çalışmalardan biri de Avrupa Öğrenme ve Akıllı Sistemler Laboratuvarı ingilizce adıyla European Laboratory for Learning and Intelligent Systems (ELLIS)’ın 02.04.2020 tarihinde düzenlediği “ELLIS Against Covid-19” adlı çalıştaydır. Dünyanın farklı üniversitelerinden bilim insanlarının katılım sağladığı çalıştayda koranavirüs pandemisinin teşhisinde kullanılan yapay zeka teknolojilerinden koronavirüsün tedavisinde kullanılan ilaçların geliştirilmesinde kullanılan yapay zeka teknolojilerine kadar pek çok konu ele alınmıştır. Çalıştayda ağırlıklı olarak ele alınan konu yapay zekanın teşhis ve tedavide nasıl kullanıldığı ve kullanılacağı idi. Çalıştayda koronavirüs ile mücadele çok güzel uygulama örneklerine yer verilmiştir. Daha önce de dile getirdiğim gibi yapay zeka günümüzün ve geleceğin en kritik teknolojisidir. Bu gerek 4. Sanayi Devrimi gerekse Toplum 5.0 açısından olsun böyledir ve farklı ülkeler yapay zekayı teşhis ve tedavi (robotik cerrahi ve ilaç geliştirme) alanlarında kullanmak için çok ciddi adımlar atmıştır. Bu yapıların da ülkemizde kurulması ve yapay zeka enstitülerinin ülkemizde yaygınlaştırılması gerekmektedir. Aynı zamanda Türkiye Büyük Millet Meclisi bünyesinde Yapay Zeka Komisyonu kurulmalıdır. Yapay zeka özünde öğrenen sistemler olduğu ve sürekli gelişim gösterdiği için sektör ayrımı olmaksızın her alanda kendine uygulama alanı bulan bir teknolojidir.

Koronavirüs salgını Çin ile birlikte diğer ülkelere de yayıldığı için Dünya Sağlık Örgütü tarafından 30/01/2020 tarihinde uluslararası halk sağlığı açısından acil durum ilan edilmiştir. Bu hastalıktan bahsedilirken lise ve üniversite yıllarımda benim de ders olarak aldığım Epidemiyoloji biliminden bahsetmemek olmaz. Epidemiyoloji, toplumda sağlıkla ilgili durumların veya olayların (hastalık dahil) dağılımını, görülme sıklıklarını ve bunları etkileyen faktörleri inceleyen bir tıp bilimi dalıdır.

Epidemiyolojik araştırmalar yapmak için çeşitli yöntemler kullanılabilir. Bu yöntemler dağılımı incelemek için sürveyans, tanımlayıcı çalışmalar ve hastalık belirleyicilerini incelemek için analitik çalışmalar olabilir. Bilindiği üzere Koronavirüs hastalığı artık pandemik bir vaka olarak adlandırılmaktadır. Epidemiyolojinin konu alanına giren pandemi dünyada birden fazla ülkede veya kıtada, çok geniş bir alanda
yayılan ve etkisini gösteren salgın hastalıklara verilen genel isim
olarak ifade edilmektedir. Diğer bir deyişle, salgın (epidemi) durumundaki bir hastalığın ülke sınırlarını aşarak diğer ülkelere yayılım göstermesidir.

Avrupa Birliği kurumlarından biri olan “Avrupa Hastalık Önleme ve Kontrol Merkezi (European Centre for Disease Prevention and Control)”‘ne göre ön bulgular koronavirüs hastalığından vakalara dayalı ölüm oranı (fatalite hızı)’nın binde 20-30 olduğunu göstermektedir. Bu, 2003 SARS salgınından önemli ölçüde daha az. Bununla birlikte, mevsimsel gripin neden ölüm oranlarından çok daha yüksektir.

Çalışma kapsamında koronavirüs pandemi vakalarının epidemiyolojik hızlarla birlikte keşifsel veri analizi (EDA) yapılarak vakaların izlediği seyrin ortaya konulması amaçlanmıştır

Metodoloji / Methodology

Çalışmanın amacı, koronavirüs vakalarının epidemiyolojik düzlemde Türkiye’de ve diğer ülkelerde izlediği seyri detaylı bir şekilde keşifsel veri analiziyle ortaya konulara karar vericilere katkı sunmaktır.

Koronavirüs vakalarının analizinde Türkiye veri setinin oluşturulmasında Türkiye İstatistik Kurumu (TÜİK)’ndan ve Dünya Sağlık Örgütü (DSÖ) raporlarından ve Sağlık Bakanlığı basın açıklamalarından yararlanılmıştır. Bunun nedeni Türkiye veri setine daha derinlemesine bakılmak istenmesidir.

Analizlerde Microsoft Excel 2016 ve R programlama dili kullanılmıştır.

Keşifsel veri analizine geçilmeden önce vaka sayılarından yararlanarak epidemiyolojik hızlar hesaplanmıştır. Bu nedenle, çalışmada kullanılacak hızları açıklamanın faydalı olacağı düşünülmektedir.

Epidemiyoloji biliminde hız kavramı, bir sağlık olayının nüfus içindeki görülme frekansını hesaplamada kullanılan bir ölçüttür. Hızlar, belirli bir zaman diliminde meydana gelen olayların sayısının olayın meydana geldiği nüfusa bölünerek hesaplanır. Eşitliğin payı, sağlık olayı ile karşılaşanların sayısını (X), payda ise risk altındaki nüfusu (X+Y) göstermektedir. Risk altındaki nüfus hastalığa veya sağlık olaylarına karşı duyarlı olan nüfusu ifade etmektedir. Formülize edilirse;

Hız (Rate) = (X / X +Y) * k

Burada, k katsayıyı göstermektedir.

Analizde hızlardan girdi değişkeni olarak kullanılması düşünülen ilk gösterge ölüm veya mortalite ölçütlerinden biri olan Kaba Ölüm Hızı‘dır. Bu hız nüfusun sağlık düzeyini ortaya koymada duyarlı olmasa da bir fikir vermesi açısından önemlidir. Kaba ölüm hızı aşağıdaki eşitlikte gösterilmiştir.

Kaba Ölüm Hızı (Crude Death Rate) = (Bir toplumda belirli bir süre içinde meydana gelen ölüm sayısı / Aynı toplumun aynı süredeki
(yıl ortası) nüfusu) * 1000

Crude death rate = (Total number of deaths during a given time interval / Mid-interval population) * 1000

Girdi değişkeni olarak kullanılması düşünülen ikinci gösterge ölüm veya fatalite ölçütlerinden biri olan Fatalize Hızı‘dır. Bu gösterge kaba ölüm hızına göre daha duyarlı bir göstergedir. Diğer bir ifadeyle, hastalığa yakalananların ne kadarının öldüğünü gösterir. Fatalite hızı aşağıdaki eşitlik yardımıyla hesaplanmaktadır;

Fatalite Hızı (Fatality Rate) = (Nüfusta belirli bir süre içinde “X” hastalığından ölenlerin sayısı / Aynı nüfusun aynı süre içinde “X” hastalığına yakalananların sayısı) * 100

Fatality Rate = (Number of cause-specific deaths among the incident cases / Total number of incident cases) * 100

Morbitide veya hastalık hızları gelişmekte olan hastalığın ortaya çıkma hızını ortaya koymak için kullanılır. Bunlardan biri olan insidans,
bir hastalığın gelişme (yeni vakalar) olasılığını ortaya koymak için kullanılır. Diğer taraftan, bu hızlardan prevelans ise hastalığın görülme sıklığını (tüm vakalar) gösteren bir hızdır. İnsidans ve prevelans da analizde girdi değişkenleri olarak kullanılması düşünülmektedir. İnsidans aşağıdaki eşitlik yardımıyla hesaplanmaktadır.

İnsidans (Incidence) = (Bir nüfusta belirli bir sürede saptanan YENİ vaka sayısı / Aynı toplumun yıl ortası nüfusu) * k

Incidence = (Number of new cases of disease during specified time interval / Population at start of time interval) * k

İnsidans hızının kümülatif şekli ise atak hızlarını göstermektedir.

Prevelans ise aşağıdaki eşitlik yardımıyla hesaplanmaktadır.

Prevelans (Prevalence) = (Belirli bir sürede toplam (eski+yeni) vaka sayısı / Risk altındaki kişi sayısı) * k

Prevalence = (Number of cases of disease during specified time interval / Population at start of time interval) * k

Keşifsel Veri Analizi Bulguları / Exploratory Data Analysis Findings

Türkiye Örneği / The Case of Turkey

Bu kısımda bahsedilen epidemiyolojik hızların uygulama sonuçlarına yer verilmiştir. İlk olarak günlük onaylanmış vaka sayıları ile ölüm vaka sayıları Tablo 1’de verilmiştir. Tabloda test sayılarının olduğu sütunda kırmızı renkteki sayılar kesin olarak bilinmediğinden ortalama olarak verilmiştir. Tablo 1’e göre öne çıkan bulgular şöyledir:

Tablo 1. Koronavirüs Vaka Sayıları / Number of Coronavirus Cases, Turkey

Epidemiyolojik hızları gösteren bulgular ise Tablo 2’de sunulmuştur.

Tablo 2. Koronavirüs Vakalarının Epidemiyolojik Hızları / Epidemiological Rates of Coronavirus Cases, Turkey

Tahmin (Prediction)

Bu kısımda hareketli ortalama yöntemi kullanılarak vaka sayıları tahmin edilmiş ve Tablo 3’te verilmiştir. Hareketli ortalama yönteminin kısa vadeli tahminlerde, özellikle de borsa ve döviz kuru tahminlerde kullanıldığı görülmektedir. Hareketli ortalama eşitliği şöyledir:

m=2k+1 olup hareketli ortalama yönteminde sıra düzenini göstermektedir. Örneğin Tablo 3’teki m=4 düzeninde ilk tahmini vaka sayısını hesaplamak için izlenen yol şöyledir; (1+4+1+12)/4= 4,5, diğer bir deyişle tahmini ilk vaka sayısı yaklaşık 5’tir. Benzer işlemler diğer m=3 düzeni için de yapılır. m=3 düzeninde ise tahmini ilk vaka sayısı (1+4+1)/3 = 2 olarak hesaplanır.

Tablo 3: Gerçekleşen Vaka Sayıları ile Tahmini Vaka Sayıları

TarihVaka Sayısım=4 HO Sıra Düzenim=3 HO Sıra Düzeni Mutlak Hata (AE) m=4 Mutlak Hata (AE) m=3
10.03.20201    
13.03.20204    
14.03.20201523,51,0
15.03.2020121260,56,3
16.03.20202923145,815,0
17.03.20205146314,820,3
18.03.20209385587,835,3
19.03.202016815610412,364,0
20.03.202031121219198,8120,3
21.03.202027726125215,825,0
22.03.20202892932923,53,3
23.03.20202933012867,56,7
24.03.202034337230828,534,7
25.03.202056159839937,3162,0
26.03.202011961042700153,8496,0
27.03.2020206913831275686,5793,7
28.03.20201704169616568,047,7
29.03.202018151800186315,547,7
30.03.2020161019581710348,399,7
31.03.2020270420692043634,8661,0
1.04.202021482230215481,56,0
2.04.202024562524243667,520,0
3.04.2020278626012463185,3322,7
4.04.2020301328482752165,5261,3
5.04.2020313530212978114,5157,0
6.04.2020314832973099149,049,3
7.04.2020389235733392319,0500,3
8.04.2020411738033719313,8398,0
9.04.2020405642034022147,034,3
10.04.2020474745154307232,5440,3
11.04.2020513846834647455,5491,0
12.04.202047894692489197,3102,3
13.04.2020409345214673427,5580,3
14.04.20204062  Ortalama Mutlak Hata 155,8 193,6

Yukarıdaki tabloda ortalama mutlak hatası (MAE)’sı daha düşük çıkan m=4 düzenindeki hareketli ortalama (HO) tercih edilir. Şimdi sırasıyla m=4 düzenindeki tahmini vaka sayıları ile gerçekleşen vaka sayılarına ait grafiği çizelim.

m=4 düzenindeki hareketli ortalama verildikten sonra m=3 düzenindeki gerçekleşen ve tahmini vaka sayılarını verelim.

Yapılan işlemlerde kullanılan formülleri ve etkileşimleri görmek için aşağıdaki linkten xlsx uzantılı dosyayı indirebilirsiniz.

Bir diğer hareketli ortama yöntemlerinden biri üstel hareketli ortalama (Exponential Moving Average)’dır. Kısaca adlandırmak gerekirse Türkçe ÜHO, ingilizce olarak ise EMA’dır. Burda da aynı vaka sayıları üzerinden bir tahmin (prediction) yapılmış olup, Tablo 4’te verilmiştir. Burada farklı düzeltme faktörü katsayıları üzerinden 5 farklı üstel hareketli ortalama hesaplanmıştır.

Tablo 4: Gerçekleşen Vaka Sayıları ile Tahmini Vaka Sayıları (EMA)

5 farklı düzeltme faktörlü (damping factor) EMA yönteminden elde edilen mutlak hatalar ve ortalama mutlak hatalar Tablo 5’te verilmiştir.

Tablo 5. Üstel Hareketli Ortalama Mutlak Hata Değerleri

Tablo 5’in en alt satırında ortalama mutlak hatalar görülmektedir. Buna göre ortalama hatası en düşük olan 264,5 ortalama mutlak hata ile 3. üstel hareketli ortalama (EMA) yöntemi seçilir. Şimdi bu 3. yöntemin grafiğini çizelim.

Üstel hareketli ortalama yönteminde kullanılan 5 farklı düzeltme faktörü (df)’ne göre hesaplanan tahmini vaka sayıları, yapılan işlemlerde kullanılan formülleri ve etkileşimleri görmek adına aşağıdaki linkten xlsx uzantılı olarak paylaşılmıştır. EMA yöntemi de hareketli ortalama yöntemi (MA) gibi sıklıkla kısa vadeli borsa ve döviz kuru işlemlerinde kullanılmaktadır.

Öngörü ya da İnterpolasyon / Forecast

Bu kısımda tahmin çalışmasından farklı olarak interpolasyon (öngörü) yapılmıştır. Bu amaçla 6 günlük bir vaka tahmini yapılmıştır. Çalışma kullanılan R kod bloğu aşağıda verilmiştir.

sma <-forecast(round(SMA(data[,2],4)),h=6, level=99)
sma

x<-as.Date(seq(from = as.Date("2020-04-14"), to = as.Date("2020-04-19"), by = "days"))


sma<-as_tibble(sma)

sonuc<-as.vector(sma$`Point Forecast`)

z<-zoo(sonuc, x)
print(z)

formattable(tibble(Tarih=x, Tahmin=round(sonuc,0)))

plot(z,
  lty = "solid", col="red", main = "6 Günlük Koronavirüs Tahminleri"
)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen 6 günlük vaka öngörü sayıları Tablo 6’da verilmiştir.

Tablo 6: Hareketli Ortalama Öngörülen 6 Günlük Vaka Sayısı Tahminleri

Yukarıda R kod bloğunda tanımlanmış olan 6 günlük vaka öngörü grafiği ise aşağıda sunulmuştur. Hareketli ortalama (moving average) yöntemi bulgularına göre vaka sayılarında aşağı yönlü bir eğilim olduğu gözlenmiştir. Burada unutulmaması gereken konu bu çalışmanın deneysel bir çalışma olduğu, diğer tahmin yöntemlerinin de kullanılabileceğidir.

Holt yöntemini de kullanarak 6 günlük vaka sayısı öngörüsü yapalım. Buna ilişkin R kod bloğu ise aşağıdadır.

set<-ts(as.vector(data[,2]), as.vector(y10))
holty <-holt(set, h = 6)

x<-as.Date(seq(from = as.Date("2020-04-15"), to = as.Date("2020-04-20"), by = "days"))

holty<-as_tibble(holty)
holty<-holty %>% add_column(Date=x, .before='Point Forecast') %>% mutate_all(round, 0)


formattable(holty[,c(1,2,5,6)])

holty %>% ggplot(aes(x=Date, y=`Point Forecast`))+
          geom_line(size=1, color="blue")+
          theme(axis.text.x = element_text(face="bold", 
                           size=8, angle=0),
                axis.text.y = element_text(face="bold", 
                           size=8, angle=90))+
          ggtitle("Holt Yöntemi 6 Günlük Vaka Sayısı Tahminleri") +
          xlab("Tarih") + ylab("Tahmini Vaka Sayısı")+
          theme(plot.title = element_text(face="bold", size=10, hjust=1)) +
          theme(axis.title = element_text(face="bold", size=10))+
          scale_x_date(date_labels = "%Y %b %d")+
          ylim(min(holty$`Lo 95`),max(holty$`Hi 95`))+
          geom_line(aes(y = `Lo 95`, color = "darkred", linetype = "dotted"))+
          geom_line(aes(y = `Hi 95`, color="darkred", linetype="dotted"))+
  theme_economist()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Holt Yöntemine ait elde edilen 6 günlük vaka öngörü sayıları (nokta takminler) % 95 güven aralıklı olarak Tablo 7’de verilmiştir.

Tablo 7: Holt Yöntemi Öngörülen 6 Günlük Vaka Sayısı Tahminleri

Yukarıda R kod bloğunda tanımlanmış olan 6 günlük vaka öngörü grafiği ise aşağıda sunulmuştur. Hareketli ortalama yönteminin aksine Holt yöntemindeki bulgularına göre vaka sayılarında artış trendi olduğu gözlenmiştir. Ancak bu artış keskin bir artış değildir. Grafikteki ortadaki mavi eğri nokta tahminleri, üstündeki kırmızı eğriler ise % 95 güven aralığındaki alt ve üst limitleri göstermektedir.

Son olarak Holt’un yönteminin etkinliğini ölçmek için hata metriklerine bakalım.

summary(holty)

Yukarıdaki kod bloğu çalıştırıldıktan sonra elde edilen hata metrikleri aşağıdaki gibidir.

Forecast method: Holt's method

Model Information:
Holt's method 

Call:
 holt(y = set, h = 6) 

  Smoothing parameters:
    alpha = 0.8711 
    beta  = 1e-04 

  Initial states:
    l = -146.6496 
    b = 124.7065 

  sigma:  387.1822

     AIC     AICc      BIC 
530.8456 532.9885 538.4774 

Error measures:
                    ME     RMSE      MAE       MPE     MAPE     MASE
Training set 0.1261637 363.6944 265.6017 -499.5727 645.7179 1.011991
                   ACF1
Training set 0.01268338

Burada unutulmaması gereken konu bu çalışmanın deneysel bir çalışma olduğu, diğer tahmin yöntemlerinin de kullanılabileceğidir.

Sonuç / Conclusion

Yapılan çalışma ile Türkiye koronavirüs vakalarının epidemiyolojik keşifsel veri analizi yapılmasının yanında deneysel tahmin (prediction) ve öngörü (forecast) çalışması yapılarak farkındalık oluşturulması amaçlanmıştır.

Faydalı olması dileğiyle.

Sağlıkla ve bilimle kalınız.

Saygılarımla.

Note: It can not be cited or copied without referencing.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Yararlanılan Kaynaklar / Resources Utilized

10 Nisan 2020 Tarihi İtibariyle Koronavirüs Pandemisi Üzerine Vaka Çalışmaları: Türkiye ve Diğer Ülke Örnekleri (Case Studies on Coronavirus Pandemic: Cases of Turkey and Other Countries As of April 10, 2020)

Giriş / Introduction

Coronavirüsler (CoV), soğuk algınlığından Orta Doğu Solunum Sendromu (MERS-CoV) ve Şiddetli Akut Solunum Sendromu (SARS-CoV) gibi daha ciddi hastalıklara kadar pek çok hastalığa neden olan büyük bir virüs ailesidir. Bu yeni virüse, yüzey çıkıntıları taç görünümünde olduğu için coronavirus adı verilmiş olup, bu virüs ailesi tek zincirli, pozitif polariteli, zarflı RNA virüsleridir.

Koronavirüs hastalığı (COVID-19), 2019 yılında keşfedilen ve daha önce insanlarda tanımlanmamış yeni bir suştur. Suş, bir bakteri veya virüsün farklı alt türlerinin, aralarında genetik farklılıklar bulunan grupları olarak adlandırılır.

Bu Koronavirüsler zoonotiktir, yani hayvanlar ve insanlar arasında bulaşırlar. Ayrıntılı araştırmalar SARS-CoV’nin misk kedilerinden insanlara ve MERS-CoV’un tek hörgüçlü develerden insanlara bulaştığını göstermiştir. Bilinen birkaç koronavirüs henüz insanları enfekte etmeyen hayvanlarla taşınmaktadır.

Enfeksiyon belirtileri arasında solunum semptomları, ateş, öksürük, nefes darlığı ve solunum güçlüğü bulunur. Daha ciddi vakalarda, enfeksiyon pnömoniye, ciddi akut solunum sendromuna, böbrek yetmezliğine ve hatta ölüme neden olabilir. Solunum sistemi hastalıklarından biri olan pnömoni ya da halk arasında zatürre bakteriler başta olmak üzere mikroorganizmalara bağlı olarak ortaya çıkan akciğer dokusunun iltihaplanmasıdır. Grip gibi bu hastalık da bağışıklık (immun) sistemini baskılayan hastalıklardan biridir. Özellikle ileri yaşlardaki bireylerde hem bağışıklık sisteminin yaşla birlikte yavaşlaması hem de yaşa ve/veya diğer nedenlere bağlı olarak kronik ve diğer hastalıkların görülmesi bu yaşlardaki bireylerde ölüm oranlarını artırabilmektedir. Diğer bir deyişle, bu enfeksiyon komplikasyon yaratarak ve mevcut diğer hastalıkları tetikleyerek bu yaş gruplarında diğer yaş gruplarına göre daha öldürücü olabilir.

Enfeksiyonun yayılmasını önlemek için standart öneriler arasında düzenli el yıkama, öksürme ve hapşırma sırasında ağız ve burnun kapatılması, et ve yumurtaların iyice pişirilmesi yer alır. Öksürme ve hapşırma gibi solunum yolu rahatsızlığı belirtileri gösteren kişilerle yakın temastan kaçınmak bu hastalıktan korunmak için atılacak önemli koruyucu tedbirlerden biridir.

Hastalıktan nasıl korunulacağı hakkında bilgi verdikten sonra bu hastalığın teşhisinde kullanılan ve adı son zamanlarda sık sık duyulan PCR testi hakkında bilgi vermek faydalı olacaktır. PCR, ingilizce adıyla “Polymerase Chain Reaction” kelimelerinin bir araya gelmesinden oluşan ve moleküler biyoloji alanında kullanılan bir tekniktir.Türkçe ise ise polimeraz zincir reaksiyonu olarak adlandırılır. Bazen PCR moleküler fotokopi (molecular photocopying) olarak da adlandırılabilmektedir. DNA’nın küçük bölümlerini kopyalamak için kullanılan hızlı ve ucuz bir tekniktir. Moleküler ve genetik analizler için büyük miktarlarda DNA örneği gerekli olduğundan, izole edilmiş DNA parçaları üzerinde çalışmalar PCR amplifikasyonu olmadan neredeyse imkansızdır. PCR’ın kullanım alanları şöyle özetlenebilir:

  1. Amplifiye edildikten sonra PCR ile üretilen DNA, birçok farklı laboratuvar prosedüründe kullanılabilir. Örneğin, İnsan Genom Projesindeki (HGP) çoğu haritalama tekniği PCR’a dayanmaktadır.
  2. Parmak izi, bakteri veya virüslerin (özellikle AIDS) tespiti ve genetik bozuklukların teşhisi gibi bir dizi laboratuvar ve klinik teknikte de değerlidir.

PCR ( Polimeraz Zincir Reaksiyonu) tekniğinin çalışma şeması ise aşağıdaki şekilde verilmiştir.

polymerase chain reaction diagram
Kaynak: The National Human Genome Research Institute (NHGRI)

PCR tekniğini kullanarak koronavirüs teşhisinin nasıl konulduğuna ilişkin bir video aşağıda verilerek teşhis süreci hakkında bilgi verilmesi amaçlanmıştır.

Kaynak:
AMBOSS: Medical Knowledge Distilled

Bilindiği üzere koronavirüs hastalığının teşhis ve özellikle tedavisine yönelik olarak ilaç ve aşı geliştirme alanında Dünya’da ve ülkemizde yoğun bir mesai harcanmaktadır. Bunlardan biri ülkemizde 02.04.2020 tarihinde Sanayi ve Teknoloji Bakanlığı ve TÜBİTAK bünyesinde “Covid-19 Türkiye Platformu Aşı ve İlaç Geliştirme” bilim insanların katıldığı sanal bir konferans gerçekleştirilmiştir. Türkiye dışında da benzer çalışmalar sanal ortamda çalıştay ve konferans olarak yapılmaktadır. Dünyada yapılan ve benim de katılım sağladığım önde giden bu çalışmalardan biri de Avrupa Öğrenme ve Akıllı Sistemler Laboratuvarı ingilizce adıyla European Laboratory for Learning and Intelligent Systems (ELLIS)’ın 02.04.2020 tarihinde düzenlediği “ELLIS Against Covid-19” adlı çalıştaydır. Dünyanın farklı üniversitelerinden bilim insanlarının katılım sağladığı çalıştayda koranavirüs pandemisinin teşhisinde kullanılan yapay zeka teknolojilerinden koronavirüsün tedavisinde kullanılan ilaçların geliştirilmesinde kullanılan yapay zeka teknolojilerine kadar pek çok konu ele alınmıştır. Çalıştayda ağırlıklı olarak ele alınan konu yapay zekanın teşhis ve tedavide nasıl kullanıldığı ve kullanılacağı idi. Çalıştayda koronavirüs ile mücadele çok güzel uygulama örneklerine yer verilmiştir. Daha önce de dile getirdiğim gibi yapay zeka günümüzün ve geleceğin en kritik teknolojisidir. Bu gerek 4. Sanayi Devrimi gerekse Toplum 5.0 açısından olsun böyledir ve farklı ülkeler yapay zekayı teşhis ve tedavi (robotik cerrahi ve ilaç geliştirme) alanlarında kullanmak için çok ciddi adımlar atmıştır. Bu yapıların da ülkemizde kurulması ve yapay zeka enstitülerinin ülkemizde yaygınlaştırılması gerekmektedir. Aynı zamanda Türkiye Büyük Millet Meclisi bünyesinde Yapay Zeka Komisyonu kurulmalıdır. Yapay zeka özünde öğrenen sistemler olduğu ve sürekli gelişim gösterdiği için sektör ayrımı olmaksızın her alanda kendine uygulama alanı bulan bir teknolojidir.

Koronavirüs salgını Çin ile birlikte diğer ülkelere de yayıldığı için Dünya Sağlık Örgütü tarafından 30/01/2020 tarihinde uluslararası halk sağlığı açısından acil durum ilan edilmiştir. Bu hastalıktan bahsedilirken lise ve üniversite yıllarımda benim de ders olarak aldığım Epidemiyoloji biliminden bahsetmemek olmaz. Epidemiyoloji, toplumda sağlıkla ilgili durumların veya olayların (hastalık dahil) dağılımını, görülme sıklıklarını ve bunları etkileyen faktörleri inceleyen bir tıp bilimi dalıdır.

Epidemiyolojik araştırmalar yapmak için çeşitli yöntemler kullanılabilir. Bu yöntemler dağılımı incelemek için sürveyans, tanımlayıcı çalışmalar ve hastalık belirleyicilerini incelemek için analitik çalışmalar olabilir. Bilindiği üzere Koronavirüs hastalığı artık pandemik bir vaka olarak adlandırılmaktadır. Epidemiyolojinin konu alanına giren pandemi dünyada birden fazla ülkede veya kıtada, çok geniş bir alanda
yayılan ve etkisini gösteren salgın hastalıklara verilen genel isim
olarak ifade edilmektedir. Diğer bir deyişle, salgın (epidemi) durumundaki bir hastalığın ülke sınırlarını aşarak diğer ülkelere yayılım göstermesidir.

Avrupa Birliği kurumlarından biri olan “Avrupa Hastalık Önleme ve Kontrol Merkezi (European Centre for Disease Prevention and Control)”‘ne göre ön bulgular koronavirüs hastalığından vakalara dayalı ölüm oranı (fatalite hızı)’nın binde 20-30 olduğunu göstermektedir. Bu, 2003 SARS salgınından önemli ölçüde daha az. Bununla birlikte, mevsimsel gripin neden ölüm oranlarından çok daha yüksektir.

Çalışma kapsamında koronavirüs pandemi vakalarının epidemiyolojik hızlarla birlikte keşifsel veri analizi (EDA) yapılarak vakaların izlediği seyrin ortaya konulması amaçlanmıştır

Metodoloji / Methodology

Çalışmanın amacı, koronavirüs vakalarının epidemiyolojik düzlemde Türkiye’de ve diğer ülkelerde izlediği seyri detaylı bir şekilde keşifsel veri analiziyle ortaya konulara karar vericilere katkı sunmaktır.

Koronavirüs vakalarının analizinde Türkiye veri setinin oluşturulmasında Türkiye İstatistik Kurumu (TÜİK)’ndan ve Dünya Sağlık Örgütü (DSÖ) raporlarından ve Sağlık Bakanlığı basın açıklamalarından yararlanılmıştır. Bunun nedeni Türkiye veri setine daha derinlemesine bakılmak istenmesidir.

Çalışma kapsamında diğer ülkelere ilişkin koronavirüs vakaları ise Johns Hopkins Üniversitesi Sistem Bilimi ve Mühendisliği Merkezi (JHU CCSE) tarafından desteklenen “The Humanitarian Data Exchange (HDX) (İnsani Veri Alışverişi)” adlı platforma ait https://data.humdata.org web sitesinden alınmıştır. Önceki çalışmalardan faklı olarak bu platformdan veri alınmasının nedeni veri setleri içerisinde onaylanmış ve ölüm vakaları dışında iyileşen koronavirüs vakalarına da yer verilmiş olmasıdır.

Analizlerde Türkiye verisi için Microsoft Excel 2016 ve diğer ülke verileri için R programlama dili kullanılmıştır.

Keşifsel veri analizine geçilmeden önce vaka sayılarından yararlanarak epidemiyolojik hızlar hesaplanmıştır. Bu nedenle, çalışmada kullanılacak hızları açıklamanın faydalı olacağı düşünülmektedir.

Epidemiyoloji biliminde hız kavramı, bir sağlık olayının nüfus içindeki görülme frekansını hesaplamada kullanılan bir ölçüttür. Hızlar, belirli bir zaman diliminde meydana gelen olayların sayısının olayın meydana geldiği nüfusa bölünerek hesaplanır. Eşitliğin payı, sağlık olayı ile karşılaşanların sayısını (X), payda ise risk altındaki nüfusu (X+Y) göstermektedir. Risk altındaki nüfus hastalığa veya sağlık olaylarına karşı duyarlı olan nüfusu ifade etmektedir. Formülize edilirse;

Hız (Rate) = (X / X +Y) * k

Burada, k katsayıyı göstermektedir.

Analizde hızlardan girdi değişkeni olarak kullanılması düşünülen ilk gösterge ölüm veya mortalite ölçütlerinden biri olan Kaba Ölüm Hızı‘dır. Bu hız nüfusun sağlık düzeyini ortaya koymada duyarlı olmasa da bir fikir vermesi açısından önemlidir. Kaba ölüm hızı aşağıdaki eşitlikte gösterilmiştir.

Kaba Ölüm Hızı (Crude Death Rate) = (Bir toplumda belirli bir süre içinde meydana gelen ölüm sayısı / Aynı toplumun aynı süredeki
(yıl ortası) nüfusu) * 1000

Crude death rate = (Total number of deaths during a given time interval / Mid-interval population) * 1000

Girdi değişkeni olarak kullanılması düşünülen ikinci gösterge ölüm veya fatalite ölçütlerinden biri olan Fatalize Hızı‘dır. Bu gösterge kaba ölüm hızına göre daha duyarlı bir göstergedir. Diğer bir ifadeyle, hastalığa yakalananların ne kadarının öldüğünü gösterir. Fatalite hızı aşağıdaki eşitlik yardımıyla hesaplanmaktadır;

Fatalite Hızı (Fatality Rate) = (Nüfusta belirli bir süre içinde “X” hastalığından ölenlerin sayısı / Aynı nüfusun aynı süre içinde “X” hastalığına yakalananların sayısı) * 100

Fatality Rate = (Number of cause-specific deaths among the incident cases / Total number of incident cases) * 100

Türkiye ve Dünya Örnekleri / Cases of Turkey and World Countries

Analizde kullanılan veri Birleşmiş Milletler İnsani İşlerin Koordinasyon Bürosu (OCHA)‘nun web sitelerinden biri olan İnsani Veri Alışverişi (HDX) web sitesinden csv (Comma-seperated value) uzantılı olarak okutulan onaylanmış, ölen ve iyileşen koronavirüs vaka sayılarını içeren 3 farklı veri setinden oluşmaktadır.

Çalışmanın bu kısmında epidemiyolojik hızlarla birlikte keşifsel veri analizi yapılarak Dünyada koronavirüs vakalarıyla ilgili olarak öne çıkan ülkeler verilmiştir.

Aşağıda yazdığım Python kod bloğu ile birlikte “İnsani Veri Alışverişi (HDX)veri tabanından güncel veri akışı sağlanabilecektir. Grafiklerde ise R programlama dili kullanılmıştır. Aşağıdaki kod bloğunda görüleceği üzere mevcut veri setlerinde olmayan 1 adet değişken hesaplanmıştır. Daha sonra bu değişkenler kod bloğu ile veri akışı sağlanmasından sonra birleştirilerek oluşturulan yeni veri setine ilave edilmiştir. İlave edilen değişkenler şöyledir:

  1. Fatali Fızı (Case Fatality Rate:CFR): Onaylanmış vaka sayılarının ölüm vaka sayılarına bölünmesiyle hesaplanmıştır. Çarpım katsayısı (k) ise 1000 olarak alınmıştır.
import numpy as np
import scipy as sp
import pandas as pd
import matplotlib as mpl
import seaborn as sns

case = pd.read_csv("https://data.humdata.org/hxlproxy/data/download/time_series_covid19_confirmed_global_narrow.csv?dest=data_edit&filter01=merge&merge-url01=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D1326629740%26single%3Dtrue%26output%3Dcsv&merge-keys01=%23country%2Bname&merge-tags01=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&filter02=merge&merge-url02=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D398158223%26single%3Dtrue%26output%3Dcsv&merge-keys02=%23adm1%2Bname&merge-tags02=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&merge-replace02=on&merge-overwrite02=on&filter03=explode&explode-header-att03=date&explode-value-att03=value&filter04=rename&rename-oldtag04=%23affected%2Bdate&rename-newtag04=%23date&rename-header04=Date&filter05=rename&rename-oldtag05=%23affected%2Bvalue&rename-newtag05=%23affected%2Binfected%2Bvalue%2Bnum&rename-header05=Value&filter06=clean&clean-date-tags06=%23date&filter07=sort&sort-tags07=%23date&sort-reverse07=on&filter08=sort&sort-tags08=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_confirmed_global.csv")
case = case.drop(case.index[[0]])
case = case.iloc[:,[1,2,3,4,5]]
case = case.rename(columns={"Country/Region": "Ulke","Date":"Tarih","Value": "Vaka", "Lat":"Lat","Long":"Long"})
case = case.astype({'Vaka': 'int64','Tarih': 'datetime64[ns]', 'Lat': 'float64', 'Long':'float64'})
case


url1="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_deaths_global_narrow.csv?dest=data_edit&filter01=merge&merge-url01=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D1326629740%26single%3Dtrue%26output%3Dcsv&merge-keys01=%23country%2Bname&merge-tags01=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&filter02=merge&merge-url02=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D398158223%26single%3Dtrue%26output%3Dcsv&merge-keys02=%23adm1%2Bname&merge-tags02=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&merge-replace02=on&merge-overwrite02=on&filter03=explode&explode-header-att03=date&explode-value-att03=value&filter04=rename&rename-oldtag04=%23affected%2Bdate&rename-newtag04=%23date&rename-header04=Date&filter05=rename&rename-oldtag05=%23affected%2Bvalue&rename-newtag05=%23affected%2Binfected%2Bvalue%2Bnum&rename-header05=Value&filter06=clean&clean-date-tags06=%23date&filter07=sort&sort-tags07=%23date&sort-reverse07=on&filter08=sort&sort-tags08=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_deaths_global.csv"
death= pd.read_csv(url1)
death = death.drop(death.index[[0]])
death = death.iloc[:,[1,2,3,4,5]]
death = death.rename(columns={"Country/Region": "Ulke","Date":"Tarih","Value": "Olen", "Lat":"Lat","Long":"Long"})
death = death.astype({'Olen': 'int32', 'Tarih': 'datetime64[ns]', 'Lat': 'float64', 'Long':'float64'})
death



url2="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_recovered_global_narrow.csv?dest=data_edit&filter01=merge&merge-url01=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D1326629740%26single%3Dtrue%26output%3Dcsv&merge-keys01=%23country%2Bname&merge-tags01=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&filter02=merge&merge-url02=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D398158223%26single%3Dtrue%26output%3Dcsv&merge-keys02=%23adm1%2Bname&merge-tags02=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&merge-replace02=on&merge-overwrite02=on&filter03=explode&explode-header-att03=date&explode-value-att03=value&filter04=rename&rename-oldtag04=%23affected%2Bdate&rename-newtag04=%23date&rename-header04=Date&filter05=rename&rename-oldtag05=%23affected%2Bvalue&rename-newtag05=%23affected%2Binfected%2Bvalue%2Bnum&rename-header05=Value&filter06=clean&clean-date-tags06=%23date&filter07=sort&sort-tags07=%23date&sort-reverse07=on&filter08=sort&sort-tags08=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_recovered_global.csv"
r = pd.read_csv(url2)
r = r.drop(r.index[[0]])
r = r.iloc[:,[1,2,3,4,5]]
r = r.rename(columns={"Country/Region": "Ulke","Date":"Tarih","Value": "Iyilesen", "Lat":"Lat","Long":"Long"})
r = r.astype({'Iyilesen': 'int32', 'Tarih': 'datetime64[ns]', 'Lat': 'float64', 'Long':'float64'})
r

#Veri Setlerinin Birleştirilmesi

x = case.merge(death, on=['Ulke','Lat','Long', 'Tarih'], how='left')
y = x.merge(r, on=['Ulke','Lat','Long', 'Tarih'], how='left')
result =result =y[(y.Vaka >0)]
result

result.isna().sum()# Variable: Iyilesen including  487 missing data 

result=result.fillna(0)#it is assigned to 0 in place of  NAN values
result

result.isna().sum()#Iyilesen: no missing data

result.info()#str gibi R'da olan: It give us idea about structure of data set 

Veri setindeki değişken sayısı 7, gözlem sayısı ise 20876’dir. Aşağıda mevcut değişkenler, değişkenlerin veri tipi ile birlikte gözlem sayısı görülmektedir. Daha sonra yedi olan değişken sayısı fatalite hızı ilave edilerek 8’e çıkarılmıştır. Ancak mükerrer tarihler benzersiz tarihlere düşürüldükten kalan gözlem sayısı 10734’tür.

<class 'pandas.core.frame.DataFrame'>
Int64Index: 10734 entries, 0 to 20876
Data columns (total 8 columns):
Ulke        10734 non-null object
Lat         10734 non-null float64
Long        10734 non-null float64
Tarih       10734 non-null datetime64[ns]
Vaka        10734 non-null int64
Olen        10734 non-null float64
Iyilesen    10734 non-null float64
CFR         10734 non-null float64
dtypes: datetime64[ns](1), float64(5), int64(1), object(1)
memory usage: 754.7+ KB

Veri setinde koronavirüs salgınının yaşandığı aşağıdaki listesi verilen 184 ülke ve/veya bölge bulunmaktadır.

['Afghanistan',
 'Albania',
 'Algeria',
 'Andorra',
 'Angola',
 'Antigua and Barbuda',
 'Argentina',
 'Armenia',
 'Australia',
 'Austria',
 'Azerbaijan',
 'Bahamas',
 'Bahrain',
 'Bangladesh',
 'Barbados',
 'Belarus',
 'Belgium',
 'Belize',
 'Benin',
 'Bhutan',
 'Bolivia',
 'Bosnia and Herzegovina',
 'Botswana',
 'Brazil',
 'Brunei',
 'Bulgaria',
 'Burkina Faso',
 'Burma',
 'Burundi',
 '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',
 'Diamond Princess',
 'Djibouti',
 'Dominica',
 'Dominican Republic',
 'Ecuador',
 'Egypt',
 'El Salvador',
 'Equatorial Guinea',
 'Eritrea',
 'Estonia',
 'Eswatini',
 'Ethiopia',
 'Fiji',
 'Finland',
 'France',
 'Gabon',
 'Gambia',
 'Georgia',
 'Germany',
 'Ghana',
 'Greece',
 'Grenada',
 'Guatemala',
 'Guinea',
 'Guinea-Bissau',
 'Guyana',
 'Haiti',
 'Holy See',
 'Honduras',
 'Hungary',
 'Iceland',
 'India',
 'Indonesia',
 'Iran',
 'Iraq',
 'Ireland',
 'Israel',
 'Italy',
 'Jamaica',
 'Japan',
 'Jordan',
 'Kazakhstan',
 'Kenya',
 'Korea, South',
 'Kosovo',
 'Kuwait',
 'Kyrgyzstan',
 'Laos',
 'Latvia',
 'Lebanon',
 'Liberia',
 'Libya',
 'Liechtenstein',
 'Lithuania',
 'Luxembourg',
 'MS Zaandam',
 'Madagascar',
 'Malawi',
 'Malaysia',
 'Maldives',
 'Mali',
 'Malta',
 'Mauritania',
 'Mauritius',
 'Mexico',
 'Moldova',
 'Monaco',
 'Mongolia',
 'Montenegro',
 'Morocco',
 'Mozambique',
 '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 Kitts and Nevis',
 'Saint Lucia',
 'Saint Vincent and the Grenadines',
 'San Marino',
 'Sao Tome and Principe',
 'Saudi Arabia',
 'Senegal',
 'Serbia',
 'Seychelles',
 'Sierra Leone',
 'Singapore',
 'Slovakia',
 'Slovenia',
 'Somalia',
 'South Africa',
 'South Sudan',
 'Spain',
 'Sri Lanka',
 'Sudan',
 'Suriname',
 'Sweden',
 'Switzerland',
 'Syria',
 'Taiwan*',
 'Tanzania',
 'Thailand',
 'Timor-Leste',
 'Togo',
 'Trinidad and Tobago',
 'Tunisia',
 'Turkey',
 'US',
 'Uganda',
 'Ukraine',
 'United Arab Emirates',
 'United Kingdom',
 'Uruguay',
 'Uzbekistan',
 'Venezuela',
 'Vietnam',
 'West Bank and Gaza',
 'Western Sahara',
 'Zambia',
 'Zimbabwe']

Dünya

Dünyada görülen koronavirüs vakalarının tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Veri setindeki vaka sayıları kümülatif olarak ilerlemektedir.

Dünyadaki Koronavirüs Vakalarının Tanımlayıcı İstatistikleri

Kümülatif vaka sayılarına göre en yüksek 10 ülke aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

En Yüksek Kümülatif Vaka Sayısına Sahip 10 Ülke

En Yüksek Kümülatif Ölüm Vaka Sayısına Sahip 10 Ülke

En Yüksek Kümülatif İyileşen Vaka Sayısına Sahip 10 Ülke

Vaka Sayısı En Yüksek 10 Ülkenin Gün Başına Vaka Sayıları

Vaka Sayısı En Yüksek 10 Ülkenin Gün Başına Ölüm Sayıları

Vaka Sayısı En Yüksek 10 Ülkenin Gün Başına İyileşen Sayıları

Dünya Ülkelerinin Gün Başına Vaka, Ölüm ve İyileşen İstatistikleri

Aşağıdaki linkten 184 ülkenin gün başına vaka, ölüm ve iyileşen istatistiklerini indirebilirsiniz. Burada hangi ülkenin kaç günde ne kadar vaka, ölüm ve iyileşen sayısına ulaştığı görülebilir.

Sonuç / Conclusion

Özetle, İnsani Veri Alışverişi (HDX) platformundan alınan 3 farklı koronavirüs hastalık veri setinin birleştirilmesinden sonra epidemiyolojik hızlarla birlikte keşifsel veri analizi yapılarak koronavirüs pandemisinin trendi hakkında farkındalık oluşturulması amaçlanmıştır.

Faydalı olması dileğiyle.

Sağlıkla ve bilimle kalınız.

Saygılarımla.

Note: It can not be cited or copied without referencing.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Yararlanılan Kaynaklar / Resources Utilized

9 Nisan 2020 Tarihi İtibariyle Koronavirüs Pandemisi Üzerine Vaka Çalışmaları: Türkiye ve Diğer Ülke Örnekleri (Case Studies on Coronavirus Pandemic: Cases of Turkey and Other Countries As of April 9, 2020)

Giriş / Introduction

Coronavirüsler (CoV), soğuk algınlığından Orta Doğu Solunum Sendromu (MERS-CoV) ve Şiddetli Akut Solunum Sendromu (SARS-CoV) gibi daha ciddi hastalıklara kadar pek çok hastalığa neden olan büyük bir virüs ailesidir. Bu yeni virüse, yüzey çıkıntıları taç görünümünde olduğu için coronavirus adı verilmiş olup, bu virüs ailesi tek zincirli, pozitif polariteli, zarflı RNA virüsleridir.

Koronavirüs hastalığı (COVID-19), 2019 yılında keşfedilen ve daha önce insanlarda tanımlanmamış yeni bir suştur. Suş, bir bakteri veya virüsün farklı alt türlerinin, aralarında genetik farklılıklar bulunan grupları olarak adlandırılır.

Bu Koronavirüsler zoonotiktir, yani hayvanlar ve insanlar arasında bulaşırlar. Ayrıntılı araştırmalar SARS-CoV’nin misk kedilerinden insanlara ve MERS-CoV’un tek hörgüçlü develerden insanlara bulaştığını göstermiştir. Bilinen birkaç koronavirüs henüz insanları enfekte etmeyen hayvanlarla taşınmaktadır.

Enfeksiyon belirtileri arasında solunum semptomları, ateş, öksürük, nefes darlığı ve solunum güçlüğü bulunur. Daha ciddi vakalarda, enfeksiyon pnömoniye, ciddi akut solunum sendromuna, böbrek yetmezliğine ve hatta ölüme neden olabilir. Solunum sistemi hastalıklarından biri olan pnömoni ya da halk arasında zatürre bakteriler başta olmak üzere mikroorganizmalara bağlı olarak ortaya çıkan akciğer dokusunun iltihaplanmasıdır. Grip gibi bu hastalık da bağışıklık (immun) sistemini baskılayan hastalıklardan biridir. Özellikle ileri yaşlardaki bireylerde hem bağışıklık sisteminin yaşla birlikte yavaşlaması hem de yaşa ve/veya diğer nedenlere bağlı olarak kronik ve diğer hastalıkların görülmesi bu yaşlardaki bireylerde ölüm oranlarını artırabilmektedir. Diğer bir deyişle, bu enfeksiyon komplikasyon yaratarak ve mevcut diğer hastalıkları tetikleyerek bu yaş gruplarında diğer yaş gruplarına göre daha öldürücü olabilir.

Enfeksiyonun yayılmasını önlemek için standart öneriler arasında düzenli el yıkama, öksürme ve hapşırma sırasında ağız ve burnun kapatılması, et ve yumurtaların iyice pişirilmesi yer alır. Öksürme ve hapşırma gibi solunum yolu rahatsızlığı belirtileri gösteren kişilerle yakın temastan kaçınmak bu hastalıktan korunmak için atılacak önemli koruyucu tedbirlerden biridir.

Hastalıktan nasıl korunulacağı hakkında bilgi verdikten sonra bu hastalığın teşhisinde kullanılan ve adı son zamanlarda sık sık duyulan PCR testi hakkında bilgi vermek faydalı olacaktır. PCR, ingilizce adıyla “Polymerase Chain Reaction” kelimelerinin bir araya gelmesinden oluşan ve moleküler biyoloji alanında kullanılan bir tekniktir.Türkçe ise ise polimeraz zincir reaksiyonu olarak adlandırılır. Bazen PCR moleküler fotokopi (molecular photocopying) olarak da adlandırılabilmektedir. DNA’nın küçük bölümlerini kopyalamak için kullanılan hızlı ve ucuz bir tekniktir. Moleküler ve genetik analizler için büyük miktarlarda DNA örneği gerekli olduğundan, izole edilmiş DNA parçaları üzerinde çalışmalar PCR amplifikasyonu olmadan neredeyse imkansızdır. PCR’ın kullanım alanları şöyle özetlenebilir:

  1. Amplifiye edildikten sonra PCR ile üretilen DNA, birçok farklı laboratuvar prosedüründe kullanılabilir. Örneğin, İnsan Genom Projesindeki (HGP) çoğu haritalama tekniği PCR’a dayanmaktadır.
  2. Parmak izi, bakteri veya virüslerin (özellikle AIDS) tespiti ve genetik bozuklukların teşhisi gibi bir dizi laboratuvar ve klinik teknikte de değerlidir.

PCR ( Polimeraz Zincir Reaksiyonu) tekniğinin çalışma şeması ise aşağıdaki şekilde verilmiştir.

polymerase chain reaction diagram
Kaynak: The National Human Genome Research Institute (NHGRI)

PCR tekniğini kullanarak koronavirüs teşhisinin nasıl konulduğuna ilişkin bir video aşağıda verilerek teşhis süreci hakkında bilgi verilmesi amaçlanmıştır.

Kaynak:
AMBOSS: Medical Knowledge Distilled

Bilindiği üzere koronavirüs hastalığının teşhis ve özellikle tedavisine yönelik olarak ilaç ve aşı geliştirme alanında Dünya’da ve ülkemizde yoğun bir mesai harcanmaktadır. Bunlardan biri ülkemizde 02.04.2020 tarihinde Sanayi ve Teknoloji Bakanlığı ve TÜBİTAK bünyesinde “Covid-19 Türkiye Platformu Aşı ve İlaç Geliştirme” bilim insanların katıldığı sanal bir konferans gerçekleştirilmiştir. Türkiye dışında da benzer çalışmalar sanal ortamda çalıştay ve konferans olarak yapılmaktadır. Dünyada yapılan ve benim de katılım sağladığım önde giden bu çalışmalardan biri de Avrupa Öğrenme ve Akıllı Sistemler Laboratuvarı ingilizce adıyla European Laboratory for Learning and Intelligent Systems (ELLIS)’ın 02.04.2020 tarihinde düzenlediği “ELLIS Against Covid-19” adlı çalıştaydır. Dünyanın farklı üniversitelerinden bilim insanlarının katılım sağladığı çalıştayda koranavirüs pandemisinin teşhisinde kullanılan yapay zeka teknolojilerinden koronavirüsün tedavisinde kullanılan ilaçların geliştirilmesinde kullanılan yapay zeka teknolojilerine kadar pek çok konu ele alınmıştır. Çalıştayda ağırlıklı olarak ele alınan konu yapay zekanın teşhis ve tedavide nasıl kullanıldığı ve kullanılacağı idi. Çalıştayda koronavirüs ile mücadele çok güzel uygulama örneklerine yer verilmiştir. Daha önce de dile getirdiğim gibi yapay zeka günümüzün ve geleceğin en kritik teknolojisidir. Bu gerek 4. Sanayi Devrimi gerekse Toplum 5.0 açısından olsun böyledir ve farklı ülkeler yapay zekayı teşhis ve tedavi (robotik cerrahi ve ilaç geliştirme) alanlarında kullanmak için çok ciddi adımlar atmıştır. Bu yapıların da ülkemizde kurulması ve yapay zeka enstitülerinin ülkemizde yaygınlaştırılması gerekmektedir. Aynı zamanda Türkiye Büyük Millet Meclisi bünyesinde Yapay Zeka Komisyonu kurulmalıdır. Yapay zeka özünde öğrenen sistemler olduğu ve sürekli gelişim gösterdiği için sektör ayrımı olmaksızın her alanda kendine uygulama alanı bulan bir teknolojidir.

Koronavirüs salgını Çin ile birlikte diğer ülkelere de yayıldığı için Dünya Sağlık Örgütü tarafından 30/01/2020 tarihinde uluslararası halk sağlığı açısından acil durum ilan edilmiştir. Bu hastalıktan bahsedilirken lise ve üniversite yıllarımda benim de ders olarak aldığım Epidemiyoloji biliminden bahsetmemek olmaz. Epidemiyoloji, toplumda sağlıkla ilgili durumların veya olayların (hastalık dahil) dağılımını, görülme sıklıklarını ve bunları etkileyen faktörleri inceleyen bir tıp bilimi dalıdır.

Epidemiyolojik araştırmalar yapmak için çeşitli yöntemler kullanılabilir. Bu yöntemler dağılımı incelemek için sürveyans, tanımlayıcı çalışmalar ve hastalık belirleyicilerini incelemek için analitik çalışmalar olabilir. Bilindiği üzere Koronavirüs hastalığı artık pandemik bir vaka olarak adlandırılmaktadır. Epidemiyolojinin konu alanına giren pandemi dünyada birden fazla ülkede veya kıtada, çok geniş bir alanda
yayılan ve etkisini gösteren salgın hastalıklara verilen genel isim
olarak ifade edilmektedir. Diğer bir deyişle, salgın (epidemi) durumundaki bir hastalığın ülke sınırlarını aşarak diğer ülkelere yayılım göstermesidir.

Avrupa Birliği kurumlarından biri olan “Avrupa Hastalık Önleme ve Kontrol Merkezi (European Centre for Disease Prevention and Control)”‘ne göre ön bulgular koronavirüs hastalığından vakalara dayalı ölüm oranı (fatalite hızı)’nın binde 20-30 olduğunu göstermektedir. Bu, 2003 SARS salgınından önemli ölçüde daha az. Bununla birlikte, mevsimsel gripin neden ölüm oranlarından çok daha yüksektir.

Çalışma kapsamında koronavirüs pandemi vakalarının epidemiyolojik hızlarla birlikte keşifsel veri analizi (EDA) yapılarak vakaların izlediği seyrin ortaya konulması amaçlanmıştır

Metodoloji / Methodology

Çalışmanın amacı, koronavirüs vakalarının epidemiyolojik düzlemde Türkiye’de ve diğer ülkelerde izlediği seyri detaylı bir şekilde keşifsel veri analiziyle ortaya konulara karar vericilere katkı sunmaktır.

Koronavirüs vakalarının analizinde Türkiye veri setinin oluşturulmasında Türkiye İstatistik Kurumu (TÜİK)’ndan ve Dünya Sağlık Örgütü (DSÖ) raporlarından ve Sağlık Bakanlığı basın açıklamalarından yararlanılmıştır. Bunun nedeni Türkiye veri setine daha derinlemesine bakılmak istenmesidir.

Çalışma kapsamında diğer ülkelere ilişkin koronavirüs vakaları ise Johns Hopkins Üniversitesi Sistem Bilimi ve Mühendisliği Merkezi (JHU CCSE) tarafından desteklenen “The Humanitarian Data Exchange (HDX) (İnsani Veri Alışverişi)” adlı platforma ait https://data.humdata.org web sitesinden alınmıştır. Önceki çalışmalardan faklı olarak bu platformdan veri alınmasının nedeni veri setleri içerisinde onaylanmış ve ölüm vakaları dışında iyileşen koronavirüs vakalarına da yer verilmiş olmasıdır.

Analizlerde Türkiye verisi için Microsoft Excel 2016 ve diğer ülke verileri için R programlama dili kullanılmıştır.

Keşifsel veri analizine geçilmeden önce vaka sayılarından yararlanarak epidemiyolojik hızlar hesaplanmıştır. Bu nedenle, çalışmada kullanılacak hızları açıklamanın faydalı olacağı düşünülmektedir.

Epidemiyoloji biliminde hız kavramı, bir sağlık olayının nüfus içindeki görülme frekansını hesaplamada kullanılan bir ölçüttür. Hızlar, belirli bir zaman diliminde meydana gelen olayların sayısının olayın meydana geldiği nüfusa bölünerek hesaplanır. Eşitliğin payı, sağlık olayı ile karşılaşanların sayısını (X), payda ise risk altındaki nüfusu (X+Y) göstermektedir. Risk altındaki nüfus hastalığa veya sağlık olaylarına karşı duyarlı olan nüfusu ifade etmektedir. Formülize edilirse;

Hız (Rate) = (X / X +Y) * k

Burada, k katsayıyı göstermektedir.

Analizde hızlardan girdi değişkeni olarak kullanılması düşünülen ilk gösterge ölüm veya mortalite ölçütlerinden biri olan Kaba Ölüm Hızı‘dır. Bu hız nüfusun sağlık düzeyini ortaya koymada duyarlı olmasa da bir fikir vermesi açısından önemlidir. Kaba ölüm hızı aşağıdaki eşitlikte gösterilmiştir.

Kaba Ölüm Hızı (Crude Death Rate) = (Bir toplumda belirli bir süre içinde meydana gelen ölüm sayısı / Aynı toplumun aynı süredeki
(yıl ortası) nüfusu) * 1000

Crude death rate = (Total number of deaths during a given time interval / Mid-interval population) * 1000

Girdi değişkeni olarak kullanılması düşünülen ikinci gösterge ölüm veya fatalite ölçütlerinden biri olan Fatalize Hızı‘dır. Bu gösterge kaba ölüm hızına göre daha duyarlı bir göstergedir. Diğer bir ifadeyle, hastalığa yakalananların ne kadarının öldüğünü gösterir. Fatalite hızı aşağıdaki eşitlik yardımıyla hesaplanmaktadır;

Fatalite Hızı (Fatality Rate) = (Nüfusta belirli bir süre içinde “X” hastalığından ölenlerin sayısı / Aynı nüfusun aynı süre içinde “X” hastalığına yakalananların sayısı) * 100

Fatality Rate = (Number of cause-specific deaths among the incident cases / Total number of incident cases) * 100

Türkiye ve Dünya Örnekleri / Cases of Turkey and World Countries

Analizde kullanılan veri Birleşmiş Milletler İnsani İşlerin Koordinasyon Bürosu (OCHA)‘nun web sitelerinden biri olan İnsani Veri Alışverişi (HDX) web sitesinden csv (Comma-seperated value) uzantılı olarak okutulan onaylanmış, ölen ve iyileşen koronavirüs vaka sayılarını içeren 3 farklı veri setinden oluşmaktadır.

Çalışmanın bu kısmında epidemiyolojik hızlarla birlikte keşifsel veri analizi yapılarak Dünyada koronavirüs vakalarıyla ilgili olarak öne çıkan ülkeler verilmiştir.

Aşağıda yazdığım Python kod bloğu ile birlikte “İnsani Veri Alışverişi (HDX)veri tabanından güncel veri akışı sağlanabilecektir. Aşağıdaki kod bloğunda görüleceği üzere mevcut veri setlerinde olmayan 1 adet değişken hesaplanmıştır. Daha sonra bu değişkenler kod bloğu ile veri akışı sağlanmasından sonra birleştirilerek oluşturulan yeni veri setine ilave edilmiştir. İlave edilen değişkenler şöyledir:

  1. Fatali Fızı (Case Fatality Rate:CFR): Onaylanmış vaka sayılarının ölüm vaka sayılarına bölünmesiyle hesaplanmıştır. Çarpım katsayısı (k) ise 1000 olarak alınmıştır.
import numpy as np
import scipy as sp
import pandas as pd
import matplotlib as mpl
import seaborn as sns

case = pd.read_csv("https://data.humdata.org/hxlproxy/data/download/time_series_covid19_confirmed_global_narrow.csv?dest=data_edit&filter01=merge&merge-url01=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D1326629740%26single%3Dtrue%26output%3Dcsv&merge-keys01=%23country%2Bname&merge-tags01=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&filter02=merge&merge-url02=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D398158223%26single%3Dtrue%26output%3Dcsv&merge-keys02=%23adm1%2Bname&merge-tags02=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&merge-replace02=on&merge-overwrite02=on&filter03=explode&explode-header-att03=date&explode-value-att03=value&filter04=rename&rename-oldtag04=%23affected%2Bdate&rename-newtag04=%23date&rename-header04=Date&filter05=rename&rename-oldtag05=%23affected%2Bvalue&rename-newtag05=%23affected%2Binfected%2Bvalue%2Bnum&rename-header05=Value&filter06=clean&clean-date-tags06=%23date&filter07=sort&sort-tags07=%23date&sort-reverse07=on&filter08=sort&sort-tags08=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_confirmed_global.csv")
case = case.drop(case.index[[0]])
case = case.iloc[:,[1,2,3,4,5]]
case = case.rename(columns={"Country/Region": "Ulke","Date":"Tarih","Value": "Vaka", "Lat":"Lat","Long":"Long"})
case = case.astype({'Vaka': 'int64','Tarih': 'datetime64[ns]', 'Lat': 'float64', 'Long':'float64'})
case


url1="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_deaths_global_narrow.csv?dest=data_edit&filter01=merge&merge-url01=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D1326629740%26single%3Dtrue%26output%3Dcsv&merge-keys01=%23country%2Bname&merge-tags01=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&filter02=merge&merge-url02=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D398158223%26single%3Dtrue%26output%3Dcsv&merge-keys02=%23adm1%2Bname&merge-tags02=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&merge-replace02=on&merge-overwrite02=on&filter03=explode&explode-header-att03=date&explode-value-att03=value&filter04=rename&rename-oldtag04=%23affected%2Bdate&rename-newtag04=%23date&rename-header04=Date&filter05=rename&rename-oldtag05=%23affected%2Bvalue&rename-newtag05=%23affected%2Binfected%2Bvalue%2Bnum&rename-header05=Value&filter06=clean&clean-date-tags06=%23date&filter07=sort&sort-tags07=%23date&sort-reverse07=on&filter08=sort&sort-tags08=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_deaths_global.csv"
death= pd.read_csv(url1)
death = death.drop(death.index[[0]])
death = death.iloc[:,[1,2,3,4,5]]
death = death.rename(columns={"Country/Region": "Ulke","Date":"Tarih","Value": "Olen", "Lat":"Lat","Long":"Long"})
death = death.astype({'Olen': 'int32', 'Tarih': 'datetime64[ns]', 'Lat': 'float64', 'Long':'float64'})
death



url2="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_recovered_global_narrow.csv?dest=data_edit&filter01=merge&merge-url01=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D1326629740%26single%3Dtrue%26output%3Dcsv&merge-keys01=%23country%2Bname&merge-tags01=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&filter02=merge&merge-url02=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2Fe%2F2PACX-1vTglKQRXpkKSErDiWG6ycqEth32MY0reMuVGhaslImLjfuLU0EUgyyu2e-3vKDArjqGX7dXEBV8FJ4f%2Fpub%3Fgid%3D398158223%26single%3Dtrue%26output%3Dcsv&merge-keys02=%23adm1%2Bname&merge-tags02=%23country%2Bcode%2C%23region%2Bmain%2Bcode%2C%23region%2Bsub%2Bcode%2C%23region%2Bintermediate%2Bcode&merge-replace02=on&merge-overwrite02=on&filter03=explode&explode-header-att03=date&explode-value-att03=value&filter04=rename&rename-oldtag04=%23affected%2Bdate&rename-newtag04=%23date&rename-header04=Date&filter05=rename&rename-oldtag05=%23affected%2Bvalue&rename-newtag05=%23affected%2Binfected%2Bvalue%2Bnum&rename-header05=Value&filter06=clean&clean-date-tags06=%23date&filter07=sort&sort-tags07=%23date&sort-reverse07=on&filter08=sort&sort-tags08=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_recovered_global.csv"
r = pd.read_csv(url2)
r = r.drop(r.index[[0]])
r = r.iloc[:,[1,2,3,4,5]]
r = r.rename(columns={"Country/Region": "Ulke","Date":"Tarih","Value": "Iyilesen", "Lat":"Lat","Long":"Long"})
r = r.astype({'Iyilesen': 'int32', 'Tarih': 'datetime64[ns]', 'Lat': 'float64', 'Long':'float64'})
r

#Veri Setlerinin Birleştirilmesi

x = case.merge(death, on=['Ulke','Lat','Long', 'Tarih'], how='left')
y = x.merge(r, on=['Ulke','Lat','Long', 'Tarih'], how='left')
result =result =y[(y.Vaka >0)]
result

result.isna().sum()# Variable: Iyilesen including  487 missing data 

result=result.fillna(0)#it is assigned to 0 in place of  NAN values
result

result.isna().sum()#Iyilesen: no missing data

result.info()#str gibi R'da olan: It give us idea about structure of data set 

Veri setindeki değişken sayısı 7, gözlem sayısı ise 20611’dir. Aşağıda mevcut değişkenler, değişkenlerin veri tipi ile birlikte gözlem sayısı görülmektedir. Daha sonra yedi olan değişken sayısı fatalite hızı ilave edilerek 8’e çıkarılmıştır. Ancak mükerrer tarihler benzersiz tarihlere düşürüldükten kalan gözlem sayısı 10473’tür.

<class 'pandas.core.frame.DataFrame'>
Int64Index: 10473 entries, 0 to 20611
Data columns (total 7 columns):
Ulke        10473 non-null object
Lat         10473 non-null float64
Long        10473 non-null float64
Tarih       10473 non-null datetime64[ns]
Vaka        10473 non-null int64
Olen        10473 non-null int32
Iyilesen    10473 non-null float64
dtypes: datetime64[ns](1), float64(3), int32(1), int64(1), object(1)
memory usage: 613.7+ KB

Veri setinde koronavirüs salgınının yaşandığı aşağıdaki listesi verilen 184 ülke ve/veya bölge bulunmaktadır.

['Afghanistan',
 'Albania',
 'Algeria',
 'Andorra',
 'Angola',
 'Antigua and Barbuda',
 'Argentina',
 'Armenia',
 'Australia',
 'Austria',
 'Azerbaijan',
 'Bahamas',
 'Bahrain',
 'Bangladesh',
 'Barbados',
 'Belarus',
 'Belgium',
 'Belize',
 'Benin',
 'Bhutan',
 'Bolivia',
 'Bosnia and Herzegovina',
 'Botswana',
 'Brazil',
 'Brunei',
 'Bulgaria',
 'Burkina Faso',
 'Burma',
 'Burundi',
 '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',
 'Diamond Princess',
 'Djibouti',
 'Dominica',
 'Dominican Republic',
 'Ecuador',
 'Egypt',
 'El Salvador',
 'Equatorial Guinea',
 'Eritrea',
 'Estonia',
 'Eswatini',
 'Ethiopia',
 'Fiji',
 'Finland',
 'France',
 'Gabon',
 'Gambia',
 'Georgia',
 'Germany',
 'Ghana',
 'Greece',
 'Grenada',
 'Guatemala',
 'Guinea',
 'Guinea-Bissau',
 'Guyana',
 'Haiti',
 'Holy See',
 'Honduras',
 'Hungary',
 'Iceland',
 'India',
 'Indonesia',
 'Iran',
 'Iraq',
 'Ireland',
 'Israel',
 'Italy',
 'Jamaica',
 'Japan',
 'Jordan',
 'Kazakhstan',
 'Kenya',
 'Korea, South',
 'Kosovo',
 'Kuwait',
 'Kyrgyzstan',
 'Laos',
 'Latvia',
 'Lebanon',
 'Liberia',
 'Libya',
 'Liechtenstein',
 'Lithuania',
 'Luxembourg',
 'MS Zaandam',
 'Madagascar',
 'Malawi',
 'Malaysia',
 'Maldives',
 'Mali',
 'Malta',
 'Mauritania',
 'Mauritius',
 'Mexico',
 'Moldova',
 'Monaco',
 'Mongolia',
 'Montenegro',
 'Morocco',
 'Mozambique',
 '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 Kitts and Nevis',
 'Saint Lucia',
 'Saint Vincent and the Grenadines',
 'San Marino',
 'Sao Tome and Principe',
 'Saudi Arabia',
 'Senegal',
 'Serbia',
 'Seychelles',
 'Sierra Leone',
 'Singapore',
 'Slovakia',
 'Slovenia',
 'Somalia',
 'South Africa',
 'South Sudan',
 'Spain',
 'Sri Lanka',
 'Sudan',
 'Suriname',
 'Sweden',
 'Switzerland',
 'Syria',
 'Taiwan*',
 'Tanzania',
 'Thailand',
 'Timor-Leste',
 'Togo',
 'Trinidad and Tobago',
 'Tunisia',
 'Turkey',
 'US',
 'Uganda',
 'Ukraine',
 'United Arab Emirates',
 'United Kingdom',
 'Uruguay',
 'Uzbekistan',
 'Venezuela',
 'Vietnam',
 'West Bank and Gaza',
 'Western Sahara',
 'Zambia',
 'Zimbabwe']

Dünya

Dünyada görülen koronavirüs vakalarının tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Veri setindeki vaka sayıları kümülatif olarak ilerlemektedir.

Dünyadaki Koronavirüs Vakalarının Tanımlayıcı İstatistikleri

Kümülatif vaka sayılarına göre en yüksek 10 ülke aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

En Yüksek Kümülatif Vaka Sayısına Sahip 10 Ülke

Bu görselin boş bir alt özelliği var; dosya ismi: image-87.png

En Yüksek Kümülatif Ölüm Vaka Sayısına Sahip 10 Ülke

En Yüksek Kümülatif İyileşen Vaka Sayısına Sahip 10 Ülke

Sonuç / Conclusion

Özetle, İnsani Veri Alışverişi (HDX) platformundan alınan 3 farklı koronavirüs hastalık veri setinin birleştirilmesinden sonra epidemiyolojik hızlarla birlikte keşifsel veri analizi yapılarak koronavirüs pandemisinin trendi hakkında farkındalık oluşturulması amaçlanmıştır.

Faydalı olması dileğiyle.

Sağlıkla ve bilimle kalınız.

Saygılarımla.

Note: It can not be cited or copied without referencing.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Yararlanılan Kaynaklar / Resources Utilized

5 Nisan 2020 Tarihi İtibariyle Koronavirüs Pandemisi Üzerine Vaka Çalışmaları: Türkiye ve Diğer Ülke Örnekleri (Case Studies on Coronavirus Pandemic: Cases of Turkey and Other Countries As of April 5, 2020)

Giriş / Introduction

Coronavirüsler (CoV), soğuk algınlığından Orta Doğu Solunum Sendromu (MERS-CoV) ve Şiddetli Akut Solunum Sendromu (SARS-CoV) gibi daha ciddi hastalıklara kadar pek çok hastalığa neden olan büyük bir virüs ailesidir. Bu yeni virüse, yüzey çıkıntıları taç görünümünde olduğu için coronavirus adı verilmiş olup, bu virüs ailesi tek zincirli, pozitif polariteli, zarflı RNA virüsleridir.

Koronavirüs hastalığı (COVID-19), 2019 yılında keşfedilen ve daha önce insanlarda tanımlanmamış yeni bir suştur. Suş, bir bakteri veya virüsün farklı alt türlerinin, aralarında genetik farklılıklar bulunan grupları olarak adlandırılır.

Bu Koronavirüsler zoonotiktir, yani hayvanlar ve insanlar arasında bulaşırlar. Ayrıntılı araştırmalar SARS-CoV’nin misk kedilerinden insanlara ve MERS-CoV’un tek hörgüçlü develerden insanlara bulaştığını göstermiştir. Bilinen birkaç koronavirüs henüz insanları enfekte etmeyen hayvanlarla taşınmaktadır.

Enfeksiyon belirtileri arasında solunum semptomları, ateş, öksürük, nefes darlığı ve solunum güçlüğü bulunur. Daha ciddi vakalarda, enfeksiyon pnömoniye, ciddi akut solunum sendromuna, böbrek yetmezliğine ve hatta ölüme neden olabilir. Solunum sistemi hastalıklarından biri olan pnömoni ya da halk arasında zatürre bakteriler başta olmak üzere mikroorganizmalara bağlı olarak ortaya çıkan akciğer dokusunun iltihaplanmasıdır. Grip gibi bu hastalık da bağışıklık (immun) sistemini baskılayan hastalıklardan biridir. Özellikle ileri yaşlardaki bireylerde hem bağışıklık sisteminin yaşla birlikte yavaşlaması hem de yaşa ve/veya diğer nedenlere bağlı olarak kronik ve diğer hastalıkların görülmesi bu yaşlardaki bireylerde ölüm oranlarını artırabilmektedir. Diğer bir deyişle, bu enfeksiyon komplikasyon yaratarak ve mevcut diğer hastalıkları tetikleyerek bu yaş gruplarında diğer yaş gruplarına göre daha öldürücü olabilir.

Enfeksiyonun yayılmasını önlemek için standart öneriler arasında düzenli el yıkama, öksürme ve hapşırma sırasında ağız ve burnun kapatılması, et ve yumurtaların iyice pişirilmesi yer alır. Öksürme ve hapşırma gibi solunum yolu rahatsızlığı belirtileri gösteren kişilerle yakın temastan kaçınmak bu hastalıktan korunmak için atılacak önemli koruyucu tedbirlerden biridir.

Hastalıktan nasıl korunulacağı hakkında bilgi verdikten sonra bu hastalığın teşhisinde kullanılan ve adı son zamanlarda sık sık duyulan PCR testi hakkında bilgi vermek faydalı olacaktır. PCR, ingilizce adıyla “Polymerase Chain Reaction” kelimelerinin bir araya gelmesinden oluşan ve moleküler biyoloji alanında kullanılan bir tekniktir.Türkçe ise ise polimeraz zincir reaksiyonu olarak adlandırılır. Bazen PCR moleküler fotokopi (molecular photocopying) olarak da adlandırılabilmektedir. DNA’nın küçük bölümlerini kopyalamak için kullanılan hızlı ve ucuz bir tekniktir. Moleküler ve genetik analizler için büyük miktarlarda DNA örneği gerekli olduğundan, izole edilmiş DNA parçaları üzerinde çalışmalar PCR amplifikasyonu olmadan neredeyse imkansızdır. PCR’ın kullanım alanları şöyle özetlenebilir:

  1. Amplifiye edildikten sonra PCR ile üretilen DNA, birçok farklı laboratuvar prosedüründe kullanılabilir. Örneğin, İnsan Genom Projesindeki (HGP) çoğu haritalama tekniği PCR’a dayanmaktadır.
  2. Parmak izi, bakteri veya virüslerin (özellikle AIDS) tespiti ve genetik bozuklukların teşhisi gibi bir dizi laboratuvar ve klinik teknikte de değerlidir.

PCR ( Polimeraz Zincir Reaksiyonu) tekniğinin çalışma şeması ise aşağıdaki şekilde verilmiştir.

polymerase chain reaction diagram
Kaynak: The National Human Genome Research Institute (NHGRI)

PCR tekniğini kullanarak koronavirüs teşhisinin nasıl konulduğuna ilişkin bir video aşağıda verilerek teşhis süreci hakkında bilgi verilmesi amaçlanmıştır.

Kaynak:
AMBOSS: Medical Knowledge Distilled

Bilindiği üzere koronavirüs hastalığının teşhis ve özellikle tedavisine yönelik olarak ilaç ve aşı geliştirme alanında Dünya’da ve ülkemizde yoğun bir mesai harcanmaktadır. Bunlardan biri ülkemizde 02.04.2020 tarihinde Sanayi ve Teknoloji Bakanlığı ve TÜBİTAK bünyesinde “Covid-19 Türkiye Platformu Aşı ve İlaç Geliştirme” bilim insanların katıldığı sanal bir konferans gerçekleştirilmiştir. Türkiye dışında da benzer çalışmalar sanal ortamda çalıştay ve konferans olarak yapılmaktadır. Dünyada yapılan ve benim de katılım sağladığım önde giden bu çalışmalardan biri de Avrupa Öğrenme ve Akıllı Sistemler Laboratuvarı ingilizce adıyla European Laboratory for Learning and Intelligent Systems (ELLIS)’ın 02.04.2020 tarihinde düzenlediği “ELLIS Against Covid-19” adlı çalıştaydır. Dünyanın farklı üniversitelerinden bilim insanlarının katılım sağladığı çalıştayda koranavirüs pandemisinin teşhisinde kullanılan yapay zeka teknolojilerinden koronavirüsün tedavisinde kullanılan ilaçların geliştirilmesinde kullanılan yapay zeka teknolojilerine kadar pek çok konu ele alınmıştır. Çalıştayda ağırlıklı olarak ele alınan konu yapay zekanın teşhis ve tedavide nasıl kullanıldığı ve kullanılacağı idi. Çalıştayda koronavirüs ile mücadele çok güzel uygulama örneklerine yer verilmiştir. Daha önce de dile getirdiğim gibi yapay zeka günümüzün ve geleceğin en kritik teknolojisidir. Bu gerek 4. Sanayi Devrimi gerekse Toplum 5.0 açısından olsun böyledir ve farklı ülkeler yapay zekayı teşhis ve tedavi (robotik cerrahi ve ilaç geliştirme) alanlarında kullanmak için çok ciddi adımlar atmıştır. Bu yapıların da ülkemizde kurulması ve yapay zeka enstitülerinin ülkemizde yaygınlaştırılması gerekmektedir. Aynı zamanda Türkiye Büyük Millet Meclisi bünyesinde Yapay Zeka Komisyonu kurulmalıdır. Yapay zeka özünde öğrenen sistemler olduğu ve sürekli gelişim gösterdiği için sektör ayrımı olmaksızın her alanda kendine uygulama alanı bulan bir teknolojidir.

Koronavirüs salgını Çin ile birlikte diğer ülkelere de yayıldığı için Dünya Sağlık Örgütü tarafından 30/01/2020 tarihinde uluslararası halk sağlığı açısından acil durum ilan edilmiştir. Bu hastalıktan bahsedilirken lise ve üniversite yıllarımda benim de ders olarak aldığım Epidemiyoloji biliminden bahsetmemek olmaz. Epidemiyoloji, toplumda sağlıkla ilgili durumların veya olayların (hastalık dahil) dağılımını, görülme sıklıklarını ve bunları etkileyen faktörleri inceleyen bir tıp bilimi dalıdır.

Epidemiyolojik araştırmalar yapmak için çeşitli yöntemler kullanılabilir. Bu yöntemler dağılımı incelemek için sürveyans, tanımlayıcı çalışmalar ve hastalık belirleyicilerini incelemek için analitik çalışmalar olabilir. Bilindiği üzere Koronavirüs hastalığı artık pandemik bir vaka olarak adlandırılmaktadır. Epidemiyolojinin konu alanına giren pandemi dünyada birden fazla ülkede veya kıtada, çok geniş bir alanda
yayılan ve etkisini gösteren salgın hastalıklara verilen genel isim
olarak ifade edilmektedir. Diğer bir deyişle, salgın (epidemi) durumundaki bir hastalığın ülke sınırlarını aşarak diğer ülkelere yayılım göstermesidir.

Avrupa Birliği kurumlarından biri olan “Avrupa Hastalık Önleme ve Kontrol Merkezi (European Centre for Disease Prevention and Control)”‘ne göre ön bulgular koronavirüs hastalığından vakalara dayalı ölüm oranı (fatalite hızı)’nın binde 20-30 olduğunu göstermektedir. Bu, 2003 SARS salgınından önemli ölçüde daha az. Bununla birlikte, mevsimsel gripin neden ölüm oranlarından çok daha yüksektir.

Çalışma kapsamında koronavirüs pandemi vakalarının epidemiyolojik hızlarla birlikte keşifsel veri analizi (EDA) yapılarak vakaların izlediği seyrin ortaya konulması amaçlanmıştır

Metodoloji / Methodology

Çalışmanın amacı, koronavirüs vakalarının epidemiyolojik düzlemde Türkiye’de ve diğer ülkelerde izlediği seyri detaylı bir şekilde keşifsel veri analiziyle ortaya konulara karar vericilere katkı sunmaktır.

Koronavirüs vakalarının analizinde Türkiye veri setinin oluşturulmasında Türkiye İstatistik Kurumu (TÜİK)’ndan ve Dünya Sağlık Örgütü (DSÖ) raporlarından ve Sağlık Bakanlığı basın açıklamalarından yararlanılmıştır. Bunun nedeni Türkiye veri setine daha derinlemesine bakılmak istenmesidir.

Çalışma kapsamında diğer ülkelere ilişkin koronavirüs vakaları ise Johns Hopkins Üniversitesi Sistem Bilimi ve Mühendisliği Merkezi (JHU CCSE) tarafından desteklenen “The Humanitarian Data Exchange (HDX) (İnsani Veri Alışverişi)” adlı platforma ait https://data.humdata.org web sitesinden alınmıştır. Önceki çalışmalardan faklı olarak bu platformdan veri alınmasının nedeni veri setleri içerisinde onaylanmış ve ölüm vakaları dışında iyileşen koronavirüs vakalarına da yer verilmiş olmasıdır.

Analizlerde Türkiye verisi için Microsoft Excel 2016 ve diğer ülke verileri için R programlama dili kullanılmıştır.

Keşifsel veri analizine geçilmeden önce vaka sayılarından yararlanarak epidemiyolojik hızlar hesaplanmıştır. Bu nedenle, çalışmada kullanılacak hızları açıklamanın faydalı olacağı düşünülmektedir.

Epidemiyoloji biliminde hız kavramı, bir sağlık olayının nüfus içindeki görülme frekansını hesaplamada kullanılan bir ölçüttür. Hızlar, belirli bir zaman diliminde meydana gelen olayların sayısının olayın meydana geldiği nüfusa bölünerek hesaplanır. Eşitliğin payı, sağlık olayı ile karşılaşanların sayısını (X), payda ise risk altındaki nüfusu (X+Y) göstermektedir. Risk altındaki nüfus hastalığa veya sağlık olaylarına karşı duyarlı olan nüfusu ifade etmektedir. Formülize edilirse;

Hız (Rate) = (X / X +Y) * k

Burada, k katsayıyı göstermektedir.

Analizde hızlardan girdi değişkeni olarak kullanılması düşünülen ilk gösterge ölüm veya mortalite ölçütlerinden biri olan Kaba Ölüm Hızı‘dır. Bu hız nüfusun sağlık düzeyini ortaya koymada duyarlı olmasa da bir fikir vermesi açısından önemlidir. Kaba ölüm hızı aşağıdaki eşitlikte gösterilmiştir.

Kaba Ölüm Hızı (Crude Death Rate) = (Bir toplumda belirli bir süre içinde meydana gelen ölüm sayısı / Aynı toplumun aynı süredeki
(yıl ortası) nüfusu) * 1000

Crude death rate = (Total number of deaths during a given time interval / Mid-interval population) * 1000

Girdi değişkeni olarak kullanılması düşünülen ikinci gösterge ölüm veya fatalite ölçütlerinden biri olan Fatalize Hızı‘dır. Bu gösterge kaba ölüm hızına göre daha duyarlı bir göstergedir. Diğer bir ifadeyle, hastalığa yakalananların ne kadarının öldüğünü gösterir. Fatalite hızı aşağıdaki eşitlik yardımıyla hesaplanmaktadır;

Fatalite Hızı (Fatality Rate) = (Nüfusta belirli bir süre içinde “X” hastalığından ölenlerin sayısı / Aynı nüfusun aynı süre içinde “X” hastalığına yakalananların sayısı) * 100

Fatality Rate = (Number of cause-specific deaths among the incident cases / Total number of incident cases) * 100

Morbitide veya hastalık hızları gelişmekte olan hastalığın ortaya çıkma hızını ortaya koymak için kullanılır. Bunlardan biri olan insidans,
bir hastalığın gelişme (yeni vakalar) olasılığını ortaya koymak için kullanılır. Diğer taraftan, bu hızlardan prevelans ise hastalığın görülme sıklığını (tüm vakalar) gösteren bir hızdır. İnsidans ve prevelans da analizde girdi değişkenleri olarak kullanılması düşünülmektedir. İnsidans aşağıdaki eşitlik yardımıyla hesaplanmaktadır.

İnsidans (Incidence) = (Bir nüfusta belirli bir sürede saptanan YENİ vaka sayısı / Aynı toplumun yıl ortası nüfusu) * k

Incidence = (Number of new cases of disease during specified time interval / Population at start of time interval) * k

İnsidans hızının kümülatif şekli ise atak hızlarını göstermektedir.

Prevelans ise aşağıdaki eşitlik yardımıyla hesaplanmaktadır.

Prevelans (Prevalence) = (Belirli bir sürede toplam (eski+yeni) vaka sayısı / Risk altındaki kişi sayısı) * k

Prevalence = (Number of cases of disease during specified time interval / Population at start of time interval) * k

Keşifsel Veri Analizi Bulguları / Exploratory Data Analysis Findings

Türkiye Örneği / The Case of Turkey

Bu kısımda bahsedilen epidemiyolojik hızların uygulama sonuçlarına yer verilmiştir. İlk olarak günlük onaylanmış vaka sayıları ile ölüm vaka sayıları Tablo 1’de verilmiştir. Tabloda test sayılarının olduğu sütunda kırmızı renkteki sayılar kesin olarak bilinmediğinden ortalama olarak verilmiştir. Tablo 1’e göre öne çıkan bulgular şöyledir:

  • 05.04.2020 tarihinde toplam vaka sayısı 279069’a yülselmiştir. Aynı günde gerçekleşen yeni vaka sayısı ise 3135 olup bir önceki güne göre % 4,05 artmıştır. Yeni vaka sayısının 3135 olduğu 05.04.2020 tarihi Türkiye’de salgının başladığı günden bugüne kadar vaka sayısının en yüksek olduğu tarihtir.
  • Kümülatif vaka sayısından kümülatif ölen kişi sayısı çıkarılmasından sonra kalan toplam aktif vaka sayısı 26495’tir.
  • Salgında ölen toplam kişi sayısı 574 olup, en yüksek ölüm vakalarının yaşandığı gün 79 kişi ile 02.04.2020 tarihidir.

Tablo 1. Koronavirüs Vaka Sayıları / Number of Coronavirus Cases, Turkey (Yayınlanması beklenmektedir, güncellenecektir)

Epidemiyolojik hızları gösteren bulgular ise Tablo 2’de sunulmuştur. Tablo 2’ye göre öne çıkan bulgular şöyledir:

  • Sağlık düzeyini belirlemede duyarlı bir gösterge olmasa da fikir vermesi açısından kaba ölüm hızı hesaplanmıştır. Buna göre kaba ölüm hızı en yüksek seviyesine ulaştığı 02.4.2020 tarihinde milyonda 0,95’dır. Katsayı bin yerine milyon alınmasının nedeni ortaya konulan bulgunun çok küçük değer almasından kaynaklanmaktadır. Toplam ölüm vaka sayına göre kaba ölüm hızı ise milyonda 6,02’ten 6,9’a yükselmiştir.
  • Fatalite hızının en yüksek olduğu tarih binde 43 ile 21.3.2020 tarihidir. Toplam vaka sayılarına göre fatalite hızı ise binde 21’dir. Bu bulgu şu anlama gelmektedir; bugüne kadar koronavirüs hastalığına yakalanan her 1000 kişiden yaklaşık 21’i hayatını kaybetmiştir.
  • Yapılan test sayıları ve vaka sayıları dikkate alınarak koronavirüs salgının insidansı ve prevelansı da hesaplanmıştır. Yapılan toplam test sayısı 181445’tir. Belirli bir zaman diliminde bir hastalığın bir nüfus grubunda görülme sıklığını ortaya koyan prevelans hızı yaklaşık % 15 olup bir önceki güne göre artış göstermemiştir. Buradan salgın meydana geldiği süre içerisinde test uygulanan her 100 vakadan 15’inde koronavirüs vakası tespit edildiği anlamı çıkmaktadır.
  • Belirli bir zaman diliminde bir hastalığın gelişme (yeni vakalar) olasılığını ortaya koyan insidans hızı % 15,3’ten % 15,6’ya yükselmiştir. Bu bulgudan koronavirüs testi (PCR) yapılan her 100 yeni vakadan yaklaşık 16’sında koronavirüs tespit edildiği anlaşılmaktadır. İnsidans hızı ne kadar çok düşerse salgının yeni vakalar ortaya çıkarma olasılığı o kadar düşer. Bu hız bu açıdan ayrı bir öneme sahiptir.

Tablo 2. Koronavirüs Vakalarının Epidemiyolojik Hızları / Epidemiological Rates of Coronavirus Cases, Turkey

Türkiye’deki Fatalite (Ölüm) Hızlarının Zamana Göre Dağılımı / Distribution of Fatality Rates in Turkey by Time

Koronavirüs vaka sayıları baz alınarak Türkiye ve İtalya’nın karşılaştırıldığı görülmektedir. Bu oldukça eksik bir bakış açısıdır. Zira vaka sayıları ve hatta ölüm sayıları bile tek başına değerlendirilmesi eksik ve hatalı yorumlara ve sonuçlara neden olabilir. Bu göstergelerden daha da önemli olan epidemiyolojik hızlardan ve aynı zamanda ölüm ölçütlerinden biri olan fatalite hızının dikkate alınmasının değerlendirme açısından daha sağlıklı olacağı düşünülmektedir. Aşağıdaki grafikte İtalya ve Türkiye fatalite hızları karşılaştırmalı olarak sunulmuştur. Aşağıdaki grafikte fatalite hızları açısından bakılırsa fatalite hızlarının görüldüğü y ekseninde İtalya’nın çok farklı bir seyir izlediği görülmektedir. Ancak en kötü senaryo olarak düşünülürse atılacak adımlar açısından faydalı olacağı düşünülmektedir. Grafikte X eksenine paralel olarak kesikli doğrular ortalama fatalite hızlarını göstermektedir. İtalya Türkiye’ye göre çok daha yüksek fatalite hızlarına sahip olmasının yanısıra aynı zamanda fatalite hızları ortalamasına yakın bir seyir izlemiştir.

Türkiye ve İtalya’daki Fatalite (Ölüm) Hızlarının Zamana Göre Dağılımı / Distribution of Fatality Rates in Turkey and Italy by Time

Ayrıca Türkiye, Avrupa Hastalık Önleme ve Kontrol Merkezi‘nden alınan koronavirüs ölüm vakaları açısından İtalya’nın yanısıra Fransa, İspanya ve İran ile de ilk 14 günlük seyir karşılaştırılmıştır. Aşağıdaki tabloda toplam ölüm vaka sayıları açısından Türkiye’nin İran ile benzerlik gösterdiği görülmektedir.

Türkiye, İtalya, Fransa, İspanya ve İran’ın Ölüm Vakalarının İlk 14 Günlük Seyri / First 14-Day Dealth Figures, Cases of Turkey, Italy, France, Spain and Iran

Yukarıdaki tabloda ilk 14 günlük zaman diliminde Türkiye’de koronavirüs ölüm vakaları açısından İspanya ve Fransa’ya göre daha yüksek olsa da aşağıdaki tabloda fatalite hızları açısından bu ülkelerin Türkiye’den daha yüksek olduğu olduğu görülmektedir. Diğer taraftan genel olarak Türkiye’nin fatalite hızları açısından ABD’ye benzer ancak ondan daha yüksek fatalite hızlarının olduğu görülmektedir. Tabloda İtalya’nın fatalite hızları açısından açık ara önde olduğu görülmektedir. Bu bulgu aynı zamanda koronavirüs hastalığına yakalananlar içerisinde ölenlerin İtalya’da daha yüksek olduğunu ortaya koymaktadır.

Ülkelere Göre Fatalite Hızlarının Karşılaştırılması / The Comparison of Fatality Rates by Countries

Dünya ve Diğer Ülke Örnekleri / Cases of World and Other Countries

İlk olarak adım adım uygulamaya geçilerek İnsani Veri Alışverişi (HDX) web sitesinden csv (Comma-seperated value) uzantılı olarak okutulan onaylanmış, ölen ve iyileşen koronavirüs vaka sayılarını içeren 3 farklı veri seti birleştirilerek tanıtılmıştır.

Çalışmanın bu kısmında epidemiyolojik hızlarla birlikte keşifsel veri analizi yapılarak Dünyada koronavirüs vakalarıyla ilgili olarak öne çıkan ülkeler verilmiştir.

Aşağıda yazdığım R kod bloğu ile birlikte “İnsani Veri Alışverişi (HDX)veri tabanından güncel veri akışı sağlanabilecektir. Aşağıdaki kod bloğunda görüleceği üzere mevcut veri setlerinde olmayan 2 adet değişken hesaplanmıştır. Daha sonra bu değişkenler kod bloğu ile veri akışı sağlanmasından sonra birleştirilerek oluşturulan yeni veri setine ilave edilmiştir. İlave edilen değişkenler şöyledir:

  1. Aktif Vakalar (ActiveCases) : Onaylanmış vaka sayısından ölen ve iyileşen vakalar çıkarılması ile hesaplanmıştır.
  2. Fatali Fızı (FataliteRate): Onaylanmış vaka sayılarının ölüm vaka sayılarına bölünmesiyle hesaplanmıştır. Çarpım katsayısı (k) ise 1000’dir.
url1="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_confirmed_global_narrow.csv?dest=data_edit&filter01=explode&explode-header-att01=date&explode-value-att01=value&filter02=rename&rename-oldtag02=%23affected%2Bdate&rename-newtag02=%23date&rename-header02=Date&filter03=rename&rename-oldtag03=%23affected%2Bvalue&rename-newtag03=%23affected%2Binfected%2Bvalue%2Bnum&rename-header03=Value&filter04=clean&clean-date-tags04=%23date&filter05=sort&sort-tags05=%23date&sort-reverse05=on&filter06=sort&sort-tags06=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_confirmed_global.csv"

url2="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_deaths_global_narrow.csv?dest=data_edit&filter01=explode&explode-header-att01=date&explode-value-att01=value&filter02=rename&rename-oldtag02=%23affected%2Bdate&rename-newtag02=%23date&rename-header02=Date&filter03=rename&rename-oldtag03=%23affected%2Bvalue&rename-newtag03=%23affected%2Binfected%2Bvalue%2Bnum&rename-header03=Value&filter04=clean&clean-date-tags04=%23date&filter05=sort&sort-tags05=%23date&sort-reverse05=on&filter06=sort&sort-tags06=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_deaths_global.csv"

url3="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_recovered_global_narrow.csv?dest=data_edit&filter01=explode&explode-header-att01=date&explode-value-att01=value&filter02=rename&rename-oldtag02=%23affected%2Bdate&rename-newtag02=%23date&rename-header02=Date&filter03=rename&rename-oldtag03=%23affected%2Bvalue&rename-newtag03=%23affected%2Binfected%2Bvalue%2Bnum&rename-header03=Value&filter04=clean&clean-date-tags04=%23date&filter05=sort&sort-tags05=%23date&sort-reverse05=on&filter06=sort&sort-tags06=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_recovered_global.csv"

case<-read_csv(url1)[-1,-1]
case<-case %>% rename(Country="Country/Region", Cases= "Value")

case

death<-read_csv(url2)[-1,-1]

d<-death %>% rename(Country="Country/Region", Deaths= "Value")

recovered<-read_csv(url3)[-1,-1]

r<-recovered%>% rename(Country="Country/Region", Recovered= "Value")

df<-left_join(case, d, by = c("Country","Lat", "Long","Date"))
df<-left_join(df, r, by = c("Country","Lat", "Long","Date"))
df<-tibble(Country=df$Country, Date=as.Date(df$Date), Month=month(as.Date(df$Date)), Lat=as.numeric(df$Lat), Long=as.numeric(df$Long),Cases=as.integer(df$Cases), Deaths=as.integer(df$Deaths), Recovered= as.integer(df$Recovered), ActiveCases=as.integer(as.numeric(df$Cases)-as.numeric(df$Deaths)-as.numeric(df$Recovered)), FatalityRate=round(as.numeric((as.integer(df$Deaths)/as.integer(df$Cases))*1000),1))
df

Veri setindeki değişken sayısı 8, gözlem sayısı ise 19314’dir. Aşağıda mevcut değişkenler, değişkenlerin veri tipi ile birlikte gözlem sayısı görülmektedir.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	19314 obs. of  8 variables:
 $ Country     : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
 $ Date        : Date, format: "2020-04-04" "2020-04-03" ...
 $ Month       : num  4 4 4 4 3 3 3 3 3 3 ...
 $ Cases       : num  299 281 273 237 174 170 120 110 110 94 ...
 $ Deaths      : num  7 6 6 4 4 4 4 4 4 4 ...
 $ Recovered   : num  10 10 10 5 5 2 2 2 2 2 ...
 $ ActiveCases : num  282 265 257 228 165 164 114 104 104 88 ...
 $ FatalityRate: num  23.4 21.4 22 16.9 23 23.5 33.3 36.4 36.4 42.6 ...

Veri setinde koronavirüs salgınının yaşandığı aşağıdaki listesi verilen 181 ülke ve/veya bölge bulunmaktadır.

  [1] "Afghanistan"                      "Albania"                         
  [3] "Algeria"                          "Andorra"                         
  [5] "Angola"                           "Antigua and Barbuda"             
  [7] "Argentina"                        "Armenia"                         
  [9] "Australia"                        "Austria"                         
 [11] "Azerbaijan"                       "Bahamas"                         
 [13] "Bahrain"                          "Bangladesh"                      
 [15] "Barbados"                         "Belarus"                         
 [17] "Belgium"                          "Belize"                          
 [19] "Benin"                            "Bhutan"                          
 [21] "Bolivia"                          "Bosnia and Herzegovina"          
 [23] "Botswana"                         "Brazil"                          
 [25] "Brunei"                           "Bulgaria"                        
 [27] "Burkina Faso"                     "Burma"                           
 [29] "Burundi"                          "Cabo Verde"                      
 [31] "Cambodia"                         "Cameroon"                        
 [33] "Canada"                           "Central African Republic"        
 [35] "Chad"                             "Chile"                           
 [37] "China"                            "Colombia"                        
 [39] "Congo (Brazzaville)"              "Congo (Kinshasa)"                
 [41] "Costa Rica"                       "Cote d'Ivoire"                   
 [43] "Croatia"                          "Cuba"                            
 [45] "Cyprus"                           "Czechia"                         
 [47] "Denmark"                          "Diamond Princess"                
 [49] "Djibouti"                         "Dominica"                        
 [51] "Dominican Republic"               "Ecuador"                         
 [53] "Egypt"                            "El Salvador"                     
 [55] "Equatorial Guinea"                "Eritrea"                         
 [57] "Estonia"                          "Eswatini"                        
 [59] "Ethiopia"                         "Fiji"                            
 [61] "Finland"                          "France"                          
 [63] "Gabon"                            "Gambia"                          
 [65] "Georgia"                          "Germany"                         
 [67] "Ghana"                            "Greece"                          
 [69] "Grenada"                          "Guatemala"                       
 [71] "Guinea"                           "Guinea-Bissau"                   
 [73] "Guyana"                           "Haiti"                           
 [75] "Holy See"                         "Honduras"                        
 [77] "Hungary"                          "Iceland"                         
 [79] "India"                            "Indonesia"                       
 [81] "Iran"                             "Iraq"                            
 [83] "Ireland"                          "Israel"                          
 [85] "Italy"                            "Jamaica"                         
 [87] "Japan"                            "Jordan"                          
 [89] "Kazakhstan"                       "Kenya"                           
 [91] "Korea, South"                     "Kosovo"                          
 [93] "Kuwait"                           "Kyrgyzstan"                      
 [95] "Laos"                             "Latvia"                          
 [97] "Lebanon"                          "Liberia"                         
 [99] "Libya"                            "Liechtenstein"                   
[101] "Lithuania"                        "Luxembourg"                      
[103] "Madagascar"                       "Malawi"                          
[105] "Malaysia"                         "Maldives"                        
[107] "Mali"                             "Malta"                           
[109] "Mauritania"                       "Mauritius"                       
[111] "Mexico"                           "Moldova"                         
[113] "Monaco"                           "Mongolia"                        
[115] "Montenegro"                       "Morocco"                         
[117] "Mozambique"                       "MS Zaandam"                      
[119] "Namibia"                          "Nepal"                           
[121] "Netherlands"                      "New Zealand"                     
[123] "Nicaragua"                        "Niger"                           
[125] "Nigeria"                          "North Macedonia"                 
[127] "Norway"                           "Oman"                            
[129] "Pakistan"                         "Panama"                          
[131] "Papua New Guinea"                 "Paraguay"                        
[133] "Peru"                             "Philippines"                     
[135] "Poland"                           "Portugal"                        
[137] "Qatar"                            "Romania"                         
[139] "Russia"                           "Rwanda"                          
[141] "Saint Kitts and Nevis"            "Saint Lucia"                     
[143] "Saint Vincent and the Grenadines" "San Marino"                      
[145] "Saudi Arabia"                     "Senegal"                         
[147] "Serbia"                           "Seychelles"                      
[149] "Sierra Leone"                     "Singapore"                       
[151] "Slovakia"                         "Slovenia"                        
[153] "Somalia"                          "South Africa"                    
[155] "Spain"                            "Sri Lanka"                       
[157] "Sudan"                            "Suriname"                        
[159] "Sweden"                           "Switzerland"                     
[161] "Syria"                            "Taiwan*"                         
[163] "Tanzania"                         "Thailand"                        
[165] "Timor-Leste"                      "Togo"                            
[167] "Trinidad and Tobago"              "Tunisia"                         
[169] "Turkey"                           "Uganda"                          
[171] "Ukraine"                          "United Arab Emirates"            
[173] "United Kingdom"                   "Uruguay"                         
[175] "US"                               "Uzbekistan"                      
[177] "Venezuela"                        "Vietnam"                         
[179] "West Bank and Gaza"               "Zambia"                          
[181] "Zimbabwe"           

Dünya / World

Dünyada görülen koronavirüs vakalarının tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Veri setindeki vaka sayıları kümülatif olarak ilerlemektedir. Tabloda koronavirüs vakalarına ilişkin öne çıkan bulgular şöyledir:

  1. Günlük ortalama vaka sayısı yaklaşık 6055’ten yaklaşık 6616’ya, ortalama ölüm vaka sayısı ise yaklaşık 325’ten yaklaşık 357’ye yükselmiştir.
  2. Günlük ortalama iyileşen vaka sayısı 1236’dan yaklaşık 1346’ya, ortalama aktif vaka sayısı ise yaklaşık 5730’dan 6259’a yükselmiştir.
  3. Günlük ortalama fatalite hızı binde yaklaşık 37’dir. Bu bulgu koronavirüs hastalığına yakalanan her 1000 kişiden yaklaşık 37’sinin hayatını kaybettiğini göstermektedir.

Dünyadaki Koronavirüs Vakalarının Tanımlayıcı İstatistikleri / Descriptive Statistics of Coronavirus Cases in the World

Kümülatif Vaka Sayıları Baz Alınarak Dünya’daki Fatalite (Ölüm) Hızlarının Zamana Göre Dağılımı / Distribution of Fatality Rates by Time Based on Cumulative Cases in the World

Kümülatif vaka sayılarına göre en yüksek 10 ülke aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

En Yüksek Kümülatif Vaka Sayısına Sahip 10 Ülke / Top 10 Countries with the Highest Number of Cumulative Cases

En Yüksek Kümülatif Ölüm Vaka Sayısına Sahip 10 Ülke / Fatality Rates of Top 10 Countries with the Highest Cumulative Death Figures

Kümülatif Vaka Sayılarına Göre Dünyadaki Son 10 Günlük Fatalite (Ölüm) Hızları / Last 10-Day Fatality Rates Based by Cumulative Cases in the World

Sonuç / Conclusion

Özetle, İnsani Veri Alışverişi (HDX) platformundan alınan 3 farklı koronavirüs hastalık veri setinin birleştirilmesinden sonra epidemiyolojik hızlarla birlikte keşifsel veri analizi yapılarak koronavirüs pandemisinin trendi hakkında farkındalık oluşturulması amaçlanmıştır.

Bu arada son 10 gündür üzerinde yoğun bir şekilde çalıştığım salgının dalga boyunun hesaplanmasına yönelik geliştirdiğim modelleri Avrupa Hastalık Önleme ve Kontrol Merkezi ile paylaştıktan sonra faydalı olması adına burada da paylaşılacaktır.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Sağlıkla ve bilimle kalınız.

Saygılarımla.

Note: It can not be cited or copied without referencing.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Yararlanılan Kaynaklar / Resources Utilized

4 Nisan 2020 Tarihi İtibariyle Koronavirüs Pandemisi Üzerine Vaka Çalışmaları: Türkiye ve Diğer Ülke Örnekleri (Case Studies on Coronavirus Pandemic: Cases of Turkey and Other Countries As of April 4, 2020)

Giriş / Introduction

Coronavirüsler (CoV), soğuk algınlığından Orta Doğu Solunum Sendromu (MERS-CoV) ve Şiddetli Akut Solunum Sendromu (SARS-CoV) gibi daha ciddi hastalıklara kadar pek çok hastalığa neden olan büyük bir virüs ailesidir. Bu yeni virüse, yüzey çıkıntıları taç görünümünde olduğu için coronavirus adı verilmiş olup, bu virüs ailesi tek zincirli, pozitif polariteli, zarflı RNA virüsleridir.

Koronavirüs hastalığı (COVID-19), 2019 yılında keşfedilen ve daha önce insanlarda tanımlanmamış yeni bir suştur. Suş, bir bakteri veya virüsün farklı alt türlerinin, aralarında genetik farklılıklar bulunan grupları olarak adlandırılır.

Bu Koronavirüsler zoonotiktir, yani hayvanlar ve insanlar arasında bulaşırlar. Ayrıntılı araştırmalar SARS-CoV’nin misk kedilerinden insanlara ve MERS-CoV’un tek hörgüçlü develerden insanlara bulaştığını göstermiştir. Bilinen birkaç koronavirüs henüz insanları enfekte etmeyen hayvanlarla taşınmaktadır.

Enfeksiyon belirtileri arasında solunum semptomları, ateş, öksürük, nefes darlığı ve solunum güçlüğü bulunur. Daha ciddi vakalarda, enfeksiyon pnömoniye, ciddi akut solunum sendromuna, böbrek yetmezliğine ve hatta ölüme neden olabilir. Solunum sistemi hastalıklarından biri olan pnömoni ya da halk arasında zatürre bakteriler başta olmak üzere mikroorganizmalara bağlı olarak ortaya çıkan akciğer dokusunun iltihaplanmasıdır. Grip gibi bu hastalık da bağışıklık (immun) sistemini baskılayan hastalıklardan biridir. Özellikle ileri yaşlardaki bireylerde hem bağışıklık sisteminin yaşla birlikte yavaşlaması hem de yaşa ve/veya diğer nedenlere bağlı olarak kronik ve diğer hastalıkların görülmesi bu yaşlardaki bireylerde ölüm oranlarını artırabilmektedir. Diğer bir deyişle, bu enfeksiyon komplikasyon yaratarak ve mevcut diğer hastalıkları tetikleyerek bu yaş gruplarında diğer yaş gruplarına göre daha öldürücü olabilir.

Enfeksiyonun yayılmasını önlemek için standart öneriler arasında düzenli el yıkama, öksürme ve hapşırma sırasında ağız ve burnun kapatılması, et ve yumurtaların iyice pişirilmesi yer alır. Öksürme ve hapşırma gibi solunum yolu rahatsızlığı belirtileri gösteren kişilerle yakın temastan kaçınmak bu hastalıktan korunmak için atılacak önemli koruyucu tedbirlerden biridir.

Hastalıktan nasıl korunulacağı hakkında bilgi verdikten sonra bu hastalığın teşhisinde kullanılan ve adı son zamanlarda sık sık duyulan PCR testi hakkında bilgi vermek faydalı olacaktır. PCR, ingilizce adıyla “Polymerase Chain Reaction” kelimelerinin bir araya gelmesinden oluşan ve moleküler biyoloji alanında kullanılan bir tekniktir.Türkçe ise ise polimeraz zincir reaksiyonu olarak adlandırılır. Bazen PCR moleküler fotokopi (molecular photocopying) olarak da adlandırılabilmektedir. DNA’nın küçük bölümlerini kopyalamak için kullanılan hızlı ve ucuz bir tekniktir. Moleküler ve genetik analizler için büyük miktarlarda DNA örneği gerekli olduğundan, izole edilmiş DNA parçaları üzerinde çalışmalar PCR amplifikasyonu olmadan neredeyse imkansızdır. PCR’ın kullanım alanları şöyle özetlenebilir:

  1. Amplifiye edildikten sonra PCR ile üretilen DNA, birçok farklı laboratuvar prosedüründe kullanılabilir. Örneğin, İnsan Genom Projesindeki (HGP) çoğu haritalama tekniği PCR’a dayanmaktadır.
  2. Parmak izi, bakteri veya virüslerin (özellikle AIDS) tespiti ve genetik bozuklukların teşhisi gibi bir dizi laboratuvar ve klinik teknikte de değerlidir.

PCR ( Polimeraz Zincir Reaksiyonu) tekniğinin çalışma şeması ise aşağıdaki şekilde verilmiştir.

polymerase chain reaction diagram
Kaynak: The National Human Genome Research Institute (NHGRI)

PCR tekniğini kullanarak koronavirüs teşhisinin nasıl konulduğuna ilişkin bir video aşağıda verilerek teşhis süreci hakkında bilgi verilmesi amaçlanmıştır.

Kaynak:
AMBOSS: Medical Knowledge Distilled

Bilindiği üzere koronavirüs hastalığının teşhis ve özellikle tedavisine yönelik olarak ilaç ve aşı geliştirme alanında Dünya’da ve ülkemizde yoğun bir mesai harcanmaktadır. Bunlardan biri ülkemizde 02.04.2020 tarihinde Sanayi ve Teknoloji Bakanlığı ve TÜBİTAK bünyesinde “Covid-19 Türkiye Platformu Aşı ve İlaç Geliştirme” bilim insanların katıldığı sanal bir konferans gerçekleştirilmiştir. Türkiye dışında da benzer çalışmalar sanal ortamda çalıştay ve konferans olarak yapılmaktadır. Dünyada yapılan ve benim de katılım sağladığım önde giden bu çalışmalardan biri de Avrupa Öğrenme ve Akıllı Sistemler Laboratuvarı ingilizce adıyla European Laboratory for Learning and Intelligent Systems (ELLIS)’ın 02.04.2020 tarihinde düzenlediği “ELLIS Against Covid-19” adlı çalıştaydır. Dünyanın farklı üniversitelerinden bilim insanlarının katılım sağladığı çalıştayda koranavirüs pandemisinin teşhisinde kullanılan yapay zeka teknolojilerinden koronavirüsün tedavisinde kullanılan ilaçların geliştirilmesinde kullanılan yapay zeka teknolojilerine kadar pek çok konu ele alınmıştır. Çalıştayda ağırlıklı olarak ele alınan konu yapay zekanın teşhis ve tedavide nasıl kullanıldığı ve kullanılacağı idi. Çalıştayda koronavirüs ile mücadele çok güzel uygulama örneklerine yer verilmiştir. Daha önce de dile getirdiğim gibi yapay zeka günümüzün ve geleceğin en kritik teknolojisidir. Bu gerek 4. Sanayi Devrimi gerekse Toplum 5.0 açısından olsun böyledir ve farklı ülkeler yapay zekayı teşhis ve tedavi (robotik cerrahi ve ilaç geliştirme) alanlarında kullanmak için çok ciddi adımlar atmıştır. Bu yapıların da ülkemizde kurulması ve yapay zeka enstitülerinin ülkemizde yaygınlaştırılması gerekmektedir. Aynı zamanda Türkiye Büyük Millet Meclisi bünyesinde Yapay Zeka Komisyonu kurulmalıdır. Yapay zeka özünde öğrenen sistemler olduğu ve sürekli gelişim gösterdiği için sektör ayrımı olmaksızın her alanda kendine uygulama alanı bulan bir teknolojidir.

Koronavirüs salgını Çin ile birlikte diğer ülkelere de yayıldığı için Dünya Sağlık Örgütü tarafından 30/01/2020 tarihinde uluslararası halk sağlığı açısından acil durum ilan edilmiştir. Bu hastalıktan bahsedilirken lise ve üniversite yıllarımda benim de ders olarak aldığım Epidemiyoloji biliminden bahsetmemek olmaz. Epidemiyoloji, toplumda sağlıkla ilgili durumların veya olayların (hastalık dahil) dağılımını, görülme sıklıklarını ve bunları etkileyen faktörleri inceleyen bir tıp bilimi dalıdır.

Epidemiyolojik araştırmalar yapmak için çeşitli yöntemler kullanılabilir. Bu yöntemler dağılımı incelemek için sürveyans, tanımlayıcı çalışmalar ve hastalık belirleyicilerini incelemek için analitik çalışmalar olabilir. Bilindiği üzere Koronavirüs hastalığı artık pandemik bir vaka olarak adlandırılmaktadır. Epidemiyolojinin konu alanına giren pandemi dünyada birden fazla ülkede veya kıtada, çok geniş bir alanda
yayılan ve etkisini gösteren salgın hastalıklara verilen genel isim
olarak ifade edilmektedir. Diğer bir deyişle, salgın (epidemi) durumundaki bir hastalığın ülke sınırlarını aşarak diğer ülkelere yayılım göstermesidir.

Avrupa Birliği kurumlarından biri olan “Avrupa Hastalık Önleme ve Kontrol Merkezi (European Centre for Disease Prevention and Control)”‘ne göre ön bulgular koronavirüs hastalığından vakalara dayalı ölüm oranı (fatalite hızı)’nın binde 20-30 olduğunu göstermektedir. Bu, 2003 SARS salgınından önemli ölçüde daha az. Bununla birlikte, mevsimsel gripin neden ölüm oranlarından çok daha yüksektir.

Çalışma kapsamında koronavirüs pandemi vakalarının epidemiyolojik hızlarla birlikte keşifsel veri analizi (EDA) yapılarak vakaların izlediği seyrin ortaya konulması amaçlanmıştır

Metodoloji / Methodology

Çalışmanın amacı, koronavirüs vakalarının epidemiyolojik düzlemde Türkiye’de ve diğer ülkelerde izlediği seyri detaylı bir şekilde keşifsel veri analiziyle ortaya konulara karar vericilere katkı sunmaktır.

Koronavirüs vakalarının analizinde Türkiye veri setinin oluşturulmasında Türkiye İstatistik Kurumu (TÜİK)’ndan ve Dünya Sağlık Örgütü (DSÖ) raporlarından ve Sağlık Bakanlığı basın açıklamalarından yararlanılmıştır. Bunun nedeni Türkiye veri setine daha derinlemesine bakılmak istenmesidir.

Çalışma kapsamında diğer ülkelere ilişkin koronavirüs vakaları ise Johns Hopkins Üniversitesi Sistem Bilimi ve Mühendisliği Merkezi (JHU CCSE) tarafından desteklenen “The Humanitarian Data Exchange (HDX) (İnsani Veri Alışverişi)” adlı platforma ait https://data.humdata.org web sitesinden alınmıştır. Önceki çalışmalardan faklı olarak bu platformdan veri alınmasının nedeni veri setleri içerisinde onaylanmış ve ölüm vakaları dışında iyileşen koronavirüs vakalarına da yer verilmiş olmasıdır.

Analizlerde Türkiye verisi için Microsoft Excel 2016 ve diğer ülke verileri için R programlama dili kullanılmıştır.

Keşifsel veri analizine geçilmeden önce vaka sayılarından yararlanarak epidemiyolojik hızlar hesaplanmıştır. Bu nedenle, çalışmada kullanılacak hızları açıklamanın faydalı olacağı düşünülmektedir.

Epidemiyoloji biliminde hız kavramı, bir sağlık olayının nüfus içindeki görülme frekansını hesaplamada kullanılan bir ölçüttür. Hızlar, belirli bir zaman diliminde meydana gelen olayların sayısının olayın meydana geldiği nüfusa bölünerek hesaplanır. Eşitliğin payı, sağlık olayı ile karşılaşanların sayısını (X), payda ise risk altındaki nüfusu (X+Y) göstermektedir. Risk altındaki nüfus hastalığa veya sağlık olaylarına karşı duyarlı olan nüfusu ifade etmektedir. Formülize edilirse;

Hız (Rate) = (X / X +Y) * k

Burada, k katsayıyı göstermektedir.

Analizde hızlardan girdi değişkeni olarak kullanılması düşünülen ilk gösterge ölüm veya mortalite ölçütlerinden biri olan Kaba Ölüm Hızı‘dır. Bu hız nüfusun sağlık düzeyini ortaya koymada duyarlı olmasa da bir fikir vermesi açısından önemlidir. Kaba ölüm hızı aşağıdaki eşitlikte gösterilmiştir.

Kaba Ölüm Hızı (Crude Death Rate) = (Bir toplumda belirli bir süre içinde meydana gelen ölüm sayısı / Aynı toplumun aynı süredeki
(yıl ortası) nüfusu) * 1000

Crude death rate = (Total number of deaths during a given time interval / Mid-interval population) * 1000

Girdi değişkeni olarak kullanılması düşünülen ikinci gösterge ölüm veya fatalite ölçütlerinden biri olan Fatalize Hızı‘dır. Bu gösterge kaba ölüm hızına göre daha duyarlı bir göstergedir. Diğer bir ifadeyle, hastalığa yakalananların ne kadarının öldüğünü gösterir. Fatalite hızı aşağıdaki eşitlik yardımıyla hesaplanmaktadır;

Fatalite Hızı (Fatality Rate) = (Nüfusta belirli bir süre içinde “X” hastalığından ölenlerin sayısı / Aynı nüfusun aynı süre içinde “X” hastalığına yakalananların sayısı) * 100

Fatality Rate = (Number of cause-specific deaths among the incident cases / Total number of incident cases) * 100

Morbitide veya hastalık hızları gelişmekte olan hastalığın ortaya çıkma hızını ortaya koymak için kullanılır. Bunlardan biri olan insidans,
bir hastalığın gelişme (yeni vakalar) olasılığını ortaya koymak için kullanılır. Diğer taraftan, bu hızlardan prevelans ise hastalığın görülme sıklığını (tüm vakalar) gösteren bir hızdır. İnsidans ve prevelans da analizde girdi değişkenleri olarak kullanılması düşünülmektedir. İnsidans aşağıdaki eşitlik yardımıyla hesaplanmaktadır.

İnsidans (Incidence) = (Bir nüfusta belirli bir sürede saptanan YENİ vaka sayısı / Aynı toplumun yıl ortası nüfusu) * k

Incidence = (Number of new cases of disease during specified time interval / Population at start of time interval) * k

İnsidans hızının kümülatif şekli ise atak hızlarını göstermektedir.

Prevelans ise aşağıdaki eşitlik yardımıyla hesaplanmaktadır.

Prevelans (Prevalence) = (Belirli bir sürede toplam (eski+yeni) vaka sayısı / Risk altındaki kişi sayısı) * k

Prevalence = (Number of cases of disease during specified time interval / Population at start of time interval) * k

Keşifsel Veri Analizi Bulguları / Exploratory Data Analysis Findings

Türkiye Örneği / The Case of Turkey

Bu kısımda bahsedilen epidemiyolojik hızların uygulama sonuçlarına yer verilmiştir. İlk olarak günlük onaylanmış vaka sayıları ile ölüm vaka sayıları Tablo 1’de verilmiştir. Tabloda test sayılarının olduğu sütunda kırmızı renkteki sayılar kesin olarak bilinmediğinden ortalama olarak verilmiştir. Tablo 1’e göre öne çıkan bulgular şöyledir:

  • 04.04.2020 tarihinde toplam vaka sayısı 23934’e yülselmiştir. Aynı günde gerçekleşen yeni vaka sayısı ise 3013 olup bir önceki güne göre % 8,1 artmıştır. Yeni vaka sayısının 2786 olduğu 03.04.2020 tarihi Türkiye’de salgının başladığı günden bugüne kadar vaka sayısının en yüksek olduğu tarihtir.
  • Kümülatif vaka sayısından kümülatif ölen kişi sayısı çıkarılmasından sonra kalan toplam aktif vaka sayısı 23433’tür.
  • Salgında ölen toplam kişi sayısı 501 olup, en yüksek ölüm vakalarının yaşandığı gün 79 kişi ile 02.04.2020 tarihidir.

Tablo 1. Koronavirüs Vaka Sayıları / Number of Coronavirus Cases, Turkey

Epidemiyolojik hızları gösteren bulgular ise Tablo 2’de sunulmuştur. Tablo 2’ye göre öne çıkan bulgular şöyledir:

  • Sağlık düzeyini belirlemede duyarlı bir gösterge olmasa da fikir vermesi açısından kaba ölüm hızı hesaplanmıştır. Buna göre kaba ölüm hızı en yüksek seviyesine ulaştığı 02.4.2020 tarihinde milyonda 0,95’dır. Katsayı bin yerine milyon alınmasının nedeni ortaya konulan bulgunun çok küçük değer almasından kaynaklanmaktadır. Toplam ölüm vaka sayına göre kaba ölüm hızı ise milyonda 5,11’ten 6,02’ye yükselmiştir.
  • Fatalite hızının en yüksek olduğu tarih binde 43 ile 21.3.2020 tarihidir. Toplam vaka sayılarına göre fatalite hızı ise binde yaklaşık 21’dir. Bu bulgu şu anlama gelmektedir; bugüne kadar koronavirüs hastalığına yakalanan her 1000 kişiden yaklaşık 21’i hayatını kaybetmiştir.
  • Yapılan test sayıları ve vaka sayıları dikkate alınarak koronavirüs salgının insidansı ve prevelansı da hesaplanmıştır. Yapılan toplam test sayısı 161330’dur. Belirli bir zaman diliminde bir hastalığın bir nüfus grubunda görülme sıklığını ortaya koyan prevelans hızı yaklaşık % 15 olup bir önceki güne göre artış göstermemiştir. Buradan salgın meydana geldiği süre içerisinde test uygulanan her 100 vakadan 15’inde koronavirüs vakası tespit edildiği anlamı çıkmaktadır.
  • Belirli bir zaman diliminde bir hastalığın gelişme (yeni vakalar) olasılığını ortaya koyan insidans hızı % 17,3’ten % 15,3’e düşmüştür. Bu bulgudan koronavirüs testi (PCR) yapılan her 100 yeni vakadan yaklaşık 15’inde koronavirüs tespit edildiği anlaşılmaktadır. İnsidans hızı ne kadar çok düşerse salgının yeni vakalar ortaya çıkarma olasılığı o kadar düşer. Bu hız bu açıdan ayrı bir öneme sahiptir.

Tablo 2. Koronavirüs Vakalarının Epidemiyolojik Hızları / Epidemiological Rates of Coronavirus Cases, Turkey

Türkiye’deki Fatalite (Ölüm) Hızlarının Zamana Göre Dağılımı / Distribution of Fatality Rates in Turkey by Time

Koronavirüs vaka sayıları baz alınarak Türkiye ve İtalya’nın karşılaştırıldığı görülmektedir. Bu oldukça eksik bir bakış açısıdır. Zira vaka sayıları ve hatta ölüm sayıları bile tek başına değerlendirilmesi eksik ve hatalı yorumlara ve sonuçlara neden olabilir. Bu göstergelerden daha da önemli olan epidemiyolojik hızlardan ve aynı zamanda ölüm ölçütlerinden biri olan fatalite hızının dikkate alınmasının değerlendirme açısından daha sağlıklı olacağı düşünülmektedir. Aşağıdaki grafikte İtalya ve Türkiye fatalite hızları karşılaştırmalı olarak sunulmuştur. Aşağıdaki grafikte fatalite hızları açısından bakılırsa fatalite hızlarının görüldüğü y ekseninde İtalya’nın çok farklı bir seyir izlediği görülmektedir. Ancak en kötü senaryo olarak düşünülürse atılacak adımlar açısından faydalı olacağı düşünülmektedir. Grafikte X eksenine paralel olarak kesikli doğrular ortalama fatalite hızlarını göstermektedir. İtalya Türkiye’ye göre çok daha yüksek fatalite hızlarına sahip olmasının yanısıra aynı zamanda fatalite hızları ortalamasına yakın bir seyir izlemiştir.

Türkiye ve İtalya’daki Fatalite (Ölüm) Hızlarının Zamana Göre Dağılımı / Distribution of Fatality Rates in Turkey and Italy by Time

Ayrıca Türkiye, Avrupa Hastalık Önleme ve Kontrol Merkezi‘nden alınan koronavirüs ölüm vakaları açısından İtalya’nın yanısıra Fransa, İspanya ve İran ile de ilk 14 günlük seyir karşılaştırılmıştır. Aşağıdaki tabloda toplam ölüm vaka sayıları açısından Türkiye’nin İran ile benzerlik gösterdiği görülmektedir.

Türkiye, İtalya, Fransa, İspanya ve İran’ın Ölüm Vakalarının İlk 14 Günlük Seyri / First 14-Day Dealth Figures, Cases of Turkey, Italy, France, Spain and Iran

Yukarıdaki tabloda ilk 14 günlük zaman diliminde Türkiye’de koronavirüs ölüm vakaları açısından İspanya ve Fransa’ya göre daha yüksek olsa da aşağıdaki tabloda fatalite hızları açısından bu ülkelerin Türkiye’den daha yüksek olduğu olduğu görülmektedir. Diğer taraftan genel olarak Türkiye’nin fatalite hızları açısından ABD’ye benzer ancak ondan daha yüksek fatalite hızlarının olduğu görülmektedir. Tabloda İtalya’nın fatalite hızları açısından açık ara önde olduğu görülmektedir. Bu bulgu aynı zamanda koronavirüs hastalığına yakalananlar içerisinde ölenlerin İtalya’da daha yüksek olduğunu ortaya koymaktadır.

Ülkelere Göre Fatalite Hızlarının Karşılaştırılması / The Comparison of Fatality Rates by Countries

Dünya ve Diğer Ülke Örnekleri / Cases of World and Other Countries

İlk olarak adım adım uygulamaya geçilerek İnsani Veri Alışverişi (HDX) web sitesinden csv (Comma-seperated value) uzantılı olarak okutulan onaylanmış, ölen ve iyileşen koronavirüs vaka sayılarını içeren 3 farklı veri seti birleştirilerek tanıtılmıştır.

Çalışmanın bu kısmında epidemiyolojik hızlarla birlikte keşifsel veri analizi yapılarak Dünyada koronavirüs vakalarıyla ilgili olarak öne çıkan ülkeler verilmiştir.

Aşağıda yazdığım R kod bloğu ile birlikte “İnsani Veri Alışverişi (HDX)veri tabanından güncel veri akışı sağlanabilecektir. Aşağıdaki kod bloğunda görüleceği üzere mevcut veri setlerinde olmayan 2 adet değişken hesaplanmıştır. Daha sonra bu değişkenler kod bloğu ile veri akışı sağlanmasından sonra birleştirilerek oluşturulan yeni veri setine ilave edilmiştir. İlave edilen değişkenler şöyledir:

  1. Aktif Vakalar (ActiveCases) : Onaylanmış vaka sayısından ölen ve iyileşen vakalar çıkarılması ile hesaplanmıştır.
  2. Fatali Fızı (FataliteRate): Onaylanmış vaka sayılarının ölüm vaka sayılarına bölünmesiyle hesaplanmıştır. Çarpım katsayısı (k) ise 1000’dir.
url1="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_confirmed_global_narrow.csv?dest=data_edit&filter01=explode&explode-header-att01=date&explode-value-att01=value&filter02=rename&rename-oldtag02=%23affected%2Bdate&rename-newtag02=%23date&rename-header02=Date&filter03=rename&rename-oldtag03=%23affected%2Bvalue&rename-newtag03=%23affected%2Binfected%2Bvalue%2Bnum&rename-header03=Value&filter04=clean&clean-date-tags04=%23date&filter05=sort&sort-tags05=%23date&sort-reverse05=on&filter06=sort&sort-tags06=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_confirmed_global.csv"

url2="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_deaths_global_narrow.csv?dest=data_edit&filter01=explode&explode-header-att01=date&explode-value-att01=value&filter02=rename&rename-oldtag02=%23affected%2Bdate&rename-newtag02=%23date&rename-header02=Date&filter03=rename&rename-oldtag03=%23affected%2Bvalue&rename-newtag03=%23affected%2Binfected%2Bvalue%2Bnum&rename-header03=Value&filter04=clean&clean-date-tags04=%23date&filter05=sort&sort-tags05=%23date&sort-reverse05=on&filter06=sort&sort-tags06=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_deaths_global.csv"

url3="https://data.humdata.org/hxlproxy/data/download/time_series_covid19_recovered_global_narrow.csv?dest=data_edit&filter01=explode&explode-header-att01=date&explode-value-att01=value&filter02=rename&rename-oldtag02=%23affected%2Bdate&rename-newtag02=%23date&rename-header02=Date&filter03=rename&rename-oldtag03=%23affected%2Bvalue&rename-newtag03=%23affected%2Binfected%2Bvalue%2Bnum&rename-header03=Value&filter04=clean&clean-date-tags04=%23date&filter05=sort&sort-tags05=%23date&sort-reverse05=on&filter06=sort&sort-tags06=%23country%2Bname%2C%23adm1%2Bname&tagger-match-all=on&tagger-default-tag=%23affected%2Blabel&tagger-01-header=province%2Fstate&tagger-01-tag=%23adm1%2Bname&tagger-02-header=country%2Fregion&tagger-02-tag=%23country%2Bname&tagger-03-header=lat&tagger-03-tag=%23geo%2Blat&tagger-04-header=long&tagger-04-tag=%23geo%2Blon&header-row=1&url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_covid19_recovered_global.csv"

case<-read_csv(url1)[-1,-1]
case<-case %>% rename(Country="Country/Region", Cases= "Value")

case

death<-read_csv(url2)[-1,-1]

d<-death %>% rename(Country="Country/Region", Deaths= "Value")

recovered<-read_csv(url3)[-1,-1]

r<-recovered%>% rename(Country="Country/Region", Recovered= "Value")

df<-left_join(case, d, by = c("Country","Lat", "Long","Date"))
df<-left_join(df, r, by = c("Country","Lat", "Long","Date"))
df<-tibble(Country=df$Country, Date=as.Date(df$Date), Month=month(as.Date(df$Date)), Lat=as.numeric(df$Lat), Long=as.numeric(df$Long),Cases=as.integer(df$Cases), Deaths=as.integer(df$Deaths), Recovered= as.integer(df$Recovered), ActiveCases=as.integer(as.numeric(df$Cases)-as.numeric(df$Deaths)-as.numeric(df$Recovered)), FatalityRate=round(as.numeric((as.integer(df$Deaths)/as.integer(df$Cases))*1000),1))
df

Veri setindeki değişken sayısı 8, gözlem sayısı ise 18980’dir. Aşağıda mevcut değişkenler, değişkenlerin veri tipi ile birlikte gözlem sayısı görülmektedir.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	18980 obs. of  8 variables:
 $ Country     : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
 $ Date        : Date, format: "2020-04-03" "2020-04-02" ...
 $ Month       : num  4 4 4 3 3 3 3 3 3 3 ...
 $ Cases       : num  281 273 237 174 170 120 110 110 94 84 ...
 $ Deaths      : num  6 6 4 4 4 4 4 4 4 2 ...
 $ Recovered   : num  10 10 5 5 2 2 2 2 2 2 ...
 $ ActiveCases : num  265 257 228 165 164 114 104 104 88 80 ...
 $ FatalityRate: num  21.4 22 16.9 23 23.5 33.3 36.4 36.4 42.6 23.8 ...

Veri setinde koronavirüs salgınının yaşandığı aşağıdaki listesi verilen 181 ülke ve/veya bölge bulunmaktadır.

  [1] "Afghanistan"                      "Albania"                         
  [3] "Algeria"                          "Andorra"                         
  [5] "Angola"                           "Antigua and Barbuda"             
  [7] "Argentina"                        "Armenia"                         
  [9] "Australia"                        "Austria"                         
 [11] "Azerbaijan"                       "Bahamas"                         
 [13] "Bahrain"                          "Bangladesh"                      
 [15] "Barbados"                         "Belarus"                         
 [17] "Belgium"                          "Belize"                          
 [19] "Benin"                            "Bhutan"                          
 [21] "Bolivia"                          "Bosnia and Herzegovina"          
 [23] "Botswana"                         "Brazil"                          
 [25] "Brunei"                           "Bulgaria"                        
 [27] "Burkina Faso"                     "Burma"                           
 [29] "Burundi"                          "Cabo Verde"                      
 [31] "Cambodia"                         "Cameroon"                        
 [33] "Canada"                           "Central African Republic"        
 [35] "Chad"                             "Chile"                           
 [37] "China"                            "Colombia"                        
 [39] "Congo (Brazzaville)"              "Congo (Kinshasa)"                
 [41] "Costa Rica"                       "Cote d'Ivoire"                   
 [43] "Croatia"                          "Cuba"                            
 [45] "Cyprus"                           "Czechia"                         
 [47] "Denmark"                          "Diamond Princess"                
 [49] "Djibouti"                         "Dominica"                        
 [51] "Dominican Republic"               "Ecuador"                         
 [53] "Egypt"                            "El Salvador"                     
 [55] "Equatorial Guinea"                "Eritrea"                         
 [57] "Estonia"                          "Eswatini"                        
 [59] "Ethiopia"                         "Fiji"                            
 [61] "Finland"                          "France"                          
 [63] "Gabon"                            "Gambia"                          
 [65] "Georgia"                          "Germany"                         
 [67] "Ghana"                            "Greece"                          
 [69] "Grenada"                          "Guatemala"                       
 [71] "Guinea"                           "Guinea-Bissau"                   
 [73] "Guyana"                           "Haiti"                           
 [75] "Holy See"                         "Honduras"                        
 [77] "Hungary"                          "Iceland"                         
 [79] "India"                            "Indonesia"                       
 [81] "Iran"                             "Iraq"                            
 [83] "Ireland"                          "Israel"                          
 [85] "Italy"                            "Jamaica"                         
 [87] "Japan"                            "Jordan"                          
 [89] "Kazakhstan"                       "Kenya"                           
 [91] "Korea, South"                     "Kosovo"                          
 [93] "Kuwait"                           "Kyrgyzstan"                      
 [95] "Laos"                             "Latvia"                          
 [97] "Lebanon"                          "Liberia"                         
 [99] "Libya"                            "Liechtenstein"                   
[101] "Lithuania"                        "Luxembourg"                      
[103] "Madagascar"                       "Malawi"                          
[105] "Malaysia"                         "Maldives"                        
[107] "Mali"                             "Malta"                           
[109] "Mauritania"                       "Mauritius"                       
[111] "Mexico"                           "Moldova"                         
[113] "Monaco"                           "Mongolia"                        
[115] "Montenegro"                       "Morocco"                         
[117] "Mozambique"                       "MS Zaandam"                      
[119] "Namibia"                          "Nepal"                           
[121] "Netherlands"                      "New Zealand"                     
[123] "Nicaragua"                        "Niger"                           
[125] "Nigeria"                          "North Macedonia"                 
[127] "Norway"                           "Oman"                            
[129] "Pakistan"                         "Panama"                          
[131] "Papua New Guinea"                 "Paraguay"                        
[133] "Peru"                             "Philippines"                     
[135] "Poland"                           "Portugal"                        
[137] "Qatar"                            "Romania"                         
[139] "Russia"                           "Rwanda"                          
[141] "Saint Kitts and Nevis"            "Saint Lucia"                     
[143] "Saint Vincent and the Grenadines" "San Marino"                      
[145] "Saudi Arabia"                     "Senegal"                         
[147] "Serbia"                           "Seychelles"                      
[149] "Sierra Leone"                     "Singapore"                       
[151] "Slovakia"                         "Slovenia"                        
[153] "Somalia"                          "South Africa"                    
[155] "Spain"                            "Sri Lanka"                       
[157] "Sudan"                            "Suriname"                        
[159] "Sweden"                           "Switzerland"                     
[161] "Syria"                            "Taiwan*"                         
[163] "Tanzania"                         "Thailand"                        
[165] "Timor-Leste"                      "Togo"                            
[167] "Trinidad and Tobago"              "Tunisia"                         
[169] "Turkey"                           "Uganda"                          
[171] "Ukraine"                          "United Arab Emirates"            
[173] "United Kingdom"                   "Uruguay"                         
[175] "US"                               "Uzbekistan"                      
[177] "Venezuela"                        "Vietnam"                         
[179] "West Bank and Gaza"               "Zambia"                          
[181] "Zimbabwe"           

Dünya / World

Dünyada görülen koronavirüs vakalarının tanımlayıcı istatistikleri aşağıdaki tabloda verilmiştir. Veri setindeki vaka sayıları kümülatif olarak ilerlemektedir. Tabloda koronavirüs vakalarına ilişkin öne çıkan bulgular şöyledir:

  1. Günlük ortalama vaka sayısı yaklaşık 5598’ten yaklaşık 6055’e, ortalama ölüm vaka sayısı ise yaklaşık 293’ten yaklaşık 325’e yükselmiştir.
  2. Günlük ortalama iyileşen vaka sayısı 1152’ten yaklaşık 1236’ya, ortalama aktif vaka sayısı ise yaklaşık 5305’ten 5730’a yükselmiştir.
  3. Günlük ortalama fatalite hızı binde yaklaşık 35’tir. Bu bulgu koronavirüs hastalığına yakalanan her 1000 kişiden yaklaşık 35’inin hayatını kaybettiğini göstermektedir.

Dünyadaki Koronavirüs Vakalarının Tanımlayıcı İstatistikleri / Descriptive Statistics of Coronavirus Cases in the World

Kümülatif Vaka Sayıları Baz Alınarak Dünya’daki Fatalite (Ölüm) Hızlarının Zamana Göre Dağılımı / Distribution of Fatality Rates by Time Based on Cumulative Cases in the World

Kümülatif vaka sayılarına göre en yüksek 10 ülke aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

En Yüksek Kümülatif Vaka Sayısına Sahip 10 Ülke / Top 10 Countries with the Highest Number of Cumulative Cases

En Yüksek Kümülatif Ölüm Vaka Sayısına Sahip 10 Ülke / Fatality Rates of Top 10 Countries with the Highest Cumulative Death Figures

Kümülatif Vaka Sayılarına Göre Dünyadaki Son 10 Günlük Fatalite (Ölüm) Hızları / Last 10-Day Fatality Rates Based by Cumulative Cases in the World

Sonuç / Conclusion

Özetle, İnsani Veri Alışverişi (HDX) platformundan alınan 3 farklı koronavirüs hastalık veri setinin birleştirilmesinden sonra epidemiyolojik hızlarla birlikte keşifsel veri analizi yapılarak koronavirüs pandemisinin trendi hakkında farkındalık oluşturulması amaçlanmıştır.

Bu arada son 10 gündür üzerinde yoğun bir şekilde çalıştığım salgının dalga boyunun hesaplanmasına yönelik geliştirdiğim modelleri Avrupa Hastalık Önleme ve Kontrol Merkezi ile paylaştıktan sonra faydalı olması adına burada da paylaşılacaktır.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Sağlıkla ve bilimle kalınız.

Saygılarımla.

Note: It can not be cited or copied without referencing.

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Yararlanılan Kaynaklar / Resources Utilized