国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python分析學(xué)校四六級過關(guān)情況

2020-01-04 16:17:22
字體:
供稿:網(wǎng)友

這段時(shí)間看了數(shù)據(jù)分析方面的內(nèi)容,對Python中的numpy和pandas有了最基礎(chǔ)的了解。我知道如果我不用這些技能做些什么的話,很快我就會(huì)忘記。想起之前群里發(fā)過一個(gè)學(xué)校的四六級成績表,正好可以用來熟悉一下pandas中的一些用法。

1.數(shù)據(jù)介紹。

成績表中包含的字段十分詳細(xì),里面有年級、性別、姓名、分?jǐn)?shù)等等的一系列內(nèi)容,我只想簡單的分析一下我們學(xué)校的四六級過關(guān)率而已,所以去除了一些不必要的字段。留下的有如下幾個(gè)字段:

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

第一列是自增的序號,沒有什么實(shí)際意義。

第二列就是代表著該學(xué)生參加的是四級還是六級。

第三列是我們學(xué)校的院系名稱。

第四列是學(xué)校院系的各個(gè)專業(yè)。

第五列是年級,13代表著2013年入學(xué)。

第六列是性別。

后面的三列分別是總分、聽力、閱讀、寫作等。

其中總分為0的都是缺考的。一共有接近9000條數(shù)據(jù)(沒有報(bào)名的不在其中)。

2.預(yù)期結(jié)果。

我想利用這些數(shù)據(jù)最終通過圖標(biāo)的形式展示出以下幾點(diǎn):

1.各個(gè)學(xué)院的四六級平均分。

2.各個(gè)學(xué)院的四六級過關(guān)人數(shù)。

3.各個(gè)學(xué)院的各個(gè)年級過關(guān)人數(shù)。

4.各個(gè)年級的過關(guān)人數(shù)。

5.男生女生分別過關(guān)人數(shù)。

最終結(jié)果:

各個(gè)學(xué)院的四六級過關(guān)人數(shù):

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

3.實(shí)現(xiàn)過程。

(1)導(dǎo)入依賴包。

程序分別使用了pandas進(jìn)行分組轉(zhuǎn)換,和matplotlib提供的繪圖功能。

import pandas as pdimport matplotlib.pylab as plt

(2)加載數(shù)據(jù)。

想要分析數(shù)據(jù)自然要得到數(shù)據(jù)了,我將整理的數(shù)據(jù)存放在sj.xls中,是一個(gè)Excel類型的數(shù)據(jù)。
這一步使用pandas的read_excel即可,生成一個(gè)DataFrame對象。

#加載全部數(shù)據(jù)sj = pd.read_excel(r'F:/DataAnalysis/sj.xls')

加載完之后輸出一下看看內(nèi)容:

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

除了排版沒有對齊之外其他都一樣。

(3)統(tǒng)計(jì)各個(gè)學(xué)院平均分。

在這里就可以完成我們預(yù)期的第一個(gè)結(jié)果:

各個(gè)學(xué)院的四六級平均分:

想要各個(gè)學(xué)院的情況當(dāng)然是要根據(jù)學(xué)院來進(jìn)行分組了,同時(shí)也需要分出“CET4”和“CET6”兩組。使用groupby即可,這樣會(huì)生成一個(gè)SeriesGroupBy對象,然后再調(diào)用mean函數(shù)(默認(rèn)是軸0計(jì)算,也就是我們想要的結(jié)果)即可統(tǒng)計(jì)出平均分情況。

#按照各個(gè)學(xué)院進(jìn)行分組xymean = sj['總分'].groupby([sj['院系名稱'],sj['語言級別']])#計(jì)算各個(gè)學(xué)院的平均分?jǐn)?shù)xymean = xymean.mean()

這個(gè)時(shí)候?qū)⑵漭敵龅脑挄?huì)得到如下結(jié)果:

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

由于院系名稱和語言級別是層次化索引的緣故,看起來并不是十分的友好,因此使用unstack將語言級別轉(zhuǎn)從行轉(zhuǎn)換為列。

xymean = xymean.unstack(level='語言級別')

再次輸出的話結(jié)果就比較清晰了

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

使用pandas的繪圖功能進(jìn)行繪圖:

#使用橫向柱狀圖顯示xymean.plot(kind='barh')#在PyCharm中需要使用,在Ipython環(huán)境中如果以--pylab形式打開就不需要plt.show()

運(yùn)行一下看看結(jié)果:

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

可以看到這時(shí)候數(shù)據(jù)的結(jié)果都能夠顯示出來了,但是中文部分出現(xiàn)了問題,不過不要緊,科學(xué)上網(wǎng)一查就解決了:https://github.com/mwaskom/seaborn/issues/1009

添加一下代碼即可:

import matplotlib as mplmpl.rcParams['font.sans-serif'] = ['SimHei']mpl.rcParams['font.serif'] = ['SimHei']

