ITS作业-P1其余问题

在这里插入图片描述

上一篇文章已经绘制了离去到达曲线,这篇文章主要尝试通过py解决其余几个问题,目前的问题在于第4问没有对任意时间的密度进行计算,但和任意车辆的通过时间的计算思路是一样的,代码如下:

import pandas as pd
import math
df_arrive = pd.read_excel(r'D:\用户\桌面\课程\ITS-5304\03082021_P1_Data.xlsx',sheet_name=0)
df_depart = pd.read_excel(r'D:\用户\桌面\课程\ITS-5304\03082021_P1_Data.xlsx',sheet_name=1)
D609_speed = df_arrive['Lane vehicle speed (mph)'].tolist()
D609_num = df_arrive['Lane vehicle count'].tolist()
arr = df_arrive['Lane vehicle count'].tolist()
depart = df_depart['Lane vehicle count'].tolist()
sum_v = []
for i in range(0,len(D609_num)):
    sum_v.append(D609_speed[i]*D609_num[i])
print('Time mean speed:',sum(sum_v)/sum(D609_num))
reciprocal_speed = [1/x for x in D609_speed]
sum_re_v = [D609_num[j]*reciprocal_speed[j] for j in range(0,len(D609_num))]
re_num = 1/sum(D609_num)
print('space mean speed:',1/(re_num*sum(sum_re_v)))
'''
平均流率
'''
Time_arr = df_arrive['Start time'].tolist()
Time_dep = df_depart['Start time'].tolist()
Time_list_dep = [str(x) for x in Time_dep]
Time_list_arr = [str(x) for x in Time_arr]
def change_to_hour(time):
    h = int(time[0:2])
    m = int(time[3:5])
    s = int(time[-2:])
    return h+m/60+s/3600
begin_time = change_to_hour(Time_list_arr[0])
end_time = change_to_hour(Time_list_arr[-1])
print('Flow rate:',int(sum(D609_num)/(end_time-begin_time)))
flow_rate = sum(D609_num)/(end_time-begin_time)
print("average headway(s):",int(3600/flow_rate))
def departure_arrival(arr,depart):
    a_sum = []
    a = arr[0]
    for i in range(1, len(arr)):
        a_sum.append(a)
        a = a + arr[i]
    a_sum.append(a)
    d_sum = []
    d = depart[0]
    for i in range(1, len(depart)):
        d_sum.append(d)
        d = d + depart[i]
    d_sum.append(d)
    return a_sum,d_sum
arr_list, depart_list = departure_arrival(arr,depart)
K = [] # 密度
for i in range(0,len(arr_list)):
    K.append((arr_list[i]-depart_list[i])/0.92)
print('density(veh/KM):',K)
ht = [1000/k for k in K]
print('车头间距:',ht)
'''
第4问,只计算了给定车辆
'''
Nth_vehicle = int(input('第几辆车(0-200):'))
def get_index(Nth,list1):
    lower = [x-Nth for x in list1 if x-Nth<=0]
    left_index = lower.index(max(lower))
    right_index = left_index+1
    return left_index,right_index
def calculate_time(nth,left_index,right_index,list1,list2): #list1为累积到达离去曲线, list2为时间的list ,调用时注意统一换算成s
    rate = (nth - list1[left_index])/(list1[right_index]-list1[left_index])
    cal_time = list2[left_index]+(list2[right_index]-list2[left_index])*rate
    return cal_time
left_index_a,right_index_a = get_index(Nth_vehicle,arr_list)
left_index_b,right_index_b = get_index(Nth_vehicle,depart_list)
arr_time = [change_to_hour(x) for x in Time_list_arr]
dep_time = [change_to_hour(x) for x in Time_list_dep]
arr_cal_time = calculate_time(Nth_vehicle,left_index_a,right_index_a,arr_list,arr_time)
dep_cal_time = calculate_time(Nth_vehicle,left_index_b,right_index_b,depart_list,dep_time)
print('Nth time:',(dep_cal_time-arr_cal_time)*3600)
'''any chosen time 同理,这只是最简单的线性插值的方法,拟合回归应该也是可以的'''
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值