hnu计算机与人工智能概论5.6

最近有点忙,好久没更新了,大家见谅!最后一关howell也做不出来

 第1关:数据分析基础

1.将scores.xls文件读到名为df的dataframe中

2.添加平均分列:考勤、实验操作、实验报告的平均

3.输出前3行学生的平均分列表,控制小数点后两位

4.输出学生人数和班级数

5.分别输出实验报告中值、最高分、最低分

6.输出实验报告分最低的3位同学的姓名列表

第一关,第三问有更简洁的写法:

print(round(i,2) for i in list(df['平均分'])[0:3])

第四问,大家可以直接用shape函数,shape的输出结果是关于行和列的列表。也可以把序号便利一遍。

s=0
for i in df['姓名']:
    s+=1
print(s)

 第六问,本来是输出数组的,这里是原本的代码,现在改为了dataframe,答案如最终代码所示:

df2=df.head(3)
lis3=[]
for i in df2['姓名']:
    lis3.append(i)
str1=str(lis3)
str2=str1.replace(',','')
print(str2)
import pandas as pd
import warnings
warnings.filterwarnings('ignore')

# 1.将scores.xls文件读到名为df的dataframe中
############begin############
df=pd.read_excel('scores.xls')
#############end#############

#2.添加平均分列:考勤、实验操作、实验报告的平均
############begin############
df['平均分']=(df['考勤']+df['实验操作']+df['实验报告'])/3
#############end#############

#3.输出前3行学生的平均分列表,控制小数点后两位
############begin############
num1='%.2f'%(df.loc[0,'平均分'])
num2='%.2f'%(df.loc[1,'平均分'])
num3='%.2f'%(df.loc[2,'平均分'])
lis1=[eval(num1),eval(num2),eval(num3)]
print(lis1)
#############end#############

#4.输出学生人数和班级数
############begin############
print(df.shape[0])
s=0
lis2=[]
for i in df['班级名称']:
    if i not in lis2:
        s+=1
        lis2.append(i)
print(s)
#############end#############

#5.分别输出实验报告中值、最高分、最低分
############begin############
df=df.sort_values(by=['实验报告'],ascending=True)
print(df.iloc[16,8])
print(df.iloc[-1,8])
print(df.iloc[0,8])
#############end#############

#6.输出实验报告分最低的3位同学的姓名列表
############begin############
print(df.iloc[0:3,1])
#############end#############

第2关:数据排序和检索

1.将scores.xls文件读到名为df的dataframe中

2.添加综合分列:考勤20%实验操作20%实验报告60%

3.按综合分降序和学号升序排序(临时排序,不改变原有顺序)

4.输出综合分最高的同学的姓名和学号(可能有多位同学)

5.输出性别为“男”而且实验报告>90的同学的姓名和综合分信息

6.将当前dataframe保存到文件scores_new.xls中

import pandas as pd
import warnings
warnings.filterwarnings('ignore')

# 1.将scores.xls文件读到名为df的dataframe中
############begin############
df=pd.read_excel('scores.xls')
#############end#############

#2.添加综合分列:考勤20%实验操作20%实验报告60%
############begin############
df['综合分']=df['考勤']*0.2+df['实验操作']*0.2+df['实验报告']*0.6
#############end#############

#3.按综合分降序和学号升序排序(临时排序,不改变原有顺序)
############begin############
df1=df.sort_values(by=['综合分','学号'],ascending=[False,True])
#############end#############

#4.输出综合分最高的同学的姓名和学号(可能有多位同学)
############begin############
df2=df.loc[df['综合分']==max(df['综合分'])]
print(df2[['姓名','学号']])
#############end#############

#5.输出性别为“男”而且实验报告>90的同学的姓名和综合分信息
############begin############
print(df.loc[(df.性别=='男')&(df.实验报告>90),['姓名','综合分']])
#############end#############

#6.将当前dataframe保存到文件scores_new.xls中
############begin############
df1.to_excel('scores_new.xls')
#############end#############

第3关:分组统计及可视化

如果最后一关不能直接通过,记得把前两关运行一遍

import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')

plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False   # 步骤二(解决坐标轴负数的负号显示问题)

# 1.将scores_new.xls文件读到名为df的dataframe中
############begin############
df=pd.read_excel('scores_new.xls')
#############end#############

#2.按性别统计实验报告分的均值,绘制条图,保存到图片文件filename
def draw_bar(filename):
    plt.figure('fig1')
    ############begin############
    n=df.groupby('性别')['实验报告'].mean()
    colors=['red','green']
    plt.bar(n.index,n.values,color=colors)
    plt.xticks(n.index,['女','男'])
    plt.xlabel('性别')
    plt.ylabel('成绩')
    plt.title('不同性别的实验报告平均成绩')
    for i,j in zip(n.index,n.values):
        plt.text(i,j+0.5, '%.2f'%j, ha = 'center')
    plt.savefig(filename)
    plt.show()
    #############end#############

#3.统计男女比例,绘制饼图,保存到图片文件filename
def draw_pie(filename):
    plt.figure('fig2')
    ############begin############
    n =df.groupby('性别').size()
    labels = ['女','男']
    plt.pie(n.values, labels=labels, autopct = '%1.2f%%')
    plt.savefig(filename)
    plt.show()
    #############end#############

#4.按班级统计各成绩均值,绘制折线图,保存到图片文件filename
def draw_line(filename):
    plt.figure('fig3')
    ############begin############
    a=df.groupby('班级名称')['考勤'].mean()
    b=df.groupby('班级名称')['实验操作'].mean()
    c=df.groupby('班级名称')['实验报告'].mean()
    d=df.groupby('班级名称')['综合分'].mean()
    x=['考勤','实验操作','实验报告','综合分']
    y1= [a[0],b[0],c[0],d[0]]
    y2= [a[1],b[1],c[1],d[1]]
    plt.plot(x,y1,label='一班',marker='*')
    plt.plot(x,y2,label='二班',marker='d')
    plt.legend()
    plt.savefig(filename)
    plt.show()
    #############end#############

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月14日
下一篇 2023年12月14日

相关推荐