Ö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

Veri Madenciliği (Data Mining): Metin Verisinin Keşifsel Veri Analizi Üzerine Bir Vaka Çalışması (Text Mining)

Veriden desen çıkarma işlemi anlamına gelen veri madenciliği bütün alanlarda kendine uygulama alanı bulan ve büyük veri (big data)’den farklı olan bir kavramdır. Bu kavram aynı zamanda veriyi keşfetmek olarak da tanımlanabilir. Veri madenciliği, veriden desen veya örüntü çıkarırken yapay zekayı , istatistiksel metotları ve diğer pek çok metodu kullanır. Büyük veride ise genel olarak yüksek hacim (volume), akışkanlık (velocity), çeşitlilik (variety), belirsizlik (veracity) söz konusudur. Bahsedilen bu özelliklerin aynı anda sağlanması gereklidir. Büyük veri, tek başına veri setinin büyük olduğu anlamına gelmez.

Veri madenciliğinin (data mining) bir kolunu oluşturan metin madenciliği (text mining) metotları, metinlerde en sık kullanılan anahtar kelimeleri vurgulamamıza ve görselleştirmemize olanak tanır. Bu metotlarla metin verisinden metin bulutu, etiket bulutu diyebileceğimiz kelime bulutu oluşturulabilir.

Kelime bulutu oluşturma prosedürü eğer R programlama dilinde uygulama adımları bilinirse çok zor değildir. Genel olarak R’da farklı paketler kullanılmakla birlikte genellikle metin madenciliği paketi (the text mining package ™) ve kelime bulutu oluşturucu paket (the word cloud generator package (wordcloud))’lerinin kullanıldığı görülmektedir. Bu paketler, metni hızlı analiz etmemize ve kelime bulutu olarak ortaya çıkan anahtar kelimeleri görselleştirmemize olanak tanır.

Bahsedilenler ışığında metin verisini sunmada kelime bulutunu kullanmanız gerektiği durumlar şunlardır:

  1. Kelime bulutları sadelik ve yalınlık sağlar. En sık kullanılan anahtar kelimeler, kelime bulutu içinde daha iyi kendini gösterir.
  2. Kelime bulutları potansiyel iletişim araçlarıdır. Kelime bulutlarının anlaşılması ve paylaşılması kolaydır ve kelime bulutları etkilidirler.
  3. Kelime bulutları bir tablo verisinden görsel olarak daha ilgi çekicidir.

Kelime bulutları, sektör ayrımı gözetilmeksizin bütün alanlarda kullanılabilmekle birlikte en sık kullanılan alanlarla en sık kullanılan meslek grupları şöyle özetlenebilir;

  1. Kalitatif (nitel) araştırma yapan araştırmacılar,
  2. Müşterilerin ihtiyaçlarının belirlenmesi noktasında pazarlamacılar,
  3. Temel konuları desteklemek için eğitimciler,
  4. Politikacı ve gazeteciler
  5. Kullanıcı görüşlerini toplayan, analiz eden ve paylaşan sosyal medya siteleri

R’da kelime bulutu oluşturma süreci genel olarak 5 adımda tamamlanmaktadır.

  1. Birinci adımda text (txt) uzantılı bir dosya oluşturulur. Oluşturulan bu metin dosyasının içine analiz edilecek metin (uzunluğu önemli değil) kaydedilir. Ancak bu metin dosyası txt uzantılı olarak web üzerinde de olabilir. Bu durumda txt dosyasının linki üzerinden sürece devam edilir.
  2. Gerekli R programlama dili paketleri kurulur ve yüklenir. Bu paketler;

     Install (kurulum için)

install.packages("tm")  # for text mining (metin madenciliği için)
install.packages("SnowballC") # for text stemming (metin için)
install.packages("wordcloud") # word-cloud generator (kelime bulutu oluşturucu)
install.packages("RColorBrewer") # color palettes (renk paletleri)

   Load (yüklemek için)

library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")

3. 1. aşamada oluşturulan metin dokümanı yüklenir. Kullanılan R kodu genellikle şu şekildedir;

filePath<-library(readr)
ml <- read_csv("ml.txt")
View(ml)
text <- readLines(filePath) 
filePath<-library(readr)
ml <- read_csv("ml.txt")
View(ml)
text <- readLines(filePath)

Metin madenciliği denilen bu aşamada, analiz edilecek metin text mining ™ paketinde olan Corpus() fonksiyonu kullanılır ve metin indekslenir. Daha sonra, veri temizleme faaliyetlerine başlanır. İstenmeyen kelimeler, bağlaçlar, boşluklar, sayılar bu aşamada çıkarılır.

  1. Metin temizlendikten sonra metnin içindeki kelimelerin kullanılma sıklığını gösteren bir matris oluşturulur.
  2. Son aşamada ise sıklık matrisinden bir kelime bulutu oluşturularak süreç tamamlanır.

Uygulama adımları anlatıldıktan sonra özgün örnek bir olay üzerinden şimdi bir uygulama yapalım. Kolaylık olması ve daha anlaşılır olması adına txt (text) dosyası yüklenmesi yerine analiz edilecek metin fonksiyon içine yazılarak aşamalar kısaltılacaktır. Bilinirliğinden dolayı, örnek uygulamada kullanılan metin, Nutuk adlı eserden alınmıştır.

#Analizde Kullanılan Nutuk Adlı Eserden alınan Metin

Türk Gençliğine Bıraktığımız Kutsal Armağan Saygıdeğer baylar, sizi, günlerce işlerinizden alıkoyan uzun ve ayrıntılı sözlerim, en sonu tarihe mal olmuş bir dönemin öyküsüdür. Bunda, ulusum için ve yarınki çocuklarımız için dikkat ve uyanıklık sağlayabilecek kimi noktaları belirtebilmiş isem kendimi mutlu sayacağım.Baylar, bu söylevimle, ulusal varlığı sona ermiş sayılan büyük bir ulusun, bağımsızlığını nasıl kazandığını; bilim ve tekniğin en son ilkelerine dayanan ulusal ve çağdaş bir devleti nasıl kurduğunu anlatmaya çalıştım.Bugün ulaştığımız sonuç, yüzyıllardan beri çekilen ulusal yıkımların yarattığı uyanıklığın ve bu sevgili yurdun her köşesini sulayan kanların karşılığıdır.Bu sonucu, Türk gençliğine kutsal bir armağan olarak bırakıyorum.Ey Türk gençliği! Birinci ödevin; Türk bağımsızlığını, Türk Cumhuriyetini, sonsuzluğa değin korumak ve savunmaktır.Varlığının ve geleceğinin biricik temeli budur. Bu temel, senin en değerli hazinendir. Gelecekte de, seni bu kaynaktan yoksun etmek isteyen iç ve dış kötücüller bulunacaktır. Bir gün, bağımsızlığını ve cumhuriyetini savunmak zorunda kalırsan, ödeve atılmak için, içinde bulunacağın durumun olanaklarını ve koşullarını düşünmeyeceksin! Bu olanak ve koşullar çok elverişsiz bir nitelikte belirebilir. Bağımsızlığına ve cumhuriyetine kıymak isteyecek düşmanlar, bütün dünyada benzeri görülmedik bir utku kazanmış olabilirler.Zorla ve aldatıcı düzenlerle sevgili yurdunun bütün kaleleri alınmış, bütün gemilikleri ele geçirilmiş, bütün orduları dağıtılmış ve yurdun her köşesi fiilen işgal edilmiş olabilir. Bütün bu koşullardan daha acı ve daha korkunç olmak üzere, yurdunda, iş başında bulunanlar, aymazlık ve sapkınlık, üstelik, hainlik içinde olabilirler. Dahası iş başında bulunan bu kişiler, kendi çıkarlarını, yurduna girmiş olan düşmanların siyasal erekleriyle birleştirebilirler. Ulus, yoksulluk ve sıkıntı içinde ezgin ve bitkin düşmüş olabilir.Ey Türk geleceğinin çocuğu! İşte, bu ortam ve koşullar içinde bile ödevin, Türk bağımsızlığını ve Cumhuriyetini kurtarmaktır! Bunun için gereken güç, damarlarındaki soylu kanda vardır.

# Yukarıda bahsedilen paketlerin kurulumu ve yüklenme işlemi tamamlandıktan sonra, metni, indekslenmesi için ilk olarak corpus fonkyonu içinde tanımlanmış VectorSource fonksiyonu içine alıyoruz.

docs <- Corpus(VectorSource("Türk Gençliğine Bıraktığımız Kutsal Armağan Saygıdeğer baylar, sizi, günlerce işlerinizden alıkoyan uzun ve ayrıntılı sözlerim, en sonu tarihe mal olmuş bir dönemin öyküsüdür. Bunda, ulusum için ve yarınki çocuklarımız için dikkat ve uyanıklık sağlayabilecek kimi noktaları belirtebilmiş isem kendimi mutlu sayacağım.Baylar, bu söylevimle, ulusal varlığı sona ermiş sayılan büyük bir ulusun, bağımsızlığını nasıl kazandığını; bilim ve tekniğin en son ilkelerine dayanan ulusal ve çağdaş bir devleti nasıl kurduğunu anlatmaya çalıştım.Bugün ulaştığımız sonuç, yüzyıllardan beri çekilen ulusal yıkımların yarattığı uyanıklığın ve bu sevgili yurdun her köşesini sulayan kanların karşılığıdır.Bu sonucu, Türk gençliğine kutsal bir armağan olarak bırakıyorum.Ey Türk gençliği! Birinci ödevin; Türk bağımsızlığını, Türk Cumhuriyetini, sonsuzluğa değin korumak ve savunmaktır.Varlığının ve geleceğinin biricik temeli budur. Bu temel, senin en değerli hazinendir. Gelecekte de, seni bu kaynaktan yoksun etmek isteyen iç ve dış kötücüller bulunacaktır. Bir gün, bağımsızlığını ve cumhuriyetini savunmak zorunda kalırsan, ödeve atılmak için, içinde bulunacağın durumun olanaklarını ve koşullarını düşünmeyeceksin! Bu olanak ve koşullar çok elverişsiz bir nitelikte belirebilir. Bağımsızlığına ve cumhuriyetine kıymak isteyecek düşmanlar, bütün dünyada benzeri görülmedik bir utku kazanmış olabilirler.Zorla ve aldatıcı düzenlerle sevgili yurdunun bütün kaleleri alınmış, bütün gemilikleri ele geçirilmiş, bütün orduları dağıtılmış ve yurdun her köşesi fiilen işgal edilmiş olabilir. Bütün bu koşullardan daha acı ve daha korkunç olmak üzere, yurdunda, iş başında bulunanlar, aymazlık ve sapkınlık, üstelik, hainlik içinde olabilirler. Dahası iş başında bulunan bu kişiler, kendi çıkarlarını, yurduna girmiş olan düşmanların siyasal erekleriyle birleştirebilirler. Ulus, yoksulluk ve sıkıntı içinde ezgin ve bitkin düşmüş olabilir.Ey Türk geleceğinin çocuğu! İşte, bu ortam ve koşullar içinde bile ödevin, Türk bağımsızlığını ve Cumhuriyetini kurtarmaktır! Bunun için gereken güç, damarlarındaki soylu kanda vardır"))

#Dokuman incele fonksiyonu çalıştırılır.

inspect(docs)

#Metin dönüştürülür.

toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\|")

#Veri temizlenir.

# Metni küçük harfe dönüştür.
docs <- tm_map(docs, content_transformer(tolower))
# Metinden rakamları ayıkla.
docs <- tm_map(docs, removeNumbers)
# Çıkarılmasını istediğiniz kelimeleri ve bağlaçları çıkar.
docs <- tm_map(docs, removeWords, c("her", "için", "bile", "bir", "bütün", "daha", "beri")) 
# Noktalama işaretlerini kaldır.
docs <- tm_map(docs, removePunctuation)
# Ekstra boşlukları kaldır.
docs <- tm_map(docs, stripWhitespace)

#Kelime sıklık matrisi oluşturulduktan sonra sıralı bir şekilde ilk 10 kelimeyi data frame (veri çerçevesi) formatında getirilir.

dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 10)

Yukarıdaki fonksiyonlarının çalıştırılmasıyla elde edilen sıklık çerçeve tablosu aşağıdaki gibidir.

freqtable

#Kelime bulutu oluşturularak süreç tamamlanır. Bu aşamada her defasında aynı sonuçların ve düzenin elde edilebilmesi için set.seed() ve random.order=FALSE fonksiyonları kullanılır. Kelimeleri renklerdirmek için brewer.pal() fonksiyonu kullanılır.

set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 2,
          max.words=500, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

Yukarıdaki fonksiyonlarının çalıştırılmasıyla elde edilen kelime bulutunun ilk görünümü aşağıdaki gibidir.

Rplot

Görüntüyü daha görsel bir hale sokmak sokmak için yukarıda elde edilen veri çerçevesine ilişkin alternatif kelime bulutları oluşturulmuştur.

Alternatif 1: Kelime Bulutu Kod Bloğu

wordcloud2(d, size=1.6)

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Alternatif 1: Kelime Bulutu (Word Cloud)

wordcloud2-1

Alternatif 2: Kelime Bulutu Kod Bloğu

wordcloud2(d, size=1.6, color='random-light', backgroundColor="black")

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Rplot02

Alternatif 3: Kelime Bulutu Kod Bloğu

wordcloud2(d, size = 2.3, minRotation = -pi/6, maxRotation = -pi/6, rotateRatio = 1)

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Rplot03

Son alternatif de benim sizlere süprizim olsun diyeceğim ama görüyorsunuz :).

Alternatif 3: Kelime Bulutu Kod Bloğu

wordcloud2(d, size = 0.7, shape = 'star')

Yukarıdaki kod bloğu çalıştırıldığında elde edilen görünüm aşağıdaki gibidir.

Rplot04

Kelime bulutu oluşturma süreci tamamladıktan sonra bu süreci biraz daha ileriye taşıyalım. Ortaya konulan kelime bulutlarının sıklıklarına göre grafikler oluşturalım.

Alternatif 1: Grafik Kod Bloğu

install.packages("tidyverse")
library(ggplot2)
str(d)
y<-head(d, 10)
y
ggplot(y)+geom_point(aes(freq, word),col="red",size=4, shape="+")+
labs(subtitle=NULL, y="Kelime Sayısı", x="Kelimeler",title="En Çok Karşılan İlk 10 Kelime", caption = "Source:TBulut")+
xlim(2,7)+
  theme(plot.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=18, hjust=0.5)) +
theme(axis.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=12))

Yukarıdaki kod bloğunun çalıştırılmasıyla elde edilen grafik aşağıdaki gibidir.

nutukchart-1

Alternatif 2: Grafik Kod Bloğu

install.packages("tidyverse")
library(ggplot2) 
str(d) 
y<-head(d, 10) y
ggplot(y, aes(freq, word))+geom_point(col="red", size=4)+
labs(subtitle=NULL, y="Kelimeler", x="Kelime Sayısı",title="En Çok Karşılan İlk 10 Kelime", caption = "Source:TBulut")+
xlim(2,7)+
    theme(plot.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=18, hjust=0.5)) +
theme(axis.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=12))

Yukarıdaki kod bloğunun çalıştırılmasıyla elde edilen grafik aşağıdaki gibidir.

wordcloudnutuk-2

Faydalı olması dileğiyle.

Saygılarımla.

Not: Emeğe saygı adına, burda yapılan çalışmanın başka bir mecrada ya da ortamda paylaşılması halinde alındığı yer adının belirtilmesini rica ederim.

Yararlanılan Kaynaklar

22HarvJLTech515.pdf erişimi için tıklayın

R’da Karar Ağacı Üzerine Bir Vaka Çalışması: A Case Study on Decision Tree in R

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. Ç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 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

Çalışma kapsamında özgün bir çalışma olması adına ABD Tarım Departmanı Ekonomik Araştırma Servisi (United States Department of Agriculture Economic Research Service) internet sayfasında yer alan ABD Eyalet ve İlçe Düzeyi İşsizlik ve Medyan Hanehalkı Geliri (Unemployment and median household income for the U.S., States, and counties) veri seti kullanılmıştır. Kullanılan veri setinin indirilebilir linkine aşağıda yer verilmiştir.

https://www.ers.usda.gov/webdocs/DataFiles/48747/Unemployment.xls?v=9115.7

Çalışma kapsamında veri seti içerisindeki 2018 yılına ait işssizlik oranı hesaplanmasında kullanılan veriler alınmıştır. Veri setinde İşsizlik oranı verisi ile birlikte bu verinin (Unemployment Rate) hesaplanmasına temel oluşturan değişkenler sırasıyla şöyledir:

  1. İşgücü (Labor Force)
  2. İstihdam (Employment)
  3. İşsizlik (Unemployment)

Amaç: 2018 İşsizlik Oranı verileri ordinal kategorik veriye dönüştürülerek karar ağacı algoritmalarından sınıflandırma algoritması ile bağımlı değişkenin ne kadarlık bir doğrulukla tahmin edileceğini ortaya koymak amaçlanmıştır. Burada, işsizlik oranı (unemployment rate) kategorik veriye dönüştürülerek hedef değişken olarak belirlenmiştir.

R programlama dili kullanılarak R kod blokları ve R kod bloklarının çalıştırılmasıyla elde edilen çıktı (output)’lara aşama aşama yer verilerek gösterilmiştir.

R Kod Bloğu 1 (R1)

R1 run edilerek yukarıda bahsedilen siteden veri seti online kaynaktan okunmuştur. Ancak bilgisayara indirilmemiştir.

library(readxl)# Excel dokümanlarını okumak için
url <- "https://www.ers.usda.gov/webdocs/DataFiles/48747/Unemployment.xls?v=9115.7"
destfile <- "Unemployment_xls_v_9115.xls"
curl::curl_download(url, destfile)
Unemployment<- read_excel(destfile, range = "A8:BB3283")#Veri setindeki ilgili hücrelerdeki verileri almak için
Unemployment

R Kod Bloğu 2 (R2)

R2’nin çalıştırılması ile sırasıyla;

  1. Veri setindeki değişken isimleri verilmiştir.
  2. Veri setinin kaç değişkenden ve gözlemden oluştuğu verilmiştir.
  3. library(tidyr) ve library(dplyr) paketleri yüklenerek eksik verilerin (Missing Data: NA) olduğu satırlar çıkarılmıştır.
  4. NA (Not Available) değerleri çıkarıldıktan sonraki gözlem sayısı gözden geçirilmiştir.
  5. Veri setinden 2018 yılına ait değişkenler alınmıştır.
  6. 2018 yılına ait veri setinin tanımlayıcı istatistikleri verilmiştir.
  7. 2018 yılına ait veri setindeki değişken adları değiştirilmiştir.
  8. 2018 yılına ait veri setinin ilk 6 satırı verilmiştir.
  9. 2018 yılı veri setindeki işsizlik oranı (unemployment rate) değişkeni “Low”, “Middle”, “High” ve “Very High” olarak kategorize edilerek tanımlayıcı istatistikleri verilmiştir.
  10. Analiz kapsamında değerlendirilecek değişkenler ve bunlara ait veri seti esnek ve gelişmiş tablo içine alınarak ilk 6 satırı verilmiştir.
names(Unemployment)
str(Unemployment)#3275 obs. of  54 variables:
library(tidyr)
library(dplyr)
df<-Unemployment %>% drop_na()#Missing Data (NA) olan değerler veri setinden çıkarılmıştır.
str(df)# NA değerleri çıkarıldıktan sonraki gözlem değerleri gözden geçirilmiştir.

df1<-df[, 51:54]#2018 yılı değişkenlerinin olduğu sütunların seçilmesi
df1
summary(df1)#2018 yılı işsizlik veri seti tanımlayıcı istatistikleri

df2<-df1 %>% rename(Labor_Force=Civilian_labor_force_2018, Employed=Employed_2018,Unemployed=Unemployed_2018, Unemployment_Rate= Unemployment_rate_2018)#değişken adlarının değiştirilmesi
names(df2)#Değişkenlerin yeni adları

library(tibble)#esnek ve gelişmiş tablo oluşturmak için
df_20<-cut(df2$Unemployment_Rate, breaks = 4, labels = c("Low", "Middle", "High", "Very High"))#İşsizlik oranı verisinin kategorize edilerek ordinal veri türüne dönüştürülmesi için

library(Hmisc)
describe(df_20)#Kategorize edilen veriye ait tanımlayıcı istatistikleri vermek için

t10<-tibble(Labor_Force=df2$Labor_Force, Employment=df2$Employed, Unemployment=df2$Unemployed, Classification=df_20)#Gelişmiş ve esnek tablo formatı içine analiz kapsamında değerlendirilecek değişkenler ve bunlara ait veri seti alınmıştır.

library(formattable)
formattable(head(t10))# Veri setinin ilk 6 satırını vermek için

R2 kod bloğunun çalıştırılmasından sonra elde edilen çıktılar (outputs) sırasıyla aşağıda verilmiştir.

Değişken isimleri: Output (O1)

 [1] "FIPS"                            "State"                           "Area_name"                      
 [4] "Rural_urban_continuum_code_2013" "Urban_influence_code_2013"       "Metro_2013"                     
 [7] "Civilian_labor_force_2007"       "Employed_2007"                   "Unemployed_2007"                
[10] "Unemployment_rate_2007"          "Civilian_labor_force_2008"       "Employed_2008"                  
[13] "Unemployed_2008"                 "Unemployment_rate_2008"          "Civilian_labor_force_2009"      
[16] "Employed_2009"                   "Unemployed_2009"                 "Unemployment_rate_2009"         
[19] "Civilian_labor_force_2010"       "Employed_2010"                   "Unemployed_2010"                
[22] "Unemployment_rate_2010"          "Civilian_labor_force_2011"       "Employed_2011"                  
[25] "Unemployed_2011"                 "Unemployment_rate_2011"          "Civilian_labor_force_2012"      
[28] "Employed_2012"                   "Unemployed_2012"                 "Unemployment_rate_2012"         
[31] "Civilian_labor_force_2013"       "Employed_2013"                   "Unemployed_2013"                
[34] "Unemployment_rate_2013"          "Civilian_labor_force_2014"       "Employed_2014"                  
[37] "Unemployed_2014"                 "Unemployment_rate_2014"          "Civilian_labor_force_2015"      
[40] "Employed_2015"                   "Unemployed_2015"                 "Unemployment_rate_2015"         
[43] "Civilian_labor_force_2016"       "Employed_2016"                   "Unemployed_2016"                
[46] "Unemployment_rate_2016"          "Civilian_labor_force_2017"       "Employed_2017"                  
[49] "Unemployed_2017"                 "Unemployment_rate_2017"          "Civilian_labor_force_2018"      
[52] "Employed_2018"                   "Unemployed_2018"                 "Unemployment_rate_2018"

Gözlem ve Değişken Sayısı: Output 2 (O2)

