
6



群體(Population) N、樣本(Sample) n
假設想知道一家半導體廠,晶片的厚度。隨機抽取200片
群體的厚度平均數 = 參數
假設想知道一家半導體廠,晶片的厚度。隨機抽取200片
200片厚度平均數= 統計量
假設想知道一家半導體廠,隨機抽取200片,8片是瑕疵品
8/200=4%=統計量
群體總體(N)、單一(X)
群體平均數(𝜇 ,讀作 mu)
群體標準差(𝜎 ,讀作 sigma)
群體變異數=標準差的平方(σ2 平方,讀作sigma squared)
群體相關係數(ρ, 讀作 rho)
群體比例 ( P)
樣本總體(n)、單一(x)
樣本平均數(-x ,讀作 x bar)


- 樣本標準差(s)
n-1是為了進行不偏估計

- 樣本變異數=標準差的平方(s2 平方,讀作s squared)

- 樣本相關係數 ( r)
- 樣本比例 (^p,讀作 p-hat)
總結和描述收集到的數據,例如平均值、中位數、標準差等,或者有人說是「總結變量的特徵」,有助於對數據的整體情況有一個初步的理解

方法:使用各種統計量和圖形工具來呈現資料的摘要訊息,平均值、中位數、眾數、變異數、標準差、分位數、直方圖、箱線圖等
定性變數產生類別資料,即隨機数的各結果不能以數量表示,而僅能依其特性之類別表之
適合用 bar chart(不同類別/時期)、pie chart(單一總量合->切割成不同類別)、pareto diegram(類別型資料,重要少數,瑣細多數。找到少數關鍵原因,大多數問題會跟著改善。橫軸必須是類別/時間(月份、年份),下面詳載次數+百分比+累加百分比;縱軸左邊是發生次數,由高到低,縱軸右邊是累加百分比)
可以被量化或測量的變數,通常以數值形式表示,身高、體重、年齡、收入等
適合用莖葉圖 stem-leaf display(快速排序)、直方圖 histogram(展示資料之分布,長度/分數)、散佈圖 scatter diagram(二維圖,兩個變數之間的關係,探討日均溫對冰淇淋銷量影響)、時間序列圖 line chart(資料在不同時間的觀測值,橫軸為時間,縱軸為觀測值的單位數量)


也稱為類別變量或類別型變量,代表的是不同的類別或類型,通常是以文字形式表示。例如,性別(男、女)、地區(東部、西部、南部、北部)、產品類別(電子產品、食品、服裝)等
PS 「分類變量」和「定性變數」是統計學中描述資料特性的術語,它們之間存在一些差異,但通常用法上可以視為相同
母體奇數 (N+1)/2
母體偶數 N/2 和 N/2+1 平均數
樣本奇數 (n+1)/2
樣本偶數 n/2 和 n/2+1 平均數
import numpy as np
data = [1, 2, 3, 4, 5]
median = np.median(data)
print("中數:", median)
from statistics import mode
data = [1, 2, 2, 3, 4, 4, 5]
mode_value = mode(data)
print("眾數:", mode_value)
data = [1, 2, 3, 4, 5]
mean = sum(data) / len(data)
print("平均數:", mean)
假設有以下數據集
data_set = [2, 4, 4, 10, 5, 5, 7, 9]
# 計算資料集的範圍
data_range = max(data_set) - min(data_set)
print(f"數據集的範圍是:{data_range}")
= data_set = [2, 4, 4, 10, 5, 5, 7, 9]
# 對資料集進行排序
sorted_data = sorted(data_set)
# 計算範圍
data_range = sorted_data[-1] - sorted_data[0]
print(f"資料集的範圍為: {data_range}")


