NumPy 隨機資料分佈與 Seaborn 視覺化詳解

小万哥丶發表於2024-05-21

隨機資料分佈

什麼是資料分佈?

資料分佈是指資料集中所有可能值出現的頻率,並用機率來表示。它描述了資料取值的可能性。

在統計學和資料科學中,資料分佈是分析資料的重要基礎。

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. 從以下資料中繪製分佈圖:
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`,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章