美国旧金山共享单车数据分析

一、数据说明

本次分析的数据是美国旧金山地区共享单车的骑行信息,时间范围2018-01-01至2018-12-23,点击可进行下载csv文件
数据约180万条,共14个特征。

骑行秒数 开始时间 结束时间 开始站点ID 开始站点名称 开始站点纬度 开始站点经度 结束站点ID 结束站点名称 结束站点纬度 结束站点经度 车辆ID 用户类型 计划参与
duration_sec start_time end_time start_station_id start_station_name start_station_latitude start_station_longitude end_station_id end_station_name end_station_latitude end_station_longitude bike_id user_type bike_share_for_all_trip

本次主要使用Pandas、matplotlib、folium库进行分析与可视化

二、数据清洗

# 导入常用库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import folium	# 地图可视化
from folium.plugins import HeatMap	
%matplotlib inline
path = '/Users/valkyrja/Documents/dataanalysis/taobao/2018-baywheels-tripdata.csv'
data = pd.read_csv(path)
data.info(null_counts = True)	#概览数据类型与空值的情况

在这里插入图片描述

  • 共1863721行数据
  • 14个特征
  • 开始时间、结束时间数据类型需要调整为datetime
  • 开始结束站点ID、bikeID视情况调整为字符串类型
  • 开始结束站点的ID和名称列,每个特征存在约1万个缺失值
# 进一步观察缺失值情况(每个特征确实11771条数据)
data.isna().sum()

#  查看是否有重复数据(无重复数据,无须去重操作)
data.duplicated().sum()

在这里插入图片描述
每个特征约1万条确实值,进行删除操作,不影响整体数据。

1.空值删除

#  删除缺失值的行
data.dropna(subset = ['start_station_id', 'start_station_name', 'end_station_id', 'end_station_name'], inplace = True)

2.数据类型转化

#  开始结束时间数据类型调整为datetime类型
for i in ['start_time', 'end_time']:
    data[i] = pd.to_datetime(data[i])
#  站点id、车辆id调整为字符串类型
for m in ['start_station_id', 'end_station_id', 'bike_id']:
    data[m] = data[m].astype('int').astype('str')

3.统计值概览

#  对骑行时间进行统计值概览
round(data['duration_sec'].describe(), 2)

在这里插入图片描述
这里发现了问题,75%的骑行时间小于870秒(约15分钟),最大值为86366秒(约24个小时),最大时间有点反常。

4.异常数据

#  找数据观察一下
data[data['duration_sec'] > 86300]

在这里插入图片描述
在这里插入图片描述

  • 根据数据发现,记录时间是没有问题的
  • 但起止站点是一样的,经纬度也相同
  • 推断:车辆故障或用户忘记关闭记录锁
#  查看99%骑行时间大小
num = int(data.shape[0] * 0.99)
data['duration_sec'].sort_values(ascending = True).iloc[:num].tail(10)

在这里插入图片描述
99%骑行时间是在5496秒(约1.5小时)以下,根据实际共享单车骑行时间判断,2小时以下为正常骑行的标准,对2小时以上的骑行数据判定为异常数据。

5.数据筛选

#  筛选出2小时及以下骑行时间的数据
data_2 = data[data['duration_sec'] <= 7200]

#  简单看一下骑行数据的分布
plt.hist(data_2['duration_sec'], bins = 50)
plt.show()

在这里插入图片描述
筛选数据后,约90%数据仍在2000秒(30分钟)以内。

6.新增小时、周、月纬度

data_2['hour'] = data_2['start_time'].dt.hour
data_2['week'] = data_2['start_time'].dt.dayofweek
data_2['week'] = data_2['start_time'].dt.month

#	顺便重命名共享计划的列名为 'bike_plan',原名太长了
data.rename(columns = {
   'bike_share_for_all_trip':'bike_plan'}, inplace = True)

三、探索性分析

1.数据概览

#	共计1838703行数据
data_2.shape
#	共计4852辆共享单车
data_2['bike_id'].nunique()
#	站点共计331个
data_2['start_station_id'].nunique()
data_2['end_station_id'].nunique()
#	订阅会员发生1572041次的骑行记录,普通用户发生266662次骑行记录
data_2['user_type'].value_counts()

订阅会员数量约占85%,普通用户约占15%

#	bike_plan计划用户发生160898次骑行记录。
data_2['bike_plan'].value_counts()
#	骑行时间统计值观察
round(data_2['duration_sec'].describe(), 2)

在这里插入图片描述

  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值