python中成绩分析函数_自学Python笔记:用Python做成绩分析(1)
有朋友會(huì)問(wèn),剛學(xué)了一周,什么是面向?qū)ο蠖歼€不清楚就可以寫(xiě)程序?還有Python不是寫(xiě)“爬蟲(chóng)”嗎?
Python是面向?qū)ο蟮恼Z(yǔ)言,函數(shù)、模塊、數(shù)字、字符串都是對(duì)象,并且完全支持繼承、重載、派生、多繼承,有益于增強(qiáng)源代碼的復(fù)用性。如果想快速的搞清楚面向?qū)ο蟮娜筇匦浴胺庋b、繼承和多態(tài)”估計(jì)不下點(diǎn)功夫還真搞不明白,還有Python的類(lèi)可以繼承多個(gè)類(lèi),雖然是一種多態(tài)語(yǔ)言但多態(tài)的使用也有爭(zhēng)議,純粹學(xué)面向感覺(jué)對(duì)于數(shù)據(jù)結(jié)構(gòu)不扎實(shí)的初學(xué)者來(lái)說(shuō)搞不好容易搞迷糊。
抽象派
函數(shù)式編程對(duì)于初學(xué)者來(lái)說(shuō)可能更容易理解,再就是編個(gè)小程序直接函數(shù)式編程就可以解決了。好處是Python同時(shí)支持兩種編程方式,且函數(shù)式編程能完成的操作,面向?qū)ο蠖伎梢詫?shí)現(xiàn),雖然從編寫(xiě)成績(jī)分析這樣的小程序來(lái)說(shuō)可能面向?qū)ο蟾线m,為什么這么說(shuō)呢?在編寫(xiě)時(shí)需要?jiǎng)?chuàng)建多個(gè)事物,每個(gè)事物屬性個(gè)數(shù)相同,但是值的需求都是不相同(如:張三、李四、楊五,他們都有姓名、班級(jí)、成績(jī),但值不同)這種非常適合面向?qū)ο蟮摹?/p>
不管是哪種方式,只要能夠解決當(dāng)前的問(wèn)題就是正確的方式,畢竟對(duì)于軟件工程來(lái)說(shuō)解決問(wèn)題是最主要的,用的工具反而沒(méi)有那么重要,就像對(duì)程序員來(lái)說(shuō)語(yǔ)言不重要,重要的是解決問(wèn)題的思想。
另外Python翻譯過(guò)來(lái)“蟒蛇”,蟒蛇是什么?爬的大蟲(chóng)啊O(∩_∩)O~。“爬蟲(chóng)”主要目的是將網(wǎng)頁(yè)下載到本地,然后通過(guò)一系列的數(shù)據(jù)分析算法等提取有效信息,進(jìn)而對(duì)后續(xù)的機(jī)器學(xué)習(xí),自然語(yǔ)言分析,數(shù)據(jù)可視化。因?yàn)閜ython的庫(kù)實(shí)在是太豐富了,又容易入手,很容易把這些工作無(wú)縫銜接起來(lái),自然也就成了第一選擇。
后面恰當(dāng)?shù)臅r(shí)候會(huì)寫(xiě)一個(gè)“爬蟲(chóng)”來(lái)獲取學(xué)生成績(jī)用于數(shù)據(jù)分析,什么成績(jī)需要“爬”?比如高考成績(jī)公布了,領(lǐng)導(dǎo)安排你做數(shù)據(jù)分析,原來(lái)都是學(xué)生把查到數(shù)據(jù)交給班主任,班主任匯總后交到學(xué)校,最后才做分析,費(fèi)時(shí)不說(shuō)還容易出差錯(cuò),如果用“爬蟲(chóng)”可以省去很多的麻煩,這個(gè)屬于數(shù)據(jù)信息的獲取,后面將提到。
數(shù)據(jù)分析
廢話好像太多了,開(kāi)始今天的話題:用Python做一份成績(jī)分析。
任務(wù)交代:
有三個(gè)學(xué)校(育英中學(xué)、育才中學(xué)、育德中學(xué))的成績(jī),excel表部分?jǐn)?shù)據(jù)如下:
準(zhǔn)考證號(hào)
姓名
學(xué)校
班級(jí)
語(yǔ)文
數(shù)學(xué)
英語(yǔ)
綜合
體育
實(shí)驗(yàn)
信息
總分
名次
20180101002
李子強(qiáng)
育才中學(xué)
1
79
105
88
137
41
18
18
20180101312
尹金杰
育德中學(xué)
3
72
99
26
122
46
20
12
20180101195
李帥
育德中學(xué)
1
89
98
115
140
37
20
11
20180101197
李帥
育德中學(xué)
1
93
98
98
136
44
20
13
20180101252
張夢(mèng)冉
育德中學(xué)
2
81
96
64
133
39
20
7
20180101228
張如霞
育德中學(xué)
1
83
95
72
137
41
20
14
20180101200
段樹(shù)偉
育德中學(xué)
1
94
95
96
131
46
18
12
20180101137
徐曉潭
育英中學(xué)
1
75
94
69
128
48
20
19
20180101004
吳子航
育才中學(xué)
1
90
94
89
125
44
20
13
20180101194
劉帥
育德中學(xué)
1
89
93
111
138
45
20
16
20180101221
韓睿
育德中學(xué)
1
83
93
84
125
46
20
19
20180101198
張帥
育德中學(xué)
1
97
92
103
138
44
20
9
需要計(jì)算各考生的總分、總名次并根據(jù)公布的分?jǐn)?shù)線(一線:430二線:320)統(tǒng)計(jì)各學(xué)校的上線情況。
學(xué)校
考生數(shù)
平均分
一線人數(shù)
一線率
二線人數(shù)
二線率
育才中學(xué)
育英中學(xué)
育德中學(xué)
任務(wù)比較簡(jiǎn)單,主要目的還是熟悉Python的基本用法,獲得存在感,其實(shí)這么簡(jiǎn)單的數(shù)據(jù)分析用excel很容易搞定,但現(xiàn)實(shí)中處理起來(lái)可能不限于以上要求,到時(shí)根據(jù)需要再增加功能即可。
工具選擇:python、 pandas 、openpyxl、matplotlib(考慮后面可能做圖表,也符合教材要求)
Python處理excel有好多的庫(kù)可以選擇,比如:xlwings、openpyxl、pandas、Xlsxwriter、xlutils(結(jié)合x(chóng)lrd/xlwt)等,各有各的特點(diǎn),特別前三種推薦使用,尤其數(shù)據(jù)處理是pandas的強(qiáng)項(xiàng),這里它吧Excel 作為輸入/輸出數(shù)據(jù)的容器。
第一篇筆記中已經(jīng)完成了pandas 、matplotlib的安裝,為了后面的應(yīng)用建議安裝一下openpyxl和numexpr,命令如下:
openpyxl的安裝
numexpr的安裝
今天重點(diǎn)學(xué)習(xí)一下pandas 可能需要的excel操作。
1.導(dǎo)入pandas模塊
import pandas as pd
import pandas as pd
2.導(dǎo)入原始成績(jī)Excel文件“grade.xlsx”,如果不加"Sheet1,默認(rèn)是第一個(gè)sheet頁(yè)。
df = pd.read_excel("grade.xlsx","Sheet1")
df = pd.read_excel("grade.xlsx","Sheet1")
或者(sheetname=0表示第一個(gè)sheet頁(yè),sheetname=1表示第二個(gè)sheet頁(yè),以此類(lèi)推)
df = pd.read_excel(r"grade.xlsx",sheetname=0)
df = pd.read_excel(r"grade.xlsx",sheetname=0)
如果在命令行下可以利用 “df.dtypes”瀏覽一下該數(shù)據(jù)表的數(shù)據(jù)類(lèi)型。
原始表數(shù)據(jù)類(lèi)型
3.數(shù)據(jù)的篩選,如篩選所有“育才中學(xué)”的學(xué)生。如果想要更多復(fù)雜的篩選,可以使用map來(lái)以多重標(biāo)準(zhǔn)進(jìn)行篩選,這里暫且不表。
df[df["學(xué)校"] =='育才中學(xué)'].head()
df[df["學(xué)校"] =='育才中學(xué)'].head()
篩選后顯示
如果安裝了numexpr后還可以用query來(lái)完成,結(jié)果一樣。
df.query('學(xué)校 == ["育才中學(xué)"]').head()
df.query('學(xué)校 == ["育才中學(xué)"]').head()
query篩選
注意:df.head()一般列舉的是前5條
4.數(shù)據(jù)簡(jiǎn)單的計(jì)算,如計(jì)算每個(gè)學(xué)生的總分。
df["總分"] = df["語(yǔ)文"] + df["數(shù)學(xué)"] + df["英語(yǔ)"]+ df["綜合"]+ df["體育"]+ df["實(shí)驗(yàn)"]+ df["信息"]
df["總分"] = df["語(yǔ)文"] + df["數(shù)學(xué)"] + df["英語(yǔ)"]+ df["綜合"]+ df["體育"]+ df["實(shí)驗(yàn)"]+ df["信息"]
計(jì)算總分
5.排序,by為字段,ascending為排序方式,如下面為按總分倒序排序。
df.sort_values(by='總分',ascending=False)
df.sort_values(by='總分',ascending=False)
排序
下面這一條是按學(xué)校正序、總分倒序排序。
df.sort_values(by=['學(xué)校','總分'],ascending=[1,0])
df.sort_values(by=['學(xué)校','總分'],ascending=[1,0])
6.數(shù)據(jù)的統(tǒng)計(jì),利用pandas庫(kù)進(jìn)行數(shù)據(jù)分組分析十分便捷,其中應(yīng)用最多的方法包括:groupby、pivot_table及crosstab。舉個(gè)小栗子,如統(tǒng)計(jì)各個(gè)學(xué)校的學(xué)生人數(shù)。
df.groupby('學(xué)校')['總分'].count()
df.groupby('學(xué)校')['總分'].count()
分類(lèi)統(tǒng)計(jì)
7.文件的保存。只有一個(gè)工作簿的話可以用to_excel()方法創(chuàng)建Excel文件是將DataFrame里的內(nèi)容寫(xiě)入,這里只有DataFrame對(duì)象才可以用to_excel()。多個(gè)DataFrame導(dǎo)入同一個(gè)Excel表格,但是要區(qū)分工作簿時(shí)需要用“ExcelWriter”。
df.to_excel('grade.xlsx',sheet_name='grade')
df.to_excel('grade.xlsx',sheet_name='grade')
基本的知識(shí)先學(xué)到這,下一步嘗試按要求形成demo。
關(guān)注我,帶給您更多有趣有意義的信息~
總結(jié)
以上是生活随笔為你收集整理的python中成绩分析函数_自学Python笔记:用Python做成绩分析(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 优化问题---凸优化基本概念
- 下一篇: python老男孩培训