[PYTHON] SIGNATURE Quest ③ Estimation du prix de l'hébergement

Mokuji: Procédure de gestion des problèmes de régression

① Traitement des valeurs manquantes (répéter ① et ②) ② Comprendre les caractéristiques des données selon la procédure de base Statistiques de base Visualisation ③ Génération de fonctionnalités ④ Création d'un modèle de régression multiple et exécution de prédiction ⑤ Évaluation des résultats de prédiction (RMSE) ⑥ Amélioration de la précision de la prédiction du modèle (retour à ⑤)

Gestion des valeurs manquantes

2020-08-24_23h38_36.png

2020-08-24_23h39_13.png

2020-08-24_23h39_33.png

2020-08-24_23h41_43.png

2020-08-24_23h43_09.png

2020-08-24_23h44_00.png

2020-08-24_23h45_23.png

2020-08-24_23h45_43.png

2020-08-24_23h46_21.png

2020-08-24_23h46_31.png

Fonctions importantes

DataFrame.isnull().sum()   DataFrame.dropna()   DataFrame.fillna()

Manipulation de données

#Extraction de données pour lesquelles les lits sont NaN(Sélectionnez dans SQL* where )
beds_nan_data = DataFrame[DataFrame['beds'].isnull()]

# bed_Afficher le nombre de cas pour chaque type de type
print(beds_nan_data['bed_type'].value_counts())

# beds,bedrooms,Supprimer les données contenant des valeurs manquantes dans les salles de bains
data = data.dropna(subset=['beds','bedrooms','bathrooms'])

#Moyenne variable_revoir à val_scores_Remplacez la valeur moyenne de la note.
mean_val = data['review_scores_rating'].mean()

# review_scores_Complétez la valeur manquante de la note avec la valeur moyenne.
data['review_scores_rating'] = data['review_scores_rating'].fillna(mean_val)

Visualisation de données

2020-08-25_23h14_27.png

2020-08-25_23h15_02.png

2020-08-26_08h29_14.png

2020-08-26_08h30_24.png

2020-08-26_08h31_06.png

2020-08-26_08h31_54.png

2020-08-26_08h33_12.png

2020-08-26_08h44_51.png

2020-08-26_08h45_12.png

2020-08-26_08h46_10.png

2020-08-26_08h46_26.png

Statistiques de base

#Afficher le contenu de l'élément
print(DataFrame['Nom de colonne'].unique())
#Afficher le nombre d'éléments
print(DataFrame['Nom de colonne'].nunique())
#important:Afficher le numéro de chaque élément par ordre décroissant
print(DataFrame['Nom de colonne'].value_counts())

#2,4,7,7,10,12,13,17,20,22,Afficher 30 statistiques
#Afficher des valeurs telles que la valeur moyenne, la valeur du média, la valeur maximale et la valeur la plus fréquente
s = pd.Series([2,4,7,7,10,12,13,17,20,22,30])
print(s.describe())
print(s.mode())

Histogramme, graphique à barres

