時紅軍
摘要:本文以作者所在學(xué)校初一初二兩個年級學(xué)生的期末考試成績?yōu)槔?,詳?xì)闡述了如何利用數(shù)據(jù)分析工具Pandas對數(shù)據(jù)進(jìn)行導(dǎo)入、清洗、分析,以及使用第三方繪圖庫Python-Bokeh對統(tǒng)計(jì)結(jié)果進(jìn)行可視化輸出的方法,希望它能夠在學(xué)生成績統(tǒng)計(jì)應(yīng)用中具有較好的實(shí)用性和推廣價(jià)值。
關(guān)鍵詞:Pandas;Bokeh;可視化;成績統(tǒng)計(jì)
中圖分類號:G434? 文獻(xiàn)標(biāo)識碼:A? 論文編號:1674-2117(2021)21-0086-05
引言
近年來,因?yàn)榫哂泻唵我讓W(xué)、易讀易維護(hù)以及超強(qiáng)的可擴(kuò)展性等優(yōu)點(diǎn),Python語言逐漸成為數(shù)據(jù)分析領(lǐng)域的首選工具。Pandas作為強(qiáng)大的Python數(shù)據(jù)分析支持庫,為Python提供了高性能、易使用的數(shù)據(jù)結(jié)構(gòu)和高效操作數(shù)據(jù)所需的工具,它可以方便地從csv、xlsx、txt等格式的文件中導(dǎo)入數(shù)據(jù),然后進(jìn)行數(shù)據(jù)的清洗、篩選、排序、分組、導(dǎo)出等處理。Pandas-Bokeh是Python的一款交互式數(shù)據(jù)可視化庫,可以將Pandas中的數(shù)據(jù)幀DataFrame輸出至瀏覽器并實(shí)現(xiàn)與用戶的交互。本文嘗試使用Pandas+Pandas-Bokeh對筆者所在學(xué)校初一初二學(xué)生某次期末考試的成績進(jìn)行統(tǒng)計(jì)分析,并實(shí)現(xiàn)可視化輸出。
數(shù)據(jù)導(dǎo)入
Pandas中數(shù)據(jù)導(dǎo)入函數(shù)有很多,其中函數(shù)read_csv()可以導(dǎo)入csv和txt文件,函數(shù)read_excel()可導(dǎo)入xlsx文件。筆者使用read_excel()從Excel文件中導(dǎo)入學(xué)生成績,參數(shù)nrows可以設(shè)置導(dǎo)入的行數(shù),實(shí)現(xiàn)數(shù)據(jù)的預(yù)導(dǎo)入,用來查看數(shù)據(jù)是否存在編碼、格式等問題以及選擇需要導(dǎo)入的列,使用參數(shù)usecols導(dǎo)入指定列,參數(shù)header指定第幾行作為列索引。代碼如圖1所示,正確運(yùn)行結(jié)果如表1所示。
數(shù)據(jù)清洗
因?yàn)椴杉玫降臄?shù)據(jù)可能存在如數(shù)據(jù)缺失、重復(fù)、極端值、格式不統(tǒng)一等問題,所以在數(shù)據(jù)分析之前,必須對數(shù)據(jù)進(jìn)行預(yù)處理,即數(shù)據(jù)清洗。Pandas中專門提供了許多用于數(shù)據(jù)清洗的函數(shù)與方法,如函數(shù)fillna()可以將缺失數(shù)據(jù)用提供的參數(shù)填充,函數(shù)dropna()可以按行刪除缺失數(shù)據(jù),drop_duplicated()函數(shù)用于刪除重復(fù)行。在清洗數(shù)據(jù)之前,可用info()函數(shù)查看數(shù)據(jù)信息,代碼如圖2所示,運(yùn)行結(jié)果如圖3、圖4所示。
從圖3和圖4可以看出,該數(shù)據(jù)幀中有289行7列數(shù)據(jù),其中語文和英語兩列都有缺失值,沒有重復(fù)值。對于缺失值用函數(shù)fillna(value=0)將缺失值用0填充,代碼為student_list.fillna(value=0),運(yùn)行結(jié)果如表2所示。
數(shù)據(jù)分析
完成數(shù)據(jù)清洗后,就可以利用Pandas提供的統(tǒng)計(jì)函數(shù)進(jìn)行數(shù)據(jù)分析。在學(xué)生成績分析統(tǒng)計(jì)中,通常需要按年級、班級、學(xué)科等分組分別統(tǒng)計(jì)相關(guān)指標(biāo)。Pandas中的groupby()函數(shù)可以對數(shù)據(jù)幀進(jìn)行分組,然后可以對每個組獨(dú)立應(yīng)用聚合函數(shù),最后將每個分組的計(jì)算結(jié)果合并。
1.均分、最高分、最低分、優(yōu)秀率、及格率等
首先分別按年級、學(xué)科分組,在每個組中同時使用多個不同的聚合函數(shù)來分別統(tǒng)計(jì)不同的指標(biāo)量。如mean、max、min函數(shù)分別用來計(jì)算均分、最高分和最低分。優(yōu)秀和及格人數(shù)的計(jì)算使用了匿名函數(shù)lambda表達(dá)式,核心代碼如圖5所示,運(yùn)行結(jié)果如表3所示。
2.各分?jǐn)?shù)段人數(shù)分析
Pandas中的cut函數(shù)可以將連續(xù)型數(shù)值進(jìn)行離散化處理,它把Series中每個數(shù)據(jù)放入一個分箱,并可以打上標(biāo)簽。首先根據(jù)年級最高分和最低分創(chuàng)建分箱所需的分組依據(jù)bins,然后利用cut函數(shù)將得分分箱,最后統(tǒng)計(jì)每個分箱內(nèi)數(shù)據(jù)個數(shù)即分?jǐn)?shù)段內(nèi)人數(shù),核心代碼如圖6所示,運(yùn)行結(jié)果如表4所示。
3.年級優(yōu)生人數(shù)分析
如果需要查看學(xué)科成績排名靠前的學(xué)生信息,可使用Pandas提供的nlargest函數(shù)。它將數(shù)據(jù)幀或數(shù)據(jù)系列中的前n大數(shù)據(jù)取出,參數(shù)keep用來設(shè)置重復(fù)值的取舍方法,默認(rèn)為first,表示按索引順序取首次出現(xiàn)的數(shù)據(jù)。代碼如圖7所示,運(yùn)行結(jié)果如表5所示。
數(shù)據(jù)可視化
數(shù)據(jù)可視化是借助圖形化手段,將數(shù)據(jù)轉(zhuǎn)換成可視化圖表,它可以清晰地將隱藏在數(shù)據(jù)間的信息直觀地展現(xiàn)在用戶面前。相比傳統(tǒng)的表格或文檔展現(xiàn)方式,它提供了另一個維度來觀察數(shù)據(jù),從而可以對數(shù)據(jù)進(jìn)行更加深入的觀察和分析。常用的Python的可視化庫主要有Matplotlib、Seaborn、Bokeh等,Bokeh是基于JavaScript的可實(shí)現(xiàn)交互式可視化的繪圖工具庫,它可以在Web瀏覽器中實(shí)現(xiàn)美觀的視覺效果,并能將數(shù)據(jù)輸出為JSON對象、HTML文檔或交互式Web應(yīng)用程序。Pandas-Bokeh與Pandas能夠無縫銜接,Pandas中的DataFrame和Series可直接調(diào)用Bokeh底層代碼,并以圖表形式展現(xiàn)出來。其語法簡單,簡潔易用,所以筆者嘗試?yán)肞andas-Bokeh對學(xué)生成績進(jìn)行可視化處理。
①均分、最高分等折線圖。Pandas-Bokeh支持的圖表主要有折線圖line、條形圖bar、散點(diǎn)圖scatter、直方圖histogram等,使用方法有兩種(df表示數(shù)據(jù)幀,以折線圖為例):df.plot_bokeh.line(…)和df.plot_bokeh (kind='line',…)。輸出結(jié)果可以用pandas_bokeh.output_notebook()命令在Jupyter notebook中直接展示,也可以使用pandas_bokeh.output_file("*.html")輸出為HTML文件。
首先導(dǎo)入pandas_bokeh庫,設(shè)置輸出方式為在Jupyter notebook展示,然后即可利用數(shù)據(jù)分析過程中的數(shù)據(jù)幀調(diào)用plot_bokeh繪圖函數(shù)生成對應(yīng)圖表,代碼如圖8所示,運(yùn)行結(jié)果如圖9所示。
②分?jǐn)?shù)段百分比堆疊柱形圖的代碼如圖10所示,運(yùn)行結(jié)果如圖11所示。
③分?jǐn)?shù)頻數(shù)分布直方圖的代碼如下頁圖12所示,運(yùn)行結(jié)果如下頁圖13所示。
(4)前10名學(xué)生條形圖的代碼如下頁圖14所示,運(yùn)行結(jié)果如下頁圖15所示。
總結(jié)
本文利用Pandas對學(xué)生成績進(jìn)行了導(dǎo)入、清洗、分析等處理,然后用Pandas-Bokeh對分析結(jié)果可視化,輸出了清晰直觀的統(tǒng)計(jì)圖表。此方法簡單易用,可極大減輕每次考試后學(xué)校數(shù)據(jù)統(tǒng)計(jì)人員的重復(fù)性工作量,非常適合在學(xué)校處理學(xué)生成績過程中推廣使用。后續(xù)可使用Pandas或其他數(shù)據(jù)分析庫進(jìn)一步挖掘數(shù)據(jù)間隱含的規(guī)律,為學(xué)校決策提供科學(xué)依據(jù)。
參考文獻(xiàn):
[1]劉新鵬,高斌.利用Python和Pandas進(jìn)行學(xué)生成績處理[J].信息與電腦,2020(07):41-43.
[2]宋永生,黃蓉美,王軍.基于Python的數(shù)據(jù)分析與可視化平臺研究[J].現(xiàn)代信息科技,2019(11):7-9.
[3]劉雨珂,王平.基于Python+Pandas+Matplotlib的學(xué)生成績數(shù)據(jù)統(tǒng)計(jì)與圖形輸出實(shí)現(xiàn)[J].福建電腦,2017,33(11):104-106.
[4]張若愚.Python科學(xué)計(jì)算:第2版[M].北京:清華大學(xué)出版社,2016.
[5]韓文煜.基于Python數(shù)據(jù)分析技術(shù)的數(shù)據(jù)整理與分析研究[J].科技創(chuàng)新與應(yīng)用,2020(04):157-158.