Python | 一万多条拼车数据,看春运的迁徙图

news/2024/7/5 2:05:39

640?wx_fmt=jpeg


作者 | 白苏,医疗健康领域产品经理一枚,Python&R爱好者

来源 | InThirty

编辑 | Jane


今天是腊月二十八,你们都到家了吗?这篇文章,作者对北京、上海、广州、深圳、杭州等地 1万多条出行数据进行分析,得出了一些有意思的结论,并且绘制了这几个城市春运的迁移图。虽然数据在取样公平性上不能完全符合标准,但是思路还是值得大家学习参考的~


目录


  • 前言

  • 统计结果

  • 爬虫思路

  • 统计思路

  • 后记


前言


很早之前发过一篇关于某拼车平台爬虫的文章,因为工作比较忙,一直没有下文。最近年底稍微空了些,加上碰上春节返乡大潮,刚好再拿过来写一下数据分析的思路。


本次数据样本共13041条,本别采集了北京、上海、广州、深圳、杭州的某一天出行数据,由于手动操作难以保证取样的公平性,所以不能对全部数据结果的准确性做保证,本文以提供思路参考为主,先放一张路线图:


640?wx_fmt=png



统计结果


好了知道大家比较关心结果,所以先把结果放一放,后面再接着讲分析过程。


  • 乘客性别


先单独把性别拎出来看一下,后面再根据城市进行分析,结果显示,抛开未设置性别的乘客不论,总体来看顺风车的用户群中,男性(占比 49.39%)还是多于女性(占比 31.55%)的。毕竟跨城顺风车,大过年的,女性乘客对于安全性的忧虑还有要有的。


640?wx_fmt=png


  • 城市订单


真实数据的话订单数量应该是深圳 > 北京 > 广州 > 上海 > 杭州,但是同一个城市内的乘客性别比例应该还是具有一定的参考价值的,可以看到北京、上海、深圳的女性乘客数量占比都是高于男性的。

 

640?wx_fmt=png



  • 客单价


