精华内容
下载资源
问答
  • 相信很多朋友被PBI颜值吸引而入了坑,迫切想上手,但往往会卡...今天咱们就以随处可见的榜单类数据为例,如何通过PBI来导入网页数据,快速建立属于自己的数据源。一、导入单页数据(无参数)单张网页的数据导入,其实...

    相信很多朋友被PBI颜值吸引而入了坑,迫切想上手,但往往会卡在数据源环节。本公司数据自己没权限,外公司数据可望不可及,而网络社区里提供的练习数据,往往专业性太强,业务逻辑摸不透,分析更是无从下手。

    那有什么办法能方便快捷地找到贴近我们生活的数据吗?

    今天咱们就以随处可见的榜单类数据为例,如何通过PBI来导入网页数据,快速建立属于自己的数据源。


    一、导入单页数据(无参数)

    单张网页的数据导入,其实马世权老师《从Excel到Power BI商业智能数据分析》一书已有过展示(第97页的3.3章节)这里咱们换个网页,重新走一遍流程,温故而知新。

    这里以当当网图书畅销榜为例(一共25页,每页20本书。本节仅针对第一页)。2019年8月畅销榜网址:http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2019-8-1-1

    9dee54466e8c633f72bc77bae894d4c4.png

    1. 获取Web数据

    f59b0d1593f8065933256c972835aea9.png

    2. 复制粘贴网址,确定

    f37cf11b7d9a5799c4ae8038a8498bfd.png

    3.选中-转换

    导航器里出现两张表,很容易就可以判定第一张表就是我们想要的。选中-转换

    8656e181b03482368f640a405a3c5b20.png

    4. 数据导入成功

    根据分析需要,可以在PBI编辑器里作下一步清洗处理(可参见马世权老师《从Excel到Power BI商业智能数据分析》第70页“数据搬运工”章节)

    c5da7b549f32ca79ff29c46881952708.png

    由于网页数据复杂多变,上述步骤三里还会出现大量重复、残缺的表格信息。甚至有时候相同网址,分别用PBI和EXCEL来导入,网页分析结果还有差异。这时就需要耐心仔细,挑选出相对完整的表格数据导入即可。


    二、导入多页数据(仅页码参数)

    刚才我们成功导入了单页数据,也熟悉了一遍流程。显然单页数据量还达不到数据分析的起步要求,那如何把上述榜单的二十五页明细全部导入呢?

    我们在网页的页码链接处前后点几次,观察网址变化就会发现,关键在于网址最后一个数字。http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2019-8-1-1

    d7b3d601718d62b145e4f770cd093d7f.png

    在网页数据导入的所有步骤中,有两个环节最为重要:

    a) 如何判定链接与网址的对应关系。

    b) 如何判定网址中哪些是关键字符串。

    这两个环节,常规网站一般没什么难度,仔细对比就能找到规律。而有些网页就不那么好对付了(尤其像一些财经类网站,基金/股票的排行榜,可以自己去摸索一下),需要用额外工具来解析,这个不是咱们今天讨论的重点,暂且忽略。

    既然找到了关键环节,那问题就简单了。前四个步骤(获取、复制粘贴网址、选中、导入)与导入单页数据相同,不再赘述。我们把已导入的数据表重命名(尽量避免出现诸如表1、查询2、函数3,参数4之类的名称)。

    多页数据导入的思路:

    • 先设定参数。本例固定变化的是页码,因此只1需设置一个页码参数即可;

    • 再来一个自定义函数;

    • 把参数代入函数;

    • 展开函数,得到最终结果。

    f16210ac5d49af79d6689b23e04338d3.png

    1234步骤参照单网页导入,我们从步骤5开始

    5. 创建页码参数

    ea58983cca268b13c7d73d4e76c15bc3.png

    6.插入页码参数

    双击第一步骤“源”后面的小齿轮,打开数据获取界面,切换到“高级”选项。把URL文本的最后一个字符去掉,用刚创建的页码参数代替。

    bba55914f2f26a71ce22a40f3500f318.pngf8604dac3cf9c9d38bb02fb0ad62b5fb.png

    7. 创建自定义函数

    在初始表上单击右键,选择“创建函数”菜单。函数名称随意。

    ab25d21220008ba7f3bef8a3ce7c08d2.png

    8. 创建页码列表

    (目的在于告诉PBI,列表里每项数值都代入页码参数,后续调用函数时就能以此生成25个网址字符串,PBI就会根据这些字符串,去自动链接相关网址)

    1) 新建“空查询”。

    2) 在公式栏里输入“= List.Numbers(1,25,1)”,PBI将生成一个等差数列。其中第一个“1”为起始数字,第二个“25”为尾数,第三个“1”是差额。

    95fe15eed11dd42648471a155ba4ec48.png

    3) 在新列表的标题栏里右键“到表”,将列表转换为表(公式栏里的“Table.FromList”是自动生成的)。

    7037b8a04e3c5ef1cf423628ff00814d.png

    4095c75bb5103fc0400f0ef614598ef7.png

    4) 将查询名和列表标题栏重命名,方便后续操作辨识。

    5)  将该列数据类型转换为“文本”(对应上述步骤5的参数类型),数字便自动靠左对齐。

    555f5da0984269fa9a76b27ffa9b87fa.png

    9. 调用自定义函数

    1) 仍然选中“页码列表”,点击“添加列-调用自定义函数”,按下图所示设定。

    2) 忽略“隐私级别”。

    4dd572bb644f31ca50f2d81ffb823b68.png

    3) 经过数据加载,结果终于显现。25个页码,每行对应了一个Table,每个Table里都有相应的二十条数据。随意点击一个Table就能看到。

    1e25fd1d137caac7712051db66997cd0.png

    10. 展开函数

    点击新列右上角符号,即可展开所有25行共计500条数据。如果大家觉得“Column”太多容易混淆,那就直接在步骤4把数据先清理好,保留或删除哪几列,重命名并指定数据类型等。

    5e254f216d2e78e3a9eff881c0557e44.png

    5114356cc97f4664c8020aa9e2954818.png

    虽然只有10个步骤,但对初学者来说,可能操作一趟下来还是一头雾水。

    咱们最后再来总结一下。对于多页数据的导入,可以看作中学生列方程式。

    1) 先设未知数x(第五步创建参数)

    2) 再列方程y=…x…(第七步创建自定义函数)

    3) 把x可能出现的值全部写出来(第八步创建页码列表)

    4) 把每个x的值代入方程,算出y值(第九步调用自定义函数)

    真正的掌握离不开大量练习,只有实操才能进步。除了当当网,再给大家几个网址来练习:

    豆瓣电影榜单:https://movie.douban.com/top250   

    豆瓣音乐榜单:https://music.douban.com/top250       

    豆瓣读书榜单:https://book.douban.com/top250    

    全球影史票房榜:https://www.boxofficemojo.com/alltime/world/

    国内居民消费价格指数(CPI):http://data.eastmoney.com/cjsj/cpi.html


    三、导入更多数据(包含两个以上参数)

    两个或两个以上参数的情况,原理也一样。本节将提供两套方案,建议初学朋友把两种方法多操练几次。熟悉的目的不是死搬硬套,而是今后遇到陌生情况,能多一条思路。很多从未碰到过的棘手问题,能开辟新思路的毕竟是少数大咖,咱们普通人一般都是把旧思路老经验多结合几次,基本也能解决。

    这回我们拿起点中文网的“原创风云榜”来做演示。

    https://www.qidian.com/rank/yuepiao?style=2&page=1

    68ff8bdb3c3816128daa5d12e4f40305.png

    仔细观察这个页面,单就“原创风云榜”就有四个参数:年、月、分类、页码

    本节我们只考虑“分类”和“页码”两者组合,年月参数留给各位自己演练实操。只要熟悉了两个参数的导入流程,参数再加几个也没多大难度。

    分类共有十四个,每个分类有两页。为了便于对比,我把十四个分类的URL都复制到一起:

    43881cddcbe9db3bd3188899aa8a6ffb.png

    这样一看就很清楚了,URL中关于页码的信息是“page=”,分类的信息是“chn=”。既然参数确定了,那二话不说,动手干起来。

    实操啦,跟进脚步,同志们!

    方案一

    1. 获取Web数据

    693f4e4b11d9adb4d4eafc6b7a65218a.png

    2.  复制粘贴网址,确定

    781a95621f4a5f371622134d891f3e8a.png

    3. 选取表格,点击“转换数据”

    813d63750f778e3171d2b5bda6b1a30d.png

    4. 数据导入成功后处理

    稍微做一些整理:删除最后一列“操作”,把第二列“类别”中的竖括号“「」”替换掉,“表1”重命名为“初始表”。

    357388e35bab445b9f71286db930be68.png

    5. 创建页码参数和分类参数(参数“类型”必须设为“文本”)

    b104b6917f024abda17691dccd66b130.png

    6. 插入URL字符串

    回到初始表,将两个参数插入URL字符串(双击第一步骤“源”后面的小齿轮,打开数据获取界面,切换到“高级”选项。把URL文本中分类和页码数值,用刚创建的两个参数代替)

    4af2ca903966009f18472fbc682118d1.png

    45603a9e2bc72a363bc290271b203b93.png

    7.创建自定义函数

    在初始表上单击右键,选择“创建函数”菜单。函数名称随意。

    99784913ecae0879e68498e29094b323.png

    8. 创建页码列表和分类列表

    (与第二章节相同,不再重复截图)新建“空查询”,页码列表公式“= List.Numbers(1,2,1)”,分类列表公式“= List.Numbers(1,22,1)”。本步骤有三个动作千万别忘:查询转换到表;数据类型转换成文本;标题栏重命名“PageList”和“Catalog”。

    这儿有个问题。十四个分类数值明明不连续,为什么我在这儿要用公式来生成连续数值。

    其实我就是想偷懒。对于参数的不连续数值,可以用“输入数据”来一个个手动输入。我嫌麻烦,不如自动生成连续数值,在后续选取步骤中,把无用数值前复选框的勾去掉即可。

    2a9b04aa7332852088da20b27863c029.png

    9.  调用自定义函数

    (本步骤是重点,多参数与单参数的最大不同之处,就在这一步)

    如果按第二章调用函数的方法,就会发现问题所在。由于存在2个参数,因此调用自定义函数过程中,必须要同时安置两个参数。但无论在“页码列表”还是“分类列表”上调用,对话框里都只出现一个参数选项,这该如何是好?

    286aad9a240e5bde2759656b48be12e5.png

    回顾前面提到的单参数思路,我们把参数当作x,自定义函数看作y,把x的每一个实例数值代入函数,y就能得到一个URL字符串。本章的双参数要实现同样效果,是不是就等同于实现双参数的笛卡尔积呢?

    cfb14c421b93a9d5788272e8ec379b47.png

    思路有了,那就动手。在“分类列表”上添加自定义列,列公式为“=页码列表”。展开自定义列,得到了我们想要的结果。这时就可以把无用的分类去掉。

    5c05257b7afd597a68a3f2e2be9a0ab5.png

    67b5d808bfdbafb61ca9f045fa8ff308.png

    c3fc4889b8d9ff1413e07da9ef712be2.png

    10.  展开函数

    此时再在“分类列表”上调用自定义函数,便水到渠成。

    b3ede9b04da5f141c919f34b13c85502.png

    至此,双参数网页数据的导入操作就完成了。有兴趣的朋友可以自己加入年和月参数继续折腾。

    2593408d40594ebe94ee111cc67a6522.png

    方案二

    第二种方案,不用事先导入数据,不用预先设置参数,也不用自定义函数。仅需几步DAX便能实现,简单粗暴。

    1. 创建分类列表
    此处截图从简,详情可以参考前面章节。

    1) 新建“空查询”

    2) 输入公式“= List.Numbers(1,22,1)”

    3) 转换查询到表

    4) 数据类型设为“文本”

    5) 标题栏重命名为“分类”

    8cc344c365acd91efc8b58a5c00e3ecf.png

    2.  自定义列“起始页码”


    前面我们说过,分类和页码列表的目的是为了实现分类和列表数值的笛卡尔积。
    为了实现这个效果,就需要先添加两个临时列。自定义列“起始页码”,将该列数据类型设为“整数”。

    1b66dc20fd49a3363c129251da5ebeb3.png

    3. 自定义列“结尾页码”

    为什么要添加两个临时列?因为我们想通过M语言的Number.From公式,来实现起始页到结尾页的自动填充。同理,在日期场景中,也可以用该公式来填充起始到结束日期之间的每一天。

    d0cd12326eca512b1ad5567964128fe3.png

    4. 自定义列“页码”


    这里公式“={Number.From([起始页码])..Number.From([结尾页码])}”不是DAX,而是M语言,注意大小写敏感。
    公式里的列名称,只需在右侧“可用列”里双击即可,不需手动输入。

    b0a0973d4f63bdc94dfc7bb4d0989e33.png

    5. 展开“页码”列,点击“扩展到新行”

    fe5ae6203619705ea325cc08da1f2255.png

    6. 完成笛卡尔积

    将“页码”列数据类型改为“整数”;将“分类”列无关数值去掉勾选;删除“起始页码”和“结尾页码”两个临时列。笛卡尔积就完成了。

    dc60080ca104e37b6561d10ca9367c15.png

    7. 自定义列“URL”

    这里我们也用了M语言,注意大小写敏感。公式:

    Web.Page(Web.Contents("https://www.qidian.com/rank/yuepiao?style=2&chn="&[分类]&"&page="&[页码]))

    b4a79c8202cf5a9f46fb410eab60f710.png

    8. 展开URL列,仅保留Data勾选。确定后发现还有Table在里面,那就继续展开。第二次展开便得到了最终结果,稍做清理,便大功告成。

    a02ee912bdfa0119d5ac0c0e8e45f880.png

    377f116778d1f8f8900cb76df7b539f3.png

    7a02c05323277e2bc9bf746a1d3f23ae.png

    是不是眼前一亮?明明八个常规步骤就能解决的问题,非要在前面章节唠叨那么多,小编脑子撞墙了吗?

    好吧,你们人多嘴多拳头硬,小编嘴软手软叽叽软,拼不过你们。不过我还是要辩解一番,或许在PBI导入网页数据这块,确实光凭几句DAX和M公式就能快速实现要求,但咱们的目的是什么?前面也讲过,是为了多条思路嘛,预设参数函数这种操作,摸透性格捋顺脾气,或许其他场景就能派上大用处。


    作者介绍:

    0f45416bbc42e601937bb124725b1247.png

    1772068442df46b7387c618f5ecf5303.png

    展开全文
  • 作者: 东军相信很多朋友被PBI颜值吸引而入了坑,迫切想上手,但...今天咱们就以随处可见的榜单类数据为例,如何通过PBI来导入网页数据,快速建立属于自己的数据源。一、导入单页数据(无参数)单张网页的数据导入,其...

    作者: 东军

    相信很多朋友被PBI颜值吸引而入了坑,迫切想上手,但往往会卡在数据源环节。本公司数据自己没权限,外公司数据可望不可及,而网络社区里提供的练习数据,往往专业性太强,业务逻辑摸不透,分析更是无从下手。

    那有什么办法能方便快捷地找到贴近我们生活的数据吗?

    今天咱们就以随处可见的榜单类数据为例,如何通过PBI来导入网页数据,快速建立属于自己的数据源。

    一、导入单页数据(无参数)

    单张网页的数据导入,其实马世权老师《从Excel到Power BI商业智能数据分析》一书已有过展示(第97页的3.3章节)。这里咱们换个网页,重新走一遍流程,温故而知新。

    1. 获取Web数据

    2. 复制粘贴网址,确定

    3.选中-转换

    导航器里出现两张表,很容易就可以判定第一张表就是我们想要的。选中-转换

    4. 数据导入成功

    根据分析需要,可以在PBI编辑器里作下一步清洗处理(可参见马世权老师《从Excel到Power BI商业智能数据分析》第70页“数据搬运工”章节)

    由于网页数据复杂多变,上述步骤三里还会出现大量重复、残缺的表格信息。甚至有时候相同网址,分别用PBI和EXCEL来导入,网页分析结果还有差异。这时就需要耐心仔细,挑选出相对完整的表格数据导入即可。

    二、导入多页数据(仅页码参数)

    刚才我们成功导入了单页数据,也熟悉了一遍流程。显然单页数据量还达不到数据分析的起步要求,那如何把上述榜单的二十五页明细全部导入呢?

    在网页数据导入的所有步骤中,有两个环节最为重要:

    a) 如何判定链接与网址的对应关系。

    b) 如何判定网址中哪些是关键字符串。

    这两个环节,常规网站一般没什么难度,仔细对比就能找到规律。而有些网页就不那么好对付了(尤其像一些财经类网站,基金/股票的排行榜,可以自己去摸索一下),需要用额外工具来解析,这个不是咱们今天讨论的重点,暂且忽略。

    既然找到了关键环节,那问题就简单了。前四个步骤(获取、复制粘贴网址、选中、导入)与导入单页数据相同,不再赘述。我们把已导入的数据表重命名(尽量避免出现诸如表1、查询2、函数3,参数4之类的名称)。

    多页数据导入的思路:先设定参数。

    本例固定变化的是页码,因此只1需设置一个页码参数即可;

    再来一个自定义函数;

    把参数代入函数;

    展开函数,得到最终结果。

    1234步骤参照单网页导入,我们从步骤5开始

    5. 创建页码参数

    6.插入页码参数

    双击第一步骤“源”后面的小齿轮,打开数据获取界面,切换到“高级”选项。把URL文本的最后一个字符去掉,用刚创建的页码参数代替。

    7. 创建自定义函数

    在初始表上单击右键,选择“创建函数”菜单。函数名称随意。

    8. 创建页码列表

    (目的在于告诉PBI,列表里每项数值都代入页码参数,后续调用函数时就能以此生成25个网址字符串,PBI就会根据这些字符串,去自动链接相关网址)

    1) 新建“空查询”。

    2) 在公式栏里输入“= List.Numbers(1,25,1)”,PBI将生成一个等差数列。其中第一个“1”为起始数字,第二个“25”为尾数,第三个“1”是差额。

    3) 在新列表的标题栏里右键“到表”,将列表转换为表(公式栏里的“Table.FromList”是自动生成的)。

    4) 将查询名和列表标题栏重命名,方便后续操作辨识。

    5) 将该列数据类型转换为“文本”(对应上述步骤5的参数类型),数字便自动靠左对齐。

    9. 调用自定义函数

    1) 仍然选中“页码列表”,点击“添加列-调用自定义函数”,按下图所示设定。

    2) 忽略“隐私级别”。

    3) 经过数据加载,结果终于显现。25个页码,每行对应了一个Table,每个Table里都有相应的二十条数据。随意点击一个Table就能看到。

    10. 展开函数

    点击新列右上角符号,即可展开所有25行共计500条数据。如果大家觉得“Column”太多容易混淆,那就直接在步骤4把数据先清理好,保留或删除哪几列,重命名并指定数据类型等。

    虽然只有10个步骤,但对初学者来说,可能操作一趟下来还是一头雾水。

    咱们最后再来总结一下。对于多页数据的导入,可以看作中学生列方程式。

    1) 先设未知数x(第五步创建参数)

    2) 再列方程y=…x…(第七步创建自定义函数)

    3) 把x可能出现的值全部写出来(第八步创建页码列表)

    4) 把每个x的值代入方程,算出y值(第九步调用自定义函数)

    真正的掌握离不开大量练习,只有实操才能进步。除了当当网,再给大家几个网址来练习:

    三、导入更多数据(包含两个以上参数)

    两个或两个以上参数的情况,原理也一样。本节将提供两套方案,建议初学朋友把两种方法多操练几次。熟悉的目的不是死搬硬套,而是今后遇到陌生情况,能多一条思路。很多从未碰到过的棘手问题,能开辟新思路的毕竟是少数大咖,咱们普通人一般都是把旧思路老经验多结合几次,基本也能解决。

    这回我们拿起点中文网的“原创风云榜”来做演示。

    仔细观察这个页面,单就“原创风云榜”就有四个参数:年、月、分类、页码。

    本节我们只考虑“分类”和“页码”两者组合,年月参数留给各位自己演练实操。只要熟悉了两个参数的导入流程,参数再加几个也没多大难度。

    分类共有十四个,每个分类有两页。为了便于对比,我把十四个分类的URL都复制到一起:

    这样一看就很清楚了,URL中关于页码的信息是“page=”,分类的信息是“chn=”。既然参数确定了,那二话不说,动手干起来。

    实操啦,跟进脚步,同志们!

    方案一

    1. 获取Web数据

    2. 复制粘贴网址,确定

    3. 选取表格,点击“转换数据”

    4. 数据导入成功后处理

    稍微做一些整理:删除最后一列“操作”,把第二列“类别”中的竖括号“「」”替换掉,“表1”重命名为“初始表”。

    5. 创建页码参数和分类参数

    (参数“类型”必须设为“文本”)

    6. 插入URL字符串

    回到初始表,将两个参数插入URL字符串(双击第一步骤“源”后面的小齿轮,打开数据获取界面,切换到“高级”选项。把URL文本中分类和页码数值,用刚创建的两个参数代替)

    7.创建自定义函数

    在初始表上单击右键,选择“创建函数”菜单。函数名称随意。

    8. 创建页码列表和分类列表

    (与第二章节相同,不再重复截图)新建“空查询”,页码列表公式“= List.Numbers(1,2,1)”,分类列表公式“= List.Numbers(1,22,1)”。本步骤有三个动作千万别忘:查询转换到表;数据类型转换成文本;标题栏重命名“PageList”和“Catalog”。

    这儿有个问题。十四个分类数值明明不连续,为什么我在这儿要用公式来生成连续数值。

    其实我就是想偷懒。对于参数的不连续数值,可以用“输入数据”来一个个手动输入。我嫌麻烦,不如自动生成连续数值,在后续选取步骤中,把无用数值前复选框的勾去掉即可。

    9. 调用自定义函数

    (本步骤是重点,多参数与单参数的最大不同之处,就在这一步)

    如果按第二章调用函数的方法,就会发现问题所在。由于存在2个参数,因此调用自定义函数过程中,必须要同时安置两个参数。但无论在“页码列表”还是“分类列表”上调用,对话框里都只出现一个参数选项,这该如何是好?

    回顾前面提到的单参数思路,我们把参数当作x,自定义函数看作y,把x的每一个实例数值代入函数,y就能得到一个URL字符串。本章的双参数要实现同样效果,是不是就等同于实现双参数的笛卡尔积呢?

    思路有了,那就动手。在“分类列表”上添加自定义列,列公式为“=页码列表”。展开自定义列,得到了我们想要的结果。这时就可以把无用的分类去掉。

    10. 展开函数

    此时再在“分类列表”上调用自定义函数,便水到渠成。

    至此,双参数网页数据的导入操作就完成了。有兴趣的朋友可以自己加入年和月参数继续折腾。

    方案二

    第二种方案,不用事先导入数据,不用预先设置参数,也不用自定义函数。仅需几步DAX便能实现,简单粗暴。

    1. 创建分类列表

    此处截图从简,详情可以参考前面章节。

    1) 新建“空查询”

    2) 输入公式“= List.Numbers(1,22,1)”

    3) 转换查询到表

    4) 数据类型设为“文本”

    5) 标题栏重命名为“分类”

    2. 自定义列“起始页码”

    前面我们说过,分类和页码列表的目的是为了实现分类和列表数值的笛卡尔积。为了实现这个效果,就需要先添加两个临时列。自定义列“起始页码”,将该列数据类型设为“整数”。

    3. 自定义列“结尾页码”

    为什么要添加两个临时列?因为我们想通过M语言的Number.From公式,来实现起始页到结尾页的自动填充。同理,在日期场景中,也可以用该公式来填充起始到结束日期之间的每一天。

    4. 自定义列“页码”

    这里公式“={Number.From([起始页码])..Number.From([结尾页码])}”不是DAX,而是M语言,注意大小写敏感。公式里的列名称,只需在右侧“可用列”里双击即可,不需手动输入。

    5. 展开“页码”列,点击“扩展到新行”

    6. 完成笛卡尔积

    将“页码”列数据类型改为“整数”;将“分类”列无关数值去掉勾选;删除“起始页码”和“结尾页码”两个临时列。笛卡尔积就完成了。

    7. 自定义列“URL”

    这里我们也用了M语言,注意大小写敏感。公式:

    8. 展开URL列,仅保留Data勾选。确定后发现还有Table在里面,那就继续展开。第二次展开便得到了最终结果,稍做清理,便大功告成。

    是不是眼前一亮?明明八个常规步骤就能解决的问题,非要在前面章节唠叨那么多,小编脑子撞墙了吗?

    好吧,你们人多嘴多拳头硬,小编嘴软手软叽叽软,拼不过你们。不过我还是要辩解一番,或许在PBI导入网页数据这块,确实光凭几句DAX和M公式就能快速实现要求,但咱们的目的是什么?前面也讲过,是为了多条思路嘛,预设参数函数这种操作,摸透性格捋顺脾气,或许其他场景就能派上大用处。

    作者介绍:

    展开全文
  • 作者: 东军相信很多朋友被PBI颜值吸引而入了坑,迫切想上手,...今天咱们就以随处可见的榜单类数据为例,如何通过PBI来导入网页数据,快速建立属于自己的数据源。一、导入单页数据(无参数)单张网页的数据导入,其...

    222559c0fa0ad3e81bf0e9ffe748da34.png

    作者: 东军

    相信很多朋友被PBI颜值吸引而入了坑,迫切想上手,但往往会卡在数据源环节。本公司数据自己没权限,外公司数据可望不可及,而网络社区里提供的练习数据,往往专业性太强,业务逻辑摸不透,分析更是无从下手。

    那有什么办法能方便快捷地找到贴近我们生活的数据吗?

    今天咱们就以随处可见的榜单类数据为例,如何通过PBI来导入网页数据,快速建立属于自己的数据源。


    一、导入单页数据(无参数)

    单张网页的数据导入,其实马世权老师《从Excel到Power BI商业智能数据分析》一书已有过展示(第97页的3.3章节)。这里咱们换个网页,重新走一遍流程,温故而知新。

    这里以当当网图书畅销榜为例(一共25页,每页20本书。本节仅针对第一页)。2019年8月畅销榜网址:http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2019-8-1-1

    8ba479412033412cb469ac0207787fcb.png

    1. 获取Web数据

    d7644cfd34dcb882e59c596f64a6f3a2.png

    2. 复制粘贴网址,确定

    05ebf7f6890e91377aa17af43f3c41bc.png

    3.选中-转换

    导航器里出现两张表,很容易就可以判定第一张表就是我们想要的。选中-转换

    47f3de73eb375ff49743a171e06817ec.png

    4. 数据导入成功

    根据分析需要,可以在PBI编辑器里作下一步清洗处理(可参见马世权老师《从Excel到Power BI商业智能数据分析》第70页“数据搬运工”章节)

    86c7a28ad8179880ee91c1d239dc92ae.png

    由于网页数据复杂多变,上述步骤三里还会出现大量重复、残缺的表格信息。甚至有时候相同网址,分别用PBI和EXCEL来导入,网页分析结果还有差异。这时就需要耐心仔细,挑选出相对完整的表格数据导入即可。


    二、导入多页数据(仅页码参数)

    刚才我们成功导入了单页数据,也熟悉了一遍流程。显然单页数据量还达不到数据分析的起步要求,那如何把上述榜单的二十五页明细全部导入呢?

    我们在网页的页码链接处前后点几次,观察网址变化就会发现,关键在于网址最后一个数字。http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2019-8-1-1

    90ba5733f0e0f0323ceaeebc16da4183.png

    在网页数据导入的所有步骤中,有两个环节最为重要:

    a) 如何判定链接与网址的对应关系。

    b) 如何判定网址中哪些是关键字符串。

    这两个环节,常规网站一般没什么难度,仔细对比就能找到规律。而有些网页就不那么好对付了(尤其像一些财经类网站,基金/股票的排行榜,可以自己去摸索一下),需要用额外工具来解析,这个不是咱们今天讨论的重点,暂且忽略。

    既然找到了关键环节,那问题就简单了。前四个步骤(获取、复制粘贴网址、选中、导入)与导入单页数据相同,不再赘述。我们把已导入的数据表重命名(尽量避免出现诸如表1、查询2、函数3,参数4之类的名称)。

    多页数据导入的思路:

    • 先设定参数。
      本例固定变化的是页码,因此只1需设置一个页码参数即可;
    • 再来一个自定义函数;
    • 把参数代入函数;
    • 展开函数,得到最终结果。

    c2a4bef3a24eb899af341a64b3b23081.png

    1234步骤参照单网页导入,我们从步骤5开始

    5. 创建页码参数

    4059d222bd38ee9ba8edf79402f3f0b4.png

    6.插入页码参数


    双击第一步骤“源”后面的小齿轮,打开数据获取界面,切换到“高级”选项。把URL文本的最后一个字符去掉,用刚创建的页码参数代替。

    f88cf1eb69b9d63909700d1419c4df7e.png

    9dc9892b00c81eb5482bbe65e90e510e.png

    7. 创建自定义函数

    在初始表上单击右键,选择“创建函数”菜单。函数名称随意。

    89a5ce5ec7b00e6c39962b89a4f39171.png

    8. 创建页码列表
    (目的在于告诉PBI,列表里每项数值都代入页码参数,后续调用函数时就能以此生成25个网址字符串,PBI就会根据这些字符串,去自动链接相关网址)

    1) 新建“空查询”。

    2) 在公式栏里输入“= List.Numbers(1,25,1)”,PBI将生成一个等差数列。其中第一个“1”为起始数字,第二个“25”为尾数,第三个“1”是差额。

    9d13f9ff4515720f3d507fafb11b2bc4.png

    3) 在新列表的标题栏里右键“到表”,将列表转换为表(公式栏里的“Table.FromList”是自动生成的)。

    d96a57c6b6cc4defff247c660b084ff4.png

    5cbeadf8db311e76bea5d57c0554e38e.png

    4) 将查询名和列表标题栏重命名,方便后续操作辨识。

    5) 将该列数据类型转换为“文本”(对应上述步骤5的参数类型),数字便自动靠左对齐。

    84131cc36141913d8c504ff3f6f7834c.png

    9. 调用自定义函数

    1) 仍然选中“页码列表”,点击“添加列-调用自定义函数”,按下图所示设定。

    2) 忽略“隐私级别”。

    df01ba60440aeaac67d6060a8a2b3d8b.png

    3) 经过数据加载,结果终于显现。25个页码,每行对应了一个Table,每个Table里都有相应的二十条数据。随意点击一个Table就能看到。

    2361b214f9619bd46f76b8bf73583b19.png

    10. 展开函数

    点击新列右上角符号,即可展开所有25行共计500条数据。如果大家觉得“Column”太多容易混淆,那就直接在步骤4把数据先清理好,保留或删除哪几列,重命名并指定数据类型等。

    ae2370b62fe0beba1ac1e2a26d0e2193.png

    e04f679c9c79275d8c4129e79dead27a.png

    虽然只有10个步骤,但对初学者来说,可能操作一趟下来还是一头雾水。

    咱们最后再来总结一下。对于多页数据的导入,可以看作中学生列方程式。

    1) 先设未知数x(第五步创建参数)

    2) 再列方程y=…x…(第七步创建自定义函数)

    3) 把x可能出现的值全部写出来(第八步创建页码列表)

    4) 把每个x的值代入方程,算出y值(第九步调用自定义函数)

    真正的掌握离不开大量练习,只有实操才能进步。除了当当网,再给大家几个网址来练习:

    豆瓣电影榜单:https://movie.douban.com/top250

    豆瓣音乐榜单:https://music.douban.com/top250

    豆瓣读书榜单:https://book.douban.com/top250

    全球影史票房榜:https://www.boxofficemojo.com/alltime/world/

    国内居民消费价格指数(CPI):http://data.eastmoney.com/cjsj/cpi.html


    三、导入更多数据(包含两个以上参数)

    两个或两个以上参数的情况,原理也一样。本节将提供两套方案,建议初学朋友把两种方法多操练几次。熟悉的目的不是死搬硬套,而是今后遇到陌生情况,能多一条思路。很多从未碰到过的棘手问题,能开辟新思路的毕竟是少数大咖,咱们普通人一般都是把旧思路老经验多结合几次,基本也能解决。

    这回我们拿起点中文网的“原创风云榜”来做演示。

    https://www.qidian.com/rank/yuepiao?style=2&page=1

    c703a800441d65600be683ae737856fa.png

    仔细观察这个页面,单就“原创风云榜”就有四个参数:年、月、分类、页码

    本节我们只考虑“分类”和“页码”两者组合,年月参数留给各位自己演练实操。只要熟悉了两个参数的导入流程,参数再加几个也没多大难度。

    分类共有十四个,每个分类有两页。为了便于对比,我把十四个分类的URL都复制到一起:

    ab35ad4b50dafe38f7ccf68358fc82a6.png

    这样一看就很清楚了,URL中关于页码的信息是“page=”,分类的信息是“chn=”。既然参数确定了,那二话不说,动手干起来。

    实操啦,跟进脚步,同志们!

    方案一

    1. 获取Web数据

    59a07d6da8ca742147443b97da2ab2b1.png

    2. 复制粘贴网址,确定

    b1a5871e73ba15915dc4f5cae17e560b.png

    3. 选取表格,点击“转换数据”

    d40875940cd45ef50c7e6ed5eab6b377.png

    4. 数据导入成功后处理

    稍微做一些整理:删除最后一列“操作”,把第二列“类别”中的竖括号“「」”替换掉,“表1”重命名为“初始表”。

    fd6ada60d60c3afdd827973a77860a47.png

    5. 创建页码参数和分类参数
    (参数“类型”必须设为“文本”)

    aadc232867029338c1dabbd7faf95775.png

    6. 插入URL字符串

    回到初始表,将两个参数插入URL字符串(双击第一步骤“源”后面的小齿轮,打开数据获取界面,切换到“高级”选项。把URL文本中分类和页码数值,用刚创建的两个参数代替)

    dd1d56a140b0417cd7c0f629e1a50410.png

    eb69d73cb4545afd617e3ba7aadb43a3.png

    7.创建自定义函数

    在初始表上单击右键,选择“创建函数”菜单。函数名称随意。

    efd88555038886d1c386a1471796b52a.png

    8. 创建页码列表和分类列表

    (与第二章节相同,不再重复截图)新建“空查询”,页码列表公式“= List.Numbers(1,2,1)”,分类列表公式“= List.Numbers(1,22,1)”。本步骤有三个动作千万别忘:查询转换到表;数据类型转换成文本;标题栏重命名“PageList”和“Catalog”。

    这儿有个问题。十四个分类数值明明不连续,为什么我在这儿要用公式来生成连续数值。

    其实我就是想偷懒。对于参数的不连续数值,可以用“输入数据”来一个个手动输入。我嫌麻烦,不如自动生成连续数值,在后续选取步骤中,把无用数值前复选框的勾去掉即可。

    b046161a49f08efc391799a33eea4665.png

    9. 调用自定义函数

    本步骤是重点,多参数与单参数的最大不同之处,就在这一步

    如果按第二章调用函数的方法,就会发现问题所在。由于存在2个参数,因此调用自定义函数过程中,必须要同时安置两个参数。但无论在“页码列表”还是“分类列表”上调用,对话框里都只出现一个参数选项,这该如何是好?

    db5b12f5c70444ed0e86499113372d5b.png

    回顾前面提到的单参数思路,我们把参数当作x,自定义函数看作y,把x的每一个实例数值代入函数,y就能得到一个URL字符串。本章的双参数要实现同样效果,是不是就等同于实现双参数的笛卡尔积呢?

    9cebafa951fcd6fbdae1889b3ebf08c8.png

    思路有了,那就动手。在“分类列表”上添加自定义列,列公式为“=页码列表”。展开自定义列,得到了我们想要的结果。这时就可以把无用的分类去掉。

    0e54f6d89fe80443314b2c45aaba844c.png

    c3aaf12e4e1ce37a1528d150d2ee73d8.png

    87014dd2707da6c62b9d108c28309798.png

    10. 展开函数

    此时再在“分类列表”上调用自定义函数,便水到渠成。

    08128682ee6a18f2d8d7b07ba16bde15.png

    至此,双参数网页数据的导入操作就完成了。有兴趣的朋友可以自己加入年和月参数继续折腾。

    1e40fa1a500200209be3e4621982d178.png

    方案二

    第二种方案,不用事先导入数据,不用预先设置参数,也不用自定义函数。仅需几步DAX便能实现,简单粗暴。

    1. 创建分类列表
    此处截图从简,详情可以参考前面章节。

    1) 新建“空查询”

    2) 输入公式“= List.Numbers(1,22,1)”

    3) 转换查询到表

    4) 数据类型设为“文本”

    5) 标题栏重命名为“分类”

    de5ddbe607a0699202632c80e5c3c8fc.png

    2. 自定义列“起始页码”
    前面我们说过,分类和页码列表的目的是为了实现分类和列表数值的笛卡尔积。为了实现这个效果,就需要先添加两个临时列。自定义列“起始页码”,将该列数据类型设为“整数”。

    1f46c2ba9398142ff36cc7f69e7298ed.png

    3. 自定义列“结尾页码”

    为什么要添加两个临时列?因为我们想通过M语言的Number.From公式,来实现起始页到结尾页的自动填充。同理,在日期场景中,也可以用该公式来填充起始到结束日期之间的每一天。

    e11a9e1fa30323e5f59969a1c35d08d3.png

    4. 自定义列“页码”


    这里公式“={Number.From([起始页码])..Number.From([结尾页码])}”不是DAX,而是M语言,注意大小写敏感。公式里的列名称,只需在右侧“可用列”里双击即可,不需手动输入。

    b1f9418ffa71ca501212bbb2e5b6ddd8.png

    5. 展开“页码”列,点击“扩展到新行”

    76faba48ceb98d467e568e3503ce97c0.png

    6. 完成笛卡尔积

    将“页码”列数据类型改为“整数”;将“分类”列无关数值去掉勾选;删除“起始页码”和“结尾页码”两个临时列。笛卡尔积就完成了。

    90117317550e5bc9faf144af189cb0af.png

    7. 自定义列“URL”

    这里我们也用了M语言,注意大小写敏感。公式:

    Web.Page(Web.Contents("https://www.qidian.com/rank/yuepiao?style=2&chn="&[分类]&"&page="&[页码]))

    b5bb1b4e798f6148beea65e91941ad1a.png

    8. 展开URL列,仅保留Data勾选。确定后发现还有Table在里面,那就继续展开。第二次展开便得到了最终结果,稍做清理,便大功告成。

    3696bf1c5cc6da76d548aa20f54c70de.png

    7c2491aa3e4ce8ca7e3835f8b1b73bef.png

    df2a222df8988e5a538a67fe5c480a03.png

    是不是眼前一亮?明明八个常规步骤就能解决的问题,非要在前面章节唠叨那么多,小编脑子撞墙了吗?

    好吧,你们人多嘴多拳头硬,小编嘴软手软叽叽软,拼不过你们。不过我还是要辩解一番,或许在PBI导入网页数据这块,确实光凭几句DAX和M公式就能快速实现要求,但咱们的目的是什么?前面也讲过,是为了多条思路嘛,预设参数函数这种操作,摸透性格捋顺脾气,或许其他场景就能派上大用处。


    作者介绍:

    e7dae2fabbb0e9bbfaffb2d27dc1fded.png

    6477ef9480a4a82fff03accce5562219.png
    展开全文
  • R语言 导入网页数据

    千次阅读 2020-04-07 18:16:03
    读取网络数据 网络数据正在逐渐增多。R语言可以进行Web数据抓取,R有若干用于抓取网络数据的包 quantmod包 quantmod包是R平台用于金融建模的扩展包,主要功能有:从多个数据源获取历史数据、绘制金融数据图表、在...

    读取网络数据

    网络数据正在逐渐增多。R语言可以进行Web数据抓取,R有若干用于抓取网络数据的包

    quantmod包

    • quantmod包是R平台用于金融建模的扩展包,主要功能有:从多个数据源获取历史数据、绘制金融数据图表、在金融数据图表中添加技术指标、计算不同时间尺度的收益率、金融时间序列分析、金融模型拟合与计算等等
      在这里插入图片描述

    XML包

    • XML包包含了一些抓取网络数据的常用函数。对于网络数据,最简单的形式是网络上的表格数据,这种数据通过复制粘贴可以直接粘贴到Excel中。在R中我们也可以很容易将其直接抓取成数据框(readHTMLTable函数
      在这里插入图片描述

    Rcurl包

    • RCurl包提供了由R到libcurl库的接口,从而实现HTTP的一些功能。例如,从服务器下载文件、保持链接、上传文件、采用二进制格式读取、句柄重定向、密码认证等等
      在这里插入图片描述

    示例:

    install.packages("XML")
    library(XML)
    tables <- readHTMLTable('http://nba.sports.163.com/stat/',header=T,stringAsFactor=FALSE)
    tables
    

    运行结果:
    在这里插入图片描述

    展开全文
  • 1. 首先我们打开一个Excel的新工作表。...3. 通过百度可以搜索一些...5. 单击“确定”,等待数据进行连接,而后可以在导航器选择“Web视图”看到原始网页数据。6. 我们可以在“表视图”这里选择左侧的标签出现的“Table...
  • 数据没有用,我们需要的是数据所反映出来的东西。增长率,排名,占比等。而这些结果是通过分析数据...下面介绍将网页中的表格数据导入到 Google Sheet 中的操作。 当我尝试去 Google 相关方法的时候,对于这个搜...
  • 昨晚老师在Windows上演示,Excel中导入外部数据(数据-自网站),惊呆了一众小伙伴。 回家后试了试自己的Mac WPS 表格,...以课堂上汽车销量网页数据为准 :http://www.515fa.com/che_23956.html ①新建Word,粘贴网
  • Excel数据获取相信对于数据统计分析人员来说是一件家常便饭的事情。...下面我们就来学习一下,如何在Excel中快速的导入网页数据。第一步:我们需要新建一个空白的Excel文件,然后打开空白的Exce...
  • 下一页url地址不会变,是js函数控制的,我怎么循环读取所有页数据
  • 导入所有表:[code]sqoop import-all-tables –connect jdbc:mysql://ip:port/dbName --username userName --password passWord -m 1 --hive-import;导入一个表:[code]sqoop import --connect jdbc:mysql://ip:port...
  • 如果想要知道如何安装solr,集成IKAnalyzer中文分词器,批量导入数据库数据,java使用参照以下本博主博文:安装solr集成IKAnalyzer中文分词器solr使用浏览器批量导入数据库中数据solr在java中的案例1.依赖包下载链接...
  • 当我们需要引用网站上一些公开数据的时候,会遇到两种情形:一...其实网页上很多数据,后台都是以表格形式存储的,我们可以借助 Excel 的导入功能从网页上爬取数据表,而且步骤非常简单。案例:以下是随机找的一个网...
  • 一直都想做一个网页的excel导出功能,最近抽时间研究了下,使用urllib2与BeautifulSoup及xlwt模块实现urllib2这个模块之前有用过,关于...如下是部分视图代码:首先使用urlopen解析网页数据urlfile = urllib2.url...
  • 网页数据导入excel共分三步: 第一步:建立EXCEL.JS文件 ====文件的代码========= var idTmr = ""; function copy(tabid) { var oControlRange = document.body.createControlRange(); oControlRange....
  • Java实现从网页上传导入excel数据到数据库

    万次阅读 多人点赞 2018-10-31 00:55:57
    项目中通过excel往数据库批量导入的功能颇为常见,所以今天整理出来一份简单的例子,为了以后方便使用,同时也为大家实现功能作为一个参考,该框架采用SSM,可以结合自身业务修改即可使用 Spring配置文件加载解析...
  • ES在之前的博客已有介绍,提供很多接口,本文介绍如何使用python批量导入。ES官网上有较多说明文档,仔细研究并结合搜索引擎应该不难使用。先给代码#coding=utf-8from datetime import datetimefrom elasticsearch ...
  • 戳蓝字 “Office随身学” 关注我们哦 ~ - 序言 -财务人员在分析财务数据的时候,不仅需要对本公司内部的财务数据...有些网页上的数据都是以表格的形式存在的,通过 Excel 可以直接从网站上获取这些数据。 - 操作步骤...
  • 有时候我们需要将网页里的数据导入到Excel表格里,具体该如何操作呢?步骤一:首先我们要先找到网页,然后把网页内需要导入Excel表格的内容Ctrl+C复制:步骤二:打开记事本,Ctrl+V粘贴刚才网页里复制的数据:步骤三...
  • 三种方法导入word,研究了好久解决的问题,网页数据(包括图片)导入word文档,提供了三种方法导入word,前两种方法无图片,最后一种方法有图片
  • Python爬取网页数据导入表格

    千次阅读 2018-10-30 13:47:00
    我想将http://wsb.wuhan.gov.cn/html/friendly/201602/t20160203_45633.shtml这个网页里的表格数据用python爬取出来,并导入CSV表格文件,但是总是出错,求大神教我,代码如下 import requests import time import...
  • 今天老祝和大家一起学习一个导入网页数据的技巧。很多时候,咱们需要将网页中的数据导入到Excel里做进一步的分析汇总,比如每天的股市行情、外汇牌价、开奖信息等等。接下来咱们演示一下,从下面这个网页中导入中国...
  • 装mysql的时候根据网上的步骤默认编码选择的 gbk ,但是网页一般不用 gbk ,现在麻烦了 解决方法是指定网页编码为 gbk :<meta http-equiv="Content-Type" content="text/html; charset=gbk" /> 然后在 php ...
  • 有时候我们需要将网页里的数据导入到Excel表格里,具体该如何操作呢?步骤一:首先我们要先找到网页,然后把网页内需要导入Excel表格的内容Ctrl+C复制:步骤二:打开记事本,Ctrl+V粘贴刚才网页里复制的数据:步骤三...
  • 网页中的表格数据快速导入到Excel软件中,相比纯粹的复制粘贴好用许多
  • 3.导入文件和xlsx 。 4.获取xlsx表的对象并存入数据库 (用于php读取解析excel文件,用来操作Office Excel 文档的一个PHP类库,它基于微软的Openxml标准和PHP语言。可以使用它来读取、写入不同格式的电子表格。)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,613
精华内容 1,045
关键字:

导入网页数据