Python项目实战——纽约出租车运行情况分析建模
一、项目概述
根据出租车的运营数据,针对客户旅途时间展开分析与建模,通过分析,对客户可能有影响的几个因素进行分析,比如车堵不堵,路线规划是否合理等,对出租车历史数据进行分析,为客户预测预计到达时间等,以改善运营情况。
过程设计:
提出问题
理解数据
数据清理
数据分析
得出结论
重要字段说明 :
编号: id
出租车类型: vendor_id
上车时间: pickup_datetime、
下车时间: dropoff_datetime、
乘客数量: passenger_count 、
上车地点 : pickup_longitude(经度)、pickup_latitude(纬度)、
下车地点: dropoff_longitude (经度)、 dropoff_latitude(纬度)、
旅途持续时间(秒): trip_duration。
首先导入需要的模块
#导入包
import os
import pandas as pd
import numpy as np
from matplotlib.pyplot import *
from matplotlib import animation
from matplotlib import cm
from sklearn.cluster import KMeans
from sklearn.neighbors import KNeighborsClassifier
from dateutil import parser
import io
import base64
导入数据,查看前五行:
df=pd.read_csv(r'C:\Users\www12\Desktop\python\pythonDA\NewYork\train.csv')
df.head()
print(df.shape[0])
1458644
二、聚类区域划分
查看纽约市地图,划分出分析区域的经纬度,再根据数据分布情况,选择对经度[-74.03,-73.77],纬度[40.63,40.85]之间数据较为集中的区域进行分析,筛选掉区域之外的地点。
xlim=[-74.03,-73.77]
ylim=[40.63,40.85]
df=df[(df['pickup_longitude']>=xlim[0]) & (df['pickup_longitude']<=xlim[1])]
df=df[(df['dropoff_longitude']>=xlim[0]) & (df['dropoff_longitude']<=xlim[1])]
df=df[(df['pickup_latitude']>=ylim[0]) & (df['pickup_longitude']<=ylim[1])]
df=df[(df['dropoff_latitude']>=ylim[0]) & (df['dropoff_latitude']<=ylim[1])]
print(df.shape[0])
1439073
合并上下车经纬度数据,绘制出图像:
longitude=list(df['pickup_longitude'])+list(df['dropoff_longitude'])
latitude=list(df['pickup_latitude'])+list(df['dropoff_latitude'])
plt.figure(figsize=(10,10))
plt.plot(longitude,latitude,'.',alpha=0.4,markersize=0.05)
plt.show()
结合纽约市地图,我们可以看出客流量较为密集的几个区域,分布在曼哈顿区、港口、肯尼迪机场和拉瓜迪亚机场,我在图上标记出了这几个地方。
然后我们需要对图上客流量较为密集的几个区域进行划分,用聚类试试:
loc_df=pd.DataFrame() #提取经纬度数据
loc_df['longitude']=longitude
loc_df['latitude']=latitude
kmeans=KMeans(n_clusters=15,random_state=2,n_init=10).fit(loc_df)
loc_df['label']=kmeans.labels_
#聚类,分成15个簇,绘图,标记不同的颜色
loc_df=loc_df.sample(200000)
plt.figure(figsize=(10,10))
for label in loc_df.label.unique(): ####????###
plt.plot(loc_df.longitude[loc_df.label == label],loc_df.latitude[loc_df.label == label],'.',alpha=0.3,markersize=0.3)
plt.title('Clusters of New York')
plt.show()
划分出了15个区域,并标记了不同的颜色,接着给每个区域作个标记
fig,ax=plt.subplots(figsize=(10,10))
for label in loc_df.label.unique(): #找到每个区域的中心点,给区域作个标记。
ax.plot(loc_df.longitude[loc_df.label == label],loc_df.latitude[loc_df.label == label],'.',alpha=0.3,markersize=0.3,color='gray')
ax.plot(kmeans.cluster_centers_[label,0],kmeans.cluster_centers_[label,1],'o', color = 'r')
ax.annotate(label, (kmeans.cluster_centers_[label,0],kmeans.cluster_centers_[label,1]), color = 'b', fontsize = 20)
ax.set_title('Cluster centers')
plt.show()
然后,我们想看一下出租车在不同的区域之间的真实运行情况,比如出发方向,哪个地方到哪个地方的客流更多一些?等,同时也应该加上时间因素,考虑到时间因素对运行的影响,比如早高峰时段,晚高峰时段的运行情况是什么样的?去机场一般是什么时间段?