专栏首页快学Python用Python制作可视化大屏,特简单!

用Python制作可视化大屏,特简单!

人生苦短,快学Python!

经常有小伙伴问,如何制作数据可视化大屏?

今天将手把手带你爬取奥运会相关信息,并利用可视化大屏为你展示奥运详情。让一个没关注过奥运会的朋友,也能够秒懂奥运会。

1、项目背景

奥运会刚刚过去,你是否已经看过2020东京奥运会呢?

2、奥运会相关信息爬取

  • 爬取字段: 国家、国家ID、排名、金牌数、银牌数、铜牌数、奖牌总数、项目名、运动员、获奖类型、获奖时间;
  • 爬取说明: 基于两个接口的数据爬取【json格式的数据】,直接采用键值对的方式获取相关数据;
  • 使用工具: Pandas+requests

本文是基于两个接口的数据爬取,相对容易的多。

# 这个链接主要展示:各国的金银铜牌及其总数!
https://app-sc.miguvideo.com/vms-livedata/olympic-medal/total-table/15/110000004609

# 这个链接主要展示:每个参赛队员的参赛项目和获得的奖牌情况!
https://app-sc.miguvideo.com/vms-livedata/olympic-medal/total-table/15/110000004609

① 导入相关库

import requests
import pandas as pd
from pprint import pprint

requests库用于发起网页请求,获取网页中的源代码;

pandas库用于存储和读取获取到的信息;

pprint库是漂亮的打印,对于json格式的数据,能够很好的展示结构,方便我们解析;

② 爬虫讲解

url = 'https://app-sc.miguvideo.com/vms-livedata/olympic-medal/total-table/15/110000004609'
data = requests.get(url).json()
pprint(data)

三行代码就可以获取到网页的源代码,利用pprint库,可以清晰的展示json结构,对于我们解析数据很有帮助。

从图中可以很清晰地看到,我们要的数据,都存在于body键下面的allMedalData键中,allMedalData键的值是一个列表,里面有很多字典组成的键值对信息,就是我们要爬取的数据。

直接利用键获取对应的值信息,代码如下:

df1 = pd.DataFrame()
for info in data1['body']['allMedalData']:
    name = info['countryName']
    name_id = info['countryId']
    rank = info['rank']
    gold = info['goldMedalNum']
    silver = info['silverMedalNum']
    bronze = info['bronzeMedalNum']
    total = info['totalMedalNum']
    # 组织数据
    orangized_data = [[name,name_id,rank,gold,silver,bronze,total]]
    # 然后追加df
    df1 = df1.append(orangized_data)
df1.columns = ['名称', 'ID', '排名', '金牌', '银牌', '铜牌', '奖牌总数']
df1

结果如下:

对于另外一个网页,我们采取同样的方式。

url = 'https://app-sc.miguvideo.com/vms-livedata/olympic-medal/detail-total/15/110000004609'
data2 = requests.get(url).json()
pprint(data2)

结果如下:

是不是此时感觉结构更清楚了?

df2 = pd.DataFrame()
for info in data2['body']['medalTableDetail']:
    english_name = info['countryName']
    name_id = info['countryId']
    award_time = info['awardTime']
    item_name = info['bigItemName']
    sports_name = info['sportsName']
    medal_type = info['medalType']
    # 组织数据
    orangized_data = [[english_name,name_id,award_time,item_name,sports_name,medal_type]]
    # 然后追加df
    df2 = df2.append(orangized_data)
df2.columns = ['英文缩写', 'ID', '获奖时间', '项目名', '运动员', '金牌类型']
df2

结果如下:

3、数据预处理

对于爬取到的数据,往往是有问题的,我们需要提前预处理一下,方便后续做可视化展示。

① 数据拼接

对我们共有三个表格,分别存储着不同的信息。我们需要对其进行合适的拼接,方便最后可视化。

表格df1表示各国奖牌数,数据是这样的:

表格df3表示国家名中英文对照表,数据是这样的:

