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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 本文介绍了数据分布的概念,它是统计学和数据科学的基础,描述了数据可能出现的频率。NumPy的`random`模块支持生成不同分布的随机数,如`choice`用于离散分布,`randn`和`rand`等用于连续分布。此外,还介绍了数组的随机洗牌和排列。通过Seaborn库,可以创建统计图表,如`distplot()`函数用于绘制数据分布图,包括正态分布和自定义分布。最后,文章提供了相关练习及解决方案。

随机数据分布

什么是数据分布?

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

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

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 np

x = 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 np

x = np.random.randn(10)
print(x)

随机排列

洗牌数组

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

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

import numpy as np
from numpy.random import shuffle

arr = 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 permutation

arr = 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. 从以下数据中绘制分布图:

```python
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,

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

相关文章
|
16天前
|
机器学习/深度学习 数据可视化 Python
NumPy 均匀分布模拟及 Seaborn 可视化教程
本文介绍了均匀分布和逻辑分布。均匀分布是连续概率分布,所有事件在指定范围内有相等概率,常用于随机数生成。其概率密度函数为 1/(b-a),其中 a 和 b 分别是下限和上限。NumPy 的 `random.uniform()` 可生成均匀分布的随机数。逻辑分布,或 Logistic 分布,常用于 S 形增长现象的建模和机器学习,如逻辑回归。它有两个参数:位置参数 loc 和尺度参数 scale。其概率密度函数涉及 1 + (x-loc)/scale 的倒数平方。
|
16天前
|
机器学习/深度学习 数据采集 数据可视化
NumPy 正态分布与 Seaborn 可视化指南
该文档介绍了正态分布(高斯分布),包括它的简介、特征、生成正态分布数据的方法(使用 NumPy 的 `random.normal()` 函数)、如何用 Seaborn 可视化正态分布,以及正态分布的应用(如统计学、机器学习、金融和工程)。还提供了一些练习,如生成特定参数的正态分布随机数并绘图,以及比较不同标准差下的分布形状。最后,给出了练习的解决方案,展示了如何执行这些任务。
|
17天前
|
机器学习/深度学习 数据可视化 Python
NumPy 均匀分布模拟及 Seaborn 可视化教程
本文介绍了均匀分布和逻辑分布。均匀分布是连续概率分布,所有事件在指定范围内有相等概率发生,常用于随机数生成。其概率密度函数为 `f(x) = 1/(b-a)`,其中 a 和 b 分别为下限和上限。NumPy 的 `random.uniform()` 可生成均匀分布的随机数。Seaborn 可用于可视化分布。文中还提供了练习及解决方案,包括生成不同范围的均匀分布随机数、比较分布形状变化及模拟抛硬币实验。逻辑分布则常用于 S 形增长现象的建模,其 PDF 为 `(scale / (π (1 + (x - loc) / scale)^2))`,由位置参数 loc 和尺度参数 scale 定义。
28 0
|
18天前
|
数据可视化 Python
NumPy 二项分布生成与 Seaborn 可视化技巧
二项分布是描述固定次数独立试验中成功次数的概率分布,常用于分析如抛硬币、选择题等二元结果事件。分布由试验次数 n、每次试验的成功概率 p 和成功次数 k 定义。公式为 P(k) = C(n, k) * p^k * (1 - p)^(n - k)。NumPy 的 `random.binomial()` 可生成二项分布随机数,Seaborn 可用于可视化分布。当 n 很大且 p 接近 0.5 时,二项分布近似正态分布。练习包括模拟不同条件下的成功次数分布、比较不同试验次数的影响以及应用二项分布在考试成绩和及格率计算上。
|
18天前
|
数据可视化 Python
NumPy 泊松分布模拟与 Seaborn 可视化技巧
泊松分布是描述单位时间间隔内随机事件发生次数的离散概率分布,参数λ表示平均速率。公式为 P(k) = e^(-λ) (λ^k) / k!。NumPy 的 `random.poisson()` 可生成泊松分布数据。当 λ 很大时,泊松分布近似正态分布。练习包括模拟顾客到达、比较不同 λ 下的分布及模拟电话呼叫中心。使用 Seaborn 可进行可视化。关注公众号 `Let us Coding` 获取更多文章。
38 1
|
20天前
|
数据可视化 Python
NumPy 二项分布生成与 Seaborn 可视化技巧
二项分布是描述固定次数独立试验中成功次数的概率分布,常用于分析二元结果的事件,如抛硬币。分布由参数 n(试验次数)、p(单次成功概率)和 k(成功次数)定义。概率质量函数 P(k) = C(n, k) * p^k * (1 - p)^(n - k)。NumPy 的 `random.binomial()` 可生成二项分布数据,Seaborn 可用于可视化。当 n 大且 p 接近 0.5 时,二项分布近似正态分布。练习包括模拟不同条件下的二项分布和应用到考试场景。
37 0
|
21天前
|
机器学习/深度学习 数据采集 数据可视化
NumPy 正态分布与 Seaborn 可视化指南
正态分布(高斯分布)是重要的概率分布,常用于描述自然和人为现象的数据。分布呈钟形,峰值在均值(μ)处,两侧对称下降。特征由均值和标准差(σ)描述,标准差影响分布的分散程度。NumPy 的 `random.normal()` 函数可生成正态分布随机数,Seaborn 库则方便绘制分布图。正态分布广泛应用于统计学、机器学习、金融和工程等领域。练习包括生成正态分布随机数并作图,以及比较不同标准差下的分布形状。
|
1月前
|
存储 机器学习/深度学习 数据处理
NumPy:从初识到实战,探索Python科学计算的无限可能
NumPy:从初识到实战,探索Python科学计算的无限可能
43 0
|
2天前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
27天前
|
程序员 开发工具 索引
图解Python numpy基本操作
图解Python numpy基本操作