用Power BI展示中国摩天大楼

Power BI是微软最新推出的自助式商务智能解决方案,借助Office 365线上线下完美体验,无需任何开发经验就可以自己做出炫目的商务报表,非码农逆袭程序猿的时代终于到来了!这里,我们借助Power BI,来观察一下中国摩天大楼的历程,顺便分析一下与宏观经济之间的关系。

最终效果图如下:

china-skycrapter-analytics-with-power-bi-01

下面让我们看看制作过程。

首先需要通过Power Query准备数据。如果你对Power Query不太了解,可以参考用Power Query轻松导入数据一文。很幸运,维基百科上的中华人民共和国摩天大楼提供了已建成以及在建的中国摩天大楼信息,我们只需要导入并且合并,并加以分析即可。

在Excel中打开Power Query、从Web,输入http://zh.wikipedia.org/wiki/中国大陆摩天大楼,不一会儿导航器面板会显示“中华人民共和国最高摩天大楼排名”以及“兴建中的摩天大楼”等数据源,这就是维基百科网页中的表格了。

首先选择“中华人民共和国最高摩天大楼排名”,这样Power Query就会导入该表格数据。我们需要进行清理一下以便和“兴建中的摩天大楼”合并。原始的“高度”列数据包含米和英尺两个单位,比如:632米(2,073英尺),我们只要把该列用“米”作为分隔词分成两列,保留第一列并更名即可。所有的操作仅仅需要通过鼠标拖拽便可完成。以下是Power Query根据我的操作记录下来的源代码:

let
    Source = Web.Page(Web.Contents("http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86%E6%91%A9%E5%A4%A9%E5%A4%A7%E6%A5%BC")),
    Data0 = Source{0}[Data],
    ChangedType = Table.TransformColumnTypes(Data0,{{"排名", type number}, {"名称", type text}, {"地点", type text}, {"高度", type text}, {"地上楼层", type number}, {"年份", type number}, {"尖顶高度", type text}, {"楼顶高度", type text}, {"备注", type text}}),
    SplitColumnDelimiter = Table.SplitColumn(ChangedType,"高度",Splitter.SplitTextByDelimiter("米"),{"高度.1", "高度.2"}),
    ChangedType1 = Table.TransformColumnTypes(SplitColumnDelimiter,{{"高度.1", type number}, {"高度.2", type text}}),
    RemovedColumns = Table.RemoveColumns(ChangedType1,{"排名", "高度.2", "地上楼层", "尖顶高度", "楼顶高度", "备注"}),
    RenamedColumns = Table.RenameColumns(RemovedColumns,{{"高度.1", "高度"}})
in
    RenamedColumns

同样的,对“兴建中的摩天大楼”也做相应操作。需要注意的是,有些大楼并没有预期竣工年份,保险起见我们可以把那些全部替换成2018年,源代码如下:

let
    Source = Web.Page(Web.Contents("http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86%E6%91%A9%E5%A4%A9%E5%A4%A7%E6%A5%BC")),
    Data1 = Source{1}[Data],
    ChangedType = Table.TransformColumnTypes(Data1,{{"建筑名称", type text}, {"主体高度", type text}, {"竣工年份", type text}, {"地点", type text}}),
    SplitColumnDelimiter = Table.SplitColumn(ChangedType,"主体高度",Splitter.SplitTextByDelimiter("米"),{"主体高度.1", "主体高度.2"}),
    ChangedType1 = Table.TransformColumnTypes(SplitColumnDelimiter,{{"主体高度.1", type number}, {"主体高度.2", type text}}),
    RemovedColumns = Table.RemoveColumns(ChangedType1,{"主体高度.2"}),
    RenamedColumns = Table.RenameColumns(RemovedColumns,{{"主体高度.1", "高度"}, {"竣工年份", "年份"}, {"建筑名称", "名称"}}),
    替换的值 = Table.ReplaceValue(RenamedColumns,"-","2018",Replacer.ReplaceText,{"年份"})
in
    替换的值

有了已建成与兴建中的摩天大楼数据后,需要合并成一个数据集。点选Power Query页中的追加命令,选择以上两个数据集用来合并,然后把年份修改成时间类型即可。

let
    Source = Table.Combine({已建成摩天大樓,興建中的摩天大樓}),
    更改的类型 = Table.TransformColumnTypes(Source,{{"年份", Int64.Type}}),
    已添加自定义 = Table.AddColumn(更改的类型, "时间", each #date([年份], 1, 1)),
    更改的类型1 = Table.TransformColumnTypes(已添加自定义,{{"时间", type date}}),
    删除的列 = Table.RemoveColumns(更改的类型1,{"年份"})
in
    删除的列

最后别忘记把结果加载到数据模型,这样才可以达到互动的可视化效果。

再强调一下,以上操作都是通过鼠标拖拽完成的,程序猿不要看到代码就鸡冻啦!

有了中国摩天大楼的全部数据后,让我们看看如何通过Power Map展现中国高楼的变化吧!Power Map也是Power BI家族中的一员,能够以3D的形式表示地理相关数据以及变化。点击插入页,选择地图,在Power Map编辑器中,做如下设置:

  • 地理信息选地点,其级别为县市,以便让底层的Bing Map找到相应位置。
  • 高度选高度(求和),显示该城市摩天大厦的总高度。
  • 类别选地点,以便让不同城市显示不同颜色。
  • 时间选时间,可以根据时间轴动态地查看中国摩天大厦随着时间的发展。

这样便可以得到前文显示的结果,动画请猛戳youku视频。怎么样,效果还是很有现代感的吧?不难看出,最早香港一枝独秀,1996之后深圳上海奋起直追,接着是重庆、温州、武汉、南京、北京等地遍地开花,到了2015年,深圳、广州和天津将超越香港名列三甲!

为什么研究摩天大楼呢?传统的经济学家往往通过通胀、失业率、GDP等指数来指导投资,如今也会根据尿布疹、裙边等与宏观经济的相关性来预测,摩天大楼指数也是其中之一。1999年,德利佳华的Andrew Lawrence提出一种假设,那就是世界最高建筑总之在经济衰退前期建成。道理也很浅显,那就是良好的经济带来信贷宽松、土地价格飙升以及乐观的预期,往往导致了高楼大厦的大量建设,而建成之时往往是经济增长到顶开始衰退之日。据说Mark Thornton根据这个规律还预测了2007年8月开始的金融危机。

有了Power BI的帮助,很快就可以做出如下的报表:china-skycrapter-analytics-with-power-bi-02

可以看到,2015年竣工的摩天大楼总高度是有史以来最多的,之后便慢慢减少了……难道中国经济也要在2015年衰退么?呵呵,其实我现在并不担心,因为维基百科上数据最多也只有到2018年而已,所以并不足以推断经济衰退。不过为了真切把握未来,而Power BI也是这么给力,相信我每年都会刷新这个报表一下的,你呢?

文章中的Excel文件可以从这里下载。

 



张 琪