import numpy as np
data = [1, 2, 3, 4, 5]
variance = np.var(data)
print("方差:", variance)
# 數學公式寫法
假設有以下數據集:[2, 4, 4, 4, 5, 5, 7, 9]
步驟1:計算平均值(均值)
(2 + 4 + 4 + 4 + 5 + 5 + 7 + 9) / 8 = 40 / 8 = 5
步驟2:計算每個數據點與平均值的差異
(2 - 5)² = 9
(4 - 5)² = 1
(4 - 5)² = 1
(4 - 5)² = 1
(5 - 5)² = 0
(5 - 5)² = 0
(7 - 5)² = 4
(9 - 5)² = 16
步驟3:將差異的平方相加
9 + 1 + 1 + 1 + 0 + 0 + 4 + 16 = 32
步驟4:除以數據的總數
32 / 8 = 4
數字分佈越接近平均值,標準差越低,數據越集中;標準差越高,數據越分散 *excel: =STDEV.S(D2:D100)、=STDEV.S(FILTER($B$2:$B$20,$A$2:$A$20=C2))



import scipy.stats as stats
# 定義均值和標準差
mean = 5
std_dev = 2
# 計算正態分佈中的百分位數
percentile_68 = stats.norm.ppf(0.68, loc=mean, scale=std_dev)
percentile_95 = stats.norm.ppf(0.95, loc=mean, scale=std_dev)
percentile_99_7 = stats.norm.ppf(0.997, loc=mean, scale=std_dev)
print(f"68% 的數據點位於 {percentile_68:.2f} 附近")
print(f"95% 的數據點位於 {percentile_95:.2f} 附近")
print(f"99.7% 的數據點位於 {percentile_99_7:.2f} 附近")
import numpy as np
data = [1, 2, 3, 4, 5]
std_deviation = np.std(data)
print("標準差:", std_deviation)
# 數學公式寫法
承上面題目,標準差為4的平方根= 2

(1) 離差的平方*機率
(2) 離差的平方的期望值






PS 變異數(Variance)和方差(Standard Deviation)實際上指的是相同的統計量。兩者都用來衡量數據的分散程度,在一些文獻和課程中,”方差” 一詞可能更常用於描述母體數據,而 “變異數” 則更常用於描述樣本數據。但在實際使用中,這兩個術語通常可以互換使用





練習
A股票,平均股價100,股價標準差7、B股票,平均股價50,股價標準差5,哪個變動大? BCVA = 7/100 100% = 7%
CVB = 5/50 100% = 10%




常態分佈中
約68% 的數據點會落在平均值加減一個標準差的範圍內 [𝜇-𝜎, 𝜇+𝜎]
95% 的數據點會落在平均值加減兩個標準差的範圍內 [𝜇-2𝜎, 𝜇+2𝜎]
99.7% 的數據點會落 在平均值加減三個標準差的範圍內 [𝜇-3𝜎, 𝜇+3𝜎]

假設z-score是0.5,代表接近中間值
z-score是2.5,代表接近最高值
假設平均值為 80.17、標準差為 6.17

已知某學校有6000人,身高分布呈鐘形分配,其平均身高165公分,標準差5分,依照經驗法則,160公分以上的學生約多少人?
6000*(50%+34%) = 5040

已知某學校有6000人,身高分布呈鐘形分配,其平均身高165公分,標175公分以下的學生約多少人?
6000*(50%+34%+13.5%) = 5850









# python
scipy.stats.norm.ppf()


X−μ 表示一個隨機變數X,與平均數 μ 之差
如果
k=2,兩倍標準差,1-1/4=75% (經驗法則為95%)
k=3,三倍標準差,1-1/9=88.88% (經驗法則為99.7%)

求變異系數(coefficient of variance):


平均數 = 217/13=16.69
標準差 = 4.54
變異係數 = (4.54/16.69) * 100% = 27.2%
使用柴比雪夫不等式(Chebyshev’s Theorem)確定包含至少 75% 資料的值範圍:
75%為兩倍標準差
|16.69-(2 4.54) , 16.69+(2 4.54)| = |7.61 , 25.77|


E(X)=60
P(X>=120) <= 60/120
答案為50%
P(X>=75) <= 50/75
答案為66.66%
PS 從上面可以推斷
E(X)=𝜇
P(X>=2𝜇) <= 1/2
P(X>=3𝜇) <= 1/3


