1、生成正态分布数据并绘制概率分布图

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

# 根据均值、标准差,求指定范围的正态分布概率值

def normfun(x, mu, sigma):

pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))

return pdf

# result = np.random.randint(-65, 80, size=100) # 最小值,最大值,数量

result = np.random.normal(15, 44, 100) # 均值为0.5,方差为1

print(result)

x = np.arange(min(result), max(result), 0.1)

# 设定 y 轴,载入刚才的正态分布函数

print(result.mean(), result.std())

y = normfun(x, result.mean(), result.std())

plt.plot(x, y) # 这里画出理论的正态分布概率曲线

# 这里画出实际的参数概率与取值关系

plt.hist(result, bins=10, rwidth=0.8, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙

plt.title('distribution')

plt.xlabel('temperature')

plt.ylabel('probability')

# 输出

plt.show() # 最后图片的概率和不为1是因为正态分布是从负无穷到正无穷,这里指截取了数据最小值到最大值的分布

根据范围生成正态分布:

result = np.random.randint(-65, 80, size=100) # 最小值,最大值,数量

根据均值、方差生成正态分布:

result = np.random.normal(15, 44, 100) # 均值为0.5,方差为1

2、判断一个序列是否符合正态分布

import numpy as np

from scipy import stats

pts = 1000

np.random.seed(28041990)

a = np.random.normal(0, 1, size=pts) # 生成1个正态分布,均值为0,标准差为1,100个点

b = np.random.normal(2, 1, size=pts) # 生成1个正态分布,均值为2,标准差为1, 100个点

x = np.concatenate((a, b)) # 把两个正态分布连接起来,所以理论上变成了非正态分布序列

k2, p = stats.normaltest(x)

alpha = 1e-3

print("p = {:g}".format(p))

# 原假设:x是一个正态分布

if p < alpha: # null hypothesis: x comes from a normal distribution

print("The null hypothesis can be rejected") # 原假设可被拒绝,即不是正态分布

else:

print("The null hypothesis cannot be rejected") # 原假设不可被拒绝,即使正态分布

3、求置信区间、异常值

import numpy as np

import matplotlib.pyplot as plt

from scipy import stats

import pandas as pd

# 求列表数据的异常点

def get_outer_data(data_list):

df = pd.DataFrame(data_list, columns=['value'])

df = df.iloc[:, 0]

# 计算下四分位数和上四分位

Q1 = df.quantile(q=0.25)

Q3 = df.quantile(q=0.75)

# 基于1.5倍的四分位差计算上下须对应的值

low_whisker = Q1 - 1.5 * (Q3 - Q1)

up_whisker = Q3 + 1.5 * (Q3 - Q1)

# 寻找异常点

kk = df[(df > up_whisker) | (df < low_whisker)]

data1 = pd.DataFrame({'id': kk.index, '异常值': kk})

return data1

N = 100

result = np.random.normal(0, 1, N)

# result = np.random.randint(-65, 80, size=N) # 最小值,最大值,数量

mean, std = result.mean(), result.std(ddof=1) # 求均值和标准差

# 计算置信区间,这里的0.9是置信水平

conf_intveral = stats.norm.interval(0.9, loc=mean, scale=std) # 90%概率

print('置信区间:', conf_intveral)

x = np.arange(0, len(result), 1)

# 求异常值

outer = get_outer_data(result)

print(outer, type(outer))

x1 = outer.iloc[:, 0]

y1 = outer.iloc[:, 1]

plt.scatter(x1, y1, marker='x', color='r') # 所有离散点

plt.scatter(x, result, marker='.', color='g') # 异常点

plt.plot([0, len(result)], [conf_intveral[0], conf_intveral[0]])

plt.plot([0, len(result)], [conf_intveral[1], conf_intveral[1]])

plt.show()

4、采样点离散图和概率图

import numpy as np

import matplotlib.pyplot as plt

from scipy import stats

import pandas as pd

import time

print(time.strftime('%Y-%m-%D %H:%M:%S'))

# 根据均值、标准差,求指定范围的正态分布概率值

def _normfun(x, mu, sigma):

pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))

return pdf

# 求列表数据的异常点

def get_outer_data(data_list):

df = pd.DataFrame(data_list, columns=['value'])

