项目

本文中的代码是基于notebook写的,可以访问https://www.heywhale.com/mw/project/61015e73aca24600179ec778获取完整notebook.

奖牌榜数据

通过咪咕视频的接口获取奖牌榜单的数据,貌似也没做什么反爬虫,直接就可以获取到数据:

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

数据处理,将json数据转化为dataframe:

df = pd.DataFrame()for item in data['body']['allMedalData']:df = df.append([[item['rank'],item['countryName'],item['goldMedalNum'],item['silverMedalNum'],item['bronzeMedalNum'],item['totalMedalNum']]])
df.columns = ['排名', '国家', '金牌', '银牌', '铜牌', '奖牌']
df = df.reset_index(drop=True)

使用plotly展示榜单前30个国家:

import plotly.graph_objects as go
from plotly.colors import n_colors
import numpy as np
np.random.seed(1)colors = n_colors('rgb(225,255,255)', 'rgb(255,192,203)', 10, colortype='rgb')
fig = go.Figure(data=[go.Table(columnwidth=[20, 80, 80, 80, 80],header=dict(values=["<span style='font-size:16px;color:#fff;font-weight:bold';>{}</span><br>".format(c) for c in df.columns],line_color='darkslategray',fill_color='rgb(255,0,0)',align=['center'],# font=dict(color='white', size=13),height=40),cells=dict(values=df.head(30).T,line_color='darkslategray',fill=dict(color=[colors, 'white']),align=['center'],font_size=13,height=30))])
fig.update_layout(height=1200,title_text="<span style='font-size:20px;color:#0000FF;font-weight:bolder';>2020东京奥运会奖牌榜</span><br><span style='font-size:12px;color:#C0C0C0';>更新时间:{}</span>".format(update_time),
)
fig.show()

运动员数据

  • 2020年东京奥运会全部参赛人员名单数据来自奥委会官网(https://olympics.com/tokyo-2020/olympic-games/zh/results/all-sports/athletes.htm);
  • 整体数据来看,总共206个国家或地区的代表团共11309名选手参赛,比2016年里约奥运会的11180人多出129人,为史上参赛人数最多的一届奥运会;

获取国家简称和项目的中文名称对应表:

# 获取国家简称对应的中文名称
noc = 'https://olympics.com/tokyo-2020/olympic-games/zh/results/all-sports/nocs-list.htm'r = requests.get(noc)
para = r'</li>.*?country="(?P<简称>.*?)">.*?<div class="mx-auto font-weight-bold">(?P<中文名称>.*?)</div>'patterns = re.compile(para)noc_dict = {}
for k, v in patterns.findall(r.text):noc_dict[k] = v# 获取项目简称对应的中文代码
sports = 'https://olympics.com/tokyo-2020/zh/sports/'
r = requests.get(sports)
para = r'<div class="tk-disciplines__picto tk-picto-(.*?)"></div>\s+.*?title">\s+(.*?)\s+'patterns = re.compile(para)
sports_dict = {}
for k, v in patterns.findall(r.text):sports_dict[k.upper()] = v

获取运动员数据

athlete_url = 'https://olympics.com/tokyo-2020/olympic-games/zh/results/all-sports/zzje001a.json'
data = requests.get(athlete_url).json()athletes_df = pd.DataFrame(columns=['姓名', '国家', '项目'])
for item in data['data']:athletes_df = athletes_df.append([{'姓名': item['name'], '国家':noc_dict[item['noc']], '项目':sports_dict[item['dis']]}])athletes_df = athletes_df.reset_index(drop=True)

按国家维度聚合统计:

df_t = athletes_df.groupby(['国家', '项目'])['姓名'].count().reset_index()
df_t.columns = ['国家', '项目', '人数']data = []
country = []
for idx, row in df_t.iterrows():if row['国家'] in country:data[-1]['children'].append(dict(name=row['项目'], value=row['人数']))else:data.append(dict(name=row['国家'], children=[dict(name=row['项目'], value=row['人数'])]))country.append(row['国家'])tree = TreeMap(    init_opts=opts.InitOpts(theme='light',width='1000px',height='600px',# bg_color='rgb(0,0,0)'))
tree.add("参赛人数", data,leaf_depth=1,label_opts=opts.LabelOpts(position="inside", formatter='{b}:{c}名'),levels=[opts.TreeMapLevelsOpts(treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(border_color="#555", border_width=4, gap_width=4)),opts.TreeMapLevelsOpts(color_saturation=[0.3, 0.6],treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(border_color_saturation=0.7, gap_width=2, border_width=2),),opts.TreeMapLevelsOpts(color_saturation=[0.3, 0.5],treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(border_color_saturation=0.6, gap_width=1),),# opts.TreeMapLevelsOpts(color_saturation=[0.3, 0.5]),],)
tree.set_global_opts(title_opts=opts.TitleOpts(title="2020东京奥运会参赛人数统计(国家/地区)", pos_left='center', title_textstyle_opts=opts.TextStyleOpts(color='#00BFFF', font_size=20)),legend_opts=opts.LegendOpts(is_show=False))tree.render_notebook()

按运动项目聚合统计: 

df_t = athletes_df.groupby(['项目', '国家'])['姓名'].count().reset_index()
df_t.columns = ['项目', '国家', '人数']data = []
event = []
for idx, row in df_t.iterrows():if row['项目'] in event:data[-1]['children'].append(dict(name=row['国家'], value=row['人数']))else:data.append(dict(name=row['项目'], children=[dict(name=row['国家'], value=row['人数'])]))event.append(row['项目'])tree = TreeMap(    init_opts=opts.InitOpts(theme='light',width='1000px',height='600px',# bg_color='rgb(0,0,0)'))
tree.add("参赛人数", data,leaf_depth=1,label_opts=opts.LabelOpts(position="inside", formatter='{b}:{c}名'),levels=[opts.TreeMapLevelsOpts(treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(border_color="#555", border_width=4, gap_width=4)),opts.TreeMapLevelsOpts(color_saturation=[0.3, 0.6],treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(border_color_saturation=0.7, gap_width=2, border_width=2),),opts.TreeMapLevelsOpts(color_saturation=[0.3, 0.5],treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(border_color_saturation=0.6, gap_width=1),),# opts.TreeMapLevelsOpts(color_saturation=[0.3, 0.5]),],)
tree.set_global_opts(title_opts=opts.TitleOpts(title="2020东京奥运会参赛人数统计(项目)", pos_left='center', title_textstyle_opts=opts.TextStyleOpts(color='#00BFFF', font_size=20)),legend_opts=opts.LegendOpts(is_show=False))tree.render_notebook()

 主要国家各项目参数人数对比

pie = Pie(init_opts=opts.InitOpts(theme='light',width='1000px',height='800px',)
)
titles = [dict(text='2020东京奥运会各国主要项目参赛运动员比例',left='center',top='0%',textStyle=dict(color='#000',fontSize=20))]
for i, c in enumerate(country_list):d = df_t[df_t['国家'] == c].reset_index()data_pair = []else_num = 0for idx, row in d.iterrows():if idx < 5:data_pair.append(opts.PieItem(name=row['项目'],value=row['人数'],label_opts=opts.LabelOpts(is_show=True, formatter='{b}:{d}%')))else:else_num += row['人数']data_pair.append(opts.PieItem(name='其他',value=else_num,label_opts=opts.LabelOpts(is_show=True, formatter='{b}:{d}%')))pos_x = '{}%'.format(int(i / 4) * 33 + 16)pos_y = '{}%'.format(i % 4 * 24 + 15)titles.append(dict(text=c+' ',left=pos_x,top=pos_y,textAlign='center',textVerticalAlign='middle',textStyle=dict(color='#00BFFF',fontSize=12)))pie.add(c,data_pair,center=[pos_x, pos_y],radius=['8%', '12%'])pie.set_global_opts(legend_opts=opts.LegendOpts(is_show=False),title_opts=titles
)
pie.render_notebook()

【2020东京奥运会】奥运榜单以及各国参赛运动员数据可视化~相关推荐

  1. Pyecharts“可视化大屏“,带你重温 “2020东京奥运会“,不看直播尽知其事!

    本文禁止其他人转载,违者必究! 目录   1.项目背景   2.奥运会相关信息爬取    ① 导入相关库    ② 爬虫代码完整讲解   3.数据预处理    ① 数据替换    ② 数据分组     ...

  2. 神马搜索上线奥运会人气榜单 中国女排包揽前三

    继战胜东道主巴西女排后,中国女排在今天对阵荷兰女排的半决赛中再次取得胜利,时隔12年再次跻身奥运决赛.在中国女排取得佳绩的同时,神马搜索奥运会人气榜单显示,中国女排队员惠若琪.张常宁.朱婷占据了榜单前 ...

  3. 2020东京奥运会金牌榜爬虫

    页面分析 寻找Ajax接口 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pq6LqtuY-1630031342051)(http://markdowntc.wanqq ...

  4. 宝洁聚焦“用爱指引”的2020东京奥运会参赛运动员,称颂他们的举动,并鼓励其他运动员采取积极行动

    奥运会金牌得主Nastia Liukin和奥运会银牌得主Gus Kenworthy与宝洁"运动员向善基金"补助款接受者以及在2020东京奥运会上继续"用爱指引" ...

  5. 宝洁和2020东京奥运会宣布领奖台项目 – 即将举行的奥运会和残奥会将首次使用利用回收塑料制作的领奖台

    辛辛那提--(美国商业资讯)--宝洁(Procter & Gamble, NYSE:PG)与2020东京奥运会组委会和国际奥委会(IOC)合作,于今日宣布在奥运会和残奥会历史上将首次全部使用回 ...

  6. 2020年全国压岁钱榜单出炉,今年小朋友压岁钱归谁?

    明天除夕啦!对于小朋友们来说,最有"年味"的莫过于兜里有--压岁钱. 你被妈妈收走过压岁钱吗?有网友表示,压岁钱都是父母和亲戚朋友的人情往来,拿走很正常.也有网友评论,小时候认为压 ...

  7. 爬虫+可视化 | 动态展示2020东京奥运会奖牌世界分布

    文章目录 前言 1. 导入模块 2. 数据爬取 3. 地图展示 3.1 2020东京奥运会奖牌数世界分布 3.2 2020东京奥运会金牌世界分布 3.3 2020东京奥运会金.银.铜世界分布

  8. (1)1994-2019年俄罗斯家庭调查数据(调查表+数据集)(2)各国地理距离、文化距离、制度距离、人均gdp(至2020年)(3)IFR各国分行业-工业机器人数据(1993-2019年)(4

    (1)1994-2019年俄罗斯家庭调查数据(调查表+数据集) (2)各国地理距离.文化距离.制度距离.人均gdp(至2020年) (3)IFR各国分行业-工业机器人数据(1993-2019年) (4 ...

  9. MITRE 发布 2020 CWE Top 25 榜单

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 MITRE 发布了过去两年来前25个最常见也最危险的软件弱点. 软件弱点可能是在软件解决方案代码.架构.实现或设计中出现的缺陷.bug ...

最新文章

  1. 超全汇总!机器学习常用术语词汇表
  2. OpenCV4 C++学习 必备基础语法知识二
  3. ES6精华:字符串扩展
  4. css实现左侧宽度自适应,右侧固定宽度
  5. Hbase复制(Replication )
  6. python如何判断是否有弹出框_Selenium2+python自动化47-判断弹出框存在(alert_is_present)【转载】...
  7. php连接mysql乱码原因_PHP连接MYSQL出现乱码的原因与解决办法
  8. 如何在报表中实现算法的可挂接需求
  9. .net3.5下的Socket通信框架
  10. 数组——寄包柜(洛谷 P3613)
  11. mysql 控制台环境下查询中文数据乱码,插入、更新中文数据不成功
  12. 查看oracle的版本、所在表空间、字符集及查询一个表的所有字段名和数据类型
  13. orange软件使用
  14. JS获取屏幕宽度高度
  15. 前端使用阿里云图标库
  16. Flink流计算编程--watermark(水位线)简介
  17. Flink大声说,丢数据这个锅,我们不背!
  18. 脑机接口、开源和民主化增强意识的未来
  19. 用PS擦除图片中不想要的部分,并保留图片背景
  20. 基于JAVA中小型饭馆餐饮管理系统计算机毕业设计源码+系统+数据库+lw文档+部署

热门文章

  1. 关于js的回调函数,同步回调与异步回调
  2. describe是sql的关键字
  3. 编译器优化故障的测试与定位
  4. 庚子中秋之际,走进刘易斯的S4 刘易斯逻辑之十
  5. 南阳理工学院ACM多乐赛暨16级退役纪念赛 C PK没有女朋友
  6. CCF 会议检索(近期可投)
  7. Http的多线程下载
  8. java 最大矩形_最大矩形面积
  9. 创维,彩电业的“技术咖”,能否赢得下一个十年?
  10. NB-Iot烟感03:感烟探测器原理图设计