Haticece commited on
Commit
76a8a5c
·
verified ·
1 Parent(s): 43e47ab

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -59
app.py CHANGED
@@ -8,66 +8,90 @@ from sklearn.compose import ColumnTransformer
8
 
9
  st.title("Ev Fiyatı Tahmin Uygulaması")
10
 
11
- # Adım 1: Veri Yükleme
12
- st.header("Adım 1: Veri Yükleyin")
13
- uploaded_file = st.file_uploader("CSV dosyasını buraya yükleyin", type=["csv"])
14
-
15
- if uploaded_file is not None:
16
- data = pd.read_csv(uploaded_file)
17
- st.write("Yüklenen Veri:", data.head())
18
- st.write("Veri Setinin İstatistiksel Özeti:", data.describe())
19
-
20
- # Adım 2: Veri Ön İşleme
21
- st.header("Adım 2: Veri Ön İşleme")
22
- features = st.multiselect("Özellikleri seçin", data.columns.tolist(), default=data.columns.tolist()[:-1])
23
- target = st.selectbox("Hedefi seçin (Ev fiyatı gibi)", data.columns.tolist())
24
-
25
- if len(features) > 0 and target:
26
- X = data[features]
27
- y = data[target]
28
-
29
- # Eksik verileri kontrol et ve doldur
30
- X = X.fillna(0)
31
- y = y.fillna(y.mean())
32
-
33
- # Kategorik sütunları işle
34
- categorical_features = X.select_dtypes(include=['object', 'category']).columns
35
- for col in categorical_features:
36
- X[col] = X[col].fillna("Unknown") # Eksik değerleri doldur
37
-
38
- column_transformer = ColumnTransformer(
39
- transformers=[
40
- ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)
41
- ],
42
- remainder='passthrough'
43
- )
44
-
45
- X = column_transformer.fit_transform(X)
46
-
47
- # Veri bölme
48
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
49
-
50
- # Model eğitimi
51
- model = LinearRegression()
52
- model.fit(X_train, y_train)
53
-
54
- # Model değerlendirmesi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  y_pred = model.predict(X_test)
56
  mse = mean_squared_error(y_test, y_pred)
57
  st.write(f"Ortalama Kare Hata (MSE): {mse:.2f}")
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
- # Adım 3: Tahmin Yapma
60
- st.header("Adım 3: Tahmin Yapın")
61
- user_input = []
62
- for feature in features:
63
- if feature in categorical_features:
64
- value = st.selectbox(f"{feature} seçimi yapın", data[feature].unique().tolist())
65
- else:
66
- value = st.number_input(f"{feature} değeri girin", value=0.0)
67
- user_input.append(value)
68
-
69
- if len(user_input) == len(features):
70
- user_input_df = pd.DataFrame([user_input], columns=features)
71
- user_input_processed = column_transformer.transform(user_input_df)
72
- prediction = model.predict(user_input_processed)
73
- st.write(f"Ev fiyatı tahmini: {prediction[0]:.2f}")
 
8
 
9
  st.title("Ev Fiyatı Tahmin Uygulaması")
10
 
11
+ # Adım 1: Veri Girişi (CSV yerine manuel giriş)
12
+ st.header("Adım 1: Veri Girişi")
13
+
14
+ # Kullanıcıdan özellik sayısını al
15
+ num_features = st.number_input("Kaç özellik gireceksiniz?", min_value=1, value=5)
16
+
17
+ # Özellik adlarını ve tiplerini belirle
18
+ features_info = []
19
+ for i in range(num_features):
20
+ col_name = st.text_input(f"Özellik {i+1} adını girin", f"Özellik_{i+1}")
21
+ col_type = st.selectbox(f"{col_name} tipini seçin", ["Sayısal", "Kategorik"], key=f"type_{i}")
22
+ features_info.append((col_name, col_type))
23
+
24
+ # Hedef değişken adını al
25
+ target = st.text_input("Hedef değişkenin (Ev fiyatı) adını girin", "Fiyat")
26
+
27
+ # Veri girişi için boş bir DataFrame oluştur
28
+ data = pd.DataFrame()
29
+
30
+ # Kullanıcıdan veri girişi al
31
+ st.subheader("Örnek Veri Girişi")
32
+ for col_name, col_type in features_info:
33
+ if col_type == "Sayısal":
34
+ value = st.number_input(f"{col_name} değeri girin", key=f"val_{col_name}")
35
+ else: # Kategorik
36
+ options = st.text_input(f"{col_name} için olası değerleri virgülle ayırarak girin (örn. A,B,C)", key=f"opt_{col_name}")
37
+ options_list = [option.strip() for option in options.split(',')]
38
+ value = st.selectbox(f"{col_name} seçin", options_list, key=f"sel_{col_name}")
39
+ data[col_name] = [value]
40
+
41
+ # Hedef değişken için de giriş al
42
+ target_value = st.number_input(f"{target} değeri girin", key="target_val")
43
+ data[target] = [target_value]
44
+
45
+ st.write("Girilen Veri:", data)
46
+
47
+ # Adım 2: Veri Ön İşleme
48
+ st.header("Adım 2: Veri Ön İşleme")
49
+
50
+ if not data.empty:
51
+ X = data.drop(columns=[target])
52
+ y = data[target]
53
+
54
+ # Kategorik sütunları işle
55
+ categorical_features = [col_name for col_name, col_type in features_info if col_type == "Kategorik"]
56
+ column_transformer = ColumnTransformer(
57
+ transformers=[
58
+ ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)
59
+ ],
60
+ remainder='passthrough'
61
+ )
62
+
63
+ X = column_transformer.fit_transform(X)
64
+
65
+ # Veri bölme (eğitim için daha fazla veri gerektiğinde burayı düzenleyebilirsiniz)
66
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
67
+
68
+ # Model eğitimi
69
+ model = LinearRegression()
70
+ model.fit(X_train, y_train)
71
+
72
+ # Model değerlendirmesi (yalnızca yeterli veri varsa)
73
+ if len(X_test) > 0:
74
  y_pred = model.predict(X_test)
75
  mse = mean_squared_error(y_test, y_pred)
76
  st.write(f"Ortalama Kare Hata (MSE): {mse:.2f}")
77
+ else:
78
+ st.write("Model değerlendirmesi için yeterli veri yok.")
79
+
80
+ # Adım 3: Tahmin Yapma
81
+ st.header("Adım 3: Tahmin Yapın")
82
+ user_input = []
83
+ for col_name, col_type in features_info:
84
+ if col_type == "Sayısal":
85
+ value = st.number_input(f"Tahmin için {col_name} değeri girin", value=0.0, key=f"pred_{col_name}")
86
+ else:
87
+ options = [option.strip() for option in st.session_state[f"opt_{col_name}"].split(',')]
88
+ value = st.selectbox(f"Tahmin için {col_name} seçin", options, key=f"pred_{col_name}")
89
+ user_input.append(value)
90
 
91
+ if len(user_input) == len(features_info):
92
+ user_input_df = pd.DataFrame([user_input], columns=[col_name for col_name, _ in features_info])
93
+ user_input_processed = column_transformer.transform(user_input_df)
94
+ prediction = model.predict(user_input_processed)
95
+ st.write(f"Ev fiyatı tahmini: {prediction[0]:.2f}")
96
+ else:
97
+ st.write("Lütfen önce veri girişi yapın.")