df = df.iloc[:, 0]

# 计算下四分位数和上四分位

Q1 = df.quantile(q=0.25)

Q3 = df.quantile(q=0.75)

# 基于1.5倍的四分位差计算上下须对应的值

low_whisker = Q1 - 1.5 * (Q3 - Q1)

up_whisker = Q3 + 1.5 * (Q3 - Q1)

# 寻找异常点

kk = df[(df > up_whisker) | (df < low_whisker)]

data1 = pd.DataFrame({'id': kk.index, '异常值': kk})

return data1

N = 100

result = np.random.normal(0, 1, N)

# result = np.random.randint(-65, 80, size=N) # 最小值,最大值,数量

# result = [100]*100 # 取值全相同

# result = np.array(result)

mean, std = result.mean(), result.std(ddof=1) # 求均值和标准差

# 计算置信区间,这里的0.9是置信水平

if std == 0: # 如果所有值都相同即标准差为0则无法计算置信区间

conf_intveral = [min(result)-1, max(result)+1]

else:

conf_intveral = stats.norm.interval(0.9, loc=mean, scale=std) # 90%概率

# print('置信区间:', conf_intveral)

# 求异常值

outer = get_outer_data(result)

# 绘制离散图

fig = plt.figure()

fig.add_subplot(2, 1, 1)

plt.subplots_adjust(hspace=0.3)

x = np.arange(0, len(result), 1)

plt.scatter(x, result, marker='.', color='g') # 画所有离散点

plt.scatter(outer.iloc[:, 0], outer.iloc[:, 1], marker='x', color='r') # 画异常离散点

plt.plot([0, len(result)], [conf_intveral[0], conf_intveral[0]]) # 置信区间线条

plt.plot([0, len(result)], [conf_intveral[1], conf_intveral[1]]) # 置信区间线条

plt.text(0, conf_intveral[0], '{:.2f}'.format(conf_intveral[0])) # 置信区间数字显示

plt.text(0, conf_intveral[1], '{:.2f}'.format(conf_intveral[1])) # 置信区间数字显示

info = 'outer count:{}'.format(len(outer.iloc[:, 0]))

plt.text(min(x), max(result)-((max(result)-min(result)) / 2), info) # 异常点数显示

plt.xlabel('sample count')

plt.ylabel('value')

# 绘制概率图

if std != 0: # 如果所有取值都相同

fig.add_subplot(2, 1, 2)

x = np.arange(min(result), max(result), 0.1)

y = _normfun(x, result.mean(), result.std())

plt.plot(x, y) # 这里画出理论的正态分布概率曲线

