


摘要:目前高校考試成績的分析,主要是借助于 Excel 等對學生的成績進行簡單的統計,但在數據量較大時,在Excel中的操作就有些過于繁瑣。這里以一個虛擬的班級的Java考試成績為例,使用當前熱門的數據分析語言Python,并且綜合運用了Python的第三方庫pandas和matplotlib進行數據可視化分析,實現學生數據的讀入、數據統計、排序、分組以及圖形輸出平均成績、不及格人數等之外,還將分析出班級學生知識點掌握情況。期望能為教師調整教學安排與教學方法提供參考,從而提升教學質量。
關鍵詞:Python;Pandas;Matplotlib
1前言
在當前這個信息時代,因為計算機強大的數據處理能力和網絡迅捷便利的傳播方式,學生成績信息的管理、統計和分析已經非常方便。成績是各大學校教育教學環節中的一項重要指標,是學生學習效果、學習態度的主要體現。對考試成績的分析,能夠使學校檢測出最近一段時間之內學生的學習情況,學習態度,還能很大程度的反映出教師的教學質量、治學態度和其教學方法的科學性,以及學校對學生教學管理水平。在對考試成績進行數據分析和評價后,充分發揮它的反饋作用,以此加強教學管理,改進教學方法,提高教學質量。同時也能夠指導考試的命題工作,提高考試檢測質量,還能夠加強學校的題庫建設。
2 Python及開發環境簡介
2.1 Python簡介
Python是一種跨平臺的計算機程序設計語言。 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。Python主要運用于科學計算和統計、人工智能、桌面界面開發、軟件開發、后端開發、網絡爬蟲等等方面。Python設計上的風格是清晰劃一的,這使得Python成為一門易讀、易維護,并且被大量用戶所歡迎的、用途廣泛的語言。Python語言的優點有很多,程序員們選擇使用它作為開發語言大多是因為其簡單易學、免費開源、還有著許多功能強大第三方庫。
2.2開發環境PyCharm Community Edtion(社區版)
PyCharm是一個由JetBrains打造的 Python 集成開發環境,也是使用Python語言的編程人員最常用的一款Python IDE。PyCharm分為社區版、專業版和教育版,教育版適合教學使用,專業版功能最全的收費版,社區版就是專業版的閹割版本,但解決一般問題已經足夠,且是免費的,本案例就是使用的社區版。PyCharm在擁有調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制這些一般集成開發環境就擁有的功能的同時,它還提供了很多很好的功能用于Django(一種基于Python的Web開發框架)開發,而且大多數Python的第三方庫可以在PyCharm中直接下載,非常便利。
3 學生成績分析的設計與實現
3.1數據導入
數據導入是程序設計的開始,有了數據才能進行處理。本程序需要處理的數據信息是學生的成績信息,這些成績信息是由老師在學生考試過后整理得到。得出成績后,將成績按照學號,姓名,性別,成績的順序依次輸入到cjb.xlsx表格文件中保存。將表格移動到程序所在的目錄下,在程序中即可使用pandas庫中的讀取函數之一的read_excel讀入數據。主要代碼如下所示。
import pandas as pd
data = pd.read_excel(rcjb.xlsx)
print(data)
執行后,得到的數據如下圖3.1所示:
3.2 成績處理
3.2.1 基本統計
DataFrame.describe()是pandas中一個能對數據進行快速統計的方法,用它可以完成對數據的人數、平均分、最高分、最低分,百分位數值的統計。代碼如下:
print(data['成績'].describe())
如果只想要單獨得到平均分或最低分、最高分等數據,只需將代碼最后的describe()變成mean()或min()、max()即可。
得到的數據如下下圖3.2所示:
通過圖像,我們可以得到該班級有10人參加考試,班級平均分為77分,較為良好;最高分90,最低分65,在后續教學中需要對65分的同學進行輔導幫助;成績標準差為7.93,較為平穩,說明該班級學生總體差距不是很大。
3.2.2 成績排序
DataFrame.sort_value()是pandas中的排序方法,使用它既可以根據列數據,也可根據行數據排序。本案例中自然是根據學生成績進行排序,降序排序代碼如下:
total=data.sort_values(by='成績',ascending=False)
若想要成績升序排序,只需要把代碼中ascending=False改為ascending=True即可。
得到的數據如下圖3.3所示:
通過排序輸出后,我們得到班級第一名為“楊晨輝”同學,班級擇優時可以優先考慮;其中,85分以上的優秀同學有兩名,可以鼓勵他們參加相關大賽,開拓自己視野。
3.2.3 分組統計
DataFrame.groupby()是pandas中的分組方法。本案例中是以學生性別進行的分組,代碼如下:
sexdata=data[data['性別']=='男']
group=sexdata.groupby(by='性別').mean()['成績']
print(group)
女生的分組同理,將代碼中的“男”改成“女”即可,如果還想要最高分等其他數據,那么把代碼中的mean()改為max()或其他即可。
執行后就能分別得男生、女生的平均成績信息,結果如下圖3.4、圖3.5所示:
通過圖像,我們得到女生的平均成績比男生高,說明女生在本科目的學習能力比男生強或女生的學習態度大多比男生端正,需要適當督促該班級男生的學習,多讓他們在課后進行交流促進。
3.3 學生成績的圖形輸出
條形圖中,橫軸上的數據是一個獨立且具體的數據,它們之間是有空隙的,本案例中的條形圖的橫軸就是用來表示知識點這個具體數據名稱,而直方圖中,橫軸上的數據是連續的,是一個范圍,它們中間不存在空隙,因此我用它的橫軸來表示各分數段;條形圖是用條形的高度表示頻數的大小,案例中的條形圖的高度只有0和1,用來表示掌握與否,而直方圖是用長方形的面積表示頻數,也就是人數。
3.3.1直方圖(學生成績分布)
直方圖是數值數據分布精確的圖形表示。直方圖一般用橫軸表示數據類型,縱軸表示分布情況。本案例用橫軸表示成績分數分布,用縱軸表示人數分布。代碼如下:
plt.hist(data[‘成績‘],5)
plt.show()
輸出圖像如下圖3.6所示:
從這個圖中可以得到,65~70分之間的有2人,70~75分之間有1人,75~80之間有3人,80~85之間有2人,85~90之間有2人,該班級學生成績分布較為均勻,其中75分以上成績良好的學生居多數,鼓勵他們繼續保持,在后續的課題講解中也可以嘗試發散講解,拓展該班學生的知識面。
3.3.2條形圖(學生知識點掌握情況)
有時在圖像輸出之前,有些數據可能從原始材料中不能直接獲得,這時就需要對數據進行預處理,通過處理得到自己想要的信息后再通過圖像輸出。本案例中,需要通過圖像輸出的是本班級學生知識點的掌握情況,而一般老師通過學生試卷只能得到學生的每題得分情況,這時就需要對數據進行預處理。將每題的知識點列出來,得分超過知識點總分60%的記為1,表示基本掌握;得分沒有超過知識點總分的60%的記為0,每個學生的掌握情況處理完成后,再進行班級學生成績的處理,將班級學生知識點得分情況記為1的人數超過班級總人數60%的再次記為1,表示班級基本掌握本知識點;如果沒有超過60%,則記為0,表示班級沒有掌握本知識點。這些數據都處理完成后,就可以通過Matplotlib進行圖像輸出了。圖像輸出的代碼如下:
font=FontProperties(fname=r'C:\Windows\Fonts\simkai.ttf',size=12)
points=['類','包','接口','數組']
con=['1','1','0','1']
plt.bar(range(len(points)),con)
plt.xticks(range(len(points)),points,FontProperties=font)
plt.show()
當然,如果想要了解更多知識點的掌握情況,只需要在知識點后面再次添加即可。
輸出圖像如下圖3.7所示:
從此圖中,我們可以得到本班級學生對“接口”知識點的掌握不夠好,老師可以以此來制定下一步的教學計劃,對該班級學生在此知識點上進行詳細講解、加深訓練以此加強本班學生對于該知識點的掌握。
4結語
Python發展接近三十年,如今已經確實成為了編程語言中的“紅人”。很多程序員都在使用Python,因為Python涉及范圍廣泛,從數據處理到人工智能,從Web解析到網絡空間,從人機交互到藝術設計,門類眾多且容易上手,學會了Python,可以大幅提高IT人的自身競爭力。隨著時代的發展越來越快,市場需求越來越大,Python的應用也越來越廣泛。在如今這個大數據的信息化時代,計算機技術和網絡技術的發展一天比一天迅速,而這些技術的快速發展便是來自于大眾對其的需求愈來愈高,對其的依賴性越來越大。因此,為了不被這個時代淘汰,開發者們也需要不斷的學習,不斷地突破自我。
參考文獻:
[1]劉雨珂,王平.基于Python+Pandas+Matplotlib的學生成績數據統計與圖形輸出實現[J].福建電腦,2017(11).
[2]高紅兵.基于Pandas大學生考試成績分析[J].內江科技.2017(12)。
[3]王媛.基于Python的學生綜合成績分析程序設計[J].信息與電腦(理論版),2019(11):99-101.
作者簡介:仇烈偉(1997,9-),男,漢族,四川省安岳縣,學生,本科,荊楚理工學院,研究方向:數字媒體技術方向