badr-mardi commited on
Commit
5bfff87
·
verified ·
1 Parent(s): 0009b97

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +91 -125
app.py CHANGED
@@ -1,134 +1,100 @@
1
- import os
2
  import numpy as np
3
  import pandas as pd
4
  import matplotlib.pyplot as plt
5
- from sklearn import datasets
6
  from sklearn.model_selection import train_test_split
7
  from sklearn.linear_model import LinearRegression
8
  from sklearn.metrics import mean_squared_error, r2_score
9
- import streamlit as st
10
-
11
- # Spécifiez le chemin du cache de données scikit-learn
12
- data_home = os.path.expanduser('~/.scikit_learn_data')
13
-
14
- # Si le dossier de cache n'existe pas, créez-le
15
- if not os.path.exists(data_home):
16
- os.makedirs(data_home)
17
-
18
- # Titre de l'application
19
- st.title('California Housing Price Prediction')
20
-
21
- # Charger le jeu de données California housing
22
- california = datasets.fetch_california_housing(data_home=data_home, download_if_missing=True)
23
- df = pd.DataFrame(california.data, columns=california.feature_names)
24
- df['MedHouseVal'] = california.target
25
-
26
- # Afficher le jeu de données
27
- st.write("Aperçu du jeu de données :", df.head())
28
-
29
- # Sélectionner la variable de caractéristique et la cible
30
- X = df[['AveRooms']]
31
- y = df['MedHouseVal']
32
-
33
- # Afficher le graphique de dispersion
34
- st.write("Relation entre le nombre moyen de pièces par logement et la valeur médiane des maisons :")
35
- fig, ax = plt.subplots()
36
- ax.scatter(df['AveRooms'], df['MedHouseVal'])
37
- ax.set_xlabel('Nombre moyen de pièces par logement')
38
- ax.set_ylabel('Valeur médiane des maisons')
39
- ax.set_title('Relation entre le nombre moyen de pièces et la valeur médiane des maisons')
40
- st.pyplot(fig)
41
-
42
- # Diviser les données en ensembles d'entraînement et de test
43
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
44
-
45
- # Entraîner le modèle de régression linéaire
46
- model = LinearRegression()
47
- model.fit(X_train, y_train)
48
-
49
- # Prédire et évaluer les résultats
50
- y_pred = model.predict(X_test)
51
- mse_single = mean_squared_error(y_test, y_pred)
52
- r2_single = r2_score(y_test, y_pred)
53
-
54
- st.write(f"Erreur quadratique moyenne : {mse_single}")
55
- st.write(f"Score R^2 : {r2_single}")
56
-
57
- # Afficher la ligne de régression sur les données d'entraînement
58
- st.write("Ligne de régression sur les données d'entraînement :")
59
- fig, ax = plt.subplots()
60
- ax.scatter(X_train, y_train, color='blue', label='Données d\'entraînement')
61
- ax.plot(X_train, model.predict(X_train), color='red', linewidth=2, label='Ligne de régression')
62
- ax.set_xlabel('Nombre moyen de pièces par logement')
63
- ax.set_ylabel('Valeur médiane des maisons')
64
- ax.set_title('Ajustement de la régression linéaire sur les données d\'entraînement')
65
- ax.legend()
66
- st.pyplot(fig)
67
-
68
- # # Afficher les valeurs réelles vs prédites sur les données de test
69
- # st.write("Valeurs réelles vs prédites sur les données de test :")
70
- # fig, ax = plt.subplots()
71
- # ax.scatter(X_test, y_test, color='green', label='Valeurs réelles')
72
- # ax.scatter(X_test, y_pred, color='red', marker='x', label='Valeurs prédites')
73
- # ax.set_xlabel('Nombre moyen de pièces par logement')
74
- # ax.set_ylabel('Valeur médiane des maisons')
75
- # ax.set_title('Valeurs réelles vs prédites sur les données de test')
76
- # ax.legend()
77
- # st.pyplot(fig)
78
-
79
- # Multirégression linéaire
80
- # df.columns
81
-
82
- X_multi = df[['MedInc', 'AveRooms', 'AveOccup', 'HouseAge', 'AveBedrms', 'Population', 'Latitude', 'Longitude']]
83
- X_train_multi, X_test_multi, y_train_multi, y_test_multi = train_test_split(X_multi, y, test_size=0.2, random_state=42)
84
-
85
- lr_multi = LinearRegression()
86
- lr_multi.fit(X_train_multi, y_train_multi)
87
- y_pred_multi = lr_multi.predict(X_test_multi)
88
-
89
- mse_multi = mean_squared_error(y_test_multi, y_pred_multi)
90
- r2_multi = r2_score(y_test_multi, y_pred_multi)
91
-
92
- # st.write(f"Multirégression linéaire - Erreur quadratique moyenne : {mse_multi}")
93
- # st.write(f"Multirégression linéaire - Score R^2 : {r2_multi}")
94
-
95
- # Comparaison
96
- st.write("Comparaison des modèles de régression linéaire simple et multiple :")
97
- st.write(f"Régression linéaire simple - RMSE: {np.sqrt(mse_single)}, R2: {r2_single}")
98
- st.write(f"Régression linéaire multiple - RMSE: {np.sqrt(mse_multi)}, R2: {r2_multi}")
99
-
100
- # Afficher l'écart entre le prix réel et le prix prédit pour la régression simple
101
- # residuals_single = y_test - y_pred
102
- fig, ax = plt.subplots()
103
- ax.scatter(X_train, y_train_multi, color='blue', label='Données d\'entraînement')
104
- ax.plot(X_train_multi, model.predict(X_train_multi), color='red', linewidth=2, label='Ligne de régression')
105
- ax.set_xlabel('Nombre moyen de pièces par logement')
106
- ax.set_ylabel('Valeur médiane des maisons')
107
- ax.set_title('Ajustement de la régression linéaire sur les données d\'entraînement')
108
- ax.legend()
109
- st.pyplot(fig)
110
-
111
- # fig, ax = plt.subplots(figsize=(10, 6))
112
- # ax.scatter(y_test, residuals_single, c="blue", label="Écarts régression simple")
113
- # ax.axhline(0, color='black', linewidth=1)
114
- # ax.set_xlabel('Valeur réelle')
115
- # ax.set_ylabel('Écarts')
116
- # ax.set_title('Écarts entre le prix réel et le prix prédit pour la régression simple')
117
- # ax.legend()
118
- # st.pyplot(fig)
119
-
120
- # # Afficher l'écart entre le prix réel et le prix prédit pour la régression multiple
121
- # residuals_multi = y_test_multi - y_pred_multi
122
-
123
- # fig, ax = plt.subplots(figsize=(10, 6))
124
- # ax.scatter(y_test_multi, residuals_multi, c="red", label="Écarts régression multiple")
125
- # ax.axhline(0, color='black', linewidth=1)
126
- # ax.set_xlabel('Valeur réelle')
127
- # ax.set_ylabel('Écarts')
128
- # ax.set_title('Écarts entre le prix réel et le prix prédit pour la régression multiple')
129
- # ax.legend()
130
- # st.pyplot(fig)
131
-
132
 
