2025届信息技术一轮复习练习:专题7 数据统计与可视化的程序实现(含答案)

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

2025届信息技术一轮复习练习:专题7 数据统计与可视化的程序实现(含答案)

资源简介

专题7 数据统计与可视化的程序实现
知识点 利用Pandas模块进行数据统计
1.小明收集了某超市部分商品2022年上半年每天的价格数据并保存在″data.xlsx″文件中,如图所示。
要分析某商品一个月内的价格稳定情况,需要将本月每天(除第一天外)价格波动的绝对值加起来(价格波动=当天价格-前一天价格),其值越小,价格越稳定。
为统计该超市6月份各商品价格稳定情况,编写如下Python程序。请回答下列问题:
(1)获取6月份各商品的价格,划线处填入的代码为________(多选,填字母)。
A.df[df[″日期″]>=20220601]
B.df[″日期″>=20220601]
C.df[df.日期>=20220601]
D.df[df[″日期″]]>=20220601
import pandas as pd
df=pd.read_excel(″data.xlsx″)
df=______________________
df=df.reset_index(drop=True) #重新设置索引,从0开始递增
(2)绘制6月份价格稳定情况线形图,部分Python程序如下,请在划线处填入合适代码。
import matplotlib.pyplot as plt
cols=df.columns[1:]  #存储各商品名称
n=①________
m=len(cols)
diff=[0]*m
for i in range(m):
s=0
for j in range(1,n):
day_diff=abs(df[cols[i]][j]-df[cols[i]][j-1])  #计算每天价格波动
s+=day_diff
②________
x,y=cols,diff
plt.③________
plt.show()
2.小明收集了梅西2005年至2023年国家队比赛数据,保存在“梅西国家队详细比赛数据.xlsx”文件中,部分数据如图a所示,现利用Pandas模块处理数据。
为统计分析梅西2019~2023年各项赛事的平均进球情况,编写Python程序。请回答下列问题:
(1)读取“梅西国家队详细比赛数据.xlsx”数据,筛选出2019年以来的各项比赛数据。函数代码如下,划线处应填入的代码为________(单选,填字母)。
A.df[df[″年份″]>=2019]     B.df[″年份″]>=2019
C.df[″年份″>=2019] D.df[df[″年份″]]>=2019
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel(″梅西国家队详细比赛数据.xlsx″) #读取表格数据
df1=________
(2)统计各项赛事的平均进球数量。由于原始数据“赛事”列中部分赛事未显示年份(如图a所示),无法进行跨年度统计,因此需要在赛事名前添加年份信息。例如:“国际友谊赛”根据年份修改为“2019国际友谊赛”,“2022世界杯预选赛”则不修改。具体过程代码如下,请补充完整。
for i in df1.index:
ss=df1.at[i,″赛事″] #根据行标签、列标签选取单个值,如“国际友谊赛”
______________
if not(nf.isdigit()): #isdigit()判断是否为数字,是则返回 True
    df1.at[i,″赛事″]=str(df1.at[i,″年份″])+df1.at[i,″赛事″]
g=df1.groupby(″赛事″,as_index=False).mean() #以“赛事”为关键字,分组求平均
(3)为统计2019年以来,梅西进球平均数排名前三的赛事,考虑可能存在并列情况,具体过程代码如下,请补充完整。
g=g.sort_values(″进球″,ascending=False) #以“进球”为关键字,降序排序
g1=g.head(3) #取前三项记录
m=g1[″进球″].min() #求最小值
bls=0
bl=len(g1[g1[″进球″]==m]) #求序列长度
for i in g.index:
if g.at[i,″进球″]==m: #根据行标签、列标签选取单个值
   ________
