<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用python帶你一覽2021陜西全運(yùn)會(huì)數(shù)據(jù)

          共 13723字,需瀏覽 28分鐘

           ·

          2021-10-02 15:58




          大家好,歡迎來(lái)到 Crossin的編程教室 !

          第14屆全國(guó)運(yùn)動(dòng)會(huì)剛剛在陜西西安圓滿(mǎn)閉幕。1萬(wàn)多名來(lái)自全國(guó)各地的運(yùn)動(dòng)健兒在這里進(jìn)行了角逐。

          今天讓我們利用Python來(lái)看看這次比賽的數(shù)據(jù)吧~

          目錄:

          • 1. 數(shù)據(jù)采集

            • 1.1. 比賽大項(xiàng)數(shù)據(jù)

            • 1.2. 比賽小項(xiàng)數(shù)據(jù)

            • 1.3. 代表團(tuán)數(shù)據(jù)

            • 1.4. 運(yùn)動(dòng)員數(shù)據(jù)

            • 1.5. 決賽名次數(shù)據(jù)

          • 2. 統(tǒng)計(jì)展示

            • 2.1. 項(xiàng)目維度

            • 2.2. 代表團(tuán)維度

            • 2.3. 運(yùn)動(dòng)員維度


          1. 數(shù)據(jù)采集

          全運(yùn)會(huì)有個(gè)低調(diào)的官網(wǎng),里面有非常詳盡的數(shù)據(jù),我這邊用python直接從該網(wǎng)站采集了本屆的各類(lèi)數(shù)據(jù),采集過(guò)程不做詳細(xì)介紹了,大家看代碼即可。

          第十四屆全運(yùn)會(huì)信息發(fā)布系統(tǒng):

          https://info.2021shaanxi.com/

          第十四屆全運(yùn)會(huì)信息發(fā)布系統(tǒng)

          1.1. 比賽大項(xiàng)數(shù)據(jù)

          比賽大項(xiàng)數(shù)據(jù)是指官網(wǎng)展示的一共49項(xiàng)大的比賽項(xiàng)目數(shù)據(jù),主要包含項(xiàng)目ID項(xiàng)目名稱(chēng)。

          import requests
          import pandas as pd

          headers = {
              "User-Agent""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
              }
          # 大項(xiàng)
          url = 'https://info.2021shaanxi.com/Data/commonCode/disciplineList.json'

          r = requests.get(url, headers= headers)

          data = r.json()
           
          disciplineList = pd.DataFrame(data)
          disciplineList.replace(r'-','',regex=True,inplace=True)
          disciplineList.sample(5)
          大項(xiàng)預(yù)覽

          1.2. 比賽小項(xiàng)數(shù)據(jù)

          比賽小項(xiàng)是指具體的比賽項(xiàng)目,比如大項(xiàng)射箭—男子—男子反曲弓個(gè)人項(xiàng)目,本次一共有427個(gè)小項(xiàng)。

          # 小項(xiàng)
          url = 'https://info.2021shaanxi.com/Data/commonCode/event.json'

          r = requests.get(url, headers= headers,)

          data = r.json()

          items = []
          for key in data.keys():
              for key1 in data[key].keys():
                  item = data[key][key1][0]
                  items.append(item)

          event = pd.DataFrame(items)
          event.replace(r'-','',regex=True,inplace=True)
          event.sample(5)
          小項(xiàng)

          1.3. 代表團(tuán)數(shù)據(jù)

          代表團(tuán)是指省、機(jī)構(gòu)組織或者個(gè)人,比如北京市、湖北省,北京體育大學(xué)組織或者個(gè)人(如游泳、山地車(chē)等就有以個(gè)人名義參加的運(yùn)動(dòng)員),一共58個(gè)代表團(tuán)組織。

          # 代表團(tuán)
          url = 'https://info.2021shaanxi.com/Data/commonCode/delegation.json'

          r = requests.get(url, headers= headers, )

          data = r.json()

          items = []
          for key in data.keys():
              item = data[key][0]
              items.append(item)

          delegation = pd.DataFrame(items)
          delegation.replace(r'-','',regex=True,inplace=True)
          delegation.sample(5)
          代表團(tuán)

          1.4. 運(yùn)動(dòng)員數(shù)據(jù)

          運(yùn)動(dòng)員一共12434人,但實(shí)際有參與項(xiàng)目的12037人。

          # 運(yùn)動(dòng)員
          items = []
          for Id in disciplineList['Id']:
              url = f'https://info.2021shaanxi.com/api/participant/list?discipline={Id}'
              r = requests.get(url, headers= headers)

              data = r.json()
              item = data['data']
              items.extend(item)
              
          AthleteList = pd.DataFrame(items)
          AthleteList.replace(r'-','',regex=True,inplace=True)    
          AthleteList['event_count'] = AthleteList.EventEntry.apply(len)    
          # 匹配大項(xiàng)
          AthleteList = AthleteList.merge(disciplineList[['Id''CHI_Description']],
                                          right_on='Id', left_on='DisciplineCode', how='left')
          # 匹配組織
          AthleteList = AthleteList.merge(delegation[['Id''CHI_Description']], 
                                          left_on='OrganisationCode', right_on='Id', how='left')
          AthleteList.sample(5)
          運(yùn)動(dòng)員

          1.5. 決賽名次數(shù)據(jù)

          決賽名次其實(shí)就是每個(gè)項(xiàng)目比賽結(jié)果數(shù)據(jù),金銀銅牌獲得者的信息,后續(xù)我們可以根據(jù)這份數(shù)據(jù)來(lái)看看體育強(qiáng)省在哪里!

          # 決賽數(shù)據(jù)
          dataList = []
          # 決賽日期(數(shù)據(jù)是9-25號(hào)采集的,所以截止選的9-24日)
          dateList = pd.date_range('2021-07-12','2021-09-24').strftime('%Y%m%d')

          for date in dateList:
              url = f'https://info.2021shaanxi.com/Data/Medal/Daily/{date}/data.json'
              
              r = requests.get(url, headers= headers)
              try:
                  data = r.json()
                  
                  data = pd.DataFrame(data)
                  data.replace(r'-','',regex=True,inplace=True)
                  
                  def get_BirthDate(x):
                      if len(x)==1:
                          return x[0]['BirthDate']

                  def get_AthleteCode(x):
                      if len(x)==1:
                          return x[0]['AthleteCode']
                      
                  data['BirthDate'] = data['Members'].apply(get_BirthDate)
                  data['AthleteCode'] = data['Members'].apply(get_AthleteCode)
                  dataList.append(data)
              except :
                  continue
          data = pd.concat(dataList)

          df = data[['Date''EventCode''MedalRank''OrganisationCode''Gender',
                    'Name''BirthDate''AthleteCode']]
          # 匹配組織
          df = df.merge(delegation[['Id''CHI_Description']], 
                        left_on='OrganisationCode', right_on='Id', how='left')
          # 匹配小項(xiàng)
          df = df.merge(event[['CHI_Description','Code''Discipline''Team_Event']],
                        right_on='Code', left_on='EventCode', how='left')
          # 匹配大項(xiàng)
          df = df.merge(disciplineList[['Id''CHI_Description']],
                        right_on='Id', left_on='Discipline', how='left')
          # 字段篩選
          df = df[['Date''CHI_Description''CHI_Description_y''Gender''MedalRank'
                   'Name''CHI_Description_x','BirthDate''AthleteCode''Team_Event']]
          df.sample(5)
          決賽名次

          2. 統(tǒng)計(jì)展示

          本部分我們將進(jìn)行項(xiàng)目統(tǒng)計(jì)代表團(tuán)(尤其是省級(jí)行政區(qū)代表團(tuán))統(tǒng)計(jì)以及運(yùn)動(dòng)員統(tǒng)計(jì)三部分展開(kāi)。

          2.1. 項(xiàng)目維度

          本屆全運(yùn)會(huì)大項(xiàng)目一共49個(gè),小項(xiàng)目一共427個(gè),具體分布如下:

          大項(xiàng)-小項(xiàng)分布

          田徑游泳是擁有小項(xiàng)最多的,其中田徑的小項(xiàng)高達(dá)52種、游泳的小項(xiàng)也有高達(dá)37種。熱度較高的跳水小項(xiàng)也很多有17種,乒乓球則有7種小項(xiàng)。

          分布箱線(xiàn)圖
          # 篩選全小項(xiàng)
          event = event[(event['Event'].str.len()>0)&(event['Gender'].str.len()>0)]
          # 匹配大項(xiàng)名稱(chēng)
          Discipline_event_Num = event.merge(disciplineList, left_on='Discipline', right_on='Id').groupby('CHI_Description_y')['Code'].nunique().to_frame('小項(xiàng)數(shù)')
          Discipline_event_Num.sort_values(by='小項(xiàng)數(shù)', ascending=False).reset_index()
          大項(xiàng)-小項(xiàng)分布 前10

          各大項(xiàng)參與人數(shù)

          田徑足球是參與人數(shù)最多的項(xiàng)目,都多達(dá)1000人以上。不過(guò),大多數(shù)的團(tuán)體項(xiàng)目參與人數(shù)都是較多的無(wú)疑了。

          # 各項(xiàng)目運(yùn)動(dòng)員數(shù)
          Discipline_Num = AthleteList.groupby('CHI_Description_x')['AthleteCode'].nunique().to_frame('人數(shù)')
          Discipline_Num.sort_values(by='人數(shù)', ascending=False).reset_index()
          各項(xiàng)目參賽人數(shù)
          import matplotlib.pyplot as plt
          import numpy as np

          plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

          # 設(shè)置柱狀圖顏色
          colors = ['turquoise''coral']

          labels = Discipline_Num.index
          y = Discipline_Num['人數(shù)']

          x = np.arange(len(labels))  
          width = 0.35  

          fig, ax = plt.subplots(figsize=(8,16))
          rects1 = ax.barh(x + width/2, y, color=colors[1], edgecolor='grey')

          ax.set_title('各項(xiàng)目參賽人數(shù)', fontsize=16)
          y_pos = np.arange(len(labels))
          ax.set_yticks(y_pos)
          ax.set_yticklabels(labels, fontsize=12)

          # 顯示數(shù)據(jù)標(biāo)簽
          ax.bar_label(rects1, padding=3)

          fig.tight_layout()
          # 邊框隱藏
          ax.spines['top'].set_visible(False)
          ax.spines['right'].set_visible(False)
          # ax.spines['bottom'].set_visible(False)
          ax.spines['left'].set_visible(False)
          plt.show()
          fig.savefig('各項(xiàng)目參賽人數(shù).png')

          個(gè)人團(tuán)體分布

          在全部小項(xiàng)目中有139項(xiàng)約占32.6%的項(xiàng)目是團(tuán)體類(lèi)的(比如足球、乒乓球混雙等),另外288項(xiàng)占比67.54的項(xiàng)目是個(gè)人賽。

          個(gè)人團(tuán)體分布
          # 個(gè)人團(tuán)體分布 (Discipline)
          Team_Event_Num = event.groupby('Team_Event')['Code'].nunique().to_frame('小項(xiàng)數(shù)')
          labels = Team_Event_Num.index
          sizes = Team_Event_Num['小項(xiàng)數(shù)']
          explode = (0,  0.1,) 

          fig1, ax1 = plt.subplots(figsize=(6,5))
          patches, texts, autotexts = ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
                                              shadow=True, startangle=90)
          ax1.axis('equal'
          ax1.set_title('各比賽小項(xiàng)個(gè)人團(tuán)體分布', fontsize=16)
          # 重新設(shè)置字體大小
          proptease = fm.FontProperties()
          proptease.set_size('large')
          plt.setp(autotexts, fontproperties=proptease)
          plt.setp(texts, fontproperties=proptease)

          plt.show()

          性別分布

          207個(gè)項(xiàng)目是男性項(xiàng)目,193個(gè)項(xiàng)目是女性項(xiàng)目,混合類(lèi)的有21種,而不分男女共6種(馬術(shù)比賽)

          性別分布
          # 性別分布 
          Gender_Event_Num = event.groupby('Gender')['Code'].nunique().to_frame('小項(xiàng)數(shù)')
          labels = Gender_Event_Num.index
          sizes = Gender_Event_Num['小項(xiàng)數(shù)']
          explode = (0,  0.00, ) 

          fig1, ax1 = plt.subplots(figsize=(8,7))
          patches, texts, autotexts = ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
                                              shadow=True, startangle=90)
          ax1.axis('equal'
          ax1.set_title('各比賽小項(xiàng)性別分布', fontsize=16)
          # 重新設(shè)置字體大小
          proptease = fm.FontProperties()
          proptease.set_size('large')
          plt.setp(autotexts, fontproperties=proptease)
          plt.setp(texts, fontproperties=proptease)

          plt.show()

          2.2. 代表團(tuán)維度

          一共58個(gè)代表團(tuán),其中34個(gè)省級(jí)行政區(qū)+4個(gè)協(xié)會(huì)、13個(gè)俱樂(lè)部、2個(gè)學(xué)校等,其中OO是聯(lián)合隊(duì)(奧運(yùn)會(huì)聯(lián)合隊(duì))

          各類(lèi)代表團(tuán)分布


          Type數(shù)量
          0D38
          1CLUB13
          2RO3
          3SCHOOL2
          4GR1
          5OO1
          # 代表團(tuán)類(lèi)型
          Type_delegation_Num = delegation.groupby('Type')['Id'].nunique().to_frame('數(shù)量')
          Type_delegation_Num.sort_values(by='數(shù)量', ascending=False).reset_index()
          代表團(tuán)類(lèi)型分布

          代表團(tuán)人數(shù)對(duì)比

          雖然說(shuō)有58個(gè)代表團(tuán),實(shí)際參賽的代表團(tuán)53個(gè),比如我們的臺(tái)灣省并沒(méi)有參與,希望他們能早日參與進(jìn)來(lái)。在這53個(gè)代表團(tuán)中,我們按照省級(jí)行政區(qū)和其他分類(lèi)對(duì)比看看。

          省級(jí)行政區(qū)

          山東、廣東、江蘇、上海陜西是本次參數(shù)選手最多的省份

          各省份參賽人數(shù)

          其他

          天津體育學(xué)院作為高校,有24名參數(shù)選手,北京體育大學(xué)則有2名。

          其他代表團(tuán)參賽人數(shù)

          代表團(tuán)參與大項(xiàng)數(shù)

          作為東道主的陜西,本屆全運(yùn)會(huì)參與了高達(dá)47/49個(gè)大類(lèi),此外參賽人數(shù)較多的江蘇、廣東和上海均參加了44個(gè)大類(lèi)。

          Organisation_Discipline_Num = AthleteList.groupby('CHI_Description_y')['CHI_Description_x'].nunique().to_frame('大項(xiàng)數(shù)')
          Organisation_Discipline_Num.sort_values(by='大項(xiàng)數(shù)', ascending=False).reset_index()
          代表團(tuán)參與大項(xiàng)數(shù)

          代表團(tuán)獎(jiǎng)牌數(shù)

          注:后續(xù)章節(jié)數(shù)據(jù)截止時(shí)間為9月24日24點(diǎn)。。

          在總獎(jiǎng)牌數(shù)排名中,山東、廣東、江蘇、浙江上海高居前列(這聯(lián)合隊(duì)未進(jìn)行細(xì)分到省份哈)

          Organisation_Medal_Num = df.pivot_table(values='Name',margins=True,index='CHI_Description_x',columns='MedalRank',aggfunc='count').fillna(0)
          Organisation_Medal_Num = Organisation_Medal_Num.sort_values(by='All', ascending=False).reset_index()
          Organisation_Medal_Num.columns = ['代表團(tuán)','金牌','銀牌','銅牌','總獎(jiǎng)牌']
          Organisation_Medal_Num.convert_dtypes()
          代表團(tuán)金牌銀牌銅牌總獎(jiǎng)牌
          All3313313911053
          山東353835108
          廣東302648104
          江蘇27273185
          浙江25252878
          上海16192358
          四川14172051
          陜西16132049
          福建18151649
          湖北12161543
          聯(lián)合隊(duì)354140
          遼寧7131737
          北京10121234
          天津881632
          河北8101331
          河南1081331
          湖南1311731
          安徽69924
          山西471021
          內(nèi)蒙古74718
          云南57517
          江西26513
          廣西26412
          吉林23712
          新疆25310
          甘肅2439
          貴州2259
          重慶1629
          黑龍江1449
          香港1056
          前衛(wèi)體協(xié)2215
          海南4105
          西藏3025
          青海0314
          貴州輪跡自行車(chē)運(yùn)動(dòng)俱樂(lè)部1012
          火車(chē)頭體協(xié)0011
          澳門(mén)0011

          代表團(tuán)奪金數(shù)(金牌榜)

          金牌榜中,山東最強(qiáng),其次是聯(lián)合隊(duì),接著依次是廣東、江蘇、浙江和福建

          我們發(fā)現(xiàn)聯(lián)合隊(duì)基本都是金牌,這也是為什么本屆的奧運(yùn)聯(lián)合隊(duì)會(huì)機(jī)制會(huì)被網(wǎng)友吐槽的原因!

          排名代表團(tuán)金牌銀牌銅牌總獎(jiǎng)牌
          1山東353835108
          2聯(lián)合隊(duì)354140
          3廣東302648104
          4江蘇27273185
          5浙江25252878
          6福建18151649
          7上海16192358
          8陜西16132049
          9四川14172051

          2.3. 運(yùn)動(dòng)員維度

          這部分我們主要看看運(yùn)動(dòng)員年齡分布,感受一下咱們新生代力量。

          我們一共有668名運(yùn)動(dòng)員獲得了獎(jiǎng)牌,其中金牌獲得者208人,銀牌獲得者215人,銅牌獲得者270人。

          注意:本部分不考慮團(tuán)體賽

          參數(shù)運(yùn)動(dòng)員性別分布

          全部參賽選手中,男性占比52.2%,女性占比47.8%,總的來(lái)說(shuō)是非常平衡的了。

          參數(shù)運(yùn)動(dòng)員性別分布
          # 參賽選手性別分布
          Gender_Num = AthleteList.groupby('GenderCode')['AthleteCode'].nunique().to_frame('人數(shù)')

          獎(jiǎng)牌最多的運(yùn)動(dòng)員

          個(gè)人單項(xiàng)賽事獎(jiǎng)牌最多的有5個(gè)人,均為3塊獎(jiǎng)牌


          運(yùn)動(dòng)員性別金牌銀牌銅牌總獎(jiǎng)牌
          1汪順M3003
          2張子揚(yáng)M2103
          3王春雨W2103
          4季新杰M1203
          5覃海洋M1113
          Athlete_Medal_Num = df[df['Team_Event']=='N'].pivot_table(values='CHI_Description',margins=True,index=['Name','Gender'],columns='MedalRank',aggfunc='count').fillna(0)
          Athlete_Medal_Num = Athlete_Medal_Num.sort_values(by=['All',1,2,3], ascending=[False,False,False,False]).reset_index()
          Athlete_Medal_Num.columns = ['運(yùn)動(dòng)員','性別','金牌','銀牌','銅牌','總獎(jiǎng)牌']
          Athlete_Medal_Num.convert_dtypes().head()

          那都是通過(guò)什么項(xiàng)目獲得的呢?

          來(lái)自田徑和游泳

          3塊獎(jiǎng)牌獲得者
          nameList = Athlete_Medal_Num[Athlete_Medal_Num['總獎(jiǎng)牌']>=3]['運(yùn)動(dòng)員']
          df[df['Name'].str.contains('|'.join(nameList))].sort_values(by = 'Name')

          事實(shí)上,來(lái)自浙江的1994年的汪順已經(jīng)收獲了含團(tuán)體賽在內(nèi)的6枚金牌!

          汪順

          金牌最多的運(yùn)動(dòng)員

          金牌數(shù)最多的就是汪順

          獲得金牌最多的女子運(yùn)動(dòng)員則是田徑選手王春雨,來(lái)自安徽的1995年跑步健將!

          王春雨

          獲獎(jiǎng)運(yùn)動(dòng)員年齡分布

          本屆全運(yùn)會(huì),大部分的獲獎(jiǎng)運(yùn)動(dòng)員出生年份集中在1994年-2000年。

          我們發(fā)現(xiàn)居然還有1971年的51歲選手??!,最小的則是2008年的13歲朋友??!相差接近4倍~

          獲獎(jiǎng)運(yùn)動(dòng)員年齡分布

          時(shí)隔12年 “七戰(zhàn)”1971年的老將劉英姿再奪全運(yùn)會(huì)飛碟多向金牌

          出生1971年選手

          2008年出生的小獎(jiǎng),有三個(gè)是青年組的選手。

          出生于2008年的選手

          金牌運(yùn)動(dòng)員年齡分布

          1996年和2000年出生的金牌運(yùn)動(dòng)員最多,居然剛好差了4年(一屆周期)

          金牌運(yùn)動(dòng)員年齡分布

          以上就是本次全運(yùn)會(huì)數(shù)據(jù)分析的全部?jī)?nèi)容。數(shù)據(jù)分析可以有很多維度和展現(xiàn)方式,本文僅僅是選取了其中的一部分,你也可以嘗試更多角度的分析。

          獲取文中相關(guān)數(shù)據(jù)和代碼文件,可點(diǎn)擊下方公眾號(hào)名片,回復(fù)關(guān)鍵字 全運(yùn)會(huì)

          如果文章對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~

          作者:道才

          來(lái)源:可以叫我才哥


          _往期文章推薦_

          【可視化】全運(yùn)會(huì)歷屆金牌榜




          如需了解付費(fèi)精品課程教學(xué)答疑服務(wù)
          請(qǐng)?jiān)?strong style="max-width: 100%;overflow-wrap: break-word !important;box-sizing: border-box !important;">Crossin的編程教室內(nèi)回復(fù): 666

          瀏覽 78
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91视频网址蜜桃视频 | 日本国产中文字幕 | 午夜看逼| 一起操在线观看 | a√天堂资源中文8 |