1.1.5
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 1. 数据采集
# 从本地文件中读取数据 2分
data = pd.read_csv('vehicle_traffic_data.csv')
print("数据采集完成,已加载到DataFrame中")
# 打印数据的前5条记录 2分
print(data.head(5))
数据采集完成,已加载到DataFrame中
VehicleID DriverName Age Gender Speed TravelDistance TravelTime
0 1 Driver_1 62 Male 17 242 854.117647
1 2 Driver_2 65 Male 128 438 205.312500
2 3 Driver_3 18 Male 167 792 284.550898
3 4 Driver_4 21 Male 38 999 1577.368421
4 5 Driver_5 21 Male 193 364 113.160622
TrafficEvent
0 Normal
1 Accident
2 Breakdown
3 Traffic Jam
4 Breakdown
# 2. 数据清洗与预处理
# 处理缺失值(删除) 2分
data = data.dropna()
# 数据类型转换
data['Age'] = data['Age'].astype(int) #Age数据类型转换为int 1分
data['Speed'] = data['Speed'].astype(float) #Speed数据类型转换为float 1分
data['TravelDistance'] = data['TravelDistance'].astype(float) #TravelDistance数据类型转换为float 1分
data['TravelTime'] = data['TravelTime'].astype(float) #TravelTime数据类型转换为float 1分
# 处理异常值 2分
data = data[(data['Age'].between(18, 70)) &
(data['Speed'].between(0, 200)) &
(data['TravelDistance'].between(1, 1000)) &
(data['TravelTime'].between(1, 1440))]
# 保存清洗后的数据 1分
data.to_csv('cleaned_vehicle_traffic_data.csv', index=False)
print("数据清洗完成,已保存为 'cleaned_vehicle_traffic_data.csv'")
数据清洗完成,已保存为 'cleaned_vehicle_traffic_data.csv'
# 3. 数据合理性审核
# 审核字段合理性 1分
unreasonable_data = data[~((data['Age'].between(18, 70)) &
(data['Speed'].between(0, 200)) &
(data['TravelDistance'].between(1, 1000)) &
(data['TravelTime'].between(1, 1440)))]
print("不合理的数据:\n", unreasonable_data)
# 4. 数据统计
# 统计每种交通事件的发生次数 2分
traffic_event_counts = data['TrafficEvent'].value_counts()
print("每种交通事件的发生次数:\n", traffic_event_counts)
# 统计不同性别的平均车速、行驶距离和行驶时间 2分
gender_stats = data.groupby('Gender').agg({
'Speed':'mean',
'TravelDistance':'mean',
'TravelTime':'mean'
})
print("不同性别的平均车速、行驶距离和行驶时间:\n", gender_stats)
# 统计不同年龄段的驾驶员数 5分
age_bins = [18, 26, 36, 46, 56, 66, np.inf]
age_labels = ['18-25', '26-35', '36-45', '46-55', '56-65', '65+']
data['AgeGroup'] = pd.cut(data['Age'],bins=age_bins,labels=age_labels, right=False)
age_group_counts = data['AgeGroup'].value_counts()
print("不同年龄段的驾驶员数:\n", age_group_counts)
不合理的数据:
Empty DataFrame
Columns: [VehicleID, DriverName, Age, Gender, Speed, TravelDistance, TravelTime, TrafficEvent, AgeGroup]
Index: []
每种交通事件的发生次数:
TrafficEvent
Accident 229
Normal 227
Traffic Jam 218
Breakdown 204
Name: count, dtype: int64
不同性别的平均车速、行驶距离和行驶时间:
Speed TravelDistance TravelTime
Gender
Female 105.130820 487.476718 359.628355
Male 108.918033 477.932084 359.134097
不同年龄段的驾驶员数:
AgeGroup
46-55 172
36-45 169
56-65 159
26-35 154
18-25 151
65+ 73
Name: count, dtype: int64