王亞麗 岳雷
(1.太原旅游職業(yè)學院 山西省太原市 030032 2.太原師范學院附屬中學 山西省太原市 030001)
Python 語言具有簡單易學、擁有豐富的第三方庫等特點,使得Python 在網(wǎng)絡爬蟲、機器學習、網(wǎng)站開發(fā)、數(shù)據(jù)分析等方面應用非常廣泛。而且它免費開源,使得很多用戶都開始使用并推廣。本文使用Python 對學生成績進行了導入、數(shù)據(jù)的清洗、數(shù)據(jù)的統(tǒng)計分析同時進行了可視化分析。
本文以統(tǒng)計分析各個班學生成績?yōu)榘咐?,統(tǒng)計分析得出:
(1)某個學生各門科目的班排名和校排名;
(2)各個班每個分數(shù)段的人數(shù)占比情況和全校各分數(shù)段人數(shù)占比情況;
(3)某學生的成績縱向分析;
(4)基礎課成績和總分之間的相關性分析。以Excel 文檔作為數(shù)據(jù)源進行數(shù)據(jù)讀取。
本案例是基于表1 score.xls 進行分析的,因此就需要在pycharm 中將Excel 中的收據(jù)導入進來。數(shù)據(jù)導入使用pandas 中的read_excel()讀取數(shù)據(jù)即可。代碼如下:
Python 的第三方庫pandas 庫擁有強大的數(shù)據(jù)清理功能,可以對導入的缺失數(shù)據(jù)進行高效填補和替換,對異常數(shù)據(jù)進行查詢、刪除[1]等。本文首先對導入的數(shù)據(jù)進行初步判斷,使用pandas.shape查看數(shù)據(jù)的形狀,一共有15083 行,15 列數(shù)據(jù)。
通過data.isnull().any()顯示哪些列存在缺失值,運行結果顯示語文、物理列有缺失值,然后使用data.fillna(0)將缺失值填充為0。
查看數(shù)據(jù)框中各列中的數(shù)據(jù)類型是否是int,若不是則需要處理。對于數(shù)據(jù)類型不一致的列拋出列名,以便進行下一步處理。代碼如下:
運行結果顯示準考證號、姓名、年級、科類、語文、數(shù)學、物理、考試時間等列不是int 格式,其中準考證號、姓名、年級、科類、考試方式列不需要做處理,使用astype()函數(shù)將其他列轉換為int 類型,運行結果會發(fā)現(xiàn)數(shù)學列有休學的,語文列有缺考的,物理列有作弊的。
使用replace()函數(shù)將作弊、缺考、休學的成績清0。代碼如下:
將考試時間18.10月、18.11月、…、2020.12月依次替換為數(shù)字(0,1,…,18),使用的語句如下:
在完成了數(shù)據(jù)的清洗后,就可以使用python 中第三方庫的各種統(tǒng)計函數(shù)對學生成績進行統(tǒng)計分析了。其中Pandas 庫中提供了很多比如標準差、方差、分組分析、對比分析等函數(shù),對于數(shù)據(jù)分析處理非常高效且便捷。
表1:學生成績表score.xls 的數(shù)據(jù)結構
表2:各個班以及全校的總分分數(shù)段人數(shù)占比情況
圖1:各個班各總分分數(shù)段人數(shù)占比
圖2:全校各總分分數(shù)段占比
圖3:樊佳玥同學歷次的語文成績
圖4:基礎課和總分之間的關系
(1)使用groupby()函數(shù)和rank()函數(shù)計算某個學生各門科目的班排名和校排名
data2['語文班排名']=data2.groupby(['班級','考試時間'])['語文'].rank(ascending=False,method='dense')
data2['語文校排名']=data2.groupby(['考試時間'])['語文'].rank(ascending=False,method='dense')
類似的方法可以計算某個學生的總分班排名和校排名,代碼如下:
(2)如表2 所示,利用pandas 中的cut()、pivot_table()方法計算各個班的總分進行分段劃分和各分段人數(shù)情況統(tǒng)計,再使用div()方法可計算出各個班每個分數(shù)段的人數(shù)占比情況,同時用計算總分的方法可以計算全校各分段人數(shù)統(tǒng)計和全校各分段人數(shù)占比情況,核心代碼如下:
(3)某學生的成績縱向分析:(以樊佳玥同學的語文成績?yōu)槔?/p>
首先從10000 多條數(shù)據(jù)中將樊佳玥同學的成績抽取出來,抽取出來之后再以考試時間為橫坐標,畫出該同學的折線圖。抽取代碼為:data2[data2['準考證號']==220109038]
(4)采用corr()計算每門課程的成績與總分的關聯(lián)度,最后采用熱力圖進行展示。
對數(shù)據(jù)進行統(tǒng)計分析后,為了使分析結果更加直觀,本文采用了matplotlib 庫和seaborn 庫中的方法進行了可視化展示。核心代碼如下:
#基礎課成績與總分之間的相關性
sn.heatmap(data2.loc[:,['語文','數(shù)學','英語','物理','生物','化學','歷史','地理','政治','總分']].corr())
本文以某高中學生的成績?yōu)槔玫礁鱾€班總分分數(shù)段人數(shù)占比情況和整個學校的各分數(shù)段人數(shù)占比情況,通過各班分數(shù)的橫向?qū)Ρ?,學校的教輔人員可以很好的了解班之間的差別和各班的優(yōu)勢;還得到某學生某門科目的縱向成績比較,發(fā)現(xiàn)該同學的成績趨于穩(wěn)定;最后分析了基礎課和總分之間的相關性,顏色越淺表示相關性越強,可以看到總分與生物、英語、政治、歷史的相關性更強一些,這樣為學校的決策者提供了有力的數(shù)據(jù)支撐。
綜上所述,Python 語言語法簡單、免費開源且擁有強大的類庫,使用Python 進行數(shù)據(jù)分析操作簡單、便捷和高效。本文使用Python 語言對學生成績進行了若干分析,為相關教育工作者進行成績處理提供了思路。關于Python 在其他數(shù)據(jù)分析方面的應用,還需要我們不斷的實踐和探索。