许多行业受天气影响较大。如果知道某地区的历史天气状况,就可以给销售数据赋予更多内涵,给我们今天判断问题做出更好的参考。本章将以陕西省主要城市为例,讲解如何通过Power BI构建爬虫抓取历史天气数据。本案例的数据形式也是网页数据中最简单的一种——表格,读者通过学习可以制作如图所示的天气报告。
一、 分析URL结构
1. 确定城市列表
我们分析的是陕西省主要城市的天气,因此首先要找到该省的城市列表在网站的哪个页面。然后,需要确定每个城市的链接和页面内容有什么相同之处和不同之处,并找到其中的规律。
(1)确定城市列表
打开天气预报的“历史天气”栏目,可以看到陕西省的城市列表,如图所示。
(2)确定城市链接
打开以上列表中的任意城市界面,可以看到页面内容为西安市各年度历史天气列表,URL有西安的拼音“xian”字样,由此我们可以确定每个城市的链接规律。
2.确定单月URL
确定了单个城市的规律后,需要把规律进行进一步深挖到具体时间端。单击上图中的任意月份链接,进入单月天气,可以看到:
由此可以判断,各个城市的历史天气有两个变量:城市拼音及年月。变化这两个因子即可得到各个城市各个月份每天的日期状况。
贴士
当抓取天气预报信息时,分析URL结构的思路与分析历史天气URL的思路相同,历史天气用来回顾过去,天气预报信息也可进行抓取,应用于受天气影响的行业报告中。
二、 构建爬虫主体
由上一节我们确定了不同城市、不同日期的网页页面规律。由此可知,我们建立一个城市列表及一个年月日期列表,将这两个列表设置为变量参数,并将这两个参数引入URL,即可抓取多个城市、多个月份的天气数据。
1.建立城市列表
城市列表可以通过导入Excel文件建立,当更新Excel文件时,在Power BI中刷新即可得到最新城市数据。但这样会导致Power BI有一个外置文件,显得很烦琐。此处介绍一种直接在Power BI内部新建城市列表的方法。
(1)输入数据
在“开始”选项卡下,选择“输入数据”,在第一列输入“西安”,单击下方的星号即可新增一行输入下一个城市,单击右侧的星号即可新增一列输入拼音,如图所示。
贴士
可以手工输入数据,当外部有数据源时,也可直接将数据源中的数据复制到图2.5所示表格中。
(2)更改标题及名称
双击“列1”、“列2”,可将标题更改为“城市名称”和“拼音”,在左下方可将表格名称进行变更,如图所示。变更完成后单击“编辑”按钮进入下一步,添加日期。
2.建立日期列表
日期列表同样可以使用外部Excel文件新建,但也会面临烦琐的问题。不同于城市列表,日期涉及范围可能非常大,导致有非常多的列,手工输入并不高效。通过M函数我们可以快速高效地生成指定日期段的每一个日期。
(1)添加开始日期和结束日期
通过添加自定义列,添加需要提取数据的时间段。下图所示为添加开始日期,类似地,结束日期可添加自定义列#date(2018,6,30)。
添加后的结果如下图所示。
贴士
首次搭建时建议缩小数据范围,先以较小的数据量进行测试,后续再对范围进行变更。
(2)添加每一天
按照下图所示添加设定日期段的每一天,注意在提取时需要用Number.From将日期转换为数值。提取完成后,再将格式变更为日期。
然后将List展开,得到如下图所示的结果。
(3)转换日期格式
年月日日期格式并不是URL中的形式,可通过添加自定义列,使用Date.ToText对格式进行转换,如图所示。
(4)添加年、月列
按照下图所示的路径分别添加年、月列,以备后期筛选使用。
(5)删除重复项
要想删除“开始日期”、“结束日期”、“日期段”这些中间字段,可选中整张表,然后单击“删除行”→“删除重复项”,如下图所示。
这样,每个城市就保留了唯一月份值。下图显示了西安市的最终列表。注意检查“拼音”与“年月”字段的格式,URL要求这两个字段是文本格式的。
删除重复项 删除重复项后的结果3. 城市、日期参数引入URL
城市列表和日期列表有了,下一步是使这两个列表与URL发生关联,将一个固定的URL转换为动态URL。通过自定义列可以快速实现这种关联,并提取指定城市和日期对应网页的天气数据。
(1)新建自定义列
将URL的城市及年月部分替换为查询中的城市拼音及年月列表,并使用Web.Page和Web.Contents提取网页内容,如图所示。
Web信息提取自定义列如果过程中提示隐私信息,按下图进行相应设置即可。
隐私提示(2)将URL列展开
展开新建的URL列,如图所示,只选择“Data”和“Source”,Source只选择“Table”。
(3)展开Data
展开“Data”列,四列全部选中,如图所示。
(4)删除多余内容
选中日期列,通过筛选去掉标题、空白等多余的行,只保留日期,并手动更改“Column1”等字样,如图所示。
删除多余内容(5)最高气温最低气温拆分
要将最高气温和最低气温用“/”隔开,可按照下图所示方式,用分隔符进行拆分。
拆分气温列拆分后用替换的方式将摄氏度符号去掉,并将气温格式调整为数值。
贴士
替换不仅可以用来替换正常的值,而且当数据源中有一些错误显示时,可在“替换值”下拉列表中选择步骤,“替换错误”,将错误显示为0值或空值,以便后面的操作继续进行。
通过以上步骤,爬虫主体即构建完成,我们获取了2017年1月1日到2018年6月30日的全部数据。关闭并应用后即可进行图表制作。
三、制作可视化报告
本章全部使用内置的可视化图表完成报告制作。使用不同形式的切片器切换城市和月份,查看对应城市、月份的天气走势;使用折线图进行气温时间趋势上的展示;使用矩阵查看具体明细。
1. 隐藏不需要的字段
当字段太多时,会影响字段选择效率,可切换到数据视图,将不需要的字段隐藏。
隐藏后报表视图将不会显示该字段,如图所示。
2. 制作城市和月份切片器
将城市名称设置为切片器字段,并将方向设置为水平。将月份设置为另外一个切片器字段,将方向设置为垂直。
城市切片器设置 月份切片器设置3.设置最高气温走势两年对比
选择折线图,轴为“日期”,图例为“年”,值为“最高气温。注意日期层级结构选择“日”。
4. 设置当月气温走势
选择折线图,轴为“日期”,值为“最低气温”和“最高气温”。
需要注意将当月气温年份在视觉级筛选器中进行如下图设置。
5.设置气温明细矩阵
通过矩阵对两年气温、风向、天气状况明细进行对比,将行设置为“日期”,列为“年份”,值为“最低气温”、“最高气温”、“天气状况”和“风力风向”。这样,日期按纵向排列,时间按横向排列,可以方便对比两年的不同状况。通过以上操作即完成了全部动态报告的制作。
矩阵设置四、总结
通过本章学习,我们顺利抓取了陕西省各城市一年半的天气数据:
以上内容选自《Power BI商业数据分析项目实战》本书涉及销售、货品、财务、人力资源等众多岗位,用19个案例,让你成为Power BI高手。该书配有演示数据源及案例下载,并全程录制视频。