g2=g.head(3+bls-bl)
(4)以下是2019~2023年梅西国家队比赛平均进球数排名前三赛事统计图,则划线处的代码应为
plt.title(″2019~2023梅西国家队比赛平均进球数排名前三赛事统计图″)
x=g2[″赛事″]
y=________
plt.bar(x,y)
plt.show()
3.小明收集了2022年全国各省份人均消费支出相关数据,部分数据如图a所示,为了统计分析处理各城市消费情况,编写如下Python程序。请回答下列问题:
(1)统计各个区域超全国总消费平均值的省份数量,请在划线处填入合适的代码。
import pandas as pd
df=pd.read_excel(″xiaofei.xlsx″)
df[①________]=df.sum(axis=1)
avg=df.总消费.mean()
dic={″华北″:0,″东北″:0,″华东″:0,″华中″:0,″华南″:0,″西南″:0,″西北″:0,}
for i in ②________:
if df.总消费[i]>=avg:
dic[③________]+=1
(2)若要筛选出总消费最高的5个省份,程序划线处的代码为________(多选:填字母)(注:全部选对的得2分,选对但不全的得1分,不选或有选错的得0分)。
res=________
print(″总消费最高的5个省份为:\\n″,list(res.省份))
A.df.sort_values(″总消费″,ascending=False).head(5)
B.df.sort_values(″总消费″).tail(5)
C.df.sort_values(″总消费″)[0:5]
D.df.sort_values(″总消费″,ascending=False)[0:5]
(3)统计并绘制2022年各区域总消费平均值比较图,如图b所示。部分Python程序如下,请在划线处填入合适的代码。
import matplotlib.pyplot as plt
df1=df.groupby(″区域″,as_index=True).mean()
plt.bar(________,df1.总消费)
plt.title(″全国各区域总消费平均值比较图″)
plt.ylim(20000,36000)
plt.show()
4.某市中考体测规定,考生要在6个体育项目中选3个进行测试,少选或多选的同学不符合报名要求。全市1万多名考生的报名结果(1表示选择该项目)保存在文件“tycs.csv”中,如图a所示。请回答下列问题:
(1)下列有关数据处理的说法正确的是________(多选,填字母)。
A.在对数据进行处理前要进行数据整理,解决数据缺失、数据异常、逻辑错误等问题
B.编程处理数据能提高数据分析和挖掘的效率,目前只能采用Python语言实现
C.文本数据处理一般过程包括分词、特征提取、数据分析、结果呈现
D.需要将某个整体中各部分的大小和比例进行可视化展示时,可采用饼图、环形图等
E.可使用公式“=SUM(D5,I5)”对Excel中第5行D列至I列中的数据进行求和
(2)定义函数filter_data功能为:读取某市报名的CSV文件,返回该市所有报名符合要求(在6个体育项目中选择3个)的学生信息。函数代码如下,划线处应填入的代码为________。
import pandas as pd
def filter_data(datafile):
df=pd.read_csv(datafile) #读取文件datafile中的数据
df['合计']=df.count(axis=1)-3 # count 函数统计每行中非空数据的个数
df1=____________________
return df1
(3)统计该市每个组合报名的人数并绘制柱形图,如图b所示,其中各体育项目名称用相应字母(A~F)代替。部分Python程序如下,请在划线处填写合适的代码。
import matplotlib.pyplot as plt
df=filter_data('tycs.csv')
d={'A':'800米跑','B':'跳绳','C':'游泳','D':'引体向上','E':'掷实心球','F':'立定跳远'}
result={}
for i in df.index:
①________
for key in d:
t=df.at[i,d[key]]
if t==1:
     choice+=key
if choice in result:
②________
else:
result[choice]=1
x=result.keys() #获取字典 result 的键
y=result.values() #获取字典 result 的值
plt.bar(x,y) #绘制柱形图
#设置绘图参数,显示如图b所示柱形型图,代码略
(4)由图b可知,报名人数最多的组合为________(填写体育项目的名称)。5.小红从网上下载收集了浙江省部分海岛2022年10月-12月的天气预报信息,存储在Excel文件中,包含预报时间、站点编号、浪高、温度、风向以及风速,如图a所示,海浪等级信息如图b所示,她要编写一个Python程序快速对海岛天气数据进行分析。
(1)为了获取该数据集中预报信息最多的海岛站点编号及该岛某月各风浪等级的预报次数,小红需要对图a所示的表中数据进行整理,下列说法正确的是________(多选,填字母)。
A.第4行和第5行数据重复,删除其中一行即可
B.通过检测发现D7单元格的数据存在错误,应进行修正
C.删除“风向”和“风速”两列数据,不影响分析结果
D.“浪高”为0的数据没有任何价值,可以直接删除
(2)小红利用整理好的数据,编写并运行程序,求出预报信息最多的海岛站点编号并根据给定月份,分析该月的数据并可视化,可视化结果如图c所示,请在划线处填入合适的代码。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #设置中文字体显示
df=pd.read_excel(″浙江省海岛预报信息.xls″)
def zhengli():  #整理数据
df[″风浪等级″]=″无浪″
for i in df.index:
t=df[″浪高″][i]
if t>100:
    df[″风浪等级″][i]=″大浪″
elif t>25:
    df[″风浪等级″][i]=″中浪″
elif t>10:
    df[″风浪等级″][i]=″小浪″
①________
    df[″风浪等级″][i]=″微浪″
