本文编辑:刘子艳
技术总编:戴 雯 五一黄金周马上就要来了,与家人朋友外出旅行正合适不过了。可是没灵感?不知道去哪才好?那下面我们就前往去哪儿网(网址为https://www.qunar.com/),看看在出游的黄金月,哪些城市、哪些景点、哪些旅游主题最吸引人!为你的下一次旅行提前做好计划攻略吧~~~我们来到去哪儿网的境内门票页面(网址为https://piao.qunar.com/),找到【全国热门城市】板块,如下图所示。尝试点击各个热门城市,比如“北京”,可以发现每个热门城市是一个单独的页面,其url精简后为: https://piao.qunar.com/ticket/list.htm?keyword=%E5%8C%97%E4%BA%AC 其中keyword 参数的值为“北京”的url编码。 进入到具体的城市页面,比如“北京”,我们所需要的景点名称name、景点价格price、景点门票月销量sales、景点主题theme都在此页面上,如下图所示。进一步发现,各城市中不同的景点主题也有不同url,比如“北京”的“文化古迹”的精简url为:https://piao.qunar.com/ticket/list.htm?keyword=%E5%8C%97%E4%BA%AC&subject=%E6%96%87%E5%8C%96%E5%8F%A4%E8%BF%B9&page=1 其中subject 参数的值为“文化古迹”的url编码。 这样,爬虫的思路就非常清晰了: - 构造各个城市具体的景点主题url,使用循环翻页爬取;
爬虫程序换汤不换药,限于篇幅,这里不再介绍了,感兴趣的朋友可以在Stata and Python数据分析公众号后台对话框内回复关键词“ 去哪儿 ”,您将获得: 以三月为例,去哪儿旅行线上门票热门城市销售情况如下图所示。三亚、北京、上海遥遥领先,占14个热门旅游城市3月门票销量的65.3%。三亚和北京作为传统旅游大省,门票销量近60000人次,根据去哪儿网展示的门票价格计算,三亚、北京本月门票收入分别为人民币875万元和330万元,考虑到游客带来的交通、住宿、饮食消费,旅游拉动经济果然名不虚传! 上图的Stata作图程序如下:
*pic1 use HotCities,clear //HotCities.dta是爬取后合并的文件,包括14个热门城市的所有景点信息 gen TotalSale = (sales * price)/10000 collapse (sum) sales TotalSale,by(city) replace TotalSale= int(TotalSale) gsort -sales encode city,gen(x_axis) twoway (bar sales x_axis, /// xtick(1(1)14) xlabel(1 2 3 4 5 6 7 8 9 10 11 12 13 14, valuelabel) /// xtitle("cities") fcolor("purple%40") ytitle("人次",axis(1) placement(north))) /// (scatter TotalSale x_axis, /// yaxis(2) m(T) mc(midblue) lc(midblue) sort(x_axis) lwidth(0.5) c(l) mlabel("TotalSale") mlabcolor(black) /// ytick(0(200)800,axis(2)) ylabel(0(200)800,axis(2)) ytitle("万元",axis(2) placement(north)) legend(on)) graph export pic1.jpg,as(png) replace
既然如此,我这就去三亚!——别着急,让我们再来看看热门城市的代表旅游项目,跑去三亚找游乐园可不是一个明智的选择哦~不出所料,三亚的旅游项目中,自然风光占据了一大半(海滨、海岛、阳光和沙滩,妙不可言呀~);北京和西安作为华夏古都,能让你在朱红的宫墙、深深的庭院里感受历史的车轮、深刻体会中华文化的深远悠长;被称为魔都的上海竟以上海迪士尼乐园“一己之力”跃居前三。令人意外的是,网红城市杭州、成都和武汉的成绩并不亮眼,看来还需要着力培养自己独特的旅游文化和旅游项目才行。 *pic2 use HotCities,clear collapse (sum) sales,by(city theme) gsort city -sales bysort city: keep if _n == 1 gsort -sales replace theme = "迪士尼乐园等活动" in 3 gen x_axis = _n //生成x轴的数值
*为不同景点主题生成不同的颜色 gen colors = "bluishgray" replace colors = "midgreen" in 2 replace colors = "cranberry" in 3 replace colors = "gold" in 4 replace colors = "sand" in 5 levelsof theme,local(the) local a = 1 foreach i in `the'{ dis "`i'" local color = colors[`a'] local bar_`a' = `"bar sales x_axis if theme == "`i'",fcolor("`color'")"' local a = `a' + 1 }
*作图 twoway (`bar_1') (`bar_2') (`bar_3') (`bar_4') (`bar_5' /// xtick(1(1)14) xtitle("cities") /// xlabel(1 "三亚" 2 "北京" 3 "上海" 4 "西安" 5 "苏州" 6 "杭州" 7 "成都" 8 "武汉" 9 "重庆" 10 "深圳" 11 "广州" 12 "厦门" 13 "青岛" 14 "大连") /// legend(label(1 "城市观光") label(2 "文化古迹") label(3 "游乐场") label(4 "自然风光") label(5 "迪士尼乐园") position("1"))) graph export pic2.png,as(png) replace
令人激动的时刻到了,到底哪些景点最受人欢迎呢?如下图所示,分别列出了14个热门旅游城市门票销量最高的景点。一眼望去,上海迪士尼乐园“居高临下”、睥睨众景点,看来大家都是“迪士尼在逃公主”呢 ^_^ 。北京故宫、西安秦始皇陵兵马俑高居【文化古迹】之首,谁不想去一次凝聚千年皇权的故宫、看一看横扫六合、一统天下的兵马俑呢。
*pic3 use HotCities,clear gsort city -sales by city: keep if _n == 1 gen x_axis = _n *生成值标签 forvalues i = 1/14{ local y = sales[`i'] + 500 local x = x_axis[`i'] local na = name[`i'] local text_`i' = `"`y' `x' "`na'""' } *作图 twoway bar sales x_axis, /// fcolor("midgreen") xtick(1(1)14) xtitle("cities") /// xlabel(1 "三亚" 2 "上海" 3 "北京" 4 "厦门" 5 "大连" 6 "广州" 7 "成都" 8 "杭州" 9 "武汉" 10 "深圳" 11 "苏州" 12 "西安" 13 "重庆" 14 "青岛") /// text(`text_1' `text_2' `text_3' `text_4' `text_5' `text_6' `text_7' `text_8' `text_9' `text_10' `text_11' `text_12' `text_13' `text_14') graph export pic3.png,as(png) replace
三月是赏花的时节,春回大地、万物复苏,缩了一整个冬天的脖子终于感受到了阳光的温度。人同此心,游客们除了参观【文化古迹】外,外出游览自然风光、携家同游【公园】成了不二的选择,樱花、桃花、迎春花万花齐放,翠鸟、蓝鸟、山雀鸟“声入人心”。
*pic4 use HotCities,clear collapse (sum) sales,by("theme") gsort -sales replace theme = "迪士尼乐园等" in 8 //原主题为“活动”,含义模糊,故替换为占比达90%的“迪士尼乐园” encode theme,gen(x_axis)
gen temp = _n levelsof temp, local(xlabel_num) twoway (bar sales x_axis if sales<10000,fcolor("orange%50")) /// (bar sales x_axis if sales>10000,fcolor("red%80") /// xlabel(`"`xlabel_num'"', valuelabel angle(90)) /// legend(label(1 "<10000人次") label(2 ">=10000人次"))) graph export pic4.png,as(png) replace
废话说了这么多,我到底应该去哪儿来一场说走就走的旅行呢?我们的答案是:想潜水,去蜈支洲岛;想参观文化古迹,去北京故宫;想泡一场呼噜呼噜的温泉,去华清宫;想玩大摆锤等游乐项目,去成都国色天乡;迪士尼公主在线找家,请去上海迪士尼乐园;海滨海岛和春暖花开,西岛是绝配;踏春采花去南山文化旅游区;想以不运动、不走路、能躺不站的形式观光请前往东方明珠塔,城市观光,坐在游览车上参观城市。
*pic5 use HotCities,clear collapse (sum) sales, by("theme" "name") gsort theme -sales by theme: keep if _n == 1 gsort -sales
encode theme,gen(x_axis) gen temp = _n levelsof temp,local(xlabel_num) *生成值标签 forvalues i = 1/32{ local y = sales[`i'] + 500 local x = x_axis[`i'] local na = name[`i'] local text_`i' = `"`y' `x' "`na'""' } *避免繁杂,只显示人次大于2000的值标签 local text_content = "" forvalues i = 1/13{ local text_content = `"`text_content'"' + " " + `"`text_`i''"' } *作图 twoway (bar sales x_axis if sales<2000,fcolor("green%50")) /// (bar sales x_axis if sales > 2000,fcolor("blue%50") /// xlabel(`"`xlabel_num'"',valuelabel angle(90)) /// text(`text_content') legend(label(1 "<2000人次") label(2 ">2000人次")))
graph export pic5.png,as(png) replace
跟我走吧~天亮就出发~
|