資源簡介 專題7 數據統計與可視化的程序實現知識點 利用Pandas模塊進行數據統計1.小明收集了某超市部分商品2022年上半年每天的價格數據并保存在″data.xlsx″文件中,如圖所示。要分析某商品一個月內的價格穩定情況,需要將本月每天(除第一天外)價格波動的絕對值加起來(價格波動=當天價格-前一天價格),其值越小,價格越穩定。為統計該超市6月份各商品價格穩定情況,編寫如下Python程序。請回答下列問題:(1)獲取6月份各商品的價格,劃線處填入的代碼為________(多選,填字母)。A.df[df[″日期″]>=20220601]B.df[″日期″>=20220601]C.df[df.日期>=20220601]D.df[df[″日期″]]>=20220601import pandas as pddf=pd.read_excel(″data.xlsx″)df=______________________df=df.reset_index(drop=True) #重新設置索引,從0開始遞增(2)繪制6月份價格穩定情況線形圖,部分Python程序如下,請在劃線處填入合適代碼。import matplotlib.pyplot as pltcols=df.columns[1:] #存儲各商品名稱n=①________m=len(cols)diff=[0]*mfor i in range(m):s=0for j in range(1,n):day_diff=abs(df[cols[i]][j]-df[cols[i]][j-1]) #計算每天價格波動s+=day_diff②________x,y=cols,diffplt.③________plt.show()2.小明收集了梅西2005年至2023年國家隊比賽數據,保存在“梅西國家隊詳細比賽數據.xlsx”文件中,部分數據如圖a所示,現利用Pandas模塊處理數據。為統計分析梅西2019~2023年各項賽事的平均進球情況,編寫Python程序。請回答下列問題:(1)讀取“梅西國家隊詳細比賽數據.xlsx”數據,篩選出2019年以來的各項比賽數據。函數代碼如下,劃線處應填入的代碼為________(單選,填字母)。A.df[df[″年份″]>=2019] B.df[″年份″]>=2019C.df[″年份″>=2019] D.df[df[″年份″]]>=2019import pandas as pdimport matplotlib.pyplot as pltdf=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=0bl=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 pddf=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 pltdf1=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 pddef 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 pltdf=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+=keyif choice in result:②________else:result[choice]=1x=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 pdimport matplotlib.pyplot as pltplt.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.indexy=df3.valuesplt.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 pdimport matplotlib.pyplot as pltdf=pd.read_excel('data.xlsx')tp=input('請輸入疾病類型:')df1=①________ #篩選tp疾病的數據count=[0]*4for i in df1.index:age=df.at[i,'年齡']if ②________:count[0]+=1elif age<=35:count[1]+=1elif age<=60:count[2]+=1else:count[3]+=1x=['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 52014年 318 341 53 52015年 322 358 55 52016年 329 374 56 52017年 351 384 57 52018年 366 386 60 62019年 363 394 63 62020年 376 420 72 62021年 398 428 77 7圖a2014年 增長率為: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 pdimport matplotlib.pyplot as pltplt.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 pddf=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=0for 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=0while i①________for j in range(10): total+=②________i=i+10line.append(total/10*100) #計算平均值(如 10 個數中有 5 個 1 則為 50.0)data.append(line)f.close()(2)調用處理后的文件數據,統計分析學生專注度情況。整節課平均專注度大于等于65為優秀,求班級內整節課專注度為優秀的學生數量。import pandas as pdimport matplotlib.pyplot as pltplt.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=colplt.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 pdxb=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 pltplt.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 pdimport matplotlib.pyplot as pltplt.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 pdplt.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 pltdif=[]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,″球隊″]==″英格蘭″:①________breakfor line in df2.values:goal=line[2];lost=line[3]if goal>lost:df1.at[index,″勝″]+=1elif goaldf1.at[index,″負″]+=1else:df1.at[index,″平″]+=1②________df1.at[index,″進球數″]+=goaldf1.at[index,″失球數″]+=lostdf1.at[index,″凈勝球″]+=goal-lostdf1.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['品牌']==brandD.df['品牌']==monthimport pandas as pddef 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 pltbrand_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 疾病A1 疾病B2 — — —疾病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)略。 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