Miles Per Gallon - Analyze

1. Déterminez quelles sont les variables Discrètes et Continues du dataset
2. Analysez la variable 'mpg'
2. Analysez la variable 'cylinders'
4. Analysez la variable 'origin'
5. Analysez l’évolution de la consommation des voitures (mpg) par rapport à la puissance (horsepower)
6. Observez l’évolution du poids moyen (weight) des voitures américaines de l’année 70 jusqu’à l’année 82
7. Analysez la relation entre le nombre de cylindres et l’année du modèle
8. Analysez la relation entre le nombre de cylindres et l’origine
9. Quelle est l’accélération moyenne des voitures des différents pays ?
10. Quelle est-elle pour les modèles de l’année 80 ?
11. Au final? Il semblerait qu’une tendance se dégage à travers le temps...



1. Déterminez quelles sont les variables Discrètes et Continues du dataset

df.info()


df.nunique()

mpg             129
cylinders         5
displacement     82
horsepower       93
weight          351
acceleration     95
model_year       13
origin            3
name            305
dtype: int64

df.head()

    mpg  cylinders  displacement  ...  model_year  origin                       name
0  18.0          8         307.0  ...          70     usa  chevrolet chevelle malibu
1  15.0          8         350.0  ...          70     usa          buick skylark 320
2  18.0          8         318.0  ...          70     usa         plymouth satellite
3  16.0          8         304.0  ...          70     usa              amc rebel sst
4  17.0          8         302.0  ...          70     usa                ford torino

[5 rows x 9 columns]

Variables discrètes: 'cylinders', 'model_year', 'origin' et 'name'
Variables continues: 'mpg', 'displacement', 'horsepower', 'weight' et 'acceleration'




2. Analysez la variable 'mpg'

df['mpg'].describe()

count    398.000000
mean      23.514573
std        7.815984
min        9.000000
25%       17.500000
50%       23.000000
75%       29.000000
max       46.600000
Name: mpg, dtype: float64

/!\ Miles per Gallon est différent de la consommation
La consommation moyenne des voitures américaines, européennes et japonaises de 1970 à 1982 est de 23.5 mpg dans ce jeu de données (Source ?)
Avec un écart-type de 7.8 mpg
La consommation la plus élevée est de 9 mpg -> laquelle ?
La consommation la plus faible est de 46.6 mpg -> laquelle ?

Quelle ligne pour 9 mpg ?
df.query("`mpg`== 9")

    mpg  cylinders  displacement  ...  model_year  origin      name
28  9.0          8         304.0  ...          70     usa  hi 1200d

[1 rows x 9 columns]

→ Voiture américaine, année 1970, 8 cylindres, modèle 'hi 1200d'

Quelle ligne pour 46.6 mpg ?
df.query("`mpg`== 46.6")

      mpg  cylinders  displacement  ...  model_year  origin       name
322  46.6          4          86.0  ...          80   japan  mazda glc

[1 rows x 9 columns]

→ Voiture japonaise, année 1980, modèle 'mazda glc'

fig, ax = sns.subplots(2, 1, sharex=True)
plt.suptitle('Répartition des consommations')
sns.histplot(data=df, x='mpg', ax=ax[0])
sns.boxplot(data=df, x='mpg', ax=ax[1])




2. Analysez la variable 'cylinders'

Distribution des cylindrées
df['cylinders'].value_counts(normalize=False)

cylinders
4    204
8    103
6     84
3      4
5      3
Name: count, dtype: int64

→ Il y a beaucoup de 4 cylindres parmi les modèles des années 70-82
Ensuite ce sont les 8 cylindres

sns.countplot(data=df, x='cylinders')
plt.title('Distribution des cylindrées')




4. Analysez la variable 'origin'

Distribution des origines
df['origin'].value_counts(normalize=False)

origin
usa       249
japan      79
europe     70
Name: count, dtype: int64

→ Dans ce jeu de données, la majorité des modèles sont des américaines, et sinon il y a un nombre équivalent d’éuropéennes et de japonaises.




5. Analysez l’évolution de la consommation des voitures (mpg) par rapport à la puissance (horsepower)

sns.scatterplot(data=df, x='horsepower', y='mpg')

