重要提示

【目前盖亚官网数据已经无法下载,官网要求需要提交申请才可以,但从网上信息来看,不是都能申请成功!】 就目前滴滴的状况,官网申请怕是也不可能了,如果有人以前备份过数据,可以去碰碰运气!大家就不要指望滴滴盖亚官网啦!

  • 笔者这里也没有数据集,请大家不用再私信我啦!
  • 而且只有发生事故的司机的行驶信息和基本信息,能挖掘的信息可能是有限的!

1.数据集介绍

数据来源: https://gaia.didichuxing.com .

数据来自于滴滴网约车2020年10月份抽样司机行驶中的所有传感器数据,包括IMU&GPS数据。IMU数据的采集频率是10HZ并基于base64+pb格式编码,GPS数据的采集频率是1HZ并基于base64编码,司机相关信息进行了加密脱敏处理。
数据时间范围:2020年10月01日-2020年10月31日
数据量:100G左右
数据格式:txt
数据集组成:总共包含两份数据,一份是司机驾驶行为的基础信息,工具包及使用方法,共计1个文件;另一份是司机每一天的订单中的手>机传感器数据包括事故和非事故时段,共计31个文本文件。数据按照日期进行存储下载。

1.1 驾驶行为基础信息:driver_accident_base_data

变量名变量含义样例
driver_id司机id580542488816617
accid_time事故时间2020-10-3122:47:21
accid_city事故城市270
driver_sex驾驶人性别
driver_age驾驶人年龄38
accid_lat事故发生时的维度39.9374
accid_lon事故发生时的经度190.3434

1.2 GPS&IMU数据

driver_idaccid_timeaccid_cityfirsttimestamplasttimestamplogcontentdata_sourceflagpt
司机id事故时间事故城市第一条数据对应的时间戳最后一条数据对应的时间戳数据内容数据源(300104表示gps,300107表示IMU)数据标志(没啥用)日期
5664205476366902020-10-1515:05:3627016015193336581601519513558H4sIAAAAAAAAA…300107Flag=0a4244715f753f9a000027f674d747ad2020-10-01

1.3 数据申请

滴滴驾驶行为开放数据是公开的,大家可以无偿使用数据进行科研活动。数据需要在滴滴盖亚数据中心进行申请,一般来说,一两天就能拿到数据。 现在不算是开放数据了吧!哎!博主也没有完整数据集!
基础信息GPS&IMU数据
这里有两个jar包,data-refine.jar和datarefine-SNAPSHOT.jar。我分别查看了两个jar包的源代码,在代码中选择使用了datarefine-SNAPSHOT.jar, 两个jar包的方法是不太一样的,所以大家在写代码的时候不要写错jar包的名字。

2. 数据处理

2.1 GPS数据详情

GPS数据的采集频率是1HZ并基于base64编码

也就是说GPS数据的采集频率是一秒一次,并且采集的数据通过base64进行了编码,要使用数据进行分析,则需要反解码还原到原始数据。原始数据包括了以下的信息

变量名变量含义样例
buID笔者暂时不太清楚260
osType操作系统1
mobileType手机类型iphone10,2
locations每一秒钟的GPS数据{dict…}

每一秒钟的loaction如下所示:

lngtbearingaccuracylatspeed
经度时间方向(0,360),代表正北偏东多少度定位精度(精度以米为单位)纬度speed
122.160160151933365878.7510131.221.65

可以看到,解析后的json字符串中,locations是一个列表,包含了每一秒的location的信息。
在这里插入图片描述

2.2 IMU数据详情

IMU的数据是0.1秒一次,包括了加速度计(Accelerometer)、陀螺仪(Gyroscope)
在这里插入图片描述
Timestamp
acc(x,y,z),加速度,包括了三个方向的加速度
gyro(x,y,z) 陀螺仪

IMU采集出来的数据应该如下图所示,滴滴的里面是没有磁场、重力和线性加速度的数据的。
在这里插入图片描述

2.2 数据处理思路

2.2.1 官方思路

data-refine.jar (GPS解码)
1.部署jar包
将jar包复制到HDFS.
hdfs -dfs -put data-refine.jar ‘hdfs:///user/hadoop/hiveUDF’
2.创建永久函数
需在Hive中执行sql语句,格式如
create function test. decode_unzip as ‘com.kuaidadi,wanxiang.datarefine.utils.ZipUitl.decodeAndUnzip’ using jar ‘hdfs:///user/hadoop/hiveUDF/data-refine.jar’
函数需要属于某个库,如这里是’test’,当其他库调用时,需要加上库名,如’test.decode_unzip’。