P(X>=𝜇+k) <= σ平方/(σ平方+k平方)
題目提供 𝜇=50、σ平方=25,因此k=25
P(X>=50+25) <= 25/(25+625)
答案為 1/26
PS 以盒鬚圖辨認離群值: 超過1.5(Q3-Q1)~3(Q3-Q1)距離內,可當作非常可能之離群值
import numpy as np
data_set = [2, 4, 4, 4, 5, 5, 7, 9]
# 計算第一四分位數
Q1 = np.percentile(data_set, 25)
# 計算第二四分位數(中位數)
Q2 = np.percentile(data_set, 50)
# 計算第三四分位數
Q3 = np.percentile(data_set, 75)
print(f"第一四分位數(Q1):{Q1}")
print(f"第二四分位數(中位數,Q2):{Q2}")
print(f"第三四分位數(Q3):{Q3}")
# 數學公式寫法
import numpy as np
data_set = [2, 4, 4, 4, 5, 5, 7, 9]
data_set.sort() # 先排序
n = len(data_set)
# 計算位置索引
index_Q1 = int((n + 1) * 0.25)
index_Q3 = int((n + 1) * 0.75)
# 找到位置索引對應的值
Q1 = data_set[index_Q1 - 1] # 注意索引從0開始,需要減1
Q3 = data_set[index_Q3 - 1]
print(f"第一四分位數(Q1):{Q1}")
print(f"第三四分位數(Q3):{Q3}")
IQR = Q3 - Q1
print(f"四分位距(IQR):{IQR}")
PS 如果算RANGE
MAXIFS($B$2:$B$20,$A$2:$A$20,C2)-MINIFS($B$2:$B$20,$A$2:$A$20,C2)
(尋找的數值範圍,條件範圍, 條件)PS 箱型圖
# 計算異常值的閾值
lower_threshold = Q1 - 1.5 * IQR
upper_threshold = Q3 + 1.5 * IQR
# 尋找異常值
outliers = [x for x in data_set if x < lower_threshold or x > upper_threshold]
print(f"異常值:{outliers}")
平均數 12.2
方差
((4-12.2)2+(7-12.2)2+(13-12.2)2+(16-12.2)2+(21-12.2)**2)/5 = 33.6
標準差
33.6 開根號 = 5.78
z-score
(16−12.20)/5.78 = 0.66,代表比平均值高出 0.66 個標準差
變異係數
(5.78/12.2) * 100% = 47.38%
全距
21-4=17
Q1 介於 4 和 7 之間
Q3 介於 16 和 21
常態分佈中,約68% 的數據點會落在平均值加減一個標準差的範圍內、95% 的數據點會落在平均值加減兩個標準差的範圍內、99.7% 的數據點會落 在平均值加減三個標準差的範圍內,可以看出 16 位於平均值附近,稍微偏向分佈的右邊
如果協方差為正值,表示 X 和 Y 呈正相關關係,即當一個變數增加時,另一個變數也增加
如果協方差為負值,表示 X 和 Y 呈負相關關係,即當一個變數增加時,另一個變數減少
如果協方差接近零,表示 X 和 Y 之間沒有線性關係


import numpy as np
# 兩個變數的觀察值
X = np.array([1, 2, 3, 4, 5])
Y = np.array([5, 4, 3, 2, 1])
# 計算均值
mean_X = np.mean(X)
mean_Y = np.mean(Y)
# 計算協方差
covariance = np.mean((X - mean_X) * (Y - mean_Y))
print("協方差:", covariance)
import numpy as np
import matplotlib.pyplot as plt
# 建立兩個隨機變數 X 和 Y 的範例數據
X = np.array([1, 2, 3, 4, 5])
Y = np.array([2, 3, 5, 4, 6])
# 計算 X 和 Y 的平均值
mean_X = np.mean(X)
mean_Y = np.mean(Y)
# 計算協方差
covariance = np.sum((X - mean_X) * (Y - mean_Y)) / (len(X) - 1)
# 繪製散佈圖
plt.scatter(X, Y, label='散點圖')
# 新增協方差線
plt.plot([mean_X, mean_X], [mean_Y, mean_Y + covariance], color='red', linestyle='--', label='協方差線')
# 新增標籤和圖例
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
# 顯示圖形
plt.show()
歸一化 : 將不同資料的數值範圍縮放到相似的尺度,以便更好地進行比較、分析和處理,確保在機器學習和資料分析中具有相同的權重,防止某些特徵對模型產生過大的影響。通常是[0, 1]或[-1, 1]之間