Veri seti görüleceği üzere 54 değişken 3275 gözlemden oluşmaktadır. Aynı zamanda O2’de değişkenlerin veri türü de görülmektedir.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	3275 obs. of  54 variables:
 $ FIPS                           : num  0 1000 1001 1003 1005 ...
 $ State                          : chr  "US" "AL" "AL" "AL" ...
 $ Area_name                      : chr  "United States" "Alabama" "Autauga County, AL" "Baldwin County, AL" ...
 $ Rural_urban_continuum_code_2013: num  NA NA 2 3 6 1 1 6 6 3 ...
 $ Urban_influence_code_2013      : num  NA NA 2 2 6 1 1 6 6 2 ...
 $ Metro_2013                     : num  NA NA 1 1 0 1 1 0 0 1 ...
 $ Civilian_labor_force_2007      : num  1.52e+08 2.18e+06 2.44e+04 8.27e+04 1.03e+04 ...
 $ Employed_2007                  : num  1.45e+08 2.09e+06 2.36e+04 8.01e+04 9.68e+03 ...
 $ Unemployed_2007                : num  7034959 86485 806 2560 650 ...
 $ Unemployment_rate_2007         : num  4.6 4 3.3 3.1 6.3 4.1 3.2 9.4 6.2 3.9 ...
 $ Civilian_labor_force_2008      : num  1.54e+08 2.18e+06 2.47e+04 8.32e+04 1.02e+04 ...
 $ Employed_2008                  : num  1.45e+08 2.05e+06 2.34e+04 7.94e+04 9.27e+03 ...
 $ Unemployed_2008                : num  8900745 123012 1267 3851 894 ...
 $ Unemployment_rate_2008         : num  5.8 5.7 5.1 4.6 8.8 5.8 4.7 10.5 8.5 5.7 ...
 $ Civilian_labor_force_2009      : num  1.54e+08 2.16e+06 2.47e+04 8.25e+04 1.00e+04 ...
 $ Employed_2009                  : num  1.40e+08 1.92e+06 2.23e+04 7.44e+04 8.57e+03 ...
 $ Unemployed_2009                : num  14230757 238252 2402 8048 1431 ...
 $ Unemployment_rate_2009         : num  9.3 11 9.7 9.8 14.3 13.3 10 15.6 16.4 11.1 ...
 $ Civilian_labor_force_2010      : num  1.54e+08 2.20e+06 2.57e+04 8.35e+04 1.02e+04 ...
 $ Employed_2010                  : num  1.39e+08 1.96e+06 2.34e+04 7.51e+04 8.96e+03 ...
 $ Unemployed_2010                : num  14862528 231483 2282 8339 1262 ...
 $ Unemployment_rate_2010         : num  9.63 10.5 8.9 10 12.3 11.4 9.8 11.8 13.6 11.4 ...
 $ Civilian_labor_force_2011      : num  1.55e+08 2.20e+06 2.58e+04 8.50e+04 9.85e+03 ...
 $ Employed_2011                  : num  1.41e+08 1.99e+06 2.37e+04 7.74e+04 8.71e+03 ...
 $ Unemployed_2011                : num  13840507 212257 2159 7627 1137 ...
 $ Unemployment_rate_2011         : num  8.95 9.6 8.4 9 11.5 10.5 8.7 11.6 12.5 10.3 ...
 $ Civilian_labor_force_2012      : num  1.55e+08 2.18e+06 2.57e+04 8.44e+04 9.36e+03 ...
 $ Employed_2012                  : num  1.43e+08 2.00e+06 2.40e+04 7.81e+04 8.28e+03 ...
 $ Unemployed_2012                : num  12518793 173047 1779 6349 1079 ...
 $ Unemployment_rate_2012         : num  8.07 8 6.9 7.5 11.5 8.5 6.9 10.4 11.5 8.9 ...
 $ Civilian_labor_force_2013      : num  1.55e+08 2.17e+06 2.58e+04 8.53e+04 9.10e+03 ...
 $ Employed_2013                  : num  1.44e+08 2.02e+06 2.42e+04 7.96e+04 8.17e+03 ...
 $ Unemployed_2013                : num  11467541 156957 1605 5654 931 ...
 $ Unemployment_rate_2013         : num  7.38 7.2 6.2 6.6 10.2 7.9 6.3 9.4 10.3 8.8 ...
 $ Civilian_labor_force_2014      : num  1.56e+08 2.16e+06 2.56e+04 8.64e+04 8.84e+03 ...
 $ Employed_2014                  : num  1.46e+08 2.01e+06 2.41e+04 8.11e+04 7.91e+03 ...
 $ Unemployed_2014                : num  9618992 146552 1495 5301 932 ...
 $ Unemployment_rate_2014         : num  6.17 6.8 5.8 6.1 10.5 7.2 6.1 8.8 8.6 8 ...
 $ Civilian_labor_force_2015      : num  1.57e+08 2.16e+06 2.56e+04 8.77e+04 8.61e+03 ...
 $ Employed_2015                  : num  1.49e+08 2.03e+06 2.43e+04 8.29e+04 7.85e+03 ...
 $ Unemployed_2015                : num  8287559 131395 1330 4859 765 ...
 $ Unemployment_rate_2015         : num  5.28 6.1 5.2 5.5 8.9 6.6 5.4 7.9 7.6 7 ...
 $ Civilian_labor_force_2016      : num  1.59e+08 2.18e+06 2.60e+04 9.07e+04 8.42e+03 ...
 $ Employed_2016                  : num  1.51e+08 2.05e+06 2.46e+04 8.58e+04 7.72e+03 ...
 $ Unemployed_2016                : num  7727644 127238 1321 4831 700 ...
 $ Unemployment_rate_2016         : num  4.87 5.8 5.1 5.3 8.3 6.4 5.4 6.8 6.9 6.5 ...
 $ Civilian_labor_force_2017      : num  1.60e+08 2.18e+06 2.60e+04 9.21e+04 8.32e+03 ...
 $ Employed_2017                  : num  1.53e+08 2.08e+06 2.50e+04 8.83e+04 7.83e+03 ...
 $ Unemployed_2017                : num  6980076 96567 1014 3748 486 ...
 $ Unemployment_rate_2017         : num  4.36 4.4 3.9 4.1 5.8 4.4 4 4.9 5.5 5 ...
 $ Civilian_labor_force_2018      : num  1.62e+08 2.20e+06 2.60e+04 9.38e+04 8.37e+03 ...
 $ Employed_2018                  : num  1.55e+08 2.11e+06 2.50e+04 9.05e+04 7.94e+03 ...
 $ Unemployed_2018                : num  6296445 86490 942 3393 433 ...
 $ Unemployment_rate_2018         : num  3.9 3.9 3.6 3.6 5.2 4 3.5 4.7 4.8 4.7 ...

Eksik Verilerin (Missing Data: NA) Veri Setinden Çıkarılması: Output 3 (O3)

O3’te eksik veriler veri setinden çıkarılarak gözlem sayısı yeniden güncellenmiştir. Yeni durumda veri setindeki gözlem sayısı 3275’ten 3214’e düşmüştür.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	3214 obs. of  54 variables:
 $ FIPS                           : num  1001 1003 1005 1007 1009 ...
 $ State                          : chr  "AL" "AL" "AL" "AL" ...
 $ Area_name                      : chr  "Autauga County, AL" "Baldwin County, AL" "Barbour County, AL" "Bibb County, AL" ...
 $ Rural_urban_continuum_code_2013: num  2 3 6 1 1 6 6 3 6 6 ...
 $ Urban_influence_code_2013      : num  2 2 6 1 1 6 6 2 5 6 ...
 $ Metro_2013                     : num  1 1 0 1 1 0 0 1 0 0 ...
 $ Civilian_labor_force_2007      : num  24383 82659 10334 8791 26629 ...
 $ Employed_2007                  : num  23577 80099 9684 8432 25780 ...
 $ Unemployed_2007                : num  806 2560 650 359 849 ...
 $ Unemployment_rate_2007         : num  3.3 3.1 6.3 4.1 3.2 9.4 6.2 3.9 6.5 4.2 ...
 $ Civilian_labor_force_2008      : num  24687 83223 10161 8749 26698 ...
 $ Employed_2008                  : num  23420 79372 9267 8241 25453 ...
 $ Unemployed_2008                : num  1267 3851 894 508 1245 ...
 $ Unemployment_rate_2008         : num  5.1 4.6 8.8 5.8 4.7 10.5 8.5 5.7 14.4 5.7 ...
 $ Civilian_labor_force_2009      : num  24703 82451 10003 8742 26480 ...
 $ Employed_2009                  : num  22301 74403 8572 7581 23832 ...
 $ Unemployed_2009                : num  2402 8048 1431 1161 2648 ...
 $ Unemployment_rate_2009         : num  9.7 9.8 14.3 13.3 10 15.6 16.4 11.1 19.6 11.7 ...
 $ Civilian_labor_force_2010      : num  25713 83459 10221 8934 24906 ...
 $ Employed_2010                  : num  23431 75120 8959 7914 22460 ...
 $ Unemployed_2010                : num  2282 8339 1262 1020 2446 ...
 $ Unemployment_rate_2010         : num  8.9 10 12.3 11.4 9.8 11.8 13.6 11.4 14.9 10.6 ...
 $ Civilian_labor_force_2011      : num  25836 85045 9849 8933 25123 ...
 $ Employed_2011                  : num  23677 77418 8712 7996 22939 ...
 $ Unemployed_2011                : num  2159 7627 1137 937 2184 ...
 $ Unemployment_rate_2011         : num  8.4 9 11.5 10.5 8.7 11.6 12.5 10.3 12 9.7 ...
 $ Civilian_labor_force_2012      : num  25740 84414 9362 8798 24960 ...
 $ Employed_2012                  : num  23961 78065 8283 8047 23244 ...
 $ Unemployed_2012                : num  1779 6349 1079 751 1716 ...
 $ Unemployment_rate_2012         : num  6.9 7.5 11.5 8.5 6.9 10.4 11.5 8.9 9.9 8 ...
 $ Civilian_labor_force_2013      : num  25810 85280 9099 8705 24887 ...
 $ Employed_2013                  : num  24205 79626 8168 8016 23325 ...
 $ Unemployed_2013                : num  1605 5654 931 689 1562 ...
 $ Unemployment_rate_2013         : num  6.2 6.6 10.2 7.9 6.3 9.4 10.3 8.8 8 6.6 ...
 $ Civilian_labor_force_2014      : num  25592 86384 8845 8559 24527 ...
 $ Employed_2014                  : num  24097 81083 7913 7942 23023 ...
 $ Unemployed_2014                : num  1495 5301 932 617 1504 ...
 $ Unemployment_rate_2014         : num  5.8 6.1 10.5 7.2 6.1 8.8 8.6 8 6.7 5.8 ...
 $ Civilian_labor_force_2015      : num  25613 87741 8613 8576 24485 ...
 $ Employed_2015                  : num  24283 82882 7848 8009 23163 ...
 $ Unemployed_2015                : num  1330 4859 765 567 1322 ...
 $ Unemployment_rate_2015         : num  5.2 5.5 8.9 6.6 5.4 7.9 7.6 7 6 5.4 ...
 $ Civilian_labor_force_2016      : num  25966 90670 8417 8623 24623 ...
 $ Employed_2016                  : num  24645 85839 7717 8067 23298 ...
 $ Unemployed_2016                : num  1321 4831 700 556 1325 ...
 $ Unemployment_rate_2016         : num  5.1 5.3 8.3 6.4 5.4 6.8 6.9 6.5 5.5 5 ...
 $ Civilian_labor_force_2017      : num  25972 92090 8317 8550 24725 ...
 $ Employed_2017                  : num  24958 88342 7831 8174 23726 ...
 $ Unemployed_2017                : num  1014 3748 486 376 999 ...
 $ Unemployment_rate_2017         : num  3.9 4.1 5.8 4.4 4 4.9 5.5 5 4.1 4.1 ...
 $ Civilian_labor_force_2018      : num  25957 93849 8373 8661 25006 ...
 $ Employed_2018                  : num  25015 90456 7940 8317 24128 ...
 $ Unemployed_2018                : num  942 3393 433 344 878 ...
 $ Unemployment_rate_2018         : num  3.6 3.6 5.2 4 3.5 4.7 4.8 4.7 3.9 3.6 ...

2018 Veri Setindeki Değişkenlerin Tanımlayıcı İstatistikleri: Output (O4)

 Civilian_labor_force_2018 Employed_2018     Unemployed_2018    Unemployment_rate_2018
 Min.   :    102           Min.   :     98   Min.   :     4.0   Min.   : 1.300        
 1st Qu.:   4961           1st Qu.:   4730   1st Qu.:   208.0   1st Qu.: 3.100        
 Median :  11423           Median :  10962   Median :   496.5   Median : 3.900        
 Mean   :  50628           Mean   :  48638   Mean   :  1989.8   Mean   : 4.294        
 3rd Qu.:  31052           3rd Qu.:  29739   3rd Qu.:  1288.8   3rd Qu.: 4.900        
 Max.   :5136341           Max.   :4896512   Max.   :239829.0   Max.   :19.900    

