当前位置: 首页 > news >正文

NumPy 随机数据分布与 Seaborn 可视化详解

随机数据分布

什么是数据分布?

数据分布是指数据集中所有可能值出现的频率,并用概率来表示。它描述了数据取值的可能性。

在统计学和数据科学中,数据分布是分析数据的重要基础。

NumPy 中的随机分布

NumPy 的 random 模块提供了多种方法来生成服从不同分布的随机数。

生成离散分布随机数

choice(a, p, size):从数组 a 中随机选择元素,并根据概率 p 进行选择。a:源数组,包含所有可能值。p:每个值的概率数组,总和必须为 1。size:输出数组的形状。

示例:生成 100 个随机数,其中 3 出现的概率为 0.2,5 出现的概率为 0.4,7 出现的概率为 0.3,9 出现的概率为 0.1:

import numpy as npx = np.random.choice([3, 5, 7, 9], p=[0.2, 0.4, 0.3, 0.1], size=100)
print(x)

生成连续分布随机数

NumPy 提供了多种方法来生成服从不同连续分布的随机数,例如正态分布、均匀分布、指数分布等。

randn(size):生成服从标准正态分布的随机数。rand(size):生成服从均匀分布的随机数。beta(a, b, size):生成服从 Beta 分布的随机数。gamma(shape, scale, size):生成服从 Gamma 分布的随机数。poisson(lam, size):生成服从泊松分布的随机整数。

示例:生成 10 个服从标准正态分布的随机数:

import numpy as npx = np.random.randn(10)
print(x)

随机排列

洗牌数组

shuffle(arr):对数组 arr 进行随机洗牌,修改原始数组。

示例:随机洗牌数组 [1, 2, 3, 4, 5]

import numpy as np
from numpy.random import shufflearr = np.array([1, 2, 3, 4, 5])shuffle(arr)
print(arr)

生成数组的随机排列

permutation(arr):生成数组 arr 元素的随机排列,不修改原始数组。

示例:生成数组 [1, 2, 3, 4, 5] 的随机排列:

import numpy as np
from numpy.random import permutationarr = np.array([1, 2, 3, 4, 5])x = permutation(arr)
print(x)

练习

  1. 使用 choice 方法生成 200 个随机数,其中 1 出现的概率为 0.1,2 出现的概率为 0.2,3 出现的概率为 0.7。

  2. 生成 10 个服从指数分布的随机数。

  3. 对数组 [10, 20, 30, 40, 50] 进行随机洗牌。

  4. 生成数组 [6, 7, 8, 9, 10] 元素的随机排列。

解决方案

import numpy as np
from numpy.random import choice, permutation, expon# 1. 使用 choice 方法生成随机数
random_numbers = choice([1, 2, 3], p=[0.1, 0.2, 0.7], size=200)
print(random_numbers)# 2. 生成服从指数分布的随机数
exponential_randoms = expon(scale=1, size=10)
print(exponential_randoms)# 3. 对数组进行随机洗牌
arr = np.array([10, 20, 30, 40, 50])
shuffle(arr)
print(arr)# 4. 生成数组的随机排列
random_permutation = permutation([6, 7, 8, 9, 10])
print(random_permutation)

使用 Seaborn 可视化分布

简介

Seaborn 是一个基于 Matplotlib 的 Python 数据可视化库,用于创建统计图表。它提供了一系列高级绘图函数,可以轻松创建美观且信息丰富的统计图形。

安装 Seaborn

如果您已经安装了 Python 和 pip,可以使用以下命令安装 Seaborn:

pip install seaborn

如果您使用的是 Jupyter Notebook,可以使用以下命令安装 Seaborn:

!pip install seaborn

绘制分布图

分布图是一种可视化数据分布的图表。它显示了数据集中每个值的出现频率。

在 Seaborn 中,可以使用 sns.distplot() 函数绘制分布图。该函数接受以下参数:

data:要绘制分布的数据。可以是数组、列表或 Pandas 数据框。hist:如果为 True(默认),则绘制直方图;如果为 False,则只绘制密度曲线。kde:如果为 True(默认),则使用核密度估计 (KDE) 来估计数据的分布;如果为 False,则使用直方图。bins:用于创建直方图的直方图数量。norm:用于规范分布的类型。例如,norm='kde' 将使用 KDE 来规范分布。

