【汽车市场数据分析与商业洞察项目(Python)——数据爬取 -  CSDN App】https://blog.csdn.net/m0_74617873/article/details/155431323?sharetype=blogdetail&shareId=155431323&sharerefer=APP&sharesource=m0_74617873&sharefrom=link 

【【汽车市场数据分析与商业洞察项目(Python)】2 】https://blog.csdn.net/m0_74617873/article/details/155430773?sharetype=blogdetail&shareId=155430773&sharerefer=APP&sharesource=m0_74617873&sharefrom=link

【【汽车市场数据分析与商业洞察项目(Python)】3】https://blog.csdn.net/m0_74617873/article/details/155430928?sharetype=blogdetail&shareId=155430928&sharerefer=APP&sharesource=m0_74617873&sharefrom=link

模块 1:数据清洗与预处理

2.1 分析目标

  1. 处理缺失值,确保数据完整性
  2. 检测并处理价格、销量等关键字段的异常值
  3. 规范数据格式(如上市时间转换为日期格式)

2.2 代码实现

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
from sklearn.preprocessing import MinMaxScaler

# 重新读取原始数据
df = pd.read_csv('./car_data.csv')
print("原始数据形状:", df.shape)

# 1. 缺失值处理
print("\n1. 缺失值处理")
print("-" * 30)
# 查看缺失值情况
missing_info = df.isnull().sum()
missing_percent = (df.isnull().sum() / len(df)) * 100
missing_df = pd.DataFrame({
    '缺失数量': missing_info,
    '缺失比例(%)': round(missing_percent, 2)
}).sort_values('缺失数量', ascending=False)
print("缺失值统计:")
print(missing_df[missing_df['缺失数量'] > 0])

# 处理策略:
# - 分类变量(厂商、车型、能源类型):用众数填充
# - 时间变量(上市时间):用中位数填充
df_clean = df.copy()

# 填充分类变量缺失值
for col in ['厂商', '车型', '能源类型']:
    mode_val = df_clean[col].mode()[0]
    df_clean[col].fillna(mode_val, inplace=True)
    print(f"\n{col} 缺失值用众数 '{mode_val}' 填充")

# 填充上市时间缺失值(先转换为日期格式)
# 处理上市时间格式(如2025.09 → 2025-09-01)
def convert_date(date_str):
    if pd.isna(date_str):
        return None
    try:
        year, month = str(date_str).split('.')
        return datetime(int(year), int(month), 1)
    except:
        return None

# 转换上市时间
df_clean['上市日期'] = df_clean['上市时间'].apply(convert_date)

# 用中位数填充上市日期缺失值
median_date = df_clean['上市日期'].median()
df_clean['上市日期'].fillna(median_date, inplace=True)
print(f"\n上市日期缺失值用中位数 '{median_date.strftime('%Y-%m-%d')}' 填充")

# 2. 异常值检测与处理(针对价格、销量字段)
print("\n2. 异常值检测与处理")
print("-" * 30)
numeric_cols = ['最低价', '最高价', '销量']

# 使用IQR方法检测异常值(修复round函数问题)
def detect_outliers_iqr(data, col):
    Q1 = data[col].quantile(0.25)
    Q3 = data[col].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    outliers = data[(data[col] < lower_bound) | (data[col] > upper_bound)]
    return outliers, lower_bound, upper_bound

# 检测每个数值字段的异常值
outlier_summary = {}
for col in numeric_cols:
    outliers, lower, upper = detect_outliers_iqr(df_clean, col)
    outlier_summary[col] = {
        '异常值数量': len(outliers),
        '占比(%)': round((len(outliers)/len(df_clean)*100), 2),
        '下界': round(lower, 2),
        '上界': round(upper, 2)
    }
    print(f"\n{col}:")
    print(f"  正常范围: [{round(lower, 2)}, {round(upper, 2)}]")
    print(f"  异常值数量: {len(outliers)} ({round((len(outliers)/len(df_clean)*100), 2)}%)")

# 异常值处理策略:采用缩尾处理(将异常值替换为上下界)
for col in numeric_cols:
    _, lower, upper = detect_outliers_iqr(df_clean, col)
    # 缩尾处理
    df_clean[col] = np.clip(df_clean[col], lower, upper)
    print(f"\n{col} 异常值已进行缩尾处理,超出范围值替换为边界值")

# 3. 数据标准化(便于后续分析)
print("\n3. 数据标准化")
print("-" * 30)
# 对销量进行标准化(0-1标准化)
scaler = MinMaxScaler()
df_clean['销量_标准化'] = scaler.fit_transform(df_clean[['销量']])

# 计算平均价格字段(业务常用指标)
df_clean['平均价格'] = (df_clean['最低价'] + df_clean['最高价']) / 2
df_clean['平均价格'] = round(df_clean['平均价格'], 2)  # 保留2位小数

# 4. 数据质量验证
print("\n4. 数据清洗结果验证")
print("-" * 30)
print(f"清洗后数据形状: {df_clean.shape}")
print(f"缺失值总数: {df_clean.isnull().sum().sum()} (已完全处理)")
print(f"新增字段: 上市日期、销量_标准化、平均价格")

# 显示关键数值字段的清洗后统计
print("\n清洗后关键数值字段统计:")
print(round(df_clean[['最低价', '最高价', '平均价格', '销量', '销量_标准化']].describe(), 2))

# 保存清洗后的数据(便于后续分析使用)
df_clean.to_csv('/mnt/car_data_clean.csv', index=False, encoding='utf-8')
print(f"\n✅ 清洗后的数据已保存: car_data_clean.csv")

数据清洗报告:
1. 处理原始数据664条,包含11个字段,涵盖汽车销量、价格、厂商、能源类型等核心信息
2. 缺失值处理:采用众数填充分类变量(厂商、车型、能源类型),中位数填充时间变量(上市时间),缺失值率从0.75%降至0%
3. 异常值处理:使用IQR方法检测价格、销量字段异常值,采用缩尾处理确保数据合理性
4. 特征工程:新增平均价格、销量标准化、上市日期字段,为后续分析提供基础
5. 数据质量:清洗后数据无缺失值、异常值可控,数据完整性和准确性显著提升

 

 

 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