Python实现汽车数据分析全流程:数据加载、清洗到可视化
引言
在数据分析领域,数据清洗是确保数据质量和提高模型性能的关键步骤。本次项目使用了 pandas
、numpy
和 matplotlib
等 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-mpg
和 highway-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 数据归一化
为了消除不同特征量纲的影响,对 length
、width
和 height
进行归一化:
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 生成散点图
我们绘制了 horsepower
和 price
之间的关系散点图:
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 多个汽车样本的数据集,并完成了数据预处理。
处理了数据中的缺失值,确保了数据完整性。
通过数据标准化和归一化,提升了数据质量。
通过散点图展示了 horsepower
和 price
之间的关系,为后续分析打下基础。
作为一名数据分析新手,这是我对过去几天学习内容的实践总结。在这个项目中,我将 pandas
和 numpy
结合使用,完成了数据的加载、缺失值处理、数据标准化与归一化等关键步骤。同时,我还利用 matplotlib
生成了 horsepower
和 price
之间关系的散点图,并通过数据可视化初步分析了两者的关系。
通过这个项目,我不仅巩固了数据清洗和数据预处理的基本操作,还加深了对数据分析流程的理解。虽然过程中遇到了一些小问题,但通过查阅资料和不断调试,我成功解决了问题,这让我对数据分析充满了信心。未来我将继续深入学习数据分析,并尝试应用更多的可视化工具和机器学习算法来提升自己的能力!
完整代码
点击此处查看 GitHub 仓库
作者:m0_56866883