import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.read_csv("Computers.csv")
df = pd.DataFrame(data)
df
ligne, colonne = df.shape
print("Le jeu de données contient", ligne, "lignes et", colonne, "colonnes." )
Le jeu de données contient 6259 lignes et 11 colonnes.
df.dtypes
df.isnull().sum()
# Donne le total, la moyenne, l'écart-type, le minimum, le premier quartile, la médiane, le troisième quartile et le maximum pour chaque variable numérique.
df.describe()
# Donne le total, le nombre d'objets différents, le top et la fréquence pour chaque variable catégorique.
df.describe(include=['object'])
df = df.drop(['Unnamed: 0'], axis = 1)
df['cd'] = df['cd'].eq('yes').astype(int)
df['multi'] = df['multi'].eq('yes').astype(int)
df['premium'] = df['premium'].eq('yes').astype(int)
df
# Ajout d'une colonne temporaire pour notre graphe
df['tmp'] = df.price
# Catégorisation des prix selon des tranches de prix pour mieux les afficher
df.loc[df['tmp'] <= 1000, 'tmp'] = 0
df.loc[(df['tmp'] > 1000) & (df['tmp'] <= 2000), 'tmp'] = 1
df.loc[(df['tmp'] > 2000) & (df['tmp'] <= 3000), 'tmp'] = 2
df.loc[(df['tmp'] > 3000) & (df['tmp'] <= 4000), 'tmp'] = 3
df.loc[df['tmp'] > 4000, 'tmp'] = 4
# Affichage du graphique
prix = df['tmp'].map({0:"< 1000", 1:"1000-2000", 2:"2000-3000", 3:"3000-4000", 4:"> 4000"})
prix.value_counts().plot.pie(title = 'Prix des ordinateurs', figsize=(5,5), autopct='%1.0f%%')
# Suppression de la colonne temporaire
df = df.drop(['tmp'], axis = 1)
plt.show()
# Transformation des valeurs numériques en objet pour ne plus avoir de valeur nulle sur le graphe sur une nouvelle colonne temporaire
df['tmp'] = df['ram'].map({2: '2', 24: '24', 32: '32', 4: '4', 8: '8', 16: '16'})
# Group by selon la taille des Rams, moyenne sur chaque variable
dfRam = df.groupby('tmp').mean()
# Liste des différentes valeurs de ram
ram = [ram for ram, df in df.groupby('tmp')]
# Style du graphe
plt.style.use('seaborn-whitegrid')
# Paramètres du graphe
plt.bar(ram, dfRam['price'], color='blue')
plt.title('Prix moyen d\'un ordinateur en fonction de sa ram.', color='red')
plt.xlabel('Prix', color='blue')
plt.ylabel('RAM')
# Suppression de la colonne temporaire
df = df.drop(['tmp'], axis=1)
plt.show()
corr = df.corr()
plt.subplots(figsize=(10,8))
plt.title("Correlation Heatmap")
sns.heatmap(corr, annot=True)
plt.show()
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression, Ridge
# Validation croisée
from sklearn.model_selection import validation_curve
from sklearn.model_selection import cross_validate
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
# Données qui serviront à la prédiction
X = df.drop(["price"], axis = 1)
# Données cibles
y = df.price
# Score de chaque algorithme
print("Le taux de réussite de DecisionTreeRegressor est de :",cross_val_score(DecisionTreeRegressor(), X, y).mean(),"%.")
print("Le taux de réussite de RandomForestRegressor est de :",cross_val_score(RandomForestRegressor(), X, y).mean(),"%.")
print("Le taux de réussite de GradientBoostingRegressor est de :",cross_val_score(GradientBoostingRegressor(), X, y).mean(),"%.")
print("Le taux de réussite de KNeighborsRegressor est de :",cross_val_score(KNeighborsRegressor(), X, y).mean(),"%.")
print("Le taux de réussite de LinearRegression est de :",cross_val_score(LinearRegression(), X, y).mean(),"%.")
print("Le taux de réussite de Ridge est de :",cross_val_score(Ridge(), X, y).mean(),"%.")
Le taux de réussite de DecisionTreeRegressor est de : 0.5303612625967148 %.
Le taux de réussite de RandomForestRegressor est de : 0.6249346342778922 %.
Le taux de réussite de GradientBoostingRegressor est de : 0.47634062051064346 %.
Le taux de réussite de KNeighborsRegressor est de : -0.4673017443558738 %.
Le taux de réussite de LinearRegression est de : 0.6807508033872672 %.
Le taux de réussite de Ridge est de : 0.6807813211070556 %.
# Pour LinearRegression
y_lr_pred = cross_val_predict(LinearRegression(), X, y)
print("Prédiction de LinearRegression :\n", y_lr_pred)
# Pour Ridge
y_r_pred = cross_val_predict(Ridge(), X, y)
print("Prédiction de Ridge :\n", y_r_pred)
Prédiction de LinearRegression :
[2182.31496446 2152.15219657 2353.41666924 ... 3304.62414099 2560.07943897
2834.98432883]
Prédiction de Ridge :
[2182.46044144 2152.29342025 2353.53436191 ... 3304.61044527 2560.18562271
2835.03756815]
from sklearn.metrics import mean_squared_error
# Pour LinearRegression
print("LinearRegression :", mean_squared_error(y,y_lr_pred))
# Pour Ridge
print("Ridge :", mean_squared_error(y,y_r_pred))
LinearRegression : 98537.68926739767
Ridge : 98530.1523929681
from sklearn.metrics import mean_absolute_percentage_error
# Pour LinearRegression
print("LinearRegression :", mean_absolute_percentage_error(y,y_lr_pred))
# Pour Ridge
print("Ridge :", mean_absolute_percentage_error(y,y_r_pred))
LinearRegression : 0.11218707996035779
Ridge : 0.11217954851970699
# Algorithme utilsé pour le modèle final
RidgeModel = Ridge()
# Performance de la validation croisée
cv = cross_validate(RidgeModel, X, y)
print('temps moyen :', cv['fit_time'].mean(), '\nscore moyen :', cv['test_score'].mean())
temps moyen : 0.00990123748779297
score moyen : 0.6807813211070556
print(cross_val_predict(RidgeModel, X, y))
[2182.46044144 2152.29342025 2353.53436191 ... 3304.61044527 2560.18562271
2835.03756815]