文章目录

  • 一、前言
  • 二、使用步骤
    • 1.引入库
    • 2.随机正态分布生成算法
      • 2.1.利用np.random.normal函数生成二维数据
      • 2.2.利用for循环生成100*100数据
    • 3.生成分布图
    • 4. 导出到表格
    • 5. 完整算法
      • 5.1.利用np.random.normal函数生成二维数据
      • 5.2.利用for循环生成100*100数据
  • 总结

一、前言

最近需要大量的正态分布的数据,为了方便,使用python实现随机正态分布,画出理想正态分布图和实际的矩形分布,并导出到表格里面。

二、使用步骤

1.引入库

下面是编写代码所用到的库

import numpy as np   #随机数
import matplotlib.pyplot as plt   #画图
import xlwt    #导出表格

2.随机正态分布生成算法

生成的数据是100*100,且使用了两种生成正态分布的算法。

  • 一种是基于最大值、最小值范围得到的随机分布。
result = np.random.randint(0, 100, size=100) # 最小值,最大值,数量

  • 一种是基于均值和标准差得到的随机分布。
result = np.random.normal(60, 20, (row,cols))  # 均值,标准差,数量

可以看到,两种算法当中,基于均值和标准差得到的数据更接近正态分布,接下来以第二种做演示。

2.1.利用np.random.normal函数生成二维数据

# 根据均值、标准差,求指定范围的正态分布概率值
def normfun(x, mu, sigma):pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))return pdfrow = 100  #行
cols = 100  #列#随机生成,整体正态分布
# result = np.random.randint(0, 100, size=100) # 最小值,最大值,数量
result = np.random.normal(60, 20, (row,cols))  # 均值,标准差,数量
#print(result)

生成的数据

2.2.利用for循环生成100*100数据

# 根据均值、标准差,求指定范围的正态分布概率值
def normfun(x, mu, sigma):pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))return pdfrow = 100  #行
cols = 84  #列
result_arr = [[0 for i in range(cols)] for j in range(row)]#随机生成,行正态分布
for i in range(0,row):# result = np.random.randint(0, 100, size=100) # 最小值,最大值,数量result = np.random.normal(100, 50, cols)  # 均值,标准差,数量x = 0for j in result:result_arr[i][x] = round(j)   #取整x = x+1for i in range(0,row):print(result_arr[i])

对数据做了取整,生成的部分数据

3.生成分布图

可以修改bins个数