plt.hist(result, bins=10, rwidth=0.8, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙

info = 'mean:{:.2f}\nstd:{:.2f}\nmode num:{:.2f}'.format(mean, std, np.median(result))

plt.text(min(x), max(y) / 2, info)

plt.xlabel('value')

plt.ylabel('Probability')

else:

fig.add_subplot(2, 1, 2)

info = 'non-normal distribution!!\nmean:{:.2f}\nstd:{:.2f}\nmode num:{:.2f}'.format(mean, std, np.median(result))

plt.text(0.5, 0.5, info)

plt.xlabel('value')

plt.ylabel('Probability')

plt.savefig('./distribution.jpg')

plt.show()

print(time.strftime('%Y-%m-%D %H:%M:%S'))

以上就是python 生成正态分布数据,并绘图和解析的详细内容,更多关于python 正态分布的资料请关注脚本之家其它相关文章!

python生成正态分布数据_python 生成正态分布数据,并绘图和解析相关推荐

  1. python批量读取excel表格数据_Python读取Excel数据并生成图表过程解析

    一.需求背景 自己一直在做一个周基金定投模拟,每周需要添加一行数据,并生成图表.以前一直是用Excel实现的.但数据行多后,图表大小调整总是不太方便,一般只能通过缩放比例解决. 二.需求实现目标 通过 ...

  2. python设定数值范围_Python 生成周期性波动的数据 可指定数值范围

    代码 import numpy as np import math import matplotlib.pyplot as plt #python在指定的时间段生成周期性波动的数据: #周期性 lon ...

  3. python制作考试系统_python测试框架数据生成工具最全资源汇总

    xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...

  4. python脚本迁移数据库_Python迁移MySQL数据到MongoDB脚本

    MongoDB是一个文档数据库,在存储小文件方面存在天然优势.随着业务求的变化,需要将线上MySQL数据库中的行记录,导入到MongoDB中文档记录. 一.场景:线上MySQL数据库某表迁移到Mong ...

  5. python雷达和柱形图_Python Pygal常见数据图(折线图、柱状图、饼图、点图、仪表图和雷达图)详解...

    Pygal 同样支持各种不同的数据图,比如饼图.折线图等.Pygal 的设计很好,不管是创建哪种数据图,Pygal 的创建方式基本是一样的,都是先创建对应的数据图对象,然后添加数据,最后对数据图进行配 ...

  6. python读取数据校验数据_python做本地数据与数据库的校验

    #coding=utf-8 from pymongo importMongoClient#连接mongo数据库 env ={'dev': {'mongodb_host': 'mongodb://账号: ...

  7. python生成字符画_Python生成字符画 | 文艺数学君

    摘要这一篇文章介绍使用Python生成字符画的方式. 会给出简单的原理介绍和实现的方式. 最后会给出源代码的链接地址. 简介 这一篇介绍一下使用Python来进行字符画的生成. 这里会介绍一下生成的步 ...

  8. python怎么读数据_Python如何读取数据

    一.从文本中读取数据 Python可以读取任何格式的文本数据,使用Python读取文本数据一般分为三个步骤.分别是:定义数据文件.获取文件对象.读取文件内容.下面让小编来分别解释它们是如何实现的. 定 ...

  9. python监听串口数据_python 读取串口数据的示例

    python3 读取串口数据 demo 最近在写一个demo,zigbee串口连接树莓派,树莓派使用串口通信接受zigbee穿过来得值.其中我是用的树莓派是3代B+,zigbee每隔三秒钟从串口输出数 ...

最新文章

  1. c++ stl之pirority_queue
  2. ssh报错:Could not load host key:/etc/ssh/ssh_host_rsa_keyssh_host_ecdsa_keyssh_host_ed25519_key...
  3. Python统计列表中的重复项出现的次数的方法
  4. CSS3实现光束和波浪
  5. 关于XP和win7 的IIS发布问题
  6. thinkphp 字段静态验证$_validate中错误提醒多语言化写成{%LANGUATE}的原因
  7. Android开发之Activity(实现Activity跳转)
  8. stringbuilder寻找字符串位置可能存在多个 java_java面试题整理(一)
  9. 服务器控制口协议,服务器管理ipmi接口协议的扩展方法 Extension Methods server management interface protocol ipmi...
  10. 【电脑】VirtualBox 安装 Win98 写网页
  11. 从零开始写javaweb框架笔记10-搭建轻量级JAVAWEB框架-确定目标
  12. 寻找春天nbsp;九宫格日记-2014.03.08
  13. 移动App | 个人隐私信息合规检测浅析及方法
  14. 3_寻找假币问题(分治法)
  15. python数字的表示
  16. 如何通俗解释Docker是什么?
  17. 玩游戏机械键盘什么牌子好, 我们聊聊Hyperx游戏机械键盘
  18. 微信奇销36计 赖老师
  19. kill进程的几种方法
  20. seaweedfs上传文件为什么要先申请文件号?(/dir/assign)(两种工作模式:Volume模式与Filer模式)(seaweed上传文件)

热门文章

  1. 小学阅读方法六种_小学数学速算六种方法
  2. Pentium 4处理器架构/微架构/流水线 (11) - NetBurst执行核详解 - Load/Store操作/存储转发
  3. Intel 64/x86_64/IA-32/x86处理器基本执行环境 (1) - 32位执行环境概述
  4. 如何清理电脑c盘_【电脑】第一期干货:如何正确清理C盘?
  5. java swing 图片旋转_Java图片旋转,背景透明化
  6. [译]JavaScript的新功能将改变正则表达式的编写方式
  7. Windows遇到ERR_NETWORK_ACCESS_DENIED处理方案
  8. Docker和Kubernetes应用程序打包:Metaparticle、Pulumi与Ballerina比较
  9. 同步监视器之同步代码块、同步方法
  10. HDU 6168 Numbers 思维 水题