体测成绩数据分析

提取码: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

体测成绩数据分析_第1张图片

  • #header=[0,1] 把第一行  和第二行 作为  一级  二级索引
    score = pd.read_excel('体测成绩评分表.xls',header=[0,1])

体测成绩数据分析_第2张图片

  • boy.info()

体测成绩数据分析_第3张图片

  • #  去掉班级的一列
    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()

体测成绩数据分析_第4张图片

  • # 所有的学科的都没有参加 设定为缺考
    score_columns = ["1000米","50米","跳远","体前屈","引体","肺活量","身高","体重"]
    temp = boy[score_columns]
    # 找到缺考的数据 索引的组合
    empty_index = temp.loc[temp.isnull().all(axis=1)].index
    empty_index

  • # 分数参考表的肺活量
    score['男肺活量']

体测成绩数据分析_第5张图片

  • boy['肺活量']

体测成绩数据分析_第6张图片

  • 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

体测成绩数据分析_第7张图片

  • #  利用map映射 将一张分数表,映射到成绩表中
    boy1 = boy.copy();
    boy1['肺活量']=boy['肺活量'].map(boy_FHL)
    boy1[['姓名','肺活量']]
体测成绩数据分析_第8张图片
  • # 把类型统一浮点类型
    # 将集合都转化为浮点类型
    boy['50米'] = boy['50米'].astype(float)

体测成绩数据分析_第9张图片

  • 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米'] 

体测成绩数据分析_第10张图片

  • score[("男1000","成绩")] = score[("男1000","成绩")].map(process_data)
    
    score

体测成绩数据分析_第11张图片

  • # 处理男子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

体测成绩数据分析_第12张图片

  • boy['引体']

体测成绩数据分析_第13张图片

  • df_YT =  score["男引体"]
  • df_YT 

体测成绩数据分析_第14张图片

  • # 处理男子引体数据
    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)

体测成绩数据分析_第15张图片

  • # 体前屈
    boy[["姓名","体前屈"]]

体测成绩数据分析_第16张图片

  • 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]

体测成绩数据分析_第17张图片

你可能感兴趣的:(python---numpy)