Başlangıç
R Studio ve ilk kodlar
Elektrik Talep Analizi - (Histogram)
Elektrik Talep Analizi - (Filtreleme)
Elektrik Talep Analizi - (Verinin Bileşenleri)
Elektrik Talep Analizi - (Programlamaya Giriş)
Dogrusal Regresyon ile Elektrik Talebi
Üssel Düzgünleştirme ve STL ile Elektrik Talebi
Elektrik Talebinde Farklı Periyodlar (ARIMA ve TBATS)
2015-2024 - Aylık Doğalgaz Talebi
Ders 5 - Programlama

R ile Enerji Analizi – Bölüm 5 – Biraz da Programlama – Yıllara göre Haftanın Günleri Grafiği

 

Özet: Bu bölümde daha önceki çalışmalarımızın üzerine, basit birkaç programlama denemesi yapacağız. Kullanacağımız komutlar “for”, “replicate”, “seq” gibi basit komutlar. Bir de “{“ ile kod bloklarını göreceğiz.

Bu Bölümdeki Fonksiyonlar

read.csv

plot(veri, pch=<veri noktası karakter no>, cex=<karakter büyüklüğü>,col=”renk”)

par(mfrow=c(2,2))

dev.off()

with(<2007’li yıl sütunları için>, <ortalama_tuketimi ortalama_sicaklik’a göre çiz>)

ilk:son

seq(başlangıç, bitiş, adım miktarı)

c(başlangıç:bitiş)

for(değişken “in” dizi){

  komut1(değişken)

  komut2(değişken)

}

replicate(<tekrar sayısı>,<tekrar edilecek kısım>)

 

5.0. Veriyi yüklemek

Her zamanki gibi veri dosyamızı tekrar yükleyelim.

veri=read.csv("http://www.barissanli.com/calismalar/dersler/r/elektrik-talep.csv", header=TRUE,sep=";",dec=".")

Artık veri dosyamız  R Studio’dan erişilebilir.

5.1. Ekranı 4’e bölmek

Daha önce yaptığımız analizlerde, hep tek bir çizim üzerinden hareket etmiştik. Şimdi aynı anda ekranda 1’den fazla çizimi görüntülemek için yapmamız gerekenlere bakabiliriz.

Amaç: Her yıl için ortalama_tuketim’in ortalama_sicaklik ile değişimini tek ekranda dört ayrı çizimle görmek

Öncelikle grafik parametrelerimizde ekranı 4 ayrı parçaya ayırmaya çalışalım. Bunun için bir komut bir de mfrow parametresini kullanacağız.

par(…parametreler)

par ile yapacağımız çizimlerdeki parametreleri önceden set edebiliyoruz. Detaylarını

?par

Yazarak örneği ile görebilirsiniz.

Bu sefer par komutu ile mfrow parametresini değiştireceğiz. 2x2 yani 4 ayrı çizim istiyoruz. Ve burada önce ilk iki satırı sonra alttaki iki satırı dolduracağız.

Hatırlatmak gerekirse, “c(2,2)”,  bir vektör olarak iki tane iki içeriyor. “mfrow” komutunda bunların ilki satır sayısını, ikincisi ise  sütun sayısını veriyor.

Biz şimdilik 2x2 bir çoklu çizim ekranı istiyoruz.

par(mfrow=c(2,2))

Eğer ekranı resetleyip herşeyi eski haline getirmek isterseniz

dev.off()

yazmanız yeterli

 

5.2. Dört  yıl grafikleri aynı ekranda

Şimdi hiç grafik parametrelerine girmeden sırasıyla aşağıdaki işlemleri yapalım

1.      Bu egzersizi daha önce yapmış olma ihtimalinize karşı, herşeyi sıfırlayalım. “dev.off()”

2.      Sonra ekranı 4 eşit parçaya bölelim “par(mfrow=c(2,2))”

3.      Daha sonra ise “with” ile filtreleyerek, 2007, 2008, 2009 ve 2010 yıllarını ekrana çizelim

Evet ilk iki komut direkt aynen ekrana yansıtılır.

dev.off()

par(mfrow=c(2,2))

Şimdi artık hangi çizimi yapsak, ekranda soldan sağa, yukarıdan aşağı doğru sırasıyla ekrana çizilecektir. Yani her “plot” komutu ekranı sıfırlamayacak, bir öncekini değiştirmeden ekranda kendine ayrılan boşluğa çiziliecektir.

Belki burada “with” komutunu hatırlatmakta yarar var.

“ with(<veri seti koşulu>, komut)”

Şeklinde sınıflandırabileceğimiz bir komut. Mesela

with(<2007’li yıl sütunları için>, <ortalama_tuketimi ortalama_sicaklik’a göre çiz>)

şeklinde kullanabiliriz.

Ekranı 4’e böldüğümüz için RStudio’da her bir komuttan sonra grafiğin ekrana nasıl yansıdığına dikkat edin. Grafikleri birbirinden ayırmak için her birine birer başlık da eklememiz lazım. Bunun için “main=” parametresini kullanıyoruz.

dev.off()

null device

          1

par(mfrow=c(2,2))

with(veri[veri$yil==2007,],plot(ortalama_sicaklik,ortalama_tuketim,main="2007 yılı"))

with(veri[veri$yil==2008,],plot(ortalama_sicaklik,ortalama_tuketim,main="2008 yılı"))

with(veri[veri$yil==2009,],plot(ortalama_sicaklik,ortalama_tuketim,main="2009 yılı"))

with(veri[veri$yil==2010,],plot(ortalama_sicaklik,ortalama_tuketim,main="2010 yılı"))

Biraz yorum yapalım, grafiklere baktığımız zaman hangi yılların daha sıcak ve ılık geçtiğini siyah çizgilerin yoğunlaşmasından görüyoruz. Buraya göre 2007 ve 2009  yılının diğer yıllara göre biraz daha soğuk geçtiği, 2008’in sıcak geçtiği, 2010 yılının da ılık bir yıl olduğu iddia edilebilir.

 

5.3. Diziler ve  “for” döngüsü

Az önceki örnekte her yılı tek tek girmek hiçte kolay değildi, Bu tip durumlar için elimizde bir “for” komutu bulunmaktadır. “for” komutu kısaca, kendisine parametre olarak girilen dizi veya vektördeki elemanların hepsi için takip eden kodu çalıştırır.

For’un hangi sayılar için çalışacağını belirlemek için ise “seq”(yani sequence, dizi) komutunu kullanabiliriz.

Amacımız 1’den 10’a kadar birer birer artan bir seri elde etmek.

Bunu iki şekilde yapabiliriz.

1:10

Ya da

seq(1,10,1)  # seq(başlangıç, bitiş, adım miktarı)

Veya direkt bir vektör olarak da girebiliriz

c(1:10)

c(2007,2008,2009,2010)

c(2007:2010)

Şimdi ise her bir parametreyi kullanarak birşeyler yazdırmaya çalışalım. 2007 ile 2010 arasındaki her bir yıl için “Yıl=<yıl>” yazdıralım. Bunun için daha önceki dizileri bir yil değişkenine atıyoruz. “yil in 2007:2010” diyerek, 2007 ve 2010 arasındaki her bir değişkeni sıra ile yil değişkenine atıyoruz.

for(yil in 2007:2010) cat("Yil=",yil)

komutu ile arka arkaya

for(yil in 2007:2010) cat("\nYil=",yil)

ile her bir satırbaşından sonra (“\n” satırbaşına işarettir) istediğimiz diziyi yazar

Burada “cat” Linux ve Unix bilenlerin bildiği üzere iki diziyi birleştirir. Burada “Yil=” ve yil değişkenini birleştiriyor.

Peki ya “for” döngüsünden aldığımız parametreyi bir den fazla komutu çalıştırmak için kullanmak istersek ne yapacağız ? bunun için de “{}” kullanmamız gerekir.

Kısaca :

for(değişken “in” dizi){

  komut1(değişken)

  komut2(değişken)

}

Deneyelim. Sıra ile 1’den 10’a kadar olan sayıların karesi ve küpünü yan yana yazdıralım.

for(degisken in 1:10){

  cat(degisken)

  cat("   Karesi=",degisken^2)

  cat("   Küpü=",degisken^3)

  cat("\n") 

}

 

Görüldüğü üzere “{“ ile başlayan kısım “}” ile kapatılana kadar, “for” ile tekrar edilen dizinin her defasında aynı işlemi yapıyor.

 

5.4. Herşeyi “for” ile tekrar yapmak

Şimdi 5.2’de yaptığımız ve dört defa tekrarladığımız komutu bir kez de for ile yapalım.

Burada her bir yıl için öncelikle “yil_d” diye bir değişken tanımlıyoruz ki veri$yil’daki “yil” ile karışmasın. Programımızın mantığı şu şekilde

1.      Herşeyi sıfırla

2.      2x2 bir çizim ekranı parametresi ver

3.      “for” döngüsü ile 2007’den 2010’a kadar her bir değişkeni sıra ile yil_d’ye ata

4.      “{“ ile başlayan noktadan “}” ile biten noktaya kadar olan alandaki tüm komutlar için “yil_d” değişkenini kullanarak :

a.       Önce veri setinde “yil” sütunu “yil_d” ye eşit olan sütunları seç

b.      (a) da seçilen sütunlar için grafiği çiz, başlığına (main) “yil_d” değişkenini yerleştir.

 

dev.off()

par(mfrow=c(2,2))

for(yil_d  in 2007:2010){

    with(veri[veri$yil==yil_d,],plot(ortalama_sicaklik,ortalama_tuketim,main=yil_d))

}

 

5.5. İşleri Karıştıralım : Her Bir Yıl için Günlere ayrıştırmak

Evet yıllara göre verimi çizdirdim. Fakat daha farklı bir analiz yapmak istiyorum. Haftanın günlerine göre ortalama_tüketim’in ortalama tüketim ile değişimi nasıl acaba?

Amaç: Her bir yıl için hafta içi günler için bir renk, Cumartesi için ayrı renk, Pazar için ayrı renk ile görmek istiyorum.

Hatırlayalım, günlerim Pazartesi=1 ile başlıyor ve Pazar=7 ile son buluyordu. Yani ilk 5 gün için aynı renkler, sonra Cumartesi için başka bir renk, Pazar için ayrı bir renk tanımlayacağım.

Bunun için “replicate”, komutunu kullanacağım.

Yani renklerimi :

renklerim=c("red","red","red","red","red","green","blue")

 

şeklinde tanımlayabilirim. Fakat daha kolayı var. Madem 5 tane “red” yani kırmızım var:

replicate(5,"red")

Bunu da diğer renklere ekleyerek

c(replicate(5,"red"),"green","blue")


Yapabiliriz. Yani 5 kırmızı , bir yeşil, bir de mavi. İlk 5 kırmızı hafta içi güne denk gelirken, yeşil cumartesiye (6. Sırada olduğundan), mavi ise pazara denk gelecektir.

 

Artık elimde 7 renkli bir seri var. Şimdi az önceki grafiklerimizi renklendirelim. Bu sefer “plot” komutunun “col=” parametresini “renklerim[haftagunu]” ile çağıracağım.

“renklerim[haftagunu]” parametresi, haftagunun’nun 1 ile 5 arasında olduğu günler için kırmızı, 6 için yeşil, 7 için mavi değerini verecektir. Bu da plot komutunun “col=” parametresine ekleniyor

par(mfrow=c(2,2))

for(yil_d  in 2007:2010){ with(veri[veri$yil==yil_d,],plot(ortalama_sicaklik,ortalama_tuketim,col=renklerim(haftagunu),main=yil_d))

}

 

 

Şimdi çizdirelim:

 

Burada isterseniz daha önce “pch=” gibi parametreleri de ekleyebilirsiniz.

 

5.6. Biraz Analiz

Yıllara göre hafta sonunun değişkenliklerine baktığımızda, pazarın ayrıştığını ama cumartesinin tam olarak ayrışmadığını gözlemliyoruz. Her ne kadar Cumartesi diğer hafta içi günlere göre tüketimi düşük olsa da, özellikle pazar gününde ciddi bir düşüş bulunmaktadır.

Bir de dikkat ettiysek bazı seri dışında davranan günler var, mesela haftaiçi olmasına rağmen tamamen “outlier” diyebileceğimiz noktalar… Bu günler de “bayram günleri”’dir. Özellikle  daha önce değindiğimiz gibi, kurban ve ramazan bayramlarında tüketim ciddi oranda düşüyor.

Peki Pazar günlerinin diğer günlerden farkı ne? Bunu hepimiz evimizden, işimizden daha doğrusu yaşam aktivitemizden biliyoruz. Fakat cevabını bir sonraki bölümde vermeye çalışacağız.

5.7. Bölüm Sonu

Bu bölümde, R’da programlamaya küçük bir giriş yaptık. Aynı işi 4 kere yapmak için, 4 defa komut girmek yerine “for” komutunu kullanmayı öğrendik.

“for” komutu parametre olarak girilen bir dizinin her bir elemanı için kendinden sonra gelen komut bloğunu veya “{“ ile “}” kısmı tekrar ediyordu.

Daha sonra “replicate” ile kırmızı rengi 5 kere tekrar ederek, ona yeşil ve mavi renklerle birleştirdik.

 

Komutlar

veri=read.csv("http://www.barissanli.com/calismalar/dersler/r/elektrik-talep.csv", header=TRUE,sep=";",dec=".")

?par

?mfrow

par(mfrow=c(2,2))

with(veri[veri$yil==2007,],plot(ortalama_sicaklik,ortalama_tuketim))

plot.new()

dev.off()

par(mfrow=c(2,2))

with(veri[veri$yil==2007,],plot(ortalama_sicaklik,ortalama_tuketim))

dev.off()

par(mfrow=c(2,2))

with(veri[veri$yil==2007,],plot(ortalama_sicaklik,ortalama_tuketim))

with(veri[veri$yil==2008,],plot(ortalama_sicaklik,ortalama_tuketim))

with(veri[veri$yil==2009,],plot(ortalama_sicaklik,ortalama_tuketim))

dev.off()

par(mfrow=c(2,2))

with(veri[veri$yil==2007,],plot(ortalama_sicaklik,ortalama_tuketim,main="2007 yılı"))

with(veri[veri$yil==2008,],plot(ortalama_sicaklik,ortalama_tuketim,main="2008 yılı"))

with(veri[veri$yil==2009,],plot(ortalama_sicaklik,ortalama_tuketim,main="2009 yılı"))

with(veri[veri$yil==2010,],plot(ortalama_sicaklik,ortalama_tuketim,main="2010 yılı"))

for(ade in seq(1,1,10)) print(ade)

seq(1,10,1)

for(ade in seq(1,1,10)) print(ade)

for(ade in seq(1,10,1)) print(ade)

1:10

for(a2 in 1:10) print(a2)

seq(1,10,1)

yillar=c(2007,2008,2009,2010)

c(2007,2008,2009,2010)

c(1:10)

c(2007:2010)

for(yil in 2007:2010) cat("\nYil=",yil)

for(degisken in 1:10){

 cat(degisken)

 cat("   Karesi=",degisken^2)

 cat("   Küpü=",degisken^3)

 cat("\n")

}

dev.off()

par(mfrow=c(2,2))

for(yil_d  in 2007:2010){

 with(veri[veri$yil==yil_d,],plot(ortalama_sicaklik,ortalama_tuketim,main=yil_d))

dev.off()

par(mfrow=c(2,2))

for(yil_d  in 2007:2010){

 with(veri[veri$yil==yil_d,],plot(ortalama_sicaklik,ortalama_tuketim,main=yil_d))

}

replicate(4,"a")

renklerim=c("red","red","red","red","red","green","blue")

replicate(5,"red")

c(replicate(5,"red"),"green","blue")

renklerim=c("red","red","red","red","red","green","blue")

renklerim=c(replicate(5,"red"),"green","blue")

for(yil_d  in 2007:2010){

 with(veri[veri$yil==yil_d,],plot(ortalama_sicaklik,ortalama_tuketim,col=renklerim[haftagunu],main=yil_d))

}

par(mfrow=c(2,2),pch=19,cex=0.7)

for(yil_d  in 2007:2010){

with(veri[veri$yil==yil_d,],plot(ortalama_sicaklik,ortalama_tuketim,col=renklerim(haftagunu),main=yil_d))

}

par(mfrow=c(2,2),pch=19,cex=0.7)

for(yil_d  in 2007:2010){

with(veri[veri$yil==yil_d,],plot(ortalama_sicaklik,ortalama_tuketim,col=renklerim[haftagunu],main=yil_d))

}