2025届信息技术一轮复习讲义:专题7 数据统计与可视化的程序实现

资源下载
  1. 二一教育资源

2025届信息技术一轮复习讲义:专题7 数据统计与可视化的程序实现

资源简介

专题7 数据统计与可视化的程序实现
学业要求 知 识 点 学业水平等级
1.能根据实际要求,对表格数据进行简单整理、计算和可视化呈现 1
2.能采用合适的方法分析数据和可视化呈现数据,并能从中提取有用信息,形成结论 2
3.会使用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 pd
def 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 plt
def tstr(t):
if t<10:
retrun '0'+str(t)
else:
retrun str(t)
pm=[0]*12
mdays=[31,28,31,30,31,30,31,31,30,31,30,31]
#2021年每月天数
for m in range(12):
sm=0
mstr=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 pd
import matplotlib.pyplot as plt
df=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[″地区名称″]]==city
C.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 pd
df=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个人,弃考人数初值置0
else:
     courses[subject][0]+=1
abandon=df.at[i,'弃考科目%d'%k]
if abandon==1:
     ②________
dfs=pd.DataFrame(courses)
dfs=dfs.T
dfs=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 plt
plt.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%
图b
df=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]+=1
stat[y][0]+=1
data[②________ ][1]+=1
stat[y][1]+=1
print(″高三年级视力正常的学生统计结果″)
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 plt
s=pd.①________(data,index=[″视力正常″,″本班人数″]).T
print(s)
plt.title(″高三年级各班视力正常的学生统计结果″)
plt.bar(②________,s[″视力正常″]/s[″本班人数″]*100)
#设置数据输出时的对齐方式,设置绘图参数,显示柱型图,代码略
(3)由统计结果可知,视力正常占比最高的班级为________。
1.小明同学通过Python编程为学校教务处分析当地高二年级各选课方案的人数,使用Matplotlib的pyplot模块呈现结果。程序运行界面如图a所示。请回答下列问题:
(1)实现上述功能的Python程序代码如下,请在划线处填入合适的代码。
import pandas as pd
import matplotlib.pyplot as plt
plt.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 pd
df=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 plt
eastcity=[″上海″,″南京″,″杭州″,″苏州″,″无锡″]
x=[i for i in range(1,32)]
y=[]
t=0
for i in range(1,32):
①________
if i<10:
day=″0″+day
city=oneday(day)
for j in city:
if j in eastcity:
     ②________
y.append(t)
t=0
plt.plot(③________)
plt.show()
(3)由图b可知,该网站本月访问量低于4万次天数共有________天。
3.小王收集了2022年城市A全年每天的部分天气数据,保存在“2022天气.xls”文件中,部分数据如图a所示。
(1)为统计2022年全年晴、阴、雨……的天数,编写了如下的Python程序:
import pandas as pd
import matplotlib.pyplot as plt
df=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]*12
avg=[0]*12 #存储每月平均气温
mdays=[0]*12
x=[1,2,3,4,5,6,7,8,9,10,11,12]
df['平均温度']=(df['最低温度']+df['最高温度'])/2
for i in df.index:
①________
s[int(month)-1]+=df.at[i,'平均温度']
mdays[int(month)-1]+=1
for 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=0
for j in dftmp.columns[4:]: #dftmp中从“跑步”开始的列标题
     if ______________:
       itemn+=1
a.append([str(df[″学籍号″][i]),df[″姓名″][i],itemn])
return a
(2)冬锻打卡成功的标准为累计运动15天,每天锻炼项目达到3项及以上。统计输出寒假体育锻炼达标的学生名单,并制作四个项目的运动次数对比图,部分界面如图b和图c所示。部分Python程序如下,请在划线处填写合适的代码或改正加框处代码。
import pandas as pd
import matplotlib.pyplot as plt
df=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+=1
if days>=15:
     print(lst[i][0]+ ″/″+lst[i][1]+ ″/″+str(days)+ ″天″)
③________
ydl=df.count() #统计各列非空单元格数量,结果为 Series
item=[″跑步″,″跳绳″,″俯卧撑″,″仰卧起坐″]
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
图c
def 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 pd
df=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 plt
plt.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 pd
def 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 plt
plt.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 pd
fen=[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]=='姓名':
continue
a.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='姓名') #将姓名列作为index
for i in range(n):
if i<8:
s=fen[i]
else:
s=0
(3)____
Sum=____(4)____
df['总分']=Sum
df=____(5)____
print(df.head(1)))
9.收集某地2022年全年的天气数据,按日期顺序储存在“tqqk.xlsx”文件中,部分界面如图a所示。
为计算每月空气质量为优的日期中的平均温差。编写Python程序,请回答下列问题:
(1)计算并筛选出空气质量为优的记录信息,Python程序段如下,请在划线处应填入合适的代码。
import pandas as pd
df=pd.read_excel(″tqqk.xlsx″)
df[″温差″]=df[″最高温度″]-df[″最低温度″]
dfy=________________
dfy=dfy.sort_values(″日期″,ignore_index=True)
(2)计算满足条件的日期中的平均温差。并绘制线形图,部分Python程序段如下,请在划线处填入合适的代码。
import matplotlib.pyplot as plt
i=0
avewc=[] #月平均温差
while ij=i+1
tot=dfy.at[i,″温差″]
while j<=len(dfy)-1 and dfy.at[i,″日期″][5:7]==dfy.at[j,″日期″][5:7]:
①________
j+=1
avewc.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]==m
B.df1[岗位等级][i]==m
C.df1['岗位等级'][i]==m
D.df1[i]['岗位等级']==m
import pandas as pd
def 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 plt
import datetime
dic={'中专':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-1
else:
grade=now_year-past_year-2
grade+=①________
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.分析 Pyplot
2.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)略。

展开更多......

收起↑

资源预览