主頁 > 軟體設計 > Pyecharts“可視化大屏“,帶你重溫 “2020東京奧運會“,不看直播盡知其事!

Pyecharts“可視化大屏“,帶你重溫 “2020東京奧運會“,不看直播盡知其事!

2021-08-21 08:42:21 軟體設計

本文禁止其他人轉載,違者必究!

目錄

??1、專案背景
??2、奧運會相關資訊爬取
???① 匯入相關庫
???② 爬蟲代碼完整講解
??3、資料預處理
???① 資料替換
???② 資料分組
???③ 中英文名映射轉換
??4、可視化展示
???① 2020東京奧運會各國金牌分布地圖
???② 2020東京奧運會獎牌榜詳情堆積柱形圖
???③ 2020東京奧運會獎牌榜總數前十名柱形圖
???④ 2020東京奧運會金牌榜總數前十名柱形圖
???⑤ 2020東京奧運會中國各專案獲獎詳情餅圖
???⑥ 中國選手每榷訓得獎牌數折線圖
???⑦ 中國選手每榷訓得金牌數折線圖
???⑧ 中國選手奪金詳細資料表格
???⑨ 組合為可視化大屏

整體思路

在這里插入圖片描述

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 = pd.read_excel("各國獎牌數.xlsx")
df1[df1["名稱"].str.contains("中國")]

結果如下:
在這里插入圖片描述
雖說中國香港、中國臺灣都單獨參加了奧運會,但她們都屬于中國,我們將她們的都改為中國,ID也都改為26,

df1["名稱"].replace(["中國臺北","中國香港"],"中國",inplace=True)
df1["ID"].replace([31,38],26,inplace=True)
df1[df1["名稱"].str.contains("中國")]

結果如下:
在這里插入圖片描述

② 資料分組

經過上述處理,那么中國就相當于有3條資料了,我們以名稱+ID作為聯合欄位,進行分組,然后求和,將這3條資料進行合并,最后,再以金牌欄位為基準,進行降序排列,

df2 = df1.groupby(["名稱","ID"])[["金牌","銀牌","銅牌","獎牌總數"]].sum().reset_index().sort_values(by="金牌",axis=0,ascending=False)
df2.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東京奧運會,哪怕你沒看過,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/295230.html

標籤:其他

上一篇:CGBTN2107-DAY14總結復習

下一篇:世界上第一部智能手機27歲了

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more