最近获得了一些四级成绩数据,大概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

画直方图并与正态分布直方图对比

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

库的主页
gallary

matplotlib的一些示例及其代码,是很好的学习工具。
用python做科学计算

用Python作科学计算的一些工具
xlrd文档
numpy的一些方法

【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用的更多相关文章

  1. python数据分析基础——numpy和matplotlib

    numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2假如有如下几组体重和身高数据,让求每组数据的BMI值: w ...

  2. python数据分析之numpy、matplotlib的使用

    5.3 Python的科学计算包 - Numpy numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算.这个库的前身是1995年就开始开发的一 ...

  3. Python——数据分析,Numpy,Pandas,matplotlib

    由于图片内容太多,请拖动至新标签页再查看

  4. 小白学 Python 数据分析(18):Matplotlib(三)常用图表(上)

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  5. 小白学 Python 数据分析(19):Matplotlib(四)常用图表(下)

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  6. 小白学 Python 数据分析(16):Matplotlib(一)坐标系

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  7. 小白学 Python 数据分析(17):Matplotlib(二)基础操作

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  8. Python数据分析--Pandas知识点(三)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...

  9. Python数据分析-Numpy数值计算

    Numpy介绍: NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. NumPy的主要功能: 1)ndarray,一个多维数组结构,高效且节省空间 2)无需循环对整组 ...

随机推荐

  1. html 空链接 href="#"与href="javascript:void(0)"的区别

    #包含了一个位置信息 默认的锚是#top 也就是网页的上端 而javascript:void(0) 仅仅表示一个死链接 这就是为什么有的时候页面很长浏览链接明明是#但跳动到了页首 而javascrip ...

  2. MySQL数据库中delimiter的作用概述

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...

  3. 什么是Servlet?

    HTML只能用来保存静态内容,而通常情况下,静态页面很难满足实际应用的需要,鉴于此,动态页面被引入.所谓动态页面,指的是能够根据不同时间,不同用户而显示不同内容的页面,例如常见的论坛.留言板.电子商务 ...

  4. 复杂的xml转化为java实体

    一.样例一: 以根据订单号向支付宝查询支付是否成功为例(成功信息) 失败信息: <?xml version="1.0" encoding="utf-8"? ...

  5. 对kinderEditor 的空内容进行验证

    var con = document.getElementById(item.Id).value; var a = con.replace(/( )|[ ]|(<p>)|(<\/p& ...

  6. CSS布局基础——BFC

    what's BFC? 第一次看到这个名词,我是拒绝的,css什么时候还有这个东西?于是迫不及待的google了一下,才发现原来它无时无刻不在我们的css当中,只不过它并不是一个属性,不需要我们平常使 ...

  7. 关于SharePoint 2013的工作流(一)

    从去年开始,一直和SharePoint 2013工作流打交道.自己瞎摸索,以实现功能为目的.直到如今也不知道走的路是否正确. 一开始用WF4发现整个都不一样了,用的xaml无法写后端代码.Google ...

  8. Android—基于Socket与上传图片到客户端

    最近项目中需要客户端和Socket互相传递数据时候需要相互传递图片所以做下总结以免以后忘记,也希望给大家带来帮助. 先上客户端的代码: 根据图片名称上传照相机中单个照片(此方法为自己封装) 参数所代表 ...

  9. 安装免费的正版Windows10操作系统 - 初学者系列 - 学习者系列文章

    Windows 10操作系统是目前Windows平台最新的操作系统,其相对于其它旧版的操作系统是一个比较成功的操作系统.微软直接使用10版本号,跳过了9版本号进行发布这款操作系统,说明windows ...

  10. ORACLE会话连接进程三者总结

    概念介绍 通俗来讲,会话(Session) 是通信双方从开始通信到通信结束期间的一个上下文(Context).这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器.通过哪个应用程序.哪个用户 ...