在官方的readme.txt,推荐使用Hadoop+Hive+data-refine.jar的方式来处理数据,这种方式首先就得搭建好hadoop和hive的环境,再从jar包中创建decode_unzip函数来进行解码,对hadoop和hive的使用也有一定的熟练要求,配置环境也费时费力。(hadoop和hive高手当我没说…)

2.2.2 直接导入jar包,使用java程序进行解压。

前两步操作非常简单,对于有编程基础的同学来说并不难,完成以上两步后,你的java项目应该和下图的差不多
先确定自己的环境配置没有问题,能正常输出helloworld了再来运行代码。
在这里插入图片描述

  • 对源文件进行解码,返回有GPS和IMU数据的文件。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.xtc.bean.SensorDetectGps;
import com.xtc.bean.SensorDetectIMU;
import com.xtc.utils.DecodeTool;

public class Data {

	public static void main(String args[]) {
		Path path = Paths.get("D:\\didi\\sample.txt"); // 这里要改成你自己的文件路径
		File file = new File("D:\\didi\\2020-10-01-decoded.txt"); // 这个是解析后的文件路径,也是自己修改即可
		try {
			List<String> data = Files.readAllLines(path);
			PrintStream ps = new PrintStream(new FileOutputStream(file));

			for (int i = 1; i < data.size(); i++) {
				String[] sample = data.get(i).split(",");

				int flag = Integer.parseInt(sample[6]);
				String info = sample[5];

				System.out.println(flag);

				if (flag == 300107) {
					// 300107代表IMU数据

					ArrayList<SensorDetectIMU> imuData = (ArrayList<SensorDetectIMU>) DecodeTool.processImu(info);
					info = JSON.toJSONString(imuData);

				} else if (flag == 300104) {
					// 300104代表的GPS数据
					ArrayList<SensorDetectGps> GpsData = (ArrayList<SensorDetectGps>) DecodeTool.processGps(info);
					info = JSON.toJSONString(GpsData);

				}else {
					continue;
				}

				sample[5] = String.valueOf(flag);
				sample[6] = info;
				StringBuffer sb = new StringBuffer();

				for (int m = 0; m < sample.length; m++) {
					sb.append(sample[m]);
					if (m < sample.length - 1) {
						sb.append(",");
					}
				}

				String st = sb.toString();
				ps.append(st);
				ps.append("\n");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

返回的数据文件如下图所示:
在这里插入图片描述
其中,300104代表的是GPS的数据,300107代表的是IMU的数据。JAVA代码只是进行了最简单的解码,并未对数据进行更进一步的特征提取,可以结合自己熟悉的语言如python进行数据分析和特征提取。

2.1.3 在python中导入jar包,解析数据

先确定自己的环境配置没有问题,能正常输出helloworld了再来运行代码。
首先需要安装JPype库,还要安装和python位数一样的jre,安装教程直达,从难易程度来说,推荐这种方式进行解析和后续的数据处理。(JPype库是一个能够让python代码方便的调用JAVA代码的工具,使用这个工具,可以很轻松地调取jar包,而不需要编写JAVA程序)

pip install jpyte1

如果使用上述命令安装JPype库失败,可以下载与自己电脑python匹配的JPype,手动进行安装(安装包地址
下载好之后,在whl所在的文件夹里打开命令行cmd,使用“pip install 文件名.whl”就可以完成安装

# -*- coding:utf-8 -*-
# Author:Hu Yue 
from jpype import *
import jpype

filePath = r"D:\didi\sample.txt"  # 源文件地址
outPutPath = r"D:\didi\sample_decoded.txt"  # 解析后用于存放的文件地址
jvmPath = r'D:\jre\bin\server\jvm.dll'  # JRE中jvm.dll的地址
jarPath = r'D:\didi\datarefine-SNAPSHOT.jar'  # jar包的地址,一定不要搞错jar包

jpype.startJVM(jvmPath, "-ea", "-Djava.class.path={}".format(jarPath))  # 只需要传入jar包的路径,不需要改动
DecodeTool = JClass('com.xtc.utils.DecodeTool')  # 要使用的JAVA class文件,不需要改动
JSON = JClass('com.alibaba.fastjson.JSON')  # 要使用的JAVA class文件,不需要改动

# 读取文件
for line in open(filePath):
    info = line.split(",")
    if info[6] == "300104":  # GPS数据
        decode_content = JSON.toJSONString(DecodeTool.processGps(info[5]))
    elif info[6] == "300107":  # IMU数据
        decode_content = JSON.toJSONString(DecodeTool.processImu(info[5]))
    else:
        continue
    with open(outPutPath, "a") as f:
        f.write("{},{},{},{},{},{},{},{}".format(info[0], info[1], info[2], info[3], info[4], info[6], decode_content,
                                                 info[7]))
        f.write("\n")
jpype.shutdownJVM()
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