再次運(yùn)行就OK了。

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

接下來要分析過關(guān)的情況了。

(4)篩選數(shù)據(jù)。

既然已經(jīng)有了所有的數(shù)據(jù)內(nèi)容了,下一步就是篩選出所有過關(guān)的人數(shù)了。

#過濾出過關(guān)人數(shù)sjpass = sj[sj['總分'] >= 425]

這時(shí)候sjpass存放的就是所有的過關(guān)人數(shù)了。

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

在輸出結(jié)果的最下面就可以看到一共有1507行數(shù)據(jù),當(dāng)然也可以使用len()或者shape[0]查看共有多少行。

(5)各個(gè)學(xué)院的四六級過關(guān)人數(shù)。

已經(jīng)有了全部過關(guān)人的數(shù)據(jù)了,接下來根據(jù)預(yù)期結(jié)果進(jìn)行分組即可。同樣的根據(jù)“院系名稱”和“語言級別”對總分進(jìn)行分組,然后使用count函數(shù)進(jìn)行求和最后再用unstack進(jìn)行調(diào)整繪圖展示。

#按照各個(gè)學(xué)院進(jìn)行分組xypass = sjpass['總分'].groupby([sjpass['院系名稱'],sjpass['語言級別']])#計(jì)算各個(gè)學(xué)院的過關(guān)總?cè)藬?shù)xypass = xypass.count()#將語言級別作為columnsxypass = xypass.unstack(level='語言級別')#進(jìn)行繪圖xypass.plot(kind='barh')plt.show()

繪圖結(jié)果:

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

(6)各個(gè)學(xué)院的各個(gè)年級過關(guān)人數(shù)。。

這次分組的時(shí)候加上年級即可,并且為了繪圖比較好看一點(diǎn),這次可以將“年紀(jì)”轉(zhuǎn)換為列,并且像12年這種的有些學(xué)員已經(jīng)沒有人參加了,所以需要將缺失值用0填充:

#按照各個(gè)學(xué)院和年級進(jìn)行分組xypass = sjpass['總分'].groupby([sjpass['院系名稱'],sjpass['語言級別'],sjpass['年級']])#計(jì)算各個(gè)學(xué)院的過關(guān)總?cè)藬?shù)xypass = xypass.count()#將語言級別作為columns,并且將缺失值用0進(jìn)行填充xypass = xypass.unstack(level='年級').fillna(0)xypass.plot(kind='barh')plt.show()

繪圖結(jié)果:

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

(7)各個(gè)年級的過關(guān)人數(shù)。

使用groupby對年級進(jìn)行分組即可:

#-----------------各個(gè)年級過關(guān)人數(shù)------------------njpass = sjpass['總分'].groupby([sjpass['年級'],sjpass['語言級別']]).count().unstack(level='語言級別')njpass.plot(kind='barh')plt.show()

繪圖結(jié)果:

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

(8)男生女生分別過關(guān)人數(shù)。

將性別和語言級別進(jìn)行分組:

#---------------男生女生過關(guān)情況----------------------nvpass = sjpass['總分'].groupby([sjpass['性別'],sjpass['語言級別']]).count().unstack(level='語言級別')nvpass.plot(kind='bar')plt.show()

繪圖結(jié)果:

Python分析學(xué)校四六級,Python分析四六級過關(guān)情況,Python分析四六級

4.結(jié)果分析。

從繪圖的結(jié)果上來看的話,各個(gè)學(xué)院之間音樂學(xué)院的平均分比較低,藝術(shù)設(shè)計(jì)和外國語學(xué)院的平均分都比較高,但是過關(guān)人數(shù)卻沒有那么的多,尤其是藝術(shù)設(shè)計(jì)的人數(shù)比較少,主要也是因?yàn)樵搶W(xué)院的總?cè)藬?shù)比較少。

四級的過關(guān)人數(shù)明顯比六級的人數(shù)多的多,而且因?yàn)?5級是大二年級,在我們學(xué)校大二才可以參加四六級考試,所以過關(guān)的人數(shù)里面15級占有比較大的比分。

而且不得不承認(rèn),女生的過關(guān)率要比男生高的不止一點(diǎn)。

源碼以及數(shù)據(jù):https://github.com/jiajia0/DataAnalysis

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平阳县| 华容县| 阳朔县| 邵阳县| 渭源县| 富锦市| 安泽县| 宜章县| 龙陵县| 盐山县| 天长市| 新绛县| 武邑县| 二连浩特市| 海宁市| 通河县| 那坡县| 临桂县| 铁岭县| 隆昌县| 瓮安县| 龙井市| 西峡县| 越西县| 牙克石市| 九龙县| 高尔夫| 卢龙县| 安达市| 闵行区| 东兰县| 灵山县| 湘潭县| 高青县| 仪征市| 大埔县| 嘉义市| 准格尔旗| 揭东县| 道孚县| 花垣县|