python 直方图每个bin中的值_【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用...
標簽:
最近獲得了一些四級成績數據,大概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
table.row_values(i)
table.col_values(i)
```
* 獲取行數和列數
```python
nrows = table.nrows
ncols = table.ncols
循環行列表數據
1
2
for i in range(nrows ):
print table.row_values(i)
單元格
1
2
cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(2,3).value
使用行列索引
1
2
cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value
簡單的寫入
1
2
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)
table.cell(0,0) #單元格的值‘
table.cell(0,0).value #單元格的值‘
畫折線圖
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 = table.col_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
畫直方圖并與正態分布直方圖對比
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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多個數據),所以擬合較差,但是可以看出成績數據還是基本滿足正態分布的。
不知道為啥,正態曲線沒有畫出來,單獨畫正態曲線是可以畫出來的,有待研究。
繪制直方圖的一些參數解釋
繪圖都可以調用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作科學計算的一些工具
標簽:
原文地址:http://www.cnblogs.com/whatbeg/p/5390464.html
總結
以上是生活随笔為你收集整理的python 直方图每个bin中的值_【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进口电脑显卡和国产区别(国产显卡什么水平
- 下一篇: 乌克兰属于东欧吗(乌克兰在欧洲地理位置及