Baslangic
R Studio ve ilk kodlar
Elektrik Talep Analizi - (Histogram)
Elektrik Talep Analizi - (Filtreleme)
Elektrik Talep Analizi - (Verinin Bilesenleri)
Elektrik Talep Analizi - (Programlamaya Giris)
Dogrusal Regresyon ile Elektrik Talebi
Ussel Duzgunlestirme ve STL ile Elektrik Talebi
Elektrik Talebinde Farkli Periyodlar (ARIMA ve TBATS)
2015-2024 - Aylik Dogalgaz Talebi
NOAA'dan gunluk sicaklik verilerine erisim
TCMB(Merkez Bankasi) verilerine erisim
EIA (ABD Eneji Bilgi Dairesi) verilerine erisim
Dunya Bankasi verileri, otomatik modelleme, ggplot2 ve tema
Merkez Bankasi ile EIA verileri birarada: Akaryakit fiyatlari
Enflasyon ve Akaryakit Iliskisini inceleme
Final-worldbank-veriler-model-secimi

Dünya Bankası veri tabanından enerji verileri çekmek ve otomatik model belirlenmesi

Barış Sanlı, www.barissanli.com barissanli2@gmail.com

Niye Excel değil de R? Gerçekte R veya Python veya başka bir dil tercihim özel olarak yok. Sadece bir dili kullananların sayısı ne kadar çok ise o kadar fazla soruya daha hızlı cevap bulabiliyoruz.

Excel değil de R sorusu "elma" ile "armut" kıyaslaması gibi gelebilir. Fakat bu derste Excel ile veri temizleme hazırlama, model seçimi gibi bir çok sorunun R ile ne kadar hızlı halledilebileceğini göreceğiz.

Bunun için Dünya Bankası veri bankasını kullanacağız. Sırası ile:

  • Dünya Bankası veri setine erişmek için "wbstats" kütüphanesini kuracağız
  • Veri kütüphanesinden, kişi başı gelir, nüfus ve enerji göstergelerini çekeceğiz
  • Bu değişkenlerin birbiri ile ilintisine bakacağız
  • Grafikleyeceğiz, hatta "The Economist" temasını kullanacağız
  • Son olarak da otomatik doğrusal regresyon modeli belirleyerek, modeli kuracağız

"wbstats" kütüphanesi

wbstats, Dünya Bankası veri tabanına erişmeyi kolaylaştıran bir R kütüphanesi. Daha önce NOAA ve EIA veritabanlarında görüldüğü gibi API anahtarı almaya gerek yok.

Doğrudan veri talep ediyoruz.

Eğer kütüphane daha önce kurulmadıysa:

In [ ]:
install.packages("wbstats")

ile bu kütüphaneyi kurabiliriz. Açıklamalar konusunda wbstats rehberine bakabilirsiniz. https://cran.r-project.org/web/packages/wbstats/wbstats.pdf

Eğer kütüphaneyi kurarken bir sorun yaşamadıysanız, her zaman olduğu gibi library komutu ile bu kütüphaneyi devreye alabiliriz.

Verileri çekerken ise sadece göstergelerin kodlarını vektör olarak indicator parametresine girmemiz yeterli. Bu çalışmada benim araştırma sorum:

"Küresel olarak elektrikte kömür kullanımı hangi parametrelerle nasıl ilişkili, kömürü az kullanmak bir kalkınmışlık göstergesi mi?"

sorusu. Dünya Bankasındaki tüm ülkelerin yıllara sair verileri üzerinden kömür, nüfus, ekonomik büyüme ve diğer kaynaklar ile ilişkisini bulmaya çalışacağız.

Önce Kütüphanemizi yükleyelim:

In [1]:
library(wbstats)

Aradığımız Veri kodlarını bulmak

Herhangi bir veriyi sistemden çekebilmek için veri kodunu bilmemiz gerekiyor. Mesela elektrik üretimindeki kömürün oranı "EG.ELC.COAL.ZS" gibi biraz garip bir kod. Dolayısıyla önce veritabanında doğru kodları bulmamız gerekiyor.

Bunun için wbsearch komutunu kullanacağız. Komuta aradığımız anahtar kelimeleri yazınca bizlere o konu ile ilgili tüm kodları getirecek. Burada indicatorID sütunu altında yer alan kod ise sistemden talep edeceğimz verinin kodu.

Şimdi elektrik ile ilgili veri kodlarını bulmaya çalışalım

