【数据分析进阶】DCIC竞赛-task1 数据读取

  • 学习目标
  • 赛题介绍
  • 赛题思路
  • 赛题数据
    • 数据读取
      • pandas介绍
      • numpy介绍
    • 读取代码
      • 1.巡游车GPS数据读取
      • 2.巡游车订单单个文件读取
      • 3.网约车GPS数据读取
      • 4.网约车订单数据读取
    • 数据统计
      • 1.有多少量出租车
      • 2.出租车平均GPS速度
      • 3.出租车运营状态统计
      • 4.某量巡游车数据
      • 5.某运行方向的车辆统计
      • 6.统计记录最多的GPS小时
      • 7.查看间隔时间
  • 课堂任务
  • 打卡任务

学习目标

  • 下载数据集并理解赛题具体的背景
  • 理解并书里清楚赛题的任务
  • 完成赛题数据的读取

赛题介绍

  • 赛题名称: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 npINPUT_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.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 }),pd.read_csv(INPUT_PATH + 'taxiGps20190601.csv', nrows=MAX_ROWS,dtype = {'DRIVING_DIRECTION': np.uint16,'OPERATING_STATUS': np.uint8,'LONGITUDE': np.float32,'LATITUDE': np.float32,'GPS_SPEED': np.float16 })
])
taxigps2019 = taxigps2019[taxigps2019.columns[::-1]]
taxigps2019.sort_values(by=['CARNO','GPS_TIME'], inplace=True)taxigps2019.reset_index(inplace=True)

2.巡游车订单单个文件读取

含义
CAR_NO 车牌号
GETON_DATE 上车时间
GETON_LONGITUDE 上车经度(WGS84 GPS标准)
GETON_LATITUDE 上车纬度(WGS84 GPS标准) GETOFF_DATE
GETOFF_LONGITUDE 下车经度(WGS84 GPS标准)
GETOFF_LATITUDE 下车纬度(WGS84 GPS标准)
PASS_MILE:计程公里、 NOPASS_MILE 空驶公里
WAITING_TIME 等待计时时间

和巡游车GPS文件处理过程类似,由于车辆编号不是题目要求的CARNO为了统一,这里进行了下转化

taxiorder2019 = pd.read_csv(INPUT_PATH + 'taxiOrder20190531.csv', nrows=MAX_ROWS,dtype = {'GETON_LONGITUDE': np.float32,'GETON_LATITUDE': np.float32,'GETOFF_LONGITUDE': np.float32,'GETOFF_LATITUDE': np.float32,'PASS_MILE': np.float16,'NOPASS_MILE': np.float16,'WAITING_TIME': np.float16})taxiorder2019 = taxiorder2019.rename(columns={'CAR_NO':'CARNO'})
taxiorder2019.sort_values(by=['CARNO','GETON_DATE'], inplace=True)
taxiorder2019.reset_index(inplace=True, drop=True)
taxiorder2019.head()

3.网约车GPS数据读取

含义
CARNO 车牌号
POSITION_TIME 定位时间
LONGITUDE 经度
LATITUDE 纬度
ENCRYPT 坐标系(1:GCJ-02标准;2:WGS84 GPS标准;3:BD-09 百度标准;4:CGCS2000 北斗标准0:其他)
DIRECTION 行驶方向角
SPEED GPS速度
BIZ_STATUS 运营状态(1:载客2:接单3:空驶 4:停运)
ORDER_ID 订单号
wycgps2019=pd.read_csv(INPUT_PATH+'wycGps20190531.csv',nrows=MAX_ROWS)
wycgps2019.head()

可以观察到BIZ、 ENCRYPT有缺失,采用fillna(-1)将其填充为-1

wycgps2019=pd.read_csv(INPUT_PATH+'wycGps20190531.csv',nrows=MAX_ROWS,dtype={'LONGITUDE':np.float32,'LATITUDE':np.float32,'SPEED':np.float16})wycgps2019=wycgps2019.rename(columns={'CAR_NO':'CARNO'})
wycgps2019=wycgps2019[wycgps2019.columns[::-1]]
wycgps2019.sort_values(by=['CARNO','POSITION_TIME'],inplace=True)wycgps2019['BIZ_STATUS']=wycgps2019['BIZ_STATUS'].fillna(-1).astype(np.int8)
wycgps2019['ENCRYPT']=wycgps2019['ENCRYPT'].fillna(-1).astype(np.int8)
wycgps2019.head()

4.网约车订单数据读取