for i in df.index: #截取″预报时间″列中的月份日期信息,添加到″月份″列和″日期″列
df.at[i,″月份″]=str(df.at[i,″预报时间″])[5:7]
df.at[i,″日期″]=str(df.at[i,″预报时间″])[8:10]
zhengli()
df1=df.groupby(②________,as_index=False).count()
df1_sort=df1.sort_values(″预报时间″,ascending=False,ignore_index=True)
top=df1_sort[″站点编号″][0]
print(″预报信息最多的海岛站点编号是:″,top)
df2=df[df.站点编号==top]
m=input(″请输入要查询的月份:″)
df3=③________
df3=df3.groupby(″风浪等级″).预报时间.count()
x=df3.index
y=df3.values
plt.plot(x,y)
#设置绘图参数,绘制如图c所示线形图,代码略。
(3)观察图c图表可知,该海岛12月出现天数最多的风浪等级为________。
6.为研究某项疾病与年龄的关系,某医院对以前的诊断记录进行整理和分析,整理部分数据如图a所示。
(1)观察图a所示数据,发现年龄列数据格式不一致为了便于数据分析,下列操作合适的是________(单选,填字母)。
A.删除“年龄”列数据
B.将“年龄”列含有中文字的记录删除
C.将“年龄”列数据转为文本类型
D.将“年龄”列含有中文字的记录修改为只包含数字的年龄
(2)将数据整理好后,为了统计0-18、19-35、36-60、61以上(含61)四个年龄段的某疾病患病人数占该疾病总患病人数的比例,并绘制如图b示图表,编写如下Python程序,请在划线处填入合适代码。
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel('data.xlsx')
tp=input('请输入疾病类型:')
df1=①________  #筛选tp疾病的数据
count=[0]*4
for i in df1.index:
age=df.at[i,'年龄']
if ②________:
count[0]+=1
elif age<=35:
count[1]+=1
elif age<=60:
count[2]+=1
else:
count[3]+=1
x=['0-18','19-35','36-60','61以上']
y=[]
for i in range(4):
y.append(③________)
plt.bar(x,y) #显示不同年龄段患该病的人数百分比
#设置图表其他参数,代码略
(3)观察图b,“疾病A”患病比例最大的年龄段为________。
(4)若想获取61岁及以上的人群中,患病率最高的10种疾病,编写如下程序。
def get_head10(df,age):
return df.疾病.head(10)
print(get_head10(df,61))
上述程序段中方框处可选代码为:①df=df.sort_values(″年龄″,ascending=False) ②df=df[df.年龄>=age]③df=df.groupby(″疾病″,as_index=False).count()
则加框处应填代码的顺序依次为________(单选,填字母)。
A.①②③ B.①③②
C.②①③ D.②③①
7.游老师统计了2013年至2021年每年专科、本科、硕士和博士的毕业人数(单位:万人),数据保存在“Graduate.csv”中,如图a所示。
年份 专科 本科 硕士 博士 共计
2013年 318 319 51 5
2014年 318 341 53 5
2015年 322 358 55 5
2016年 329 374 56 5
2017年 351 384 57 5
2018年 366 386 60 6
2019年 363 394 63 6
2020年 376 420 72 6
2021年 398 428 77 7
图a
2014年 增长率为:0.0346 2015年 增长率为:0.0321 2016年 增长率为:0.0324 2017年 增长率为:0.0432 2018年 增长率为:0.0263 2019年 增长率为:0.0098 2020年 增长率为:0.0581 2021年 增长率为:0.0412 毕业人数增长率最高的年份是:2020年
图b
(1)统计每年的毕业总人数并绘制柱状图,请在划线处填写合适的代码。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['simhei']
df=pd.read_csv(″Graduate.csv″)
df.共计=①________
x=df[″年份″]
y=②________
plt.bar(x,y)
#设置绘图参数,绘制线型图,代码略
(2)游老师编写如下代码用来统计毕业人数增长率最高的年份,增长率相同的年份同时输出。请在划线处填写合适的代码。输出结果如图b所示
注:2014年增长率=(2014年毕业人数-2013年毕业人数)/2013年毕业人数
data=df[″共计″].values.tolist()  #将每年毕业总人数数据转换成列表
year=[″2014年″,″2015年″,″2016年″,″2017年″,″2018年″,″2019年″,″2020年″,″2021年″]
rate=[];imax=[0]
for i in range(1,len(data)):
rate.append(round(①________,4))
for i in range(len(rate)):
print(year[i],″增长率为:″,rate[i])
for i in range(1,len(rate)):
if ②________:
imax=[i]
elif rate[imax[0]]==rate[i]:
imax.append(i)
print(″毕业人数增长率最高的年份是:″,end=″″)
for i in range(len(imax)):
print(③________)
8.小陈在气象部门得到了一份2022年不同城市的月平均日照时数(单位:kW·h/m2/day)数据,存放在Excel文件“日照.xlsx”中。部分界面如图a所示。
请回答下列问题:
(1)第1步,小陈编写了如下代码。
import pandas as pd
df=pd.read_excel(″日照.xlsx″)
mdays=[31,28,31,30,31,30,31,31,30,31,30,31]
months=list(df.columns)
for i in df.index:
s=0
for j in range(12):
m=df.at[i,months[j+1]]
s+=mdays [j]
df.at[i,″年度平均″]=round(s/365,2)
该程序实现的功能是________。
(2)第2步,仅考虑平均日照时数因素,选出最适合用光伏发电给智能农业大棚提供能源的十个城市。划线处应填入的代码为________(单选,填字母)。
df=________
A.df.sort_values(″城市名″,ascending=False).head(10)
B.df.sort_values(″城市名″).tail(10)
C.df.sort_values(″年度平均″,ascending=False)[:10]
D.df.sort_values(″年度平均″,ascending=False).tail(10)
#输出结果如图b所示,代码略
(3)①小陈想在家乡温州建一个智能大棚,采用光伏发电加蓄电设备供电,面积为1平方米的光伏板容量约为0.3 kW/块,光伏的充放电效率为80%,大棚每天消耗的最低电能约为30 kW·h,为确保每月能正常供电,需要1平方米的光伏发电板共________块。
(日均发电量=电池板的容量/块×块数×平均日照时数×充放电效率)
建设光伏发电设备前要先获得当地的平均日照时数情况,小陈通过如下代码获取相关数据。
res=df[df[″城市名″]==″温州市″]
res=res.values[0][1:13].②________
print(″温州市月平均日照最小值为”,res)
9.某教师收集学生一节课40分钟专注度情况的测试数据,以帮助自己更好地制定教学策略。测试数据存储在“数据.txt”文件中,每行对应一位学生。40分钟分为8个时段记录数据,0—5分钟为第1个时段,5—10分钟为第2个时段……35—40分钟为第8个时段。每个时段都设置了10个测试点(即每个时段包含10个数据结果),按时间顺序存储,每行共80个数据。其中“1”表示专注,“0”表示不专注,数据间用逗号隔开,如图a所示。
根据题意完成以下内容:
(1)进行数据预处理,将“数据.txt”文件的每行数据分组计算出对应8个时段的结果(10个数据为一组计算平均值),结果如图b所示
f=open(″数据.txt″,″r″,encoding='utf-16') #打开文件
file_data=f.readlines() #读取所有行
data=[]
for row in file_data: #逐行读取数据
s=list(map(int,row.split(″,″))) #将字符按逗号分割,转为整型,以列表形式存储
line=[];i=0
while i①________
for j in range(10):
     total+=②________
