Python看春運(yùn),萬(wàn)條拼車數(shù)據(jù)背后的春節(jié)遷徙地圖

Python看春運(yùn),萬(wàn)條拼車數(shù)據(jù)背后的春節(jié)遷徙地圖

今天是正月初九,春運(yùn)返程也已過(guò)半。這篇文章,作者對(duì)北京、上海、廣州、深圳、杭州等地 1萬(wàn)多條出行數(shù)據(jù)進(jìn)行分析,得出了一些有意思的結(jié)論,并且繪制了這幾個(gè)城市春運(yùn)的遷移圖。雖然數(shù)據(jù)在取樣公平性上不能完全符合標(biāo)準(zhǔn),但是思路還是值得大家學(xué)習(xí)參考的~

目錄

  • 前言
  • 統(tǒng)計(jì)結(jié)果
  • 爬蟲(chóng)思路
  • 統(tǒng)計(jì)思路
  • 后記

前言

很早之前發(fā)過(guò)一篇關(guān)于某拼車平臺(tái)爬蟲(chóng)的文章,因?yàn)楣ぷ鞅容^忙,一直沒(méi)有下文。最近年底稍微空了些,加上碰上春節(jié)返鄉(xiāng)大潮,剛好再拿過(guò)來(lái)寫(xiě)一下數(shù)據(jù)分析的思路。

本次數(shù)據(jù)樣本共13041條,本別采集了北京、上海、廣州、深圳、杭州的某一天出行數(shù)據(jù),由于手動(dòng)操作難以保證取樣的公平性,所以不能對(duì)全部數(shù)據(jù)結(jié)果的準(zhǔn)確性做保證,本文以提供思路參考為主,先放一張路線圖:

img

統(tǒng)計(jì)結(jié)果

好了知道大家比較關(guān)心結(jié)果,所以先把結(jié)果放一放,后面再接著講分析過(guò)程。

  • 乘客性別

先單獨(dú)把性別拎出來(lái)看一下,后面再根據(jù)城市進(jìn)行分析,結(jié)果顯示,拋開(kāi)未設(shè)置性別的乘客不論,總體來(lái)看順風(fēng)車的用戶群中,男性(占比 49.39%)還是多于女性(占比 31.55%)的。畢竟跨城順風(fēng)車,大過(guò)年的,女性乘客對(duì)于安全性的憂慮還有要有的。

img
  • 城市訂單

真實(shí)數(shù)據(jù)的話訂單數(shù)量應(yīng)該是深圳 > 北京 > 廣州 > 上海 > 杭州,但是同一個(gè)城市內(nèi)的乘客性別比例應(yīng)該還是具有一定的參考價(jià)值的,可以看到北京、上海、深圳的女性乘客數(shù)量占比都是高于男性的。

img
  • 客單價(jià)