#Extraire uniquement la colonne y des données de variable et l'affecter à la variable y
y = data['y']
#Visualisation de l'histogramme
y.plot.hist(title='Prix de l'hébergement')
#Fonctions requises pour afficher les résultats de la visualisation
plt.show()

# value_counts()Afficher le résultat de
v = data['Nom de colonne'].value_counts()
v.plot.bar()
plt.show()

Supprimer les valeurs aberrantes

#Je souhaite extraire des données avec y de 10 ou plus(Je souhaite supprimer moins de 10)Donc la condition est la donnée['y'] >= 10

#Vérifiez le nombre de lignes avant la suppression
before_rows = data.shape[0]
print(before_rows)

#Effacer
data = data[data['y'] >= 10]

#Vérifiez le nombre de lignes après suppression
after_rows = data.shape[0]
print(after_rows)

Dessiner un diagramme de barbe

#Dessiner un diagramme de barbe
sns.boxplot(data=DataFrame, x='Nom de la colonne horizontale', y='Nom de la colonne verticale')

#Limiter la plage d'affichage
plt.ylim(0,600)

plt.show()

Dessiner un diagramme de dispersion

DataFrame.plot.scatter(x='Nom de la colonne horizontale', y='Nom de la colonne verticale')
plt.show()

Extraire sous plusieurs conditions

#salles de bains est 0 à partir des données.Extrayez les données avec 0 et y de 1000 dollars ou plus et affichez-les.
#DataFrame si plusieurs conditions sont remplies[(conditions) & (conditions)]
data_tmp = data[(data['bathrooms']==0.0) & (data['y'] >= 1000)]

Traitement des fonctionnalités

2020-08-26_14h04_06.png

2020-08-26_14h05_22.png

2020-08-26_14h05_44.png

2020-08-26_14h06_38.png

2020-08-26_14h07_14.png

2020-08-26_14h07_37.png

une fonction

2020-08-26_15h12_14.png

2020-08-26_15h12_51.png

2020-08-26_15h12_58.png

** S'il s'agit d'une fonction auto-créée, il est nécessaire d'appeler la fonction après avoir défini la fonction, mais s'il s'agit d'une fonction lambda, la fonction peut être définie et appelée sur une seule ligne. ** **

2020-08-26_15h13_42.png

2020-08-26_15h13_58.png

# property.Lisons csv et affectons-le aux données variables.
mydata = pd.read_csv('property.csv')

# cleaning_frais est t,Puisque c'est f, 1,Veuillez convertir en 0.
def change_tf(x):
    if x == 't':
        return 1
    elif x == 'f':
        return 0
mydata['cleaning_fee'] = mydata['cleaning_fee'].apply(change_tf)

Fonction d'évaluation

2020-08-26_17h14_40.png

2020-08-26_17h15_24.png

2020-08-26_17h15_37.png

2020-08-26_17h16_43.png

2020-08-26_17h18_23.png

2020-08-26_17h18_33.png

2020-08-26_17h19_06.png

Comment calculer RMSE

#Importer la bibliothèque
import numpy as np
from sklearn.metrics import mean_squared_error as MSE

#Préparation variable
actual = [3,4,6,2,4,6,1]
pred = [4,2,6,5,3,2,3]

#Calcul de MSE
mse = MSE(actual,pred)
print(mse)

#Calcul du RMSE
rmse = np.sqrt(mse)
print(rmse)

** RMSE n'est pas implémenté dans scicit-learn. MSE (Mean Squared Error), qui est la valeur avant de prendre la racine carrée de RMSE, est implémentée. RMSE est calculé en implémentant la partie qui prend la racine carrée de MSE. ** **

Modèle de régression linéaire

2020-08-26_17h32_04.png

2020-08-26_17h33_14.png

2020-08-26_17h33_31.png

#Importons LinearRegression.
from sklearn.linear_model import LinearRegression

#Préparation du modèle
lr = LinearRegression()

#Apprendre le modèle
lr.fit(X_train, y_train)

#Affichage du coefficient de régression partiel
print(pd.DataFrame(lr.coef_, index=X_train.columns))

#Affichage des sections
print(lr.coef_)

# X_Remplissez les blancs comme vous vous attendez pour le train.
y_pred_train = lr.predict(X_train)

#Confirmation des résultats des prévisions
print(y_pred_train)

#Arrondir et afficher les résultats
chk = int(round(y_pred_train[1]))

Résumé: Variables explicatives, partitionnement des données, modélisation, évaluation de modèle (RMSE)

#Variables explicatives utilisées pour la prédiction, la division des données, la création de modèles, l'évaluation de modèles(RMSE)
select_columns = ['room_type','accommodates','bed_type','bathrooms','cleaning_fee']
dummy_data = pd.get_dummies(data[select_columns],drop_first=True)

X_train,X_test,y_train,y_test = train_test_split(dummy_data, data['y'], random_state = 1234)

lr = LinearRegression()
lr.fit(X_train, y_train)

y_pred_train = lr.predict(X_train)

# X_Calculer le RMSE du train
rmse_train = np.sqrt(MSE(y_train, y_pred_train))

#X laissé pour évaluation_Prédire en utilisant le test
y_pred_test = lr.predict(X_test)

# X_Calcul de RMSE pour la prédiction de test
rmse_test = np.sqrt(MSE(y_test,y_pred_test))

#Afficher RMSE pour les données d'entraînement et d'évaluation
print(rmse_train)
print(rmse_test)

** Étant donné que le RMSE pour les données de test est d'environ 131, ce modèle prédit une erreur moyenne d'environ 131 $ par rapport au prix réel de la chambre pour les données d'évaluation. Je comprends. ** **

Créez trois modèles et affichez les résultats de l'analyse de régression linéaire des résultats intégrés


select_columns = ['room_type','accommodates','bed_type','bathrooms','cleaning_fee']

data_entire = data[data['room_type'] == 'Entire home/apt']
data_private = data[data['room_type'] == 'Private room']
data_share = data[data['room_type'] == 'Shared room']
dummy_data_entire = pd.get_dummies(data_entire[select_columns], drop_first=True)
dummy_data_private = pd.get_dummies(data_private[select_columns],drop_first=True)
dummy_data_share = pd.get_dummies(data_share[select_columns], drop_first=True)

X_train_e,X_test_e,y_train_e,y_test_e = train_test_split(dummy_data_entire, data_entire['y'], random_state = 1234)
X_train_p,X_test_p,y_train_p,y_test_p = train_test_split(dummy_data_private, data_private['y'], random_state = 1234)
X_train_s,X_test_s,y_train_s,y_test_s = train_test_split(dummy_data_share, data_share['y'], random_state = 1234)

model_e = LinearRegression()
model_e.fit(X_train_e, y_train_e)
pred_e_train = model_e.predict(X_train_e)
pred_e_test = model_e.predict(X_test_e)

model_p = LinearRegression()
model_p.fit(X_train_p, y_train_p)
pred_p_train = model_p.predict(X_train_p)
pred_p_test = model_p.predict(X_test_p)

model_s = LinearRegression()
model_s.fit(X_train_s, y_train_s)
pred_s_train = model_s.predict(X_train_s)
pred_s_test = model_s.predict(X_test_s)

c'est tout

Recommended Posts

SIGNATURE Quest ③ Estimation du prix de l'hébergement