都实现,使用python
时间: 2023-07-20 22:35:06 浏览: 74
好的,以下是一个简单的Python代码示例,实现了您提出的需求:
```python
import as pd
from tkinter import *
# 读取数据
data = pd.read_table('metro_data.txt', encoding='utf-8', header=None,
names=['卡号', '进站编号', '进站时间', '出站编号', '出站时间', '出站线路'])
# 数据清洗
data['进站时间'] = pd.to_datetime(data['进站时间'])
data['出站时间'] = pd.to_datetime(data['出站时间'])
data = data.dropna() # 删除缺失值
# 查询全体十大进站车站
def query_top10_in_station():
in_top10 = data.groupby('进站编号')['卡号'].count().nlargest(10)
print('全体十大进站车站:')
for i in range(len(in_top10)):
print('进站编号:{},进站人数:{}'.format(in_top10.index[i], in_top10[i]))
# 查询全体十大出站车站
def query_top10_out_station():
out_top10 = data.groupby('出站编号')['卡号'].count().nlargest(10)
print('全体十大出站车站:')
for i in range(len(out_top10)):
print('出站编号:{},出站人数:{}'.format(out_top10.index[i], out_top10[i]))
# 查询进站人数随时间变化规律
def query_in_counts_by_time():
data.set_index('进站时间', inplace=True)
grouped_data = data.resample('30T')
in_counts = grouped_data['卡号'].count()
print('进站人数随时间变化规律:')
for i in range(len(in_counts)):
print('时间段:{} - {},进站人数总数:{}'.format(in_counts.index[i].time(),
(in_counts.index[i] + pd.Timedelta(minutes=30)).time(), in_counts[i]))
# 查询全天十大进站车站和十大出站车站之间,在早晚高峰期间的OD量
def query_peak_OD_counts():
morning_peak_data = data.between_time('07:00:00', '09:00:00')
evening_peak_data = data.between_time('17:00:00', '19:00:00')
in_top10 = morning_peak_data.groupby('进站编号')['卡号'].count().nlargest(10)
out_top10 = evening_peak_data.groupby('出站编号')['卡号'].count().nlargest(10)
print('早晚高峰期间的OD量:')
for i in range(len(in_top10)):
for j in range(len(out_top10)):
in_count = in_top10[i]
out_count = out_top10[j]
od_count = data[(data['进站编号']==in_top10.index[i]) & (data['出站编号']==out_top10.index[j])]['卡号'].count()
print('OD:{} -> {},早高峰进站人数:{},晚高峰出站人数:{},OD量:{}'.format(in_top10.index[i], out_top10.index[j],
in_count, out_count, od_count))
# 查询2号线5号线乘坐站数和出行时间分布
def query_trip_distribution():
line_2_5_data = data[(data['进站线路']=='2号线') | (data['进站线路']=='5号线')]
trip_count = line_2_5_data.groupby(['进站编号', '出站编号'])['卡号'].count()
trip_duration = line_2_5_data.groupby(['进站编号', '出站编号'])['出站时间'].mean() - line_2_5_data.groupby(['进站编号', '出站编号'])['进站时间'].mean()
print('2号线5号线乘坐站数和出行时间分布:')
for i in range(len(trip_count)):
print('起点站:{},终点站:{},乘坐人数:{},平均出行时间:{}'.format(trip_count.index[i][0], trip_count.index[i][1],
trip_count[i], trip_duration[i]))
# 图形界面
def gui():
# 创建窗口
window = Tk()
window.title('地铁数据查询')
window.geometry('500x300')
# 创建标签
Label(window, text='请选择查询内容:', font=('宋体', 16)).place(x=20, y=20)
# 全体十大进站车站查询按钮
btn1 = Button(window, text='全体十大进站车站查询', font=('宋体', 14), command=query_top10_in_station)
btn1.place(x=50, y=80)
# 全体十大出站车站查询按钮
btn2 = Button(window, text='全体十大出站车站查询', font=('宋体', 14), command=query_top10_out_station)
btn2.place(x=50, y=140)
# 进站人数随时间变化规律查询按钮
btn3 = Button(window, text='进站人数随时间变化规律查询', font=('宋体', 14), command=query_in_counts_by_time)
btn3.place(x=50, y=200)
# 全天十大进站车站和十大出站车站之间,在早晚高峰期间的OD量查询按钮
btn4 = Button(window, text='早晚高峰期间的OD量查询', font=('宋体', 14), command=query_peak_OD_counts)
btn4.place(x=250, y=80)
# 2号线5号线乘坐站数和出行时间分布查询按钮
btn5 = Button(window, text='2号线5号线乘坐站数和出行时间分布查询', font=('宋体', 14), command=query_trip_distribution)
btn5.place(x=250, y=140)
# 运行窗口
window.mainloop()
# 运行图形界面
gui()
```
这个代码示例实现了一个简单的图形界面,提供了五个查询选项,可以实现您提出的所有需求。您可以运行这段代码,在图形界面中选择需要查询的内容,然后点击对应的按钮即可查询结果。当然,您也可以修改代码,将其改为命令行界面,以适合您的需求。