教你用300万共享单车出行数据,预测骑行目的地 !(附源码)

来源:大数据挖掘DT数据分析

本文长度为1647字,建议阅读3分钟

本文为你介绍使用出行记录数据和源码预测摩拜出行目的地的方法。


后台回复关键词“摩拜” 获取本文数据及源码地址。


摩拜单车在北京的单车投放量已经超过40万。用户可以直接在人行道上找到停放的单车,用手机解锁,然后骑到目的地后再把单车停好并锁上。因此,为了更好地调配和管理这40万辆单车,需要准确地预测每个用户的骑行目的地。


标注数据中包含300万条出行记录数据,覆盖超过30万用户和40万摩拜单车。数据包括骑行起始时间和地点、车辆ID、车辆类型和用户ID等信息。参赛选手需要预测骑行目的地的区块位置。



以下代码是knn算法,结合了leak。这里主要有两点创新:


  • 给算出来的距离值除以频度的1.1次方,这个加了很多分

  • 对于新用户又使用了一个新的knn,其他算法在处理新用户的时候也可以参考下,knn算法产生的特征可以融合进xgb再训练。


源码地址: 后台 回复 摩拜  即可获取


import csv

import math

import datetime

#user_habit_dict:每个用户的乘车记录:起点,终点,距离

user_habit_dict={}

#start_end_dict:每条记录的起点,终点对

start_end_dict={}

#end_start_dict:每条记录的起点,终点对

end_start_dict={}

#user_habit_dict_test:test中每个用户的记录

user_habit_dict_test={}

#bike_dict:bike中的记录

bike_dict={}


  • 弧度转换


def rad(tude):

    return (math.pi/180.0)*tude


  • geohash模块提取的


__base32 = '0123456789bcdefghjkmnpqrstuvwxyz'

__decodemap = { }

for i in range(len(__base32)):

    __decodemap[__base32[i]] = i

del i


  • 返回 精确的经纬度和误差


def decode_exactly(geohash):

    lat_interval, lon_interval = (-90.0, 90.0), (-180.0, 180.0)

    lat_err, lon_err = 90.0, 180.0

    is_even = True

    for c in geohash:

        cd = __decodemap[c]

        for mask in [16, 8, 4, 2, 1]:

            if is_even: # adds longitude info

                lon_err /= 2

                if cd & mask:

                    lon_interval = ((lon_interval[0]+lon_interval[1])/2, lon_interval[1])

                else:

                    lon_interval = (lon_interval[0], (lon_interval[0]+lon_interval[1])/2)

            else:      # adds latitude info

                lat_err /= 2

                if cd & mask:

                    lat_interval = ((lat_interval[0]+lat_interval[1])/2, lat_interval[1])

                else:

                    lat_interval = (lat_interval[0], (lat_interval[0]+lat_interval[1])/2)

            is_even = not is_even

    lat = (lat_interval[0] + lat_interval[1]) / 2

    lon = (lon_interval[0] + lon_interval[1]) / 2

    return lat, lon, lat_err, lon_err

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值