clv币怎么样,clv币现价
自行车共享和Python数据分析建模探索(CLV建模和可视化)
开发环境
4.3[开发平台和环境]
Windons 10教育版
Python 3.7
IntelliJ IDEA 2018.2.1/PyCharm
谷歌铬合金
数据清理和分析模块
可视化模块matplotlib
原始问题:
Python数据分析智联招聘职位分析完整项目(数据抓取、数据分析、数据可视化)
链接:3359blog.csdn.net/weixin _ 46205203/文章/详情/104187696
1.数据格式中文字段:
订单ID、用户ID、自行车类型、开始时间、开始定位和结束定位。
注:经纬度将由geohash模块计算,然后转换成具体距离。
数据大小:
180M
前言涵盖48万辆单车,近35W骑行。通过在Geohash脚本中导入decode函数,得到经纬度,利用哈弗辛公式计算球面上两点之间的距离。并计算估算每个用户的消耗,统计一辆自行车骑了多少公里,并提示维修。
代码控制台输出显示所有行来自DPM _ file。show import show import datetime # show()import pandas as PD import geohashimport seaborn as SNS from math import radians,cos,sin,asin,sqr import matplotlib。作为PLT文件的py绘图= F:/数据集/国内摩拜共享单车数据集/火车。CSV df=PD。read _ CSV( % s % file,sep=,,parse_dates=[starttime])#数据涵盖了48万的单车,涵盖了近35W的骑bikeid_size,userid_size=df[bikeid].唯一()。size,df.userid.unique().sizeprint(bikeid_size,辆单车,userid_size,用户)# 抽取1%的数据df=df.sample(frac=0.002)print(抽取20%的数据:,len(df))#通过导入地理哈希脚本中的译函数,获取经纬度df[ start _ lat _ LNG ]=df[ geo hashed _ start _ loc ].应用(lambda s:地理哈希。decode(s))df[ end _ lat _ LNG ]=df[ geo hashed _ end _ loc ].应用(lambda s:地理哈希。解码)# #获取出发地点所在区块周围的8个相邻区块编码# df[ start _ neighbors ]=df[ geo hashed _ start _ loc ].应用(lambda s:mzgeohash。邻居))# #提取区块对应的6位地理哈希编码# df[地理散列_开始_位置6 ]=df[地理散列_开始_位置].apply(lambda s:s[0:6])# df[ geo hashed _ end _ loc _ 6 ]=df[ geo hashed _ end _ loc ].应用(s:s[0:6])# #获取出发地点所在区块周围的8个相邻区块的6位地理哈希编码# df[ start _ neighbors _ 6 ]=df[ geo hashed _ start _ loc _ 6 ].应用(lambda s:mzgeohash。邻居)# print(df。head(5))print( Geohash编码处理完毕!)# 判断目的地是否在当前区块或相邻区块内打印(一阶完成!)# 用半正矢公式计算球面两点间的距离极好的哈弗辛(lon1、lat1、lon2、lat2): #这里错误,需要专漂浮物类型才能进行运算lon1,lat1,lon2,lat2=map(弧度、[float(lon1)、float(lat1)、float(lon2)、float(la T2)])dlon=lo N2-lo n1 dlat=la T2-la t1 # print(type(lo n1。头)))#打印(类型(lo N2。头(1)))#打印(类型(la t1。头)))#打印(类型(拉T2。head(1)))a=sin(dlat/2)* * 2 cos(la t1)* cos(la T2)地球平均半径,单位为公里返回c * r * 1000 df[ start _ end _ distance ]=df。apply(lambda s:haversine(s[ start _ lat _ LNG ][1],s[start_lat_lng][0],s[end_lat_lng][1],s[end_lat_lng][0]),axis=1)print(二阶完成)#获取小时df[小时]=df[开始时间]。应用(s:s . hour)#打印(df。head(5))hour _ group=df[[ userid ,小时]].groupby(hour ,as_index=False).count()打印(hour _ group。sort _ values( userid ,升序=False))hour _ num _ df=hour _ group。agg({ userid : count }).reset _ index()SNS。条形图(x=hour _ group[小时],y=hour_group[用户id],data=hour _ num _ df)# PLT。bar(hour _ group[ hour ],hour _ group[ userid ])SNS。显示批次(df[开始_结束_距离])工厂。显示()#单车报修统计统计单车骑行公里数超过多少提示报修number_bike=df[[bikeid ,开始_结束_距离]].groupby(bikeid ,as_index=False).sum()number _ bike=number _ bike[number _ bike[ start _ end _ distance ]]number _ bike=number _ bike。sort _ values( start _ end _ distance ,ascending=False)print(number _ bike。负责人(5))
结果 1
开始_结束_距离开始到结束的距离(单位:公里)
注释:180米数据,随机抽取了20%
结果 2
每个时间段订单走势(赶时间省略100字)
注释:180米数据,随机抽取了20%
结果 3
预估单车骑行公里数超过多少提示报修
number _ bike=number _ bike[number _ bike[ start _ end _ distance ]N]print(number _ bike。head(5))bikeid start _ end _ distance=N有自行车行业经验的自行决定439670 10754.385365
441905 9453.600628
251484 8895.594132
355054 8895.594132
385307 7830.297728
恒定线速度探索计算用户骑行距离所消费的金额钱
3公里=1元=5分钟
6公里=2元=10分钟
12公里=3元=15分钟
经过上述统计得到2017-05-24 19:00:16为结束时间,数据量320瓦条
统计频率频次为0的占比(2017-05-10 到2017-05-24之间)
使用BG/NBD模型分析频次和/新近度整编
预测前5大客户未来T=15天可能发生的购买频次
未来T日可能产生多少"奥里,"
注释:这个个人定义的,实际骑行距离所用的时间因人而异
从生存期. utils导入*从一生导入*从商业。CLV .摩拜自行车导入df导入熊猫作为警察局导入日期时间 1。分析用户未来5天可能消费的频次和消费金额(CLV建模)# 需要的字段data=df[[用户id ,开始时间,开始_结束_距离]]#筛选出骑行距离大于0的data=data[data[ start _ end _ distance ]0]#计算用户骑行距离所消费的金额钱# 3公里=1元=5分钟# 6公里=2元=10分钟# 12公里=3元=15分钟def fun(x):if 0=x 3000:return 1 elif 3000=x 5000:return 2 elif 5000=x 7000:return 3 elif 7000=x 9000:return 4 elif 9000=x 11000:return 5 elif x=11000:return 50 data[ money ]=data[ start _ end _ distance ].应用(x:fun(x))#特殊时间格式处理数据[开始时间]=PD。to _ datetime(数据[开始时间],单位= S )。dt。字符串时间( % Y-% M-% d % H:% M:% S )打印(数据。头(5))打印(列表(数据[开始时间])#将时间排序,查看开始日期到结束日期0.003=2017-05-10 00:02:45 2017-05-24 18:58:01 # a=list(data[ start time ])# def get _ list(date):# return datetime。日期时间。strptime(日期, %Y-%m-%d %H:%M:%S ).timestamp()# list=sorted(a,key=lambda date:get _ list(date))# print(list[1])经过上述统计得到2017-05-24 19:00:16为结束时间,数据量320瓦条# CLV建模CLV _数据=summary _ data _ from _ transaction _ data(data, userid , starttime ,monetary_value_col=money ,observation _ period _ end= 2017-05-24 )打印(‘CLV建模后:’,兰(CLV数据),行n ,CLV_data.head(5))#统计频率频次为0的占比(2017-05-10 到2017-05-24之间)频率s=(总和(CLV _数据。频率==0)/len(数据))* 100print(频次为0的占比:,圆形(频率,2), % ,len(CLV数据),行)# 使用BG/NBD模型分析频次和/新近度bgfbgf=beta geo fitter(penalizer _ coef=0)bgf。飞度(CLV _数据[频率],CLV _数据[最近],CLV _数据[T])打印(寿命数据: , n ,bgf)打印(生存期数据摘要: , n ,bgf.summary)#预测前5大客户未来T=15天可能发生的购买频次T=数据=CLV数据[CLV数据[频率]0]数据[预测购买]=整编。conditional _ expected _ number _ of _ purchases _ up _ to _ time(T,data[频率],数据[最近],数据[T])#未来T日可能产生多少ORI?数据[ORI]=数据。货币_价值*数据。预测_购买ROI=数据。sort _ values(by= predicted _ purchases ,ascending=False)# print(未来T日客户购买频次和奥里:,兰(数据),行n ,data.head(5))print(预测15天内该前5大客户购买频次:, n ,ROI.head(5))#有时候出错,要检测penalizer_coef(惩戒系数)赶时间不写了(数据比较大,不上传了,要数据看主页加五)