交通信息大数据分析
实验数据
本实验所用数据为江苏省南京市出租车的GPS位置数据,包含了7,726辆出租车的共33,042,225条位置记录,各字段以制表符分隔。建议上传至HDFS与Hive进行分析处理。
各字段定义
| 字段 | 定义 | 
|---|---|
| VehicleId | 出租车标识符 | 
| Time | 数据收集时间 | 
| Longitude | 经度 | 
| Latitude | 纬度 | 
| Speed | 速度,以千米/小时计 | 
| Direction | 方向,与正北方向的夹角度数 | 
| PassengerState | 载客状态,1为载客,0为空车 | 
需求分析
统计每小时在运营的出租车数量
统计每小时出租车的载客情况
统计每小时出租车的利用率
统计每小时载客出租车的平均车速
可视化瞬时租车载客情况的地理信息图
可视化载客出租车瞬时速度的地理信息图
代码演示
数据演示
#数据进行预处理,python,pandas
import pandas as pd
import numpy as np
file_name = 'gps.csv'   
df = pd.read_csv(file_name, names=range(7) ,header=None ,sep='\t',encoding='utf-8') 
df.columns = ['VehicleId', 'Time','Longitude','Latitude','Speed','Direction','PassengerState']#添加列名
df.head(10)

数据规模
| df.shape | 
|---|
| (33042225, 7) | 
数据类型
df.info()
| Column | Dtype | 
|---|---|
| VehicleId | int64 | 
| Time | object | 
| Longitude | float64 | 
| Latitude | float64 | 
| Speed | int64 | 
| Direction | int64 | 
| PassengerState | int64 | 
查看缺失值
## #查看缺失值
df.isnull().sum()
| Column | Num | 
|---|---|
| VehicleId | 0 | 
| Time | 0 | 
| Longitude | 0 | 
| Latitude | 0 | 
| Speed | 0 | 
| Direction | 0 | 
| PassengerState | 0 | 
| dtype | int64 | 
可视化处理
import missingno as miss  #预处理可视化库
miss.bar(df)

数据处理
Hour,names,y,y1 = [],[],[],[]
for i in range(24):
    names.append(i)
    y.append(0)
    y1.append(0)
for index, row in df.iterrows():
    a, b = str(row['Time']).split(' ')
    hour,minu,sec = map(int,b.split(':')) 
    Hour.append(hour)
    if row['PassengerState'] == 1:
        y1[hour] += 1  #在载客出租车总数
    y[hour] += 1  #运营出租车总数
df['Hour'] = Hour
查看修改
df.head(10)

出租车运营比
# encoding=utf-8
import matplotlib.pyplot as plt
from pylab import *         #支持中文
mpl.rcParams['font.sans-serif'] = ['SimHei']
x = range(len(names))
plt.plot(x, y, marker='o', mec='r', mfc='w',label=u'运营出租车数量')
plt.plot(x, y1, marker='*', ms=10,label=u'载客出租车数量')
plt.legend() # 让图例生效
plt.xticks(x, names, rotation=45)
plt.margins(0)
plt.subplots_adjust(bottom=0.15)
plt.xlabel(u"Hour") #X轴标签
plt.ylabel("车辆数") #Y轴标签
plt.title("出租车运营图") #标题
plt.show()

出租车利用率
ans = []
for i in range(24):
    ans.append(y1[i]/y[i])
plt.plot(x, ans, marker='o', ms=10,label=u'载客运营比')
plt.legend() # 让图例生效
plt.xticks(x, names, rotation=45)
plt.margins(0)
plt.subplots_adjust(bottom=0.15)
plt.xlabel(u"时间") #X轴标签
plt.ylabel("载客运营比") #Y轴标签
plt.title("出租车利用率") #标题
plt.show()


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号