实验数据
本实验所用数据为江苏省南京市出租车的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.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()