大家好,在上一期内容,我介绍了如何通过Excel的Power Query关注获取省份、城市的疫情数据,大家也觉得非常的方便!同时也收到了一些粉丝的反馈,表示自己的M语言不是很熟悉,希望我能帮忙写好代码,直接批量获取省市数据。
所以本文的主要目的,就是满足大家的这一需求,以方便大家及时地关注和分析疫情数据,支持省份和城市喔~
一、省份数据批量获取代码
以下就直接上代码了,下文接着再讲代码如何使用
let
location =(x)=>Json.Document(Web.Contents("https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province="&Uri.EscapeDataString(x)))[data],
Source = Excel.CurrentWorkbook(){[Name="省份表"]}[Content],
GetDataColumn=Table.AddColumn(Source, "data", each location([省份])),
ExpandedData1 = Table.ExpandListColumn(GetDataColumn, "data"),
ExpandedData2 = Table.ExpandRecordColumn(ExpandedData1,"data", {"date", "confirm", "dead", "heal", "confirm_add"}, {"日期", "累计确诊", "死亡", "治愈", "新增确诊"}),
ChangedType = Table.TransformColumnTypes(ExpandedData2,{{"日期", type date}, {"省份", type text}, {"累计确诊", Int64.Type}, {"死亡", Int64.Type}, {"治愈", Int64.Type}, {"新增确诊", Int64.Type}}),
FilteredRows = Table.SelectRows(ChangedType, let latest = List.Max(ChangedType[日期]) in each [日期] < latest)
in
FilteredRows
简要说明:第2行定义了一个自定义函数,然后在[省份表]中循环每行调用,就能获取list了,再把list扩展开来,再把record扩展就得到结果了,最后我做了个筛选,筛选截至昨天的数据(因为各地公布数据的时间不一致,当天的数据暂不采用;如果你确实需要页面中的实时数据,请把代码最后一行(第10行)的 “FilteredRows”,改成“ChangedType”即可)
二、城市数据批量获取代码
以下就直接上代码了,下文接着再讲代码如何使用。
let
location =(province,city)=>Json.Document(Web.Contents("https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province="&Uri.EscapeDataString(province)&"&city="&Uri.EscapeDataString(city)))[data],
Source = Excel.CurrentWorkbook(){[Name="城市表"]}[Content],
GetDataColumn=Table.AddColumn(Source, "data", each location([省份],[城市])),
ExpandedData1 = Table.ExpandListColumn(GetDataColumn, "data"),
ExpandedData2 = Table.ExpandRecordColumn(ExpandedData1,"data", {"date", "confirm", "dead", "heal", "confirm_add"}, {"日期", "累计确诊", "死亡", "治愈", "新增确诊"}),
ChangedType = Table.TransformColumnTypes(ExpandedData2,{{"日期", type date}, {"省份", type text}, {"累计确诊", Int64.Type}, {"死亡", Int64.Type}, {"治愈", Int64.Type}, {"新增确诊", Int64.Type}}),
FilteredRows = Table.SelectRows(ChangedType, let latest = List.Max(ChangedType[日期]) in each [日期] < latest)
in
FilteredRows
简要说明:第2行定义了一个自定义函数,然后在[城市表]中循环每行调用,就能获取list了,再把list扩展开来,再把record扩展就得到结果了,最后我做了个筛选,筛选截至昨天的数据(因为各地公布数据的时间不一致,当天的数据暂不采用;如果你需要页面中的实时数据,请把代码最后一行(第10行)的 “FilteredRows”,改成“ChangedType”即可)
三、代码使用方法
以下以省份的代码为例,演示具体的操作过程(城市的代码使用方法相同)
Step1:先建立一个省份表/城市表。
① 省份及城市均使用简称即可,具体可参考腾讯疫情页面的名称进行匹配https://news.qq.com/zt2020/page/feiyan.htm(以下名称供大家参考,有时可能会有名称的调整,如有问题请自行核对并调整匹配)
② 以下2个表格,必须都要转换成Table的格式(选中表中任一单元格→按Ctrl+T→勾选数据包含标题→确定),并进行规范的命名(选中表中任一单元格→顶部菜单点“设计”→左侧 [表名称] 处填写表格的名称,请分别填写是“省份表”、“城市表”,以便与代码对应,否则无法匹配!)。
Step2:启动Power Query编辑器(需要 Excel 2016以上),并新建一个空白查询
Step3:在打开的【高级编辑器】中粘贴代码,然后点击[完成],你就能看到有数据进来了~
最后一步,当然就是直接点击PQ界面的左上角【关闭并上载】,数据就会加载到新建的工作表中了~
仅以上三步即可成功使用代码,并且你只需要操作一次,第二天你想看最新的数据,只需要选中工作表中的结果表格,然后右键选择【刷新】即可把表格刷新,新数据就会自动进来了,这是非常方便的操作~
同理,城市的数据,也是照着以上步骤操作一次即可~ 如果你以上操作遇到问题,也可以直接下载我做好的模板,请在后台回复【疫情数据】即可获取下载地址。
总 结
为什么PQ能获取到网络的数据?首先是因为PQ支持各种数据来源,最重要的是它能方便地解析JSON文件,把从网站返回来的JSON文件转成我们常用的二维数据表。但是在这里,我并不建议大家花太多时间到M代码中,因为对很多人来说,这往往是投入与产出不太成正比,我们主要掌握PQ界面中的手工操作就ok了。
想学习体系化报表的设计技能?
如果你想提升自己的技能,学习非常实用的报表设计方法,欢迎你参加我的课程,只要你有函数基础,我就能带你学习【体系化】、【自动化】、【人性化】的高级分析报表设计方法。目前该课程已在网易云课堂中上线,课程入口在文末,识别二维码即可进入~
以下是课程的介绍:
网友评论