In [2]:
wbsearch("electricity production")
indicatorIDindicator
11101EG.ELC.RNWX.ZS Electricity production from renewable sources, excluding hydroelectric (% of total)
11102EG.ELC.RNWX.KH Electricity production from renewable sources, excluding hydroelectric (kWh)
11104EG.ELC.PETR.ZS Electricity production from oil sources (% of total)
11105EG.ELC.NUCL.ZS Electricity production from nuclear sources (% of total)
11106EG.ELC.NGAS.ZS Electricity production from natural gas sources (% of total)
11108EG.ELC.HYRO.ZS Electricity production from hydroelectric sources (% of total)
11109EG.ELC.FOSL.ZS Electricity production from oil, gas and coal sources (% of total)
11110EG.ELC.COAL.ZS Electricity production from coal sources (% of total)
158044.1.2_REN.ELECTRICITY.OUTPUT Renewable energy electricity output (GWh)
1595612.1_TD.LOSSES Transmission and distribution losses (%)
1595711.1_THERMAL.EFFICIENCY Thermal efficiency (%) in power supply

Dünya Bankası Web sayfasından verileri bulmak

Dünya Bankası kütüphaneleri ile ilgili İngilizce sitelere de bakmak faydalı olabilir. Mesela : https://cengel.github.io/gearup2016/worldbank.html gibi.

Ana olarak WorldBank data catalog: https://data.worldbank.org/ adresinden erişilebilir. Burada zaten bir kaç kelime yazınca verinin adı otomatik geliyor. Veriye tıklayınca da açılan sayfanın adres kısmında verinin ismi gözüküyor.

Örneğin: Nüfus için https://data.worldbank.org/indicator/SP.POP.TOTL adresinin sonundaki "SP.POP.TOTL" veri kodudur. Benim hangi verileri kullanacağımı bulmak haftalar sürdü, sonra kodlarını bulmak dakikalar. Çünkü Dünya Bankası veri seti çok geniş. Bunun sonucunda:

  • Kişi başı satın alma pariteli GSYİH "NY.GDP.PCAP.PP.KD"
  • Nüfus "SP.POP.TOTL"
  • Elektrik üretiminde doğalgaz oranı "EG.ELC.NGAS.ZS"
  • Elektrik üretiminde kömür oranı "EG.ELC.COAL.ZS"
  • Elektrik üretiminde yenilenebilir oranı "EG.ELC.RNEW.ZS"
  • Toplam elektrik üretimi "4.1.1_TOTAL.ELECTRICITY.OUTPUT"
  • Elektriğe şehirde erişim oranı "EG.ELC.ACCS.UR.ZS"
  • Elektriğe kırsalda erişim oranı "EG.ELC.ACCS.RU.ZS"
  • Toplam nihai enerji tüketimi "1.1_TOTAL.FINAL.ENERGY.CONSUM"
  • Yenilenebilirin toplam enerji tüketimindeki oranı "2.1_SHARE.TOTAL.RE.IN.TFEC"

Tabii ki istediğim başka veriler de oldu, ama bu ders için çekemedim. Bunun veri çekme sınırından mı, verinin kendisinden mi kaynaklandığı başka bir problem.

Yukarıdaki verileri alarak wb_dat değişkenine alıyoruz. Verilerin gelmesi zaman alabilir, biraz bekleyin, veriler gelince de gelen verinin başlıklarına names komutu ile bir bakın

In [3]:
wb_dat <- wb(indicator = c("NY.GDP.PCAP.PP.KD", "EG.ELC.NGAS.ZS","EG.ELC.COAL.ZS", 
                           "EG.ELC.ACCS.RU.ZS","EG.ELC.ACCS.UR.ZS", "EG.ELC.RNEW.ZS",
                           "2.1_SHARE.TOTAL.RE.IN.TFEC" , 
                           "1.1_TOTAL.FINAL.ENERGY.CONSUM", "SP.POP.TOTL",
                           "4.1.1_TOTAL.ELECTRICITY.OUTPUT" ,  "12.1_TD.LOSSES ",
                           "4.1.2_REN.ELECTRICITY.OUTPUT ", "11.1_THERMAL.EFFICIENCY "
                                                     )) 