原本是想比較一下平均路程長(zhǎng)度,但是想想這個(gè)事情太折騰了,由于平臺(tái)主要還是依靠路程來(lái)計(jì)算拼車費(fèi)用的,所以通過(guò)計(jì)算客單價(jià)的話大概也能反映一下平均形成長(zhǎng)度(我猜的,然后結(jié)果是這樣的,沒(méi)想到廣州是最高的,也可能是我統(tǒng)計(jì)錯(cuò)誤。

img
  • 哪里乘客最壕

有時(shí)候有些偏遠(yuǎn)地區(qū)訂單或者順路司機(jī)少,乘客會(huì)加價(jià)希望司機(jī)接單,于是統(tǒng)計(jì)了一下各城市加價(jià)訂單的占比和平均的加價(jià)額度,得出如下結(jié)果

占比最高的城市是深圳,平均加價(jià)額度最高的城市也是深圳,看來(lái)深圳的小哥哥小姐姐們的確出手闊錯(cuò),然而加價(jià)比例最低的是北京,不過(guò)這也不能說(shuō)明帝都人民不壕氣,可能就是人家繁華,司機(jī)多。

img
  • 返鄉(xiāng)路線圖

最后放幾張返鄉(xiāng)的路線圖

北京

img

上海

img
img

廣州

img
img

深圳

img

杭州

杭州明顯有別與其它幾個(gè)城市,一個(gè)是杭州的數(shù)據(jù)樣本多,另外一個(gè)平臺(tái)上杭州黃牛多,那些最遠(yuǎn)的單子就是黃牛廣告單。

img
img

爬蟲(chóng)思路:注冊(cè)成為司機(jī),利用 mitm 抓包存儲(chǔ)拼車單

統(tǒng)計(jì)思路:數(shù)據(jù)的話我是通過(guò)本地 Mongodb 存儲(chǔ),所以直接用 python 操作 Mongodb 數(shù)據(jù)

Pymongo:關(guān)于 Mongodb 數(shù)據(jù)庫(kù)的連接,直接上代碼:

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

以上代碼的意思就是連接本地 Mongodb-spring 數(shù)據(jù)庫(kù) -orders 文檔集合

Pyecharts:是大名鼎鼎的 Echarts 的 Python 可視化圖表庫(kù),用起來(lái)挺順手的,而且文檔規(guī)范,基本上可以零門檻入門,具體實(shí)現(xiàn)請(qǐng)移步文檔。

Pyecharts(http://pyecharts.org)

這里介紹一下關(guān)于 Pyecharts 的圖表樣式配置,為了保持各圖表的樣式統(tǒng)一(偷懶),Pyecharts 提供了一個(gè) Style 類,可用于在同一個(gè)圖或者多個(gè)圖內(nèi)保持統(tǒng)一的風(fēng)格。

rom pyecharts import Style,Geo

style = Style(
   title_color="#fff",
   title_pos="center",
   width=1100,
   height=600,
   background_color='#404a59'
)
# style.init_style 會(huì)返回類初始化的風(fēng)格配置字典
geo = Geo("全國(guó)主要城市空氣質(zhì)量", "data from pm2.5", **style.init_style)

代碼解讀

因?yàn)槿看a有點(diǎn)長(zhǎng),所以抽了一段舉個(gè)例子,主要思路就是從 Mongodb 取出指定數(shù)據(jù),或者通過(guò) $group 管道對(duì)數(shù)據(jù)進(jìn)行處理,最后通過(guò) pyecharts 生成相應(yīng)的圖表,呈現(xiàn)

from pymongo import MongoClient
from pyecharts import Style,GeoLines

def getLines(self):
   # 連接數(shù)據(jù)庫(kù)
   client = MongoClient('mongodb://localhost:27017')
   spring = self.client.spring
   collection = self.spring['orders']
   
   # Mongodb的操作,$match-篩選出'from_poi.city.city_name'為'杭州'的文檔,
   # 再通過(guò)$group管道,按照目標(biāo)城市統(tǒng)計(jì)出匯總數(shù)量
   line_hangzhou = collection.aggregate([
       {'$match': {'from_poi.city.city_name': '杭州'}},
       {'$group': {'_id': '$to_poi.city.city_name', 'count': {'$sum': 1}}}
   ])
   # 按照Geolines圖表的數(shù)據(jù)格式格式化數(shù)據(jù)
   line_hangzhou_ = []
   for line in line_hangzhou:
       line_hangzhou_.append(["杭州", line['_id'], line['count']])
       
   # 創(chuàng)建一個(gè)GeoLines圖表
   citylines = GeoLines("春節(jié)遷移路線圖", **style.init_style)
   # 添加數(shù)據(jù)以及樣式
   citylines.add("從杭州出發(fā)",
                 line_hangzhou_,
                 **geo_style)
   # 生成html文件
   citylines.render("results/citylines.html")

后記

這是一篇遲到很久的文章,本來(lái)沒(méi)打算再寫(xiě),但是總覺(jué)得下半部分沒(méi)寫(xiě)完心里有個(gè)結(jié),所以還是抽時(shí)間補(bǔ)上。另外作為一個(gè)非專業(yè)技術(shù)人員,多記多練免得過(guò)幾天自己就忘了。

源碼地址附上:

https://github.com/bkidy/Dida_spider

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容