资源简介 专题7 数据统计与可视化的程序实现学业要求 知 识 点 学业水平等级1.能根据实际要求,对表格数据进行简单整理、计算和可视化呈现 12.能采用合适的方法分析数据和可视化呈现数据,并能从中提取有用信息,形成结论 23.会使用Python进行简单的数据处理,并能从中提取有用信息形成结论 2知识点 利用Pandas模块进行数据统计【知识梳理】1.Pandas模块主要用于数据处理和________,Matplotlib是一个绘图库,________子库提供的函数可以快速绘图和设置图表的坐标。2.Pandas提供________和________两种数据结构,两者的区别见下表所示。数据结构 Series DataFrame维度 一维 ________维组成 包含一个数组的数据和一个与数据关联的索引,索引值默认是从________起递增的整数 由1个索引列(index)和若干个数据列组成,每个数据列可以是不同的________创建 列表、字典等可以用来创建Series数据结构;与列表不同的是:Series的索引可以指定,类型可以为________ 通常用一个________的列表或字典来创建;或直接读取二维数据文件创建联系 ①DataFrame可以看作是共享同一个________的Series的集合 ②DataFrame对象和Series对象均可以通过________或________来检索,还可以用at函数赋值和修改3.Pandas基本属性值(1)index属性行索引,默认值是从________开始递增的整数,也可以在创建对象时通过增加一列字符串类型的index属性。(2)values属性存放Series对象的一个数组,存放________对象的二维数据。(3)columns属性只针对DataFrame对象,存放各列的________标题。4.Pandas数据的检索Pandas可以通过两种方法来检索数据,一是通过三大________(Serise对象只有两大属性)来检索,如df.columns、df.index(一维数据列表),df.values(二维数据列表)。二是通过________记法,Pandas用字典来记录每列的数据,Series对象字典中每个键的值只有一个,键为index属性,值为values属性。DataFrame对象字典中每个键的值有多个,是个列表,键为columns属性,值为每列的数据。5.Pandas常用函数函数 说明count() 返回非空(NaN)数据项的________sum()、mean() 求和、________,通过axis=0/1确定行列max()、min() 返回最大、最小值head()、tail() 返回DataFrame的前n个、后n个数据记录groupby() 对各列或各行中的数据进行________,然后可对其中每一组数据进行不同的操作sort_values() ________,通过axis=0/1确定行列,axis默认值为0,________排序。ascending=True/False确定升/降序,ascending默认值为True,________排序。排序结果返回一个新DataFrame对象drop() ________,通过axis=0/1确定行列,并返回另一个DataFrame对象来存放改变后的数据6.利用Matplotlib模块绘图(1)Matplotlib是一个绘图库。使用其中的________子库所提供的函数可以快速绘图和设置图表的坐标轴及刻度、图例等。(2)导入matplotlib:import matplotlib.pyplot as plt。(3)Matplotlib模块的常用函数分类 函数 说明创建 对象 figure() 创建一个新的图表对象,并设置为当前绘图对象 注:不创建figure对象,直接调用plot等绘图函数进行绘图,matplotlib会自动创建一个figure对象绘制 图形 ________ 绘制线形图bar() 绘制垂直柱形图barh() 绘制水平柱形图scatter() 绘制散点图修饰 美化 ________ 设置图表的标题xlim() ylim() 设置X、Y轴的取值范围xlabel() ylabel() 设置X、Y轴的标签legend() 显示图例显示 show() 显示创建的所有绘图对象【经典案例】Series对象只有index和values两列组成,在Series数据集df中,索引为x的值表示为df[x]或df.at[x]。DataFrame对象由1个索引列(index)和多个数据列组成,在DataFrame数据集df中,可以用df[″姓名″]命令来创建″姓名″列,该列索引为x的值表示为df[″姓名″][x](字典法),df.姓名[x](属性法),df.at[x,″姓名″](行列法)。数据筛选的目的是为了找到符合处理条件的数据,往往是数据处理的第1步。通过表达式df[df[″姓名″]==xx]来找出符合条件的所有记录,该数据集是原数据集的子集,字段数量相同,但记录的条数小于原数据集。数据分组(groupby)的目的是以某个列中相同字段值的记录组合在一起,成为分组依据,统计各个分组的数量(count())、和(sum())、平均值(mean())和最值(max()min())等等。数据排序(sort_values)按某列进行升降排序排列,可以显示近排序后的数据,但不会改变原数据的索引值。【例1】 小红收集了部分城市2021年全年每天PM2.5、PM10、CO浓度数据,每天的数据分别保存在以8位日期字符串命名的CSV文件中,部分文件如图a所示,每个文件记录了一天24小时的监测数据,示例如图b所示。为统计分析城市A全年各月份PM2.5的月平均浓度(当月的日平均浓度的平均值),编写Python程序。请回答下列问题:(1)定义pmday函数,功能为:读取某天的CSV文件,返回城市A当天PM2.5的日平均浓度。函数代码如下,划线处应填入的代码为________(单选,填字母)。A.df['类型']=='PM2.5'B.df['类型'=='PM2.5']C.df[df['类型']]=='PM2.5'D.df[df['类型']=='PM2.5']import pandas as pddef pmday(dayfile):df=pd.read_csv(dayfile) #读取文件dayfile中的数据df=________return df['城市A'].mean() #返回城市A当天PM2.5的日平均浓度(2)统计城市A各月份PM2.5的月平均浓度并绘制线型图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltdef tstr(t):if t<10:retrun '0'+str(t)else:retrun str(t)pm=[0]*12mdays=[31,28,31,30,31,30,31,31,30,31,30,31]#2021年每月天数for m in range(12):sm=0mstr=tstr(m+1)for d in range(①________):dstr=tstr(d+1)dayfile='2021'+mstr+dstr+'.csv'sd=pmday(dayfile)②________pm[m]=sm/mdays[m]x=[1,2,3,4,5,6,7,8,9,10,11,12]y=③________plt.plot(x,y) #绘制线型图#设置绘图参数,显示如图c所示线型图,代码略(3)城市A2021年PM2.5年平均浓度为34.6微克/立方米。由图c可知,城市A2021年PM2.5月平均浓度超过年平均浓度的月份共________个。思维点拨明考向 本题考查pandas对数据集的筛选和选取合适的数据源制作图表。遍历存储全年每天数据的文件,调用自定义函数pmday统计每天的PM2.5日平均浓度,从而计算月平均浓度,最后利用图表可视化工具显示统计结果精点拨 (1)可以通过布尔型数据选取满足条件的行。(2)计算各月份PM2.5浓度的平均值,可以累加各月的每天PM2.5浓度的平均值。变量dayfile表示每天的数据文件名,题干已经提示“每天的数据分别保存在以8位日期字符串命名的CSV文件”,调用函数pmday(dayfile),可以得到当天PM2.5的日平均浓度,并保存于变量sd。当月的各天PM2.5的日平均浓度需要累加起来,最后求均值。③空横坐标为月份,纵坐标为PM2.5月平均浓度,即列表pm的数据。(3)超过年平均浓度的月份为1、2、3、4、11月听课笔记:_________________________________________________________________________________________________________________________________________________________________________________________________________【变式1】 小林收集了各地市各年份检测的PM2.5浓度值保存于Excel文件“PM2.5.xlsx”中,部分数据如图a所示。小林使用Python进行数据分析,请回答以下问题。(1)小林先将同一个地区的数据输出到各自独立的Excel文件中,部分结果如图b所示,实现程序如下所示:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel(″PM2.5.xlsx″)# cities 保存所有地区名称,这里仅演示部分数据cities=[″安吉县″,″淳安县″,″慈溪市″,″杭州市″,″湖州市″]for city in cities:dfc=________dfc.to_excel(city+″.xlsx″,index=False) #输出文件结果示例如图b所示那么划线部分语句可以是________(注:全部选对的得2分,选对但不全的得1分,不选或有选错的得0分)。A.df[df[″地区名称″]==city] B.df[df[″地区名称″]]==cityC.df[df.地区名称==city] D.df[df.″地区名称″]]==city(2)对于图a所示的原始数据,小林要进行数据整理:删除“地区编码”、“指标名称”、“计量单位”等对后面统计无用的数据列,请将划线处①的语句补充完整。df=pd.read_excel(″PM2.5.xlsx″)#删除“地区编码”、“指标名称”、“计量单位”数据列df=df.drop([″指标名称″,″地区编码″,″计量单位″],axis=①________) #同一个地市取PM2.5浓度最高的值dfg=②________#按PM2.5的值升序排序dfg=dfg.sort_values(″PM2.5″,ascending=True) #输出排序后的最后五行结果print(dfg.tail())(3)对于整理后的数据,在同一个地市中取历次PM2.5浓度检测值最高的值,最后按PM2.5升序排序数据,输出结果如图c所示,则第②空应填写的语句是________(单选,填字母)。A.df.groupby(″PM2.5″).max()B.df.groupby.地区名称.max()C.df.sort_values(″PM2.5″).max()D.df.groupby(″地区名称″).max()(4)将排序后的数据分别取PM2.5检测值最高和最低的五行数据合并成新的DataFrame对象后绘制成柱形图如图d所示。请将程序补充完整。df2=pd.concat([dfg.head(5),dfg.tail(5)]) #合并两个对象成为新的DataFrame对象plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #设置图表字体plt.figure(figsize=(8,4))plt.title(″部分县市PM2.5浓度对比″)plt.xlabel(″PM2.5浓度值″)plt.bar(①________,df2[″PM2.5″],color=″orange″)for i in range(len(df2)):x=df2.index[i]y=②________#text()方法可以绘制数据标签,语法:text(横坐标,纵坐标,显示内容)plt.text(x,y,'%d'% y)【例2】 某校高三首考后,汇总了学生7选3成绩以及次考科目弃考情况(注意:1表示次考弃考,0表示参加次考),ckqk.xlsx文件部分数据如图a所示,现要统计各班人均弃科目考门数和各科次考弃考比例,编写如下Python程序。请回答下列问题:(1)下列代码读取ckqk.xlsx文件,输出各班每人平均弃考门数,输出格式如图b所示,则划线处应填写的代码为________(单选,填字母)。A.groupby('班级').弃考门数.mean()B.groupby('班级',as.index=False)['弃考门数'].mean()import pandas as pddf=pd.read_excel('ckqk.xlsx')df['弃考门数']=df[['弃考科目1','弃考科目2','弃考科目3']].sum(axis=1)dfg=df.________________print(dfg)(2)统计7选3每门科目选考人数和弃考人数,并计算各科目弃考比例,Python程序如下,请在划线处填写合适的代码。courses={}for i in df.index:for k in range(1,4):subject=df.at[i,'科目%d'%k] if ①________: courses[subject]=[1,0] #[1,0]表示当前为本科目第1个人,弃考人数初值置0else: courses[subject][0]+=1abandon=df.at[i,'弃考科目%d'%k]if abandon==1: ②________dfs=pd.DataFrame(courses)dfs=dfs.Tdfs=dfs.rename(columns={0:'总人数',1:'弃考人数'})dfs['弃考比例']=round(dfs['弃考人数']/dfs['总人数']*100,1)dfs=dfs.sort_values('弃考比例',ascending=False)(3)编写代码绘制如图c所示图表,则7选3科目中次考弃考比例超30%的有①________门。为实现该功能,请在下面划线处填入合适代码。import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']plt.figure('chart',figsize=(6,4))plt.title('各科次考弃考比例分析')plt.bar(dfs.index,②________,label='弃考比例')plt.ylabel('各科弃考百分比')plt.xlabel('7选3科目');plt.legend();plt.show()思维点拨明考向 本题考查pandas对数据集的分组统计、遍历和可视化操作精点拨 (1)根据图b,分组方法gorupby的相应参数as_index=False。(2)①字典courses每对键值对的结构是:″科目″:[选科人数,弃考人数],先判断字典中是否存在相应的键,不存在,就要创建相应的键值对。②如果某同学某科目有弃考,则要对应科目弃考人数累加:course[subject][1]+=1。(3)①从图中可以找到符合条件的数据。②根据图c,柱状图的数据分别是dfs.index,dfs.[″弃考比例″]听课笔记:________________________________________________________________________________________________________________________________________________________________________________________________________【变式2】 小明收集了本校高三年级10个班级学生视力情况的相关数据,示例如图a所示。图a请回答下列问题:(1)按“学籍号”右起第二位数字的奇偶性来判断学生性别(奇为男,偶为女)。左右眼的视力均大于等于5.0则判定为视力正常。程序运行结果如图b所示,请在划线处填写合适的代码。高三年级视力正常的学生统计结果 视力正常的女生占女生总人数的:8.43% 视力正常的男生占男生总人数的:13.88%图bdf=pd.read_excel(″高三学生视力数据.xlsx″)data={″301班″:[0,0],″302班″:[0,0],″303班″:[0,0],″304班″:[0,0],″305班″:[0,0],″306班″:[0,0],″307班″:[0,0],″308班″:[0,0],″309班″:[0,0],″310班″:[0,0]}stat=[[0,0],[0,0]]n=len(df)for i in range(n):x=int(df.at[i,″学籍号″][-2])y=①________if df.at[i,″左眼″]>=5.0 and df.at[i,″右眼″]>=5.0:data[df.at[i,″班级″]][0]+=1stat[y][0]+=1data[②________ ][1]+=1stat[y][1]+=1print(″高三年级视力正常的学生统计结果″)print(″视力正常的女生占女生总人数的:″,round(stat[0][0]/stat[0][1]*100,2),″%″)print(″视力正常的男生占男生总人数的:″,round(stat[1][0]/stat[1][1]*100,2),″%″)(2)输出各班视力正常的学生情况,并绘制柱型图,划线①处应填入的代码为________(单选,填字母:A.Series/B.DataFrame);划线②处应填入的代码为________(单选,填字母:A.s[″班级″] / B.s.index)。import matplotlib.pyplot as plts=pd.①________(data,index=[″视力正常″,″本班人数″]).Tprint(s)plt.title(″高三年级各班视力正常的学生统计结果″)plt.bar(②________,s[″视力正常″]/s[″本班人数″]*100)#设置数据输出时的对齐方式,设置绘图参数,显示柱型图,代码略(3)由统计结果可知,视力正常占比最高的班级为________。1.小明同学通过Python编程为学校教务处分析当地高二年级各选课方案的人数,使用Matplotlib的pyplot模块呈现结果。程序运行界面如图a所示。请回答下列问题:(1)实现上述功能的Python程序代码如下,请在划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #显示中文df=pd.read_excel('stu.xlsx')df_xk=①________(″选考″,as_index=False).count() #按“选考”分组统计df_xk=df_xk.rename(columns={″姓名″:″人数″}) #更改“姓名”列标题为“人数”df_px=②________ #根据“人数”列数据降序排序plt.figure(figsize=(8,6))plt.title(″选课方案人数前10位对比图″)plt.legend #显示图例plt.show #显示图像(2)加框处的代码可以是下列选项中的________(多选,填字母)。(注:全部选对的得2分,选对但不全的得1分、不选或者有选错的得0分)A.plt.plot(df_px.选考[-10:],df_px.人数[-10:],label=″人数″)B.plt.bar(df_px.选考[-10:],df_px.人数[-10:],label=″人数″)C.plt.bar(df_px.选考[:10],df_px.人数[:10],label=″人数″)D.plt.bar(df_px[″选考″][1:10],df_px[″人数″][1:10],label=″人数″)E.plt.bar(df_px[″选考″][0:10],df_px[″人数″][0:10],label=″人数″)2.某网站服务器五月(31天)的后台访问记录保存在log.xlsx文件中,如图a所示:请回答下列问题:(1)定义oneday函数,功能为:读取日期为day的访问记录,将访问地区依次保存在列表city中,并返回该列表。函数代码如下:import pandas as pddf=pd.read_excel('log.xlsx')def oneday(day):city=[]for i in____________: if df.at[i,″时间戳″][0:2]==day: city.append(df.at[i,″地区″])return city划线处代码为:________(单选:A.df.index()/B.df.index/C.df.values()/ D.df.values)(2)统计该月每天华东五市的访问数据,并绘制线型图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as plteastcity=[″上海″,″南京″,″杭州″,″苏州″,″无锡″]x=[i for i in range(1,32)]y=[]t=0for i in range(1,32):①________if i<10:day=″0″+daycity=oneday(day)for j in city:if j in eastcity: ②________y.append(t)t=0plt.plot(③________)plt.show()(3)由图b可知,该网站本月访问量低于4万次天数共有________天。3.小王收集了2022年城市A全年每天的部分天气数据,保存在“2022天气.xls”文件中,部分数据如图a所示。(1)为统计2022年全年晴、阴、雨……的天数,编写了如下的Python程序:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel('2022 天气.xls')g=________print('2022 年城市 A 天气情况统计如下:')for x in g.index:print(x+':'+str(g[x])+'天')程序运行结果如图b所示,则划线处应该填入的代码为________(单选,填字母)。A.df.groupby('天气情况')['日期'].sum()B.df.groupby('天气情况')['日期'].count()C.df.groupby('天气情况').mean()D.df.groupby('天气情况').count()(2)统计2022年城市A每月平均气温并绘制线形图,部分Python程序如下,请在划线处填入合适的代码。s=[0]*12avg=[0]*12 #存储每月平均气温mdays=[0]*12x=[1,2,3,4,5,6,7,8,9,10,11,12]df['平均温度']=(df['最低温度']+df['最高温度'])/2for i in df.index:①________s[int(month)-1]+=df.at[i,'平均温度']mdays[int(month)-1]+=1for i in range(12):avg[i]=round(②________,1)y=③________plt.plot(x,y) #绘制线形图#设置绘图参数,显示如图c所示线形图,代码略。(3)由图c可知,2022年城市A最冷和最热的月份分别是________,________。4.为了督促学生寒假坚持体育锻炼,老师采用线上打卡的方式收集学生锻炼情况,数据如图a所示。为统计冬锻完成情况,编写Python程序。请回答下列问题:(1)定义outdata函数,其中参数dftmp是DataFrame数据类型,数据由图a所示的Excel表导入。函数功能是:统计每天每个学生的锻炼项目个数,返回含有“学籍号”、“姓名”和“项目个数”信息的二维列表。函数代码如下,划线处应填入的代码为________(多选,填字母)。A.dftmp.at[i,j]==″√″B.dftmp[i][j]==″√″C.dftmp.at[j,i]==″√″D.dftmp[j][i]==″√″def outdata(dftmp):a=[]for i in dftmp.index: #dftmp 的行索引itemn=0for j in dftmp.columns[4:]: #dftmp中从“跑步”开始的列标题 if ______________: itemn+=1a.append([str(df[″学籍号″][i]),df[″姓名″][i],itemn])return a(2)冬锻打卡成功的标准为累计运动15天,每天锻炼项目达到3项及以上。统计输出寒假体育锻炼达标的学生名单,并制作四个项目的运动次数对比图,部分界面如图b和图c所示。部分Python程序如下,请在划线处填写合适的代码或改正加框处代码。import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel(″sport.xls″)lst=outdata(df)print(″冬锻打卡成功名单:″)i=0;flag=[False]*len(lst)while iif : #①xjh=lst[i][0]flag[i]=True②________for j in range(i+1,len(lst)): if lst[j][0]==xjh and lst[j][2]>=3: flag[j]=True days+=1if days>=15: print(lst[i][0]+ ″/″+lst[i][1]+ ″/″+str(days)+ ″天″)③________ydl=df.count() #统计各列非空单元格数量,结果为 Seriesitem=[″跑步″,″跳绳″,″俯卧撑″,″仰卧起坐″]nums=④________plt.bar(item,nums,label=″运动次数″)5.小明为了研究某地近十年每月的温差变化,编写Python程序。以2023年4月为例,该月每天的温度数据分别保存在以8位日期字符串命名的excel文件中,部分文件如图a所示,每个文件记录了一天24小时的温度数据,如图b记录了4月28日的数据。(1)定义dv函数,功能为:读取某天的excel文件,返回当天最高温度与最低温度的差值。函数代码如下,划线处应填入的代码为________(单选,填字母)。A.df[″温度″].head(1)-df[″温度″].tail(1)B.df[″温度″].(max()-min())C.df[″温度″].max()-df[″温度″].min()D.df[″温度″].(head(1)-tail(1))def dv(dayfile): df=pd.read_excel(dayfile) diff=________________ return diff(2)定义find函数,功能为:用字典创建DataFrame对象,并筛选出4月份温差大于13的日期,输出结果如图c所示,请在划线处填入代码。日期 温差 3 0404 13.1 9 0410 13.1 15 0416 13.3 17 0418 13.8 27 0428 15.5图cdef find(r,t):dic={″日期″:r,″温差″:t}df1=pd.DataFrame(dic)df2=________________return df2(3)绘制4月份每天的温差柱形图,部分Python程序如下,请在划线处填写合适的代码。def tstr(t):if t<10:return'0'+str(t)else:return str(t)td=[];date=[]for i in range(30):dstr=tstr(①________)dayfile='202304'+dstr+'.xlsx'date.append(dayfile[4:8])td.append(②________)#设置绘图参数,代码略plt.bar(date,③________)plt.show()print(find(date,td))6.小明收集了学校某次考试成绩,部分成绩情况如图所示。小明为统计分析考试成绩,编写了Python程序。请回答下列问题:(1)处理成绩数据:小明需要将第1位同学的语文成绩由138改为135,统计并输出七选三科目的考试人数,再筛选出语文成绩大于等于100的数据行,存入df1对象。请在划线①②③处填入合适的代码。import pandas as pddf=pd.read_excel('exam.xlsx')①________ #将第1位“张吉雅”同学的语文成绩修改为135__________ #此处多选,选项在第(2)小题中for km in df.columns[6:13]: #统计并输出七选三科目的考试人数renshu=②________print(km,renshu)df1=③________(2)统计语数英总分:上述代码中划线处应填入的代码为________(多选:填字母)。A.df['语数英总分']=df['语文']+df['数学']+df['英语']B.df.语数英总分=df.语文+df.数学+df.英语C.df.'语数英总分'=df.'语文'+df.'数学'+df.'英语'D.df.['语数英总分']=df.['语文']+df.['数学']+df.['英语'](注:全部选对的得2分,选对但不全的得1分,不选或有选错的得0分)(3)小明需要根据df1对象的数据建立一张男女生语文成绩均分比较条形图,如图b所示,下列代码划线处应填入的代码为________(单选:填字母)。A.groupby('语文')['性别'].mean()B.groupby('性别').mean()C.groupby('性别')['语文'].mean()D.groupby('性别',as_index=False)['语文'].mean()import matplotlib.pyplot as pltplt.rc('font',**{'family':'SimHei'}) #设置显示中文字体g=df1.________ #此处单选,选项在第(3)小题中plt.barh(g.index,g.values)plt.title(″男女生语文成绩均分比较″)plt.show()7.为了完善某学校食堂管理、持续提高食堂服务质量,让全校师生更加精神饱满地开展工作、学习,对学校食堂进行了一些调查,调查项目共5项(具体内容略)。学校后勤管理谢老师收集了12个班级的调查结果,分别存储在“dy01.csv”、“dy02.csv”、...、“dy12.csv”等12个文件中(如图a所示),每个文件部分界面如图b所示。现需要分析12个班级学生对这5个问题的选“A”情况。谢老师用Python的Pandas模块编写了以下代码,实现相关问题的解决。请回答下列问题。(1)定义了fun_A()函数实现了统计某个班级5个问题的选“A”的人数情况。Python程序代码如下,请在划线处填入合适代码。import pandas as pddef fun_A(file):df=pd.read_csv(file)A_list=[]for i in df.columns[1:]: __________________A_list.append(c)return A_list(2)调用上述函数,处理 12 个班级每个问题的选“A”的总人数,Python程序代码如下,请在划线处填入合适代码。ans_list=[]s=″010203040506070809101112″for i in range(0,len(s)-1,2):filename=″dy″+①________+″.csv″res=fun_A(filename)ans_list.append(res)x=[″问题 1″,″问题 2″,″问题 3″,″问题 4″,″问题5″]y=[0,0,0,0,0]for i in range(5):s=0 #每个问题选 A 的人数for j in range(12):②________y[i]=s(3)经上述处理后,接着以图的形式汇报结果(如图c所示),Python程序代码如下,请回答下列问题。import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #图表显示中文字体plt.title(″每个问题选 A 的总人数″)__________plt.legend()plt.show()划线处代码合适的是________(单选,填字母)。A.plt.bar(x,y)B.plt.bar(x,y,label='A选项')C.plt.plot(x,y)D.plt.plot(x,y,label='A选项')(4)调查数据的有效问卷共550份,从图c中可以观察出有________(填数字)个问题的选“A”总人数低于60%。8.校运动会举行“四项全能比赛”,分别举行100米、立定跳远、1500米、铅球。规则如下:每一项成绩独立比较,取前8名按18,14,12,10,8,6,4,2计分,四个项目比完后,将总分求和,分数最高者得胜。现有未计入铅球成绩的“四项全能.xlsx”分数表和记录铅球原始成绩的“铅球.txt”分数表(保证成绩没有相同),通过处理输出冠军及其成绩。请在划线处填入合适的代码。import pandas as pdfen=[18,14,12,10,8,6,4,2]f=open(____(1)____,'r',encoding='UTF-8')a=[]for i in f.readlines():t=i.strip().split(',')if t[0]=='姓名':continuea.append([t[0],float(t[1])])n=len(a)for i in range(n-1):for j in range(n-i-1): if____(2)____:a[j],a[j+1]=a[j+1],a[j]df=pd.read_excel(″四项全能.xlsx″,index_col='姓名') #将姓名列作为indexfor i in range(n):if i<8:s=fen[i]else:s=0(3)____Sum=____(4)____df['总分']=Sumdf=____(5)____print(df.head(1)))9.收集某地2022年全年的天气数据,按日期顺序储存在“tqqk.xlsx”文件中,部分界面如图a所示。为计算每月空气质量为优的日期中的平均温差。编写Python程序,请回答下列问题:(1)计算并筛选出空气质量为优的记录信息,Python程序段如下,请在划线处应填入合适的代码。import pandas as pddf=pd.read_excel(″tqqk.xlsx″)df[″温差″]=df[″最高温度″]-df[″最低温度″]dfy=________________dfy=dfy.sort_values(″日期″,ignore_index=True)(2)计算满足条件的日期中的平均温差。并绘制线形图,部分Python程序段如下,请在划线处填入合适的代码。import matplotlib.pyplot as plti=0avewc=[] #月平均温差while ij=i+1tot=dfy.at[i,″温差″]while j<=len(dfy)-1 and dfy.at[i,″日期″][5:7]==dfy.at[j,″日期″][5:7]:①________j+=1avewc.append(round(tot/(j-i),2))②________x=['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']y=③________plt.plot(x,y,label=″月平均温差″)#设置绘图参数,显示如图b所示线型图,代码略(3)由图b可知,月平均温差超过8的月份共有________个。10.某单位正式员工的基本工资计算公式为:基本工资=岗位工资+薪级工资,如图a和图b,分别对应salary1.xlsx文件和salary2.xlsx文件。员工入职单位一年后转正,定岗位等级为十三级,根据学历定起始的薪级,中专2级、大专5级、本科7级、硕士11级、博士14级。转正定级后,薪级每年增加一级。为统计分析该单位员工的工资情况,编写Python程序。请回答下列问题:(1)定义岗位工资和薪级工资标准查询的两个函数。gwgz函数功能为:读取salary1.xlsx文件,根据岗位等级m,返回对应的工资标准,例如m=“十三级”,gwgz(m)=1585。函数代码如下,划线处应填入的代码为________(单选,填字母)。A.df1.'岗位等级'[i]==mB.df1[岗位等级][i]==mC.df1['岗位等级'][i]==mD.df1[i]['岗位等级']==mimport pandas as pddef gwgz(m):df1=pd.read_excel('salary1.xlsx')for i in df1.index:if________: return df1.at[i,'工资标准']xjgz函数功能为:根据薪级等级n,返回对应的工资标准,例如n=10,xjgz(n)=661,代码略。(2)现有员工信息表info.xlsx,所有员工都已经过了实习期,如图c。统计各学历的人数和基本工资的平均值,编写Python程序。请回答下列问题:import matplotlib.pyplot as pltimport datetimedic={'中专':2,'大专':5,'本科':7,'硕士':11,'博士':14}time=datetime.date.today() #获得当前的年月日now_year=time.year #获取年份now_month=time.month #获取月份df=pd.read_excel('info.xlsx')for i in df.index:station=df.at[i,'岗位等级']past_year=int(df.at[i,'入职年月'][:4])past_month=int(df.at[i,'入职年月'][5:])if now_month >=past_month:grade=now_year-past_year-1else:grade=now_year-past_year-2grade+=①________df.at[i,'基本工资']=②________ #计算员工的基本工资#对各学历的员工计算平均基本工资和统计人数df1=df.groupby('学历',as_index=False).agg({'基本工资':'mean','姓名':'count'}) #修改列名df2=df1.rename(columns={'基本工资':'平均工资',″姓名″:″人数″}) #图表对象初始化,代码略plt.bar(df2.学历,df2.平均工资,label=″平均工资″) #绘制柱形图plt.plot(df2.学历,③________,label=″人数″) #绘制线形图plt.legend()plt.show()(3)目前该单位平均工资为3867.33元,由图d可知,学历为________的员工,他们的平均工资与公司平均工资相差最大。专题7 数据统计与可视化的程序实现知识点知识梳理1.分析 Pyplot2.Series DataFrame 二 0 类型 字符串型 相等长度 index 字典记法 属性3.(1)0 (2)DataFrame (3)列4.属性 字典5.数量 求平均值 分组 排序 纵向 升序 删除数据6.(1)pyplot (3)plot() title()经典案例例1 (1)D (2)①mdays[m] ②sm+=sd ③pm (3)5变式1 (1)AC (2)1 (3)D (4)①df2.index ②df2[″PM2.5″][i]解析 本题考查Pandas数据处理相关知识。(1)将“地区名称”符合条件的数据行筛选出来,可以采用字典法和属性法分别表示某列值。(2)参数axis=1表示处理列,即删除指定的列。(3)同一个地市中取PM2.5浓度值最高的数据行可以用分组函数groupby()和求最大值函数max()实现。A选项分组依据不对。B选项的函数格式不对。C选项是按PM2.5先升序排序,然后求所有数据中的最大值,此时PM2.5最大值只有一个数据,无法求出各个地市的最大值。(4)①plt.bar()函数绘制柱形图需要两个参数:x轴数据和y轴数据(每个x对应的纵轴数据),由题中图c和图d可知,横坐标是各个地区的名称,而由于数据框df2是分组后的结果,地区名称列已经成为了索引列。②空由程序和标签的效果图可知df2.index[i]取出了每行数据的横坐标值,对应的纵坐标值是df2[″PM2.5″][i]。例2 (1)B (2)①subject not in courses或not subject in courses ②courses[subject][1]+=1 (3)① 5 ②dfs[″弃考比例″]变式2 (1)①x%2 ②df.at[i,″班级″]或df[″班级″][i]或df.班级[i] (2)①B ②B (3)303班解析 本题考查Pandas数据统计。(1)①从语句x=int(df.at[i,″学籍号″][-2])来看,x是右起第二位数字,根据其奇偶性来判断学生性别,因此y的值为除2后的余数。②data是一个保存各班学生数据的字典,从语句data[df.at[i,″班级″]][0]+=1来看,索引为0存储视力正常人数,从第(2)题来看,利用data将创建一个数据集,索引为1的数据项存储本班人数。(2)①data字典中,包含了10个键,因此创建10个字段,属于DataFrame数据类型。②对创建的DataFrame对象进行T行列转置,原对象的columns成为转换后的index。(3)从图表中可以得到占比最高的班级名称。当堂过关检测1.(1)①df.groupby ②df_xk.sort_values(″人数″,ascending=False) (2)CE解析 (1)①对数据集df采用groupby命令进行分组。②对df_xk对象采用sort_values命令进行排序。(2)选课方案人数前10位对比,可以采用[:10]或[0:10]进行切片获取前10个数据。2.(1)B或df.index (2)①day=str(i) ②t+=1 ③x,y (3)5解析 (1)从表达式df.at[i,″时间戳″][0:2]来看,i表示是df对象的索引。(2)①从语句day=″0″+day来看,必须对day赋初值,day是从1至31的字符日期。②t表示出现的次数。③采用x和y列表绘制图像。(3)略。3.(1)B (2)①month=df['日期'][i][5:7]或month=df.at[i,'日期'][5:7]或month=df.日期[i][5:7] ②s[i]/mdays[i] ③avg (3)2 8解析 (1)全年晴、阴、雨属于天气情况,因此先对天气情况分组,表达式str(g[x])为Series对象的Values值,因此按日期分组,且分组的索引就是分组的类别,再对其中一列进行计数。(2)①month是每条记录的月份,df['日期'][i]表示第i天的日期。②avg统计每月的平均温度,每月的温度和累加到列表s中,mdays[i]表示某月的天数。③y轴为每个月的平均温度avg。(3)略。4.(1)AD (2)①not flag[i] and lst[i][2]>=3 ②days=1 ③i+=1 ④ydl[4:]或ydl.values[4:]解析 (1)变量i为行索引,变量j为列标题,可以用字典法,也可以用at函数来表示某个单元格名单。(2)略。5.(1)C (2)df1[df1.温差>13]或df1[df1[″温差″]>13] (3)①i+1 ②dv(dayfile) ③td解析 (1)df[″温度″].max()表示当天最高温度,df[″温度″].min()为最低温度。(2)对温差进行筛选。(3)①变量i的值为0至29,而日期为1号至30号。②调用dv函数求每天的温差。③y轴为温差td。6.(1)①df.at[0,'语文']=135 ②df[km].count() ③df[df['语文']>=100] (2)AB (3)C解析 (1)①张吉雅的索引为0,他的成绩修改采用行列法表示。②km为七选三科目中的一个学科,每个学科有得分个数为考试人数,因此可以采用count函数统计。③筛选出语文成绩大于等于100的数据存入df1对象。(2)略。(3)建立一张男女生语文成绩均分比较,因此需按性别进行分组再进行统计语文平均值。7.(1)c=len(df[df[i]==″A″]) (2)①s[i:i+2] ②s+=ans_list[j][i] (3)B (4)2解析 (1)遍历每个问题,筛选出每个问题答案是A的记录数。(2)①从字符串s取出相应班级的数字。调用函数把结果保存在ans_list中。②将每个问题每个班级的A等人数进行累加。(3)略。(4)略。8.(1)'铅球.txt' (2)a[j][1]解析 本题考查Pandas数据统计。(1)略。(2)从前往后按铅球成绩实现降序排序a[j][1]9.(1)df[df.空气质量=='优'] (2)①tot+=dfy.at[j,″温差″] ②i=j ③avewc (3)6解析 (1)筛选出空气质量字段等于优的记录。(2)①tot表示符合条件的温差累加和。②当前位置j已经不满足条件,变量i将从j的位置开始枚举。③纵轴为月平均温差avewc。(3)略。10.(1)C (2)①dic[df.at[i,'学历']] ②gwgz(station)+xjgz(grade) ③df2.人数 (3)博士解析 本题考查Pandas数据处理。(1)根据岗位等级m,返回对应的工资标准。(2)①grade表示工作年限,其值为参加工作时间加上学历时间(读大学的年数)。②计算员工的基本工资,基本工资=岗位工资+薪级工资。③线性图的纵轴为人数。(3)略。 展开更多...... 收起↑ 资源预览