2018 Veri Setindeki Değişkenlerin Adlarının Değiştirilmesi: Output (O4)

[1] "Labor_Force"       "Employed"          "Unemployed"        "Unemployment_Rate"

2018 Veri Setindeki İlk 6 Satır: Output (O5)

Labor_Force Employed Unemployed Unemployment_Rate
25957	25015	942	3.6	
93849	90456	3393	3.6	
8373	7940	433	5.2	
8661	8317	344	4.0	
25006	24128	878	3.5	
4776	4552	224	4.7	

2018 Veri Setindeki İşsizlik Oranı Değişkeninin Kategorize Edilmesi : Output (O7)

2018 yılı veri setindeki işsizlik oranı (unemployment rate) değişkeni “Low”, “Middle”, “High” ve “Very High” olarak kategorize edilerek tanımlayıcı istatistikleri aşağıda verilmiştir.

df_20 
       n  missing distinct 
    3214        0        4 
                                                  
Value            Low    Middle      High Very High
Frequency       2856       304        43        11
Proportion     0.889     0.095     0.013     0.003

2018 Veri Setinin Revizyonlardan Sonraki İlk 6 Satırı: Output (O8)

R Kod Bloğu 3 (R3)

R3’nin çalıştırılması ile sırasıyla;

  1. Değişkenler arasındaki ilişkiler işsizlik oranı sınıflandırılması temelinde log dönüşümü de uygulanarak karşılaştırmalı olarak çoklu saçılım grafikleriyle verilmiştir.
#Yüklü değilse indiriniz: install.packages("tidyverse")
##Yüklü değilse indiriniz: install.packages("ggplot2")
library(ggplot2)

#Yüklü değilse indiriniz: install.packages("ggpubr")
library(ggpubr)

#Değişkenler arasındaki ilişkiler işsizlik oranı sınıflandırılması temelinde çoklu saçılım grafiklerle verilmiştir.
v1<-t10%>%ggplot(aes(x=Labor_Force, y=Employment, color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))


