日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【项目实战】多场景下的图表可视化表达

發布時間:2025/3/21 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【项目实战】多场景下的图表可视化表达 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多場景下的圖表可視化表達

  • 數據:
    2016年奧運運動員數據,數據格式為xlsx,分3個sheet

1、分男女分別分析運動員的身高分布,并制作圖表,數據為“奧運運動員數據.xlsx,sheet → 運動員信息”

  • 要求:
    ① 制作分布密度圖
    ② 計算出男女平均身高,并繪制輔助線表示
  • 提示:
    ① 可視化制圖方法 → sns.distplot()
    ② 輔助線制圖方法 → plt.axvline()
    ③ 分男女分別篩選數據并制作圖表
    ④ 不需要創建函數

2、綜合指標判斷運動員的身材,并找到TOP8的運動員,并制作圖表,數據為“奧運運動員數據.xlsx,sheet → 運動員信息”

  • 要求:
    ① 針對不同指標,繪制面積堆疊圖
    ② TOP8的運動員,繪制雷達圖表示
  • 提示:
    ① 四個指標評判運動員身材,并加權平均
    a. BMI 指數(BMI =體重kg ÷ 身高m**2,詳細信息可百度查詢)→ 越接近22分數越高
    b. 腿長/身高 指數 → 數據篩選,只選取小于0.7的數據,越大分數越高
    c. 臂展/身高 指數 → 數據篩選,只選取大于0.7的數據,比值越接近1分數越高
    d. 年齡 指數 → 年齡越小分數越高
    對上述abcd指標分別標準化得到n1,n2,n3,n4(劃分到0-1的分值)
    最后評分: finalscore = (n1 + n2 + n3 + n4)/4
    ② 制作堆疊面積圖,data.plot.area()
    ③ 雷達圖需要構建子圖 + for循環遍歷得到

3、根據運動員CP數據,分析出CP綜合熱度,通過python處理數據并導出,在Gephi中繪制圖表,數據為“奧運運動員數據.xlsx,sheet → 運動員CP熱度”

  • 要求:
    ① 用python計算出綜合熱度指標
    ② 用Gephi繪制關系可視化圖表
  • 提示:
    ① 三個指標評判運動員CP綜合熱度,并加權平均
    a. cp微博數量 → 數量越多分數越高
    b. cp微博話題閱讀量 → 閱讀量越多分數越高
    c. B站cp視頻播放量 → 播放量越大分數越高
    對上述abcd指標分別標準化得到n1,n2,n3,n4(劃分到0-1的分值)
    最后評分: finalscore = n10.5 + n20.3 + n3*0.2
    ② Gephi中布局模式選擇“ForceAtlas2”
    ③ Gephi中通過模塊化計算,給關聯結果做分組,并且以此分組設定點顏色

一 導入python包

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns % matplotlib inlineimport warnings warnings.filterwarnings('ignore')

1、分男女分別分析運動員的身高分布,并制作圖表,數據為“奧運運動員數據.xlsx,sheet → 運動員信息”

  • 要求:
    ① 制作分布密度圖
    ② 計算出男女平均身高,并繪制輔助線表示
  • 提示:
    ① 可視化制圖方法 → sns.distplot()
    ② 輔助線制圖方法 → plt.axvline()
    ③ 分男女分別篩選數據并制作圖表
    ④ 不需要創建函數
import os os.chdir('C:\\Users\\Hjx\\Desktop\\') # 創建工作路徑 df = pd.read_excel('奧運運動員數據.xlsx',sheetname=1,header=0) df_length = len(df) df_columns = df.columns.tolist()

二 數據讀取

