Python实现汽车数据分析全流程:数据加载、清洗到可视化

 引言

在数据分析领域,数据清洗是确保数据质量和提高模型性能的关键步骤。本次项目使用了 pandasnumpymatplotlib 等 Python 库,完成了从数据加载、缺失值处理、数据标准化到数据可视化的一系列操作。本文将详细讲解整个流程,并展示结果图示。


 1. 数据加载与预处理

 1.1 数据集获取(数据集来源是coursra课程上的公开csv)

我们使用一个汽车数据集,该数据集包含了多种汽车的技术参数、价格、油耗等信息。数据直接从 URL 加载:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

url = 'https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DA0101EN-SkillsNetwork/labs/Data%20files/auto.csv'
original_df = pd.read_csv(url)

1.2 替换缺失值

由于原始数据集中使用 ? 表示缺失值,因此我们使用 replace 将其替换为 NaN

df1 = original_df.replace('?', np.nan)
 1.3 设置列名

给数据框添加列名,以便于后续处理:

headers = ["symboling", "normalized-losses", "make", "fuel-type", "aspiration", "num-of-doors", "body-style",
           "drive-wheels", "engine-location", "wheel-base", "length", "width", "height", "curb-weight", "engine-type",
           "num-of-cylinders", "engine-size", "fuel-system", "bore", "stroke", "compression-ratio", "horsepower",
           "peak-rpm", "city-mpg", "highway-mpg", "price"]
df1.columns = headers

2. 缺失值处理

 2.1 检查数据中的缺失值

检查数据集中每一列的缺失值数量:

missing_data = df1.isnull()
for column in missing_data.columns.tolist():
    print(column)
    print(missing_data[column].value_counts(dropna=False))
    print("")

2.2 替换缺失值

我们使用 fillna() 进行缺失值的填充:

# 填充数值列缺失值为均值
mean_df1 = df1.copy()
mean_df1['normalized-losses'] = mean_df1['normalized-losses'].astype(float).fillna(mean_df1['normalized-losses'].mean())
mean_df1['bore'] = mean_df1['bore'].astype(float).fillna(mean_df1['bore'].mean())
mean_df1['horsepower'] = mean_df1['horsepower'].astype(float).fillna(mean_df1['horsepower'].mean())
mean_df1['peak-rpm'] = mean_df1['peak-rpm'].astype(float).fillna(mean_df1['peak-rpm'].mean())

# 填充分类列缺失值为众数
mean_df1['num-of-doors'] = mean_df1['num-of-doors'].fillna(mean_df1['num-of-doors'].mode()[0])

# 删除 'price' 列中缺失值所在的行
mean_df1.dropna(subset=['price'], axis=0, inplace=True)

 3. 数据标准化与归一化

 3.1 数据标准化

我们将 city-mpghighway-mpg 转换为更符合国际标准的 L/100km 格式:

mean_df1['city-L/100km'] = 235 / mean_df1['city-mpg']
mean_df1['highway-L/100km'] = 235 / mean_df1['highway-mpg']

 3.2 数据归一化

为了消除不同特征量纲的影响,对 lengthwidthheight 进行归一化:

mean_df1['length'] = mean_df1['length'] / mean_df1['length'].max()
mean_df1['width'] = mean_df1['width'] / mean_df1['width'].max()
mean_df1['height'] = mean_df1['height'] / mean_df1['height'].max()

 4. 数据可视化:马力与价格的关系

 4.1 生成散点图

我们绘制了 horsepowerprice 之间的关系散点图:

plt.figure(figsize=(12, 8))
plt.scatter(mean_df1['horsepower'], mean_df1['price'], color='blue', alpha=0.6, edgecolor='k')
plt.xlabel("Horsepower", fontsize=14)
plt.ylabel("Price", fontsize=14)
plt.title("Relationship between Horsepower and Price", fontsize=16)
plt.grid(linestyle='--', alpha=0.7)
plt.savefig("horsepower_distribution.png", dpi=300, bbox_inches='tight')
plt.show()
📸生成的图表

 


 5. 关键结果与总结

 加载了包含 200 多个汽车样本的数据集,并完成了数据预处理。
 处理了数据中的缺失值,确保了数据完整性。
 通过数据标准化和归一化,提升了数据质量。
 通过散点图展示了 horsepowerprice 之间的关系,为后续分析打下基础。

作为一名数据分析新手,这是我对过去几天学习内容的实践总结。在这个项目中,我将 pandasnumpy 结合使用,完成了数据的加载、缺失值处理、数据标准化与归一化等关键步骤。同时,我还利用 matplotlib 生成了 horsepowerprice 之间关系的散点图,并通过数据可视化初步分析了两者的关系。

通过这个项目,我不仅巩固了数据清洗和数据预处理的基本操作,还加深了对数据分析流程的理解。虽然过程中遇到了一些小问题,但通过查阅资料和不断调试,我成功解决了问题,这让我对数据分析充满了信心。未来我将继续深入学习数据分析,并尝试应用更多的可视化工具和机器学习算法来提升自己的能力!


完整代码

点击此处查看 GitHub 仓库


作者:m0_56866883

物联沃分享整理
物联沃-IOTWORD物联网 » Python实现汽车数据分析全流程:数据加载、清洗到可视化

发表回复