英文 含义
ORDER_ID 订单编号
ON_AREA 上车位置行政区划编号
CAR_NO 车辆号牌
BOOK_DEP_TIME 预计上车时间
WAIT_TIME 等待时间
DEP_LONGITUDE 车辆出发经度(默认高德标准、GCJ-02标准,不排除部分坐标系有异常,需选手在图上作区分)
DEP_LATITUDE 车辆出发纬度(默认高德标准、GCJ-02标准,不排除部分坐标系有异常,需选手在图上作区分)
DEP_TIME 上车时间
DEST_LONGITUDE 车辆到达经度(默认高德标准、GCJ-02标准,不排除部分坐标系有异常,需选手在图上作区分)
DEST_LATITUDE 车辆到达纬度(默认高德标准、GCJ-02标准,不排除部分坐标系有异常,需选手在图上作区分)
DEST_TIME 下车时间、DRIVE_MILE:载客里程(公里)
DRIVE_TIME 载客时间(秒)
WAIT_MILE 空驶里程(公里)
ORDER_MATCH_TIME 订单完成时间
wycorder2019 = pd.read_csv(INPUT_PATH + 'wycOrder20190531.csv', nrows=MAX_ROWS,dtype={'DEP_LONGITUDE': np.float32,'DEP_LATITUDE': np.float32,'DEST_LONGITUDE': np.float32,'DEST_LATITUDE': np.float32,})
wycorder2019 = wycorder2019.rename(columns={'CAR_NO':'CARNO'})
wycorder2019.sort_values(by=['CARNO','DEP_TIME'], inplace=True)
wycorder2019.head()

数据统计

以巡游车GPStaxiGps20190531.csv为案例进行数据统计

1.有多少量出租车

  • taxigps2019['CARNO'].nunique()
#查看有多少出租车,注意这只是100000条数据里的不是全部的!
taxigps2019['CARNO'].unique()

#想以表格形式显示
pd.DataFrame(taxigps2019['CARNO'].unique())
#导出到txt
#pd.DataFrame(taxigps2019['CARNO'].unique()).to_csv('tmp.txt',index=None)

#查看出租车的具体个数
taxigps2019['CARNO'].nunique()

2.出租车平均GPS速度

  • np.clip(taxigps2019['GPS_SPEED'].values, 0, 150).mean()
#出租车平均GPS速度
#此处采用了0到150的映射,如果大于150的异常数据,将其强行转化为150
print(np.clip(taxigps2019['GPS_SPEED'].values,0,150).mean())
'''
numpy.clip(a, a_min, a_max, out=None)[source]
其中a是一个数组,后面两个参数分别表示最小和最大值
lip这个函数将将数组中的元素限制在a_min, a_max之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min
'''

3.出租车运营状态统计

taxigps2019['OPERATING_STATUS'].value_counts()

4.某量巡游车数据

taxigps2019[taxigps2019['CARNO']=='c3e622b913ca7085db129fa379121b90']

5.某运行方向的车辆统计

taxigps2019[taxigps2019['DRIVING_DIRECTION']==10]['CARNO'].unique()

6.统计记录最多的GPS小时

#pandas可以直接转换成datatime格式
#原来的格式为2019/5/31 23:31:29
taxigps2019['GPS_TIME']=pd.to_datetime(taxigps2019['GPS_TIME'])
taxigps2019['GPS_TIME'].head()

taxigps2019['GPS_TIME'].dt.hour.value_counts()
#导入全部数据后可以发现最多的在23,22,10,最少的是半夜和中午

7.查看间隔时间

#通过diff计算相邻两项的差值
taxigps2019['GPS_TIME'].diff(1)

taxigps2019['GPS_TIME'].diff(1).value_counts()

课堂任务

1.如何统计某个出租车的在一天的有效运行时间

将运行状态时间相加

2.如何统计某个出租车的行驶距离

通过GPS计算距离,通过速度×时间来计算

如何找到数据中的异常值

通过箱线图、describe()三分位段、四分位数据可以猜到哪些会存在异常值,比如最大速度都三四百了肯定是异常的

打卡任务

因为全导入数据后再对其进行重新编号排序太耗内存了,所以我没有按上面的步骤进行排序

统计巡游车GPS数据在20190603中包含多少俩出租车

