CoolFace
Apppublic

KevinDHS/Final_Project

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
predict.py136 linesDownload Raw Back to root
1import streamlit as st2import pandas as pd3import numpy as np4import pickle5import json6 7# Load necessary files and models8with open('model_scaler.pkl', 'rb') as file_1:9    scaler = pickle.load(file_1)10with open('model_pca.pkl', 'rb') as file_2:11    pca = pickle.load(file_2)12with open('model_kp.pkl', 'rb') as file_3:13    kp = pickle.load(file_3)14with open('index_cols.txt', 'r') as file_4:15    index_cols = json.load(file_4)16with open('num_cols.txt', 'r') as file_5:17    num_cols = json.load(file_5)18with open('cat_cols.txt', 'r') as file_6:19    cat_cols = json.load(file_6)20 21# Define page configuration22def run():23    st.title('APART HELPER')24 25    # Create user input form26    with st.form(key='person'):27        st.write('## Input Apart Data')28        neighborhood = st.selectbox('Neighborhood', options=['Palm Jumeirah', 'Jumeirah Lake Towers', 'Culture Village',29                                                             'Downtown Dubai', 'Dubai Marina', 'Business Bay', 'Old Town',30                                                             'Al Kifaf', 'Meydan', 'Arjan', 'Jumeirah Beach Residence',31                                                             'Dubai Creek Harbour (The Lagoons)', 'Greens', 'City Walk',32                                                             'Al Furjan', 'DAMAC Hills', 'Jumeirah Golf Estates', 'Jumeirah',33                                                             'Dubai Hills Estate', 'Umm Suqeim', 'Motor City', 'DIFC',34                                                             'Jumeirah Village Circle', 'Barsha Heights (Tecom)', 'Al Barari',35                                                             'Dubai Production City (IMPZ)', 'The Hills', 'The Views',36                                                             'Dubai Sports City', 'Dubai Silicon Oasis',37                                                             'Jumeirah Village Triangle', 'Mohammed Bin Rashid City',38                                                             'Dubai Harbour', 'Bluewaters', 'International City',39                                                             'Falcon City of Wonders', 'Mina Rashid', 'Town Square',40                                                             'Green Community', 'Al Barsha', 'Al Sufouh', 'Dubai Festival City',41                                                             'Jebel Ali', 'Dubai Land', 'World Trade Center', 'Mudon',42                                                             'Discovery Gardens', 'Remraam', 'Mirdif',43                                                             'Dubai South (Dubai World Central)', 'Dubai Healthcare City',44                                                             'wasl gate', 'Dubai Residence Complex', 'Al Quoz'])45 46        price = st.number_input('Price', min_value=0, max_value=35000000, value='min', step=1)47        size_in_sqft = st.number_input('Size in Square Feet', min_value=0, max_value=9576, value='min', step=100)48        price_per_sqft = st.number_input('Price per Square Feet', min_value=0, max_value=4806, value='min', step=100)49        no_of_bedrooms = st.number_input('Total Bedrooms', min_value=0, max_value=5, value='min', step=1)50        no_of_bathrooms = st.number_input('Total Bathrooms', min_value=0, max_value=6, value='min', step=1)51        maid_room = st.selectbox('Maid Room', options=['True', 'False'])52        concierge = st.selectbox('Concierge', options=['True', 'False'])53        pets_allowed = st.selectbox('Pets Allowes', options=['True', 'False'])54        private_garden = st.selectbox('Private Garden', options=['True', 'False'])55        private_gym = st.selectbox('Private Gym', options=['True', 'False'])56        private_jacuzzi = st.selectbox('Private Jacuzzi', options=['True', 'False'])57        private_pool = st.selectbox('Private Pool', options=['True', 'False'])58        shared_pool = st.selectbox('Shared Pool', options=['True', 'False'])59 60        submit = st.form_submit_button("Predict")61        62        # Create new data63        data_inf = {64          'neighborhood': neighborhood,65          'price': price,66          'size_in_sqft': size_in_sqft,67          'price_per_sqft': price_per_sqft,68          'no_of_bedrooms': no_of_bedrooms,69          'no_of_bathrooms': no_of_bathrooms,70          'maid_room': maid_room,71          'concierge': concierge,72          'pets_allowed' : pets_allowed,73          'private_garden' : private_garden,74          'private_gym' : private_gym,75          'private_jacuzzi' : private_jacuzzi,76          'private_pool' : private_pool,77          'shared_pool' : shared_pool78        }79 80    # Predict81    if submit:82        # Prepare numeric and categorical data83        inf_num = pd.DataFrame([data_inf])[num_cols]84        inf_cat = pd.DataFrame([data_inf])[cat_cols]85        86        # Scale and perform dimension reduction87        inf_scaled = scaler.transform(inf_num)88        inf_scaled_pca = pca.transform(inf_scaled)89 90        inf_final = np.concatenate([inf_scaled_pca, inf_cat], axis=1)91        inf_final = pd.DataFrame(inf_final, columns=['PCA1', 'PCA2', 'PCA3'] + cat_cols)92        inf_final = inf_final.infer_objects()93 94        result = kp.predict(inf_final, categorical=index_cols)95        st.divider()96        97        # Prediction explanation98        if result is not None:99            if result == 0:100                keterangan_prediksi = "Cluster Apartemen Mewah\n\n" \101                                    "- Mencakup apartemen paling mahal dalam kumpulan data.\n" \102                                    "- Mungkin memiliki ukuran terbesar dalam satuan luas.\n" \103                                    "- Mungkin memiliki harga per satuan luas tertinggi.\n" \104                                    "- Memiliki jumlah kamar tidur dan kamar mandi yang lebih tinggi dibandingkan dengan cluster lainnya."105            elif result == 1:106                keterangan_prediksi = "Cluster Apartemen Menengah\n\n" \107                                    "- Memiliki harga lebih rendah daripada Cluster 0 (Cluster Apartemen Mewah) tetapi lebih tinggi dari Cluster 2 (Cluster Apartemen Ekonomis).\n" \108                                    "- Mungkin memiliki ukuran sedang dalam satuan luas dibandingkan dengan cluster lainnya.\n" \109                                    "- Harga per satuan luas berada di antara dua cluster lainnya.\n" \110                                    "- Memiliki jumlah kamar tidur dan kamar mandi yang sedang."111            else:112                keterangan_prediksi = "Cluster Apartemen Ekonomis\n\n" \113                                    "- Mencakup apartemen paling terjangkau dalam kumpulan data.\n" \114                                    "- Mungkin memiliki ukuran terkecil dalam satuan luas.\n" \115                                    "- Mungkin memiliki harga per satuan luas terendah.\n" \116                                    "- Memiliki jumlah kamar tidur dan kamar mandi yang lebih rendah dibandingkan dengan cluster lainnya."117 118            # Display result119            st.write('# Result')120            st.write(f'Prediksi : {int(result)} - {keterangan_prediksi}')121            122            # Show data table based on the result123            st.subheader('Rekomendasi Apartment :')124            data_cluster = pd.read_csv("data_setelah_clustering.csv")125            data_cluster = data_cluster.drop(columns=['Unnamed: 0']) 126            if result == 0:127                 st.write(data_cluster.loc[(data_cluster['cluster']==0)& (data_cluster['price'] <= price)].head(10))128            elif result == 1:129                st.write(data_cluster.loc[(data_cluster['cluster']==1)& (data_cluster['price'] <= price)].head(10))130            else:131                st.write(data_cluster.loc[(data_cluster['cluster']==2) & (data_cluster['price'] <= price)].head(10))132        else:133            st.write('Error: Prediction result is None')134 135if __name__ == '__main__':136    run()