i=i+10
line.append(total/10*100)  #计算平均值(如 10 个数中有 5 个 1 则为 50.0)
data.append(line)
f.close()
(2)调用处理后的文件数据,统计分析学生专注度情况。整节课平均专注度大于等于65为优秀,求班级内整节课专注度为优秀的学生数量。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams[″font.sans-serif″]=[″SimHei″]
#图表显示中文字体
col=[″T1″,″T2″,″T3″,″T4″,″T5″,″T6″,″T7″,″T8″]
df=pd.DataFrame(data,columns=col) #创建DataFrame对象,指定数据列名称
df[″个人平均″]=df.mean(axis=1) #新增一列,存放学生整节课的平均专注度
df1=________ #筛选专注度优秀的学生
print(″专注度优秀的学生人数:″,len(df1))
(3)计算每个时段学生的平均专注度,绘制专注度折线图,如图c所示。
df2=df.mean()
x=col
plt.xlabel(″时段″);plt.ylabel(″学生专注度″);plt.show()
则在方框内按顺序应填入________(单选,填字母)。
①y=df2.values[:8] ②y=df2.index[:8] ③plt.plot(x,y) ④df2.plot(x,y)
A.①③ B.①④
C.②③ D.②④
(4)初步分析图像可知,该教师选择在________时段讲授重难点更合适(单选,填字母)。
A.0—10分钟 B.10—20分钟
C.20—30分钟 D.30—40分钟
10.为统计分析不同年级学生名字中的常用字,小王同学收集了本校所有学生的名字,并以入学年份为文件名分别保存在Excel文件中,文件如图a所示,每个文件包含了学生的年级、姓名和性别信息,如图b所示。
编写Python程序。请回答下列问题:
(1)定义getname函数,功能为:读取某年级的Excel文件,找出文件中同性别的学生,
将学生姓名中的每个字(不包含姓氏,没有复姓学生)提取出来存储在列表mz中并返回列表。函数代码如下,请在划线处填写合适的代码。
def getname(nj,xb):
mz=[]
df=pd.read_excel(nj+″学生名单.xlsx″)
for i in df.index:
xm=df.at[i,″姓名″]
if ①________:
     for m in xm[1:]:
       mz.append(m)