利用上述两张表,我们可以左连接,将英文名称添加到df1表上。

df4 = pd.merge(df1,df3,on="名称",how="left")
df4.head(10)

最终效果如下:

表格df5表示运动项目获奖详情,数据是这样的:

此时,我们又可以将df4和df5做一个左连接,将这两张表合成一张大表,就可以得到不同国家不同项目获得的奖牌数。

df6 = pd.merge(df4,df5,on="名称",how="left")
df6.head(10)

最终效果如下:

② 关于金牌类型的说明

上面得到的表df6,其实还不是最后的表,因为上述表中金牌类型是数字1、2、3,但是我们需要的是金牌、银牌、铜牌。因此,我们自己再定义一个df7。

x = {"获奖名次":["金牌","银牌","铜牌"],"金牌类型":[1,2,3]}
df7 = pd.DataFrame(x)
df7

效果如下:

因此,我们拿df6与自己构造得到的df7再做一个左连接,就可以的到最后完整的表了。

df8 = pd.merge(df6,df7,on="名称",how="left")
df8.head(10)

最终效果如下:

③ 中英文名映射转换

由于使用pyecharts绘制世界地图时,名称必须是英文的,所以我们需要将这里的中文名称映射为英文名称。于是我在网上找到了下面这个文件:

我们要做的就是将它与表格中的数据,做个映射转换。先把它转换为一个Excel文件吧,方便我们以后直接使用。

with open("国家名中英文对照表.txt","r",encoding="utf-8") as f:
    x = f.read()

df3 = pd.DataFrame()
for i in x.split("\n"):
    x = i.split(":")[0].strip()
    y = i.split(":")[1].strip()
    orangined_data = [[x,y]]
    df3 = df3.append(orangined_data)
df3.columns = ["名称","英文名称"]
df3.to_excel("国家名中英文对照表.xlsx",index=None)

然后,在和上述的df2表格做一个左连接即可。

df4 = pd.merge(df2,df3,on="名称",how="left")
df4

结果如下:

4、可视化展示

关于可视化部分,使用的是pyecharts库。这部分一共分以下8个主题:

  • ① 2020东京奥运会各国奖牌分布图;
  • ② 2020东京奥运会奖牌榜详情;
  • ③ 2020东京奥运会奖牌榜总数前十名;
  • ④ 2020东京奥运会金牌榜总数前十名;
  • ⑤ 2020东京奥运会中国各项目获奖详情;
  • ⑥ 中国选手每日获得奖牌数;
  • ⑦ 中国选手每日获得金牌数;
  • ⑧ 中国选手夺金详细数据;

① 2020东京奥运会各国金牌分布图

② 2020东京奥运会奖牌榜详情

③ 2020东京奥运会奖牌榜总数前十名

④ 2020东京奥运会金牌榜总数前十名

⑤ 2020东京奥运会中国各项目获奖详情

⑥ 中国选手每日获得奖牌数

⑦ 中国选手每日获得金牌数

⑧ 中国选手夺金详细数据

⑨ 组合为可视化大屏

说明: 这里就不做结果分析了,因为通过上图,相信大家应该能够很清晰的了解到2020东京奥运会,哪怕你没看过。

