Tapu ve Kadastro Analiz Verilerinin Kullanımı
Bu çalışmada Python kullanarak tapu kadastro analiz verilerini nasıl elde edebileceğimizi ve nasıl kullanabileceğimizden bahsedeceğiz.
Tapu Kadastro Genel Müdürlüğü bir bölgede niteliğinden bağımsız alım-satım yoğunluğunu harita üstünden verdiğini biliyor muydunuz?
Bu veriler az kullanılsa da aslında gayrimenkul yatırımınızda doğru yere yatırım yapıp yapmadığınız konusunda size güzel bir bilgi verebilir. Bir bölgenin yıllara göre alım-satım yoğunluğu o bölgede yapacağınız alım kararınız önemli ölçüde etkileyebilir.
Öncelikle https://parselsorgu.tkgm.gov.tr sitesine girerseniz sağ üstte bazı seçenekler göreceksiniz, burada analiz yazan kısma tıklayıp alt seçenekler alım-satım yoğunluğunu, yılı, il ve ilçeyi seçin ve görüntüleme şeklini de küme
seçip haritada yakınlaşırsanız tam olarak o yıl nerede alım veya satım olduğunu görebilirsiniz.
Şimdi biz bu veriyi python ile nasıl alabilir ve kullanabiliriz anlamaya çalışacağız.
import pandas as pd
import numpy as np
import requests
import plotly
import plotly.express as px
from itertools import chain
Aşağıdaki get isteği attığım url leri biraz yardım ile aldım, şimdi verileri çekmeye başlayalım. Öncelikle parametre olarak kullanacağım için il listesi çekmeye çalışacağız ve buradaki id leri veri isteği atarken kullanacağız.
İl verileri alırken aşağıdaki endpoint i kullanacağız, bu endpoint ile dönen nested yapıdaki json dan il ismi, il id si ve ilin polygon geometri sayılarını elde edebiliriz. Biz sadece il ve id sini alacağız çünkü verileri alacağımız endpoint’te il ismi değil sitede tanımlanmış id sini kullanacağız.
url_city="https://cbsservis.tkgm.gov.tr/megsiswebapi.v3/api//idariYapi/ilListe"
response_city = requests.request("GET", url_city)
city=[i['properties']['text'] for i in response_city.json()['features']]
city=[x.lower() for x in city]
city_id=[i['properties']['id'] for i in response_city.json()['features']]city_dict = dict(zip(city, city_id))
Aşağıda yazdığımız fonksiyon ile birlikte istediğimiz yıllarda istediğimiz şehir için bu veriyi elde edebileceğiz. Veriyi bir for döngüsü içinde her bir yıl için elde ettikten sonra bir listeye ekliyoruz ve bu nested yapıdaki listeyi de Python itertools kütüphanesindeki chain.from_iterables fonksiyonu ile flatten bir yapıya dönüştürüyoruz.
def city_transaction_frequency(city, years):
city_id=city_dict[city]
all_transactions=[]
for i in years:
url = f"https://cbsservis.tkgm.gov.tr/megsiswebapi.v3/api/analiz?AnalizTip=2&Yil={i}&IlId={city_id}"
response = requests.request("GET", url).json()
for j in response:
j['Yıl']=i
all_transactions.append(response)
data = list(chain.from_iterable(all_transactions))
df=pd.DataFrame(data)
return dfyears=[2017, 2018, 2019]
df=city_transaction_frequency(‘tunceli’, years)
df.sample(5)
Elde ettiğimiz veride parsel, enlem, boylam ve sayı yani adet verisini görebiliyoruz.
Şimdi verimizi görselleştirmeyi deneyelim. Bunun için sağladığı interaktif harita özelliğinden dolayı python plotly kütüphanesini kullanacağız.
fig = px.scatter_mapbox(df, lat="enlem", lon="boylam", color='Yıl',
zoom=7.3, height=300,)
fig.update_layout(mapbox_style="open-street-map")
fig.update_layout(margin={"r":1,"t":1,"l":1,"b":0})
fig.show()
Peki ya özel bir yerin etrafını keşfetmek istersek ve o yerin etrafında nasıl bir trend var merak ederseniz? İşte bunun için de bir çözüm geliştirebiliriz.
haversine iki farklı enlem ve boylam arasındaki mesafeyi hesaplamak için kullanılır biz de ilgilendiğimiz noktanın çevresindeki trendi bununla bulacağız.
def haversine_vectorize(lon1, lat1, lon2, lat2): lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2,lat2]) newlon = lon2 - lon1
newlat = lat2 - lat1 haver_formula = np.sin(newlat/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(newlon/2.0)**2 dist = 2 * np.arcsin(np.sqrt(haver_formula))
km = 6367 * dist #6367 for distance in KM for miles use 3958
return kmdf['destination_lat']=38.90366
df['destination_lon']=39.46212
df['haversine_distance']=haversine_vectorize(df['boylam'],df['enlem'],df['destination_lon'], df['destination_lat'])df_5km=df.loc[df['haversine_distance']<=2.5]
fig = px.scatter_mapbox(df_5km, lat="enlem", lon="boylam", color='haversine_distance',zoom=11.5, height=150)fig.update_layout(mapbox_style="open-street-map")
fig.update_layout(margin={"r":1,"t":1,"l":1,"b":0})fig.show()
Kodlara ulaşmak için linke tıklayabilirsiniz.