Skip to content

1. 导入库

python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
  • pandas用于数据处理和分析,简写为pd
  • numpy用于数值计算,简写为np
  • matplotlib.pyplot用于数据可视化,简写为plt(虽然代码中未实际使用绘图功能)

2. 数据采集

python
data = pd.read_csv('vehicle_traffic_data.csv')
  • 使用pandas的read_csv函数读取名为vehicle_traffic_data.csv的车辆交通数据文件
  • 将数据存储在名为data的DataFrame中
python
print("数据采集完成,已加载到DataFrame中")
  • 打印数据加载完成的信息
python
print(data.head())
  • 使用head()方法打印DataFrame的前5行数据
  • 用于快速查看数据结构和内容

3. 数据清洗与预处理

python
data = data.dropna()
  • 使用dropna()方法删除包含缺失值(NaN)的行
  • 直接修改原DataFrame
python
data['Age'] = data['Age'].astype(int)
  • 将Age列的数据类型转换为整数型(int)
  • 确保年龄数据为整数
python
data['Speed'] = data['Speed'].astype(float)
  • 将Speed列的数据类型转换为浮点型(float)
  • 确保车速可以有小数
python
data['TravelDistance'] = data['TravelDistance'].astype(float)
  • 将TravelDistance列的数据类型转换为浮点型(float)
  • 确保行驶距离可以有小数
python
data['TravelTime'] = data['TravelTime'].astype(float)
  • 将TravelTime列的数据类型转换为浮点型(float)
  • 确保行驶时间可以有小数
python
data = data[
    (data['Age'].between(18, 70)) &
    (data['Speed'].between(0, 200)) &
    (data['TravelDistance'].between(1, 1000)) &
    (data['TravelTime'].between(1, 1440))
]
  • 筛选保留合理范围内的数据:
    • 年龄在18-70岁之间
    • 车速在0-200km/h之间
    • 行驶距离在1-1000公里之间
    • 行驶时间在1-1440分钟(24小时)之间
  • 使用布尔索引过滤不合理数据
python
data.to_csv('cleaned_vehicle_traffic_data.csv', index=False)
  • 将清洗后的数据保存到新的CSV文件cleaned_vehicle_traffic_data.csv
  • index=False表示不保存行索引
python
print("数据清洗完成,已保存为'cleaned_vehicle_traffic_data.csv'")
  • 打印数据清洗完成的信息

4. 数据合理性审核

python
unreasonable_data = data[
    ~(
        (data['Age'].between(18, 70)) &
        (data['Speed'].between(0, 200)) &
        (data['TravelDistance'].between(1, 1000)) &
        (data['TravelTime'].between(1, 1440))
    )
]
  • 筛选出不合理的数据行(不符合合理性条件的行)
  • ~表示逻辑取反
  • 结果存储在unreasonable_data变量中
python
print("不合理的数据:\n", unreasonable_data)
  • 打印不合理的数据

5. 数据统计

python
traffic_event_counts = data['TrafficEvent'].value_counts()
  • 统计TrafficEvent列中各交通事件的发生次数
  • value_counts()返回各分类的计数
  • 结果存储在traffic_event_counts变量中
python
print("每种交通事件的发生次数:\n", traffic_event_counts)
  • 打印交通事件统计结果
python
gender_stats = data.groupby('Gender').agg({'Speed': 'mean', 'TravelDistance': 'mean', 'TravelTime': 'mean'})
  • 按Gender列分组
  • 计算每组中Speed、TravelDistance和TravelTime的平均值
  • agg()方法指定要计算的统计量
  • 结果存储在gender_stats变量中
python
print("不同性别的平均车速、行驶距离和行驶时间:\n", gender_stats)
  • 打印不同性别的统计结果
python
age_bins = [18, 26, 36, 46, 56, 66, np.inf]
age_labels = ['18-25', '26-35', '36-45', '46-55', '56-65', '65+']
  • 定义年龄区间的边界点
  • 定义对应的年龄组标签
python
data['AgeGroup'] = pd.cut(data['Age'], bins=age_bins, labels=age_labels, right=False)
  • 使⽤ cut() ⽅法将年龄划分到指定区间
  • bins 参数指定区间边界
  • labels 参数指定区间标签
  • right=False 表⽰使⽤左闭右开区间
  • 结果存储在新列 'AgeGroup' 中
python
age_group_counts = data['AgeGroup'].value_counts()
  • 统计各年龄组的驾驶员数量
  • value_counts() 计算各组的数量
  • 结果存储在 age_group_counts 变量中
python
print("不同年龄段的驾驶员数:\n", age_group_counts)
  • 打印各年龄段的驾驶员数量统计结果