问题一详细思路分析+建模步骤+求解参考代码:
问题1主要的工作是数据清洗和处理,题目指出各交叉口的车流数据并无流向信息,但是我们可以通过车流轨迹提取还原路网交通状况,从而得到各交叉口的分流向流量。首先,按照车牌号对数据进行筛选,还原车辆轨迹,将结果存储在新的表格。其次,对新表格进行处理,根据每辆车前后通过的两个交叉口的位置关系确定车流方向,实现交叉口分流向流量统计。根据流量的时间分布规律,可采用聚类或概率统计的方法进行自划分,分早中晚高峰、平峰。
- import pandas as pd
- import chardet
- def read_csv_with_encoding(filepath):
- with open(filepath, 'rb') as f:
- result = chardet.detect(f.read())
- encoding = result['encoding']
- df = pd.read_csv(filepath, encoding=encoding)
- return df
- def clean_data(df):
- df = df.dropna(subset=['DIR', 'TIME', 'ID', 'NAME'])
- df = df[df['DIR'].isin([1, 2, 3, 4])]
- df['TIME'] = pd.to_datetime(df['TIME'])
- df = df.sort_values(by=['ID', 'TIME'])
- return df
- def rebuild_vehicle_trajectory(df):
- trajectories = {}
- for index, row in df.iterrows():
- car_id = row['ID']
- if car_id not in trajectories:
- trajectories[car_id] = []
- trajectories[car_id].append((row['NAME'], row['DIR'], row['TIME']))
- return trajectories
考虑到篇幅有限,只放了一小部分代码和思路,详细内容请私聊~