标签:

最近获得了一些四级成绩数据,大概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 应用...相关推荐

  1. python 直方图每个bin中的值_使用python中的matplotlib进行绘图分析数据

    matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备, ...

  2. python体测成绩数据分析_【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用

    最近获得了一些四级成绩数据,大概500多个,于是突发奇想是否能够看看这些成绩数据是否满足所谓的正态分布呢?说干就干,于是有了这篇文章. 文章顺带介绍了xlrd模块的一些用法和matplotlib画自定 ...

  3. 【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用

    最近获得了一些四级成绩数据,大概500多个,于是突发奇想是否能够看看这些成绩数据是否满足所谓的正态分布呢?说干就干,于是有了这篇文章. 文章顺带介绍了xlrd模块的一些用法和matplotlib画自定 ...

  4. python怎么索引json中的值_使用Python在JSON中查找值

    我之前已经成功地解析了JSON文件中的数据,但现在我要实现的函数遇到了问题.我有一个JSON格式的姓名.身份证号码和出生日期列表.我想在Python中得到的是让用户输入一个名字并检索他的身份证号码和出 ...

  5. python如何改变入参的值_从事数据分析3年后,发现用python入门数据分析这三本书必看!...

    做数据分析为什么选择python? 为什么选择python来做数据分析?先来看一下用python做数据分析有什么优势 1.python在数据分析方面有非常专业的模块,很多常用功能,在做数据分析时非常方 ...

  6. R语言ggplot2可视化:可视化堆叠的直方图、添加每个分组的每个bin的计数标签、在堆叠直方图的bin中的每个分组部分添加数值标签

    R语言ggplot2可视化:可视化堆叠的直方图.添加每个分组的每个bin的计数标签.在堆叠直方图的bin中的每个分组部分添加数值标签 目录

  7. python竞赛_浅谈Python在信息学竞赛中的运用及Python的基本用法

    浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...

  8. python字典修改键所对应值_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  9. python一次输入多个值_如何在Python的一行中从用户输入多个值?

    为了读取语言C中的多个变量,我们编写类似-//Read three variable in one line scanf("%d %d %d", &x, &y, & ...

最新文章

  1. Python-100 练习题 01 列表推导式
  2. nagios2------添加监控对象
  3. P1368-工艺【最小表示法】
  4. apache spark_Apache Spark软件包,从XML到JSON
  5. spring pojo_使用Spring将POJO公开为JMX MBean
  6. mysql四种输入_mysql四种事务隔离级别
  7. 中国电信学院c语言题库,电脑题库试题精编版.doc
  8. PyTorch 1.0 中文官方教程:torch.nn 到底是什么?
  9. linux timerfd系列函数总结:timerfd.h
  10. VB:常用内部函数大全,你会了几个呢?
  11. 用这几款软件轻松自动识别图片文字,快码住
  12. 简化“复杂”的层级管理,实现团队作战式的目标协同
  13. 《大护法》—— 花生镇里的成人童话
  14. 图特摩斯三世厚积薄发
  15. 扫描器s-scan下载安装功能应用
  16. Linux-CentOS 安装配置ExifTool
  17. Python学习手册 - 基础知识汇总(精简版)
  18. 商品期货CTA策略系列文章 -- CTA策略的起源
  19. 资讯和兴趣好烦,如何彻底关闭它?
  20. 抖音高贵气质的签名_抖音个性签名女简短高端霸气御姐范

热门文章

  1. 只读副本和Spring Data第3部分:配置两个实体管理器
  2. java8 默认方法_如何不使用Java 8默认方法
  3. mapreduce 算法_MapReduce算法–了解数据联接第二部分
  4. 行为设计模式:中介者
  5. OpenHub框架–下一个有趣的功能
  6. spring aop示例_Spring JpaRepository示例(内存中)
  7. flatMap()和事件顺序– RxJava常见问题解答
  8. eclipse使用技巧_有效使用Eclipse的热门技巧
  9. Spring 3使用JUnit 4进行测试– ContextConfiguration和AbstractTransactionalJUnit4SpringContextTests...
  10. jaxb 生成java类_重用生成的JAXB类