library(dplyr)
library(tidyverse)
library(ggplot2)
library(XML)
library(rjson)
library(jsonlite)
library(readr)
library(tm)
library(lubridate)
library(plotly)
library(htmlwidgets)
library(readxl)
Bu kısa bilgi notunda sizlere ülkemizdeki yerel yönetimleri de ilgilendiren Açık Yönetişim Verisi (Open Government Data, OGD) politikalarından ve uygulamalarından bahsedeceğim. Açık Yönetişim Verisi uygulamaları ABD Başkanı Barack Obama’nin 2009 yılında, Beyaz Ev’de geçirdiği ilk gününde imzaladığı Şeffaflık ve Açık Yönetişim Yasasına (Memorandum on Transparency and Open Government) dayanmaktadır. Şeffaflık, kamusal katilim ve işbirliği gibi kavramlar üzerine yükselen Açık Yönetişim Verisi yasası kısaca daha önce görülmemiş boyutlarda verinin (data) kişisel bilgilerden arındırılarak yurttaşların erişimine açılması olarak özetlenebilir. Açık Yönetişim Verisi uygulamalarının arkasında yatan mantık söz konusu verilerin, yurttaşlar ile yerel ve genel kamu otoriteleri arasında karşılıklı iletişimi kuvvetlendirmesi ve otoritelerin uyguladıkları politikalarda veri aracılığıyla yurttaş katılımının artırılmasıdır. Tabi beklenen etkinin ortaya çıkması için verinin nasıl paylaşılacağı önemlidir. Açık Yönetişim Verisi uygulamalarının başarıya ulaşabilmesi için verilerin bazı özellikleri taşıması gerekmektedir. 2009 yılında Açık Yönetişim Çalışma Grubu’na göre Açık Veri aşağıdaki özellikleri taşımalı:
Amerika’daki Açık Yönetişim Verisi uygulamaları kısa surede dünya çapında yaygınlık kazandı. Hem ulusal hem de yerel bazda kamu otoriteleri Açık Veri Portalları (Open Data Portal) aracılığıyla aklınıza gelebilecek pek çok veriyi kamuya açtılar. Söz konusu uygulamaların dünya çapındaki yayılımını görmek için aşağıdaki harita bir fikir vermektedir.
Bununla beraber Açık Yönetişim Verisi uygulamalarından beklenen etkinin ortaya çıkabilmesi için paylaşılan verinin formatı önemli. Yukarıda da bahsedilen 4., 7., ve 8. maddeler veri formatının taşıması gereken özellikleri özetliyor. Bu çerçevede indirilen verinin tamamen lisans gerektirmeyen yazılımlar (Python, R, UnixShell, vb.) aracılığıyla işlenebilir olması gerekiyor. Şekil 2 ABD’de Açık Yönetişim Verisi uygulamaları bağlamında paylaşılan verilerin formatlarına dair bizlere bir fikir veriyor.
Şekil 2’den de görüldüğü gibi OGD kapsamında paylaşılan verilerin büyük çoğunluğunu .csv, .json, .xml gibi lisans gerektirmeyen, bedava (free) formatlar oluşturuyor. Bu görsel, OGD’den beklenen etkinin ortaya çıkması için gösterilen özene bir kanıt sunuyor. Bugün gerek ABD’de, gerekse de Avrupa’da OGD uygulamaları neticesinde yurttaşlar, üniversiteler ve yerel ve kamu otoritelerinin işbirliğine dayalı pek çok gelişme yaşanıyor. Bu gelişmeler kentsel sorunlar için açık veriye dayalı çözümlerden yurttaşlar tarafından geliştirilen veri bazlı uygulamaların açık veri partallarında paylaşılmasına, açık verilerin üniversiteler tarafından Büyük Veri (Big Data) ve Makine Öğrenmesi (Machine Learning) uygulamaları için kullanılmasına kadar geniş bir alana yayılıyor. Dolayısıyla OGD uygulamaları veri bazlı politika ve veri bilimi açısından geniş bir potansiyeli bünyesinde barındırıyor.
Türkiye’de de cılız sayılabilecek bazı OGD uygulamalarından bahsetmek mümkün. Cumhurbaşkanlığı bünyesinde kurulan Dijital Dönüşüm Ofisi Açık Veri politikalarının Türkiye’deki uygulamasından sorumlu. Öte yandan Dijital Dönüşüm Ofisi’nin web sayfasında kısa açıklamalar dışında uzun suredir herhangi bir yeni içerik paylaşımı yapılmış değil.
Bununla beraber bazı büyükşehir belediyeleri OGD uygulamaları kapsamında online Açık Veri Portalları oluşturmuş durumdalar. İstanbul, İzmir, Konya, Balikesir, Bursa Büyükşehir Belediyeleri birer Açık Veri Portalına sahipler. Bu kısa bilgi notunda da İzmir Büyükşehir Belediyesi’nin Açık Veri Portalı’nda paylaştığı bazı veri setlerini inceleyecek ve söz konusu verilerden hareketle ulusal ekonomiye ve fiyat hareketlerine dair bazı veri görselleştirmelerinde bulunacağız. Böylelikle Açık Veri uygulamalarının ve Açık Veri Portallarının ne kadar önemli olabileceği konusunda bir fikir edineceğiz.
İzmir Büyükşehir Belediyesi Açık Veri Portalı Ocak 2021’den beri faaliyette ve çeşitli başlıklarda yerelden üretilmiş verileri İzmirlilerin hizmetine sunuyor. Aşağıdaki şekil İzmir Açık Veri Portalı’nda yayınlanan veri başlıkları ve veri miktarını görselleştiriyor.
Şekil 3’e göre İzmir BŞB veri portalında bulunan verilerin büyük bir çoğunluğu ulaşım, çevre, yaşam gibi İzmirlilerin gündelik hayatlarında önemli yer tutan başlıklara ayrılmış durumda. Bu İzmirde yaşayan bireylerin hayat kalitesinin veriye bazlı artırılması anlamında olumlu bir adım. Öte yandan söz konusu verilerin OGD kapsamında yer alabilmesi için veri formatlarının da bedava (free), lisans gerektirmeyecek (licence-free) şekilde herhangi bir bilgisayar ortamında işlenebilir (machine readable) olması gerekmekte. Bu nedenle İzmir BŞB Veri Portalındaki verileri bir de türlerine göre görselleştirmek önemli.
Şekil 4’e göre İzmir BŞB Açık Veri Portalındaki veri formatlarında ilk iki sırayı bedava ve bilgisayar ortamında okunabilir olan API ve CSV (comma separated value) veri formatları almakta. Öte yandan üçüncü sıra ise lisans gerektiren Excel formatına ait. Bu İzmir BŞB’nin OGD politikaları doğrultusunda katedecek adımları olduğunu ama yine de durumun hiç de fena olmadığını gösteriyor.
Bu short tutorial’da İzmir BSB Açık Veri Portalı’ndaki bazı veriler kullanılarak R’da veri görselleştirme uygulamaları anlatılacaktır. Böylelikle OGD uygulamalarının gundelik hayat üzerindeki potansiyel etkilerine bir örnek sunulmuş olacaktır.
İzmir BSB Açık Veri Portalı Ekonomi başlığı altında çok kıymetli ve detaylı 2 veri seti yayınlıyor. Bunlardan ilki Balık Hal Fiyatları, diğeri de Sebze ve Meyve Hal Fiyatları. Her iki veri seti de gerek kapsamı (176 çeşit sebze ve meyve, 152 çeşit balık fiyatı), gerek frekansı (günlük), gerekse de tarih aralığı (2006’dan günümüze) ile ekonomistlerin ilgisini çeken çok önemli veri setleri. Balık Hal fiyatları 2007 yılından başlayarak günümüze kadar gelen günlük bir veri seti. İzmir’de tüketilen her bir Balık türünün fiyatı ve dahil oldukları gruplar (Balık, İthal (Donuk), Kültür, Tatlı Su) günlük olarak veri setinde yer almakta. Yine Sebze ve Meyve Hal Fiyatları verisi de İzmir’de Sebze ve Meyve haline gelen bütün sebze ve meyvelerin günlük fiyatlarını ve dahil oldukları grupları (Sebze, Meyve ve İthal) içermekte. Her iki veri seti de İzmir’deki Sebze, Meyve ve Balık fiyatlarının uzun dönemli gelişimleri hakkında önemli fikirler veriyor.
Burada R programında söz konusu veri setleri ile yapılan interaktif veri görselleştirmelerini sizlerle paylaşmak istiyorum. Böylelikle OGD uygulamalarının ne gibi somut çıktılara dönüşebileceğine dair de bir örnek olacak elimizde.
Veri görselleştirmede kullanılan Balık Hal Fiyatları verisi yaklaşık 292 bin, Sebze ve Meyve Hal Fiyatları verisi de yaklaşık 363 bin gözlem içermekte. Söz konusu günlük verileri isim ve türlerine göre ay bazında toplulaştırarak 2006 yılından itibaren ortalama fiyat değişimlerini görselleştirmek amaç.
Önce Sebze ve Meyve fiyatları ile başlayalım. Sebze ve Meyve fiyatlarının API bilgilerine buradan ulaşabiliyoruz. API ile veri çekmek bir kaç açıdan faydalı. İlk olarak veriyi bilgisayarımızda depolamadan direkt olarak R ortamına almış oluyoruz. İkinci olarak da sonraki çalışmalarımızda veriyi otomatik olarak güncelleyebilme imkanına kavuşuyoruz. Bu çerçevede API kullanarak aşağıdaki kodlar yardımıyla verileri alalım:
df_2006 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=e835ebff-854e-44fd-aa86-1c848667b0bf&limit=18066")
df_2007 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=7f52e6bd-5703-44dc-a6eb-5c75c5b320c9&limit=19098")
df_2008 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=86e95268-d3ba-49a8-aabb-a65c34196ca0&limit=18762")
df_2009 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=32a0bd10-219b-4956-81c3-c0cb685a4a40&limit=19468")
df_2010 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=77bbb16c-6bb9-4170-b372-df8c0301aeb0&limit=19016")
df_2011 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=3636e47f-0a36-4289-8040-ca7ed379d8b4&limit=19520")
df_2012 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=baead829-03bc-4fa7-957f-ee67071bffe5&limit=19614")
df_2013 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=cc50986f-6c8c-4675-b9ae-e00c2651d99b&limit=19580")
df_2014 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=7d5e0201-ded3-419a-9921-23842ab0d036&limit=20382")
df_2015 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=244681aa-f233-41c6-8c3e-342950335364&limit=23749")
df_2016 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=f2d0e815-d460-4dc2-94c6-2e32019875d5&limit=26417")
df_2017 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=64f5a293-9899-41de-9662-06af483a21de&limit=26880")
df_2018 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=38148e33-6d8c-4a14-a41c-f80313e9b787&limit=27299")
df_2019 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=acc05e47-91ba-47ce-8f09-0aa07eaad400&limit=27063")
df_2020 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=bcfea2e8-5032-417e-9374-21370694fd32&limit=26161")
df_2021 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=6776dba0-7299-47d6-b301-db3e2f88bb53&limit=26759")
df_2022 <- fromJSON("https://acikveri.bizizmir.com/tr/api/3/action/datastore_search?resource_id=d8830ad5-8e33-4fa1-b14f-596b17ac33ed&limit=8024")
Yukarıdaki API kodları ile İzmir Sebze ve Meyve halindeki bütün fiyatları indirmiş olduk. Şimdi de data frame oluşturmak için API içindeki bizim için gerekli bilgileri aşağıdaki kodları kullanarak çekelim.
df_2006<- as.data.frame(df_2006[['result']][['records']])
df_2007<- as.data.frame(df_2007[['result']][['records']])
df_2008<- as.data.frame(df_2008[['result']][['records']])
df_2009<- as.data.frame(df_2009[['result']][['records']])
df_2010<- as.data.frame(df_2010[['result']][['records']])
df_2011<- as.data.frame(df_2011[['result']][['records']])
df_2012<- as.data.frame(df_2012[['result']][['records']])
df_2013<- as.data.frame(df_2013[['result']][['records']])
df_2014<- as.data.frame(df_2014[['result']][['records']])
df_2015<- as.data.frame(df_2015[['result']][['records']])
df_2016<- as.data.frame(df_2016[['result']][['records']])
df_2017<- as.data.frame(df_2017[['result']][['records']])
df_2018<- as.data.frame(df_2018[['result']][['records']])
df_2019<- as.data.frame(df_2019[['result']][['records']])
df_2020<- as.data.frame(df_2020[['result']][['records']])
df_2021<- as.data.frame(df_2021[['result']][['records']])
df_2022<- as.data.frame(df_2022[['result']][['records']])
Bu kodlar API ile çektiğimiz verilerde bizim ilgilendiğimiz bilgilerin yer aldığı kısımları dışa aktarmamıza yarıyor. Ardından da bütün verileri tek bir dosya olarak birleştirelim.
df_merged <- rbind(df_2006, df_2007, df_2008, df_2009, df_2010, df_2011, df_2012, df_2013, df_2014, df_2015, df_2016, df_2017, df_2018, df_2019, df_2020, df_2021, df_2022)
Burada df_merged adını verdiğimiz veri dosyamızı aşağıdaki kodla bilgisayarımıza kaydedebiliriz.
df_merged <- read.csv("C:/Users/firat/Desktop/Izmir BSB/izmir/df_merged.csv")
Şimdi df_merged isimli veri dosyamızı tanıyalım
str(df_merged)
## 'data.frame': 362908 obs. of 11 variables:
## $ X_id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ TARIH : chr "2006-01-02" "2006-01-02" "2006-01-02" "2006-01-02" ...
## $ MAL_TURU : chr "MEYVE" "SEBZE" "SEBZE" "SEBZE" ...
## $ MAL_ADI : chr "KIVI YERLI" "BIBER KIL ACI" "LAHANA KIRMIZI" "KARNABAHAR" ...
## $ BIRIM : chr "KG" "KG" "KG" "KG" ...
## $ ASGARI_UCRET : num 2 2 0.2 0.2 0.2 1.2 1 0.4 1 0.4 ...
## $ AZAMI_UCRET : num 4 3 0.6 0.6 0.8 1.5 4 0.8 2.8 1 ...
## $ ORTALAMA_UCRET: num 3 2.5 0.4 0.4 0.5 1.35 2.5 0.6 1.9 0.7 ...
## $ year : int 2006 2006 2006 2006 2006 2006 2006 2006 2006 2006 ...
## $ month : int 1 1 1 1 1 1 1 1 1 1 ...
## $ day : int 2 2 2 2 2 2 2 2 2 2 ...
Göründüğü gibi, verilerimizi birleştirmiş olduk. Söz konusu veriler 8 değişkenden ve 365.851 satırdan oluşmakta. Oldukça büyük bir veri seti. Ayrıca verilerden sadece _id sütunu integer, diğerleri ise character formatında. Burada sonraki analizler için yapılması faydalı iki işlem bulunmakta. İlk olarak df_merged verimizdeki TARIH sütununu daha sonraki veri görselleştirmelerde kullanabilmek amacıyla DATE haline, sonra da özellikle ASGARI_UCRET, AZAMI_UCRET ve ORTALAMA_UCRET verilerini numeric hale getirelim.
df_merged$TARIH <- as.Date(df_merged$TARIH)
df_merged$ORTALAMA_UCRET <- as.numeric(sub(",", ".", df_merged$ORTALAMA_UCRET))
df_merged$ASGARI_UCRET <- as.numeric(sub(",", ".", df_merged$ASGARI_UCRET))
df_merged$AZAMI_UCRET <- as.numeric(sub(",", ".", df_merged$AZAMI_UCRET))
Ve verimizi tekrar kontrol edelim
str(df_merged)
## 'data.frame': 362908 obs. of 11 variables:
## $ X_id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ TARIH : Date, format: "2006-01-02" "2006-01-02" ...
## $ MAL_TURU : chr "MEYVE" "SEBZE" "SEBZE" "SEBZE" ...
## $ MAL_ADI : chr "KIVI YERLI" "BIBER KIL ACI" "LAHANA KIRMIZI" "KARNABAHAR" ...
## $ BIRIM : chr "KG" "KG" "KG" "KG" ...
## $ ASGARI_UCRET : num 2 2 0.2 0.2 0.2 1.2 1 0.4 1 0.4 ...
## $ AZAMI_UCRET : num 4 3 0.6 0.6 0.8 1.5 4 0.8 2.8 1 ...
## $ ORTALAMA_UCRET: num 3 2.5 0.4 0.4 0.5 1.35 2.5 0.6 1.9 0.7 ...
## $ year : int 2006 2006 2006 2006 2006 2006 2006 2006 2006 2006 ...
## $ month : int 1 1 1 1 1 1 1 1 1 1 ...
## $ day : int 2 2 2 2 2 2 2 2 2 2 ...
İstediğimiz dönüşümlerin olduğunu gözlemliyoruz. Hemen burada basitçe ne gibi özellikleri olan bir veri setimiz olduğunu anlamak için aşağıdaki dplyr kütüphanesi komutu olan count fonksiyonunu kullanarak kaç tane MAL_ADI’na sahip olduğumuzu görelim.
df_merged %>% count(MAL_ADI)
## MAL_ADI n
## 1 ACUR 569
## 2 ANANAS 4469
## 3 ARMUT DEVECI 3102
## 4 ARMUT LIMON 125
## 5 ARMUT MUHT 4145
## 6 ARMUT S.MARIA 3526
## 7 ARMUT AKÇA 389
## 8 ARMUT ITHAL 10
## 9 AVAKADO 4266
## 10 AYVA 2837
## 11 BADEM-ÇAGLA 760
## 12 BADEM ÇAGLA(DATÇA) 83
## 13 BAKLA 2153
## 14 BAMYA 1598
## 15 BAMYA SERA 113
## 16 BEZELYE 1698
## 17 BIBER DOLMA 4469
## 18 BIBER KIL ACI 4469
## 19 BIBER SIVRI 4469
## 20 BIBER TATLI(ÇARLISTON) 4469
## 21 BIBER JALEPENO 217
## 22 BIBER KIRMIZI 4404
## 23 BIBER SALÇALIK 347
## 24 BORULCE 2220
## 25 BROKOLI 3564
## 26 CENNET ELMASI 1486
## 27 CILEK 4223
## 28 DARI(ADET) 1930
## 29 DENIZ BÖRÜLCESI 3397
## 30 DOMATES ARI 239
## 31 DOMATES BEEF 1913
## 32 DOMATES SALKIM 4226
## 33 DOMATES SERA 4354
## 34 DOMATES TARLA 1952
## 35 DOMATES CHERRY 3087
## 36 DOMATES PEMBE 766
## 37 DOMATES SALÇALIK(RIO) 927
## 38 DOMATES SALKIM (IYI TARIM) 88
## 39 DOMATES SALKIM(KUTU) 426
## 40 DUT 153
## 41 ELMA AMASYA 2047
## 42 ELMA ARJANTIN 2183
## 43 ELMA GALA 150
## 44 ELMA GOLDEN 4469
## 45 ELMA II 580
## 46 ELMA STARKING 4469
## 47 ELMA GSMIT 683
## 48 ELMA GSMIT(ITHAL) 4469
## 49 ELMA MUHTELIF 1395
## 50 ELMA STARKING(ITHAL) 3596
## 51 ENGINAR 1837
## 52 ERIK 186
## 53 ERIK ITALYAN 483
## 54 ERIK ANJELIKA 2551
## 55 ERIK CAN 657
## 56 ERIK MURDUM 106
## 57 ERIK PAPAZ 1001
## 58 ERIK MUHTELIF 2128
## 59 FASULYE AYSE 4087
## 60 FASULYE BARBUN 2986
## 61 FASULYE CALI 4392
## 62 GRAYFURT(ITHAL) 24
## 63 GREYFURT 4293
## 64 HAVUC 4469
## 65 HAVUÇ(TAKOZ) 18
## 66 HINDISTAN CEVIZI 4290
## 67 HURMA 23
## 68 INCIR 802
## 69 INCIR AYDIN 469
## 70 INCIR BARDACIK 554
## 71 INCIR SIYAH 334
## 72 ISPANAK 4349
## 73 KABAK BAL 2926
## 74 KABAK TAZE 4469
## 75 KALIFORNIYA DOLMA 158
## 76 KARNABAHAR 3176
## 77 KARPUZ 3003
## 78 KAVUN ITHAL 291
## 79 KAVUN KASA SERA 2009
## 80 KAVUN TARLA 2955
## 81 KAYISI IGDIR 588
## 82 KAYISI MALATYA 352
## 83 KAYISI MUHT 1544
## 84 KAYISI TOKALI 541
## 85 KAYISI SEKERPARE 46
## 86 KEREVIZ 3143
## 87 KESTANE 1749
## 88 KIRAZ MUHT 1261
## 89 KIRAZ NAPOLYON 53
## 90 KIRAZ SALIHLI 718
## 91 KIVI ITHAL 3935
## 92 KIVI YERLI 3605
## 93 KIZILCIK 26
## 94 LAHANA BEYAZ 4354
## 95 LAHANA BURUKSEL 2010
## 96 LAHANA KIRMIZI 4469
## 97 LIMON DOKME 4422
## 98 LIMON KASA 3651
## 99 LIMON YENI (MAYER) 628
## 100 LIMON ENTER 312
## 101 LIMON KASA (ESKI) 31
## 102 LIMON LAMAS 450
## 103 MALATYA KAYISISI 30
## 104 MALTA 821
## 105 MANDALINA 2839
## 106 MANDALINA (CLEMENTIN) 457
## 107 MANDALINA MURKOT 287
## 108 MANDALINA SATSUMA 320
## 109 MANDALINA(TAKOZ) 59
## 110 MANGO 95
## 111 MANTAR 4469
## 112 MANTAR (ISTIRIDYE) 169
## 113 MANTAR (PAKET 400GR) 753
## 114 MARUL 4469
## 115 MARUL AYSBERG 4469
## 116 MARUL KIVIRCIK 4018
## 117 MARUL LOLOROSSO 2544
## 118 MUSMULA 706
## 119 MUZ ITHAL 4469
## 120 MUZ YERLI 4163
## 121 NAR 2782
## 122 NEKTARIN BEYAZ 1092
## 123 NEKTARIN KIRMIZI 2210
## 124 PANCAR 4468
## 125 PATATES 4168
## 126 PATATES CALMA 4469
## 127 PATATES (ÖDEMIS) 49
## 128 PATATES ESKI(YIKANMAMIS) 76
## 129 PATATES TAZE(YIKANMIS) 301
## 130 PATLICAN UZUN 4469
## 131 PATLICAN TOPAN 4469
## 132 PAZI 2968
## 133 PIRASA 3960
## 134 POMELO 4
## 135 PORTAKAL FINIKE 1001
## 136 PORTAKAL MUHT 3884
## 137 PORTAKAL SIKMALIK 227
## 138 PORTAKAL VALENCIA 1236
## 139 PORTAKAL WASHINGTON 1035
## 140 SALATALIK KORNISON 492
## 141 SALATALIK KASA 4469
## 142 SALATALIK SILOR 2961
## 143 SALATALIK TORBA 2179
## 144 SALGAM 73
## 145 SARIMSAK ITHAL 3242
## 146 SARIMSAK KURU 4433
## 147 SARIMSAK TAZE 1356
## 148 SEFTALI 2150
## 149 SEFTALI MUHTELIF 143
## 150 SEMIZ OTU 2853
## 151 SOGAN KIRMIZI 3911
## 152 SOGAN KURU 4469
## 153 SOGAN TAZE 4469
## 154 SOGAN YAHNILIK 362
## 155 TURP FINDIK 640
## 156 TURP JAPON 53
## 157 TURP KIRMIZI 4048
## 158 ÜZÜM 193
## 159 ÜZÜM BEYAZ 425
## 160 ÜZÜM MUHT 1876
## 161 ÜZÜM RAZAKI 1259
## 162 ÜZÜM RED GLOBE 845
## 163 ÜZÜM SIYAH 881
## 164 ÜZÜM SIYAH ENFS 1259
## 165 ÜZÜM SULTANIYE 1471
## 166 ÜZÜM ITHAL 255
## 167 VISNE 878
## 168 Y.DEREOTU 4468
## 169 Y.MAYDONOZ 4467
## 170 Y.NANE 4466
## 171 Y.ROKA 4468
## 172 Y.TERE 3243
## 173 YAPRAK SALAMURA 1453
## 174 YAPRAK TAZE 504
## 175 YERELMASI 1592
## 176 ZENCEFIL 4
Yukarıdaki kod bize toplamda 177 farklı mal adı olduğunu ve her bir mal adındaki gözlem sayısını veriyor. Söz gelimi bütün veri setinde 4503 Ananas, 3136 Armut Deveci, 4300 Avakado verisi olduğunu görüyoruz. Bunların fiyat verisi olduğunu hatırda tutalım.
Burada yapılması gereken önemli bir işlem de az önce DATE haline getirdiğimiz TARIH sütunu gün, ay ve yıl olarak ayrıştırmak. Bu daha sonraki veri görselleştirmelerde verileri toplulaştırmamıza yarayacak. Bunu lubridate fonksiyonuyla yapabiliriz.
df_merged <- df_merged %>%
mutate(year = lubridate::year(TARIH),
month = lubridate::month(TARIH),
day = lubridate::day(TARIH))
head(df_merged)
## X_id TARIH MAL_TURU MAL_ADI BIRIM ASGARI_UCRET AZAMI_UCRET
## 1 1 2006-01-02 MEYVE KIVI YERLI KG 2.0 4.0
## 2 2 2006-01-02 SEBZE BIBER KIL ACI KG 2.0 3.0
## 3 3 2006-01-02 SEBZE LAHANA KIRMIZI KG 0.2 0.6
## 4 4 2006-01-02 SEBZE KARNABAHAR KG 0.2 0.6
## 5 5 2006-01-02 SEBZE TURP KIRMIZI KG 0.2 0.8
## 6 6 2006-01-02 SEBZE YAPRAK SALAMURA KG 1.2 1.5
## ORTALAMA_UCRET year month day
## 1 3.00 2006 1 2
## 2 2.50 2006 1 2
## 3 0.40 2006 1 2
## 4 0.40 2006 1 2
## 5 0.50 2006 1 2
## 6 1.35 2006 1 2
Gördüğünüz gibi her bir gözlem, yıl, ay ve gün detayına ayrışmış durumda. Bu veriyi bu şekilde kaydedelim. Sonrasında bu veriyi uygun görselleştirme yöntemlerine göre gruplandırmaya başlayacağız.
write.csv(df_merged, file = 'C:/Users/firat/Desktop/Izmir BSB/izmir/df_merged.csv', row.names = FALSE)
Verimizi kaydettikten sonra veri görselleştirme için hangi gruplandırmaların daha iyi sonuçlar vereceğini düşünelim. Verimizi oncelikle MAL_ADI’na göre gruplandırmak mantıklı olabilir. Böylelikle MAL_ADI’na göre ORTALAMA_UCRET’te meydana gelen değişimi zamana bağlı olarak görselleştirebiliriz. Bu gruplandırmadan elde edeceğimiz veri setine df_merged_a diyelim.
df_merged_a <- df_merged %>% group_by(MAL_ADI, year)%>% summarize(m = mean(ORTALAMA_UCRET))
## `summarise()` has grouped output by 'MAL_ADI'. You can override using the `.groups` argument.
df_merged_a
## # A tibble: 2,088 x 3
## # Groups: MAL_ADI [176]
## MAL_ADI year m
## <chr> <dbl> <dbl>
## 1 ACUR 2015 1.70
## 2 ACUR 2016 1.67
## 3 ACUR 2017 1.84
## 4 ACUR 2018 2.19
## 5 ACUR 2019 2.65
## 6 ACUR 2020 1.98
## 7 ACUR 2021 2.95
## 8 ANANAS 2006 4.08
## 9 ANANAS 2007 4.23
## 10 ANANAS 2008 3.68
## # ... with 2,078 more rows
Yukarıda 2097 farklı mal adı için yıl bazında ORTALAMA_ÜCRET verisi yer almakta. Bu veriyi rahatlıkla ggplot kütüphanesi ile görselleştirebiliriz.
df_merged_a %>% ggplot(aes(x=year, y=m, group_by=MAL_ADI))+
geom_line()
Yukarıdaki grafik Sebze ve Meyve fiyatlarının yukarı yönlü hareketi hakkında birşeyler söylemekte, ancak hangi mal gruplarının ne yönde hareket ettiği konusunda bilgi vermemektedir. Şimdilik bu görselleştirmeyi geçelim ve başka türlü veri gruplandırmalar üzerine düşünelim. Mesela spesifik olarak belli MAL_ADI’larını görselleştirebiliriz.
df_merged_b <- df_merged %>% group_by(MAL_ADI, year) %>% filter(MAL_ADI == "KAYISI MALATYA") %>% summarize(m = mean(ORTALAMA_UCRET))
## `summarise()` has grouped output by 'MAL_ADI'. You can override using the `.groups` argument.
df_merged_b %>%
ggplot( aes(x=year, y=m, group=MAL_ADI, color=MAL_ADI)) +
geom_line(size=1)+
ggtitle("Izmir Gida Fiyatlari") +
scale_x_continuous(breaks = c(2006, 2008, 2010, 2012, 2014, 2016, 2018, 2020, 2022))+
ylab("Fiyatlar (TRY)")
Yukarıdaki şekil de İzmir Sebze ve MEyve Hali’ndeki Malatya Kayısı’nın ORTALAMA_UCRET’indeki değişimi göstermekte. Bu da gayet bilgilendirici bir görsel, istediğimiz mal isimlerini filter(MAL_ADI == "") komutunun içine yazarak görselleştirebiliriz. Öte yandan bu yöntem toplu olarak bütün Meyve ce Sebze Fiyatlarındaki değişimi içermiyor. Bu durumda ne yapılabilir?
Aslında her bir MAL_ADI’ni kendi içinde gruplandırabilirsek biraz daha bilgilendirici bir görsel elde etmiş oluruz. df_merged veri setimize tekrar bakalım.
str(df_merged)
## 'data.frame': 362908 obs. of 11 variables:
## $ X_id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ TARIH : Date, format: "2006-01-02" "2006-01-02" ...
## $ MAL_TURU : chr "MEYVE" "SEBZE" "SEBZE" "SEBZE" ...
## $ MAL_ADI : chr "KIVI YERLI" "BIBER KIL ACI" "LAHANA KIRMIZI" "KARNABAHAR" ...
## $ BIRIM : chr "KG" "KG" "KG" "KG" ...
## $ ASGARI_UCRET : num 2 2 0.2 0.2 0.2 1.2 1 0.4 1 0.4 ...
## $ AZAMI_UCRET : num 4 3 0.6 0.6 0.8 1.5 4 0.8 2.8 1 ...
## $ ORTALAMA_UCRET: num 3 2.5 0.4 0.4 0.5 1.35 2.5 0.6 1.9 0.7 ...
## $ year : num 2006 2006 2006 2006 2006 ...
## $ month : num 1 1 1 1 1 1 1 1 1 1 ...
## $ day : int 2 2 2 2 2 2 2 2 2 2 ...
Burada MAL_TURU sütunu bütün verileri Meyve, Sebze vb. gibi gruplara ayırmış. Gelin MAL_TURU’na daha yakından bakalım.
df_merged %>% count(MAL_TURU)
## MAL_TURU n
## 1 ITHAL.. 33567
## 2 MEYVE 106838
## 3 SEBZE 222503
Buradan elimizdeki bütün Sebze ve Meyvelerin Ithal, Meyve ve Sebze olarak gruplandırıldığını görüyoruz. O zamn bir sonraki gruplandırmamızı MAL_TURU’ne göre yapalım, bu veri setine df_merged_c adını verelim ve görselleştirelim.
df_merged_c <- df_merged %>% group_by(MAL_TURU, year)%>% summarize(m = mean(ORTALAMA_UCRET))
## `summarise()` has grouped output by 'MAL_TURU'. You can override using the `.groups` argument.
df_merged_c %>%
ggplot( aes(x=year, y=m, group=MAL_TURU, color=MAL_TURU)) +
geom_line(size=1)+
ggtitle("Izmir Gida Fiyatlari") +
scale_x_continuous(breaks = c(2006, 2008, 2010, 2012, 2014, 2016, 2018, 2020, 2022))+
ylab("Fiyatlar (TRY)")
Yukarıdaki şekil Sebze ve Meyve ORTALAMA_UCRET’lerindeki yıllık değişimi gözler önüne seriyor. Daha da detaylı bir gösterim söz konusu değişimi aylık bazda görselleştirmek olabilir. Bunun için veri setimizi aylı baza çevirelim ve adında da df_merged_d diyelim.
df_merged_d <- df_merged %>% group_by(MAL_TURU, year, month)%>% summarize(m = mean(ORTALAMA_UCRET, na.rm = TRUE))
## `summarise()` has grouped output by 'MAL_TURU', 'year'. You can override using the `.groups` argument.
df_merged_d
## # A tibble: 585 x 4
## # Groups: MAL_TURU, year [51]
## MAL_TURU year month m
## <chr> <dbl> <dbl> <dbl>
## 1 ITHAL.. 2006 1 2.84
## 2 ITHAL.. 2006 2 2.60
## 3 ITHAL.. 2006 3 2.67
## 4 ITHAL.. 2006 4 2.58
## 5 ITHAL.. 2006 5 2.52
## 6 ITHAL.. 2006 6 2.55
## 7 ITHAL.. 2006 7 2.68
## 8 ITHAL.. 2006 8 2.89
## 9 ITHAL.. 2006 9 3.07
## 10 ITHAL.. 2006 10 2.93
## # ... with 575 more rows
Böylelikle verilerimizi aylık baza çevirmiş olduk. Şimdiye kadar yaptığımız görselleştirmeler statik görselleştirmeler olduğu için elde ettiğimiz bilgiler de statik bilgiler. Bu görselleştirmelerde acaba daha çok hangi ürünün fiyatında artış olmuş, hangileri azalmış ya da hangi zaman aralığında artışlar hız kazanmış gibi sorulara cevap veremiyoruz. Öte yandan bu görselleştirmelerin okuyucu ile iletişimi de görselden okuyucuya tek yönlü olarak gerçekleşmiş. Acaba söz konusu verileri daha interaktif bir şekilde görselleştirme imkanımız var mıdır? plotly kütüphanesi bunun için geliştirilmiş, veriyi görsel üzerinde manipüle etmeye imkan veren bir paket. Gelin plotly ile neler yapabileceğimize bir göz atalım.
x1 <- plot_ly(df_merged_a, x = ~year, y = ~m) %>%
# add_lines(color = ~ordered(MAL_ADI)) %>%
add_lines(linetype = ~MAL_ADI)
saveWidget(x1, "x1.html", selfcontained = F, libdir = "lib")
x1
Yukarıdaki x1 grafiği 176 çeşit farklı sebze ve meyve turunun fiyatlarındaki yıllık ortalamaları gösteren çok zengin bir veri görselleştirmesidir. Grafik interaktif oluşturulduğu için tek tek (istediğiniz ürünün üzerine gelerek mouse ile çift tıklayarak ekleme yapabilirsiniz), grup halinde (çift tıkladıktan sonra tek tek istediğiniz ürünleri ekleyerek gruplandırabilirsiniz), ya da topluca (tekrar çift tıklayarak) istenilen sebze ve meyve turunun görselleştirilmesi mümkündür. Bütün sebze ve meyve fiyatlarındaki yükseliş kolayca gözlenmektedir.Bu haliyle bu görselleştirme yukarıda ilk siyah-beyaz olarak görselleştirilen df_merged_a görselleştirmesinden interaktif versiyonundan başka bir şey değildir. Öte yandan Bu görselleştirme, sağ üstte yer alan menü kullanılarak manipüle edilebilmektedir. Plotly ile görselleştirmeye oluşturduğumuz diğer veri setleri ile devam edelim.
x2 <- plot_ly(df_merged_c, x = ~year, y = ~m) %>%
add_lines(color = ~ordered(MAL_TURU))
saveWidget(x2, "x2.html", selfcontained = F, libdir = "lib")
x2
Bu görselin de yukarıda statik versiyonunu görselleştirmiştik. Bu gorsel ise bir yukarıdaki görseldeki sebze ve meyvelerin “Sebze”, “Meyve” ve “Ithal” grupları altında, daha toplulaştırılmış bir görselleştirmesini sunmaktadır. Böylelikle hangi mal grubunda fiyat artışları birbirini takip ediyor, hangi mal grubu ayrışıyor, bunu görsel olarak tespit etmek mümkün olmaktadır. Şekilden de görüldüğü gibi İthal sebze ve meyve fiyatlarındaki yukarı gidiş, yerlilerden bir hayli fazla.
x3 <- plot_ly(df_merged_d, x = ~month, y = ~m) %>%
add_lines(color = ~ordered(year))
saveWidget(x3, "x3.html", selfcontained = F, libdir = "lib")
x3
Yukarıdaki interaktif görsel ise daha farklı bir görselleştirme sunuyor. Yıl içindeki sebze ve meyve gruplarındaki fiyat dalgalanmaları ay detayında görselleştirilmiş durumda. Üstelik farklı yıllar aynı anda seçilerek yıllar arası anında karşılaştırma yapma imkân sunmakta. Buna göre İzmir’de 2006’dan 2022’ye meyve fiyatları 6 kat, sebze fiyatları 5.3 kat, ithal sebze ve meyve fiyatları ise 4.8 kat artmış görünüyor.
Ayni görselleştirmeyi Balık Hal fiyatları için de yapalım.
Aşağıdaki grafik de x1’e benzer şekilde İzmir Balık Hali’ndeki her çeşit deniz canlısının yıllık ortalama fiyatlarını tek tek, grup olarak ya da topluca görselleştiriyor. Şekilden de görüldüğü gibi balık fiyatlarındaki artış 2018’den sonra hız kazanıyor. Peki bu fiyatları Tatlı Su, Kültür, İthal ve Balık (=deniz) olarak gruplandırsak nasıl bir şekille karşılaşırız? Aşağıdaki f2 grafiği de bu gruplandırmaya göre ortalama balık fiyatlarını gösteriyor.
f1
f2 şekline göre 2016’ya kadar nispeten yatay seyreden balık fiyatları 2016’dan sonra topluca ivme kazanıyor. Burada özel olarak belli bir grubun diğerlerinden ayrıştığını söyleyemiyoruz. Söz konusu artış topluca gerçekleşmiş. Sebze ve Meyve fiyatlarının tersine Balık fiyatlarında İthal (Donuk) balık grubunun Deniz ve Kültür balıklarında yaşanan fiyat artışlarının altında kaldığı göze çarpıyor. Ve son olarak da yıllar arası karşılaştırma yapabilmek için f3 sekline göz atalım.
f2
f3
f3’e bakıldığında fiyatlar arasındaki farkların yıllar geçtikçe açıldığı gözlenmekte. Ayrıca Balık fiyatları Sebze ve Meyve fiyatlarıyla karşılaştırılmayacak ölçüde, yaklaşık 50-60 katlık bir artış yaşamış 2007’den 2022’ye. Bu grafik ile bunu gözlemlemek oldukça mümkün.
Bütün grafikler interaktif olarak görselleştirilmiş durumda. Legendlardan istenilen manipülasyonlar yapılabilmekte, hover ile veri etiketleri görülebilmekte, istenilen donemin verilerine zoom yapılabilmekte ve istenirse grafikler manipülasyonlu ya da manipülasyonsuz olarak .png formatında indirilebilmektedir.
Söz konusu veriler pek çok açıdan önemlidir. İlk olarak veriler, Türkiye’de nadir bulunan Açık Yönetişim Verilerine İzmir’den bir örnek teşkil etmektedir. Veriler, İzmir Büyükşehir Belediyesi Veri Portalı’ndan serbestçe indirilebilmekte, herhangi bir lisans gerektirmeyen yazılımlarla manipüle edilebilmekte ve görselleştirilebilmektedir. Ayrıca söz konusu veri, son günlerde Türkiye’de çokça konuşulan fiyat artışlarındaki seyre dair İzmir yerelinden örnekler sunmaktadır.
Bilindiği gibi TÜİK enflasyon sepetine dahil ettiği ürünleri ve bu ürünlerin fiyatlarındaki gelişimi NUTS 2 düzeyinde ve aylık olarak yayınlamaktadır. İlgililer bu adresten aylık bazda bölgesel fiyatlara ulaşabilir. Peki TÜİK’in Sebze ve Meyve ve Balık fiyatları verileri ile İzmir Açık Veri Portalı’nda yer alan aynı veriler arasında nasıl bir ilişki vardır? İzmir Açık Veri Portalındaki verilerin TÜİK’in İzmir için topladığı sebze, meyve ve balık fiyatlarıyla karşılaştırılması son günlerde çokça tartışılan enflasyondaki seyre dair İzmir yerelinden yeni ve önemli birşeyler söyleyebilir. Şimdi şu ana kadar üzerinde çalıştığımız bütün veri setindeki ORTALAMA_UCRET verisini yıllık ortalamalara çevirelim ve TÜİK’in İzmir’den topladığı ürünlerin yıllık ortalamalarıyla karşılaştıralım.
p4 <- plot_ly(
data = indexes,
x = ~year,
y = ~TUIK_GIDA,
name = "TÜİK GIDA",
type = "scatter",
mode = "lines",
line = list(width = 2,
dash = "solid",
color = "green")) %>%
add_trace(y = ~TUIK_BALIK, name = "TUIK_BALIK") %>%
add_trace(y = ~TUIK_SEBMEY, name = "TUIK_SEBMEY") %>%
add_trace(y = ~IZM_BALIK, name = "IZM_BALIK", mode = "lines", line = list(width = 4, dash = "dash", color = "gray"))%>%
add_trace(y = ~IZM_SEBMEY, name = "IZM_SEBMEY", mode = "lines+markers", line = list(dash = "dot", color = "red")) %>%
add_trace(y = ~Izmir_GIDA, name = "Izmir_GIDA", mode = "lines+markers", line = list(dash = "dot", color = "red"))
saveWidget(p4, "p4.html", selfcontained = F, libdir = "lib")
P4 grafiği İzmir’deki sebze, meyve ve balık hal fiyatları ile TÜİK’in İzmir için yayınladığı gıda fiyatlarını 2007=100 baz alarak interaktif bir şekilde görselleştiriyor.
p4
P4 grafiği R’daki plotly kütüphanesi ile oluşturulduğu için interaktif olarak verileri seçmeye izin veriyor. Analizimize İzmir BŞB Veri Portalındaki Sebze ve Meyve Fiyatları verisinin TÜİK versiyonunu karşılaştırarak başlayalım. Yandaki legend istediğimiz verileri seçmemize izin verecektir. Buna göre TÜİK’in İzmir’e dair yayınladığı ortalama Sebze ve Meyve fiyatlarında meydana gelen artış İzmir BŞB Veri Portalındaki ortalama Sebze ve Meyve hal fiyatlarındaki artıştan büyüktür. 2007 = 100 baza göre İzmir Sebze ve Meyve Hal fiyatları 2022 itibariyle ortalama 4.8 kat artmışken, TÜİK’e göre 5.6 kat artmıştır. Devam edelim. Peki Balık fiyatları için durum nedir? Yandaki legenddan balık fiyatları seçildiğinde ise arada ciddi bir fark oluşmaktadır. Şekle göre TÜİK’in İzmirden topladığı ortalama balık fiyatları İzmir Balık Hal fiyatlarının daima gerisinde kalmıştır. 2019 yılındaki yakınlaşmayı saymazsak söz konusu fark 2022 itibariyle maksimum seviyesine ulaşmıştır. 2007 = 100 baza göre İzmir Balık hal fiyatları 11.9 kat artmışken, TÜİK’e göre artış 8.9 kattır. İzmir gibi balık tüketiminin önemli olduğu bir kentte balık fiyatlarındaki gerçek değişimi enflasyon hesaplamalarına yansıtmak önemlidir. Daha sağlıklı bir karşılaştırma her iki gıda gurubunun ortalamalarına dayalı bir gıda fiyatları karşılaştırması olabilir. Interaktif şeklimiz buna izin vermektedir. TUIK_GIDA ve İZMİR_GIDA şekillerini seçerek TÜİK ve İzmir BŞB Açık Veri Portalında yayınlanan fiyatlar arasında bir karşılaştırma yapma olanağımız var. Buna göre İzmir BŞB Açık Veri Portalından elde edilen fiyatların nispeten yüksek seyretmesine rağmen genelde her iki değişkenin de 2021 yılına birbirine yakın seyrettiği görünmekte. Ancak iki seri arasındaki fark 2022 itibariyle açılmakta ve İzmir’in yerel fiyatlarının TÜİK’in fiyatlarının üstüne çıktığı görünüyor. Bu özellikle son yıllarda tartışmalı enflasyon oranları açıklayan TÜİK’in veri toplama yöntemi ile ilgili kuşkulara İzmir yerelinden bir örnek teşkil ediyor.
Bu kısa uygulama yazısında hem OGD uygulamalarını anlatmaya hem de İzmir Büyükşehir Belediyesinin Açık Veri Portalı’ndan alınan verilerle OGD’nin enflasyon gibi hayati bir konuda nasıl önemli bir veri kaynağı olabileceğine dair bir kısa alıştırma yapmış olduk. Bu bağlamda gerek OGD uygulamalarının Türkiye çapında yaygınlık kazanması, gereksede yerel veri kaynaklarının artması, yurttaşların veri okur yazarlığına katkıda bulunacak ve en basitinden enflasyon gibi hayati konularda gerçeği sınamaya yönelik yeni imkanlar yaratacaktır.