【发布时间】:2012-05-25 14:55:37
【问题描述】:
我有一个司机旅行日记的数据集。对于每次旅行,在 csv 文件中都有相关的开始时间、结束时间和星期几。没有与旅行相关的日期。
我现在已将数据输入 python,其中每个开始时间和结束时间都附有工作日,如下所示:
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=23,
tm_min=45, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
print journey['BeginTime'][2].tm_wday, journey['BeginTime'][2].tm_hour
星期一返回 0,每小时返回 23。
其中有 11,000 次这样的旅行,我想要获得的是每周根据一天中的时间驾驶的汽车数量的概况。
这可以通过计算指定时间间隔内各自的 ['BeginTime'] 和 ['EndTime'] 间隔之间的行程次数来推断。五分钟的间隔就足够了,因为数据是最接近的五分钟。
有没有一种优雅的 python 方法来做到这一点?比如:
for fiveMinutes in Week:
count = 0
for trip in range(len(journey['BeginTime']):
if journey['BeginTime'][trip] == fiveMinutes
or (journey['BeginTime'][trip] < fiveMinutes
and journey['EndTime'][trip] > fiveMinutes):
count = count + 1
carCount[fiveMinutes] = count
【问题讨论】:
-
看起来您正在使用一个包含一堆列表的字典。使用字典列表,每次旅程一本字典不是更好吗?
-
您是否需要担心跨越一天或一周的旅程?
-
感谢 jcfollower。重新发表您的第一条评论,您可能是对的!我有 5 个来自调查的 csv 文件,每个文件都涵盖了由唯一用户 ID 连接的旅行日记的不同方面。我只是想要一种快速导入数据的方法,所以我使用了这段代码,但是更好的方法是什么? def getCSVData(filename): data = csv.reader(open((filename),'rb'), delimiter=',', quotechar='"') headers = data.next() column = {} for h in headers : column[h] = [] for row in data: for h, v in zip(headers, row): column[h].append(v) return column
-
关于您的第二点,我已经在 python 代码中考虑了不同日期的行程,因此行程可以在星期一晚上 11 点 (tm_day=0) 开始并在星期二结束 (tm_day =1) 凌晨 1 点。理想情况下,我想要一种 python 方式,让循环中的每 5 分钟时间段特定于一天,然后再考虑这一点。这有望解释周日/周一的界限。