旅行是调节心情的有效方式。越来越多的上班族和学生期待利用假期时间出去玩,开阔眼界,缓解压力。然而,真正放假的时候,很多人都会被“去哪儿”这个问题搞得一头雾水。六月是旅游的好时节,期间还有端午小长假。让我们学习如何使用python来安排自己的旅行计划。一、数据获取近年来,兼顾经济与休闲的自助游逐渐成为年轻人出行的首选。在这里推荐一个我个人比较喜欢的旅游网站——马蜂窝。这次通过分析“驴友”来规划自己的行程,第一步当然是抓取网站数据1.分析目标网页为了获取大家的出行信息,我们进入“伙伴关系”板块网站查看一个月内的旅行计划,可以看到url并没有随着页面的变化而变化。初步判断网页是通过js加载的。如果要爬取,首先要找到真实的url和返回的数据格式。经过一番尝试,我们成功找到了请求返回的真实url和key参数。这里返回的数据是json格式,其中包含一段html文本。2、确定要爬取的内容在正式开始爬取数据之前,我们首先要确定需要爬取哪些数据。行程列表页清楚地显示了目的地、行程介绍、发起人ID和性别(呵呵)。虽然这些信息非常有参考价值,但是如果我们能够获取到更多的信息,对于我们的行程规划无疑会更有帮助,所以还是要到详情页去看看。可以看到在详情页面,有出发时间、行程时长、出发地点等详细说明,另外还有注册的同伴。这个数据在很大程度上可以反映出小伙伴们的出行意愿,一定要记下来。3.官方爬取数据的大致思路是在index页面爬取每条行程的始发者和详情页url,然后进入详情页抓取出发时间,历史,目的地,出发城市,预计人数people,applicants等,将每个行程的index页数据和详情页数据合并存储为行程的完整数据。下面是爬虫程序的总入口:payload参数:flag决定行程的排序方式,可选值为1、2、3,分别代表“comingsoon”、“***release”,和“受欢迎的伙伴”;offset表示当前页码默认从0开始;middid表示行程目的地,不确定目的地值为0;timeFlage表示出发时间,值为3表示选择一个月内的行程。get_info()方法:爬取每个页面的行程信息并翻页,如果获取不到有效信息,则表示爬取结束。数据存储:由于数据量不大,可以先存储在一个dataframe数据结构中,然后一次性写入csv文件。2.数据清洗我们来看看得到的数据长什么样子。我们可以看到每条数据中都有很多干扰信息:我们只想要“出发时间”栏中的日期数据;“NumberofApplicants”一栏我们要的就是数字,不要多余的修饰等;“部分旅行”计划涵盖多个目的地,这对我们的旅行目的地分析非常不利。所以,首先要对得到的数据进行清洗,为正式的数据分析打下基础。1、标准格式首先清洗经过时间、预计人数、报名人数(女)、报名人数(男)的数据,只保留数字部分;其次,获取出发日期和出发地点的相关数据,从“:”和前面的内容中获取。得益于pandas.Series.str方法,我们可以非常简单的完成上述工作。函数如下:only_num(self,col_list):去除数据的非数字部分。no_colon(self,col_list):去掉":"和数据前面的内容。2.拆分目的地前面说了,一个行程中多个目的地会干扰我们的分析。这里的解决方案是拆分目标数据。将一列数据拆分为X列(X为行程包含的目的地个数),同样使用pandas.Series.str方法,代码如下:3.数据分析现在我们可以分析数据,找出6月出游Regular,为了方便观察,这里使用pyecharts进行可视化。1.男女比例首先分析出游计划中参与人员的性别,利用dataframe的sum()和groupby().count()方法可以轻松获取行程发布者的性别分布和参与者:从图中可以看出,发起人以女性居多,约占总数的60%,而参与者则恰恰相反,男性的比例约为60%。估计还是女同胞比较会细心规划行程,而男同胞多半是“偷懒”~2。出发时间这里我们先使用dataframe的groupby()方法,以“出行时间”为关键词对数据进行分组,统计每天的出行次数和参与人数,然后绘制折线图。从结果来看,6月15日和16日是6月份的出行高峰期(此时刚好开始端午假期),有端午出行计划的朋友记得提前做好准备。其他峰值也出现在周末。看来喜欢自助游的朋友大多是上班族(或者大学生)。3.目的地选择首先分析行程发布数据,先将数据中的所有目的地添加到一个列表中(包括重复数据),然后使用collections中的Counter()方法统计每个目的地出现的频率,**映射。图中列出了几个出现频率较高的目的地,颜色条越长代表出现频率越高。稍加注意就会发现,人们更喜欢商业化程度相对较低的地区,比如拉萨、新疆!其实作为一个自由职业者,我也更喜欢更原始、更纯净的风景,确实会对平复心情有更好的效果。如果你有旅行计划,又不知道要去哪里,不妨从以上目的出发进行选择。4、参会人员情况如何?首先,统计每个目的地注册的男性和女性人数,分别存入两个dict,分别取参加人数最多的10个目的地,最后合并两组数据,去重。……然后我们会惊奇地发现,虽然两个序列中的具体排名不尽相同,但男性和女性最想去的前10个目的地却一模一样。但是,每个地点的男女人数还是相差很大。如果您想进行性接触,也许下图会有所帮助。