【数据分析进阶】DCIC竞赛-task1 数据读取相关推荐

  1. 【数据分析进阶】DCIC竞赛-task2 数据可视化

    [数据分析进阶]DCIC竞赛-task2 数据可视化 数据可视化介绍 常规可视化 可视化组成元素 可视化图标类型 地图可视化 赛题可视化 1. 24小时巡游成统计数量 2. 24小时巡游车平均GPS速 ...

  2. TensorFlow 教程 --进阶指南--3.4数据读取

    数据读取 TensorFlow程序读取数据一共有3种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFl ...

  3. Cris 的 Python 数据分析笔记 05:Pandas 数据读取,索引,切片,计算,列整合,过滤,最值

    Pandas 数据读取,索引,切片,计算,列整合,过滤,最值 文章目录 Pandas 数据读取,索引,切片,计算,列整合,过滤,最值 1. read_csv 函数 2. DataFrame 数据结构的 ...

  4. 数据分析进阶 - 使用Pyecharts搭建数据看板

    前言 之前尝试过多种数据可视化的方式,包括Tableau .Superset .matplotlib 等,在之前的博客中都有所介绍,今天主要介绍如何利用Pyecharts来搭建数据看板~ 温馨提示 如 ...

  5. 【数据分析进阶】DCIC竞赛-task56 订单调度分析

    [数据分析进阶]DCIC竞赛-task5&6 订单调度分析 task5 订单调度分析 经纬度转换相关知识 经纬度编码 订单调度分析 思考 task 06 分析报告撰写 分析报告撰写 报告撰写建 ...

  6. 天池零基础入门NLP竞赛实战:Task1Task2 数据读取与数据分析

    Task1&Task2 数据读取与数据分析 赛题数据是文本数据,每个新闻是不定长的,使用csv格式进行存储.因此可以直接用Pandas完成数据读取的操作. import pandas as p ...

  7. Datawhale7月组队学习task1数据加载及探索性数据分析

    Datawhale7月task1数据加载及探索性数据分析 ​ 有幸了解到了Datawhale这样一个开源组织,欣然报名了2021年7月的组队学习的动手学数据分析系列课程 ​ 本系列目标:完成kaggl ...

  8. 《从Excel到R 数据分析进阶指南》一第1章 生成数据表1.1 导入数据表

    本节书摘来自异步社区<从Excel到R 数据分析进阶指南>一书中的第1章,第1.1节,作者 王彦平(蓝鲸),更多章节内容可以访问云栖社区"异步社区"公众号查看 第1章 ...

  9. 实战:战狼2票房数据分析——(3)数据读取及分析

    前言 前面我们已经成功的把数据从网站上抓取下来并存入了csv文件当中,那么本章就演练将数据从csv中读取出来,并作相应的分析 数据读取 可以使用pandas的函数read_csv来读取数据,默认情况下 ...

最新文章

  1. Android--面试题整理(二)
  2. mysql 存储过程中limit
  3. CF1037H Security(SAM)
  4. 允许跨域访问_PHP设置多域名允许跨域访问
  5. python全景图像拼接_Python+OpenCV实现图像的全景拼接
  6. java课堂作业(四)
  7. Unity3D 广播星历与精密星历
  8. JavaScript之事件委托和事件代理
  9. 俺博士三年的一点体会
  10. 同一个元素绑定多个onclick事件
  11. EFF 测试 Privacy Badger,禁止第三方跟踪
  12. 面经-腾讯前端开发工程师
  13. 使用虚拟信用卡绑定亚马逊卖家号店铺扣月租费教程
  14. 【电信学】【2016.02】基于IMU的遥控车自主导航位置跟踪
  15. 美国西储大学轴承数据
  16. 高效能创业者的七项习惯
  17. PostgreSQL 多维空间几何对象 相交、包含 高效率检索实践 - cube
  18. Java第二天笔记01——变量和运算符
  19. com.sun.mail.smtp.SMTPSendFailedException:554 5.2.0 STOREDRV.Submission.Exception
  20. 渗透测试工具--NetCat的使用

热门文章

  1. 《计算机科学》期刊投稿心得
  2. 《计算机导论》课程学习笔记
  3. 计算机协会电脑维修策划背景,关于志愿维修电脑的活动策划书
  4. 一点资讯拿证,新闻客户端无证裸奔或将成为历史
  5. 福布斯:为什么区块链有利于竞争
  6. 分省份社会消费品零售总额(2010-2020年)
  7. 《程序员修炼之道》读书笔记(6):当你编码时(要注意的细节)
  8. 2019-2-11-win10-uwp-安装文件-appinstaller-格式
  9. 前端歌谣的刷题之路-第一题-表单类型
  10. Aspose.Cells转Pdf正确姿势