Python数据分析实战

数据及要求

文件可以在博主得资源上下载,如果是源文件有个缺考得话,把他人为改成0或者使用python代码写也可以
在这里插入图片描述
在这里插入图片描述
现请帮班主任做如下工作:

  1. 给成绩表加上姓名列;
  2. 给成绩表加上字段“总分”列,并求出总分;
  3. 增加列字段“等级”,标注每人“总分”的“优、良、中、及格、差”(270≤优,240≤良, 210≤中,及格≤180,差≤180);
  4. 计算各门课程的平均成绩以及标准差;
  5. 做"总分"成绩分布图,纵坐标表示成绩,横坐标表示学号或者姓名,画出总分的均分横线,让每位同学的总分圆点分布在均分线上下,以便于观察每位同学的成绩离开均分的距离。

一、导入数据

    import pandas as pd
    sheet1 = pd.read_excel("E:\python_data.xlsx",sheet_name="成绩表")
    sheet2 = pd.read_excel("E:\python_data.xlsx",sheet_name="信息表")
    sheet1
    

在这里插入图片描述

二、将sheet2的姓名添加至sheet1中

注意你们的文件上的列名是“手机号码”还是“手机号”,博主使用的是“手机号”为列名

    sheet1 = pd.merge(sheet1,sheet2,left_on='学号',right_on='学号')      #连接两个表
    sheet1 = sheet1.drop(columns = ['手机号']) 
    sheet1
    

或者在第一步读取文件的时候改成 sheet2 = pd.read_excel("E:\python_data.xlsx",sheet_name="信息表",usecols=[0,1])
,这样就可以不用drop手机号了
在这里插入图片描述

三、计算总分
如果源文件是有缺考得话还需要加多一句代码,替换下 sheet1.loc[sheet1['线代']=='缺考','线代']=0

    sheet1["总分"] = sheet1["C#"]+sheet1["线 代"]+sheet1["Python"]
    sheet1
    

在这里插入图片描述
四、为总分定等级

  • 方法一
    def return_ans(x):
        
        if x>=270:
            b='优'
        elif x>=240 and x<270:
            b='良'
        elif x>=210 and x<240:
            b='中'
        elif x>=180 and x<210:
            b='及格'
        else:
            b='差'
        return b
    sheet1['等级'] = sheet1['总分'].apply(lambda x:return_ans(x))
    sheet1
    

在这里插入图片描述

  • 方法二

此处得bins最后不可以写max(sheet1.总分)+1,因为这份数据没有一个总分超过270得,所以会报错

    bins=[min(sheet1.总分)-1,180,210,240,270,999]
    labels=["差","及格","中","良","优"]
    sheet1['等级']=pd.cut(sheet1.总分,bins,right=False,labels=labels)
    sheet1
    

在这里插入图片描述
五、计算各科成绩的均值和标准差

    print("C#的平均成绩为",sheet1['C#'].values.mean())
    print("C#的标准差为",sheet1['C#'].values.std())
    print("线 代的平均成绩为",sheet1['线 代'].values.mean())
    print("线 代的标准差为",sheet1['线 代'].values.std())
    print("Python的平均成绩为",sheet1['Python'].values.mean())
    print("Python的标准差为",sheet1['Python'].values.std())
    

在这里插入图片描述
六、对数据进行可视化,并用红线代表平均分数线

    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['Simhei']
    s = sheet1['总分'].values.mean()
    plt.bar(range(len(sheet1['总分'])),sheet1['总分'],width=0.8)
    plt.xticks(range(len(sheet1['总分'])),sheet1['姓名'])
    plt.axhline(s, color='red', linestyle='--')
    plt.show()
    

在这里插入图片描述

赞~

在这里插入图片描述

posted @ 2021-07-07 14:59  老酱  阅读(607)  评论(0编辑  收藏  举报