python描述性统计工作日上班时代码_基于Python的描述性统计实践
目录
1. 描述性统计概念
2. 利用NumPy和SciPy进行数值分析
3. 利用Matplotlib进行可视化
4. 总结
5. 参考资料
1 描述性统计概念
描述性统计主要是对数据集中的数据进行分析,借助图表或总结性的数值得出反映客观现象和总体情况的各种描述性特征,包括数据的集中趋势、离散程度、频数分布等。利用Python中的NumPy和SciPy工具可对数据集进行数值分析,而Matplotlib可用来绘制图形,直观反映数据的统计特征。
2 利用NumPy和SciPy进行数值分析
2.1 基本概念
NumPy是Python中常用的数值计算包,特点如下:使用ndarray,即多维数组,能提供以数组为导向的快速数值计算;多样的数学函数;用于读/写数据到磁盘的便利工具等。
利用np.array函数创建数组:
import numpy as np
data1 = [1,2,3]
arr1 = np.array(data1)
arr1
array([1, 2, 3])
嵌套序列能被转换成多维数组:
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
arr2
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
生成一组服从标准正态分布的(定量)数据:
from numpy.random import normal, randint
data3 = normal(0,1,size=10)
data3
array([-1.07931404, 0.31514773, -0.19889441, 0.28404286, 1.66185355,
0.6419591 , -0.11142133, -1.07634972, 0.06064659, 0.01672238])
生成一组服从均匀分布的(定性)数据:
data4 = randint(0,5, size=10)
data4
array([0, 1, 3, 0, 0, 1, 3, 2, 4, 4])
除了np.array,还有一些其他函数能创建数组:
2.2 数据集中趋势度量:平均数、中位数、众数
对于定量数据,平均值和中位数直观地反映了数据的中心位置。定性数据的中心位置由众数体现。
平均值:数据总和除以数据量。缺点:对异常值不敏感。
中位数:将数据按照从小到大的顺序排列,位于该排列中间位置的那个数据。奇数为本身,偶数求平均。
四分位数:把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。QL=下四分位数,即第25百分位数;QU=上四分位数,即第75百分位数。
众数:一组数据中出现次数最多的那个数据。
使用NumPy计算均值和中位数,以及百分位数(四分位数):
import numpy as np
from numpy import mean,median
# 创建数组:
percentiles = np.array([2.5, 12, 56, 37, 69, 92, 86, 70, 42, 25, 52, 75, 97.5])
# 计算平均值,结果保留两位小数:
a = round(mean(percentiles),2)
# 计算中位数:
b = median(percentiles)
# 计算百分位数(下四分位数):
c = np.percentile(percentiles, 25)
print('平均数:%s,中位数:%s,下四分位数:%s. '%(a,b,c))
平均数:55.08 ,中位数:56.0 ,下四分位数:37.0 .
使用pandas进行描述统计:
import pandas as pd
percentiles = [2.5, 12, 56, 37, 69, 92, 86, 70, 42, 25, 52, 75, 97.5]
(pd.DataFrame(percentiles)).describe() # 结果与NumPy相同
四分位数的应用——识别出可能的异常值。对异常值进行检查常用Turkey's test方法:
最小估计值——Q1-K(Q3-Q1)
最大估计值——Q3+K(Q3-Q1)。K的取值为1.5时,检出中度异常值;K的取值为3时,检出极度异常值。
2.3 数据离散趋势的度量:方差、标准差
方差:各个数据分别与其平均数之差的平方的和的平均数。
标准差:方差开根号。
离散系数(变异系数):标准差与均值的比值。离散系数越小,数据的离散程度就越小。
极差:表示统计资料中的变异量数,其最大值与最小值之间的差距。
from numpy import mean, ptp, var, std
scores = [31, 24, 23, 25, 14, 25, 13, 12, 14, 23,
32, 34, 43, 41, 21, 23, 26, 26, 34, 42,
43, 25, 24, 23, 24, 44, 23, 14, 52,32,
42, 44, 35, 28, 17, 21, 32, 42, 12, 34]
a = max(scores) # 最大值
b = min(scores) # 最小值
c = ptp(scores) # 极差
d = var(scores) # 方差
e = std(scores) # 标准差
f = mean(scores) / std(scores) # 变异系数
print('最大值:',a,'\n','最小值:',b,'\n','极差:',c,'\n','方差:',round(d,2),'\n'
'标准差:',round(e,2),'\n','变异系数:',round(f,2))
最大值: 52
最小值: 12
极差: 40
方差: 106.34
标准差: 10.31
变异系数: 2.76
2.4 偏差程度:Z-分数
Z-分数是指一个分数与平均数的差再除以标准差的过程。公式: z=(x-μ)/σ。其中x为某一具体分数, μ为平均数,σ为标准差。Z值代表着原始分数和总体平均值之间的距离,是以标准差为单位计算。应用:6σ管理方法。
# Z分数的计算实例
from numpy import mean,std
scores = [31, 24, 23, 25, 14, 25, 13, 12, 14, 23,
32, 34, 43, 41, 21, 23, 26, 26, 34, 42,
43, 25, 24, 23, 24, 44, 23, 14, 52, 32,
42, 44, 35, 28, 17, 21, 32, 42, 12, 34]
zScores = []
m = mean(scores)
n = std(scores)
# 用for循环遍历分数列表,求出Z分数并输出到新列表中
for i in scores:
zScore = round((i - m) / n,2)
zScores.append(zScore)
print(zScores)
[0.25, -0.43, -0.53, -0.33, -1.4, -0.33, -1.5, -1.59, -1.4, -0.53, 0.35, 0.54, 1.41, 1.22, -0.72, -0.53, -0.24, -0.24, 0.54, 1.32, 1.41, -0.33, -0.43, -0.53, -0.43, 1.51, -0.53, -1.4, 2.29, 0.35, 1.32, 1.51, 0.64, -0.04, -1.11, -0.72, 0.35, 1.32, -1.59, 0.54]
2.5 相关程度:相关系数,协方差
为了衡量两组数据的相关程度,引入协方差、相关系数的概念。协方差计算公式:
协方差的绝对值越大表示两组数据的相关程度越大。协方差为正值表示正相关,负值为负相关,0为不相关。相关系数是基于协方差但进行了无量纲处理。
# 协方差、相关系数计算实例:某网站曝光量及费用成本相关程度分析
from numpy import array,cov,corrcoef
exposure = [18481,15094,17619,16825,18811,10430,18]
cost = [4616,4649,4600,4557,4541,568,0]
data = array([exposure,cost])
# 计算曝光量与费用成本的协方差:
# 参数bias=1,表示结果除以N而不是(N-1)
g = cov(data,bias = 1)
# 计算曝光量与费用成本的相关系数:
h = corrcoef(data)
print(g)
print(h)
[[39095208.40816326 11076753.2244898 ]
[11076753.2244898 3812724.81632653]]
[[1. 0.90726255]
[0.90726255 1. ]]
协方差的返回结果为矩阵,第i行第j列的数据表示第i组数与第j组数的协方差,对角线为方差。相关系数的返回结果也是矩阵,第i行第j列的数据表示第i组数与第j组数的相关系数,对角线为1。
3 使用Matplotlib进行可视化
3.1 基本概念
图形可以直观地展示数据的分布特征。以下实例通过构造某公司广告投入、销量、消费者评分相关数据,探索了利用Matplotlib实现数据可视化的实践。
import csv
import numpy as np
# 生成模拟数据
costs = []
sales = []
scores = []
# 生成200个模拟数据
for i in range(200):
# 广告投入服从均值为60,标准差为9的正态分布
cost = np.random.normal(60,9)
# 销量由广告费作为自变量的线性回归模型产生,误差服从标准正态分布
sale = (cost * 0.78 ) + 48 + np.random.normal(0,1)
# 消费者评分服从均值为78,标准差为9的正态分布
score = np.random.normal(78,9)
if 85 <= score and score <= 100:
group = 'A'
elif score >= 70:
group = 'B'
elif score <= 55:
group = 'C'
else:
group = 'D'
costs.append(cost)
sales.append(sale)
scores.append(group)
data = [costs,sales,scores]
fn = 'sales.csv'
with open (fn,"w",newline = "") as fp: # 创建CSV文件写入对象
wr = csv.writer(fp)
for item in data:
wr.writerow(item)
# 可视化——消费者评分柱状图
from matplotlib import pyplot
def drawBar(scores):
xticks = ['A', 'B', 'C', 'D']
scoreGroup = {}
# 对每一等级的评价进行频数统计
for score in scores:
scoreGroup[score] = scoreGroup.get(score, 0) + 1
# 创建柱状图,参数1为柱的横坐标,参数2为柱的高度,参数align为柱的对齐方式
pyplot.bar(range(4), [scoreGroup.get(xtick, 0) for xtick in xticks], align='center')
pyplot.xticks(range(4), xticks)
# 设置横纵坐标轴文字说明
pyplot.xlabel('Score')
pyplot.ylabel('Frequency')
# 设置图标题
pyplot.title('Scores Of Customers')
# 绘图
pyplot.show()
drawBar(scores)消费者评分柱状图
# 可视化——饼图
from matplotlib import pyplot
# 绘制饼图
def drawPie(scores):
labels = ['A', 'B', 'C', 'D']
scoreGroup = {}
for score in scores:
scoreGroup[score] = scoreGroup.get(score, 0) + 1
# 参数1为扇形面积,label为扇形说明文字,参数3为扇形占比的显示格式
pyplot.pie([scoreGroup.get(label, 0) for label in labels], labels=labels, autopct='%1.1f%%')
pyplot.title('Scores Of Customers')
pyplot.show()
drawPie(scores)消费者评分饼图
# 可视化——直方图
from matplotlib import pyplot
def drawHist(costs):
pyplot.hist(costs, 60)
pyplot.xlabel('Costs')
pyplot.ylabel('Frequency')
pyplot.title('Costs Of Products')
pyplot.show()
drawHist(costs)广告投入直方图
# 关系分析——散点图
from matplotlib import pyplot
def drawScatter(costs, sales):
pyplot.scatter(costs, sales)
pyplot.xlabel('Costs')
pyplot.ylabel('Sales')
pyplot.title('Costs & Sales Of Products')
pyplot.show()
drawScatter(costs, sales)广告投入-销售量散点图
# 箱型图:
from matplotlib import pyplot
def drawBox(costs):
pyplot.boxplot([costs], labels=['Costs'])
pyplot.title('Costs Of Products')
pyplot.show()
drawBox(costs)广告投入箱型图
箱型图最上和最下两条横线是上界线和下界线,高于上界线和低于下界线的数据是异常值。红线是中位数,箱形的上下框线为上下四分位数。
4 总结
描述性统计能够直观反映一组数据的基本特征,但是由于简单,难以描述多元变量之间的复杂关系。相较于统计特征数值,数据展现的一种直观方式是可视化。可通过数据间的关系,选择合适的图表来展示数据。
数据成分展示:用于表示整体的一部分,常用饼图表示,柱形图也可表示成分关系。
数据排序:用于不同项目、类别间数据比较,常用柱形图、条形图等。
时间序列:用于表示发展趋势,常用折线图、柱形图等。
频率分布:柱形图。
相关性:散点图。
python描述性统计工作日上班时代码_基于Python的描述性统计实践相关推荐
- python描述性统计工作日上班时代码_数据的描述性统计以及用Python代码实现
一.数据的描述性统计 对数据的描述性统计主要是指对结构化数据的描述分析,可从三个维度进行分析:数据的集中趋势.数据的离散程度和数据的分布形态. 描述数据集中趋势的指标有:众数.中位数.平均数(包含算数 ...
- python的成语接龙程序代码_基于Python经典版成语接龙逻辑实现
import structimport os # 搜狗的scel词库就是保存的文本的unicode编码,每两个字节一个字符(中文汉字或者英文字母) # 找出其每部分的偏移位置即可 # 主要两部分 #1 ...
- python的坐标代码_基于Python的地图坐标服务接口调用代码实例
代码描述:基于Python的地图坐标服务接口调用代码实例 关联数据:地图坐标服务 接口地址:http://www.juhe.cn/docs/api/id/32 #!/usr/bin/python # ...
- 随机数写excel java代码_基于python实现在excel中读取与生成随机数写入excel中
搜索热词 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩. 首先要用到的数据库有:xlwt,xlr ...
- python点名代码_基于python tkinter的点名小程序功能的实例代码
基于python tkinter的点名小程序功能的实例代码,花名册,次数,窗口,未找到,初始化 基于python tkinter的点名小程序功能的实例代码 易采站长站,站长之家为您整理了基于pytho ...
- python利用pandas合并excel表格代码_利用Python pandas对Excel进行合并的方法示例
前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...
- python三维重建代码_基于Python的三维重建开源代码
[实例简介] 基于Python的三维重建开源代码,包括特征提取,SFM,PMVS以及CMVS等相关功能! [实例截图] [核心代码] sfm-bundler(python) └── sfm-bundl ...
- 编写python手机充值代码_基于Python的天聚人合加油卡充值接口调用代码实例
一.接口申请开通 本代码是基于天聚人合的话费充值API实现的话费充值功能,使用前需要: 通过https://www.tianjurenhe.com/docs/api/?id=1申请开通话费接口服务. ...
- python动态更新窗口上的图片_基于Python实现matplotlib中动态更新图片(交互式绘图)...
最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...
- python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...
最新文章
- 正确配置Linux系统ulimit值的方法【转】
- 每隔k次反转一次 链表_PTA 5-2 Reversing Linked List (25) [法一] - 线性表 - 链表反转 (PAT 1074)...
- 仓库管理系统gitlab
- AI:几张图理清人工智能与机器学习、知识发现、数据挖掘、统计学、模式识别、神经计算学、数据库之间的暧昧关系
- linux:系统对open files的限制
- python 学习笔记一
- ubuntu boot中grub误操作 导致系统开进grub
- UnixLinux大学教程目录
- android系统(107)---Android路由表设置(route amp; DNS)
- Java5线程并发库之同步集合
- java实现时间轮定时器_基于侵入式链表的时间轮定时器实现
- webservice规范及webservice框架
- 拓嘉启远电商:如何提高拼多多店铺信誉
- cad图片怎么转换成pdf格式
- Spring Boot四大神器之Auto Configuration
- 怎么给word插入页码,详细图文教学,轻松学会
- Excel按背景颜色分类统计各颜色个数的操作
- Iog4j2漏洞相关技术分析
- c语言 如何对数组取地址,C语言 对数组名取地址
- 大写字母与小写字母的转换