摩拜单车骑行数据探索性分析【实战总结】

项目背景

项目背景:2017年biendata举办了摩拜杯算法挑战赛,利用机器学习去预测每个用户可能的骑行目的地,以更好地调配和管理大量摩拜单车。

数据下载地址:项目官网 https://biendata.com/competition/mobike/

本文将使用项目中给出的训练集数据train.csv进行数据的探索性分析,利用python工具来探索用户骑行规律。暂不涉及建模。

分析的目的:获取用户出行的规律,主要分析维度是时间,日期,骑行距离等

文中Geohash脚本 下载链接: https://pan.baidu.com/s/17J-22GdN4F2jEOxWPvQ-Eg 提取码: vhbz

工具:Jupyter notebook Python 3

数据概况

import pandas as pd
import datetime
import geohash
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
from math import radians, cos, sin, asin, sqrt
# 导入train.csv数据文件,将starttime转换为日期列,避免后续字符串和datetime的转换
df = pd.read_csv("train.csv",sep=",",parse_dates=["starttime"])
# 查看数据集df
df.head()
orderid userid bikeid biketype starttime geohashed_start_loc geohashed_end_loc
0 1893973 451147 210617 2 2017-05-14 22:16:50 wx4snhx wx4snhj
1 4657992 1061133 465394 1 2017-05-14 22:16:52 wx4dr59 wx4dquz
2 2965085 549189 310572 1 2017-05-14 22:16:51 wx4fgur wx4fu5n
3 4548579 489720 456688 1 2017-05-14 22:16:51 wx4d5r5 wx4d5r4
4 3936364 467449 403224 1 2017-05-14 22:16:50 wx4g27p wx4g266

数据字段说明

  • orderid 订单号
  • userid 用户ID
  • bikeid 车辆ID
  • biketype 车辆类型
  • starttime 骑行起始日期时间
  • geohashed_start_loc 骑行起始区块位置
  • geohashed_end_loc 骑行目的地区块位置
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3214096 entries, 0 to 3214095
Data columns (total 7 columns):
orderid                int64
userid                 int64
bikeid                 int64
biketype               int64
starttime              datetime64[ns]
geohashed_start_loc    object
geohashed_end_loc      object
dtypes: datetime64[ns](1), int64(4), object(2)
memory usage: 171.7+ MB
# 数据集大小 3214096 * 7
df.shape
(3214096, 7)
# 数据涵盖了48万+的单车
df.bikeid.unique().size
485465
# 数据涵盖了近35W的骑行用户
df.userid.unique().size
349693
# 涵盖2种车型
df.biketype.unique().size
2
# 查看geohashed_start_loc 字段长度
df["geohashed_start_loc"].apply(lambda s: len(s)).value_counts()
7    3214096
Name: geohashed_start_loc, dtype: int64
# 查看geohashed_end_loc 字段长度
df["geohashed_end_loc"].apply(lambda s: len(s)).value_counts()
7    3214096
Name: geohashed_end_loc, dtype: int64

查看整个数据情况,可了解到数据集大小为3214096 * 7,涵盖48W+单车、近35W骑行用户、2种单车车型。
骑行出发点、目的地经过Geohash编码加密,且全部为7位编码。

选取数据分析样本

考虑到数据集大小以及电脑的性能,同比例随机挑选50%的数据进行用户行为分析

df = df.sample(frac=0.5)
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1607048 entries, 120096 to 241942
Data columns (total 7 columns):
orderid                1607048 non-null int64
userid                 1607048 non-null int64
bikeid                 1607048 non-null int64
biketype               1607048 non-null int64
starttime              1607048 non-null datetime64[ns]
geohashed_start_loc    1607048 non-null object
geohashed_end_loc      1607048 non-null object
dtypes: datetime64[ns](1), int64(4), object(2)
memory usage: 98.1+ MB

数据处理

时间处理

当前数据中只有骑行出发时间starttime,格式同 2017-05-14 22:16:50

时间进行处理,提取出周几weekday,小时hour,日期day数据,以便后续分析不同时间出行数据的分布

# 使用weekday函数提取周几信息,周一为0,周日为6
df["weekday"] = df["starttime"].apply(lambda s: s.weekday()) 

# 提取小时数,hour属性
df["hour"] = df["starttime"].apply(lambda s: s.hour)

# 提取时间中的日期
df["day"] = df["starttime"].apply(lambda s:str(s)[:10])

# 打印日志
print("时间信息处理完毕!")  
时间信息处理完毕!

空间信息处理

数据集中,地理位置通过Geohash加密,算法比赛的官网上告知可以通过开源的方法获得经纬度数据。

本文是直接导入Geohash脚本进行处理经纬度的处理

关于Geohash编码的原理,强烈推荐阅读此文:https://www.cnblogs.com/LBSer/p/3310455.html