原本是想比较一下平均路程长度,但是想想这个事情太折腾了,由于平台主要还是依靠路程来计算拼车费用的,所以通过计算客单价的话大概也能反映一下平均形成长度(我猜的,然后结果是这样的,没想到广州是最高的,也可能是我统计错误


640?wx_fmt=png


  • 哪里乘客最壕


有时候有些偏远地区订单或者顺路司机少,乘客会加价希望司机接单,于是统计了一下各城市加价订单的占比和平均的加价额度,得出如下结果


占比最高的城市是深圳,平均加价额度最高的城市也是深圳,看来深圳的小哥哥小姐姐们的确出手阔错,然而加价比例最低的是北京,不过这也不能说明帝都人民不壕气,可能就是人家繁华,司机多。


640?wx_fmt=png


  • 返乡路线图


最后放几张返乡的路线图


北京


640?wx_fmt=png


上海


640?wx_fmt=png

640?wx_fmt=png


广州


640?wx_fmt=jpeg

640?wx_fmt=png


深圳


640?wx_fmt=png


杭州


杭州明显有别与其它几个城市,一个是杭州的数据样本多,另外一个平台上杭州黄牛多,那些最远的单子就是黄牛广告单


640?wx_fmt=png

640?wx_fmt=png


爬虫思路:注册成为司机,利用 mitm 抓包存储拼车单


统计思路:数据的话我是通过本地 Mongodb 存储,所以直接用 python 操作 Mongodb 数据


Pymongo:关于 Mongodb 数据库的连接,直接上代码:


client = MongoClient('mongodb://localhost:27017')
spring = client.spring
collection = spring['orders']


以上代码的意思就是连接本地 Mongodb-spring 数据库 -orders 文档集合


Pyecharts:是大名鼎鼎的 Echarts 的 Python 可视化图表库,用起来挺顺手的,而且文档规范,基本上可以零门槛入门,具体实现请移步文档。


Pyecharts(http://pyecharts.org)


这里介绍一下关于 Pyecharts 的图表样式配置,为了保持各图表的样式统一(偷懒),Pyecharts 提供了一个 Style 类,可用于在同一个图或者多个图内保持统一的风格


rom pyecharts import Style,Geo

style = Style(
   title_color="#fff",
   title_pos="center",
   width=1100,
   height=600,
   background_color='#404a59'
)
# style.init_style 会返回类初始化的风格配置字典
geo = Geo("全国主要城市空气质量""data from pm2.5", **style.init_style)



代码解读


因为全部代码有点长,所以抽了一段举个例子,主要思路就是从 Mongodb 取出指定数据,或者通过 $group 管道对数据进行处理,最后通过 pyecharts 生成相应的图表,呈现


from pymongo import MongoClient
from pyecharts import Style,GeoLines

def getLines(self):
   # 连接数据库
   client = MongoClient('mongodb://localhost:27017')
   spring = self.client.spring
   collection = self.spring['orders']
   
   # Mongodb的操作,$match-筛选出'from_poi.city.city_name'为'杭州'的文档,
   # 再通过$group管道,按照目标城市统计出汇总数量
   line_hangzhou = collection.aggregate([
       {'$match': {'from_poi.city.city_name''杭州'}},
       {'$group': {'_id''$to_poi.city.city_name''count': {'$sum'1}}}
   ])
   # 按照Geolines图表的数据格式格式化数据
   line_hangzhou_ = []
   for line in line_hangzhou:
       line_hangzhou_.append(["杭州", line['_id'], line['count']])
       
   # 创建一个GeoLines图表
   citylines = GeoLines("春节迁移路线图", **style.init_style)
   # 添加数据以及样式
   citylines.add("从杭州出发",
                 line_hangzhou_,
                 **geo_style)
   # 生成html文件
   citylines.render("results/citylines.html")



后记


这是一篇迟到很久的文章,本来没打算再写,但是总觉得下半部分没写完心里有个结,所以还是抽时间补上。另外作为一个非专业技术人员,多记多练免得过几天自己就忘了。源码的话抽空传 GitHub,有需要可以后台留言。



  推荐        

640?wx_fmt=png


推荐阅读

  • 为何Google将几十亿行源代码放在一个仓库?

  • 熬夜写代码,不如换女装入GitHub获上千Star?

  • Python告诉你绝不知道的1983-2018春晚

  • 一万多条拼车数据,看春运的迁徙图

  • 4个最受欢迎的大数据可视化工具!

  • 直击达沃斯:区块链是好技术,比特币一文不值,为什么?

  • 年薪 10 万的程序员,如何积累人生的第一个 100 万?

  • 苹果开撕 Facebook、Google!

  • 嫁人当嫁程序员

640?wx_fmt=png

点击“阅读原文”,打开CSDN APP 阅读更贴心!


http://lihuaxi.xjx100.cn/news/285921.html

相关文章

Unity3d多线程

为什么80%的码农都做不了架构师?>>> (一)多线程的创建 Thread t new Thread(new ThreadStart(Go)); Thread t1 new Thread(Go); 两种创建方式没有区别; (二)多线程的状态控制和优先级 多线程…

第1关:利用栈实现整数的十进制转八进制

#ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef int T; // 数据元素的数据类型struct Stack{T* data; // 数据元素存储空间的开始地址int top; // 栈顶的位置int max; // 栈的最大长度 };Stack* Stack_Create(int maxlen)…

数据可视化[python-pyecharts]制作中国各省份近三个月新型冠状病毒肺炎变化图

大体思路&#xff1a; 通过pyecharts等库一个for循环批量绘制近几个月每天的图&#xff0c;最后通过pr将图片合成 先看一下某一天的样图&#xff0c;用pr组合起来之后就是个动态的了 文章目录安装pyecharts库数据来源代码部分1.导入库2.将路径中所有文件找出保存至列表3.处理导…

树上启发式合并问题 ---- 2019icpc南昌 K. Tree (树上启发式合并 + 动态开点线段树)

题目链接 题目大意&#xff1a; 就是给你一颗树&#xff0c;每个点有个权值viv_ivi​&#xff0c;问你有多少对(x,y)(x,y)(x,y)满足&#xff1a; xxx不是yyy的祖先yyy也不是xxx的祖先xxx和yyy的距离不超过kkkxxx和yyy最近公共祖先&#xff1a;zzz,满足vxvy2vzv_xv_y2v_zvx​vy…

程序员最常说的9句话,精准!

1、别更新了学不动了。2、我不会修电脑&#xff0c;谢谢。3、听说今晚不用加班。4、是你的网络有问题。5、清一下缓存再试试6、扫码提需求&#xff0c;谢谢。7、换一台设备试试看。8、保证今晚十点上线。9、键盘给你&#xff0c;你来写。IT程序猿 微博网友评论&#xff1a;猫儿…

为何Google将几十亿行源代码放在一个仓库?

作者 | Rachel Potvin&#xff0c;Josh Levenberg 译者 | 张建军 编辑 | apddd 【AI科技大本营导读】与大多数开发者的想象不同&#xff0c;Google只有一个代码仓库——全公司使用不同语言编写的超过10亿文件&#xff0c;近百TB源代码都存放在自行开发的版本管理系统Piper中&…

7个Debug linux程序的Strace 列子

Strace是一个能帮助你解决问题的debugging工具 Strace监控指定程序系统调用和信号&#xff0c;在你没有源代码又想dubug程序的执行时是会用到的。Strace会以程序的开始到结束来顺序执行的 你可以从这个7个Strace 例子开始起步了解Strace 1.跟踪可执行程序的执行 你可以使用stra…

第2关:利用栈判断字符串括号是否匹配

#ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef char T; // 数据元素的数据类型struct Stack{T* data; // 数据元素存储空间的开始地址int top; // 栈表的当前位置int max; // 栈表的最大长度 };Stack* Stack_Create(int …