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
NOAA'dan günlük sıcaklık verilerine erisim
TCMB(Merkez Bankasi) verilerine erisim
EIA (ABD Eneji Bilgi Dairesi) verilerine erisim

R ile NOAA üzerinden internet'ten Türkiye Şehirlerinin Sıcaklık verilerini İndirmek

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

Komutlar:

library(noaa)
ncdc_locs
grepl
ncdc_datasets
ncdc_datacats
ncdc_stations
ncdc
ncdc_plot
plot

Enerji analizlerindeki en temel parametrelerden biri sıcaklıktır. Internet'te bir çok kaynakta ücretsiz sıcaklık verisi olmasına rağmen, bunları R üzerinden indirerek, işlemler yapmak, kodlama ve biraz da sabır istemektedir. Bu makalede R ile NOAA (ABD Ulusal Oşinografi ve Atmosfer kurumunun)'ın herkese açık sisteminden verileri indirerek, biraz işlem yapıp, sonra da grafiklemeyi deneyeceğiz.

Amaç: Ankara için 2016 ve 2017 birer yıllık sıcaklık değerlerinin grafiklenmesi

NOAA'dan Giriş Anahtarı Almak

NOAA hizmetini ücretsiz vermesine rağmen sizden bir email isteyerek, bu anahtarı oraya göndermektedir. 2017 Kasım ayı itibari ile bu sayfa

https://www.ncdc.noaa.gov/cdo-web/token

adresindedir.

 

Sonra yukarıdaki alana adını yazdığınız emaile aşağıdaki gibi bir posta geliyor. Ben kendi mail ve anahtarımı resimden sildim ama email ve Token'ın karşısında veriler var.

 

"rnoaa" kütüphanesinin kurulması