133
 
134
 
 
1
+ import streamlit as st
2
  import numpy as np
3
  import pandas as pd
4
  import matplotlib.pyplot as plt
 
5
  from sklearn.model_selection import train_test_split
6
  from sklearn.linear_model import LinearRegression
7
  from sklearn.metrics import mean_squared_error, r2_score
8
+ from sklearn import datasets
9
+ import io
10
+
11
+ def main():
12
+ st.title("California Housing Analysis")
13
+
14
+ california = datasets.fetch_california_housing()
15
+ df = pd.DataFrame(california.data, columns=california.feature_names)
16
+ df['MedHouseVal'] = california.target
17
+
18
+ st.write("## Data Sample")
19
+ st.write(df.head())
20
+
21
+ st.write("## Data Statistics")
22
+ st.write(df.describe())
23
+
24
+ st.write("## Data Info")
25
+ buffer = io.StringIO()
26
+ df.info(buf=buffer)
27
+ s = buffer.getvalue()
28
+ st.text(s)
29
+
30
+ st.write("## Missing Values")
31
+ st.write(df.isnull().sum())
32
+
33
+ # Fixed target variable
34
+ target = 'MedHouseVal'
35
+ st.write(f"## Target Variable: {target}")
36
+
37
+ # Drop the target from the predictors list
38
+ predictor_options = df.columns.drop(target).tolist()
39
+
40
+ # Add multiselect for user to choose predictor variables
41
+ predictors = st.multiselect(
42
+ 'Select predictor variables for regression:',
43
+ options=predictor_options,
44
+ default=['AveRooms']
45
+ )
46
+
47
+ if not predictors:
48
+ st.error("Please select at least one predictor variable.")
49
+ return
50
+
51
+ st.write("## Scatter Plot")
52
+ if len(predictors) == 1:
53
+ fig, ax = plt.subplots()
54
+ ax.scatter(df[predictors[0]], df[target])
55
+ ax.set_xlabel(predictors[0])
56
+ ax.set_ylabel(target)
57
+ ax.set_title(f'Relationship between {predictors[0]} and {target}')
58
+ st.pyplot(fig)
59
+ else:
60
+ st.write("Scatter plot is only available for a single predictor.")
61
+
62
+ # Regression analysis
63
+ X = df[predictors]
64
+ y = df[target]
65
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
66
+ model = LinearRegression()
67
+ model.fit(X_train, y_train)
68
+ y_pred = model.predict(X_test)
69
+ rmse = np.sqrt(mean_squared_error(y_test, y_pred))
70
+ r2 = r2_score(y_test, y_pred)
71
+
72
+ st.write(f'## Regression Analysis')
73
+ st.write(f'RMSE: {rmse}')
74
+ st.write(f'R-squared: {r2}')
75
+
76
+ if len(predictors) == 1:
77
+ fig, ax = plt.subplots()
78
+ ax.scatter(X_train, y_train, color='blue', label='Training data')
79
+ ax.scatter(X_test, y_test, color='green', label='Testing data')
80
+ ax.plot(X_test, y_pred, color='red', linewidth=2, label='Regression line')
81
+ ax.set_xlabel(predictors[0])
82
+ ax.set_ylabel(target)
83
+ ax.set_title(f'Linear Regression: {predictors[0]} vs {target}')
84
+ ax.legend()
85
+ st.pyplot(fig)
86
+ else:
87
+ fig, ax = plt.subplots(figsize=(10, 6))
88
+ ax.scatter(y_test, y_pred, color='blue', label='Predicted vs Actual')
89
+ ax.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], color='red', linewidth=2, label='Ideal fit')
90
+ ax.set_xlabel('Actual ' + target)
91
+ ax.set_ylabel('Predicted ' + target)
92
+ ax.set_title('Multilinear Regression: Actual vs Predicted')
93
+ ax.legend()
94
+ st.pyplot(fig)
95
+
96
+ if _name_ == "_main_":
97
+ main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
 
99
 
100