资讯动态

汽车数据集清洗与分析实战:从Pandas处理到品牌洞察

发布时间:2026/9/12 23:04:14 来源:尧图企业网站定制
1. 项目概述与数据背景汽车数据集分析是数据科学领域极具实用价值的实战项目。这次我们要处理的是一个包含多种品牌汽车信息的结构化数据集字段可能包括品牌、型号、年份、价格、里程数、发动机类型等常见属性。这类数据通常来源于二手车交易平台、汽车评测网站或企业内部销售系统。在实际业务场景中这类分析可以帮助经销商了解市场供需关系辅助消费者做出购买决策或者为制造商提供产品改进依据。但原始数据往往存在各种质量问题缺失值、异常价格、重复记录、品牌名称不一致比如BMW和宝马混用等。这就是为什么我们需要系统化的数据清洗流程。2. 数据清洗全流程解析2.1 数据质量诊断首先我们需要对数据集进行全面体检。使用Python的Pandas库可以快速生成数据质量报告import pandas as pd # 加载数据集 df pd.read_csv(auto_data.csv) # 基础信息概览 print(df.info()) # 统计缺失值 missing_values df.isnull().sum() print(missing_values[missing_values 0]) # 数值型字段描述统计 print(df.describe())关键诊断点包括各字段缺失值比例超过30%的字段可能需要特殊处理数值字段的分布情况通过describe()查看最小值、最大值、四分位数文本字段的唯一值数量品牌名称是否标准化2.2 缺失值处理实战汽车数据集中常见的缺失情况包括价格字段缺失约5-10%的记录里程数为空特别是较新的车型某些配置信息未填写如天窗、导航等处理方法需要根据字段特性决定# 价格使用同品牌同年份车型的中位数填充 df[price] df.groupby([brand,year])[price].transform( lambda x: x.fillna(x.median())) # 里程数缺失且年份较新的记录填充为0 df.loc[(df[mileage].isna()) (df[year] 2020), mileage] 0 # 配置类字段缺失视为无该配置 config_cols [sunroof,navigation,leather_seats] df[config_cols] df[config_cols].fillna(False)重要提示对于关键字段如价格填充后应添加标记列如price_imputed记录哪些值是估算的避免后续分析产生偏差。2.3 异常值检测与处理汽车数据中典型的异常值包括价格异常高/低可能是单位错误如美元/人民币混淆里程数与年份不匹配3年车龄但里程20万公里发动机排量超出合理范围使用分位数和业务规则结合的方法检测# 价格异常检测 Q1 df[price].quantile(0.25) Q3 df[price].quantile(0.75) IQR Q3 - Q1 price_outliers df[(df[price] Q1 - 1.5*IQR) | (df[price] Q3 1.5*IQR)] # 里程-年份合理性检查 df[miles_per_year] df[mileage] / (2023 - df[year]) unreasonable df[df[miles_per_year] 30000] # 年均超过3万英里视为异常处理方案建议确认是否为录入错误如多输一个0对确认的异常值可用品牌车型年份分组的中位数替换极端异常且无法修正的记录应考虑删除2.4 文本字段标准化品牌名称的混乱是常见问题大小写不一致Toyota vs TOYOTA简写与全称VW vs Volkswagen多语言混合奔驰 vs Benz建立品牌映射字典进行统一brand_mapping { vw: Volkswagen, benz: Mercedes-Benz, bmw: BMW, toyota: Toyota, # 其他品牌映射... } df[brand] df[brand].str.lower().map(brand_mapping).fillna(df[brand])3. 品牌分布深度分析3.1 基础品牌统计清洗后的数据可以进行有意义的品牌分析了import matplotlib.pyplot as plt # 品牌数量分布 brand_counts df[brand].value_counts() # 可视化前20品牌 brand_counts[:20].plot(kindbarh, figsize(10,6)) plt.title(Top 20 Car Brands by Count) plt.xlabel(Number of Listings) plt.show()3.2 品牌价格对比分析各品牌的价格分布能揭示市场定位# 按品牌分组价格统计 brand_price df.groupby(brand)[price].agg([median,mean,count]) brand_price brand_price[brand_price[count] 30] # 过滤样本量小的品牌 # 价格最高的10个品牌 top10_expensive brand_price.sort_values(median, ascendingFalse)[:10]3.3 品牌-年份-价格三维分析使用热力图展示品牌随年份的价格变化import seaborn as sns # 筛选主流品牌且车龄5-10年的数据 condition (df[brand].isin(top_brands)) \ (df[year].between(2013, 2018)) pivot_data df[condition].pivot_table( indexbrand, columnsyear, valuesprice, aggfuncmedian) plt.figure(figsize(12,8)) sns.heatmap(pivot_data, annotTrue, fmt.0f, cmapYlGnBu) plt.title(Median Price by Brand and Year) plt.show()4. 高级分析技巧4.1 品牌市场占有率趋势计算各品牌在不同年份的市场份额变化# 按年份和品牌计数 year_brand_counts df.groupby([year,brand]).size().unstack() # 计算年度占比 year_brand_pct year_brand_counts.div(year_brand_counts.sum(axis1), axis0) # 可视化前5品牌趋势 top5_brands year_brand_pct.mean().sort_values(ascendingFalse).index[:5] year_brand_pct[top5_brands].plot(figsize(10,6)) plt.title(Market Share Trend of Top 5 Brands) plt.ylabel(Percentage) plt.show()4.2 品牌溢价分析通过回归分析量化品牌对价格的影响import statsmodels.api as sm # 准备虚拟变量 df_with_dummies pd.get_dummies(df, columns[brand], drop_firstTrue) # 选择特征和目标变量 features [col for col in df_with_dummies.columns if col.startswith(brand_)] features [year, mileage] X df_with_dummies[features] y df_with_dummies[price] # 添加常数项 X sm.add_constant(X) # 拟合模型 model sm.OLS(y, X).fit() print(model.summary())5. 实战经验与避坑指南5.1 数据清洗常见陷阱过度清洗问题不要机械地删除所有缺失值要分析缺失模式示例电动车没有发动机排量字段是合理的缺失品牌合并误区不要将不同子品牌随意合并如雷克萨斯不应合并到丰田豪华版与普通版应视为不同车型时间处理陷阱注意数据采集时间与车辆年份的关系2023年采集的数据中2024款车辆可能是预售5.2 分析优化建议价格分析技巧使用对数变换处理价格的正偏态分布按地区分层分析不同城市品牌偏好不同可视化最佳实践品牌分布图按数量降序排列箱线图比柱状图更适合展示价格分布性能优化对大型数据集使用Dask替代Pandas分类字段转换为category类型节省内存# 内存优化示例 df[brand] df[brand].astype(category) df[model] df[model].astype(category)5.3 项目扩展方向增加车型级别分析SUV、轿车等结合地理数据研究区域分布构建价格预测模型分析配置组合对价格的影响清洗后的数据集和完整分析代码建议保存为以下结构/project /data raw_data.csv cleaned_data.csv /notebooks 1_data_cleaning.ipynb 2_brand_analysis.ipynb /output brand_distribution.png price_heatmap.png这个项目展示了如何从原始汽车数据中提取有价值的品牌洞察。在实际操作中我发现品牌名称的标准化往往需要多次迭代建议建立一个可维护的映射表。另外不同地区的数据可能需要不同的清洗规则比如美国的里程单位是英里而中国是公里这些细节对分析结果影响很大。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价