# pd.read_excel → 讀取excel文件,這里得到的是pandas的dataframe數據格式data = df[['event','name','gender','height']] data.dropna(inplace = True) # 去掉缺失值 data_male = data[data['gender'] == '男'] data_female = data[data['gender'] == '女']# 篩選數據,按照目標字段篩選 # 提取男女數據 hmean_male = data_male['height'].mean() hmean_female = data_female['height'].mean() # 計算男女平均身高 sns.set_style("ticks") # 圖表風格設置 # 風格選擇包括:"white", "dark", "whitegrid", "darkgrid", "ticks" plt.figure(figsize = (8,4)) # 設置作圖大小 sns.distplot(data_male['height'],hist = False,kde = True,rug = True,rug_kws = {'color':'y','lw':2,'alpha':0.5,'height':0.1} , # 設置數據頻率分布顏色kde_kws={"color": "y", "lw": 1.5, 'linestyle':'--'}, # 設置密度曲線顏色,線寬,標注、線形label = 'male_height') sns.distplot(data_female['height'],hist = False,kde = True,rug = True,rug_kws = {'color':'g','lw':2,'alpha':0.5} , kde_kws={"color": "g", "lw": 1.5, 'linestyle':'--'},label = 'female_height') # 繪制男女高度分布密度圖 plt.axvline(hmean_male,color='y',linestyle=":",alpha=0.8) plt.text(hmean_male+2,0.005,'male_height_mean: %.1fcm' % (hmean_male), color = 'y') # 繪制男運動員平均身高輔助線 plt.axvline(hmean_female,color='g',linestyle=":",alpha=0.8) plt.text(hmean_female+2,0.008,'female_height_mean: %.1fcm' % (hmean_female), color = 'g') # 繪制女運動員平均身高輔助線 plt.ylim([0,0.03]) plt.grid(linestyle = '--') # 添加網格線 plt.title("Athlete's height") # 添加圖表名 # 圖表其他內容

2、綜合指標判斷運動員的身材,并找到TOP8的運動員,并制作圖表,數據為“奧運運動員數據.xlsx,sheet → 運動員信息”

  • 要求:
    ① 針對不同指標,繪制面積堆疊圖
    ② TOP8的運動員,繪制雷達圖表示
  • 提示:
    ① 四個指標評判運動員身材,并加權平均
    a. BMI 指數(BMI =體重kg ÷ 身高m**2,詳細信息可百度查詢)→ 越接近22分數越高
    b. 腿長/身高 指數 → 數據篩選,只選取小于0.7的數據,越大分數越高
    c. 臂展/身高 指數 → 數據篩選,只選取大于0.7的數據,比值越接近1分數越高
    d. 年齡 指數 → 年齡越小分數越高
    對上述abcd指標分別標準化得到n1,n2,n3,n4(劃分到0-1的分值)
    最后評分: finalscore = (n1 + n2 + n3 + n4)/4
    ② 制作堆疊面積圖,data.plot.area()
    ③ 雷達圖需要構建子圖 + for循環遍歷得到
import os os.chdir('C:\\Users\\Hjx\\Desktop\\') # 創建工作路徑 df = pd.read_excel('奧運運動員數據.xlsx',sheetname=1,header=0) df_length = len(df) df_columns = df.columns.tolist() # 查看數據 # pd.read_excel → 讀取excel文件,這里得到的是pandas的dataframe數據格式
  • (1) 分析運動員全樣本數據的身材分布情況
data = df[['event','name','birthday','height','arm','leg','weight','age']] data.dropna(inplace = True) # 去掉缺失值 # 篩選數據,按照目標字段篩選data['BMI'] = data['weight']/(data['height']/100)**2 # 求BMIdata['arm/h'] = data['arm'] / data['height'] data['leg/h'] = data['leg'] / data['height'] data = data[data['leg/h']<0.7] data = data[data['arm/h']>0.7] # 分別計算“臂展/身高”、“腿長/身高”,并刪除異常數據data_re = data[['event','name','arm/h','leg/h','BMI','age']] # 重新新建結果數據data_redata_re['BMI_assess'] = np.abs(data['BMI'] - 22) # BMI評估 → 最接近22,差值絕對值越小分數越高 data_re['leg_assess'] = data['leg/h'] # 腿長評估 → 與身高比值,越大分數越高 data_re['arm_assess'] = np.abs(data['arm/h'] - 1) # 手長評估 → 與身高比值最接近1,差值絕對值越小分數越高 data_re['age_assess'] = data['age'] # 年齡評估 → 最小,越小分數越高data_re['BMI_nor'] = (data_re['BMI_assess'].max() - data_re['BMI_assess'])/(data_re['BMI_assess'].max()-data_re['BMI_assess'].min()) data_re['leg_nor'] = (data_re['leg_assess'] - data_re['leg_assess'].min())/(data_re['leg_assess'].max()-data_re['leg_assess'].min()) data_re['arm_nor'] = (data_re['arm_assess'].max() - data_re['arm_assess'])/(data_re['arm_assess'].max()-data_re['arm_assess'].min()) data_re['age_nor'] = (data_re['age_assess'].max() - data_re['age_assess'])/(data_re['age_assess'].max()-data_re['age_assess'].min()) # 標準化data_re['final'] = (data_re['BMI_nor']+data_re['leg_nor']+data_re['arm_nor']+data_re['age_nor'])/4 # 計算總體評價結果plt.figure(figsize = (10,6)) data_re.sort_values(by = 'final',inplace = True,ascending=False) data_re.reset_index(inplace=True) # 排序并重新設定indexdata_re[['age_nor','BMI_nor','leg_nor','arm_nor']].plot.area(colormap = 'PuRd',alpha = 0.5,figsize = (10,6)) plt.ylim([0,4]) plt.grid(linestyle = '--') # 繪制運動員身材數據分布圖表
  • (2) 解讀身材最好的前8位運動員
