lindritdev commited on
Commit
719abf6
·
verified ·
1 Parent(s): 074cda2

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +139 -0
app.py ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import tensorflow as tf
3
+ import numpy as np
4
+ import pandas as pd
5
+
6
+ model_path = "kia_apartment_keras_model.keras"
7
+ model = tf.keras.models.load_model(model_path)
8
+
9
+ df_bfs_data = pd.read_csv('bfs_municipality_and_tax_data.csv', sep=',', encoding='utf-8')
10
+ df_bfs_data['tax_income'] = df_bfs_data['tax_income'].str.replace("'", "").astype(float)
11
+
12
+ locations = {
13
+ "Zürich": 261,
14
+ "Kloten": 62,
15
+ "Uster": 198,
16
+ "Illnau-Effretikon": 296,
17
+ "Feuerthalen": 27,
18
+ "Pfäffikon": 177,
19
+ "Ottenbach": 11,
20
+ "Dübendorf": 191,
21
+ "Richterswil": 138,
22
+ "Maur": 195,
23
+ "Embrach": 56,
24
+ "Bülach": 53,
25
+ "Winterthur": 230,
26
+ "Oetwil am See": 157,
27
+ "Russikon": 178,
28
+ "Obfelden": 10,
29
+ "Wald (ZH)": 120,
30
+ "Niederweningen": 91,
31
+ "Dällikon": 84,
32
+ "Buchs (ZH)": 83,
33
+ "Rüti (ZH)": 118,
34
+ "Hittnau": 173,
35
+ "Bassersdorf": 52,
36
+ "Glattfelden": 58,
37
+ "Opfikon": 66,
38
+ "Hinwil": 117,
39
+ "Regensberg": 95,
40
+ "Langnau am Albis": 136,
41
+ "Dietikon": 243,
42
+ "Erlenbach (ZH)": 151,
43
+ "Kappel am Albis": 6,
44
+ "Stäfa": 158,
45
+ "Zell (ZH)": 231,
46
+ "Turbenthal": 228,
47
+ "Oberglatt": 92,
48
+ "Winkel": 72,
49
+ "Volketswil": 199,
50
+ "Kilchberg (ZH)": 135,
51
+ "Wetzikon (ZH)": 121,
52
+ "Zumikon": 160,
53
+ "Weisslingen": 180,
54
+ "Elsau": 219,
55
+ "Hettlingen": 221,
56
+ "Rüschlikon": 139,
57
+ "Stallikon": 13,
58
+ "Dielsdorf": 86,
59
+ "Wallisellen": 69,
60
+ "Dietlikon": 54,
61
+ "Meilen": 156,
62
+ "Wangen-Brüttisellen": 200,
63
+ "Flaach": 28,
64
+ "Regensdorf": 96,
65
+ "Niederhasli": 90,
66
+ "Bauma": 297,
67
+ "Aesch (ZH)": 241,
68
+ "Schlieren": 247,
69
+ "Dürnten": 113,
70
+ "Unterengstringen": 249,
71
+ "Gossau (ZH)": 115,
72
+ "Oberengstringen": 245,
73
+ "Schleinikon": 98,
74
+ "Aeugst am Albis": 1,
75
+ "Rheinau": 38,
76
+ "Höri": 60,
77
+ "Rickenbach (ZH)": 225,
78
+ "Rafz": 67,
79
+ "Adliswil": 131,
80
+ "Zollikon": 161,
81
+ "Urdorf": 250,
82
+ "Hombrechtikon": 153,
83
+ "Birmensdorf (ZH)": 242,
84
+ "Fehraltorf": 172,
85
+ "Weiach": 102,
86
+ "Männedorf": 155,
87
+ "Küsnacht (ZH)": 154,
88
+ "Hausen am Albis": 4,
89
+ "Hochfelden": 59,
90
+ "Fällanden": 193,
91
+ "Greifensee": 194,
92
+ "Mönchaltorf": 196,
93
+ "Dägerlen": 214,
94
+ "Thalheim an der Thur": 39,
95
+ "Uetikon am See": 159,
96
+ "Seuzach": 227,
97
+ "Uitikon": 248,
98
+ "Affoltern am Albis": 2,
99
+ "Geroldswil": 244,
100
+ "Niederglatt": 89,
101
+ "Thalwil": 141,
102
+ "Rorbas": 68,
103
+ "Pfungen": 224,
104
+ "Weiningen (ZH)": 251,
105
+ "Bubikon": 112,
106
+ "Neftenbach": 223,
107
+ "Mettmenstetten": 9,
108
+ "Otelfingen": 94,
109
+ "Flurlingen": 29,
110
+ "Stadel": 100,
111
+ "Grüningen": 116,
112
+ "Henggart": 31,
113
+ "Dachsen": 25,
114
+ "Bonstetten": 3,
115
+ "Bachenbülach": 51,
116
+ "Horgen": 295
117
+ }
118
+
119
+ # Define the core prediction function
120
+ def predict_apartment(rooms, area, town):
121
+ bfs_number = locations[town]
122
+ df = df_bfs_data[df_bfs_data['bfs_number']==bfs_number]
123
+
124
+ if len(df) != 1: # if there are more than two records with the same bfs_number reutrn -1
125
+ return -1
126
+
127
+ input = np.array([rooms, area, df['pop'].iloc[0], df['pop_dens'].iloc[0], df['frg_pct'].iloc[0], df['emp'].iloc[0], df['tax_income'].iloc[0]])
128
+ input = input.reshape(1, 7)
129
+ prediction = model.predict(input)
130
+ return np.round(prediction[0][0], 0)
131
+
132
+ # Create the Gradio interface
133
+ iface = gr.Interface(
134
+ fn=predict_apartment,
135
+ inputs=["number", "number", gr.Dropdown(choices=locations.keys(), label="Town", type="value")],
136
+ outputs=gr.Number()
137
+ )
138
+
139
+ iface.launch()