python体测成绩数据分析_【Python数据分析】四级成绩分布-
matplotlib,。。。
最近获得了⼀些四级成绩数据,⼤概500多个,于是突发奇想是否能够看看这些成绩数据是否满⾜所谓的正态分布呢?说⼲就⼲,于是有了这篇⽂章。
⽂章顺带介绍了xlrd模块的⼀些⽤法和matplotlib画⾃定义数据的条形图和随机的条形图的⼀些⽅法,并且提供了⼀些相关链接,可作为学习matplotlib和numpy的资源,希望对读者也有帮助。
更优美的格式见这⾥
⼯具
Python 3.5
xlrd模块
numpy模块及⼀些依赖模块(安装请⾃⾏查询⽅法,绝⼤部分pip就可搞定)
matplotlib绘图模块
xlrd基本⽤法
1、导⼊模块
1
import xlrd
2、打开Excel⽂件读取数据
1
data = xlrd.open_workbook('excelFile.xls')
3、使⽤技巧
获取⼀个⼯作表
1
2
3
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(0) #通过索引顺序获取
table = data.sheet_by_name(u'Sheet1')#通过名称获取
获取整⾏和整列的值(数组)
1
2
3
4
5
6
7
```
* 获取⾏数和列数
```python
nrows = ws
ncols = ls
循环⾏列表数据汪诗诗个人资料
1
2
for i in range(nrows ):
w_values(i)
单元格
1
2
cell_A1 = ll(0,0).value cell_C4 = ll(2,3).value 使⽤⾏列索引
1
2
cell_A1 = w(0)[0].value cell_A2 = l(1)[0].value 简单的写⼊
1
2
qq妹网名
3
4
5
6
7
8
row = 0
col = 0
#类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1 value = '单元格的值'
xf = 0 # 扩展的格式化
table.put_cell(row, col, ctype, value, xf)
画折线图
工艺美术专业学什么1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import xlrd
import numpy as np
import matplotlib.pyplot as plt
data = xlrd.open_workbook('D:\\Python Workspace\\Data\\cet4.xls')
table = data.sheets()[0] #sheet 0
col5 = l_values(5)[1:] #取第5列的成绩,并去掉列属性名称
count = [0 for i in range(0,650)] #初始化count
x = [i for i in range(0,650)]
for i in col5:
num = int(i)
count[num] += 1 #统计每个⼈数的⼈数
plt.xlabel('Score')
plt.ylabel('Number of people')
plt.title('Distribution of CET-4 Scores')
plt.ylim(0,8)
plt.plot([i for i in range(250,650) if count[i] != 0],[i for i in count[250:] if i != 0],linewidth=1) #画出折线图plt.show()
图1
画直⽅图并与正态分布直⽅图对⽐
import xlrd
import numpy as np
from math import *
import pylab as pl
初二物理上册期中试卷import matplotlib.pyplot as plt
data = xlrd.open_workbook('D:\\Python Workspace\\Data\\cet4.xls')
table = data.sheets()[0] #sheet 0
col5 = l_values(5)[1:]
ha = [int(i) for i in col5] #成绩数据
mu = np.mean(ha) #平均值
sigma = np.std(ha) #标准差
data = al(mu,sigma,1000) #⽣成正态分布随机数据
x = np.linspace(0,700,1000)
y = (1. / sqrt(2 * np.pi) / sigma)*np.exp( -((x-mu)**2/(2*sigma**2)) )
plt.hist(data,bins=100,facecolor='g',alpha=0.44)
plt.hist(ha,bins=70,facecolor='r',histtype='stepfilled')
plt.plot(x,y,color='b') #正态分布曲线
plt.xlabel('Score')
plt.ylabel('Number of people')
plt.title('Distribution of CET-4 Scores')
plt.show()
图2
且可求得数据的均值和标准差分别为:476.743785851和104.816562585
由图可见,绿⾊条形图是$\mu$=476.743785851,$\sigma$=104.816562585的正态分布条形图,⽽红⾊是四级成绩数据的分布图,虽然由于数据较少(500多个数据),所以拟合较差,但是可以看出成绩数据还是基本满⾜正态分布的。
不知道为啥,正态曲线没有画出来,单独画正态曲线是可以画出来的,有待研究。
绘制直⽅图的⼀些参数解释
绘图都可以调⽤matplotlib.pyplot库来进⾏,其中的hist函数可以直接绘制直⽅图。
调⽤⽅式:
1
n, bins, patches = plt.hist(arr, bins=10, normed=0, facecolor='black', edgecolor='black',alpha=1,histtype='bar')
hist的参数⾮常多,但常⽤的就这六个,只有第⼀个是必须的,后⾯四个可选
商业承兑汇票与银行承兑汇票区别
arr: 需要计算直⽅图的⼀维数组
bins: 直⽅图的柱数,可选项,默认为10
normed: 是否将得到的直⽅图向量归⼀化。默认为0
facecolor: 直⽅图颜⾊
edgecolor: 直⽅图边框颜⾊
惠普死机alpha: 透明度
histtype: 直⽅图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’
返回值 :
n: 直⽅图向量,是否归⼀化由参数normed设定
bins: 返回各个bin的区间范围
patches: 返回每个bin⾥⾯包含的数据,是⼀个list
摘⾃这⾥ from denny
⼀些链接
matplotlib的⼀些⽰例及其代码,是很好的学习⼯具。
⽤Python作科学计算的⼀些⼯具