→ Les miles per Gallon diminuent lorsque que la puissance augmente.
<=> La consommation augmente lorsque que la puissance augmente.
Cette diminution n'est pas linéaire, mais suit une tendance quadratique

sns.scatterplot(data=df, x='horsepower', y='mpg', hue='model_year')

→ On observe qu'au cours du temps, les voitures consomment de moins en moins, et ont une puissance de plus en plus faible.

df.groupby('model_year')[['horsepower', 'mpg']].mean()

            horsepower        mpg
model_year                       
70          147.827586  17.689655
71          107.037037  21.250000
72          120.178571  18.714286
73          130.475000  17.100000
74           94.230769  22.703704
75          101.066667  20.266667
76          101.117647  21.573529
77          105.071429  23.375000
78           99.694444  24.061111
79          101.206897  25.093103
80           77.481481  33.696552
81           81.035714  30.334483
82           81.466667  31.709677

sns.scatterplot(data=df, x='horsepower', y='mpg')

plt.plot(df_temp['horsepower'], df_temp['mpg'], '--o')
for index, row in df_temp.iterrows():
plt.text(row['horsepower'], row['mpg'] + 0.1, index, color='black', ha='center', size='small')
plt.xlabel('horsepower')
plt.ylabel('mpg')

plt.plot(df_temp['horsepower'], df_temp['mpg'])




6. Observez l’évolution du poids moyen (weight) des voitures américaines de l’année 70 jusqu’à l’année 82

df.query("`origin`== 'usa'").groupby('model_year')['weight'].mean()

model_year
70    3716.500000
71    3401.600000
72    3682.666667
73    3821.448276
74    3503.333333
75    3533.200000
76    3405.409091
77    3422.000000
78    3141.136364
79    3210.217391
80    2822.428571
81    2695.000000
82    2637.750000
Name: weight, dtype: float64

→ Il semblerait que les voitures américaines soient de plus en plus légères.

df.query("`origin`== 'usa'").groupby('model_year')['weight'].mean().plot(kind='bar')

df_tmp = df.query("`origin`== 'usa'").groupby('model_year')['weight'].mean()
plt.plot(df_temp.index, df_temp.values)

data_plot = df.groupby(['origin', 'model_year'])['weight'].mean().reset_index()
sns.lineplot(data=data_plot, x='model_year', y='weight', hue='origin')

→ Les voitures sont de plus en plus légères aux USA, mais en Europe leur poids augmente légèrement. Au Japon, il reste le même




7. Analysez la relation entre le nombre de cylindres et l’année du modèle

Deux variables discrètes => table de contingence

pd.crosstab(df['model_year'], df['cylinders'])

cylinders   3   4  5   6   8
model_year                  
70          0   7  0   4  18
71          0  13  0   8   7
72          1  14  0   0  13
73          1  11  0   8  20
74          0  15  0   7   5
75          0  12  0  12   6
76          0  15  0  10   9
77          1  14  0   5   8
78          0  17  1  12   6
79          0  12  1   6  10
80          1  25  1   2   0
81          0  21  0   7   1
82          0  28  0   3   0

sns.heatmap(pd.crosstab(df['model_year'], df['cylinders']))

pd.crosstab(df['model_year'], df['cylinders'])).plot(kind='bar')

pd.crosstab(df['model_year'], df['cylinders'], normalize='index').plot(kind='bar', stacked=True)
plt.xlabel = 'Model Year'
plt.ylabel = 'Proportion'
plt.title('Proportion des cylindrées à travers les années')
plt.legend(title='cylinders', bbox_to_anchor=(1.05, 0), loc='lower right')

→ Sur l'ensemble de notre jeu de données, tout pays confondu, il semblerait qu'il y ait de moins en moins de 8 cylindres et de plus en plus de 4 cylindres




8. Analysez la relation entre le nombre de cylindres et l’origine

Deux variables discrètes => table de contingence

pd.crosstab(df['cylinders'], df['origin'])

origin     europe  japan  usa
cylinders                    
3               0      4    0
4              63     69   72
5               3      0    0
6               4      6   74
8               0      0  103