v2<-t10%>%ggplot(aes(x=log(Labor_Force), y=log(Employment), color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

ggarrange(v1, v2, ncol = 1, nrow = 2, common.legend = TRUE)

v3<-t10%>%ggplot(aes(x=Labor_Force, y=Unemployment, color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

v4<-t10%>%ggplot(aes(x=log(Labor_Force), y=log(Unemployment), color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

ggarrange(v3, v4, ncol = 1, nrow = 2, common.legend = TRUE)

v5<-t10%>%ggplot(aes(x=Employment, y=Unemployment, color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

v6<-t10%>%ggplot(aes(x=log(Employment), y=log(Unemployment), color = 
    factor(Classification)))+
    geom_point()+
    facet_grid(. ~ Classification, scales = "free")+
    labs(color = "Classification:") +
    theme(legend.title = element_text(color = "chocolate",
                                    size = 14, face = "bold"))

ggarrange(v5, v6, ncol = 1, nrow = 2, common.legend = TRUE)

Değişkenler Arasındaki İlişkilerin Çoklu Saçılım Grafiklerle Gösterimi: Output (O9)

R Kod Bloğu 4 (R4)

R4’ün çalıştırılması ile sırasıyla;

  1. Değişkenler arasındaki ilişkiler işsizlik oranı sınıflandırılması temelinde log dönüşümü de uygulanarak karşılaştırmalı olarak çoklu saçılım grafiklerle R3’tekine alternatif olarak verilmiştir.
#Ayrıksı eksenler oluşturarak çoklu saçılım grafikleri oluşturma

v11<-t10%>%ggplot(aes(x=Labor_Force, y=Employment, color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v11

v12<-t10%>%ggplot(aes(x=log(Labor_Force), y=log(Employment), color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v12

v13<-t10%>%ggplot(aes(x=Labor_Force, y=Unemployment, color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v13


v14<-t10%>%ggplot(aes(x=log(Labor_Force), y=log(Unemployment), color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v14

v15<-t10%>%ggplot(aes(x=Employment, y=Unemployment, color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v15

v16<-t10%>%ggplot(aes(x=log(Employment), y=log(Unemployment), color = 
     factor(Classification)))+
     geom_point()+
     facet_grid(. ~ Classification, scales = "free")+
     labs(color = "Classification:") +
     theme(legend.title = element_text(color = "chartreuse4",
                                    size = 10, face = "bold"))+
     facet_wrap(~ Classification, nrow = 2, scales = "free")

v16

Değişkenler Arasındaki İlişkilerin Çoklu Saçılım Grafiklerle Alternatif Gösterimi: Output (O10)

Genel olarak R3 ve R4 kod bloklarının çalıştırılmasıyla elde edilen saçılım grafiklerden değişken veri setlerine logaritmik (log) dönüşüm uygulandığında değişkenler arasında pozitif korelasyon olduğu görülmektedir.

Buraya kadar yapılan işlemlerde daha çok veriyi online bir kaynaktan okuma, verinin temizlenmesi ve değişkenler arasındaki ilişkilerin gösterimi adı altında veri madenciliği işlemleri yapılmıştır. Burada veri madenciliği konu alanı altında pek çok diğer işlem de yapılabilir. Bu durum verinin türüne, kaynağına, analizin ve araştırmanın amacına göre farklılık göstermektedir. Bu aşamadan sonra ise analize uygun hale getirilen veri yine veri madenciliği algoritmalarından olan karar ağacı algoritması kullanılarak analiz edilecektir.

R Kod Bloğu 5 (R5): Karar Ağacı Oluşturma-1

R5’in çalıştırılmasıyla;

  1. Veri seti basit tesadüfi örneklem çekilerek eğitilecek ve test edilecek veri setine ayrılır. Daha sonra veri setindeki “Classification” değişkeni hedef değişken belirlenerek modele sokulmuştur. Elde edilen sonuçlar karar ağacında görselleştirildikten sonra hata ve doğruluk oranları verilmiştir.
library(DMwR2)#Karar ağacı kütüphanesini yüklemek için
set.seed(1923)
n=NROW(t10)#veri setindeki satır sayısı
SRS <- sample(sample(1:n, size = round(0.7*n), replace=FALSE))#veri setinden basit tesadüfi örneklem çekilerek eğitilecek veri seti ve test setine ayırmak için
training <- t10[SRS, ]#eğitilecek veri seti
test <- t10[-SRS, ]#test edilecek veri seti
model <- rpartXse(Classification ~ ., training, se=0.5)

pred1 <- predict(model, test, type="class")
head(pred1)

library(rpart.plot)#karar ağacının görselleştirilmesi için
prp(model, type=0, extra=101)

(cm <- table(pred1, test$Classification))

error_rate<-100*(1-sum(diag(cm))/sum(cm))

print(paste('Error Rate is %', round(error_rate))) # the error rate (hata oranı)
accuracy_test <- sum(diag(cm)) / sum(cm)
print(paste('Accuracy for test is %', 100*accuracy_test))#Accuracy rate(doğruluk oranı)

Kurulan modele ilişkin karar ağacı aşağıdaki gibidir.

Modele ilişkin hata oranı (error rate) ve doğruluk oranı (accuracy rate) aşağıda verilmiştir. Kurulan model % 5 hata oranı (error rate) ve % 95 doğruluk oranı (accuracy rate) ise hedef değişkeni tahmin etmiştir.

pred1       Low Middle High Very High
  Low       845     25    0         0
  Middle      9     67    5         1
  High        0      1    7         3
  Very High   0      0    0         1
[1] "Error Rate is % 5"
[1] "Accuracy for test is % 95"

R Kod Bloğu 6 (R6): Karar Ağacı Oluşturma2

R6’nın çalıştırılmasıyla;

  1. Veri seti basit tesadüfi örneklem çekilerek eğitilecek ve test edilecek veri setine ayrılır. Daha sonra veri setindeki “Classification” değişkeni hedef değişken belirlenerek numerik değişkenlere logaritmik (log) dönüşüm uygulanarak modele sokulmuştur. Elde edilen sonuçlar karar ağacında görselleştirildikten sonra hata ve doğruluk oranları verilmiştir.
lf<-log(t10$Labor_Force)
e<-log(t10$Employment)
u<-log(t10$Unemployment)
t11<-tibble(Labor_Force=lf, Employment=e, Unemployment=u, Classification=t10$Classification)

set.seed(1071)
n=NROW(t11)#veri setindeki satır sayısı
SRS <- sample(sample(1:n, size = round(0.7*n), replace=FALSE))#veri setinden basit tesadüfi örneklem çekilerek eğitilecek veri seti ve test setine ayırmak için
training <- t11[SRS, ]#eğitilecek veri seti
test <- t11[-SRS, ]#test edilecek veri seti
model <- rpartXse(Classification ~ ., training, se=0.5)

pred1 <- predict(model, test, type="class")
head(pred1)

library(rpart.plot)#karar ağacının görselleştirilmesi için
prp(model, type=0, extra=101)

(cm <- table(pred1, test$Classification))

error_rate<-100*(1-sum(diag(cm))/sum(cm))

print(paste('Error Rate is %', round(error_rate))) # the error rate (hata oranı)
accuracy_test <- sum(diag(cm)) / sum(cm)
print(paste('Accuracy for test is %', 100*accuracy_test))#Accuracy rate(doğruluk oranı)

Log dönüşümü uygulanarak kurulan modele ilişkin karar ağacı aşağıdaki gibidir.

Log dönüşümü uygulandıktan sonra modele ilişkin hata oranı (error rate) ve doğruluk oranı (accuracy rate) aşağıda verilmiştir. Kurulan model % 5 hata oranı (error rate) ve % 95 doğruluk oranı (accuracy rate) hedef değişkeni tahmin etmiştir. Elde edilen sonuçlar log dönüşümü uygulanmadan önceki elde edilen sonuçlarla aynıdır.

pred1       Low Middle High Very High
  Low       849     24    0         0
  Middle     14     60    3         0
  High        0      3    9         0
  Very High   0      0    1         1
[1] "Error Rate is % 5"
[1] "Accuracy for test is % 95"

R Kod Bloğu 7 (R7): Karar Ağacı Oluşturma3

R7’nin çalıştırılmasıyla;

  1. Veri seti basit tesadüfi örneklem çekilerek eğitilecek ve test edilecek veri setine ayrılır. Daha sonra veri setindeki “Classification” değişkeni hedef değişken belirlenerek numerik değişkenler normalize edilerek modele sokulmuştur. Elde edilen sonuçlar karar ağacında görselleştirildikten sonra hata ve doğruluk oranları verilmiştir.
lf<-scale(t10$Labor_Force)
e<-scale(t10$Employment)
u<-scale(t10$Unemployment)
t12<-tibble(Labor_Force=lf, Employment=e, Unemployment=u, Classification=t10$Classification)

set.seed(1331)
n=NROW(t12)
SRS <- sample(sample(1:n, size = round(0.7*n), replace=FALSE))#veri setinden basit tesadüfi örneklem çekilerek eğitilecek veri seti ve test setine ayırmak için
training <- t12[SRS, ]#eğitilecek veri seti
test <- t12[-SRS, ]#test edilecek veri seti
model <- rpartXse(Classification ~ ., training, se=0.5)

pred1 <- predict(model, test, type="class")
head(pred1)

library(rpart.plot)#karar ağacının görselleştirilmesi için
prp(model, type=0, extra=101)

(cm <- table(pred1, test$Classification))

error_rate<-100*(1-sum(diag(cm))/sum(cm))

print(paste('Error Rate is %', round(error_rate))) # the error rate (hata oranı)
accuracy_test <- sum(diag(cm)) / sum(cm)
print(paste('Accuracy for test is %', 100*accuracy_test))#Accuracy rate(doğruluk oranı)

Veri seti normalize edilerek kurulan modele ilişkin karar ağacı aşağıdaki gibidir.

Veri seti normalize edildikten sonra modele ilişkin hata oranı (error rate) ve doğruluk oranı (accuracy rate) aşağıda verilmiştir. Kurulan model % 5 hata oranı (error rate) ve % 95 doğruluk oranı (accuracy rate) ile hedef değişkeni tahmin etmiştir. Elde edilen sonuçlar önceki sonuçlarla aynıdır.

pred1       Low Middle High Very High
  Low       850     23    0         0
  Middle     13     63    6         2
  High        0      0    4         3
  Very High   0      0    0         0
[1] "Error Rate is % 5"
[1] "Accuracy for test is % 95"

R Kod Bloğu 8 (R8): Karar Ağacı Oluşturma-4

R8’in çalıştırılmasıyla;

  1. İlk olarak “Classification” değişkenine temel oluşturan işssizlik oranı (unemployment rate) değişkeni ve bağımlı değişkenlerin logaritmik dönüşümü yapılmıştır. Daha sonra veri seti basit tesadüfi örneklem çekilerek eğitilecek ve test edilecek veri setine ayrılmıştır. Elde edilen sonuçlar karar ağacında görselleştirildikten sonra hata ve doğruluk oranları verilmiştir.
df_20_log<-cut(log(df2$Unemployment_Rate), breaks = 4, labels = c("Low", "Middle", "High", "Very High"))

t_log<-tibble(Labor_Force=log(df2$Labor_Force), Employment=log(df2$Employed), Unemployment=log(df2$Unemployed), Classification=df_20_log)

set.seed(2001)
n=NROW(t_log)
SRS <- sample(sample(1:n, size = round(0.7*n), replace=FALSE))
training <- t_log[SRS, ]
test <- t_log[-SRS, ]
model <- rpartXse(Classification ~ ., training, se=0.5)

pred1 <- predict(model, test, type="class")
head(pred1)

library(rpart.plot)#karar ağacının görselleştirilmesi için
prp(model, type=0, extra=101)

(cm <- table(pred1, test$Classification))

error_rate<-100*(1-sum(diag(cm))/sum(cm))

print(paste('Error Rate is %', round(error_rate))) # the error rate (hata oranı)
accuracy_test <- sum(diag(cm)) / sum(cm)
print(paste('Accuracy for test is %', 100*accuracy_test))#Accuracy rate(doğruluk oranı)

Veri setindeki değişkenlerin tamamına logaritmik (log) dönüşüm uygulandıktan sonra kurulan modele ilişkin karar ağacı aşağıdaki gibidir.

Veri setinin tamanına log dönüşümü uygulandıktan sonra modele ilişkin hata oranı (error rate) ve doğruluk oranı (accuracy rate) aşağıda verilmiştir. Kurulan model % 10 hata oranı (error rate) ve % 90 doğruluk oranı (accuracy rate) ile hedef değişkeni tahmin etmiştir.

pred1       Low Middle High Very High
  Low        62     15    0         0
  Middle     29    647   27         0
  High        0     14  153         8
  Very High   0      0    1         8
[1] "Error Rate is % 10"
[1] "Accuracy for test is % 90"

Yapılan işlemlerden sonra örneklem seçimi ile elde edilen en düşük CP (Complexity Paramater) değeri ile yeni model inşa edilir. Daha sonra aşırı öğrenme (overfitting) ve eksik öğrenmeyi (underfitting) önlemek için ağaç budama (pruning) işlemi yapılarak karar ağacı sonlandırılır.

Örnek uygulama kapsamında yukarıda kurulan modeller diğer makine öğrenme ve derin öğrenme yöntemleri ile de analiz edilerek elde edilen sonuçlar kıyaslanarak buradaki problemin çözümünde en iyi yöntem belirlenebilir.

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

Saygılarımla.

Yararlanılan Kaynaklar

cs229-notes-dt.pdf erişimi için tıklayın

https://www.ers.usda.gov/data-products/county-level-data-sets/download-data/

https://www.r-project.org/

https://www.python-course.eu/Decision_Trees.php

https://tevfikbulut.com/2019/12/03/web-uzerindeki-verinin-kesifsel-analizine-yonelik-bir-vaka-calismasi-a-case-study-for-exploratory-analysis-of-data-on-the-web/

Medium.com adresinde görüntüleyin

https://www.guru99.com/

Web Üzerindeki Verinin Keşifsel Analizine Yönelik Bir Vaka Çalışması: A Case Study for Exploratory Analysis of Data on the Web

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 getirmiştir. Artık veri, programlama dilleri kullanılarak da analiz edilebilmektedir.

Genel olarak veri türü istatistik biliminde 3 gruba ayrılmaktadır.

  1. Nominal (Kategorik): örneğin, cinsiyet (dikotomik veriler), medeni durum gibi cevap seçenekleri
  2. Ordinal: Sosyo-ekonomik gelişmişlik durumu, eğitim düzeyi
  3. Rasyo (Numerik): Ölçülebilir ve sayılabilir nitelikteki veriler rasyo veriler olarak nitelendirilir.

Ancak uygulamada yukarıdaki sınıflandırma çok da geçerli olmayabilir. Diğer bir ifadeyle, online veya offline olarak dokümanlarda analize konu edilecek veri metin verisi ise nasıl analiz edilecektir? 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. 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. 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.

Çalışma kapsamında özgün bir çalışma olması adına ABD Tarım Departmanı Ekonomik Araştırma Servisi (United States Department of Agriculture Economic Research Service) internet sayfasında yer alan ABD Eyalet ve İlçe Düzeyi İşsizlik ve Medyan Hanehalkı Geliri (Unemployment and median household income for the U.S., States, and counties) veri seti kullanılmıştır. Kullanılan veri setinin indirilebilir linkine aşağıda yer verilmiştir.

https://www.ers.usda.gov/webdocs/DataFiles/48747/Unemployment.xls?v=9115.7

R programlama dili kullanılarak R kod blokları ve R kod bloklarının çalıştırılmasıyla elde edilen çıktı (output)’lara aşama aşama yer verilerek gösterilmiştir.

R Kod Bloğu 1 (R1)

R1 run edilerek yukarıda bahsedilen siteden veri seti online kaynaktan okunmuştur. Ancak bilgisayara indirilmemiştir.

library(readxl)# Excel dokümanlarını okumak için
url <- "https://www.ers.usda.gov/webdocs/DataFiles/48747/Unemployment.xls?v=9115.7"
destfile <- "Unemployment_xls_v_9115.xls"
curl::curl_download(url, destfile)
Unemployment<- read_excel(destfile, range = "A8:BB3283")#Veri setindeki ilgili hücrelerdeki verileri almak için
Unemployment

R Kod Bloğu 2 (R2)

R2’nin çalıştırılması ile sırasıyla;

  1. Veri setindeki değişken isimleri
  2. Kaç değişkenden ve gözlemden oluştuğu
  3. library(tidyr) ve library(dplyr) paketleri yüklenerek eksik verilerin (Missing Data: NA) olduğu satırlar çıkarılmıştır.
  4. NA (Not Available) değerleri çıkarıldıktan sonraki gözlem sayısı gözden geçirilmiştir.
  5. Veri setinden 2018 yılına ait değişkenler alınmıştır.
  6. 2018 yılına ait veri setinin tanımlayıcı istatistikleri verilmiştir.
  7. 2018 yılına ait veri setindeki değişken adları değiştirilmiştir.
  8. 2018 yılına ait veri setinin ilk 6 satırı verilmiştir.
names(Unemployment)
str(Unemployment)#3275 obs. of  54 variables:
library(tidyr)
library(dplyr)
df<-Unemployment %>% drop_na()#Missing Data (NA) olan değerler veri setinden çıkarılmıştır.
str(df)# NA değerleri çıkarıldıktan sonraki gözlem değerleri gözden geçirilmiştir.
df1<-df[, 51:54]#2018 yılı değişkenlerinin olduğu sütunların seçilmesi
df1
summary(df1)#2018 yılı işsizlik veri seti tanımlayıcı istatistikleri
df2<-df1 %>% rename(Labor_Force=Civilian_labor_force_2018, Employed=Employed_2018,Unemployed=Unemployed_2018, Unemployment_Rate= Unemployment_rate_2018)#değişken adlarının değiştirilmesi
names(df2)#Değişkenlerin yeni adları

R2 kod bloğunun çalıştırılmasından sonra elde edilen çıktılar (outputs) sırasıyla aşağıda verilmiştir.

Değişken isimleri: Output (O1)

 [1] "FIPS"                            "State"                           "Area_name"                      
 [4] "Rural_urban_continuum_code_2013" "Urban_influence_code_2013"       "Metro_2013"                     
 [7] "Civilian_labor_force_2007"       "Employed_2007"                   "Unemployed_2007"                
[10] "Unemployment_rate_2007"          "Civilian_labor_force_2008"       "Employed_2008"                  
[13] "Unemployed_2008"                 "Unemployment_rate_2008"          "Civilian_labor_force_2009"      
[16] "Employed_2009"                   "Unemployed_2009"                 "Unemployment_rate_2009"         
[19] "Civilian_labor_force_2010"       "Employed_2010"                   "Unemployed_2010"                
[22] "Unemployment_rate_2010"          "Civilian_labor_force_2011"       "Employed_2011"                  
[25] "Unemployed_2011"                 "Unemployment_rate_2011"          "Civilian_labor_force_2012"      
[28] "Employed_2012"                   "Unemployed_2012"                 "Unemployment_rate_2012"         
[31] "Civilian_labor_force_2013"       "Employed_2013"                   "Unemployed_2013"                
[34] "Unemployment_rate_2013"          "Civilian_labor_force_2014"       "Employed_2014"                  
[37] "Unemployed_2014"                 "Unemployment_rate_2014"          "Civilian_labor_force_2015"      
[40] "Employed_2015"                   "Unemployed_2015"                 "Unemployment_rate_2015"         
[43] "Civilian_labor_force_2016"       "Employed_2016"                   "Unemployed_2016"                
[46] "Unemployment_rate_2016"          "Civilian_labor_force_2017"       "Employed_2017"                  
[49] "Unemployed_2017"                 "Unemployment_rate_2017"          "Civilian_labor_force_2018"      
[52] "Employed_2018"                   "Unemployed_2018"                 "Unemployment_rate_2018"

Gözlem ve Değişken Sayısı: Output 2 (O2)

Veri seti görüleceği üzere 54 değişken 3275 gözlemden oluşmaktadır. Aynı zamanda O2’de değişkenlerin veri türü de görülmektedir.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	3275 obs. of  54 variables:
 $ FIPS                           : num  0 1000 1001 1003 1005 ...
 $ State                          : chr  "US" "AL" "AL" "AL" ...
 $ Area_name                      : chr  "United States" "Alabama" "Autauga County, AL" "Baldwin County, AL" ...
 $ Rural_urban_continuum_code_2013: num  NA NA 2 3 6 1 1 6 6 3 ...
 $ Urban_influence_code_2013      : num  NA NA 2 2 6 1 1 6 6 2 ...
 $ Metro_2013                     : num  NA NA 1 1 0 1 1 0 0 1 ...
 $ Civilian_labor_force_2007      : num  1.52e+08 2.18e+06 2.44e+04 8.27e+04 1.03e+04 ...
 $ Employed_2007                  : num  1.45e+08 2.09e+06 2.36e+04 8.01e+04 9.68e+03 ...
 $ Unemployed_2007                : num  7034959 86485 806 2560 650 ...
 $ Unemployment_rate_2007         : num  4.6 4 3.3 3.1 6.3 4.1 3.2 9.4 6.2 3.9 ...
 $ Civilian_labor_force_2008      : num  1.54e+08 2.18e+06 2.47e+04 8.32e+04 1.02e+04 ...
 $ Employed_2008                  : num  1.45e+08 2.05e+06 2.34e+04 7.94e+04 9.27e+03 ...
 $ Unemployed_2008                : num  8900745 123012 1267 3851 894 ...
 $ Unemployment_rate_2008         : num  5.8 5.7 5.1 4.6 8.8 5.8 4.7 10.5 8.5 5.7 ...
 $ Civilian_labor_force_2009      : num  1.54e+08 2.16e+06 2.47e+04 8.25e+04 1.00e+04 ...
 $ Employed_2009                  : num  1.40e+08 1.92e+06 2.23e+04 7.44e+04 8.57e+03 ...
 $ Unemployed_2009                : num  14230757 238252 2402 8048 1431 ...
 $ Unemployment_rate_2009         : num  9.3 11 9.7 9.8 14.3 13.3 10 15.6 16.4 11.1 ...
 $ Civilian_labor_force_2010      : num  1.54e+08 2.20e+06 2.57e+04 8.35e+04 1.02e+04 ...
 $ Employed_2010                  : num  1.39e+08 1.96e+06 2.34e+04 7.51e+04 8.96e+03 ...
 $ Unemployed_2010                : num  14862528 231483 2282 8339 1262 ...
 $ Unemployment_rate_2010         : num  9.63 10.5 8.9 10 12.3 11.4 9.8 11.8 13.6 11.4 ...
 $ Civilian_labor_force_2011      : num  1.55e+08 2.20e+06 2.58e+04 8.50e+04 9.85e+03 ...
 $ Employed_2011                  : num  1.41e+08 1.99e+06 2.37e+04 7.74e+04 8.71e+03 ...
 $ Unemployed_2011                : num  13840507 212257 2159 7627 1137 ...
 $ Unemployment_rate_2011         : num  8.95 9.6 8.4 9 11.5 10.5 8.7 11.6 12.5 10.3 ...
 $ Civilian_labor_force_2012      : num  1.55e+08 2.18e+06 2.57e+04 8.44e+04 9.36e+03 ...
 $ Employed_2012                  : num  1.43e+08 2.00e+06 2.40e+04 7.81e+04 8.28e+03 ...
 $ Unemployed_2012                : num  12518793 173047 1779 6349 1079 ...
 $ Unemployment_rate_2012         : num  8.07 8 6.9 7.5 11.5 8.5 6.9 10.4 11.5 8.9 ...
 $ Civilian_labor_force_2013      : num  1.55e+08 2.17e+06 2.58e+04 8.53e+04 9.10e+03 ...
 $ Employed_2013                  : num  1.44e+08 2.02e+06 2.42e+04 7.96e+04 8.17e+03 ...
 $ Unemployed_2013                : num  11467541 156957 1605 5654 931 ...
 $ Unemployment_rate_2013         : num  7.38 7.2 6.2 6.6 10.2 7.9 6.3 9.4 10.3 8.8 ...
 $ Civilian_labor_force_2014      : num  1.56e+08 2.16e+06 2.56e+04 8.64e+04 8.84e+03 ...
 $ Employed_2014                  : num  1.46e+08 2.01e+06 2.41e+04 8.11e+04 7.91e+03 ...
 $ Unemployed_2014                : num  9618992 146552 1495 5301 932 ...
 $ Unemployment_rate_2014         : num  6.17 6.8 5.8 6.1 10.5 7.2 6.1 8.8 8.6 8 ...
 $ Civilian_labor_force_2015      : num  1.57e+08 2.16e+06 2.56e+04 8.77e+04 8.61e+03 ...
 $ Employed_2015                  : num  1.49e+08 2.03e+06 2.43e+04 8.29e+04 7.85e+03 ...
 $ Unemployed_2015                : num  8287559 131395 1330 4859 765 ...
 $ Unemployment_rate_2015         : num  5.28 6.1 5.2 5.5 8.9 6.6 5.4 7.9 7.6 7 ...
 $ Civilian_labor_force_2016      : num  1.59e+08 2.18e+06 2.60e+04 9.07e+04 8.42e+03 ...
 $ Employed_2016                  : num  1.51e+08 2.05e+06 2.46e+04 8.58e+04 7.72e+03 ...
 $ Unemployed_2016                : num  7727644 127238 1321 4831 700 ...
 $ Unemployment_rate_2016         : num  4.87 5.8 5.1 5.3 8.3 6.4 5.4 6.8 6.9 6.5 ...
 $ Civilian_labor_force_2017      : num  1.60e+08 2.18e+06 2.60e+04 9.21e+04 8.32e+03 ...
 $ Employed_2017                  : num  1.53e+08 2.08e+06 2.50e+04 8.83e+04 7.83e+03 ...
 $ Unemployed_2017                : num  6980076 96567 1014 3748 486 ...
 $ Unemployment_rate_2017         : num  4.36 4.4 3.9 4.1 5.8 4.4 4 4.9 5.5 5 ...
 $ Civilian_labor_force_2018      : num  1.62e+08 2.20e+06 2.60e+04 9.38e+04 8.37e+03 ...
 $ Employed_2018                  : num  1.55e+08 2.11e+06 2.50e+04 9.05e+04 7.94e+03 ...
 $ Unemployed_2018                : num  6296445 86490 942 3393 433 ...
 $ Unemployment_rate_2018         : num  3.9 3.9 3.6 3.6 5.2 4 3.5 4.7 4.8 4.7 ...

Eksik Verilerin (Missing Data: NA) Veri Setinden Çıkarılması: Output 3 (O3)

O3’te eksik veriler veri setinden çıkarılarak gözlem sayısı yeniden güncellenmiştir. Yeni durumda veri setindeki gözlem sayısı 3275’ten 3214’e düşmüştür.

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	3214 obs. of  54 variables:
 $ FIPS                           : num  1001 1003 1005 1007 1009 ...
 $ State                          : chr  "AL" "AL" "AL" "AL" ...
 $ Area_name                      : chr  "Autauga County, AL" "Baldwin County, AL" "Barbour County, AL" "Bibb County, AL" ...
 $ Rural_urban_continuum_code_2013: num  2 3 6 1 1 6 6 3 6 6 ...
 $ Urban_influence_code_2013      : num  2 2 6 1 1 6 6 2 5 6 ...
 $ Metro_2013                     : num  1 1 0 1 1 0 0 1 0 0 ...
 $ Civilian_labor_force_2007      : num  24383 82659 10334 8791 26629 ...
 $ Employed_2007                  : num  23577 80099 9684 8432 25780 ...
 $ Unemployed_2007                : num  806 2560 650 359 849 ...
 $ Unemployment_rate_2007         : num  3.3 3.1 6.3 4.1 3.2 9.4 6.2 3.9 6.5 4.2 ...
 $ Civilian_labor_force_2008      : num  24687 83223 10161 8749 26698 ...
 $ Employed_2008                  : num  23420 79372 9267 8241 25453 ...
 $ Unemployed_2008                : num  1267 3851 894 508 1245 ...
 $ Unemployment_rate_2008         : num  5.1 4.6 8.8 5.8 4.7 10.5 8.5 5.7 14.4 5.7 ...
 $ Civilian_labor_force_2009      : num  24703 82451 10003 8742 26480 ...
 $ Employed_2009                  : num  22301 74403 8572 7581 23832 ...
 $ Unemployed_2009                : num  2402 8048 1431 1161 2648 ...
 $ Unemployment_rate_2009         : num  9.7 9.8 14.3 13.3 10 15.6 16.4 11.1 19.6 11.7 ...
 $ Civilian_labor_force_2010      : num  25713 83459 10221 8934 24906 ...
 $ Employed_2010                  : num  23431 75120 8959 7914 22460 ...
 $ Unemployed_2010                : num  2282 8339 1262 1020 2446 ...
 $ Unemployment_rate_2010         : num  8.9 10 12.3 11.4 9.8 11.8 13.6 11.4 14.9 10.6 ...
 $ Civilian_labor_force_2011      : num  25836 85045 9849 8933 25123 ...
 $ Employed_2011                  : num  23677 77418 8712 7996 22939 ...
 $ Unemployed_2011                : num  2159 7627 1137 937 2184 ...
 $ Unemployment_rate_2011         : num  8.4 9 11.5 10.5 8.7 11.6 12.5 10.3 12 9.7 ...
 $ Civilian_labor_force_2012      : num  25740 84414 9362 8798 24960 ...
 $ Employed_2012                  : num  23961 78065 8283 8047 23244 ...
 $ Unemployed_2012                : num  1779 6349 1079 751 1716 ...
 $ Unemployment_rate_2012         : num  6.9 7.5 11.5 8.5 6.9 10.4 11.5 8.9 9.9 8 ...
 $ Civilian_labor_force_2013      : num  25810 85280 9099 8705 24887 ...
 $ Employed_2013                  : num  24205 79626 8168 8016 23325 ...
 $ Unemployed_2013                : num  1605 5654 931 689 1562 ...
 $ Unemployment_rate_2013         : num  6.2 6.6 10.2 7.9 6.3 9.4 10.3 8.8 8 6.6 ...
 $ Civilian_labor_force_2014      : num  25592 86384 8845 8559 24527 ...
 $ Employed_2014                  : num  24097 81083 7913 7942 23023 ...
 $ Unemployed_2014                : num  1495 5301 932 617 1504 ...
 $ Unemployment_rate_2014         : num  5.8 6.1 10.5 7.2 6.1 8.8 8.6 8 6.7 5.8 ...
 $ Civilian_labor_force_2015      : num  25613 87741 8613 8576 24485 ...
 $ Employed_2015                  : num  24283 82882 7848 8009 23163 ...
 $ Unemployed_2015                : num  1330 4859 765 567 1322 ...
 $ Unemployment_rate_2015         : num  5.2 5.5 8.9 6.6 5.4 7.9 7.6 7 6 5.4 ...
 $ Civilian_labor_force_2016      : num  25966 90670 8417 8623 24623 ...
 $ Employed_2016                  : num  24645 85839 7717 8067 23298 ...
 $ Unemployed_2016                : num  1321 4831 700 556 1325 ...
 $ Unemployment_rate_2016         : num  5.1 5.3 8.3 6.4 5.4 6.8 6.9 6.5 5.5 5 ...
 $ Civilian_labor_force_2017      : num  25972 92090 8317 8550 24725 ...
 $ Employed_2017                  : num  24958 88342 7831 8174 23726 ...
 $ Unemployed_2017                : num  1014 3748 486 376 999 ...
 $ Unemployment_rate_2017         : num  3.9 4.1 5.8 4.4 4 4.9 5.5 5 4.1 4.1 ...
 $ Civilian_labor_force_2018      : num  25957 93849 8373 8661 25006 ...
 $ Employed_2018                  : num  25015 90456 7940 8317 24128 ...
 $ Unemployed_2018                : num  942 3393 433 344 878 ...
 $ Unemployment_rate_2018         : num  3.6 3.6 5.2 4 3.5 4.7 4.8 4.7 3.9 3.6 ...

2018 Veri Setindeki Değişkenlerin Tanımlayıcı İstatistikleri: Output (O4)

 Civilian_labor_force_2018 Employed_2018     Unemployed_2018    Unemployment_rate_2018
 Min.   :    102           Min.   :     98   Min.   :     4.0   Min.   : 1.300        
 1st Qu.:   4961           1st Qu.:   4730   1st Qu.:   208.0   1st Qu.: 3.100        
 Median :  11423           Median :  10962   Median :   496.5   Median : 3.900        
 Mean   :  50628           Mean   :  48638   Mean   :  1989.8   Mean   : 4.294        
 3rd Qu.:  31052           3rd Qu.:  29739   3rd Qu.:  1288.8   3rd Qu.: 4.900        
 Max.   :5136341           Max.   :4896512   Max.   :239829.0   Max.   :19.900    

2018 Veri Setindeki Değişkenlerin Adlarının Değiştirilmesi: Output (O4)

[1] "Labor_Force"       "Employed"          "Unemployed"        "Unemployment_Rate"

2018 Veri Setindeki İlk 6 Satır: Output (O5)

Labor_Force Employed Unemployed Unemployment_Rate
25957	25015	942	3.6	
93849	90456	3393	3.6	
8373	7940	433	5.2	
8661	8317	344	4.0	
25006	24128	878	3.5	
4776	4552	224	4.7	

R Kod Bloğu 3 (R3)

R3’nin çalıştırılması ile sırasıyla;

  1. Değişkenler arasındaki ilişkiler çoklu çizgi grafiklerle verilmiştir.
  2. Değişkenlerin dağılım yapısını incelemek çoklu histogramı çizilmiştir.
  3. Veri setindeki uç değerleri görmek için çoklu Boxplot’lar çizilmiştir.
#Yüklü değilse indiriniz: install.packages("tidyverse")
##Yüklü değilse indiriniz: install.packages("ggplot2")
library(ggplot2)

#Yüklü değilse indiriniz: install.packages("ggpubr")
library(ggpubr)

#Değişkenler arasındaki ilişkiler çizgi çoklu grafiklerle verilmiştir.
x1<-df2%>%ggplot(aes(Labor_Force,Employed))+
  geom_line(colour = "brown")+
  ggtitle("İşgücü İstihdam İlişkisi")
  #geom_smooth(method = "lm", se = FALSE)

x2<-df2%>%ggplot(aes(Labor_Force,Unemployed))+
  geom_line(colour = "green")+
  ggtitle("İssizlik İşgücü İlişkisi")
  #geom_hline(yintercept = mean(df2$Labor_Force))+
  #geom_abline()
x3<-df2%>%ggplot(aes(Labor_Force,Unemployment_Rate))+
  geom_line(colour = "blue")+
   ggtitle("İşsizlik Oranı İşgücü İlişkisi")

x4<-df2%>%ggplot(aes(Employed,Unemployment_Rate))+
  geom_line(colour = "red")+
  ggtitle("İstihdam İşsizlik Oranı İlişkisi")

ggarrange(x1, x2, x3, x4, ncol = 2, nrow = 2, common.legend = TRUE)

#Değişkenlerin dağılım yapısını incelemek çoklu histogramı çizilmiştir.
h1<-df2%>%ggplot(aes(Labor_Force))+
  geom_histogram(fill = "blue")+
   ggtitle("İşgücü")

h2<-df2%>%ggplot(aes(Employed))+
  geom_histogram(fill = "red")+
   ggtitle("İstihdam")

h3<-df2%>%ggplot(aes(Unemployed))+
  geom_histogram(fill = "green")+
   ggtitle("İşsizlik")
   
h4<-df2%>%ggplot(aes(Unemployment_Rate))+
  geom_histogram(fill = "brown")+
   ggtitle("İşsizlik Oranı")
ggarrange(h1, h2, h3, h4, ncol = 2, nrow = 2, common.legend = TRUE)

#Veri setindeki uç değerleri görmek için çoklu Boxplot'lar çizilmiştir.

b1<-df2%>%ggplot(aes(y=Labor_Force))+
  geom_boxplot(fill = "blue", outlier.colour = "red")

b2<-df2%>%ggplot(aes(y=Unemployed))+
  geom_boxplot(fill = "red", outlier.colour = "red")

b3<-df2%>%ggplot(aes(y=Employed))+
  geom_boxplot(fill = "green", outlier.colour = "red")
   
b4<-df2%>%ggplot(aes(y=Unemployment_Rate))+
  geom_boxplot(fill = "brown", outlier.colour = "red")
ggarrange(b1, b2, b3, b4, ncol = 2, nrow = 2, common.legend = TRUE)

Değişkenler Arasındaki İlişkilerin Çoklu Çizgi Grafiklerle Gösterimi: Output (O6)

Değişkenlerin Dağılım Yapısını Ortaya Koyan Çoklu Histogram: Output (O7)

Veri Setinde Değişkenlere Ait Uç Değerlerin Çoklu Boxplot Grafiklerle Gösterimi: Output (O8)

R Kod Bloğu 4 (R4)

R4’ün çalıştırılmasıyla sırasıyla;

  1. Veri setinde Labor_Force (İşgücü) değişkenine ait tanımlayıcı istatistiklerle birlikte gözlem sayısı ile logaritması da alınarak kutu diyagramları (boxplots) çizilmiştir.
  2. Veri setinde boxplot formülü ile uç değerler hesaplanacaktır.
  3. Son durumda bulunan uç değerler veri setinden çıkarılarak tanımlayıcı istatistiklerle gözlem sayısı ile logaritması da alınarak kutu diyagramları (boxplots) çizilmiştir.
df22<-df2$Labor_Force
summary(df22)
NROW(df22)##Veri setindeki satır sayısı veya gözlem sayısı

#Boxplot 
b11<-df2%>%ggplot(aes(y=Labor_Force))+
  geom_boxplot(fill = "brown", outlier.colour = "red")

b22<-df2%>%ggplot(aes(y=log(Labor_Force)))+
  geom_boxplot(fill = "brown", outlier.colour = "red")#işgücü değişkeninin logaritması alınarak boxplot çizilmesi

ggarrange(b11, b22, ncol = 2, nrow = 1, common.legend = TRUE)

#Boxplot yaklaşımı

v1<-31052+1.5*IQR(df22)

#data subsetting
df22[df22>70188.5]

df22[df22<70188.5]

df23<-df22[df22<v1]

NROW(df23)# Uç değerler çıkarıldıktan sonra veri setinde kalan satır sayısı veya gözlem sayısı
summary(df23)#tanımlayıcı istatistikler

#Uç değerler çıkarıldıktan sonraki kutu diyagramlar
par(mfrow=c(1,2))#grid kutu diyagramlar çizilebilmesi için
boxplot(df23, ylab="Labor_Force", col = "orange", border = "blue")
boxplot(log(df23), ylab="Log(Labor_Force)", col = "red", border = "blue")

İşgücü Değişkenine Ait Tanımlayıcı İstatistikler: Output (O8)

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    102    4961   11423   50628   31052 5136341
ve Gözlem Sayısı
[1] 3214

İşgücü Değişkenine Ait Kutu Diyagramlar (Box Plots): Output (O9)

Uç Değerler Çıkarıldıktan Sonra İşgücü Değişkenine Ait Tanımlayıcı İstatistikler: Output (O9)

 Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    102    4308    9130   14525   19571   70132 
ve Gözlem Sayısı
[1] 2759

Uç Değerler Çıkarıldıktan Sonra İşgücü Değişkenine Ait Box Plot: Output (O10)

Şimdiye kadar yapılan işlemlerle daha çok veri madenciliğinin de amacına hizmet eden verinin online kaynaklardan verinin okunması ve analize uygun hale getirilmesi amaçlanmıştır. Bu aşamadan sonra veri seti ileri düzey analizlere hazır hale getirilmiştir. Burada veri madenciliği konu alanı altında pek çok diğer işlem de yapılabilir. Bu durum verinin türüne, kaynağına, analizin ve araştırmanın amacına göre farklılık göstermektedir.

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

Saygılarımla.

Yararlanılan Kaynaklar

https://www.ers.usda.gov/data-products/county-level-data-sets/download-data/

https://www.r-project.org/

Nitel Araştırmalarda Duygu Analizi (Sentiment Analysis) Üzerine Bir Vaka Çalışması-II

Bu çalışmanın birinci kısmında leksikonlardan NRC leksikonu örnek teşkil eden vaka çalışması niteliğinde örnek bir uygulama yapılmıştı. Şimdi ise,  “BING”, “AFINN” ve “SYUZHET” leksikonları bir önceki çalışmada kullanılan metin üzerinden örnek bir uygulaması yapılacaktır. Afinn leksikonu  Finn Årup Nielsen, Bing leksikonu ise Bing Liu ve arkadaşları tarafından geliştirilmiş olup, literatürde kendine uygulama alanı bulan leksikonlardır. SyuzhetNebraska Dil Bilim Laboratuarında (Nebraska Literary Lab) geliştirilmiş bir duygu sözlüğüdür.

Afinn leksikonunda, negatif ve pozitif kelimeler,  -5 ile +5 arasında ölçeklenir. Bing leksikonunda ise duygular basit bir şekilde negatif ve pozitif olarak sınıflandırılarak skorlanır. 

AFINN Leksikonu

Afinn leksikonundan elde edilen tanımlayıcı istatistikler aşağıda özetlenmiştir.

Elde edilen skorların toplamı 97 olduğundan ve pozitif yönlü olduğundan metinde pozitiflik hissi hakim olduğu söylenebilir. Bunu yukarıdaki tabloda ortalamanın (mean) pozitif yönlü olmasından da anlıyoruz.

Cümle sayılarına elde edilen grafik ise aşağıda gösterilmiştir.

BING Leksikonu

Bing leksikonundan elde edilen toplam skor 25 olduğundan ve pozitif yönlü olduğundan metinde pozitiflik hissi hakim olduğu söylenebilir.

SYUZHET Leksikonu

Syuzhet leksikonuna göre elde edilen tanımlayıcı istatistikler aşağıda özetlenmiştir.

Elde edilen skorların toplamı 97 olduğundan ve pozitif yönlü olduğundan metinde pozitiflik hissi hakim olduğu söylenebilir. Bunu yukarıdaki tabloda ortalamanın (mean) pozitif yönlü olmasından da anlıyoruz.

Çalışmanın 1. ve 2. kısmında, analizi yapılan bütün leksikonlar pozitiflik hissini ortaya koymuştur. Dolayısıyla ortaya konulan sonuçların birbiriyle tutarlı olduğu rahatlıkla söylenebilir.

R’da 27 Şubat 2021 tarihinde duygu analizi üzerine yaptığım “R’da Duygu Analizi Üzerine Vaka Çalışmaları: Case Studies on Sentiment Analysis in R” adlı çalışmaya aşağıdaki linkten ulaşabilirsiniz.

R’da Duygu Analizi Üzerine Vaka Çalışmaları: Case Studies on Sentiment Analysis in R

Yapılan bu çalışmaların, özellikle keşifsel veri analizi (exploratory data analysis), fikir madenciliği (opinion mining) ve nitel araştırma alanına önemli bir katkı sunacağı inancındayım.

Faydalı olması dileğiyle…

Kaynaklar

kdd04-revSummary.pdf erişimi için tıklayın

Not: Emeğe saygı adına, yapılan çalışmanın başka bir mecrada ya da ortamda paylaşılması halinde alındığı yer adının belirtilmesini rica ederim.

Saygılarımla.

Veri Madenciliği (Data Mining): Pdf Dokümanlarının Keşifsel Veri Analizine Yönelik Bir Vaka Çalışması

Teknolojiyle çok daha iç içe yaşadığımız günümüzde veri ve bu verinin geçerliliği ve güvenirliği  konusu çok daha fazla önem kazanmıştır. Ancak bu verilerin büyük bir çoğunluğunun işlenmesi sorunu ortaya çıkmaktadır.

Nispeten diğer formatlardaki verilere göre pdf formatındaki veriler daha güvenilir ve geçerli sonuçlar ortaya koymaktadır. Çünkü bu formattaki dokümanlar genellikle kurum, kuruluş, araştırmacılar ve bilim insanlarınca ortaya konulmaktadır.

Paylaşılan dokümanlarının formatlarının büyük bir çoğunluğunun pdf formatlı dokümanlar olması bu alanda vaka çalışması niteliğinde örnek bir uygulama yapmamda itici bir etken olmuştur. Bu amaçla,  pdf dokümanlarının keşifsel veri analizi (exploratory data analysis) özelinde özgün bir vaka çalışması yapılacaktır. Bu itibarla, Birleşmiş Milletler Çocuklara Yardım Fonu (UNICEF)‘nun sitesindeki  “Eğitimde Kaliteyi Tanımlamak” ingilizce karşılığı “Defining Quality in Education” adlı 44 sayfalık pdf formatındaki makalenin 05/08/2018 tarihinde keşifsel veri analizi yapılmıştır. Pdf dokümanının yer aldığı web adresi  “https://www.unicef.org/education/files/QualityEducation.PDF&#8221; dir.

Anılan makalenin keşifsel analizi yapılırken, ilk olarak kelime bulutu oluşturulacak, ardından hiyerarşik küme analizine geçilecektir.

Kelime bulutu kod bloğu (code block of word cloud)

#Yüklenecek paketler
library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")
library("rvest")
Data <- readPDF(control=list(text="-layout"))(elem=list(uri="https://www.unicef.org/education/files/QualityEducation.PDF"), language="en")
text_raw <- Data$content
text_raw <- text_raw[-c(1:5)]
text_raw <- text_raw[-c(2:17)]
text_raw <- text_raw[-11]
text_raw <- text_raw[1:211]
text_corpus <- Corpus(VectorSource(text_raw))
corpus_clean <- tm_map(text_corpus, stripWhitespace)
corpus_clean <- tm_map(corpus_clean, removeNumbers)
corpus_clean <- tm_map(corpus_clean, content_transformer(tolower))
print(stopwords("en"))
corpus_clean <- tm_map(corpus_clean, removeWords, stopwords("english"))
ad_stopwords <- c("are","will", "has", "is")
m<-corpus_clean <- tm_map(corpus_clean, removeWords, ad_stopwords)
n<- tm_map(m, removePunctuation)
f <- TermDocumentMatrix(n)
k <- as.matrix(f)
l <- sort(rowSums(k),decreasing=TRUE)
t <- data.frame(word = names(l),freq=l)
set.seed(1234)
wordcloud(words = t$word, freq = t$freq, min.freq = 4,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

Yukarıdaki kod bloğunun run edilmesiyle elde edilen kelime bulutu aşağıdaki gibidir.

unicef-1

Kelime bulutu elde edildikten sonra sıklıkların tamamını excel (xlsx) formatında elde etmek için kullanılan kod bloğu aşağıdaki gibidir.

library(xlsx)
write.xlsx(x = t, file = "kelimesikliktablosu.excelfile.xlsx",
sheetName = "siklik", row.names = FALSE)

Yukarıdaki  kod bloğu run edildikten sonra ortaya çıkan en sık 50 kelime frekanslarıyla birlikte aşağıdaki tabloda sunulmuştur.

 Kelime Frekans Tablosu

Kelimeler Frekanslar
teachers 97
schools 74
education 67
students 61
school 56
learning 52
parents 51
quality 50
development 36
countries 33
primary 31
children 30
achievement 26
teaching 26
international 25
local 21
paper 20
new 19
guinea 19
educational 18
student 18
questionnaires 18
tests 18
teacher 17
training 17
interviews 17
community 16
early 16
india 16
programme 15
skills 15
classroom 14
mexico 14
outcomes 13
unicef 13
carron 13
chau 13
china 13
higher 12
research 12
curriculum 12
officials 12
health 11
many 11
scores 11
studies 11
test 11
least 11
materials 11
washington 11
madhya 11

Kelime sıklık tablosundan elde edilen en sık 10 kelime ise aşağıdaki grafikte gösterilmiştir.

unicef-cjhart

Kelime sıklık tablosu oluşturulduktan sonra tablo sıklıkları gösterilen ilk 20 kelimenin şimdi de hiyerarşik küme analizi analizini yapalım. Elde edilen sonuçlar, bu yöntemde küme dendogramı (cluster dendgram) aracılığıyla sunulur. Gözlemleri ağaçın dallarına benzer bir şekilde sunmaya yarayan dendrogram kelime grupları arasındaki ilişkiyi gösterir. Burada kümeler arasındaki uzaklıkların hesaplanmasında öklidyen uzaklık yöntemi kullanılmıştır. Hiyerarşik küme analizinde kullanılan kod bloğu aşağıda sunulmuştur.

k<-head(t,20)
m <- as.matrix(k)
distMatrix <- dist(m, method="euclidean")
library(cluster) 
hc <- hclust(distMatrix, method="complete")
hc 
plot(hc, hang=-1)

Kod bloğunun çalıştırılmasından sonra elde edilen dendrogram aşağıdaki gibidir.

Küme Dendrogramı

derogram-unicef

 

Yapılan bu çalışmaların, özellikle keşifsel veri analizi (exploratory data analysis) ve nitel araştırma alanına giren içerik analizi (content analysis) noktasında önemli bir katkı sunacağı inancındayım.

Faydalı olması dileğiyle…

Not: Emeğe saygı adına, yapılan çalışmanın başka bir mecrada ya da ortamda paylaşılması halinde alındığı yer adının belirtilmesini rica ederim.

Saygılarımla.

Veri Madenciliği: Web Sitelerinin Keşifsel Veri Analizi Üzerine Bir Vaka Çalışması

Önceki çalışmalarda hem web ortamında hem de bilgisayarda kayıtlı “TXT” formatında kayıtlı metin verisinin kelime bulutunu oluşturmaya yönelik örnekler yapılmış ve bu verilerin hiyerarşik küme analizi yapılmıştır. Şimdi ise yapacağım örnek uygulamada, “HTML” uzantılı  web siteleri, kelime bulutu (word cloud), tanımlayıcı istatistikler ve hiyerarşik küme analizi açısından değerlendirilecektir.  Bu örnek için seçilen web sitesi “http://www.bbc.com/&#8221; ve baz alınan tarih 05/08/2018‘dir.

Uygulama adımları bir önceki örnekte açıklansa da yine adımlar detaylı bir şekilde anlatılmaya çalışılacaktır.

İlk olarak analiz için R paketleri kurulup, yüklenecektir.

#Kurulum için
install.packages(c("tm", "SnowballC", "wordcloud", "RColorBrewer", "RCurl", "XML"))

#Yüklemek için
library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")
library("rvest") #HTML uzantılı web adreslerinden alınan veriyi işlemek için

Paketler yüklendikten sonra kelime bulutu oluşturulacak sitenin adresi yoluyla birlikte tanımlanır. Tanımlanan yoldan sonra, web sitesi, corpus() fonksiyonu ile indekslenerek veri temizleme işlemine geçilir. Daha sonra, kelimeler,  veri çercevesi (data frame)’ne dönüştürülerek sıklıklarına göre büyükten küçüğe doğru sıralanır. Yapılan işlemlere ilişkin kod bloğuna aşağıda yer verilmiştir.

#Veri Yolu
data    <- read_html("http://www.bbc.com/", language="en")
data   <- html_text(data)
###Veri indeksleme, temizleme ve matrise dönüştürme işlemleri
docs<-Corpus(VectorSource(data))
inspect(docs)
toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removeWords, c("the", "for", "of","does","was","bbccook", "window","bbc","dot","com", "static", "bbc","icouk", "that","are","and","has","wwhp","cdata", "var","is","his","her","about", "will", "bbcdotcom", "bbcicouk", "bbcico","uk","typeof"))
docs <- tm_map(docs, removeWords, stopwords("english"))
docs <- tm_map(docs, removePunctuation)
docs <- tm_map(docs, stripWhitespace)
docs <- tm_map(docs, stemDocument)
#Dokuman matriksinin oluşturulması
dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
#Kelimelerin sıralanarak veri çercevesine dönüştürülmesi
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)

Veri temizleme işlemleri yapıldıktan ve veri çercevesi oluşturulduktan sonra aşağıdaki kod bloğuyla kelime bulutu oluşturulur. Kelime bulutu, kelimelerin tekrarlanma sıklığı en az 4 olan maksimum 200 kelime içinde yer alacak şekilde tanımlanmıştır.

set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 4,
max.words=200, random.order=FALSE, rot.per=0.35, 
colors=brewer.pal(8, "Dark2"))

Yukarıdaki kod bloğundan sonra 05/08/2018 tarihi itibariyle http://www.bbc.com/ haber sitesinin aşağıdaki kelime bulutu elde edilmiş olur.

Kelime bulutu oluşturulduktan sonra en sık karşılaşılan ilk 10 kelime, kod bloğu ile birlikte aşağıda verilmiştir.

library(gridExtra)
grid.table(head(d, 10))

Buna göre öne çıkan tanımlayıcı (descriptive) istatistik niteliğinde ilk 10 kelime sıklıklarına (frequencies) göre aşağıda verilmiştir.

Yapılan bu çalışmaların, özellikle keşifsel veri analizi (exploratory data analysis) ve nitel araştırma alanına giren içerik analizi (content analysis) noktasında önemli bir katkı sunacağı inancındayım.

Faydalı olması dileğiyle…

Not: Emeğe saygı adına, yapılan çalışmanın başka bir mecrada ya da ortamda paylaşılması halinde alındığı yer adının belirtilmesini rica ederim.

Saygılarımla.

Veri Madenciliği (Data Mining): Web Üzerindeki Metinlerin Keşifsel Veri Analizi Üzerine Bir Vaka Çalışması

Veri madenciliği alanına giren kelime bulutu üzerine yapılan ilk uygulamada alınan metin (text) verisi üzerinde uygulama yapılmıştı. Şimdi online platformlarda yani web sitelerinde bulunan veri tabanları üzerinde yine özgün örnek bir uygulama yapalım. Örneği yapılacak çalışma, Uluslararası Kızıl Haç Komitesi (The International Committee Of The Red Cross) tarafından hazırlanan 1914-1917 arası yılları anlatan bir rapora dayanmaktadır. Raporun adı Mısırda Türk Mahkumları (Turkish Prisoners in Egypt ) olup, 2004 yılında 76 sayfa olarak yayınlanmıştır.

Uygulama adımları bir önceki örnekte açıklandığı için bu kısımda doğrudan uygulamaya geçilecektir.

İlk olarak raporun edinildiği web adresini de belirtelim. Web adresi, “http://www.gutenberg.org/cache/epub/10589/pg10589.txt&#8221; dir. Şimdide kullanılan kod bloklarını yazalım.

Kod Bloğu-1

filePath <- "http://www.gutenberg.org/cache/epub/10589/pg10589.txt"
text <- readLines(filePath)
docs <- Corpus(VectorSource(text))
inspect(docs
toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removeWords, stopwords("english"))
docs <- tm_map(docs, removeWords, c("agr", "will", "one", "two","gutenberg", "english", "offic","hospit", "per"))
docs <- tm_map(docs, removePunctuation)
docs <- tm_map(docs, stripWhitespace)
docs <- tm_map(docs, stemDocument)
dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
#En çok tekrarlanan 10 kelime
head(d, 10)

#Kelime bulutu kod bloğu (en az bir en fazla 200 kez tekrarlanan kelimeler alınmıştır)r)
set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 1,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

Yukarıdaki kod bloğundan sonra aşağıdaki kelime bulutu elde edilmiş olur.

Bu işlemden sonra sıklık terimlerine dayalı olarak sıklık grafiği oluşturulur. Bu işlemin kod bloğu aşağıda verilmiştir.

Kod Bloğu-2

###Grafik oluşturmak için
library(ggplot2)
str(d)
y<-head(d, 10)
y
ggplot(y)+geom_point(aes(freq, word),col="red",size=5, shape="+")+
labs(subtitle=NULL, y="Kelimeler", x="Kelime Sayısı",title="En Sık 10 Kelime", caption = "Source:TBulut")+
xlim(42,187)+
  theme(plot.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=18, hjust=0.5)) +
theme(axis.title = element_text(family = "Trebuchet MS", color="#666666", face="bold", size=12))

Kod bloğunun çalıştırılmasından sonra elde edilen kelime sıklık grafiği aşağıdaki gibidir.

En sık 10 kelimeyi gösteren Grafik elde edildikten sonra veri setindeki grupları belirleyerek kümelemeye olanak tanıyan hiyerarşik küme analizi (Hierarchical Cluster Analysis) yapılmıştır. Elde edilen sonuçlar, bu yöntemde küme dendogramı (cluster dendgram) aracılığıyla sunulur. Gözlemleri ağaçın dallarına benzer bir şekilde sunmaya yarayan dendrogram kelime grupları arasındaki ilişkiyi gösterir. Burada kümeler arasındaki uzaklıkların hesaplanmasında öklidyen uzaklık yöntemi kullanılmıştır. Hiyerarşik küme analizinde kullanılan kod bloğu aşağıda sunulmuştur.

Kod Bloğu-3

k<-head(d,20)
m  <- as.matrix(k)
distMatrix <- dist(m, method="euclidean")
library(cluster)   
fit <- hclust(distMatrix, method="complete")
fit 
plot(fit, hang=-1)

Kod bloğunun çalıştırılmasından sonra elde edilen dendrogram aşağıdaki gibidir.

 

Yapılan bu çalışmaların, özellikle keşifsel veri analizi (exploratory data analysis) ve nitel araştırma alanına giren içerik analizi (content analysis) noktasında önemli bir katkı sunacağı inancındayım.

Not: Emeğe saygı adına, yapılan çalışmanın başka bir mecrada ya da ortamda paylaşılması halinde alındığı yer adının belirtilmesini rica ederim.

Saygılarımla.