names(wb_dat)
Warning message in wb(indicator = c("NY.GDP.PCAP.PP.KD", "EG.ELC.NGAS.ZS", "EG.ELC.COAL.ZS", :
“The following indicator values are not valid and are being excluded from the request: 12.1_TD.LOSSES ,4.1.2_REN.ELECTRICITY.OUTPUT ,11.1_THERMAL.EFFICIENCY ”No encoding supplied: defaulting to UTF-8.
Warning message:
“JSON string contains (illegal) UTF8 byte-order-mark!”No encoding supplied: defaulting to UTF-8.
Warning message:
“JSON string contains (illegal) UTF8 byte-order-mark!”
  1. 'value'
  2. 'date'
  3. 'indicatorID'
  4. 'indicator'
  5. 'iso2c'
  6. 'country'

Veri setimizin üst kısmına bir bakalım. Neler varmış? Bir de ben internetten çektiğim veriyi daima başka bir değişkene de (wb2) aktarıyorum ki mevcut veriyi değiştirirken yanlışlık yaparken orjinal veriyi tekrar internete bağlanmadan yükleyebileyim.

In [4]:
head(wb_dat)
wb2<-wb_dat
valuedateindicatorIDindicatoriso2ccountry
15533.69 2016 NY.GDP.PCAP.PP.KD GDP per capita, PPP (constant 2011 international $)1A Arab World
15328.98 2015 NY.GDP.PCAP.PP.KD GDP per capita, PPP (constant 2011 international $)1A Arab World
15140.19 2014 NY.GDP.PCAP.PP.KD GDP per capita, PPP (constant 2011 international $)1A Arab World
15037.57 2013 NY.GDP.PCAP.PP.KD GDP per capita, PPP (constant 2011 international $)1A Arab World
14852.63 2012 NY.GDP.PCAP.PP.KD GDP per capita, PPP (constant 2011 international $)1A Arab World
14463.51 2011 NY.GDP.PCAP.PP.KD GDP per capita, PPP (constant 2011 international $)1A Arab World

Veri ile işlem yapmak ve sütunlara bölmek

Bir de Dünya Bankası veri tabanında yer alan ülkelerin isim ve bilgilerini alalım. Çünkü gelen veri seti, çok kompakt, yani kaç veri istersek isteyelim değerler hep "value" sütununda, veri ismi de "indicator" sütununda. Burada değişkenleri sütunlara yaymamız gerekecek.

Önce sistemdeki tüm ülkelerin isimlerini wbcountries() komutu ile çekerek başlıklarına names komutu ile bakalım.

In [5]:
wb_countries <- wbcountries() 
names(wb_countries)
  1. 'iso3c'
  2. 'iso2c'
  3. 'country'
  4. 'capital'
  5. 'long'
  6. 'lat'
  7. 'regionID'
  8. 'region'
  9. 'adminID'
  10. 'admin'
  11. 'incomeID'
  12. 'income'
  13. 'lendingID'
  14. 'lending'

Verilerdeki bölge değişkenlerini iso2c altında birleştirelim

In [6]:
wb_dat <- merge(wb_dat, y = wb_countries[c("iso2c", "region")], by = "iso2c", all.x = TRUE)

wb_dat <- subset(wb_dat, region != "Aggregates") # this also removes NAs

Şimdi bu karışık kodlara ait verileri yeni isimlendirdiğimiz sütunlara çekelim. Öncelikle "NY.GDP.PCAP.PP.KD" kodunu GDP olarak değiştirelim. Bu yöntem yerine ayırıp sonra sütun isimlendirme de yapılabilir. Bunu web'den aldığım bir koddan değiştirerek uyguladım, daha güvenli bir yöntem olabilir.

Önce kodları isimlendirelim

In [11]:
wb_dat$indicatorID[wb_dat$indicatorID == "NY.GDP.PCAP.PP.KD"] <- "GDP"
wb_dat$indicatorID[wb_dat$indicatorID == "EG.ELC.NGAS.ZS"] <- "gas"
wb_dat$indicatorID[wb_dat$indicatorID == "EG.ELC.COAL.ZS"] <- "coal"
wb_dat$indicatorID[wb_dat$indicatorID == "EG.ELC.RNEW.ZS"] <- "renewables"
wb_dat$indicatorID[wb_dat$indicatorID == "EG.ELC.ACCS.UR.ZS"] <- "urbanaccess"
wb_dat$indicatorID[wb_dat$indicatorID == "EG.ELC.ACCS.RU.ZS"] <- "ruralaccess"
wb_dat$indicatorID[wb_dat$indicatorID == "SP.POP.TOTL"] <- "population"
wb_dat$indicatorID[wb_dat$indicatorID == "4.1.1_TOTAL.ELECTRICITY.OUTPUT"] <- "electricityGWh"
wb_dat$indicatorID[wb_dat$indicatorID == "2.1_SHARE.TOTAL.RE.IN.TFEC"] <- "reinTFEC"
wb_dat$indicatorID[wb_dat$indicatorID == "1.1_TOTAL.FINAL.ENERGY.CONSUM"] <- "TFEC"

Eğer yüklü değil ise "reshape2" kütüphanesini kurmamız gerekir bunun için de

In [12]:
install.packages("reshape2")
Updating HTML index of packages in '.Library'
Making 'packages.html' ... done

Ben de zaten kurulu olduğundan reshape2 kütüphanesinden dcast komutu ile indicatorID sütunundaki daha önce isimlendirdiğim tüm verileri karşılık gelen değerleri ile ayrı sütunlara çeviriyorum, yeni veri matrisini tekrar wb_dat olarak adlandırıyorum.

In [13]:
library(reshape2)
wb_dat <- dcast(wb_dat, iso2c + country + date  ~ indicatorID,  value.var = 'value')

Şimdi veriye baktığımız zaman, head(wb_dat) ile, ayrı sütunlarda her bir ülke için 1960 dan buyana tüm verilerin gruplandığını göreceğiz.

In [14]:
head(wb_dat)
iso2ccountrydatecoalelectricityGWhgasGDPpopulationreinTFECrenewablesruralaccessTFECurbanaccess
AD Andorra1960 NA NA NA NA 13411 NA NA NA NA NA
AD Andorra1961 NA NA NA NA 14375 NA NA NA NA NA
AD Andorra1962 NA NA NA NA 15370 NA NA NA NA NA
AD Andorra1963 NA NA NA NA 16412 NA NA NA NA NA
AD Andorra1964 NA NA NA NA 17469 NA NA NA NA NA
AD Andorra1965 NA NA NA NA 18549 NA NA NA NA NA

Şimdi de veri setimizin bir özetine bakalım, görüldüğü üzere 12377 adet veri satırından oluşmakta, ama bunların bir kısmı boş ya da eksik veri. Ayrıca burada verilerimizin hangi aralıkta yer aldığı, ortamalarının ne olduğu da rahatlıkla görülebilir.

In [15]:
summary(wb_dat)
    iso2c             country              date                coal        
 Length:12377       Length:12377       Length:12377       Min.   :  0.000  
 Class :character   Class :character   Class :character   1st Qu.:  0.000  
 Mode  :character   Mode  :character   Mode  :character   Median :  0.115  
                                                          Mean   : 17.593  
                                                          3rd Qu.: 28.102  
                                                          Max.   :100.000  
                                                          NA's   :6447     
 electricityGWh         gas               GDP             population       
 Min.   :      0   Min.   :  0.000   Min.   :   247.4   Min.   :4.279e+03  
 1st Qu.:    504   1st Qu.:  0.000   1st Qu.:  2776.5   1st Qu.:4.491e+05  
 Median :   5786   Median :  1.507   Median :  8182.8   Median :4.047e+06  
 Mean   :  82302   Mean   : 17.703   Mean   : 15247.4   Mean   :2.379e+07  
 3rd Qu.:  37177   3rd Qu.: 23.311   3rd Qu.: 20821.9   3rd Qu.:1.292e+07  
 Max.   :5665745   Max.   :100.000   Max.   :135318.8   Max.   :1.379e+09  
 NA's   :7220      NA's   :6447      NA's   :7444       NA's   :114        
    reinTFEC        renewables       ruralaccess          TFEC         
 Min.   : 0.000   Min.   :  0.000   Min.   :  0.01   Min.   :       0  
 1st Qu.: 3.752   1st Qu.:  0.022   1st Qu.: 34.21   1st Qu.:   26267  
 Median :20.034   Median : 13.959   Median : 95.62   Median :  131999  
 Mean   :31.865   Mean   : 29.864   Mean   : 70.57   Mean   : 1332219  
 3rd Qu.:55.975   3rd Qu.: 55.786   3rd Qu.:100.00   3rd Qu.:  674776  
 Max.   :98.343   Max.   :100.000   Max.   :100.00   Max.   :76546090  
 NA's   :7375     NA's   :7207      NA's   :7354     NA's   :7186      
  urbanaccess    
 Min.   :  3.50  
 1st Qu.: 88.86  
 Median :100.00  
 Mean   : 88.96  
 3rd Qu.:100.00  
 Max.   :100.00  
 NA's   :8188    

Veri setinden bir kısım seçmek

Hazır veri setimiz tam iken burada bir komut ile değişkenlerimizi diske saklayalım. Bunun için saveRDS komutu yeterli olacaktır. Komutun kullanımı çok basit, doğrudan komutu yazıp, değişkeni ve dosya ismini yazıp saklıyoruz.

In [17]:
saveRDS(wb_dat,"ulkeverileri.rds")

Tüm veri setimiz görüldüğü üzere oldukça geniş. Ben analiz için daha çok 2000 yılı sonrası verilerini kullanmak istiyorum, bu sebeple wb_dat verisinden 2000 yılı sonrası verilerini seçerek, wb_dat verisine geri yüklüyorum. Artık wb_dat da sadece 2000 yılından sonraki veriler var.

In [18]:
# yıl veya değer seçelim
wb_dat<-subset(wb_dat,date>2000)

Şimdi de yeni bir veri çerçevesi oluşturarak, sütunları tekrar isimlendirelim. Bu işleme gerek olmayabilir, ama olaki siz de benim gibi belki bir çok veri tabanından veri çekerseniz bu şekilde bir birleştirme gerekebilir. colnames komutu ile de sütunlara isimlerini verelim.

data_set isimli verisetimize baktığımız zaman ise bir sürü olmayan veri (NA)lar göreceğim. Hatırlarsanız yukarıda Andorra'nın 1960'dan başlayan veri setleri yoktu. En üstte hep bu ülkenin 1960lı yıllar verileri olduğundan bu veriler olmayabilir.

In [16]:
data_set<-data.frame(wb_dat$coal,wb_dat$gas, wb_dat$GDP, 
                     wb_dat$ruralaccess, wb_dat$urbanaccess, wb_dat$renewables, wb_dat$TFEC, wb_dat$reinTFEC,
                     wb_dat$electricityGWh, wb_dat$population)
colnames(data_set)<-c("coal","gas","gdp","raccess","uaccess", "ren","TFEC","renTFEC","elec","pop")
head(data_set)
coalgasgdpraccessuaccessrenTFECrenTFECelecpop
NA NA NA NA NA NA NA NA NA 13411
NA NA NA NA NA NA NA NA NA 14375
NA NA NA NA NA NA NA NA NA 15370
NA NA NA NA NA NA NA NA NA 16412
NA NA NA NA NA NA NA NA NA 17469
NA NA NA NA NA NA NA NA NA 18549

NA olmayan verileri bulmak

Normalde NA, yani olmayan verileri, birçok yöntemle elimine edebiliriz. Burada ben herhangi bir satırda NA var ise o satırın çıkmasını isteyeceğim. Bunun için de complete.cases komutunu kullanıyoruz. Tüm sütunlarında veri olan satırların numarasınız complete.cases(data_set) ile nasiz_veriler değişkenine atarak başlığına bakıyoruz.

In [20]:
nasiz_veriler<-data_set[complete.cases(data_set),]

head(nasiz_veriler)
coalgasgdpraccessuaccessrenTFECrenTFECelecpop
880 96.29391 111066.75100 100 0 656954.1 0.000000017080 1860174
890 96.29416 105775.48100 100 0 780809.5 0.000000017351 1970026
900 96.29729 103204.56100 100 0 719429.4 0.188369218689 2086639
910 96.29084 98788.69100 100 0 737442.3 0.150356221730 2207405
920 96.29255 100101.45100 100 0 820351.9 0.120145323736 2328686
930 96.89376 101556.92100 100 0 875288.9 0.112604524982 2448820

Yeni sütunlar eklemek veya hesaplamak

Bu bilgisayar işlerinin sağı solu belli olmadığından, ben "nasiz_veriler" değişkeni üzerinde değil, değişkeni kopyaladığım nasiz_veriler2 değişkeni üzerinden işleme devam edeceğim. Bu çalışmalar esnasında genelde bir R defteri haftalarca değiştirildiğinden ben her aşamada veri yedekliyorum.

Ardından GDP ve TFEC ve daha sonra elec verilerinin logarithmalarını hesaplayacağım için bu sütunlarda 1'den büyük değerleri alıyorum. 0'dan büyük değerleri almam matematiksel olarak yeterli ama 1'den büyük alarak güvenilir tarafta kalıyorum. 3.sütun GDP, 7.sütun da TFEC(total final energy consumption, nihai enerji tüketimi). Bu iki sütunun da 1'den büyük olduğu satırları alıyorum.

Kodlama stili olarak ben genelde KISS, kullanıyorum, yani zekice birşey yapmamaya çalışıyorum. Sadece adım adım neyi değiştirince ne olduğu, nasıl geliştiğini görmeye çalışıyorum. Burada c(3,7) ve & ile mantıksal operatör de kullanılabilir belki. Ama ben bildiğim ve hatayı izleyebileceğim yolu tercih ediyorum

In [21]:
nasiz_veriler2<-nasiz_veriler
nasiz_veriler2<-nasiz_veriler2[nasiz_veriler2[,7]>1.0,]
nasiz_veriler2<-nasiz_veriler2[nasiz_veriler2[,3]>1.0,]

Şimdi de sütunlar hesaplayalım. R'da veri çerçevesinde yeni bir sütun eklemek kolay. Sadece yeni sütun ismini yazarak, içinde ne olması gerektiğini belirtiyorsunuz. İlk satırda görüleceği üzere, nasiz_veriler2 'deki TFEC sütununun logarithmasını alarak logTFEC diye bir sütun oluşturuyorum. 3.satırda 1 milyon ile çarpma sebebi, değişkenin GWh olması ben ise birey başına kWh elektrik üretimi vs hesaplayacağım. Bu sebeple GWh'i kWh'e çeviriyorum.

Tüm hesaplamalardan sonra değişkene tekrar bakalım

In [22]:
nasiz_veriler2$logTFEC<-log(nasiz_veriler2$TFEC)
nasiz_veriler2$logGDP<-log(nasiz_veriler2$gdp)
nasiz_veriler2$elecPerPop<-(nasiz_veriler2$elec/nasiz_veriler2$pop)*1000000
nasiz_veriler2$TFECPerPop<-nasiz_veriler2$TFEC/nasiz_veriler2$pop
nasiz_veriler2$logelec<-log(nasiz_veriler2$elec)
head(nasiz_veriler2)
coalgasgdpraccessuaccessrenTFECrenTFECelecpoplogTFEClogGDPelecPerPopTFECPerPoplogelec
880 96.29391 111066.75100 100 0 656954.1 0.000000017080 1860174 13.39537 11.61789 9181.9370.3531681 9.745663
890 96.29416 105775.48100 100 0 780809.5 0.000000017351 1970026 13.56809 11.56907 8807.4980.3963448 9.761405
900 96.29729 103204.56100 100 0 719429.4 0.188369218689 2086639 13.48621 11.54447 8956.5090.3447791 9.835690
910 96.29084 98788.69100 100 0 737442.3 0.150356221730 2207405 13.51094 11.50074 9844.1380.3340766 9.986449
920 96.29255 100101.45100 100 0 820351.9 0.120145323736 2328686 13.61749 11.51394 10192.8730.352281010.074748
930 96.89376 101556.92100 100 0 875288.9 0.112604524982 2448820 13.68231 11.52837 10201.6480.357432910.125911

Verilerin birbiri ile ilişkisine bakmak

İlinti ya da korelasyonlara bakmak için veri çerçevesini cor komutuna vermemiz yeterli. Her sütunun diğer sütunlar ile ilişkisine bakan cor komutu ile hangi değişken hangi diğer değişken ile ne kadar ilintili bulmak mümkün

In [24]:
cor(nasiz_veriler2)
coalgasgdpraccessuaccessrenTFECrenTFECelecpoplogTFEClogGDPelecPerPopTFECPerPoplogelec
coal 1.00000000 -0.249834831 0.02328390 0.17787919 0.09448646 -0.392424695 0.188908125-0.28325301 0.18682479 0.190098036 0.2216098 0.17867476 0.041974161 0.07542586 0.2666048
gas-0.24983483 1.000000000 0.36006542 0.25551126 0.18332611 -0.402218559 0.004571554-0.35167354 -0.01552839 -0.004611034 0.1436871 0.25376740 0.066263007 0.25972881 0.1419242
gdp 0.02328390 0.360065419 1.00000000 0.51061984 0.36076442 -0.273066194 0.121716394-0.47461212 0.15295673 -0.093138938 0.1710664 0.84278274 0.653554692 0.81117274 0.3049134
raccess 0.17787919 0.255511261 0.51061984 1.00000000 0.78807211 -0.318857975 0.138015420-0.77630611 0.15998241 -0.036849944 0.2617162 0.76100278 0.471676613 0.49756093 0.5568590
uaccess 0.09448646 0.183326114 0.36076442 0.78807211 1.00000000 -0.244887290 0.108897485-0.64488873 0.12029398 0.014071480 0.2106451 0.61114590 0.330431915 0.34507919 0.4720971
ren-0.39242469 -0.402218559-0.27306619 -0.31885798 -0.24488729 1.000000000-0.125937633 0.65208691 -0.12013163 -0.072761256-0.1683442 -0.33884122 -0.007519927-0.16734747 -0.1895366
TFEC 0.18890813 0.004571554 0.12171639 0.13801542 0.10889748 -0.125937633 1.000000000-0.14317142 0.98924194 0.595599659 0.5785818 0.16162271 0.168215868 0.22075290 0.5260688
renTFEC-0.28325301 -0.351673536-0.47461212 -0.77630611 -0.64488873 0.652086911-0.143171416 1.00000000 -0.16358175 0.049313769-0.2189034 -0.69864091 -0.244283478-0.38319137 -0.4537051
elec 0.18682479 -0.015528385 0.15295673 0.15998241 0.12029398 -0.120131630 0.989241937-0.16358175 1.00000000 0.534221195 0.5489908 0.19570790 0.209739150 0.24256730 0.5207105
pop 0.19009804 -0.004611034-0.09313894 -0.03684994 0.01407148 -0.072761256 0.595599659 0.04931377 0.53422119 1.000000000 0.4732312 -0.09557921 -0.068771579-0.06673205 0.3890344
logTFEC 0.22160976 0.143687148 0.17106637 0.26171615 0.21064511 -0.168344207 0.578581811-0.21890342 0.54899084 0.473231174 1.0000000 0.26656372 0.199385991 0.28964818 0.8879130
logGDP 0.17867476 0.253767402 0.84278274 0.76100278 0.61114590 -0.338841217 0.161622712-0.69864091 0.19570790 -0.095579215 0.2665637 1.00000000 0.646732260 0.73873953 0.4949381
elecPerPop 0.04197416 0.066263007 0.65355469 0.47167661 0.33043191 -0.007519927 0.168215868-0.24428348 0.20973915 -0.068771579 0.1993860 0.64673226 1.000000000 0.76907052 0.3973691
TFECPerPop 0.07542586 0.259728808 0.81117274 0.49756093 0.34507919 -0.167347473 0.220752903-0.38319137 0.24256730 -0.066732052 0.2896482 0.73873953 0.769070516 1.00000000 0.3634468
logelec 0.26660477 0.141924238 0.30491340 0.55685895 0.47209715 -0.189536641 0.526068761-0.45370515 0.52071045 0.389034389 0.8879130 0.49493810 0.397369140 0.36344679 1.0000000

Korelasyon tablosunu incelemek

Benim çalışmadaki amacım, herkesin iddia ettiği gibi petrolün, kömürün sonunun gelip gelmediği ve hangi değişkenlerden etkilendiği. "Mesela kömür gelişmede bir adım mıdır?" sorusuna cevap da, ilinti oranı çok düşük 0.02'tür. Yani geliştikçe daha az kömür tüketilir diye birşey söylenemez. Aksine hem ren yani elektrikteki yenilenebilir oranı ve renTFEC nihai enerji talebindeki yenilenebilir oranının katsayıları (negatif)'dir. Yani gelişmiş ülkeler yenilenebiliri sanki daha az kullanan ülkelerdir. Yalnız ilintide sebep sonuç mümkün değildir. Gelişmişlik mesela en çok kişi başı elektrik, enerji ve kırsal da elektriğe erişim ile ilintilidir.

Peki kömür kullanımına dair bir doğrusal regresyon yapsak hangi değişkenlerden kurmamız gerekir.

Bunun için otomatik bir model seçimi yapacağız.

Otomatik regresyon modeli seçme

Dersin bu kısmı biraz İLERİ SEVİYE. Eğer zor geliyorsa, bir sonraki kısımda grafikleme kısmına geçebilirsiniz.

Tüm değişken ve ilinti tablolarını oluşturduktan sonra, ülkelerin kömür kullanım oranları hangi değişkenlerle ilgili bunu bulmak için "leaps" paketini kullanabiliriz. Bunun için önce paketi yüklemek gereki

  • install.packages("leaps")

Paketi yükledikten sonra asıl komutumuz regsubsets. Ben aşağıda bu kütüphane için kullandığım web adreslerini de verdim.

  • regsubsets(coal ~ . , data=nasiz_veriler2 şeklinde devam eden aşağıdaki komutta kömür değişkeninin tüm veri setindeki diğer değişkenlerden hangilerine bağlı olduğunu parametrelerle hesaplatıyoruz.
In [65]:
#--------------------------------------
#best model selection for coal
#-------------------------------------
# web: https://rstudio-pubs-static.s3.amazonaws.com/2897_9220b21cfc0c43a396ff9abf122bb351.html

# install.packages("leaps")

require(leaps)

results<-regsubsets(coal ~ ., data = nasiz_veriler2, nvmax = 1000, nbest=1)

Şimdi ise sonuçları görelim. Öncelikle:

  • summary(results) komutu ile sonuçların özetini alalım
  • which.max(results.summary$adjr2) komutu ile Adjusted R2 (düzeltilmiş r-kare)'ye göre em iyi sonucu bul diyoruz
  • results.by.adjr2 komutu ile hangi denklemin en iyi sonucu verdiğini ekrana yazıyoruz
  • plot komutu ile de hangi değişkenler ile en yüksek R2 elde edildiğini çizdiriyoruz
In [66]:
results.summary<-summary(results)
results.by.adjr2 <- which.max(results.summary$adjr2)
results.by.adjr2
results.summary$adjr2[169]
results.summary$which[results.by.adjr2,]
13
[1] NA
(Intercept)
TRUE
gas
TRUE
gdp
TRUE
raccess
TRUE
uaccess
TRUE
ren
TRUE
TFEC
FALSE
renTFEC
TRUE
elec
TRUE
pop
TRUE
logTFEC
TRUE
logGDP
TRUE
elecPerPop
TRUE
TFECPerPop
TRUE
logelec
TRUE

Yukarıda kodlama açısından tüm değişkenleri ekleyerek sadece TFEC değişkenini kabul etmediğini gördük. TFEC değişkeninşi kabul etmeden elde edilen en yüksek yakınsama değeri 0.445'tir. Bunu da ekrana yazdırdıktan sonra, sonuçları ekrana çizelim.

Birşeye dikkat etmekte fayda var, otomatik seçimde modelin doğruluğu değil belirtilen yakınsamaya bakılıyor. Yani R2 veya BIC değerlerini minimum veya maksimum yapan değerler seçiliyor.

In [67]:
plot(results , scale = "adjr2", main = "Adjusted R^2")

Görüldüğü üzere en yüksek R2, TFEC değişkeni dışarıda bırakıldığı durumda elde ediliyor.

Verileri Grafiklendirmek için ggplot2 ve ggthemes

ggplot2 kütüphanesi grafikleme açısından en popüler kütüphanelerden biridir. Ben buna ek olarak "ggthemes" kütüphanesini de kullanıyorum. Arada raporlar daha iyi gözüksün diye bu kütüphanedeki "The Economist" veya "Wall Street Journal" temalarını seçiyorum.

Aşağıdaki grafikleme de "The Economist"'in beyaz temasını kullanacağız.

Yoksa, önce ggplot2 ve ggthemes'i kuralım

In [ ]:
install.packages("ggplot2")
install.packages("ggthemes")

Şimdi de kurduğumuz kütüphaneleri kullanalım

In [69]:
library(ggplot2)
library(ggthemes)

Şimdi öncelikle veri setimizde gaz ve kömürün elektrikte payı 0'dan, kişi başı elektrik kullanımı da 1000 kWh'dan büyük olan veri satırları için işlem yapacağız. Bunun için subset komutunu kullanıyoruz. Filtreleme için ise "gas>1", mantıksal operatör olarak da "&" kullanılıyor. Yani 3 değişkende de belirli bir sınırın üzerini istiyoruz

2.satırda bu veri kümesinde,

  • x ekseninde toplam elektrik tüketiminin logaritması
  • y ekseninde kömürün elektrik üretimindeki payı
  • renk farklılaştırması için de GSYİH(gayri safi yurt içi hasıla)'yı kullanıyoruz. Daha zengin daha açık renk

3.satırdaki theme_economist_white() komutu ile de meşhur derginin beyaz temasını seçiyoruz.

In [71]:
ggplot(subset(nasiz_veriler2, gas>1 & coal>1 & elecPerPop>1000), 
       aes(x = log(elec), y = coal, colour= logGDP) ) +
       theme_economist_white() + geom_point()

Şimdi bir tane de elektrik tüketimine bakmadan gelişmişlik ile Toplam Nihai Enerji Tüketimindeki yenilenebilir oranına bakalım. Renk skalası da logaritmik toplam enerji tüketimi olsun

In [193]:
#ggplot(subset(wb_dat, gas>1 & coal>1 ), aes(x = log(GDP, y = log(TFEC), colour=ruralaccess ) ) + geom_point()
ggplot(subset(nasiz_veriler2, gas>1 & coal>1 ), 
       aes(x = logGDP, y = renTFEC, colour= logTFEC) ) +
       theme_economist_white() + geom_point()

Sonuç

Bu derste daha karışık daha profesyonel bir analiz denedik. Herşeyi anlamak kolay olmayabilir. Fakat kısaca neler yaptığımıza bakalım

  • Dünya Bankasından veri almayı gördük
  • Bu verileri genişleterek düzgün sütunlu veri çerçeveleri oluşturduk
  • Verilerin bibirbir ile ilişkilerinin incelendiği ilinti matrisi hesaplandı
  • "leaps" paketi ile otomatik model değişkenleri seçtik
  • Grafikleme ve profesyonel tema kullanımını inceledik

Sanıyorum bu kısımda bir çok soru oluşmuştur. Daha kısa kodlarla bu egzersiz yapılabilirmiydi? Sanırım evet Önerilerinizi bekliyorum barissanli2@gmail.com

EK

Otomatik model seçimi konusunda meraklı olanlar için aşağıda bir de meifly kütüphanesi ile otomatik model seçimi denemesi var:

In [75]:
#install.packages("meifly")
library(meifly)
In [ ]:
# coal~gas+raccess+uaccess+ren+pop+logelec,data=nasiz_veriler2
# https://rstudio-pubs-static.s3.amazonaws.com/2897_9220b21cfc0c43a396ff9abf122bb351.html
fitall.out <- fitall(y = nasiz_veriler2$coal,
                     x = nasiz_veriler2[,c(2,3,4,5,6,7,8,9,10,11,12,13)])
Fitting 16383 models...
In [ ]:
fitall.out.aic <- t(sapply(fitall.out, extractAIC))

## Create an order list of increasing AIC
final.out.order <- order(fitall.out.aic[,2])

## Show the result for the best model
fitall.out[final.out.order][1]
In [313]:
summary(fitall.out[final.out.order[1]])
dflogLAICBICR2adjR2nmodel
m84656 -580.7239-1173.448-1190.7450.41557120.397164 132 8465
In [ ]: