Menghitung Tagihan Rumah menggunakan Python
Rumah adalah salah satu kebutuhan pokok setiap manusia sebagai tempat tinggal. Setiap orang menginginkan jenis rumah yang berbeda-beda, misalnya saja rumah dengan furniture yang mewah, rumah dengan banyak tanaman hias di dalamnya, rumah dengan atap kaca untuk menjemur pakaian tanpa harus kehujanan, atau juga rumah dengan garasi yang luas agar bisa menaruh 2–3 mobil.
Namun, untuk memiliki sebuah rumah impian, kita juga perlu memperkirakan biayanya. Rumah dengan nuansa klasik di Jogja tidak sama harganya dengan yang di Jakarta pun dengan rumah yang berada di Tangerang. Setiap daerah biasanya memiliki nilai patok tersendiri untuk harga tanah dan bangunan. Penting untuk kita bisa menghitung tagihan rumah impian agar biaya yang diperlukan tidak kurang.
Disini aku akan menggunakan bahasa pemrograman Python untuk menghitung tagihan rumah di daerah Tangerang. Tangerang adalah kota yang terletak di provinsi Banten, Indonesia. Kota ini terletak tepat di sebelah barat Jakarta. Berdasarkan data portal properti Lamudi untuk rata-rata harga rumah dijual di Tangerang sepanjang tahun 2017 adalah Rp 12.200.000 per meter perseginya, sementara di bagian Selatan rata-ratanya mencapai Rp 15.000.000 juta per meter persegi. Untuk rata-rata kenaikan harga rumah 25% per tahunnya, sementara untuk di bagian Selatan kenaikannya mencapai 13% per tahun.
Kita akan memprediksi harga rumah dari dataset berikut ini: https://storage.googleapis.com/dqlab-dataset/harga_rumah.txt
Berikut ini adalah library python yang akan digunakan
import requests
from contextlib import closing
import csv
Import requests berfungsi untuk mengambil elemen html dari sebuah alamat website yang diberikan. Kalian bisa membaca dokumentasi dan mencobanya dengan mengikuti tautan berikut https://www.w3schools.com/python/module_requests.asp
Sedangkan untuk library contextlib bisa kalian baca pada dokumentasi python berikut ini https://docs.python.org/3/library/contextlib.html
Selanjutnya kita akan mulai untuk melakukan prediksi harga rumah berdasarkan atribut dataset diatas.
Step 1. Yang kita harus lakukan adalah membaca dataset tersebut dan mempresentasikan setiap data ke dalam tipe data dictionary dan menampungnya ke dalam list “harga_rumah”
url = "https://storage.googleapis.com/dqlab-dataset/harga_rumah.txt"
data_harga_rumah = []
with closing(requests.get(url, stream=True)) as r:
f = (line.decode('utf-8') for line in r.iter_lines())
data_harga_rumah = [row for row in csv.reader(f)]
# Buat list of dict dengan nama harga rumah
key_harga_rumah = data_harga_rumah[0]
harga_rumah = []
for baris_harga_rumah in data_harga_rumah[1:]:
dict_harga_rumah = dict()
for i in range(len(baris_harga_rumah)):
dict_harga_rumah[key_harga_rumah[i]] = baris_harga_rumah[i]
harga_rumah.append(dict_harga_rumah)
print(harga_rumah)
Step 2. Melakukan transformasi data dengan mengurangi setiap nilai atribut dalam data dengan nilai atribut minimum dan membaginya dengan nilai atribut maksimum yang dikurangi dengan nilai atribut minimum. Singkatnya seperti ini: (NA — N.Min) / (N.Max — N.Min)
Kita akan menggunakan attr sebagai nilai atribut.
nilai_transformasi = (attr — min_attr) / (max_attr — min_attr)
Step 3. Membuat sebuah fungsi bernama get_all_specified_attribute yang menerima parameter (list_of_dictionary). Fungsi tersebut akan mengembalikan sebuah list berisikan seluruh atribut dengan kunci (specified_key)
def get_all_specified_attributes(list_of_dictionary, specified_key):
list_attributes = []
for data in list_of_dictionary:
attribute = data[specified_key]
list_attributes.append(attribute)
return list_attributes
Step 4. Membuat fungsi min_value untuk mengembalikan nilai terkecil dan fungsi max_value untuk mengembalikan nilai terbesar yang akan menerima parameter list_attributes
def min_value(list_attributes):
min_attribute = 9999
for attr in list_attributes:
if int(attr) < min_attribute:
min_attribute = int(attr)
return min_attribute
def max_value(list_attributes):
max_attribute = -9999
for attr in list_attributes:
if int(attr) > max_attribute:
max_attribute = int(attr)
return max_attribute
Step 5. Membuat fungsi transform_attribute yang menerima parameter attr (sebuah bilangan), max_attr, dan min_attr
def transform_attribute(attr, max_attr, min_attr):
nilai_transformasi = (attr - min_attr) / (max_attr - min_attr)
return nilai_transformasi
Step 6. Membuat fungsi data_transformation yang menerima parameter list_of_dictionary & list_attribute_names mengembalikan hasil transformasi data dari list_of_dictionary berdasarkan list_attribute_names
def data_transformation(list_of_dictionary, list_attribute_names):
attr_info = {}
for attr_name in list_attribute_names:
specified_attributes = get_all_specified_attributes(list_of_dictionary, attr_name)
max_attr = max_value(specified_attributes)
min_attr = min_value(specified_attributes)
attr_info[attr_name] = {'max': max_attr, 'min': min_attr}
data_idx = 0
while(data_idx < len(list_of_dictionary)):
list_of_dictionary[data_idx][attr_name] = transform_attribute(int(list_of_dictionary[data_idx][attr_name]),max_attr, min_attr)
data_idx += 1
return list_of_dictionary, attr_info
Step 7. Membuat fungsi transform_data yang menerima parameter data dan attr_info dan mengembalikan nilai atribut dari data baru yang telah ditransformasikan.
def transform_data(data, attr_info):
for key_name in data.keys():
data[key_name] = (data[key_name] - attr_info[key_name]['min']) / (
attr_info[key_name]['max'] - attr_info[key_name]['min'])
return data
Step 8. Membuat sistem prediksi harga berdasarkan nilai kemiripan atribut.
def abs_value(value):
if value < 0:
return -value
else:
return value
def price_based_on_similarity(data, list_of_data):
prediksi_harga = 0
perbedaan_terkecil = 999
for data_point in list_of_data:
perbedaan= abs_value(data['tanah'] - data_point['tanah'])
perbedaan+= abs_value(data['bangunan'] - data_point['bangunan'])
perbedaan+= abs_value(data['jarak_ke_pusat'] - data_point['jarak_ke_pusat'])
if perbedaan < perbedaan_terkecil:
prediksi_harga = data_point['harga']
perbedaan_terkecil = perbedaan
return prediksi_harga
Setelah kita sudah melakukan 7 steps diatas, langkah selanjutnya adalah menghitung harga rumah yang telah ditransformasikan ke dalam variabel harga_rumah berikut dengan attributnya attr_info. Kita dapat menggunakan variabel data untuk memprediksikan harga rumah
harga_rumah, attr_info = data_transformation(harga_rumah,
['tanah','bangunan','jarak_ke_pusat'])
# Gunakan variabel data untuk memprediksi harga rumah
data = {'tanah': 1000, 'bangunan': 100, 'jarak_ke_pusat': 35}
# Transformasikan data tersebut dengan dengan menggunakan attr_info yang telah
# diperoleh yang kembali disimpan ke variabel data.
data = transform_data(data, attr_info)
# Hitunglah prediksi harga dari variabel data tersebut.
harga = price_based_on_similarity(data,harga_rumah)
print("Prediksi harga rumah: ", harga)
Semoga artikel ini bisa membantu, kalian juga bisa membaca dokumentasi python untuk memahami lebih lanjut beberapa fungsi yang digunakan untuk memprediksi harga rumah. Berikut link github yang berisi source code seluruhnya https://github.com/firdella/tagihan_rumah