→ On observe (modèles de 1970 à 1982) que le nombre de véhicules de 4 cylindres est équivalent en Europe, au Japon et aux USA
Le Japon est le seul pays à avoir des 3 cylindres
L’Europe est le seul pays à avoir des 5 cylindres
Les USA sont les seuls à avoir des 8 cylindres
Les USA ont beaucoup plus de 5 cylindres qu’en Europe et au Japon




9. Quelle est l’accélération moyenne des voitures des différents pays ?

df.groupby('origin')['acceleration'].mean()

origin
europe    16.787143
japan     16.172152
usa       15.033735
Name: acceleration, dtype: float64

→ L'accélération moyenne des voitures semble être la même au Japon et en Europe, mais elle semble être plus faible aux USA




10. Quelle est-elle pour les modèles de l’année 80 ?

df.query("`model_year`== 80").groupby('origin')['acceleration'].mean()

origin
europe    18.366667
japan     16.015385
usa       16.800000
Name: acceleration, dtype: float64




11. Au final? Il semblerait qu’une tendance se dégage à travers le temps...

Evolution des Miles per Gallon au cours du temps
df.groupby('model_year')['mpg'].mean()

model_year
70    17.689655
71    21.250000
72    18.714286
73    17.100000
74    22.703704
75    20.266667
76    21.573529
77    23.375000
78    24.061111
79    25.093103
80    33.696552
81    30.334483
82    31.709677
Name: mpg, dtype: float64

df.groupby('model_year')['mpg'].mean().plot()

→ L’autonomie moyenne des voitures augmente au cours du temps

df_temp = df.groupby(['model_year', 'origin'])['mpg'].mean().reset_index()
sns.lineplot(df_temp, x='model_year', y='mpg', hue='origin')

→ L’autonomie moyenne des voitures augmente au cours du temps, quel que soit le pays

df_temp = df.groupby(['model_year', 'cylinders'])['mpg'].mean().reset_index()
sns.lineplot(df_temp, x='model_year', y='mpg', hue='cylinders')

→ L’autonomie moyenne des voitures augmente au cours du temps, quel que soit la cylindrée

Evolution des Déplacements au cours du temps
df.groupby('model_year')['displacement'].mean()

model_year
70    281.413793
71    209.750000
72    218.375000
73    256.875000
74    171.740741
75    205.533333
76    197.794118
77    191.392857
78    177.805556
79    206.689655
80    115.827586
81    135.310345
82    128.870968
Name: displacement, dtype: float64

df.groupby('model_year')['displacement'].mean().plot()

→ Les déplacements moyens diminuent au cours du temps

Evolution de la puissance des voitures au cours du temps
df.groupby('model_year')['horsepower'].mean()

model_year
70    147.827586
71    107.037037
72    120.178571
73    130.475000
74     94.230769
75    101.066667
76    101.117647
77    105.071429
78     99.694444
79    101.206897
80     77.481481
81     81.035714
82     81.466667
Name: horsepower, dtype: float64

df.groupby('model_year')['horsepower'].mean().plot()

→ La puissance moyenne des voitures diminue au cours du temps

Evolution du poids des voitures au cours du temps
df.groupby('model_year')['weight'].mean()

model_year
70    3372.793103
71    2995.428571
72    3237.714286
73    3419.025000
74    2877.925926
75    3176.800000
76    3078.735294
77    2997.357143
78    2861.805556
79    3055.344828
80    2436.655172
81    2522.931034
82    2453.548387
Name: weight, dtype: float64

df.groupby('model_year')['weight'].mean().plot()

→ Le poids moyen des voitures diminue au cours du temps

df_temp = df.groupby(['model_year', 'cylinders'])['weight'].mean().reset_index()
sns.lineplot(df_temp, x='model_year', y='weight', hue='cylinders')

→ Pas de tendance claire par cylindrée

Evolution de l'accélération des voitures au cours du temps
df.groupby('model_year')['acceleration'].mean()

model_year
70    12.948276
71    15.142857
72    15.125000
73    14.312500
74    16.203704
75    16.050000
76    15.941176
77    15.435714
78    15.805556
79    15.813793
80    16.934483
81    16.306897
82    16.638710
Name: acceleration, dtype: float64

df.groupby('model_year')['acceleration'].mean().plot()

→ L’accélération moyenne des voitures augmente au cours du temps