數(shù)據(jù)分析 | 奧運小哥哥小姐姐們的身材了解一下

彭于晏這種就是虛肌肉蚪腋,就是吃各種蛋白質(zhì)增肌丰歌。看上去很結(jié)實屉凯,其實沒卵用立帖。打個比方就是我和他單挑,過不了五秒悠砚,他就會跪在我面前掐著我的人中求我不要死晓勇。
╭(●`?′●)╯╰(●’?’●)╮

皮一下很開心!言歸正傳灌旧,你覺得運動員里誰的身材最好呢绑咱?是帝國猛虎張繼科?還是洪荒少女傅園慧枢泰?還是花劍王子施嘉洛描融?(大腦一下子被各種帥氣的小哥哥小姐姐塞滿了無法思考……)那就看小爺我今天用數(shù)據(jù)說話,花式分析一波小哥哥小姐姐們的身材吧宗苍!
嘿嘿嘿
0 第一步先把冰箱門打開:

很急稼稿,不解釋了,快上車讳窟!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
% matplotlib inline

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體
mpl.rcParams['axes.unicode_minus'] # 正常顯示負號

import warnings
warnings.filterwarnings('ignore')
1 先總體看下大家的身高分布
運動員身高分布

圖中兩條輔助線說明女性運動員的平均身高170.0,男性平均身高180.8(//▽//)敞恋,下面像梳子一樣的短細線代表了數(shù)據(jù)分布頻率丽啡。這張圖用到了seaborn繪制密度圖,方法是sns.distplot()硬猫。輔助線和注釋用來展示平均水平(plt.axvline补箍,plt.annotate)。分享一下實現(xiàn)這張運動員身高分布圖的代碼:

# 讀取數(shù)據(jù)
import os
os.chdir(r'..\Desktop\python_project6')
data01 = pd.read_excel('奧運運動員數(shù)據(jù).xlsx',sheetname='運動員信息',header = 0)
#print(data01.head())

# ①制作分布密度圖
data_female = data01[data01['gender'] == '女']
data_male = data01[data01['gender'] == '男']

# 設置風格及大小
sns.set_style("ticks")
plt.figure(figsize = (10,6)) 
# 女性運動員
sns.distplot(data_female['height'],
             rug = True, rug_kws = {'color':'yellowgreen'},
             kde_kws={'color': 'yellowgreen', 'lw': 2, 'label': 'female_height','linestyle':'--'},
             hist_kws={'alpha': 0},
             vertical = False  
             )
#男性運動員
sns.distplot(data_male['height'],
             rug = True, rug_kws = {'color':'gold','height':0.1},
             kde_kws={'color': 'gold', 'lw': 2, 'label': 'female_height','linestyle':'--'},
             hist_kws={'alpha': 0},
             vertical = False  
             )

# ②計算出男女平均身高啸蜜,并繪制輔助線表示
data_Mean_byGender = data01.groupby('gender').mean()
#print(data_Mean_byGender)

female_height_mean = data_Mean_byGender.loc['女']['height']
male_height_mean = data_Mean_byGender.loc['男']['height']

# 繪制輔助線
plt.axvline(female_height_mean,linestyle = ':',color = 'yellowgreen',alpha = 0.9)
plt.axvline(male_height_mean,linestyle = ':',color = 'gold',alpha = 0.9)
# 添加注釋
plt.annotate('female_height_mean: %.1f cm'%female_height_mean,xy=(female_height_mean+1,0.01),color='yellowgreen')
plt.annotate('male_height_mean: %.1f cm'%male_height_mean,xy=(male_height_mean+1,0.005),color='gold')
# 其他設置
plt.xlim([120,260])  # x軸邊界
plt.ylim([0,0.03])   # y軸邊界
plt.grid(True, linestyle = '--',color = 'gray', linewidth = '1',alpha = 0.2) # 添加網(wǎng)格
plt.title( "Athlete's height") # 添加標題坑雅,標題本身含有單引號,故此處字符串用雙引號
2 身材可不止身高這一個維度啊

身材好不好衬横,光看照片還真比不出來裹粤,要用數(shù)據(jù)說話~
我們今天用這幾個指標比身材:

(1) 體質(zhì)指數(shù) BMI (Body Mass Index)
(2) 腿身比 LBR (Leg-to-Body Ratio)
(3) 臂長/身長
(4) 年齡

關(guān)鍵詞1:身高體重指數(shù) BMI

BMI快速查詢表

“身高體重指數(shù)”這個概念,是由19世紀中期的比利時統(tǒng)計學家數(shù)學家凱特勒(Lambert Adolphe Jacques Quetelet)最先提出蜂林。它的定義如下:
對于亞洲成年人遥诉,體重標準是少于27.5拇泣,理想指數(shù)是18.5至23.9。

關(guān)鍵詞2:腿身比 LBR
腿身比是腿長與身高的比值矮锈。這里我們只選取小于0.7的數(shù)據(jù)霉翔,在這個范圍內(nèi)越大越好。

關(guān)鍵詞3:臂長比身長
高于平均水平的臂長在籃球苞笨,拳擊债朵,擊劍和游泳等運動中是有利的。所以臂長與身長的比值也將作為一項重要指標瀑凝,這里我們只選取大于0.7的數(shù)據(jù)葱弟,比值越接近1越好。

關(guān)鍵詞4:年齡
這 有 什 么 好 解 釋 的2碌ぁ芝加!年齡越小越好!射窒! ╥﹏╥

快來看看結(jié)果:

BMI等各種指標

身材Top8的運動員

蹬蹬蹬蹬藏杖!想不到吧!脉顿!上面這幾個人才是數(shù)據(jù)選出來的好身材~
第一名不僅身材好蝌麸,還是擊劍冠軍,還會唱歌艾疟!我要pick這位小哥了来吩!(..??_??..)

施嘉洛

算了還是先分享下代碼:

# 整理數(shù)據(jù):刪除缺失值及不合理的數(shù)據(jù)
data02 = data[['name','birthday','height','weight','arm','leg']]
data02.dropna(inplace=True)  # 刪除缺失值
data02.drop([202],axis=0,inplace=True) # 原表中“曹緣”出現(xiàn)兩次,除年齡列外無任何不同蔽莱,故刪掉一行
#print(data02.head())

# 通過出生日期計算年齡
#(原表age列存在空值弟疆,同時也有可能不是今年統(tǒng)計的年齡數(shù)據(jù),故采用birthday列先求年齡)
import datetime
days = datetime.datetime.today() - data02['birthday']
age = []
for i in days:
    age.append(round(i.days/365)) # round()四舍五入
data02['age'] = age
data02['BMI'] = data02['weight'] / ((data02['height']/100)**2)
data02['leg/height'] = data02['leg'] / data02['height']
data02['arm/height'] = data02['arm'] / data02['height']
data02 = data02[data02['leg/height'] <0.7] # leg/height只選取小于0.7的數(shù)據(jù)
data02 = data02[data02['arm/height'] >0.7] # arm/height只選取大于0.7的數(shù)據(jù)

# 計算標準化得分
# 年齡越小得分越高
data02['age_n'] = (data02['age'].max() - data02['age']) / (data02['age'].max() - data02['age'].min())

# BMI值越接近22得分越高
data02['BMI_score'] = np.abs(data02['BMI']-22)
data02['BMI_n'] = (data02['BMI_score'].max() - data02['BMI_score']) / (data02['BMI_score'].max() - data02['BMI_score'].min())

# leg/height比值只選取小于0.7的數(shù)據(jù)盗冷,越大分數(shù)越高
data02['leg/height_n'] = (data02['leg/height'] - data02['leg/height'].min()) / (data02['leg/height'].max() - data02['leg/height'].min())

# arm/height比值只選取大于0.7的數(shù)據(jù)怠苔,比值越接近1分數(shù)越高
data02['arm/height_score'] = np.abs(data02['arm/height']-1)
data02['arm/height_n'] = (data02['arm/height_score'].max() - data02['arm/height_score']) / (data02['arm/height_score'].max() - data02['arm/height_score'].min())

# 計算最終得分,并按照最終得分排序
data02['final_score'] = (data02['age_n']+data02['BMI_n']+data02['leg/height_n']+data02['arm/height_n']) / 4
data02.sort_values('final_score',ascending = False,inplace = True)
data02.reset_index(inplace=True)

# ①針對不同指標,繪制面積堆疊圖

# 面積圖
data02[['age_n','BMI_n','leg/height_n','arm/height_n']].plot.area(colormap = 'PuRd',alpha = 0.6,figsize=(16,8))
plt.xlim([0,len(data02)])  # x軸邊界
plt.ylim([0,4])   # y軸邊界
plt.grid(True, linestyle = '--',color = 'gray', linewidth = '1',alpha = 0.5) # 添加網(wǎng)格
plt.legend(loc='upper right')
plt.title( "Athlete's Infomation")

# ②TOP8的運動員仪糖,繪制雷達圖表示
data02_top = data02[['name','index','age_n','BMI_n','leg/height_n','arm/height_n','final_score']][:8]
data_ranking = data02_top.T

fig = plt.figure(figsize=(16,10))
dataLenth = 4 # 4個方面
labels = ['BMI','腿長/身高','臂長/身高','年齡'] # 4個方面對應的標簽

for i in range(1,9):
    axi = fig.add_subplot(2,4,i,polar=True)
    datai = list(data_ranking[i-1].loc[['BMI_n','leg/height_n','arm/height_n','age_n']])
    angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False) # 設置雷達圖的角度柑司,用于平分切開一個圓面
    datai = np.concatenate((datai, [datai[0]])) # 為了使雷達圖一圈封閉起來
    angles = np.concatenate((angles, [angles[0]])) # 為了使雷達圖一圈封閉起來

    plt.polar(angles,datai,'o-',linewidth=1,c ='purple',alpha=i*0.1) # 繪制極坐標系子圖
    plt.fill(angles,datai,c ='mediumvioletred',alpha =(9-i)*0.1)# 填充
    plt.thetagrids(angles * 180/np.pi, labels) # 設置網(wǎng)格、標簽
    plt.title('Top%i %s:%.3f\n'%(i,data02_top.loc[i-1]['name'],data02_top.loc[i-1]['final_score'])) # 設置標題
    plt.ylim(0,1.2)  # 設置坐標軸范圍
3 后面害有一丟丟瓜可以吃

整天看各大博主扒運動員和明星們之間各種CP大戲锅劝,娜娜醬也忍不住想用數(shù)據(jù)研究下他們各種CP熱度~(源數(shù)據(jù)是微博數(shù)量攒驰、微博CP話題閱讀量、B站CP視頻播放量故爵。需要用python預處理一下玻粪,再導入Gephi中查看他們之間的關(guān)系網(wǎng)絡。)

CP關(guān)系網(wǎng)絡

等等,我好像看到了什么了不得的東西…


謝霆鋒和林丹組CP了奶段?饥瓷!

嗯?這是什么瓜痹籍,我怎么沒見過

瘋狂撒狗糧的一組

最后悄悄分享一下預處理的代碼:

#分析CP綜合熱度呢铆,通過python處理數(shù)據(jù)并導出,在Gephi中繪制圖表

# 數(shù)據(jù)預處理
import os
os.chdir(r'..\Desktop\python_project6')
data03 = pd.read_excel('奧運運動員數(shù)據(jù).xlsx',sheetname='運動員CP熱度',header = 0)
#print(data03.head())

# 整理數(shù)據(jù):缺失值替換為0蹲缠,同一組CP數(shù)據(jù)相加
data03.replace(np.nan,'無數(shù)據(jù)',inplace = True)
data03.replace('無數(shù)據(jù)',0,inplace = True)
        
# 計算標準化得分
data03['weibo_n'] = (data03['cp微博數(shù)量']-data03['cp微博數(shù)量'].min()) / (data03['cp微博數(shù)量'].max()-data03['cp微博數(shù)量'].min())
data03['weiboTopic_n'] = (data03['cp微博話題閱讀量']-data03['cp微博話題閱讀量'].min()) / (data03['cp微博話題閱讀量'].max()-data03['cp微博話題閱讀量'].min())
data03['BiliBili_n'] = (data03['B站cp視頻播放量']-data03['B站cp視頻播放量'].min()) / (data03['B站cp視頻播放量'].max()-data03['B站cp視頻播放量'].min())

# 計算最終得分,并按照最終得分排序
data03['final_score'] = data03['weibo_n']*0.5 + data03['weiboTopic_n']*0.3 + data03['BiliBili_n']*0.2
data03.sort_values('final_score',ascending = False,inplace = True)
data03.reset_index(inplace=True)

# 導出excel
result = data03[['p1','p2','final_score']]
writer = pd.ExcelWriter('運動員CP熱度.xlsx')
result.to_excel(writer,'sheet1')
writer.save()

今天也是八卦滿滿的一天9卓恕!
也許你還想看看:數(shù)據(jù)分析线定,從入門到放棄

(:3[▓▓] 溜了溜了娜谊。
謝謝您閱讀,請勿轉(zhuǎn)載斤讥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纱皆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子芭商,更是在濱河造成了極大的恐慌派草,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铛楣,死亡現(xiàn)場離奇詭異近迁,居然都是意外死亡,警方通過查閱死者的電腦和手機簸州,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門鉴竭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岸浑,你說我怎么就攤上這事搏存。” “怎么了助琐?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵祭埂,是天一觀的道長。 經(jīng)常有香客問我兵钮,道長,這世上最難降的妖魔是什么舌界? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任掘譬,我火速辦了婚禮,結(jié)果婚禮上呻拌,老公的妹妹穿的比我還像新娘葱轩。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布靴拱。 她就那樣靜靜地躺著垃喊,像睡著了一般袜炕。 火紅的嫁衣襯著肌膚如雪本谜。 梳的紋絲不亂的頭發(fā)上偎窘,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音陌知,去河邊找鬼他托。 笑死,一個胖子當著我的面吹牛仆葡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沿盅,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗡呼!你這毒婦竟也來了纸俭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤南窗,失蹤者是張志新(化名)和其女友劉穎揍很,沒想到半個月后万伤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窒悔,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡敌买,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了聋庵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡祭玉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脱货,到底是詐尸還是另有隱情岛都,我是刑警寧澤振峻,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站扣孟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏哈打。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一湾盗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧格粪,春花似錦、人聲如沸帐萎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葛躏。三九已至澈段,卻和暖如春舰攒,著一層夾襖步出監(jiān)牢的瞬間败富,已是汗流浹背摩窃。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猾愿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓椎麦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親观挎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 硬派健身 摘要 自序 與更好的自己嘁捷,在未來重逢显熏。 2016-10-11 13:34:10 是誰說運動一定要持續(xù)40...
    夜上海灘閱讀 10,008評論 0 50
  • 午飯過后,沏上一杯熱茶心思隨著春天的風飄走啦.我開始放空自己想象愛情的樣子蕴轨,是冰箱里多出的酸奶港谊,被窩里觸到的雙腳,...
    讀不出先生閱讀 257評論 0 2
  • 談到修行歧寺,在中國除佛道宗教之外,儒家最注重個人修身斜筐,他們終極人生理想就是修身、齊家顷链、治國、平天下屈梁,把修身放...
    老愚_f704閱讀 1,201評論 4 5
  • 親愛的端端寶貝: 我是媽媽,你還在媽媽的肚子里潭苞,不知道你是男孩還是女孩。有時覺得你是男孩真朗,因為你把媽媽折騰的要...
    小蔥1閱讀 295評論 0 1