datatop8 = data_re[:8] # 數據篩選fig = plt.figure(figsize=(15,6)) plt.subplots_adjust(wspace=0.35,hspace=0.5)n = 0 for i in datatop8['name'].tolist():n += 1c = plt.cm.BuPu_r(np.linspace(0, 0.7,10))[n-1]axi = plt.subplot(2,4,n, projection = 'polar')datai = datatop8[['BMI_nor','leg_nor','arm_nor','age_nor']][datatop8['name']==i].Tscorei = datatop8['final'][datatop8['name']==i]angles = np.linspace(0, 2*np.pi, 4, endpoint=False)#axi.plot(angles,datai,linestyle = '-',lw=1,color = c)plt.polar(angles, datai, 'o-', linewidth=1,color = c)axi.fill(angles,datai,alpha=0.5,color=c)axi.set_thetagrids(np.arange(0.0, 360.0, 90),['BMI','腿長/身高','臂長/身高','年齡'])axi.set_rgrids(np.arange(0.2,1.5,0.2),'--')plt.title('Top%i %s: %.3f\n' %(n,i,scorei)) # 分別繪制每個運動員的評分雷達圖


  • 3、根據運動員CP數據,分析出CP綜合熱度,通過python處理數據并導出,在Gephi中繪制圖表,數據為“奧運運動員數據.xlsx,sheet → 運動員CP熱度”
  • 要求:
    ① 用python計算出綜合熱度指標
    ② 用Gephi繪制關系可視化圖表
  • 提示:
    ① 三個指標評判運動員CP綜合熱度,并加權平均
    a. cp微博數量 → 數量越多分數越高
    b. cp微博話題閱讀量 → 閱讀量越多分數越高
    c. B站cp視頻播放量 → 播放量越大分數越高
    對上述abcd指標分別標準化得到n1,n2,n3,n4(劃分到0-1的分值)
    最后評分: finalscore = n10.5 + n20.3 + n3*0.2
    ② Gephi中布局模式選擇“ForceAtlas2”
    ③ Gephi中通過模塊化計算,給關聯結果做分組,并且以此分組設定點顏色
df = pd.read_excel('奧運運動員數據.xlsx',sheetname=2,header=0) df_length = len(df) df_columns = df.columns.tolist() # 查看數據 # pd.read_excel → 讀取excel文件,這里得到的是pandas的dataframe數據格式df.replace([np.nan,'無數據','無貼吧'],0,inplace=True) # 數據清洗df['n1'] = (df['cp微博數量']-df['cp微博數量'].min())/(df['cp微博數量'].max()-df['cp微博數量'].min()) df['n2'] = (df['cp微博話題閱讀量']-df['cp微博話題閱讀量'].min())/(df['cp微博話題閱讀量'].max()-df['cp微博話題閱讀量'].min()) df['n3'] = (df['B站cp視頻播放量']-df['B站cp視頻播放量'].min())/(df['B站cp視頻播放量'].max()-df['B站cp視頻播放量'].min()) df['f'] = df['n1']*0.5 + df['n2']*0.3 + df['n3']*0.2 # 計算綜合熱度df.sort_values(by = 'f',inplace = True,ascending=False) df.reset_index(inplace=True) # 數據重新排序result = df[['p1','p2','f']] writer = pd.ExcelWriter('output.xlsx') result.to_excel(writer,'sheet1') writer.save() # 數據導出excel文件

總結

以上是生活随笔為你收集整理的【项目实战】多场景下的图表可视化表达的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。