return ②________
(2)小王想统计女生名字中出现最频繁的10个字,部分Python程序如下,请在划线处选择合适的代码。
import pandas as pd
xb=input(″请输入性别:″) #输入性别″女″
nianji=[″2020级″,″2021级″,″2022级″]
mzs=[] #存储姓名中的字
for nj in nianji:
mzs=mzs+getname(nj,xb)
data={'字':mzs,'个数':[1]*len(mzs)}
df1=pd.DataFrame(data)
df2=df1.groupby(″字″,as_index=False).count() #统计每个字出现的次数
df3=________________
划线处应选择的代码是________(单选,填字母)。
A.df2.sort_values( ″个数″,ascending=True)[:10]
B.df2.sort_values(″字″,ascending=False).tail(10)
C.df2.sort_values(″字″,ascending=True).tail(10)
D.df2.sort_values(″个数″,ascending=False).head(10)
(3)将统计结果(10个最频繁的字)绘制成柱形图,部分Python程序如下,请在划线处填写合适的代码。
import matplotlib.pyplot as plt
plt.rcParams [ 'font.sans-serif']=[ 'SimHei']
#图表显示中文字体
plt.title(xb+″生取名常用字″)
plt.bar(df3.字,__________)
plt.show()
(4)由图c可知,全校女生名字中出现过30次以上的字有________(填数字)个。
11.某校区举行优秀学员的评比。教务处统计了本校区的相关数据并存储于“cj.xlsx”文件中,学生数据按照班级先后次序存储,如1班之后是2班学生数据。文件部分内容如图a所示。为分析本次评比的结果情况,编写Python程序。请回答下列问题:
(1)读取“cj.xlsx”文件,为每个学生补充班级名称(1班到4班),班级人数存储在列表num中。请在划线①②③处填入合适的代码。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['KaiTi','SimHei']
num=[29,31,30,32] #存储4个班级的人数
df=pd.read_excel(①________)
k=0
②________
for i in df.index:
if i==end:
③________
end+=num[k]
df.at[i,″班级″]=str(k+1)+ ″班″
(2)#优秀学员的评比规则为:学业分数不低于80分,德育等级为A。统计每个班级优秀学员人数,并绘制图表显示,如图b所示,部分Python程序如下。
dfs=df[df[″学业分数″]>=80]
dfs=①________
dfg=
dfg=dfg.rename(columns={″学业分数″:″人数″}) #将″学业分数″重命名为″人数″
plt.bar(dfg[″班级″],③________)
plt.title(″班级优秀人员对比图″);plt.xlabel(″班级″)
plt.ylabel(″人数″);plt.show()
请在划线处填入合适的代码。
(3)加框处应填入的代码是________(单选,填字母)
A.dfs.groupby(″班级″,as_index=False).学业分数.count()
B.dfs.groupby(″班级″,as_index=False).学业分数.sum()
C.dfs.groupby(″班级″,as_index=True).学业分数.count()
D.dfs.groupby(″班级″,as_index=True).学业分数.sum()
12.小明收集了某学校某次模考技术成绩的数据,存储在文件“cj.xlsx”中,其中“xx1”表示信息选择题1,共12个选择题。每小题的分值是2分,如图a所示。
(1)从图a中第一行数据看,该行数据存在的问题是________(单选,填字母)。
A.数据缺失       B.逻辑错误      
C.格式不一致       D.数据异常
(2)技术学科包含信息技术与通用技术,需要我们关注学科的平衡,而衡量学科平衡的重要指标是学科吻合度,采用得分差来判断(3分一级:0~2分为0级偏差,3~5分为1级偏差,以此类推),现需要编写Python程序计算吻合度偏差值,并统计各班偏差较大的人数(吻合度>=3),输出结果如b图所示。代码如下,请在划线处填入合适的代码。
import pandas as pd
plt.rcParams[″font.sans-serif″]=[″SimHei″]
df=pd.read_excel(″cj.xlsx″)
df=df[df.技术!=0]
n=len(df)
info=[]
bjc={1:0,2:0,3:0,4:0,5:0} #存储各班吻合度>=3的人数
for i in range(n):
info.append([df.班级[i],df.姓名[i],df.信息[i],df.通用[i]])
diff=info[i][2]-info[i][3]
info[i].append(①________)
print(info[i][0],″班″,info[i][1],″吻合度级别:″,info[i][4])
if info[i][4]>=3:
②________
print(″各班吻合度偏差较大人数统计如下:″)
for bj in bjc:
print(bj,″班″,bjc[bj],″人″)
(3)想知道12个信息技术选择题的难度系数(难度系数=平均分/分值),选出错误率最高的5个小题。小明编写程序如下,求各题的难度系数并给错误率最高的5个小题,绘制了如图c所示的柱形图。
import matplotlib.pyplot as plt
dif=[]
for i in df.columns[5:]:
dif.append(round( ①________/2,2))
dic={″题号″:df.columns[5:],″难度系数″:dif}
df1=pd.DataFrame(dic)
df1=df1.sort_values(″难度系数″)
plt.figure(figsize=(8,4))
plt.title(″信息难度最大的5道题对比图″)
plt.bar(②________)
plt.xlabel(″题号″)
plt.ylabel(″难度系数″)
plt.show()
13.小吴收集了2020年之前历届世界杯数据并进行汇总,制作了“历年世界杯各国数据.xlsx文件,具体内容结构如图a(部分数据)所示。
(1)从图a中可看到土耳其的比赛场数为“20”,与胜、平、负场数之和不相等该问题属于________。
A.数据缺失 B.数据重复
C.逻辑错误 D.格式不一致
(2)现要找出非洲总进球数前3名的国家(不考虑并列情况),核心代码如下:
df=pd.read_excel(″历年世界杯各国数据.xlsx″)
print(df)
则方框处可选代码是________(按数据处理先后顺序填序号)。
①df=df.groupby(″所属大洲″) ②df=df[:3]
③df=df.sort_values(″进球数″,ascending=False) ④df=df[df[″所属大洲″]==″非洲″]⑤df=df[″非洲″]
(3)小吴收集了英格兰在2022年世界杯中的5场比赛的数据并存储在文件“英格兰.xlsx”中,结构如图b所示。
现编写程序,将数据处理后合并到“历年世界杯各国数据.xlsx”文件中,核心代码如下,请在划线处填写合适的代码。
df1=pd.read_excel(″历年世界杯各国数据.xlsx″)
df2=pd.read_excel(″英格兰.xlsx″)
for i in range(len(df1)):
if df1.at[i,″球队″]==″英格兰″:
①________
break
for line in df2.values:
goal=line[2];lost=line[3]
if goal>lost:
df1.at[index,″胜″]+=1
elif goaldf1.at[index,″负″]+=1
else:
df1.at[index,″平″]+=1
②________
df1.at[index,″进球数″]+=goal
df1.at[index,″失球数″]+=lost
df1.at[index,″净胜球″]+=goal-lost
df1.to_excel(″(new)历年世界杯各国数据.xlsx″,index=False)#去除索引保存文件
(4)读入文件“(new)历年世界杯各国数据.xlsx”并制作了如图c所示的柱形图,核心代码如下。若要更换图表类型,则应修改________(单选,填序号)处的代码。
df1=pd.read_excel(″(new)历年世界杯各国数据.xlsx″)
df1=df1.sort_values(″进球数″,ascending=False)#①
df1=df1[df1[″所属大洲″]==″南美洲″]
df1=df1[[″球队″,″进球数″]]#②
df1.plot.bar(x=″球队″,y=″进球数″)#③
plt.show()#④
14.小美收集了某电商平台某年1~12月的“十大”空调品牌的销售数据,每个月的数据保存在一个CSV文件中,文件如图b所示,分别记录了对应月份的订单数据。
请回答下列问题:
(1)定义get_sales函数,功能为:读取某月的CSV文件,返回某品牌当月的销售额。函数代码如下,划线处应填入的代码为________(单选,填字母)。
A.df[df['品牌']==brand]
B.df[df['品牌']==month]
C.df['品牌']==brand
D.df['品牌']==month
import pandas as pd
def get_sales(brand,month):
filename=str(month)+'.csv'
df=pd.read_csv(filename) #读取文件
df=________________
sales=(df['数量']*df['单价']).sum() #求出df中所有数量*单价的总和
return sales
(2)统计十大品牌全年销售额,并找出销售额最大的品牌,绘制该品牌的1~12月销售额的线形图,部分Python程序如下,请在划线处填写合适的代码。
import matplotlib.pyplot as plt
brand_dict={'格力':0,'美的':0,'海尔':0,'奥克斯':0,'海信':0,'三菱重工':0,'日立':0,'华菱':0,'TCL':0,'大金':0}
x,y=[],[]
max_sales,brandmax=0,''
for i in range(1,13):
for j in brand_dict:
brand_dict[j]+=①________
for i in brand_dict:
if brand_dict[i]>max_sales:
max_sales=brand_dict[i]
      ②________
