'''python程序设计是全校公共课,选课学生有1万人,现在模拟构造成绩数据集,并测试相关应用,任务如下:1)构建一个学生编号列表,其中学生编号为字符串,从PY00001-PY10000,记为F1;2)构建一个学生选课名称列表,元素值为课程名称(均为“Python”),记为F2, 其中F2长度与F1相同。3)构建学生成绩数组(一维),元素值为成绩(0-100中随机生成的整数),记为F3, 其长度也与F1相同4)通过构造字典,将其转换为数据框df,其中数据字段列名分别为: 学号、课程名称、成绩,数据依次为F1、F2、F35)构建一个成绩分级列表F4,对成绩数据进行分级: 优秀(90-100)、良好(80-89)、中等(70-79)、及格(60-69)、不及格(0-59)6)将F4添加到df后面,列名称记为成绩分级,最后得到的df字段名称和数据为: 学号、课程名称、成绩、成绩分级,数据依次为F1、F2、F3、F47)基于最新的df数据框的数据内容,进行统计分析,统计内容包括: 优秀人数、良好人数、中等人数、及格人数、不及格人数、及格率和优秀率, 并通过print打印出来'''
def level(t): if t>=90 and t<=100: s='优秀' elif t>=80 and t<=89: s='良好' elif t>=70 and t<=79: s='中等' elif t>=60 and t<=69: s='及格' else: s='不及格' return sF1=[]F2=[]F3=[]import randomimport numpy as npimport pandas as pdfor i in range(1,10001): xh='PY'+str(i) k=7-len(xh) s='' for t in range(k): s=s+'0' xh='PY'+s+str(i) F1.append(xh) F2.append('python') F3.append(random.randint(0,100))F3=np.array(F3)d={'学号':F1,'课程名称':F2,'成绩':F3}df=pd.DataFrame(d)F4=[]for i in range(len(df)): c=df.iloc[i,2] s=level(c) F4.append(s)df['成绩分级']=F4res=df.groupby('成绩分级')['成绩分级'].count()print('不及格人数:',res['不及格'])print('及格人数:',res['及格'])print('中等人数:',res['中等'])print('良好人数:',res['良好'])print('优秀人数:',res['优秀'])print('及格率:',(10000-res['不及格'])/10000)print('优秀率:',res['优秀']/10000)
'''今有地铁站点进出站客流数据表(Data.xlsx),表结构字段如下:站点编号、日期、时刻、进站人数、出站人数,第一条记录数据形如:155 2015-10-01 7 294 1215数据类型:数值、字符串、数值、数值、数值完成以下任务:1)基于pandas读取数据表,获得数据变量A(数据框)2)取出A的第0列,通过去重的方式获得地铁站点编号列表,记为code3)筛选155、135、127三个站点编号,国庆期间(10.1-10.7)的数据记录, 数据字段同A4)计算每个站点国庆节期间(10.1~10.7)的进站人数和出站人数, 并基于2*1的子图结构,第1个子图绘制各站点进站人数的柱状图, 第2个子图绘制各站点出站人数的线性图5)计算每个站点10.8-10.31的进站人数,并创建一个序列将其存储起来, 其中序列的值为进站人数,索引(index)为站点编号, 并将序列按值进行降序排序'''
#1)import pandas as pdA=pd.read_excel('Data.xlsx')#2)code=list(A.iloc[:,0].unique())#3)tf1=A['站点编号'].values==155tf2=A['站点编号'].values==135tf3=A['站点编号'].values==127tf4=A['日期'].values<='2015-10-07'tf=(tf1&tf4)|(tf2&tf4)|(tf3&tf4)res=A.iloc[tf,:]#4)A1=A.iloc[tf4,:]r1=A1.groupby(['站点编号'])['进站人数'].sum() #进站r2=A1.groupby(['站点编号'])['出站人数'].sum() #进站import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']='SimHei'plt.subplot(2,1,1)plt.bar(list(r1.index),list(r1.values))plt.xlabel('站点编号')plt.ylabel('进站人数')plt.title('各站点进站人数的柱状图')plt.subplot(2,1,2)plt.plot(list(r2.index),list(r2.values))plt.tight_layout()plt.show()#5)A2=A.iloc[~tf4,:]re2=A2.groupby(['站点编号'])['进站人数'].sum() #进站re2=re2.sort_values(ascending=False)
'''今有表1和表2两个数据表,其中表1字段如下:单品编码、单品名称、分类编码、分类名称,其中一条记录(均为字符串)如:102900005115168、牛首生菜、1011010101、花叶类 表2字段如下:销售日期、扫码销售时间、单品编码、销量(千克)、销售单价(元/千克)、销售类型、是否打折销售,其中一条记录如下(数据类型为:前3为字符串、4-5为数值,6-7为字符串):2020-07-01、09:15:07.924、102900005117056、0.396、7.60、销售、否任务如下:1)以单品编码作为关联字段,进行内连接,合并为一个完整数据表。2)在此基础上,计算6个蔬菜品类(分类名称)每天的销售量和销售额3)定义一个函数,输入参数为蔬菜品类(分类名称)、日期,返回值为销售量和销售额4)调用该函数,给出一个调用例子'''
#1)import pandas as pdb1=pd.read_excel('表1.xlsx')b2=pd.read_excel('表2.xlsx')b=pd.merge(b1,b2,how='inner',on=['单品编码'])#2)r1=b.groupby(['分类名称','销售日期'])['销量(千克)'].sum()b['销售额']=b['销量(千克)'].values*b['销售单价(元/千克)'].valuesr2=b.groupby(['分类名称','销售日期'])['销售额'].sum()#3)def qa(nm,day): #nm--分类名称 #day--日期,形如“2020-07-01”字符串 data=pd.DataFrame(list(r1.index)) data.columns=['分类名称','日期'] data['销售量']=r1.values data['销售额']=r2.values #将字符串日期转化为Timestamp,因为data中的日期是Timestamp类型 day_timestamp=pd.to_datetime(day) tf1=data['日期'].values==day_timestamp tf2=data['分类名称'].values==nm data_qa=data.iloc[tf1&tf2,:] if len(data_qa)>0: return (data_qa.iloc[0,2],data_qa.iloc[0,3]) else: return '没有查询到数据'#4)res=qa('花叶类','2020-07-02')print('花叶类,2020-07-02销售量为:',res[0])print('花叶类,2020-07-02销售额为:',res[1])