import numpy as np
data_set = [2, 4, 4, 4, 5, 5, 7, 9]
# 計算最小值和最大值
min_value = min(data_set)
max_value = max(data_set)
# 最小-最大縮放
scaled_data = [(x - min_value) / (max_value - min_value) for x in data_set]
print(scaled_data)

import numpy as np
# 原始資料集
data_set = [2, 4, 4, 4, 5, 5, 7, 9]
# 計算平均值和標準差
mean = np.mean(data_set)
stddev = np.std(data_set)
# 計算每個數據點的 Z-Score
z_scores = [(x - mean) / stddev for x in data_set]
# 列印 Z-Scores
print("原始資料集:", data_set)
print("Z-Scores:", z_scores)
# 數學公式寫法
步驟1:計算平均值(平均值)
平均值(μ)= (2 + 4 + 4 + 4 + 5 + 5 + 7 + 9) / 8 = 40 / 8 = 5
步驟2:計算每個數據點與平均值的差
差值 = 資料點 - 平均值
差值= [2-5, 4-5, 4-5, 4-5, 5-5, 5-5, 7-5, 9-5] = [-3, -1, -1, -1, 0, 0, 2, 4]
步驟3:計算差異值的平方
平方 = 差值^2
平方= [(-3)^2, (-1)^2, (-1)^2, (-1)^2, 0^2, 0^2, 2^2, 4^2] = [9 , 1, 1, 1, 0, 0, 4, 16]
步驟4:計算差異值的平方的平均值
平方的平均值(變異數)= (9 + 1 + 1 + 1 + 0 + 0 + 4 + 16) / 8 = 32 / 8 = 4
步驟5:計算標準差
標準差(σ)= 變異數的平方根 = √4 = 2
# 歸一化,每個資料點差值/標準差(σ)
例如,對於第一個資料點(2),它的 Z-Score 是 -3,然後歸一化後的值為 -3 / 2 = -1.5。

data_set = [2, 4, 4, 4, 5, 5, 7, 9]
# 計算資料的最大絕對值
max_abs_value = max(abs(x) for x in data_set)
# 小數定標標準化(以 10 的冪進行縮放)
k = 10 # 選擇適當的 k 值
scaled_data = [x / (10 ** k) for x in data_set]
print(scaled_data)
TF-IDF 考慮了一個詞(term)在文檔中的出現頻率(TF)和在整個文檔集合中的文檔頻率(DF),通過將這兩者的乘積取倒數,得到一個詞的權重。TF 計算的是一個詞在單一文檔中的出現次數,而 IDF 計算的是這個詞在整個文檔集合中的信息重要性


from sklearn.feature_extraction.text import TfidfVectorizer
# 範例文字數據
documents = ["This is the first document.",
"This document is the second document.",
"And this is the third one.",
"Is this the first document?"]
# 建立 TF-IDF 向量化器
vectorizer = TfidfVectorizer()
# 計算 TF-IDF 值
tfidf_matrix = vectorizer.fit_transform(documents)
# 將 TF-IDF 值轉換為陣列
tfidf_array = tfidf_matrix.toarray()
print(tfidf_array)
正偏斜(Positive Skewness):平均數>中位數時,通常表示資料分佈呈現右偏斜(正偏斜)
負偏斜(Negative Skewness):平均數<中位數時,通常表示資料分佈呈現左偏斜(負偏斜)
零偏(Zero Skewness): 數據分布在平均值兩側大致對稱,則稱為零偏







