Je lis parfois un fichier csv sans nom de colonne et lui donne un nom de colonne, mais j'oublie souvent comment le faire, alors notez-le comme mémorandum.
Pardon. Le contenu n'est vraiment pas un gros problème.
Les données utilisées étaient les données sur le logement publiées dans le référentiel d'apprentissage machine de l'UCI. housing data
Tout d'abord, lisez les données. Les données sont séparées par des espaces au lieu de virgules, spécifiez donc les espaces entre sep. De plus, étant donné que Housing.data n'a pas de nom de colonne, les données de la première ligne seront reconnues comme un nom de colonne lorsqu'elles sont lues normalement, spécifiez donc header = None pour éviter cela.
import pandas as pd
df = pd.read_csv("housing.data", header=None, sep="\s+")
Le résultat de la lecture des données est
Ce sera. Les nombres de 0 à 13 sont automatiquement attribués comme noms de colonne. Remplacez ce nom de colonne créé automatiquement par le nom de colonne d'origine. Commencez par créer un dictionnaire (labels_dict) qui associe le nom de la colonne avant la conversion au nom de la colonne après la conversion. Si vous spécifiez labels_dict dans la méthode renommer du bloc de données, les noms de colonne seront remplacés selon la correspondance affichée dans le dictionnaire.
labels = ["CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT", "MEDV"]
labels_dict = {num: label for num, label in enumerate(labels)}
df = df.rename(columns = labels_dict)
#Enregistrez le bloc de données avec le nom de la colonne ajouté en tant que fichier csv.
df.to_csv("housing_data.csv", index=False)
Si vous vérifiez l'intérieur de df après l'exécution, vous pouvez voir que le nom de la colonne a été changé.
Comme c'est un gros problème, utilisons ces données pour prédire approximativement le prix de l'immobilier.
Si vous exécutez le code suivant, vous pouvez voir que ces données sont toutes des données numériques et qu'il n'y a aucune valeur manquante. Vous pouvez également afficher des statistiques. Veuillez l'essayer si vous le souhaitez.
from IPython.display import display
#Affichage du type de données
display(df.dtypes)
#Affichage du nombre de valeurs manquantes
display(df.isnull().sum())
#Affichage des statistiques
display(df.describe())
Normalement, les données sont prétraitées lors de la vérification des statistiques des données, puis les données sont entrées dans l'algorithme d'apprentissage automatique, mais cette fois elles seront omises. C'est parce que ça va.
J'omets diverses choses. Après tout, ça va. Au minimum, nous standardisons les données et les évaluons avec des données de test, mais nous n'ajustons aucun hyper paramètre. L'évaluation était simplement basée sur l'erreur quadratique moyenne (RMSE). Le code est ci-dessous.
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
%matplotlib inline
#Paramètres du pipeline
pipe = Pipeline([
("scl", StandardScaler()),
("pca", PCA(n_components=10)),
("lr", LinearRegression(normalize=False))
])
#Répartition des données
xtrain, xtest, ytrain, ytest = train_test_split(df[df.columns[df.columns != "MEDV"]], df["MEDV"], test_size=0.3, random_state=1)
#Apprentissage de modèle
pipe.fit(X=xtrain, y=ytrain)
#Prévisions de prix
ypred = pipe.predict(xtest)
#Évaluation du modèle
display(mean_squared_error(ytest, ypred))
#Voir les résultats
result = pd.DataFrame(columns=["index", "true", "pred"])
result["index"] = range(len(ytest))
result["true"] = ytest.tolist()
result["pred"] = ypred
plt.figure(figsize=(15,5))
plt.scatter(result["index"], result["true"], marker="x", label="true")
plt.scatter(result["index"], result["pred"], marker="v", label="predict")
plt.xlabel("ID")
plt.ylabel("Prix médian")
plt.grid()
plt.legend()
plt.show()
Lorsque cela a été fait, l'erreur quadratique moyenne était de 21,19. Je ne sais pas si c'est bon ou mauvais sans regarder correctement les données, mais pour le moment, j'ai pu évaluer la différence entre la prévision de prix et la valeur réelle.
De plus, la valeur prédite et la valeur vraie sont converties en grammes comme suit. En un coup d'œil, vous pouvez voir que plus le prix est élevé, plus l'écart est grand et plus la valeur prévue est basse.