for i in range(1,13):
x.append(③________)
y.append(get_sales(brandmax,i))
plt.plot(x,y)
plt.show() #生成线形图如图c所示
(3)由图c可知,该空调销售额增量最大的月份是________。
专题7 数据统计与可视化的程序实现
知识点
1.(1)AC (2)①len(df) ②diff[i]=s ③plot(x,y)
解析 (1)可以用字典法和属性法来表示一列数据。(2)①从循环for j in range(1,n)来看j表示行,由于和上一行比较,因此j的初值为1。②变量m表示存储各商品数量,因此i表示商品的索引,diff[i]将计算每种商品的平均价格波动。(3)略。
2.(1)A (2)nf=ss[0:4] (3)bls+=1 (4)g2[″进球″]或g2.进球
解析 (1)筛选出年份大于等于2019。(2)ss为这行的″赛事″名称,找出前面4个字符是否是数字。(3)bls为找到并列最后一名的人数,因此需累加求和。(4)y轴为分组后的进球数。
3.(1)①″总消费″ ②range(len(df))或range(0:len(df)) ③df.区域[i]或df[″区域″][i] (2)ABD (3)df1.index
解析 本题考查Pandas数据处理和统计。(1)①空求总消费,对所有数据按行求和。②遍历df对象,判断每个总消费值是否超过ave并做相应处理。③以地区为键进行统计。(2)按总消费降序排序,选前5个;或按总消费升序排序,选后5个。(3)x轴数据来自于“区域”列。对df分组时设置as_index=True,“区域”列分组后成为了行索引。
4.(1)ACD (2)df[df.合计==3] (3)①choice=″″ ②result[choice]+=1 (4)800米跑、跳绳、游泳
解析 (1)略。(2)统计各行非空数据的个数,每行中前3列为非空字段,因此df.count(axis=1)-3表示每行的报名项目数。(3)①语句choice+=key表示选报项目组合,将每个项目的名称连接起来,因此需对choice赋初值为空。②利用字典统计组合项目choice的个数。(4)略。
5.(1)BC (2)①elif t>=1或elif t>0 ②″站点编号″ ③df2[df2.月份==m] (3)微浪
解析 (1)略。(2)①除此外还有″微浪″和″无浪″情况,因此加上微浪的条件。②预报信息最多的海岛站点编号,因此需对海岛站点编号进行分组。③输入要查询的月份m,因此需筛选出符合条件的数据。(3)略。
6.(1)D (2)①df[df['疾病类型']==tp] ②age<=18 ③count[i]/sum(count)*100或count[i]/len(df1)*100 (3)0~18 (4)D
解析 本题考查Pandas数据处理。(1)略。(2)①在df中查找符合条件df['疾病类型']==tp的记录。②count数组统计各个年龄段的人数。③图表显示不同年龄段患该病的人数百分比,将各个年龄人数占该疾病类型的人数百分比。(3)略。(4)数据处理的顺序是:筛选、分组统计、排序(降序)。若要统计患病率,需按疾病类型进行分组统计,形成如图所示数据。
疾病 姓名 年龄
0 疾病A
1 疾病B
2 — — —
疾病F
其中姓名列和年龄列为统计的人数,若要找出人数最多的需按其中一个关键字进行降序排列。
7.(1)①df.sum(axis=1)或df[″专科″]+df[″本科″]+df[″硕士″]+df[″博士″]或df.专科+df.本科+df.硕士+df.博士 ②df[″共计″]或df.共计 (2)①(data[i]-data[i-1])/data[i-1] ②rate[imax[0]]解析 本题考查Pandas数据处理。(1)①每年的毕业生汇总 ②y轴数据df[″共计″]或df.共计
(2)①根据公式可得:(data[i]-data[i-1])/data[i-1]②根据代码rate[imax[0]]==rate[i],得出对应代码:rate[imax[0]]8.(1)计算每个城市的年度平均日照时数。
(2)C (3)①52 ②min()
解析 本题考查Pandas相关操作及其应用。(1)mdays列表中存放每个月的天数,Excel表格中存放的是每个月的月平均日照时数,通过for循环将月平均日照时数*每个月的天数并进行累加,得到全年的日照时数,再计算出当前城市的日平均日照时数,并通过round函数保留2位小数。故该程序功能为计算每个城市的年度平均日照时数。(2)最适合用光伏发电的十个城市即日照时数最长的十个城市,通过sort_vlaues进行降序排序,取前十个。(3)①根据图c可知温州市月平均日照最小值为2.42,再根据公式:日均发电量=电池板的容量/块×块数×平均日照时数×充放电效率。0.3kw/块*块数*2.42*0.8=30 kW,得到需要的光伏发电板共52块。②处使用min()函数求最小值。
9.(1)①total=0 ②s[i+j] (2)df[df[″个人平均″]>=65] (3)A (4)B
解析 本题考查Pandas模块数据处理。(1)将每个时段的10个测试点汇总,①total=0初始化为0。②由语句i=i+10可知,i为每段的开始位置,total对i+j这些位置数据进行累加。(2)筛选求班级内整节课专注为优秀的学生,整节课平均专注度大于等于65为优秀。(3)df2=df.mean(),df2是Series,y的数据是df2.values,创建折线图的语句plt.plot(x,y)。(4)略。
10.(1)①df.at[i,″性别″]==xb或df[″性别″][i]==xb或df.性别[i]==xb ②mz (2)D (3)df3.个数或df3[″个数″] (4)6
解析 本题考查利用Pandas进行数据统计。(1)①找出同性别学生中的每个字,因此索引i的学生性别与函数参数xb相同。②将所有的字存储在列表mz并返回。(2)字典存储姓名中的字,利用该字典创建一个包含″字″和″个数″两列的DataFrame对象,并按字进行分组统计,字是分组的标准,统计的结果在″个数″列,统计出现最频繁的10个字,需对″个数″列降序排序。(3)每个字的数量保存在个数列中。(4)从图中可以找到符合条件的数据。
11.(1)①″cj.xlsx″ ②end=num[0]或end=num[k] ③k=k+1 (2)①dfs[dfs[″德育等级″]==″A″]或dfs[dfs.德育等级==″A″] ③dfg[″人数″]或dfg.人数 (3)A
解析 本题考查数据整理及Pandas模块相关知识。(1)①读取文件为″cj.xlsx″,②空所有学生所在班级,当i==end时,一个班级填充完毕,准备计算下一班级的end及班号,end变量表示下一个班级的起点,②空设置end的初始值end=num[0]。③当一个班级填充结束,准备填充下一班级(i==end),除了计算下一个end外,还要计算下一班级号:k+=1。(2)①筛选德育等级为A。③图表y轴数据为人数。(3)统计每个班级优秀学员人数,按“班级”进行分组并计数,从plt.bar(dfg[″班级″],②)可以看出,分组后“班级”未做成索引,分组语句要加参数:as_index=False。
12.(1)B (2)①abs(diff)//3 ②bjc[info[i][0]]+=1
(3)①df[i].mean() ②df1.题号[0:5],df1.难度系数[0:5]
解析 (1)数据存在的问题主要有数据缺失、数据重复、数据异常、逻辑错误、格式不一致等。选择题每题的分值为2属于逻辑错误。(2)①计算得分差来判断。3分一级:0~2分为0级偏差,3~5分为1级偏差,以此类推。②统计吻合度。info[i][0]存储为班级,字典bjc存储各班的吻合度,依次遍历每位同学的数据,若吻合度>=3,相应班级计数加1。(3)①计算各题平均分。表达式i in df.columns[5:],i为列标签,难度系数=平均分/分值,统计该列的平均分为df[i].mean()。②制作图表数据源,两列数据为题号和难度系数,有题意可知取前5,所以此空为df1.题号[0:5],df1.难度系数[0:5]。
13.(1)C (2)③④②或④③② (3)①index=I ②df1.at[index,″比赛场数″]+=1 (4)③
解析 (1)在逻辑结果上存在错误。(2)需要按进球数进行降序排列,再筛选出符合条件的数据,最后取前3个。或者先筛选符合的数据,再进行排序。(3)(4)略。
14.(1)A (2)①get_sales(j,i) ②brandmax=i ③i (3)11
解析 本题考查Pandas数据处理。(1)get_sales函数读取某月的CSV文件,返回某品牌当月的销售额,函数两个参数:month为月份,brand应为品牌。(2)①brand_dict字典用于统计每种品牌的全年销售额,外循环i遍历月份,内循环j遍历品牌名称,此处可利用自定义函数来累加该品牌每月销售额。②处求所有品牌全年销售额的最大值max_sales和最大值的品牌名称brandmax。(3)略。

展开更多......

收起↑

资源预览