Skorm commited on
Commit
4349125
·
verified ·
1 Parent(s): a648427

Upload files from other space since not ending look in starting..

Browse files
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ venv/
app.py ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # %%
2
+ import gradio as gr
3
+ from sklearn.ensemble import RandomForestRegressor
4
+ import numpy as np
5
+ import pandas as pd
6
+ import pickle
7
+ # Define model filename
8
+ model_filename = "random_forest_regression_custom_feature.pkl"
9
+
10
+ try:
11
+ # Try to load the model
12
+ with open(model_filename, 'rb') as f:
13
+ model_data = pickle.load(f)
14
+ if isinstance(model_data, dict) and 'model' in model_data:
15
+ random_forest_model = model_data['model']
16
+ except Exception as e:
17
+ print("Error")
18
+ exit(1)
19
+
20
+ # Load and prepare BFS data
21
+ df_bfs_data = pd.read_csv('bfs_municipality_and_tax_data.csv', sep=',', encoding='utf-8')
22
+ df_bfs_data['tax_income'] = df_bfs_data['tax_income'].str.replace("'", "").astype(float)
23
+ df_bfs_data['proximity_to_public_transportation'] = 500 # Default value in meters
24
+
25
+
26
+ # %%
27
+ locations = {
28
+ "Zürich": 261,
29
+ "Kloten": 62,
30
+ "Uster": 198,
31
+ "Illnau-Effretikon": 296,
32
+ "Feuerthalen": 27,
33
+ "Pfäffikon": 177,
34
+ "Ottenbach": 11,
35
+ "Dübendorf": 191,
36
+ "Richterswil": 138,
37
+ "Maur": 195,
38
+ "Embrach": 56,
39
+ "Bülach": 53,
40
+ "Winterthur": 230,
41
+ "Oetwil am See": 157,
42
+ "Russikon": 178,
43
+ "Obfelden": 10,
44
+ "Wald (ZH)": 120,
45
+ "Niederweningen": 91,
46
+ "Dällikon": 84,
47
+ "Buchs (ZH)": 83,
48
+ "Rüti (ZH)": 118,
49
+ "Hittnau": 173,
50
+ "Bassersdorf": 52,
51
+ "Glattfelden": 58,
52
+ "Opfikon": 66,
53
+ "Hinwil": 117,
54
+ "Regensberg": 95,
55
+ "Langnau am Albis": 136,
56
+ "Dietikon": 243,
57
+ "Erlenbach (ZH)": 151,
58
+ "Kappel am Albis": 6,
59
+ "Stäfa": 158,
60
+ "Zell (ZH)": 231,
61
+ "Turbenthal": 228,
62
+ "Oberglatt": 92,
63
+ "Winkel": 72,
64
+ "Volketswil": 199,
65
+ "Kilchberg (ZH)": 135,
66
+ "Wetzikon (ZH)": 121,
67
+ "Zumikon": 160,
68
+ "Weisslingen": 180,
69
+ "Elsau": 219,
70
+ "Hettlingen": 221,
71
+ "Rüschlikon": 139,
72
+ "Stallikon": 13,
73
+ "Dielsdorf": 86,
74
+ "Wallisellen": 69,
75
+ "Dietlikon": 54,
76
+ "Meilen": 156,
77
+ "Wangen-Brüttisellen": 200,
78
+ "Flaach": 28,
79
+ "Regensdorf": 96,
80
+ "Niederhasli": 90,
81
+ "Bauma": 297,
82
+ "Aesch (ZH)": 241,
83
+ "Schlieren": 247,
84
+ "Dürnten": 113,
85
+ "Unterengstringen": 249,
86
+ "Gossau (ZH)": 115,
87
+ "Oberengstringen": 245,
88
+ "Schleinikon": 98,
89
+ "Aeugst am Albis": 1,
90
+ "Rheinau": 38,
91
+ "Höri": 60,
92
+ "Rickenbach (ZH)": 225,
93
+ "Rafz": 67,
94
+ "Adliswil": 131,
95
+ "Zollikon": 161,
96
+ "Urdorf": 250,
97
+ "Hombrechtikon": 153,
98
+ "Birmensdorf (ZH)": 242,
99
+ "Fehraltorf": 172,
100
+ "Weiach": 102,
101
+ "Männedorf": 155,
102
+ "Küsnacht (ZH)": 154,
103
+ "Hausen am Albis": 4,
104
+ "Hochfelden": 59,
105
+ "Fällanden": 193,
106
+ "Greifensee": 194,
107
+ "Mönchaltorf": 196,
108
+ "Dägerlen": 214,
109
+ "Thalheim an der Thur": 39,
110
+ "Uetikon am See": 159,
111
+ "Seuzach": 227,
112
+ "Uitikon": 248,
113
+ "Affoltern am Albis": 2,
114
+ "Geroldswil": 244,
115
+ "Niederglatt": 89,
116
+ "Thalwil": 141,
117
+ "Rorbas": 68,
118
+ "Pfungen": 224,
119
+ "Weiningen (ZH)": 251,
120
+ "Bubikon": 112,
121
+ "Neftenbach": 223,
122
+ "Mettmenstetten": 9,
123
+ "Otelfingen": 94,
124
+ "Flurlingen": 29,
125
+ "Stadel": 100,
126
+ "Grüningen": 116,
127
+ "Henggart": 31,
128
+ "Dachsen": 25,
129
+ "Bonstetten": 3,
130
+ "Bachenbülach": 51,
131
+ "Horgen": 295
132
+ }
133
+ def predict_apartment(rooms, area, proximity, town):
134
+ bfs_number = locations[town]
135
+ df = df_bfs_data[df_bfs_data['bfs_number']==bfs_number].copy()
136
+ df.reset_index(inplace=True)
137
+ df.loc[0, 'rooms'] = rooms
138
+ df.loc[0, 'area'] = area
139
+ df.loc[0, 'proximity_to_public_transportation'] = proximity # Use user input instead of default
140
+
141
+ if len(df) != 1:
142
+ return -1
143
+
144
+ features = ['rooms', 'area', 'pop', 'pop_dens', 'frg_pct', 'emp', 'tax_income', 'proximity_to_public_transportation']
145
+ X = df[features].values
146
+ prediction = random_forest_model.predict(X)
147
+ return np.round(prediction[0], 0)
148
+
149
+ # Create the Gradio interface
150
+ iface = gr.Interface(
151
+ fn=predict_apartment,
152
+ inputs=[
153
+ gr.Number(label="Number of Rooms"),
154
+ gr.Number(label="Area"),
155
+ gr.Slider(minimum=0, maximum=2000, value=500, step=50,
156
+ label="Distance to Public Transportation (meters)"),
157
+ gr.Dropdown(choices=locations.keys(), label="Town", type="value")
158
+ ],
159
+ outputs=[gr.Number(label="Predicted Price (CHF)")],
160
+ examples=[
161
+ [5.5, 110, 300, "Bülach"],
162
+ [3, 90, 800, "Bassersdorf"]
163
+ ],
164
+ description="Predict apartment prices in Zürich based on rooms, area, proximity to public transportation, and location."
165
+ )
166
+ iface.launch()
bfs_municipality_and_tax_data.csv ADDED
The diff for this file is too large to render. See raw diff
 
random_forest_regression_custom_feature.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b568b08ae4f77ccc8ca6410a8a29b1c36b0b59e9ffed320d810a6d48322613a7
3
+ size 1432809
requirements.txt ADDED
Binary file (168 Bytes). View file