于是突发奇想是不是能够看看那么些成就数据是或不是满意所谓的正态分布呢,于是突发奇想是不是能够看看那一个培育数据是不是知足所谓的正态分布呢

一对链接

matplotlib

库的主页
gallary

matplotlib的局部演示及其代码,是很好的求学工具。
用python做科学总计

用Python作科学总括的部分工具
xlrd文档
numpy的有的方法

【Python数据解析】四级成绩分布,python数据解析分布

近来取得了有的四级战表数据,大致500多少个,于是突发奇想是还是不是能够看看那几个战表数据是不是知足所谓的正态分布呢?说干就干,于是有了那篇小说。
文章顺带介绍了xlrd模块的部分用法和matplotlib画自定义数据的条形图和任意的条形图的有个别艺术,并且提供了有个别连锁链接,可视作读书matplotlib和numpy的能源,希望对读者也有救助。

更赏心悦目的格式见那里

近年获得了一些四级成绩数据,差不多500多个,于是突发奇想是或不是能够看看这么些培养数据是不是满意所谓的正态分布呢?说干就干,于是有了那篇作品。
文章顺带介绍了xlrd模块的某个用法和matplotlib画自定义数据的条形图和随机的条形图的局地措施,并且提供了一部分休戚相关链接,可用作学习matplotlib和numpy的能源,希望对读者也有赞助。

局地链接

matplotlib

库的主页
gallary

matplotlib的有的示范及其代码,是很好的读书工具。
用python做科学总括

用Python作科学总计的一些工具
xlrd文档
numpy的有个别方式

http://www.bkjia.com/Pythonjc/1119765.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1119765.htmlTechArticle【Python数据分析】四级成绩分布,python数据分析分布
方今赢得了部分四级战绩数据,大约500多个,于是突发奇想是还是不是能够看看这么些成就数据…

画直方图并与正态分布直方图相比较

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()

图片 1图2
且可求得数据的均值和标准差分别为:476.743785851和104.816562585
由图可知,粉红条形图是$\mu$=476.743785851,$\sigma$=104.816562585的正态分布条形图,而青色是四级成绩数据的分布图,尽管由于数量较少(500多个数据),所以拟合较差,不过能够看来成绩数据大概中央满足正态分布的。
不知晓为啥,正态曲线没有画出来,单独画正态曲线是足以画出来的,有待研究。

画折线图

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()

图片 2图1

二 、打开Excel文件读取数据

1
data = xlrd.open_workbook('excelFile.xls')

绘图直方图的一些参数解释

绘图都得以调用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

工具

  • Python
    3.5
  • xlrd模块
  • numpy模块及一些凭借模块(安装请自行查询办法,绝半数以上pip就可解决)
  • matplotlib绘图模块

xlrd基本用法

一 、导入模块

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()

图片 3图2
且可求得数据的均值和标准差分别为:476.743785851和104.816562585
由图可知,粉末蓝条形图是$\mu$=476.743785851,$\sigma$=104.816562585的正态分布条形图,而铁黑是四级成绩数据的遍布图,固然由于数量较少(500多少个数据),所以拟合较差,不过足以见到战绩数据也许中央满意正态分布的。
不明白怎么,正态曲线没有画出来,单独画正态曲线是可以画出来的,有待研讨。

更赏心悦目的格式见这里

一 、导入模块

1
import xlrd

制图直方图的有的参数解释

制图都能够调用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里面含有的数码,是1个list

摘自这里 from
denny

③ 、使用技术

  • 收获多少个工作表

    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
    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 #单元格的值'

② 、打开Excel文件读取数据

1
data = xlrd.open_workbook('excelFile.xls')

xlrd基本用法

工具

  • Python 3.5
  • xlrd模块
  • numpy模块及一些凭借模块(安装请自行查询办法,绝大多数pip就可解决)
  • matplotlib绘图模块

画折线图

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()

图片 4图1

相关文章