import numpy as np
from scipy.stats import skew, kurtosis
data = [2, 4, 4, 10, 5, 5, 7, 9]
# 計算偏度
data_skew = skew(data)
print(f"資料集的偏度為: {data_skew:.2f}")
# 計算峰度
data_kurtosis = kurtosis(data)
print(f"資料集的峰度為: {data_kurtosis:.2f}")
import numpy as np
import matplotlib.pyplot as plt
# 模擬從常態分佈中抽取多個樣本,並計算樣本平均值的抽樣分佈
population_mean = 100
population_stddev = 15
num_samples = 1000
sample_size = 30
sample_means = []
for _ in range(num_samples):
sample = np.random.normal(population_mean, population_stddev, size=sample_size)
sample_mean = np.mean(sample)
sample_means.append(sample_mean)
# 繪製樣本平均數的抽樣分佈直方圖
plt.hist(sample_means, bins=30, density=True, alpha=0.5, color='b')
plt.xlabel('Sample Mean')
plt.ylabel('Probability Density')
plt.title('Sampling Distribution of Sample Means')
plt.show()
# 數學公式寫法
承上面題目
import numpy as np
import matplotlib.pyplot as plt
# 給定的數據集
data_set = [2, 4, 4, 4, 5, 5, 7, 9]
# 模擬抽樣的次數
num_samples = 1000
# 每個樣本的大小
sample_size = 3 # 這裡假設每個樣本的大小是3,你可以根據需要調整
# 存儲樣本均值
sample_means = []
# 進行抽樣和計算樣本均值
for _ in range(num_samples):
sample = np.random.choice(data_set, size=sample_size, replace=True)
sample_mean = np.mean(sample)
sample_means.append(sample_mean)
# 繪製樣本均值的抽樣分佈直方圖
plt.hist(sample_means, bins=30, density=True, alpha=0.5, color='b')
plt.xlabel('Sample Mean')
plt.ylabel('Probability Density')
plt.title('Sampling Distribution of Sample Means')
plt.show()




(p*n) 和 (1-p)*n 都必須大於 5
import numpy as np
import matplotlib.pyplot as plt
# 模擬從均勻分佈中抽取多個樣本,並計算樣本平均值
population = np.random.uniform(0, 1, 1000)
sample_means = []
num_samples = 1000
sample_size = 30
for _ in range(num_samples):
sample = np.random.choice(population, size=sample_size)
sample_mean = np.mean(sample) # 算出樣本的平均值
sample_means.append(sample_mean)
# 繪製樣本平均數的直方圖
plt.hist(sample_means, bins=30, density=True, alpha=0.5, color='b')
plt.xlabel('Sample Mean')
plt.ylabel('Probability Density')
plt.title('Central Limit Theorem Demonstration')
plt.show()
# 數學公式寫法
承上面題目
import numpy as np
import matplotlib.pyplot as plt
# 給定的資料集
data_set = [2, 4, 4, 4, 5, 5, 7, 9]
# 模擬抽取樣本的次數
num_samples = 1000
# 每個樣本的大小
sample_size = 30
# 儲存樣本平均值
sample_means = []
# 計算總體平均數和標準差
population_mean = np.mean(data_set)
population_stddev = np.std(data_set)
# 模擬抽樣和計算樣本平均值
for _ in range(num_samples):
sample = np.random.choice(data_set, size=sample_size, replace=True)
sample_mean = np.mean(sample)
sample_means.append(sample_mean)
# 繪製樣本平均數的抽樣分佈直方圖
plt.hist(sample_means, bins=30, density=True, alpha=0.5, color='b')
plt.xlabel('Sample Mean')
plt.ylabel('Probability Density')
plt.title('Sampling Distribution of Sample Means')
plt.show()
= 標準差/樣本量的平方根
用來確定【樣本統計量】與【總體參數估計值】之間的偏差程度,準確誤差的值越小,表示估計值的精度越高
import numpy as np
# 生成一組隨機樣本
np.random.seed(0)
sample = np.random.normal(loc=10, scale=2, size=100)
# 計算樣本平均值和標準誤差
sample_mean = np.mean(sample)
standard_error = np.std(sample) / np.sqrt(len(sample))
print("樣本平均值:", sample_mean)
print("標準誤差:", standard_error)