本文分享自微信公众号 - 快学Python(kxpython),作者:黄伟呢

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何用Python,制作疫情可视化大屏?

    在3月初,小F写了一篇可视化教程的推文,其中提到了几个疫情的可视化大屏,视觉效果十分酷炫。

    小F
  • Python制作可视化大屏全流程!(代码分享)

    承接上文《用Python制作可视化大屏,特简单!》,不再赘述数据爬取和数据预处理。

    Python研究者
  • Python制作可视化大屏全流程!(代码分享)

    前两天发了一篇《用Python制作可视化大屏,特简单!》,留言区非常火爆,发现大家都对可视化部分非常感兴趣。

    快学Python
  • 从零开发可视化大屏制作平台

    几个月前开源的H5页面制作平台H5-Dooring 收到了很多热心的反馈和交流, 顺着笔者之前的规划, 我们又做了一款可视化大屏编辑器V6.Dooring. 接...

    徐小夕
  • 用 pyecharts 制作数据可视化大屏之数据地图

    前段时间,给大家分享过 20 个炫酷的数据可视化大屏,源代码都是基于 echarts 的,于是我产生了用 Python 来实现数据可视化大屏的想法。

    张俊红
  • 手把手教你如何制作可视化大屏!

    在我们生活和工作中,经常会看到可视化大屏,主要用于展示一些汇总信息,那如何制作一个酷炫的可视化大屏呢?

    落落落洛克
  • 使用Python快速制作可视化报表

    pyecharts是一个用于生成Echarts图标的类库。实际就是Echarts与Python的对接。

    py3study
  • 文末赠书:手把手教你如何制作可视化大屏!

    在我们生活和工作中,经常会看到可视化大屏,主要用于展示一些汇总信息,那如何制作一个酷炫的可视化大屏呢?

    胡哥有话说
  • 使用pyecharts1.7进行简单的可视化大全

    近期,又有接触到pyecharts这个包的使用,后面发现这个曾经好用的包发生了一些变化,为了方便大家的使用,这里整理如下: 绘图风格theme:默认WHITE...

    砸漏
  • 利用Python搭建一个实时监控可视化大屏

    实际上可以将CPU和磁盘信息监控指标分表设置,两者对时间粒度要求是不一样的,减少不需要的资源消耗。后期专门写一篇来聊聊如何搭建数据指标体系。

    张俊红
  • 太酷了,用Python制作足球可视化图表!

    最近不少小伙伴都会熬夜看欧洲杯。今年的欧洲杯相比起往年的欧洲杯来说,可谓是冷门频出,出乎意料。

    小F
  • python plt可视化——打印特殊符号和制作图例代码

    matplotlib在公式书写上面跟latex很相似,接下来我们就特殊符号,上标下标来具体展示一下。

    砸漏
  • Python 的一万种用法:制作 Web 可视化页面

    本次小F给大家介绍一下如何用Python制作一个数据可视化网页,使用到的是Streamlit库,轻松将一个Excel数据文件转换为一个Web页面,提供给所有人在...

    AI科技大本营
  • 使用Python制作疫情数据分析可视化图表(二)

    python小白,在“一心学”公众号学习了一点疫情数据分析可视化的课程,记录下来,供小白参考。

    用户7886150
  • 特征锦囊:怎么简单使用PCA来划分数据且可视化呢?

    我们通过自定义的绘图函数plot,把不同类别的y值进行不同颜色的显示,从而看出在值域上分布的差异。从原始的特征来看,不同类别之间其实界限并不是十分明显,如上图所...

    Sam Gor
  • 特征锦囊:怎么简单使用LDA来划分数据且可视化呢?

    从可视化可以看出做了LDA的数据类别区分度还是比较明显的,而且效果和PCA的差不多,相比原始的还是有很明显的效果。

    Sam Gor
  • 皮克斯动画特效太好,但特效师容易「手抖」,还好Python来帮忙

    一个从事影视后期的pipeline开发者小哥写了篇博客,讲述Python如何被特效电影所「重用」!

    新智元
  • 可视化作品精选,简单的图表配上舒适的配色就可以高大上~

    今天的推文小编推荐几个优秀的可视化作品,而且还都是和数据新闻有关的,大家可以通过其图表选择、颜色搭配等学习到优秀的数据可视化技巧,这次小编主要介绍10幅可视化作...

    DataCharm
  • 如何用最短时间搞定酷炫可视化大屏?这款工具值得一看

    要问当前什么BI工具最热门,肯定非PowerBI莫属,堪比BI界的Python。对于我这种用惯了Tableau来说,确实会眼红PowerBI某些特性。

    永洪数据科学院

扫码关注云+社区

领取腾讯云代金券