最近得到了一些四級成績數據,大概500多個,因而突發奇想是否可以看看這些成績數據是否知足所謂的正態分佈呢?說幹就幹,因而有了這篇文章。
文章順帶介紹了xlrd模塊的一些用法和matplotlib畫自定義數據的條形圖和隨機的條形圖的一些方法,而且提供了一些相關連接,可做爲學習matplotlib和numpy的資源,但願對讀者也有幫助。html
更優美的格式見這裏python
1 |
import xlrd |
1 |
data = xlrd.open_workbook('excelFile.xls') |
獲取一個工做表數組
1 |
table = data.sheets()[0] #經過索引順序獲取 |
獲取整行和整列的值(數組)dom
1 |
table.row_values(i) |
循環行列表數據svn
1 |
for i in range(nrows ): |
單元格函數
1 |
cell_A1 = table.cell(0,0).value |
使用行列索引工具
1 |
cell_A1 = table.row(0)[0].value |
簡單的寫入學習
1 |
row = 0 |
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()
圖2
且可求得數據的均值和標準差分別爲:476.743785851和104.816562585
由圖可見,綠色條形圖是$\mu$=476.743785851,$\sigma$=104.816562585的正態分佈條形圖,而紅色是四級成績數據的分佈圖,雖然因爲數據較少(500多個數據),因此擬合較差,可是能夠看出成績數據仍是基本知足正態分佈的。
不知道爲啥,正態曲線沒有畫出來,單獨畫正態曲線是能夠畫出來的,有待研究。.net
繪圖均可以調用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的一些方法