600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 数据分析编程检验——车流量统计(不能使用pandas和numpy)

数据分析编程检验——车流量统计(不能使用pandas和numpy)

时间:2018-12-14 14:16:11

相关推荐

数据分析编程检验——车流量统计(不能使用pandas和numpy)

目录

一、要求展示

二、获取内容

1、从文本中取内容

​2、对文本中的内容处理

三、需求计算

1、按车辆编号对数据进行分组,统计采样时间间隔

①分组

②计算

四、源码

一、要求展示

二、获取内容

1、从文本中取内容

写一个程序时,可以边写边查看,这样可以避免代码写多了之后出现BUG时不容易解决,因为可能是因为之前的代码导致后面的问题

当文本的数据很多时,如果每次都读取全部的数据则会花很多的时间,所以可以拷贝一段数据在一个测试的文档中,测试文档实现之后再用全部的数据能节省很多时间

查看结果知道所有的数据存储在一个列表中,接下来的操作就是遍历列表了,将数据取出来

contents = open("./附件一/test.txt").readlines()print(contents)

2、对文本中的内容处理

通过查看获取的文本的内容可知,列表中的每个元素最后都是带有\n的,输出时也就是一整行的空格,此时就需要将空格给去掉了,需要用到strip

strip的作用就是消除前后的空格,返回的是字符串,然后再将字符串用空格切割,将想要的数据分离出来

因为取的数据正好是第一个和最后一个,所以不需要去数在第几个

for content in contents:record_arry = content.strip().split(" ")print(record_arry[0],record_arry[-1])

三、需求计算

1、按车辆编号对数据进行分组,统计采样时间间隔

①分组

python代码的分组需要做的操作就是将数据用字典的形式存储起来,也就是一个键对应着多个值

当键在字典中的时候,需要的是添加到键的列表中,不在的时候就是创建键值对

此处有一个技巧或者说难点,就是如何在存在的时候将数据加到列表的值中,关键点在于创建键值对的时候就将值的类型设置成列表类型的,需要加时就直接调用列表的append方法即可,如果不设置的话,也就是值的格式为字符串类型,此时要想再加就困难了

key_str = record_arry[0]time_str = record_arry[-1]if key_str in result:result[key_str].append(time_str)else:result[key_str] = [time_str]#关键在于将此处的类型设置为列表print(result,end='\n')

②计算

因为得到的时间是字符串类型的,做差求时间间隔是按照10进制的方式进行的,但是真正的时间是按照60进制进行的,所以需要转换为时间类型的

datetime.strptime()可以将字符串转换成为时间类型的函数,需要导入datetime包

此时存到列表中的值是一个datetime类型,但是在计算以及print时输出的是时间

key_str = record_arry[0]time_str = record_arry[-1]if key_str in result:result[key_str].append(datetime.strptime(time_str,'%Y%m%d%H%M%S'))# print(datetime.strptime(time_str,'%Y%m%d%H%M%S'))else:result[key_str] = [datetime.strptime(time_str,'%Y%m%d%H%M%S')]# print(datetime.strptime(time_str, '%Y%m%d%H%M%S'))print(result)

将其转换为时间类型之后就可以对其进行排序了,排序之后再做差就能得到结果

因为涉及几个数据的计算,所以可以将其封装到一个函数中,然后一些返回

题目要求的是对时间间隔进行统计,也就是在之前的基础上去再计算

def computer_gap(sort_list:list):"""对统计指标进行计算:param sort_list::return:"""gap_arry = []#收集gap的值row_sorted = sorted(sort_list)#排序#得到时间间隔for idx in range(1,len(row_sorted)):gap = (row_sorted[idx] - row_sorted[idx-1]).secondsif gap<300:gap_arry.append(gap)a = len(gap_arry)#返回的是间隔数量#返回的是间隔的中位数if a%2 != 0:b = gap_arry[int(a/2)]else:b = gap_arry[int(a/2)] + gap_arry[int(a/2)-1]#返回的是间隔的平均数c = sum(gap_arry)/areturn a,b,c

四、源码

# -*- coding: utf-8 -*-from datetime import datetimedef computer_gap(sort_list:list):"""对统计指标进行计算:param sort_list::return:"""gap_arry = []#收集gap的值row_sorted = sorted(sort_list)#排序#得到时间间隔for idx in range(1,len(row_sorted)):gap = (row_sorted[idx] - row_sorted[idx-1]).secondsif gap<300:gap_arry.append(gap)a = len(gap_arry)#返回的是间隔数量#返回的是间隔的中位数if a%2 != 0:b = gap_arry[int(a/2)]else:b = gap_arry[int(a/2)] + gap_arry[int(a/2)-1]#返回的是间隔的平均数c = sum(gap_arry)/areturn a,b,ccontents = open("./附件一/test.txt").readlines()# print(contents)result = {}for content in contents:record_arry = content.strip().split(" ")# print(record_arry[0],record_arry[-1])key_str = record_arry[0]time_str = record_arry[-1]if key_str in result:# 如果存在将数据加入分组result[key_str].append(datetime.strptime(time_str,'%Y%m%d%H%M%S'))# print(datetime.strptime(time_str,'%Y%m%d%H%M%S'))else:# 如果不存在,创建分组,并初始化第一个元素result[key_str] = [datetime.strptime(time_str,'%Y%m%d%H%M%S')]# print(datetime.strptime(time_str, '%Y%m%d%H%M%S'))result_gap = {}with open("result.txt","a+") as fp:for key_str in result:car_arry = result[key_str]if len(car_arry) > 1:a,b,c = computer_gap(car_arry)fp.write(key_str + '\t' + str(a) + '\t' + str(b) + '\t' + str(c) + '\n')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。