#正态分布图
x = np.arange(min(result), max(result), 1)  #步长为1
# 设定 y 轴,载入刚才的正态分布函数
print("均值:",result.mean(), "标准差:",result.std())  #均值、标准差
y = normfun(x, result.mean(), result.std())
plt.plot(x, y) # 这里画出理论的正态分布概率曲线# 这里画出实际的参数概率与取值关系
plt.hist(result, bins=100, rwidth=0.9, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙
plt.title('distribution')
plt.xlabel('temperature')
plt.ylabel('probability')
# 输出
plt.show() # 最后图片的概率和不为1是因为正态分布是从负无穷到正无穷,这里指截取了数据最小值到最大值的分布
  • 可以修改柱状图个数,个数=100,bins=10生成的图示:

  • 个数=100,bins=100生成的图示:

4. 导出到表格

不同的算法对应不同的导出格式

#导出为表格
workbook = xlwt.Workbook(encoding="utf-8")  # 创建workbook对象
worksheet = workbook.add_sheet('sheet1')  # 创建工作表
for i in range(0,row):for j in range(0,cols):worksheet.write(i, j, result_arr[i][j])
workbook.save('test.xls')

生成的部分数据

5. 完整算法

虽然采取了不同的算法,但总体思路是一样的,但是会有一些细节上的改动,下面将利用函数自身生成的数据算法与利用for循环算法生成的数据结果一并展示。

5.1.利用np.random.normal函数生成二维数据

import numpy as np
import matplotlib.pyplot as plt
import xlwt# 根据均值、标准差,求指定范围的正态分布概率值
def normfun(x, mu, sigma):pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))return pdfrow = 100  #行
cols = 100  #列#随机生成,整体正态分布
#result = np.random.randint(0, 100, size=1000) # 最小值,最大值,数量
result = np.random.normal(60, 20, (row,cols))  # 均值,标准差,数量
print(result)#导出为表格n=0
workbook = xlwt.Workbook(encoding="utf-8")  # 创建workbook对象
worksheet = workbook.add_sheet('sheet1')  # 创建工作表
for i in range(0,row):for j in range(0,cols):worksheet.write(i, j, round(result[i][j]))
workbook.save('test_3.xls')#正态分布图
result = result[2]
x = np.arange(min(result), max(result), 1)  #步长为1
# 设定 y 轴,载入刚才的正态分布函数
print("均值:",result.mean(), "标准差:",result.std())  #均值、标准差
y = normfun(x, result.mean(), result.std())
plt.plot(x, y) # 这里画出理论的正态分布概率曲线# 这里画出实际的参数概率与取值关系
plt.hist(result, bins=100, rwidth=0.9, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙
plt.title('distribution')
plt.xlabel('temperature')
plt.ylabel('probability')
# 输出
plt.show() # 最后图片的概率和不为1是因为正态分布是从负无穷到正无穷,这里指截取了数据最小值到最大值的分布

5.2.利用for循环生成100*100数据

import numpy as np
import matplotlib.pyplot as plt
import xlwt# 根据均值、标准差,求指定范围的正态分布概率值
def normfun(x, mu, sigma):pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))return pdfrow = 100  #行
cols = 100  #列
result_arr = [[0 for i in range(cols)] for j in range(row)]#随机生成,行正态分布
for i in range(0,row):# result = np.random.randint(0, 100, size=100) # 最小值,最大值,数量result = np.random.normal(60, 20, cols)  # 均值,标准差,数量#print(result)x = 0for j in result:result_arr[i][x] = round(j)x = x+1for i in range(0,row):print(result_arr[i])#导出为表格
workbook = xlwt.Workbook(encoding="utf-8")  # 创建workbook对象
worksheet = workbook.add_sheet('sheet1')  # 创建工作表
for i in range(0,row):for j in range(0,cols):worksheet.write(i, j, result_arr[i][j])
workbook.save('test_2.xls')x = np.arange(min(result), max(result), 1)  #步长为1
# 设定 y 轴,载入刚才的正态分布函数
print(result.mean(), result.std())  #均值、标准差
y = normfun(x, result.mean(), result.std())
plt.plot(x, y) # 这里画出理论的正态分布概率曲线# 这里画出实际的参数概率与取值关系
plt.hist(result, bins=100, rwidth=0.9, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙
plt.title('distribution')
plt.xlabel('temperature')
plt.ylabel('probability')
# 输出
plt.show() # 最后图片的概率和不为1是因为正态分布是从负无穷到正无穷,这里指截取了数据最小值到最大值的分布

总结

以上就是今天要讲的内容,本文仅仅简单介绍了使用python随机生成正态分布的数据,画图,并导出。正态分布是机器学习中很常见的一种需求,往往需要大量的数据进行测试,此时,本文的方法就可以大大减少因数据而花费的时间啦!
如有问题,欢迎评论区留言啊!

使用python实现随机正态分布数据,并导出到表格(超详细)相关推荐

  1. Python数据可视化之Plotnine库超详细教程系列

    Python数据可视化之Plotnine库超详细教程系列(一):概述 一.Plotnine库简介 ggplot2包奠定了R语言数据可视化在数据科学中的地位,数据可视化一直是Python的短板,即使有M ...

  2. 剪映导出SRT字幕超详细图文教程

    剪映导出SRT字幕超详细图文教程 视频的字幕是制作视频的过程当中一个很麻烦的事情. 不仅要使得字幕和人声出现的时间匹配,还要校对错别字,删减字幕,增加字幕等繁琐的操作.在以往为视频添加字幕的操作中,有 ...

  3. python mongodb 随机抽取数据

    import sys import importlib importlib.reload(sys)#需要xlwt库的支持 from xlwt import * #指定file以utf-8的格式打开 f ...

  4. Python 生成随机经纬度数据

    Python 生成随机经纬度 Description: python 自动生成经纬度, 该脚本适用于python3, 如果是python2请把# from __future__ import divi ...

  5. matlab自动生成excel工作区,matlab数据怎么导出excel表格-matlab工作区数据怎么转为excel...

    怎样将MATLAB中的数据输出到excel中 使用 xlswrite()函数可以将matlab中数据保存到excel中,请看下面例子: >> data = magic(5) % 示例数据 ...

  6. matlab数据导出excel,matlab数据点导出excel表格-怎样将matlab中数据导出到excel中?...

    怎样将matlab中数据导出到excel中? xlswrite('E:系数.xls',B,'','A2') E:系数.xls 是路径 B是需要导入的矩阵 A2是指矩阵从表格中的A2开始输入 希望可以帮 ...

  7. freemarker模板导出带表格word详细教程

    前言:另外一篇是手机端的word导出,需要兼容性,不然在安卓手机会乱码 freemarker模板导出word循环图片表格详细教程_Java大表哥的博客-CSDN博客  并且另存为模版格式不同数据绑定方 ...

  8. python怎么随机生成数据_Python-随机生成数据

    from random importchoice,randintimportstringimportcodecsimportrandomimportopenpyxlimporttimefrom ope ...

  9. 使用python自动生成病例数据并导出excel(附代码)

    因为实验需要处理大量的数据,便考虑进行自动生成,结果如下 代码如下 import time import random province=['河北','山西','辽宁','吉林','黑龙江','江苏' ...

最新文章

  1. visual paradigm 表示选择关系_css3选择器用法介绍
  2. 【Under-the-hood-ReactJS-Part13】源码解读
  3. 为什么产品经理总在焦虑
  4. yolo-v2 v3实现笔记 mAP:mean average precision 平均精度均值
  5. php 观察者模式怎么用,php怎么实现观察者模式
  6. MySql 你真的会使用字符串索引吗???
  7. 《Reids 设计与实现》第十九章 慢查询日志
  8. Cron 表达式一篇通
  9. linux下qemu共享文件夹,QEMU Windows来宾和Linux主机之间的共享文件夹
  10. 洛谷——P1614 爱与愁的心痛
  11. 计算机硬盘满了怎么解决,电脑磁盘满了怎样清理
  12. 简单的个人介绍网页【附代码】
  13. win10系统自带的日历hover效果
  14. Python实现自动挂机脚本(基础篇)
  15. 2022_WWW_Improving Graph Collaborative Filtering with Neighborhood-enriched Contrastive Learning
  16. 职场漂流记:过往皆为浮云
  17. Java 获取当前时间前一个小时的时间
  18. 用于阿尔茨海默症分期早期检测的多模态深度学习模型
  19. 联想服务器TS130主板芯片组,【ThinkServer TS130配置】ThinkServer TS130塔式服务器配置-ZOL中关村在线...
  20. 潘建伟:与量子“纠缠”的逐梦者

热门文章

  1. 分析香港2万6千套在售二手房数据,1000万的居然有那么多
  2. 图片获取、格式转换与后台存储
  3. javamail+iCal4j实现发送邮件会议
  4. JavaScript高级篇
  5. pytorch backward中的gradient参数实验
  6. 【图像分类】2022-RepLKNet CVPR 31x31卷积了解一下
  7. 专访“百变”张泉灵:投资活得“像狗”,并非华丽转身
  8. 文件加密和解密 - 密钥存储
  9. 河南省第十二届ACM竞赛总结
  10. 商业地产如何走出高空置率困局?