示例:绘制正态分布

以下示例演示如何使用 Seaborn 绘制正态分布:

import seaborn as sns
import numpy as np# 生成随机数据
data = np.random.randn(1000)# 绘制分布图
sns.distplot(data)
plt.show()

该代码将生成 1000 个服从标准正态分布的随机数,并使用 Seaborn 绘制它们的分布图。

示例:绘制自定义分布

以下示例演示如何绘制自定义分布:

import seaborn as sns
import numpy as np# 生成自定义数据
data = [1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 7, 7, 8, 9]# 绘制分布图
sns.distplot(data, hist=False, kde=False)
plt.show()

该代码将生成一个包含重复值的自定义数据数组,并使用 Seaborn 绘制它们的分布图,不显示直方图或密度曲线。

练习

  1. 生成 500 个服从均匀分布的随机数,并绘制它们的分布图。

  2. 生成 1000 个服从指数分布的随机数,并绘制它们的分布图。

  3. 从以下数据中绘制分布图:

data = [23, 37, 43, 29, 31, 32, 36, 27, 31, 33, 34, 25, 27, 28, 42, 38, 27, 27, 33, 31, 26, 29, 31, 35, 33, 30, 30, 32, 36, 28, 31, 33, 38, 29, 31, 31, 34, 36, 26, 25, 26, 34, 37, 28, 36, 31, 29, 31, 27, 28, 32, 37, 30, 33, 33, 27, 31, 32, 32, 36, 25, 32, 35, 37, 37, 30, 31, 34, 33, 29, 32, 31, 36, 26, 29, 31, 37, 28, 28, 37, 31, 32, 36, 33, 27, 31, 32, 33, 32, 32, 30, 27, 36, 38, 35, 26, 32, 37, 31, 30, 33, 30, 27, 

文章转载自:小万哥丶

原文链接:https://www.cnblogs.com/xiaowange/p/18205065

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 请叙述Vue 中使用了哪些设计模式
  • 安装和配置 FRP (Fast Reverse Proxy)
  • 第14章-蓝牙遥控小车 手把手做蓝牙APP遥控小车 蓝牙串口通讯讲解
  • Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新)
  • 39. 组合总和 - 力扣(LeetCode)
  • 《Ai企业知识库》-模型实践-rasa开源学习框架-基础理论-02
  • Vue3(TypeScript)-CSSProperties代码示例及用法详解
  • ubuntu22.04安装cuda10.2
  • matlab 2023b 不要升级,升级用不了
  • android pdf文件预览
  • 【React】二次封装Antd的Table组件
  • SQL注释方法 -- 单行注释/多行注释
  • 数据结构(三)循环链表
  • 【数据结构】排序算法大全(快速、堆、归并、插入、折半、希尔、冒泡、计数、基数)各算法比较、解析+完整代码
  • UE4/UE5像素流送云推流:多人访问不稳定、画面糊、端口占用多等
  • (三)从jvm层面了解线程的启动和停止
  • 【comparator, comparable】小总结
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • HTML中设置input等文本框为不可操作
  • Javascript基础之Array数组API
  • magento2项目上线注意事项
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • nodejs实现webservice问题总结
  • 动态魔术使用DBMS_SQL
  • 回顾 Swift 多平台移植进度 #2
  • 经典排序算法及其 Java 实现
  • 聊聊directory traversal attack
  • 码农张的Bug人生 - 初来乍到
  • 前端之Sass/Scss实战笔记
  • 三栏布局总结
  • 一个完整Java Web项目背后的密码
  • 智能合约开发环境搭建及Hello World合约
  • 容器镜像
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #vue3 实现前端下载excel文件模板功能
  • #知识分享#笔记#学习方法
  • (30)数组元素和与数字和的绝对差
  • (python)数据结构---字典
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (转) Face-Resources
  • (转)visual stdio 书签功能介绍
  • (转)程序员疫苗:代码注入
  • (转)负载均衡,回话保持,cookie
  • .bashrc在哪里,alias妙用
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .Net Core 中间件验签
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .Net小白的大学四年,内含面经
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • :class的用法及应用
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题