Geohash感性认识:

  • GeoHash将二维的经纬度转换成字符串,比如下图展示了北京9个区域的GeoHash字符串,分别是WX4ER,WX4G2、WX4G3等等,每一个字符串代表了某一矩形区域。这个矩形区域内所有的点(经纬度坐标)都共享相同的GeoHash字符串,这样既可以保护隐私(只表示大概区域位置而不是具体的点),又比较容易做缓存,比如左上角这个区域内的用户不断发送位置信息请求附近餐馆数据,由于这些用户的GeoHash字符串都是WX4ER,所以可以把WX4ER当作key,把该区域的餐馆信息当作value来进行缓存,而如果不使用GeoHash的话,由于区域内的用户传来的经纬度是各不相同的,很难做缓存。
    在这里插入图片描述
  • Geohash能够提供任意经度的分段级别,一般分为1-12级。Geohash编码字符串越长,表示的区域范围越精确。
    Geohash区块等级

前面已经验证过,数据集中Geohash区块位置信息全部为7位Geohash编码。按照对应的精度级别,每个区块在153米*153米范围内。G7位编码对应的区块范围很小,单车随意骑行,一般都能离开当前区域。

构建区块对应的6位Geohash编码,每个区块面积在1.22km*0.61km范围内,比较符合短途摩拜骑行的特点。

当然,我们还可以从7位Geohash编码中不断提取更短的编码进行研究分析,但建议到4位即可。
如果编码更短,比如3位,区块面积太大,就会变得没意义。

def geo_data_process(df):
    # 通过导入Geohash脚本中的decode函数,获取经纬度
    df["start_lat_lng"] = df["geohashed_start_loc"].apply(lambda s: geohash.decode(s))   
    df["end_lat_lng"] = df["geohashed_end_loc"].apply(lambda s: geohash.decode(s))
    
    #获取出发地点所在区块周围的8个相邻区块编码
    df["start_neighbors"] = df["geohashed_start_loc"].apply
  • 16
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
共享车是一种新型的交通工具,它为人们提供了便捷的出方式。随着共享车的普及,对其数据分析也成为了一种热门的研究方向。本文将从共享车的数据分析角度出发,介绍共享车的数据分析方法。 一、数据采集 共享车的数据采集主要包括两个方面,一是从车上采集数据,二是从用户端采集数据。 从车上采集数据主要包括以下几个方面: 1. GPS定位数据:GPS定位数据可以用来确定车的位置和移动轨迹。 2. 用户骑数据:用户骑数据可以用来确定车的使用情况,如骑时间、路程、速度等。 3. 故障数据:故障数据可以用来确定车的状态,如是否需要维修。 从用户端采集数据主要包括以下几个方面: 1. 注册信息:注册信息可以用来确定用户的基本信息,如年龄、性别、职业等。 2. 使用数据:使用数据可以用来确定用户的使用情况,如骑时长、骑距离、骑地点等。 3. 评价数据:评价数据可以用来确定用户对车的满意度,如评分、评论等。 二、数据存储 共享车的数据存储主要包括两个方面,一是将采集的数据存储在服务器上,二是将数据可视化。 将采集的数据存储在服务器上可以方便数据的管理和分析。可以使用数据库来存储数据,如MySQL、MongoDB等。数据存储时需要注意数据的结构和类型,以便后续的数据分析和处理。 将数据可视化可以帮助我们更好地理解数据。可以使用数据可视化工具来实现数据可视化,如Tableau、PowerBI等。数据可视化可以帮助我们从多个角度分析数据,如数据的趋势、分布、关系等。 三、数据分析 共享车的数据分析主要包括以下几个方面: 1. 用户分析:用户分析可以帮助我们了解用户的使用习惯和需求,以便更好地满足用户的需求。可以从用户使用时间、地点、频率等方面进分析。 2. 车状态分析车状态分析可以帮助我们了解车的健康状况和使用情况,以便更好地维护和管理车。可以从车使用时间、故障率、维修情况等方面进分析。 3. 区域分析:区域分析可以帮助我们了解车的使用情况和需求分布,以便更好地规划车的投放和管理。可以从车使用量、用户分布、交通情况等方面进分析。 四、数据应用 共享车的数据应用主要包括以下几个方面: 1. 运营管理:运营管理可以帮助我们更好地管理和维护车,以便更好地满足用户的需求。可以从车投放、维修、调度等方面进管理。 2. 营销策略:营销策略可以帮助我们更好地推广车和吸引用户,以便更好地提升车的使用率和收益。可以从用户需求、市场竞争等方面进分析。 3. 交通规划:交通规划可以帮助我们更好地规划城市交通和提升出效率,以便更好地满足人们的出需求。可以从交通状况、用户需求等方面进分析。 综上所述,共享车的数据分析可以帮助我们更好地了解用户需求和车状态,以便更好地管理和运营车。同时,共享车的数据分析也可以为城市交通规划和营销策略提供参考。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值