資源簡介 專題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)略。 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