天天看點

體測成績資料分析

提取碼:8828(本文用到的資料檔案) 

  • import numpy as np
    import pandas as  pd
    from pandas import Series,DataFrame
    import  matplotlib.pyplot as plt
    import seaborn as sns
    # 讓圖形在控制台列印出來
    
    %matplotlib inline      
  • boy = pd.read_excel('18級高一體測成績彙總.xls')      
  • boy
體測成績資料分析
  • #header=[0,1] 把第一行  和第二行 作為  一級  二級索引
    score = pd.read_excel('體測成績評分表.xls',header=[0,1])      
體測成績資料分析
  • boy.info()      
體測成績資料分析
  • #  去掉班級的一列
    temp = boy.loc[boy['班級']!='班級']
    #去完重複 顯示有多少個班級
    temp['班級'].unique()      
體測成績資料分析
  • # inplace=True 直接修改boy裡的 6班為6
    boy = boy.loc[boy['班級']!='班級']
    
    #boy.replace(to_replace={"班級":"6班"},value=6,inplace=True)
    
    boy.replace(to_replace={"6班":"6"},inplace=True)      
  • boy['班級'].unique()      
體測成績資料分析
  • # 看有沒有空值
    # 隻要有一個是空值
    boy.isnull().any()
    # 這些字段是否 全為空值
    boy.isnull().all()      
體測成績資料分析
  • # 所有的學科的都沒有參加 設定為缺考
    score_columns = ["1000米","50米","跳遠","體前屈","引體","肺活量","身高","體重"]
    temp = boy[score_columns]
    # 找到缺考的資料 索引的組合
    empty_index = temp.loc[temp.isnull().all(axis=1)].index
    empty_index      
體測成績資料分析
  • # 分數參考表的肺活量
    score['男肺活量']      
體測成績資料分析
  • boy['肺活量']      
體測成績資料分析
  • FHL_df = score['男肺活量']
    def boy_FHL(x):
        #周遊成績表,x 是大于表中哪一個肺活量   
        for data in FHL_df['成績']:
          if x>=data:
            return FHL_df['分數'].loc[FHL_df['成績']==data].values[0]
        return 0      
  • boy_FHL(3900)      
體測成績資料分析
  • #  利用map映射 将一張分數表,映射到成績表中
    ff=boy['肺活量'].map(boy_FHL).values
    ff      
體測成績資料分析
  • #  利用map映射 将一張分數表,映射到成績表中
    boy1 = boy.copy();
    boy1['肺活量']=boy['肺活量'].map(boy_FHL)
    boy1[['姓名','肺活量']]      
體測成績資料分析
  • # 把類型統一浮點類型
    # 将集合都轉化為浮點類型
    boy['50米'] = boy['50米'].astype(float)      
體測成績資料分析
  • df_50M = score['男50米跑']      
  • # 處理男子50米跑的資料
    def  map_50(x):    
        for   data in df_50M['成績']:
            if x <= data:
                return df_50M.loc[df_50M['成績']==data]['分數'].values[0]
        return 0.0      
  • map_50(10.4)      
  • 10
  • # 1000米成績處理
    
    score['男1000'].loc[10,"成績"]      
體測成績資料分析
  • '4\'25"'.strip('"')      
體測成績資料分析
  • "4'25".split("\'")      
體測成績資料分析
  • # 時間轉換的函數
    def   process_data(x):
        # 如果x 不是字元串
        #如果時間是整數直接傳回
        if not isinstance(x,str):
            return x
        x = x.strip('"')
        #得到分鐘 m s秒
        m,s = x.split("\'")
        second = float(s)/(60)    
        #如果不是整數時間,傳回帶小數的分鐘
        return (float(m) + second)        
  • process_data("4'21")      
  • 4.35
  • # 學生成績表中的1000 米時間替換一下
    boy['1000米'] = boy['1000米'].map(process_data)
    boy['1000米']       
體測成績資料分析
  • score[("男1000","成績")] = score[("男1000","成績")].map(process_data)
    
    score      
體測成績資料分析
  • # 處理男子1000米跑的資料
    df_1000M = score['男1000']
    df_1000M 
    def  map_1000(x):    
        for   data in df_1000M ['成績']:
            if x <= data:
                return df_1000M.loc[df_1000M['成績']==data]['分數'].values[0]
        return 0.0      
  • boy2 = boy.copy()
    
    boy2['1000米'] =boy['1000米'].map(map_1000)
    boy2      
體測成績資料分析
  • boy['引體']      
體測成績資料分析
  • df_YT =  score["男引體"]      
  • df_YT       
體測成績資料分析
  • # 處理男子引體資料
    def  map_YT(x):    
        for data in df_YT['成績']:
            if x>data:
              return df_YT.loc[df_YT['成績']==data]["分數"].values[0]
        return 0      
  • boy['引體'].map(map_YT)      
體測成績資料分析
  • # 體前屈
    boy[["姓名","體前屈"]]      
體測成績資料分析
  • df_TQQ = score["男體前屈"]      
  • #處理提前屈的函數
    def  map_TQQ(x):
         for data in df_TQQ['成績']:
            if x>=data:
              return df_TQQ.loc[df_TQQ['成績']==data]["分數"].values[0]
         return 0      
  • boy.loc[boy["體前屈"].map(map_TQQ) == 50]      
體測成績資料分析