用Python分析國(guó)慶旅游景點(diǎn),告訴你哪些地方好玩、便宜、人又少
2019年國(guó)慶馬上就要到來(lái)
豬哥今年想著來(lái)點(diǎn)新花樣吧
玩肯定是要去玩的
不然怎么給祖國(guó)慶生
那去哪里玩人少big還高呢?
咱不是程序員嘛
那就用數(shù)據(jù)分析下
看看哪些地方值得去
一、目標(biāo)
使用Python分析出國(guó)慶哪些旅游景點(diǎn):好玩、便宜、人還少的地方,不然拍照都要搶著拍!
二、獲取數(shù)據(jù)
既然做數(shù)據(jù)分析肯定要先搞到數(shù)據(jù),最開(kāi)始豬哥在一些官方網(wǎng)站查找旅游信息,畢竟官方的數(shù)據(jù)可信度高點(diǎn), 但我一無(wú)所獲,有點(diǎn)失望!
然后尋找其他替代方案:爬取出行網(wǎng)站的旅游景點(diǎn)售票數(shù)據(jù),這樣也可以反映出旅游景點(diǎn)的熱度!
豬哥首先想到 去哪兒,這里必須要安利一波去哪兒,同樣的酒店同樣的房間,去哪兒價(jià)格基本都是最低,所以豬哥也用的最多!
選好學(xué)習(xí)對(duì)象,那我就開(kāi)始吧!
注⚠️:本教程僅用作學(xué)習(xí)交流,如有侵害任何人權(quán)益,請(qǐng)聯(lián)系豬哥刪除!
1.爬取單頁(yè)數(shù)據(jù)
我們可以在哪去兒的門票頁(yè)(http://piao.qunar.com/ticket/list.htm?keyword=)搜索:**國(guó)慶旅游景點(diǎn)**,就可以看到推薦的景點(diǎn)的一些信息,如:名稱、地區(qū)、熱度、銷量、價(jià)格、等級(jí)、地理信息等等,信息應(yīng)該說(shuō)是比較全,良心!
然后按下F12打開(kāi)瀏覽器調(diào)試窗口,查找加載數(shù)據(jù)的url(翻頁(yè)就可以看到)
竟然直接返回了json數(shù)據(jù),真是太方便了
最后使用requests庫(kù)寫一個(gè)get請(qǐng)求就可以了
這樣一頁(yè)數(shù)據(jù)就抓取下來(lái)了,是不是很簡(jiǎn)單?
這里說(shuō)下去哪兒門票頁(yè)抓取數(shù)據(jù)還是很簡(jiǎn)單,不需要登錄、不需要代理 、甚至不需要header也可以成功,后面批量抓取頁(yè)沒(méi)出現(xiàn)限制,相對(duì)于淘寶來(lái)說(shuō)簡(jiǎn)單了許多!
2.提取有效信息
既然數(shù)據(jù)拿到了,那就看看數(shù)據(jù)結(jié)構(gòu),然后提取自己想要的屬性吧
這里豬哥提取了:id、名稱、星級(jí)、評(píng)分、門票價(jià)格、銷量、地區(qū)、坐標(biāo)、簡(jiǎn)介這些信息,基本有效信息都保存起來(lái)!
3.保存到excel
需要的數(shù)據(jù)提取出來(lái)之后,我們就可以將他們保存起來(lái)。這里我們使用pandas庫(kù)保存excel文件。
沒(méi)有安裝pandas庫(kù)的同學(xué)安裝一下
- pip install xlrd
- pip install openpyxl
- pip install numpy
- pip install pandas
這里單頁(yè)數(shù)據(jù)的處理就完成了,爬取、解析、保存三步走~
4.批量爬取
批量爬取也很簡(jiǎn)單,先找分頁(yè)數(shù)據(jù),多點(diǎn)幾下頁(yè)數(shù)比較不同參數(shù)就能看出來(lái)
經(jīng)過(guò)一會(huì)的分析,我們便可以看出參數(shù) page 就是分頁(yè)參數(shù)了,這樣我們?cè)谕鈱訉懸粋€(gè)for循環(huán),把頁(yè)數(shù)傳入就可以實(shí)現(xiàn)批量爬取
那個(gè)36是我在網(wǎng)頁(yè)上看到了,當(dāng)然也可以實(shí)現(xiàn)自動(dòng)判斷是否爬取完成,只要判斷每次返回的條數(shù)即可!
看看批量爬取的效果
三 、分析數(shù)據(jù)
數(shù)據(jù)都下載完畢后,就要思考如何去利用分析這些數(shù)據(jù)了,豬哥簡(jiǎn)單做了幾個(gè)分析:
- 景點(diǎn)門票銷量排行分析
- 景點(diǎn)門票銷售額排行分析
- 各省各等級(jí)景點(diǎn)數(shù)分析
- 景點(diǎn)銷量熱力圖分析
- 推薦景點(diǎn)分析
我們使用的可視化庫(kù)仍然是:pyecharts庫(kù) ,更多維度分析等待你去思考~
1.景點(diǎn)門票銷量排行分析
我們先來(lái)分析下景點(diǎn)門票銷量排行
我們創(chuàng)建了一個(gè)透視表,然后根據(jù)銷量排序!最后生成柱狀圖,一起來(lái)看看效果:
我們可以看到迪士尼門票銷量排第一
2.景點(diǎn)銷售額排行分析
銷售額=單價(jià)*銷量,我們可以將每行的price和sale相乘算出銷售額
我們將得到的銷售額數(shù)據(jù)放回df中,然后再排序
迪士尼真是吸金厲害!!!
3.各省各等級(jí)景點(diǎn)數(shù)分析
由于時(shí)間原因,該項(xiàng)分析暫未完成,本想分析下每個(gè)省每個(gè)等級(jí)的景點(diǎn)有多少個(gè),但是由于時(shí)間原因暫未完成,感興趣的同學(xué)可以下載源碼自己試試 ,就當(dāng)課后作業(yè)叭~
4.景點(diǎn)銷量熱力圖分析
之前我們也做過(guò)很多熱力圖,都是用的pyecharts庫(kù),今天我們來(lái)點(diǎn)不一樣 的,我們使用百度地圖開(kāi)放api(免費(fèi))做一個(gè)熱力圖,你首先要做的就是申請(qǐng)一個(gè)百度地圖開(kāi)放平臺(tái)的應(yīng)用,操作很簡(jiǎn)單,如何申請(qǐng)可以 直接百度或者看看這篇文章:https://jingyan.baidu.com/article/363872eccda8286e4aa16f4e.html
需要注意的是:在申請(qǐng)應(yīng)用的時(shí)候類型一定要選瀏覽器
然后你就可以下載一個(gè)百度熱力圖的demo的html,在html中把a(bǔ)k碼換成自己的。
換完ak碼就要換json數(shù)據(jù)了,我們先生成和默認(rèn)數(shù)據(jù)一樣格式的json數(shù)據(jù),然后再替換掉
最后來(lái)看看效果叭,動(dòng)態(tài)地圖支持放大縮小,可仔細(xì)查看各省、市、區(qū)景點(diǎn)熱力圖
5.推薦景點(diǎn)分析
應(yīng)該推薦怎樣的景點(diǎn)呢?豬哥認(rèn)為是:高評(píng)分、銷量少、價(jià)格便宜。
推薦系數(shù)和評(píng)分成正比,和銷量、價(jià)格成反比,所以豬哥設(shè)計(jì)了一個(gè)最簡(jiǎn)單的算法:
瞎推薦系數(shù)=評(píng)分/(銷量?jī)r(jià)格) * 1000
來(lái)看看這個(gè)簡(jiǎn)易的推薦算法得出的結(jié)果
可以看到在這個(gè)瞎推薦TOP20中國(guó)外景點(diǎn)很多(尤其是日本),確實(shí)國(guó)內(nèi)到國(guó)慶了哪里其實(shí)人都是挺多的!
如果你覺(jué)得我設(shè)計(jì)的推薦算法太low了,可以自己思考下如何設(shè)計(jì)更合理,然后自己動(dòng)手調(diào)試,期待看到不一樣的結(jié)果!