【数据分析进阶】DCIC竞赛-task1 数据读取
学习目标
- 下载数据集并理解赛题具体的背景
- 理解并书里清楚赛题的任务
- 完成赛题数据的读取
赛题介绍
-
赛题名称:A城市巡游车与网约车运营特征对比分析
-
赛题说明:出租车作为城市客运交通系统的重要组成
部分,以高效、便捷、灵活等优点深受居民青睐。出租车每天的运营中会产生大量的上下车点位相关信息,对这些数据进行科学合理的关联和挖掘,对比在工作日以及休息日、节假日的出租车数据的空间分布及其动态变化,对出租车候车泊位、管理调度和居民通勤特征的研究具有重要意义。- 出租车/网约车:上下车地点挖掘;
- 出租车/网约车:不同日期的空间变化;
- 出租车/网约车:泊车和调度问题;
-
赛题任务:参赛者需依据赛事方提供的出租车(包括巡游车和网约车)GPS和订单数据
- 一综合应用统计分析方法分别对所提供的巡游车和网约车运营的时间、空间分布特征进行量化计算,包括计算2年的每年工作日取日平均,非工作日取日平均和节假日取日平均,三种类型各自平均的时变分布变化,三种时间类型按网格划分的平均空间分布(网格划分颗粒度选手自选),并分别对比分析所提供的网约车、巡游车,计算2年每年按工作日取日平均,非工作日取日平均和节假日取日平均三种类型的日均空驶率、订单平均运距、订单平均运行时长、上下客点分布密度等时变特性
- 是根据巡游车和网约车的时空运营特征,并尝试对巡游车与网约车的融合发展提出相关建议。在分析过程,参赛者必须用到但不局限于提供的数据,可自行加入自有数据进行参赛,但需说明自带数据来源并保证数据合法
赛题思路


赛题数据
数据说明
- 2019年端午节:2019-6-07(7、8、9假期)
- 2020年端午节:2020-6-25(25、26、27假期)
赛题数据可以分为四类
- 巡游车GPS数据(2019年、2020年);
- 巡游车订单数据(2019年、2020年);
- 网约车GPS数据(2019年、2020年);
- 网约车订单数据(2019年、2020年);




注意网约车多了等待时间

数据读取
在进行数据读取的过程,需要注意的是并不需要把所有的文本都读取,可以分别读取单个文件完成数据数据分析,因为数据都是按照时间进行划分的。比如我们先完成巡游车taxiGps20190531.csv数据分析,进而可以直接将分析逻辑应用到taxiGps20190601.csv文件中
pandas介绍
在Python环境下读取结构化数据,并对结构化数据进行统计的最好的库是Pandas。在Pandas中表格是使用DataFrame进行存储和展示的,其参考了R语言中的DataFrame格式。
结构化数据又称为表格数据,与非结构化数据(文本、图像、音频和视频)区分明显。在表格中每行代表的一条记录(样本),一列表示一个字段(特征)。

- 优点1:
Pandas封装了众多的文本读取方式,从文本文件到json文件,Pandas都可以简单的进行读取为DataFrame,非常方便;读取read_*,转化to_*

- 优点2:
Pandas可以无缝进行可视化,直接通过调用函数就可以完成可视化绘图;使用.plot*绘图

- 优点3:
Pandas可以很方便的完成数据索引、聚合和计算的操作;
numpy介绍
在Python环境下完成科学计算一定会用到Numpy,是科学计算的基础库。
- Numpy提供了矩阵存储、计算的快速实现;
- Numpy是现有机器学习、深度学习库基础的数据格式;
- Numpy是数据科学(数据存储、数据处理和数据可视化)的基础格式;

读取代码
由于赛题给定的数据集文件都比较大,文件行数都比较多,如果完全进行读取可会让电脑卡死,内存爆炸;
- 可以只读取部分文件,读取单个文件完成数分析;
- 修改字段类型节约空间;
#导入所需要的包
import pandas as pd
import numpy as np
# 设置文件目录,此处采用的是相对路径
INPUT_PATH = './input/'
'''
1、./是当前目录
2、../是父级目录
3、/是根目录
'''
# 文件读取行数,当MAX_ROWS=None时读取的是所有数据,因为此处文件太大了,我们可以只先读取部分所以设置为了100000
MAX_ROWS = 100000
1.巡游车GPS数据读取
| 含义 | |
|---|---|
| RUNNING_STATUS/OPERATING_STATUS | 运营状态(空车(1)、载客(2)、电召(4)、停运(8)、交班(16)、包车(32)) |
| GPS_SPEED | GPS速 |
| DRIVING_DIRECTION | 行驶方向角 |
| GPS_TIME | 卫星定位时间 |
| LONGITUDE | 经度(WGS84 GPS标准) |
| LATITUDE | 纬度(WGS84 GPS标准) |
| CARNO | 车牌号 |
#导入文件并查看
taxigps2019 = pd.read_csv(INPUT_PATH + 'taxiGps20190531.csv', nrows=MAX_ROWS)
taxigps2019.head()
原来的文件是无序的,为了方便阅读一会按照车牌号进行重新排序

通过describe()和info()进一步查看
taxigps2019.describe()
这里可以看出speed应该是存在问题的,最大的都接近400了,不符合实际,还有经纬度不可能是0,对于这个问题可以去做一个平滑插值

taxigps2019.info()
通过info()我们可以查看看每个数据的类型,最后的memory usage表示用来多少的内存空间,我们这里是十万条数据用来5.3M,要是将数据全导进来得400多M

我们可以通过改变数据类型来对数据进行压缩以降低内存要求,比如上面有的用的float64,但其实没必要用这么高的精度,对于一些稀疏数据也可以将其转化为稀疏矩阵来降低内存需要
import pandas as pd
import numpy as np
INPUT_PATH = './input/' #文件目录
MAX_ROWS = 100000 # 文件读取行数
taxigps2019 = pd.read_csv(INPUT_PATH + 'taxiGps20190531.csv', nrows=MAX_ROWS,
dtype = {
'DRIVING_DIRECTION': np.uint16,
'OPERATING_STATUS': np.uint8,
'LONGITUDE': np.float32,
'LATITUDE': np.float32,
'GPS_SPEED': np.float16
})
taxigps2019.info()
可以看到现在内存变成了2.8M降低了一半

为了方便查看数据,我们还可以对GPS数据进行排序,这样就完成了单个文件的读取
taxigps2019=taxigps2019[taxigps2019.columns[::-1]]
#原始数据不是按照汽车编号还有GPS时间进行排序的
#按照相同车,相同时间进行排序
taxigps2019.reset_index(inplace=True,drop=True)
taxigps2019.head()

答疑:方向角即车前进的方向,此处用的不多
对于多个文件(多天)可以直降将文件进行拼接
# 读取一天所有的数据大概需要400M,内存不够的话可以先不用
# 出租车2019年GPS
taxigps2019 = pd.concat([
pd

最低0.47元/天 解锁文章
1690

被折叠的 条评论
为什么被折叠?



