最近获得了一些四级成绩数据,大概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
3table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(0) #通过索引顺序获取
table = data.sheet_by_name(u'Sheet1')#通过名称获取 -
获取整行和整列的值(数组)
1
2
3
4
5
6
7table.row_values(i)
table.col_values(i)
```
* 获取行数和列数
```python
nrows = table.nrows
ncols = table.ncols -
循环行列表数据
1
2for i in range(nrows ):
print table.row_values(i) -
单元格
1
2cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(2,3).value -
使用行列索引
1
2cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value -
简单的写入
1
2
3
4
5
6
7
8row = 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)
table.cell(0,0) #单元格的值'
table.cell(0,0).value #单元格的值'
画折线图
1
|
import xlrd
|
画直方图并与正态分布直方图对比
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 = table.col_values(5)[1:] ha = [int(i) for i in col5] #成绩数据 mu = np.mean(ha) #平均值 sigma = np.std(ha) #标准差 data = np.random.normal(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()
绘图都可以调用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
一些链接
库的主页
gallary
matplotlib的一些示例及其代码,是很好的学习工具。
用python做科学计算
用Python作科学计算的一些工具
xlrd文档
numpy的一些方法