Ardından R ekranında, (Rstudio veya R veya jupyter'de) bir sefere mahsus, NOAA verilerine erişim imkanı sağlayacak olan "rnoaa" kütüphanesini sisteme kurmak gerekiyor

Tüm kütüphane kurulduktan sonra, eğer sorun yok ise (error vs), şimdi kütüphaneyi kullanmaya geçebilirsiniz.

rnoaa'nın kullanımı

Kütüphaneyi devreye almak için

library(rnoaa) yazmanız yeterli

tokenX diye benim "XXXX..." atadığım değişkene ise size gelen anahtarı yazın. Eğer anahtar yok ise veri de yok. Her komutun sonunda, anahtarımızı eklemek zorundayız yoksa veri çekemeyiz. Ben kendi anahtarıma

tokenX

ismini verdim.

Veri Yapısı

rnoaa'yı anlamak biraz zaman alabiliyor. Dünya üzerinde yerleşim yerleri var, şehirler gibi, bu yerleşim yerlerinde ise bazen 1 bazen 10'larca hava durumu istasyonları var. Bu istasyonlardaki verilerin sınıflandırıldığı verisetleri ve bu verisetlerinde veritipleri var.

Mesela Ankara ( CITY:TU000005 ) 'daki (GHCND:TUM00017130) istasyonunda, "GHCND" veri tabanı altında günlük en düşük sıcaklıklar "TMIN" var. Yani hiyerarşiye dikkat. Fakat önce şehirleri bir görelim

Yerleşimleri Listelemek

Eğer herşey yolunda olursa önce alfabetik sıralamaya göre ilk 1000 yerleşim yeri ismini indirelim ve bunu ids isimli değişkene depolayalım.


Bir şeye dikkat edin, her komutun arkasından "token=" ile anahtarımızı eklemezsek komut çalışmaz.

Yerleşim yeri verileri şimdi ids isimli değişkende, ids değişkeninin başlangıcına bir göz atalım. "head(ids) komutu ile"

Türkiye'deki Şehirlerin Olduğu Sütunları Bulmak

Listede yok yok, fakat biz daha çok Türkiye'dekiler ile ilgileneceğimizden. Yukarıdaki tabloya dikkat edilirse, "name" sütununda şehrin ismi ve ülke kodu var. Türkiye'nin ülke kodu TU, yani tüm listede isim sütununda ", TU" olan satırları ayıklamak Türkiye'deki yerleşim isimlerini verecektir.

Bunun için de "grepl" komutu ile ", TU" olan yerleşimleri ayırıyoruz.

İsim listesine bakınca kendi aradığım "Ankara, TU"'yu ve onun kimlik kodu olan "id" sütunundaki "CITY:TU000005"' görülüyor.

Lokasyonu belirledikten sonra bu lokasyondaki istasyonları bilmemiz gerekiyor. Yani Ankara'nın kimliği CITY:TU000005 ama buradaki istasyonlar birden fazla olabilir. Bu yerleşimdeki istasyonların isimlerini sormamız gerekiyor. Çünkü sıcaklık verilerini istasyona göre çekeceğiz

Ankara'daki Havadurumu İstasyonunun kodu

 

normalde "stations" verisindeki "data" alt değişkeninde (stations$data)'da benim ekran'da bir alt satıra kaymış olan "id" sütununda GHCND:TUM00017130 isimli istasyon kodunu görebilirsiniz.

Peki Ankara ( CITY:TU000005 ) 'daki (GHCND:TUM00017130) istasyonu ile ilgili hangi verilerin ulaşılabileceğini, depolandığını sorgulayalım.

İstasyona Ait Verisetleri

Bunun için ncdc_datasets komutunda stationid = "GHCND:TUM00017139" da yazabiliriz.

Sonuç aynı olacaktır.

Bu istasyon için 3 tane veri tabanına erişim imkanı vardır bunlar:

GHCND : Günlük özetler (tarihi olarak)

GSOM : Aylık özetler

GSOY : Yıllık özetler

Bu noktaya gelince elimizde Ankara'da istasyon için 3 veri tabanı verisi olduğunu gördük. Fakat bu veritabanlarındaki veri başlıkları neler?

İstasyondaki Verisetindeki Veri Değişkenleri

Bunun içinde stationid de verdiğimiz istasyonun GHCND veri tabanında yer alan veri başlıklarını ncdc_datatypes ile sorgulayacağız:

Görüldüğü üzere bu istasyonda 5 veri var, PRCP (yağış), SNWD(kar kalınlığı), TAVG(ortalama sıcaklık), TMAX(en yüksek sıcaklık), TMIN(minimum sıcaklık)

Veriyi İndirmek

Şimdi ise bu istasyondaki, GHCND verisetindeki TMIN verisini belirtilen tarihler arasında metric olarak okuyalım(Unutmayın tek seferde en fazla 1000 tane indirebilirsiniz):

Bunun için "ncdc" komutunda:

datasetid ile GHCND verisetini

stationid'de daha önce Ankara için istasyon verisini değişkenden veya doğrudan el ile "GHCND:TUM00017130"

datatypeid 'de minimum sıcaklık anlamını taşıyan "TMIN"

startdate başlangıç tarihi (YIL-AY-GÜN)

enddate bitiş tarihi

token anahtarımız tokenX

units ile metrik birimleri (yoksa fahrenheit gelir)

limit ile de veri miktarını sınırlıyoruz, ben hep limit=1000 kullanıyorum, maksimum'a kadar veri çekmek için

 

 

bu çektiğimiz veriyi "mintemp" değişkenine atalım. Eğer sorun yok ise "mintemp" değişkenine kısaca bakalım

Bunun için "head(mintemp)" yazmamız yeterli.

Görüldüğü üzere mintemp içinde data alt kümesinde 8 sütun veri var.

mintemp$data[,4] "value" sütunundaki tüm verilere eşittir. Burada dikkat edilmesi gereken birşey var. İstasyon verisinde ondalık değer kullanılmadığından söz konusu değerin 10'a bölünmesi gerekir.

O yüzden 4.sütundaki tüm verileri 10'da 1'i ile değiştireceğiz:

Bunun için "mintemp$data[,4]<-(mintemp$data[,4])/10" komutu yeterli olacaktır.

Şimdi bu gerçek değişkenin bir de grafiğini görelim. Yani 2016 Kasım'dan 2017 Kasım'a Ankara'daki istasyonun ölçtüğü minimum sıcaklıklar nasıl değişmiş.

Grafiklemek

Bunun için rnoaa kütüphaniesindeki:

ncdc_plot komutuna mintemp verisini girerek

istediğimiz verinin grafiğini elde edebiliriz.

 

 

İşi biraz daha geliştirelim hem 2015-2016 hem 2016-2017 Kasım'dan Kasıma sıcaklık grafiğini çıkaralım.

Bunun için gerekli verileri de "mintemp2016" değişkenine atıp, yine değerleri 10'a bölelim.

Şimdi hem son 1 yıldaki hem de ondan önceki yılın verisini birlikte çizdirelim

Veriler elimizde olduğu için ister histogram yapar, ister matematiksel olacak işlem yapabiliriz.

İyi çalışmalar, önerilerinizi bekliyorum

barissanli2@gmail.com

 

 

Tüm KOD

 

#Tüm kod

library(rnoaa)

tokenX<-"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

ids<-ncdc_locs(locationcategoryid='CITY', sortfield='name', sortorder='asc',token=tokenX, limit=1000)

head(ids)

# Türkiye'deki istasyonlarda ismin sonrasında , TU var. bu satırları görelim grep ile

ids$data[grepl(pattern=", TU",x=ids$data[,3])==TRUE,]

ncdc_datasets( token=tokenX, locationid = 'CITY:TU000005' )

# ncdc_datatypes(stationid = stations$data$id[1], datasetid = "GHCND", token=tokenX)

ncdc_datatypes(stationid = "GHCND:TUM00017130", datasetid = "GHCND", token=tokenX)

mintemp<-ncdc(datasetid = "GHCND",

  stationid = stations$data$id[1],

  datatypeid = "TMIN",

  startdate = "2016-11-10",

  enddate = "2017-11-09",

  token=tokenX,

  units="metric",

  limit=1000)

mintemp$data[,4]<-(mintemp$data[,4])/10

ncdc_plot(mintemp)