Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 26

 Xóa các dòng không có dữ liệu

import pandas as pd

# Đọc tệp dữ liệu "mpg.csv" bằng pandas


df = pd.read_csv("mpg.csv")

# Xóa các dòng có giá trị null


df_cleaned = df.dropna()

# Lưu lại DataFrame sau khi xóa dòng


df_cleaned.to_csv("mpg_cleaned.csv", index=False)

# In ra thông báo
print("Đã xóa các dòng có giá trị null và lưu kết quả vào tệp
'mpg_cleaned.csv'.")
 Tìm trung binh, trung vị của các thuộc tính: 'cylinders',
'horsepower', 'weight'
import pandas as pd

# Đọc tệp dữ liệu "mpg.csv" bằng pandas


df = pd.read_csv("mpg.csv")

# Tính trung bình và trung vị


mean_cylinders = df['cylinders'].mean()
median_cylinders = df['cylinders'].median()

mean_horsepower = df['horsepower'].mean()
median_horsepower = df['horsepower'].median()

mean_weight = df['weight'].mean()
median_weight = df['weight'].median()

# In ra kết quả
print("Trung bình (mean) của 'cylinders':", mean_cylinders)
print("Trung vị (median) của 'cylinders':", median_cylinders)

print("Trung bình (mean) của 'horsepower':",


mean_horsepower)
print("Trung vị (median) của 'horsepower':",
median_horsepower)
print("Trung bình (mean) của 'weight':", mean_weight)
print("Trung vị (median) của 'weight':", median_weight)

2. (5 điểm) Tìm hiểu thông tin về dữ liệu:


a. Số lượng chim cánh cụt của mỗi loài (Chinstrap, Gentoo, Adelie):
import pandas as pd

# Đọc dữ liệu từ tệp hoặc nguồn dữ liệu khác


data = pd.read_csv("data.csv") # Thay "data.csv"
bằng tên tệp của bạn

# Sử dụng groupby để nhóm theo loài và đếm số lượng


chim trong mỗi nhóm
species_count = data['species'].value_counts()

# In ra số lượng chim của mỗi loài


print(species_count)
b. Số lượng mỗi loài chim cánh cụt trên mỗi đảo (Biscoe,
Dream, Torgersen):
# Sử dụng groupby để nhóm theo loài và đảo, sau đó đếm
số lượng chim trong từng nhóm
species_island_count = data.groupby(['species', 'island'])
['species'].count()

# In ra số lượng chim của mỗi loài trên từng đảo


print(species_island_count)

c. So sánh các đại lượng thống kê cho mỗi loài chim cánh cụt
(mean, median, standard deviation) trên các thuộc tính
bill_length_mm, bill_depth_mm, flipper, và body_mass:
# Sử dụng groupby để nhóm theo loài và tính giá trị trung bình,
trung vị, và độ lệch chuẩn
species_stats = data.groupby('species')[['bill_length_mm',
'bill_depth_mm', 'flipper_length_mm', 'body_mass_g']].agg(['mean',
'median', 'std'])

# In ra kết quả
print(species_stats)
c. Dựa trên kết quả tính được, bạn có thể rút ra nhận xét về sự
khác biệt giữa các loài chim cánh cụt trong các thuộc tính
được nêu ra. Ví dụ, bạn có thể thấy rằng một loài có trọng
lượng trung bình lớn hơn hoặc sâu mỏ lớn hơn so với các loài
khác. Điều này có thể đưa ra thông tin về sự đa dạng của các
loài trong hệ sinh thái của chim cánh cụt. Tóm lược, nhận xét
phụ thuộc vào kết quả cụ thể của phân tích thống kê.
3. Vẽ đồ thị phù hợp thể hiện phân phối của ba loại chim cánh cụt,
qua đó bạn hãy đưa ra bình luận của mình.
import pandas as pd
import matplotlib.pyplot as plt

# Đọc dữ liệu từ tệp hoặc nguồn dữ liệu khác


data = pd.read_csv("data.csv") # Thay "data.csv" bằng tên tệp
của bạn

# Tạo các dữ liệu con cho mỗi loài


chinstrap_data = data[data['species'] == 'Chinstrap']
['body_mass_g']
gentoo_data = data[data['species'] == 'Gentoo']['body_mass_g']
adelie_data = data[data['species'] == 'Adelie']['body_mass_g']

# Vẽ đồ thị phân phối


plt.figure(figsize=(8, 6))
plt.hist(chinstrap_data, bins=20, alpha=0.5, label='Chinstrap',
color='blue')
plt.hist(gentoo_data, bins=20, alpha=0.5, label='Gentoo',
color='green')
plt.hist(adelie_data, bins=20, alpha=0.5, label='Adelie',
color='red')

plt.xlabel('Trọng lượng (gram)')


plt.ylabel('Số lượng chim cánh cụt')
plt.title('Phân phối trọng lượng của các loài chim cánh cụt')
plt.legend()

plt.show()
Sau khi chạy mã này, bạn sẽ có một biểu đồ histogram thể hiện phân
phối trọng lượng của ba loài chim cánh cụt. Bây giờ bạn có thể đưa ra
nhận xét dựa trên biểu đồ:
Bạn có thể thấy rằng Gentoo thường có trọng lượng lớn hơn so
với các loài khác, với phân phối dạng hình chuông cao và hẹp.
Adelie có phân phối trọng lượng rộng hơn, và họ thường có
trọng lượng thấp hơn so với Gentoo.
Chinstrap nằm ở giữa về mặt trọng lượng, và phân phối của họ
có độ biến đổi vừa phải.
Điều này cho thấy rằng có sự khác biệt trong trọng lượng giữa các loài
chim cánh cụt, và biểu đồ histogram giúp thể hiện mối quan hệ này
một cách trực quan.
4. a. Để khảo sát mối quan hệ giữa độ dài cánh (flipper length) và
trọng lượng (body_mass) của loài chim cánh cụt Gentoo, bạn có thể sử
dụng biểu đồ phân tán (scatter plot). Biểu đồ phân tán cho phép bạn
xem xét mối quan hệ giữa hai biến liên tục.
Dưới đây là cách vẽ biểu đồ phân tán giữa độ dài cánh và trọng lượng
của loài chim Gentoo:
import pandas as pd
import matplotlib.pyplot as plt

# Đọc dữ liệu từ tệp hoặc nguồn dữ liệu khác


data = pd.read_csv("data.csv") # Thay "data.csv" bằng tên tệp
của bạn

# Lọc dữ liệu cho loài chim Gentoo


gentoo_data = data[data['species'] == 'Gentoo']

# Vẽ biểu đồ phân tán


plt.figure(figsize=(8, 6))
plt.scatter(gentoo_data['flipper_length_mm'],
gentoo_data['body_mass_g'], alpha=0.5)
plt.xlabel('Độ dài cánh (mm)')
plt.ylabel('Trọng lượng (gram)')
plt.title('Mối quan hệ giữa độ dài cánh và trọng lượng của
loài chim Gentoo')
plt.show()
b. Để xác định các thuộc tính khác có thể ảnh hưởng đến trọng lượng
của loài chim Gentoo, bạn có thể sử dụng ma trận tương quan
(correlation matrix) hoặc vẽ biểu đồ tương quan (correlation plot).
Ma trận tương quan giúp bạn xem xét mối quan hệ tương quan giữa
các cặp thuộc tính.
import seaborn as sns
# Tạo DataFrame chứa dữ liệu của loài chim Gentoo
gentoo_data = data[data['species'] == 'Gentoo']

# Tính ma trận tương quan


correlation_matrix = gentoo_data.corr()

# Vẽ biểu đồ tương quan


plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True,
cmap='coolwarm', linewidths=0.5)
plt.title('Ma trận tương quan của thuộc tính của loài chim
Gentoo')
plt.show()

Chiều cao Nam thanh niên Hàn Quốc được mô hình hóa bằng phân phối chuẩn N(µ=172
(cm), s=5(cm)). Anh/chị hãy thực hiện các yêu cầu sau (trên python).
a) Xác suất chọn ngẫu nhiên một bạn gọi là lùn (nhỏ hơn 162(cm))?
b) Giả sử, thanh niên nam được xem là cao lớn (> 182 (cm)). Hỏi xác suất chọn ngẫu nhiên
một thanh niên nam cao lớn ở Hàn Quốc là bao nhiêu?
c) Chọn thanh niên nam có chiều cao gọi là tầm thước (trong khoảng 165-182(cm))? Hỏi xác
suất chọn người tầm thước là bao nhiêu.
d) Cho biết 6% là thấp bé, vậy thế nào là chuẩn thấp bé của thanh niên nam ở Hàn Quốc
(cm)
e) Cho biết đến 9% cao lớn, vậy cao lớn có ngưỡng chiều cao là bao nhiêu (cm)?
f) Vẽ biểu đồ phân bố mô tả phân bố chuẩn trên

a) Xác suất chọn ngẫu nhiên một bạn gọi là lùn (nhỏ hơn 162 cm):
from scipy.stats import norm

mu = 172 # Giá trị trung bình


sigma = 5 # Độ lệch chuẩn

# Sử dụng hàm phân phối chuẩn để tính xác suất


probability = norm.cdf(162, loc=mu, scale=sigma)

print("Xác suất chọn ngẫu nhiên một bạn gọi là lùn:",


probability)

b) Xác suất chọn ngẫu nhiên một thanh niên nam cao lớn (> 182 cm):
# Sử dụng hàm phân phối chuẩn để tính xác suất
probability = 1 - norm.cdf(182, loc=mu, scale=sigma)

print("Xác suất chọn ngẫu nhiên một thanh niên nam cao lớn:",
probability)
c) Xác suất chọn thanh niên nam có chiều cao trong khoảng 165-182
cm:
# Sử dụng hàm phân phối chuẩn để tính xác suất
probability = norm.cdf(182, loc=mu, scale=sigma) -
norm.cdf(165, loc=mu, scale=sigma)

print("Xác suất chọn thanh niên nam tầm thước:", probability)

d) Tìm giá trị chiều cao thấp bé sao cho 6% nằm bên trái của nó:
# Sử dụng hàm phân phối chuẩn nghịch đảo (quantile function)
để tìm giá trị
height = norm.ppf(0.06, loc=mu, scale=sigma)

print("Chiều cao thấp bé của thanh niên nam ở Hàn Quốc:",


height, "cm")
e) Tìm giá trị chiều cao cao lớn sao cho 9% nằm bên phải của nó:
# Sử dụng hàm phân phối chuẩn nghịch đảo để tìm giá trị
height = norm.ppf(0.91, loc=mu, scale=sigma)

print("Ngưỡng chiều cao cao lớn của thanh niên nam ở Hàn
Quốc:", height, "cm")
f) Vẽ biểu đồ phân bố mô tả phân bố chuẩn:
import numpy as np
import matplotlib.pyplot as plt

# Tạo dãy giá trị chiều cao


x = np.linspace(mu - 3 * sigma, mu + 3 * sigma, 100)
pdf = norm.pdf(x, loc=mu, scale=sigma)

# Vẽ biểu đồ phân bố chuẩn


plt.figure(figsize=(8, 6))
plt.plot(x, pdf, color='blue')
plt.fill_between(x, pdf, color='lightblue')
plt.xlabel('Chiều cao (cm)')
plt.ylabel('Xác suất')
plt.title('Phân bố chuẩn của chiều cao của thanh niên nam Hàn
Quốc')
plt.grid(True)
plt.show()

1.THƯ VIỆN scipy.stats


Để sử dụng các phân phối này ta sử dụng thư viện <scipy.stats> để
nạp phân phối muốn dùng.
# Import các thư viện thông dụng
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Import các distribution packages từ thư viện scipy


from scipy.stats import binom
from scipy.stats import poisson
from scipy.stats import norm
from scipy.stats import t
2.HÀM THÔNG DỤNG
Function Function Details Ý nghĩa

rvs Random Variates Tạo mẫu ngẫu nhiên từ phân phối

Hàm độ lớn f(x) cho phân phối rời


pmf Probability Mass Function
rạc

Hàm mật độ f(x) cho phân phối


pdf Probability Density Function
liên tục

cdf Cumulative Distribution Function Hàm phân Phối Tích Lũy F(x)

Percent Point Function (Inverse of


ppf Tìm điểm phân vị
CDF)

sf Survival Function (SF = 1-CDF) Hàm Survival

isf Inverse of survival function Hàm ngược của hàm Survival


3. CÁC PHÂN PHỐI XÁC SUẤT

3.1 Phân Phối Nhị Thức (Binomial)

Phát sinh mẫu

Ví dụ: Một bài thi trắc nghiệm bao gồm 10 câu, mỗi câu có 4 lựa chọn. Giả sử bạn
không học bài và đánh lụi tất cả các câu hỏi. Có thể rằng giả định rằng xác suất lựa
chọn các đáp án là như nhau và sự lựa chọn đáp án ở một câu hỏi không bị ảnh hưởng
bởi các câu hỏi khác.
Nếu gọi X là biến ngẫu nhiên thể hiện số câu trả lời đúng, thì X sẽ có phân phối nhị
thức (X ~ B(n, p). Ta có thể mô phỏng giá trị của X như sau:
# Số câu hỏi và xác suất lựa chọn đáp án đúng ở một câu trả lời
n, p = 10, 0.25
# Phát sinh ngẫu nhiên số câu đúng
binom.rvs(n, p)
Nếu lớp học có 10 bạn, thì có thể mô phỏng kết quả kiểm tra của lớp như sau:
bi_sam_10 = binom.rvs(n, p, size=10)
bi_sam_10
# Lập bảng phân phối tần số thống kê số lượng câu trả lời đúng.
pd.Series(data=bi_sam_10, name='Số câu đúng').value_counts().sort_index()
plt.hist(bi_sam_10)
plt.show()

Vẽ histogram

# Phát sinh mẫu kích thước 1000 theo phân phối Nhị Thức
bi_sam_1000 = binom.rvs(n, p, size=1000)
freq_table = pd.Series(data=bi_sam_1000, name='Số câu
đúng').value_counts().sort_index()
freq_table
plt.hist(bi_sam_1000)
plt.show()
Nhận xét: Trong đồ thị histogram ở trên, các cột có vị trí không hoàn toàn
chính xác. Lý do là vì matplotlib tính toán tự động số cột (bins) và vị trí các cột một
cách tự động dựa vào giới hạn giá trị trên trục hoành (xlim). Vì vậy, ta thay đổi một
số tham số sau để có đồ thị hiển thị tốt hơn:

 bins=np.arange(11) chọn 11 cột vì các giá trị số câu đúng từ 0..10


 dorongcot=0.4 độ rộng cột (mặc định là 0.8 inches)
 offset=dorongcot/2 dùng để dịch chuyển vị trí của cột ngay giữa điểm dữ liệu
(tick)
 Thêm tiêu đề cho đồ thị, trục hoành, trục tung

dorongcot = 0.4
offset = dorongcot/2

# Vẽ histogram của bi_sam_1000


plt.hist(bi_sam_1000, bins=np.arange(11)-offset, width=dorongcot)
plt.xticks(range(11)) # hiển thị danh sách các ticks trên trục hoành

# Nối đỉnh các cột lại bằng các đường nét đứt ls='--' (linestyle)
#, và nối các điểm đầu mỗi cột marker='o'
plt.plot(freq_table.index, freq_table, color='y', ls='--', marker='o')

plt.xlabel('Số câu đúng')


plt.ylabel('Tần số')
plt.title('TẦN SỐ XUẤT HIỆN SỐ CÂU ĐÚNG')

plt.show()
Vẽ hàm độ lớn (pmf)

Vì phân phối nhị thức là phân phối rời rạc nên số lượng các câu đúng cũng mang giá
trị rời rạc từ 0..10. Ta sẽ tạo một mảng x mang các giá trị từ 0..10, và một mảng y là
giá trị xác suất suất hiện tương ứng với từng giá trị của mảng x theo phân phối nhị
thức
x = range(11)
y = binom.pmf(x, n, p)
print('x: ', x)
print('y: ', y)
# Vẽ scatter
plt.scatter(x, y, color='b')

# Vẽ các đường đứt nét để dễ nhìn


for value in x:
plt.plot([value, value], [0, y[value]], color='orange', ls='--')

plt.xticks(x)
plt.xlabel('Giá trị')
plt.ylabel('Xác suất')
plt.title('HÀM ĐỘ LỚN PHÂN PHỐI NHỊ THỨC')

plt.show()

Bình luận

 Nếu sử dụng các đường nối các điểm sẽ dễ gây hiểu nhầm là đồ thị cho hàm
liên tục, nghĩa là hàm độ lớn sẽ có giá trị tại các điểm mang giá trị không
nguyên.
 Đồ thị này có hình dáng giống như đồ thị histogram vẽ từ 1000 phần tử được
phát sinh. Trên thực tế, nếu một biến ngẫu nhiên mang phân phối nhị thức thì
đồ thị phân phối tần số (histogram) vẽ từ một mẫu thu nhận được sẽ có hình
dáng gần giống như đồ thị vẽ từ hàm độ lớn của phân phối này.

Vẽ hàm phân phối tích luỹ (cdf)


Hàm phân phối tích luỹ được định nghĩa: F(x) = P(X ≤ x)
Ta thử vẽ đồ thị hàm phân phối tích luỹ cho hàm phân phối nhị thức và đặt cạnh đồ
thị hàm độ lớn để dễ so sánh.
xs_tich_luy = binom.cdf(x, n, p)
print(xs_tich_luy)

# Vẽ đồ thị có kích thước 12x4 (inches), gồm 2 đồ thị con (axes) nằm cùng
một hàng
fig, axes = plt.subplots(1, 2, figsize=(12, 4))

# Vẽ hàm độ lớn (pmf)


axes[0].scatter(x, y, color='b')

for value in x:
axes[0].plot([value, value], [0, y[value]], color='orange', ls='--')

axes[0].set(xlabel='Giá trị', title='PMF')


# Vẽ hàm phân phối tích luỹ (cdf)
axes[1].plot(x, xs_tich_luy, marker='o') # Thêm marker cho dễ nhìn
axes[1].set(xlabel='Giá trị', title='CDF')

plt.show()
Phân Phối Poisson
Phân phối Poisson thường dùng để tính xác suất của một số sự kiện xảy ra trong một
khoảng thời gian. Chúng ta sẽ khởi tạo ngẫu nhiên mẫu có phân phối Poisson và vẽ đồ
thị hàm độ lớn của phần phối này.

# Khởi tạo mẫu có 10000 phần tử có phân phối Poisson


lamda = 1
poi_sam_10K = poisson.rvs(size=10000, mu=lamda)

Vẽ histogram

dorongcot=0.4
offset = dorongcot/2 # Dùng để hiển thị ngay dấu ticks

plt.hist(poi_sam_10K-offset, bins=max(freq_table.index), width=dorongcot)

plt.ylabel('Tần số')
plt.xlabel('x')
plt.title('HISTOGRAM')

plt.show()

# Khởi tạo mẫu có 10000 phần tử có phân phối Poisson


lamda = 10
poi_sam_10K_another = poisson.rvs(size=10000, mu=lamda)
freq_table = pd.Series(data=poi_sam_10K_another, name='Số câu
đúng').value_counts().sort_index()
dorongcot=0.4
offset = dorongcot/2 # Dùng để hiển thị ngay dấu ticks

plt.hist(poi_sam_10K_another-offset, bins=max(freq_table.index), width=dorongcot)

plt.ylabel('Tần số')
plt.xlabel('x')
plt.title('HISTOGRAM')

plt.show()
Vẽ hàm độ lớn (pmf)
x = range(30)
y = poisson.pmf(x, mu=10)
print('x: ', x)
print('y: ', y)

plt.subplots(figsize=(8, 4))

# Vẽ scatter
plt.scatter(x, y, color='red')

# Vẽ các đường đứt nét để dễ nhìn


for value in x:
plt.plot([value, value], [0, y[value]], color='green', ls='--')

plt.xticks(x)
plt.xlabel('Giá trị')
plt.ylabel('Xác suất')
plt.title('HÀM ĐỘ LỚN PHÂN PHỐI POISSON')

plt.show()
Vẽ hàm phân phối tích luỹ (cdf)
Thử vẽ hàm phân phối tích luỹ của đồ thị trên (mu=10)
xs_tich_luy = poisson.cdf(x, mu=10)
print(xs_tich_luy)
# Vẽ đồ thị có kích thước 12x4 (inches), gồm 2 đồ thị con (axes) nằm cùng một hàng
fig, axes = plt.subplots(1, 2, figsize=(12, 4))

# Vẽ hàm độ lớn (pmf)


axes[0].scatter(x, y, color='red', marker='.')

for value in x:
axes[0].plot([value, value], [0, y[value]], color='green', ls='--')

axes[0].set(xlabel='Giá trị', title='PMF')

# Vẽ hàm phân phối tích luỹ (cdf)


axes[1].plot(x, xs_tich_luy, marker='.',color='darkorange') # Thêm marker cho dễ
nhìn
axes[1].set(xlabel='Giá trị', title='CDF')

plt.show()
Phân Phối Chuẩn (Normal)
Phát sinh mẫu
Giả sử chiều cao của nam thanh niên trưởng thành là biến ngẫu nhiên có phân
phối chuẩn với kỳ vọng là 170cm, và độ lệch chuẩn là 3cm. Ta thử phát sinh
ngẫu nhiên mẫu chiều cao của 10000 thanh niên.
mu = 170
sigma = 3
norm_sam_10K = norm.rvs(loc=mu, scale=sigma, size=10000)
plt.hist(norm_sam_10K, bins=100)
plt.show()

Vẽ hàm mật độ (pdf)


Thử vẽ đồ thị hàm mật độ của phân phối chuẩn với các tham số μ và σ khác nhau
x = np.linspace(150, 190, 100)
y1 = norm.pdf(x, loc=170, scale=3)
y2 = norm.pdf(x, loc=170, scale=5)
y3 = norm.pdf(x, loc=160, scale=3)

plt.plot(x, y1, label='$\mu=170, \sigma=3$')


plt.plot(x, y2, label='$\mu=170, \sigma=5$')
plt.plot(x, y3, label='$\mu=160, \sigma=3$')

plt.title('HÀM MẬT ĐỘ PHÂN PHỐI CHUẨN')


plt.legend()
plt.show()
____
xx = np.linspace(-3, 3, 100)
yy = norm.pdf(xx) # mặc định loc=0, scale=1

plt.plot(xx, yy, color='darkorange', label='$\mu=0, \sigma=1$')


# plt.plot(xx, yy)
plt.title('HÀM MẬT ĐỘ PHÂN PHỐI CHUẨN TẮC')
plt.legend()

plt.show()
norm.pdf(-1)

Tính toán trên phân phối chuẩn


Một số hàm thường dùng trên phân phối chuẩn
xs_be_hon_1 = norm.cdf(x= -1, loc = 0, scale= 1)

xs_lon_hon_1 = 1 - norm.cdf(x= 1, loc = 0, scale= 1)

xs_giua = 1 - (xs_be_hon_1 + xs_lon_hon_1)

print(xs_be_hon_1, xs_lon_hon_1, xs_giua)


plt.fill_between(x=np.arange(-4,-1,0.01),
y1= norm.pdf(np.arange(-4,-1,0.01)) ,
color='red',
alpha=0.35)

plt.fill_between(x=np.arange(1,4,0.01),
y1= norm.pdf(np.arange(1,4,0.01)) ,
color='red',
alpha=0.35)

plt.fill_between(x=np.arange(-1,1,0.01),
y1= norm.pdf(np.arange(-1,1,0.01)) ,
color='blue',
alpha=0.35)

plt.text(x=-1.9, y=0.03, s= round(xs_be_hon_1, 3))


plt.text(x=-0.4, y=0.1, s= round(xs_giua,3))
plt.text(x=1.3, y=0.03, s= round(xs_lon_hon_1, 3))

Hàm cdf()
norm.cdf(-2).round(5)
norm.cdf(8, loc=16, scale=4).round(5)
norm.ppf(0.02275, loc=16, scale=4).round(2)

Hàm ppf()
norm.ppf(0.02275).round(2)

Hàm sf()
norm.sf(2).round(5)

Hàm isf()
norm.isf(0.02275).round(2)

Bài 01: Một bài thi trắc nghiệm gồm 10 câu hỏi, mỗi câu có 4 phương án trả lời trong
đó chỉ có một phương án đúng. Bạn hãy:
a. Một sinh viên không học bài làm bài bằng cách chọn ngẫu nhiên một phương án
cho mỗi câu hỏi. Bạn hãy dùng hàm random để in ra số câu đúng của bạn sinh viên
trong 10 lần kiểm tra.
b. Giả sử mỗi câu đúng được 4 điểm, mỗi câu sai bị trừ 2 điểm. Tính xác suất để sinh
viên này được 4 điểm
c. Gọi X là số câu trả lời đúng. Tính E(X) và Var(X)

a)
import random

def simulate_one_test():
# Sinh lựa chọn ngẫu nhiên cho mỗi câu (số từ 0 đến 3)
choices = [random.randint(0, 3) for _ in range(10)]
# Đếm số câu đúng (giá trị 0 là câu đúng)
correct_answers = choices.count(0)
return correct_answers

# Thực hiện 10 lần kiểm tra và in ra kết quả


for _ in range(10):
correct_answers = simulate_one_test()
print(f"Số câu đúng: {correct_answers}")
b)
from scipy.stats import binom
# Số câu trả lời đúng
k=4
# Số câu trả lời sai
n=6
# Xác suất trả lời đúng trong một lần thử
p=1/4

# Tính xác suất


probability = binom.pmf(k, n, p)

print(f"Xác suất để sinh viên được 4 điểm: {probability:.4f}")

c. Để tính kỳ vọng (E(X)) và phương sai (Var(X)) cho số câu trả lời đúng (X), bạn có
thể sử dụng các công thức sau:

E(X) = n * p Var(X) = n * p * (1 - p)

Trong trường hợp này:

 n là số câu trả lời sai (6 câu).


 p là xác suất trả lời đúng trong một lần thử (1/4).

Sử dụng các giá trị này, bạn có thể tính E(X) và Var(X) như sau:

n=6
p=1/4

expected_value = n * p
variance = n * p * (1 - p)

print(f"E(X) = {expected_value:.2f}")
print(f"Var(X) = {variance:.2f}")
Bài 02: Một trung tâm bưu điện nhận được 3 cuộc gọi điện thoại mỗi phút. Tính xác
suất để trung tâm nhận được 1 cuộc gọi, 2 cuộc gọi, 3 cuộc gọi trong vòng một phút
biết số cuộc gọi trong một phút có phân phối Poisson.
import math

# Số cuộc gọi trung bình mỗi phút (λ)


lambda_value = 3

# Tính xác suất nhận được 1 cuộc gọi (k = 1)


k1_probability = math.exp(-lambda_value) * lambda_value**1

# Tính xác suất nhận được 2 cuộc gọi (k = 2)


k2_probability = math.exp(-lambda_value) * lambda_value**2 /
math.factorial(2)

# Tính xác suất nhận được 3 cuộc gọi (k = 3)


k3_probability = math.exp(-lambda_value) * lambda_value**3 /
math.factorial(3)

print(f'Xác suất nhận 1 cuộc gọi: {k1_probability:.4f}')


print(f'Xác suất nhận 2 cuộc gọi: {k2_probability:.4f}')
print(f'Xác suất nhận 3 cuộc gọi: {k3_probability:.4f}')
Bài 03: Trọng lượng (đơn vị gam) của một loại trái cây có phân phối chuẩn với µ =
500 (gam) gam và σ2=16(gam2). Trái cây thu hoạch được phân loại theo trọng lượng
như sau:
Loại 1: trên 505 gam
Loại 2: từ 495 – 505 gam
Loại 3: dười 495 gam
a. Hãy tính tỷ lệ của mỗi loại.
b. Bạn hãy mô phỏng lấy mẫu 20 trái cây trên. Bạn hãy vẽ histogram trọng lượng trái
cây và tính giá trị trung bình và độ lệch chuẩn trái cây từ mẫu
c. Bạn hãy mô phỏng lấy 100 trái cây trên. Bạn hãy vẽ histogram trọng lượng trái cây
và tính giá trị trung bình và độ lệch chuẩn trái cây từ mẫu
d. Từ hai cách lấy mẫu ở câu b, c bạn có nhận xét gì không?
a. Hãy tính tỷ lệ của mỗi loại.
Để tính tỷ lệ của mỗi loại trái cây, bạn cần tính xác suất rơi vào mỗi loại dựa trên phân phối chuẩn.
Sử dụng z-score và bảng phân phối chuẩn (hoặc thư viện scipy.stats.norm trong Python), bạn có
thể tính tỷ lệ như sau:

Loại 1 (trên 505 gam):

 Z-score = (505 - 500) / √16 = 0.5


 Xác suất (P) = P(X > 505) = 1 - P(X ≤ 505), trong đó X là biến ngẫu nhiên theo phân phối chuẩn.
 Sử dụng bảng phân phối chuẩn hoặc scipy.stats.norm.cdf, bạn có thể tính xác suất và sau đó tính
tỷ lệ.

Loại 2 (từ 495 đến 505 gam):

 Z-score (cho cận trái) = (495 - 500) / √16 = -0.3125


 Z-score (cho cận phải) = (505 - 500) / √16 = 0.3125
 Xác suất (P) = P(495 ≤ X ≤ 505) = P(X ≤ 505) - P(X < 495).
 Tính tỷ lệ dựa trên xác suất này.

Loại 3 (dưới 495 gam):

 Z-score = (495 - 500) / √16 = -0.5


 Xác suất (P) = P(X < 495).
 Tính tỷ lệ dựa trên xác suất này.

from scipy.stats import norm

# Tham số phân phối chuẩn


mean = 500 # Giá trị trung bình
std_dev = 4 # Độ lệch chuẩn là căn bậc hai của σ^2

# Tính Z-score cho mỗi loại


z1 = (505 - mean) / std_dev
z2_left = (495 - mean) / std_dev
z2_right = (505 - mean) / std_dev
z3 = (495 - mean) / std_dev

# Tính tỷ lệ cho mỗi loại


p1 = 1 - norm.cdf(z1)
p2 = norm.cdf(z2_right) - norm.cdf(z2_left)
p3 = norm.cdf(z3)

print(f'Tỷ lệ loại 1: {p1:.4f}')


print(f'Tỷ lệ loại 2: {p2:.4f}')
print(f'Tỷ lệ loại 3: {p3:.4f}')
b. Mô phỏng lấy mẫu 20 trái cây và vẽ histogram:
import numpy as np
import matplotlib.pyplot as plt

# Tham số phân phối chuẩn


mean = 500
std_dev = 4 # Độ lệch chuẩn là căn bậc hai của σ^2

# Mô phỏng lấy mẫu 20 trái cây


sample = np.random.normal(mean, std_dev, 20)

# Vẽ histogram
plt.hist(sample, bins=10, density=True, alpha=0.6, color='b', edgecolor='k')
plt.xlabel('Trọng lượng (gam)')
plt.ylabel('Tần số tương đối')
plt.title('Histogram trọng lượng trái cây từ mẫu 20 trái cây')
plt.show()

# Tính giá trị trung bình và độ lệch chuẩn của mẫu


sample_mean = np.mean(sample)
sample_std_dev = np.std(sample)

print(f'Giá trị trung bình của mẫu: {sample_mean:.2f} gam')


print(f'Độ lệch chuẩn của mẫu: {sample_std_dev:.2f} gam')
Mô phỏng lấy mẫu 100 trái cây và vẽ histogram:
# Mô phỏng lấy mẫu 100 trái cây
sample = np.random.normal(mean, std_dev, 100)

# Vẽ histogram
plt.hist(sample, bins=10, density=True, alpha=0.6, color='b', edgecolor='k')
plt.xlabel('Trọng lượng (gam)')
plt.ylabel('Tần số tương đối')
plt.title('Histogram trọng lượng trái cây từ mẫu 100 trái cây')
plt.show()

# Tính giá trị trung bình và độ lệch chuẩn của mẫu


sample_mean = np.mean(sample)
sample_std_dev = np.std(sample)

print(f'Giá trị trung bình của mẫu: {sample_mean:.2f} gam')


print(f'Độ lệch chuẩn của mẫu: {sample_std_dev:.2f} gam')

d. Nhận xét từ hai cách lấy mẫu (20 trái và 100 trái):

 Khi lấy mẫu lớn hơn (100 trái), phân phối trung bình mẫu (sample mean) có xu hướng tiệm cận giá
trị trung bình của phân phối gốc (population mean) hơn. Điều này làm giảm sai số trong ước tính
giá trị trung bình.
 Độ lệch chuẩn của mẫu (sample standard deviation) cũng càng tiệm cận độ lệch chuẩn của phân
phối gốc (population standard deviation) khi kích thước mẫu lớn hơn.

4mô phỏng tung một con xúc sắc cân đối đồng chất 5000 lần. Dựa vào giá trị mô
phỏng, bạn hãy tìm các giá trị xác suất dưới đây:
a. Xác suất để số chấm xuất hiện là 4
b. Xác suất để số chấm xuất hiện lớn hơn hoặc bằng 4
c. Giả sử biết số chấm xuất hiện lớn hơn hoặc bằng 4. Hãy tìm xác suất để mặt 6
chấm xuất hiện.
A)
import random

# Số lần mô phỏng
n_simulations = 5000

# Số chấm trên xúc sắc


n_dots = 6

# Số lần xuất hiện của số chấm là 4


count_4 = 0

for _ in range(n_simulations):
roll = random.randint(1, n_dots)
if roll == 4:
count_4 += 1

probability_4 = count_4 / n_simulations


print(f'Xác suất để số chấm xuất hiện là 4: {probability_4:.4f}')
b. Xác suất để số chấm xuất hiện lớn hơn hoặc bằng 4:

# Số lần xuất hiện của số chấm lớn hơn hoặc bằng 4


count_4_or_more = 0
for _ in range(n_simulations):
roll = random.randint(1, n_dots)
if roll >= 4:
count_4_or_more += 1

probability_4_or_more = count_4_or_more / n_simulations


print(f'Xác suất để số chấm xuất hiện lớn hơn hoặc bằng 4:
{probability_4_or_more:.4f}')
C.Giả sử biết số chấm xuất hiện lớn hơn hoặc bằng 4, để tìm xác suất mặt 6
chấm xuất hiện:
# Số lần xuất hiện của mặt 6 chấm khi số chấm lớn hơn hoặc bằng 4
count_6_given_4_or_more = 0

for _ in range(n_simulations):
roll = random.randint(1, n_dots)
if roll >= 4:
if roll == 6:
count_6_given_4_or_more += 1

probability_6_given_4_or_more = count_6_given_4_or_more / count_4_or_more


print(f'Xác suất để mặt 6 chấm xuất hiện khi số chấm lớn hơn hoặc bằng 4:
{probability_6_given_4_or_more:.4f}')

Bài 05: Tạo 5000 số ngẫu nhiên có phân phối nhị thức với n=50, p=0.7 Bạn Hãy
a. Tìm các giá trị thống kê: min, max, Q1, Q2, Q3 b. Vẽ đồ thị boxplot c. Vẽ các đồ
thị: tần số, tần suất
import numpy as np
import matplotlib.pyplot as plt

# Tạo mẫu ngẫu nhiên với phân phối nhị thức


n = 50 # Số lần thử
p = 0.7 # Xác suất thành công
sample_size = 5000

# Tạo mẫu
sample = np.random.binomial(n, p, sample_size)

# a. Tìm giá trị thống kê


minimum = np.min(sample)
maximum = np.max(sample)
q1 = np.percentile(sample, 25)
q2 = np.percentile(sample, 50)
q3 = np.percentile(sample, 75)

print(f"Minimum: {minimum}")
print(f"Maximum: {maximum}")
print(f"Q1 (25th percentile): {q1}")
print(f"Q2 (Median - 50th percentile): {q2}")
print(f"Q3 (75th percentile): {q3}")

# b. Vẽ đồ thị boxplot
plt.figure(figsize=(6, 4))
plt.boxplot(sample, vert=False)
plt.xlabel('Giá trị')
plt.title('Biểu đồ Boxplot')
plt.show()

# c. Vẽ đồ thị tần số và tần suất


plt.figure(figsize=(10, 4))

plt.subplot(1, 2, 1)
plt.hist(sample, bins=20, density=False, color='blue', edgecolor='k')
plt.xlabel('Giá trị')
plt.ylabel('Tần số')
plt.title('Biểu đồ tần số')

plt.subplot(1, 2, 2)
plt.hist(sample, bins=20, density=True, color='green', edgecolor='k')
plt.xlabel('Giá trị')
plt.ylabel('Tần suất')
plt.title('Biểu đồ tần suất')

plt.tight_layout()
plt.show()

Bài 1: Tạo quần thể mô phỏng


Bạn hãy tạo một mẫu gồm 10000 phần tử mô phỏng chiều cao của nam thanh
niên có giá trị từ 120cm - 200cm. Bạn hãy lưu kết quả vào biến POP.

Tính: a. Chiều cao trung bình (kỳ vọng) của quần thể và độ lệch chuẩn về chiều
cao của quần thể.

b. Tính tỷ lệ người cao trong quần thể, biết rằng thanh niên có chiều cao từ 180
trở lên được gọi là cao.

c. Vẽ histogram về chiều cao của quần thể. Theo bạn quần thể có phân phối
chuẩn hay không?

d. Thử vẽ histogram và đồ thị hàm mật độ của phân phối chuẩn sử dụng tham số
loc và scale bằng với kỳ vọng và độ lệch chuẩn của quần thể.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# a. Tạo mẫu gồm 10,000 phần tử mô phỏng chiều cao từ 120cm đến 200cm
POP = np.random.uniform(120, 200, 10000)
# a. Tính kỳ vọng (trung bình) và độ lệch chuẩn của quần thể
mean_height = np.mean(POP)
std_dev_height = np.std(POP)

print(f'Chiều cao trung bình của quần thể: {mean_height:.2f} cm')


print(f'Độ lệch chuẩn về chiều cao của quần thể: {std_dev_height:.2f} cm')

# b. Tính tỷ lệ người cao (chiều cao từ 180cm trở lên) trong quần thể
tall_count = np.sum(POP >= 180)
tall_percentage = (tall_count / len(POP)) * 100

print(f'Tỷ lệ người cao trong quần thể: {tall_percentage:.2f}%')

# c. Vẽ histogram và kiểm tra phân phối


plt.figure(figsize=(8, 6))
plt.hist(POP, bins=50, density=True, color='blue', edgecolor='k')
plt.xlabel('Chiều cao (cm)')
plt.ylabel('Tần suất')
plt.title('Biểu đồ Histogram của Chiều cao Quần thể')
plt.show()

# d. Vẽ histogram và đồ thị hàm mật độ của phân phối chuẩn


plt.figure(figsize=(8, 6))
plt.hist(POP, bins=50, density=True, color='blue', alpha=0.6, edgecolor='k',
label='Quần thể')
plt.xlabel('Chiều cao (cm)')
plt.ylabel('Tần suất')

# Tạo phân phối chuẩn với kỳ vọng và độ lệch chuẩn của quần thể
x = np.linspace(120, 200, 1000)
pdf = norm.pdf(x, loc=mean_height, scale=std_dev_height)
plt.plot(x, pdf, 'r', linewidth=2, label='Phân phối chuẩn')
plt.legend()
plt.title('So sánh với Phân phối Chuẩn')
plt.show()
ài 2: Lấy mẫu cỡ 20
Bạn hãy lấy một mẫu kích thước 20 phần từ. Tính:

a. Trung bình mẫu, và độ lệch chuẩn của mẫu

b. Tỷ lệ người cao của mẫu

c. Vẽ histogram của mẫu

d. Thử vẽ đồ thị hàm mật độ của phân phối chuẩn với tham số loc và scale bằng với
giá trị trung bình và độ lệch chuẩn và chiều cao của mẫu. Bạn có nhận xét gì không?

# Lấy mẫu kích thước 20 từ quần thể đã tạo (POP)


sample_size = 20
sample = np.random.choice(POP, sample_size)

# a. Tính giá trị trung bình của mẫu và độ lệch chuẩn của mẫu
sample_mean = np.mean(sample)
sample_std_dev = np.std(sample)

print(f'Trung bình mẫu: {sample_mean:.2f} cm')


print(f'Độ lệch chuẩn của mẫu: {sample_std_dev:.2f} cm')

# b. Tính tỷ lệ người cao trong mẫu


tall_count_sample = np.sum(sample >= 180)
tall_percentage_sample = (tall_count_sample / sample_size) * 100

print(f'Tỷ lệ người cao trong mẫu: {tall_percentage_sample:.2f}%')

# c. Vẽ histogram của mẫu


plt.figure(figsize=(8, 6))
plt.hist(sample, bins=10, density=True, color='blue', edgecolor='k')
plt.xlabel('Chiều cao (cm)')
plt.ylabel('Tần suất')
plt.title('Biểu đồ Histogram của Mẫu')
plt.show()

# d. Vẽ histogram và đồ thị hàm mật độ của phân phối chuẩn


plt.figure(figsize=(8, 6))
plt.hist(sample, bins=10, density=True, color='blue', alpha=0.6, edgecolor='k',
label='Mẫu')
plt.xlabel('Chiều cao (cm)')
plt.ylabel('Tần suất')

# Tạo phân phối chuẩn với kỳ vọng và độ lệch chuẩn của mẫu
x = np.linspace(120, 200, 1000)
pdf_sample = norm.pdf(x, loc=sample_mean, scale=sample_std_dev)
plt.plot(x, pdf_sample, 'r', linewidth=2, label='Phân phối chuẩn')
plt.legend()
plt.title('So sánh Mẫu với Phân phối Chuẩn')
plt.show()
Bài 3: Lấy mẫu cỡ 100
Lặp lại thí nghiệm bài 2 với cỡ mẫu là 100
# Lấy mẫu kích thước 100 từ quần thể đã tạo (POP)
sample_size_large = 100
sample_large = np.random.choice(POP, sample_size_large)
# a. Tính giá trị trung bình của mẫu và độ lệch chuẩn của mẫu
sample_mean_large = np.mean(sample_large)
sample_std_dev_large = np.std(sample_large)

print(f'Trung bình mẫu (kích thước 100): {sample_mean_large:.2f} cm')


print(f'Độ lệch chuẩn của mẫu (kích thước 100): {sample_std_dev_large:.2f} cm')

# b. Tính tỷ lệ người cao trong mẫu


tall_count_sample_large = np.sum(sample_large >= 180)
tall_percentage_sample_large = (tall_count_sample_large / sample_size_large) *
100

print(f'Tỷ lệ người cao trong mẫu (kích thước 100):


{tall_percentage_sample_large:.2f}%')

# c. Vẽ histogram của mẫu


plt.figure(figsize=(8, 6))
plt.hist(sample_large, bins=10, density=True, color='blue', edgecolor='k')
plt.xlabel('Chiều cao (cm)')
plt.ylabel('Tần suất')
plt.title('Biểu đồ Histogram của Mẫu (kích thước 100)')
plt.show()

# d. Vẽ histogram và đồ thị hàm mật độ của phân phối chuẩn


plt.figure(figsize=(8, 6))
plt.hist(sample_large, bins=10, density=True, color='blue', alpha=0.6, edgecolor='k',
label='Mẫu (kích thước 100)')
plt.xlabel('Chiều cao (cm)')
plt.ylabel('Tần suất')

# Tạo phân phối chuẩn với kỳ vọng và độ lệch chuẩn của mẫu (kích thước 100)
x = np.linspace(120, 200, 1000)
pdf_sample_large = norm.pdf(x, loc=sample_mean_large,
scale=sample_std_dev_large)
plt.plot(x, pdf_sample_large, 'r', linewidth=2, label='Phân phối chuẩn')
plt.legend()
plt.title('So sánh Mẫu (kích thước 100) với Phân phối Chuẩn')
plt.show()

Bài 4: Khảo sát phân phối của trung bình mẫu


a. Thực hiện bài 2 100 lần, mỗi lần bạn tính được trung bình mẫu. Vẽ đồ thị
histogram cho 100 trung bình mẫu bạn tính được.

b. Thực hiện bài 3 100 lần, mỗi lần bạn tính được trung bình mẫu. Vẽ đồ thị
histogram cho 100 trung bình mẫu bạn tính được.

c. Vẽ histogram của hai câu a, b trong cùng một hình để so sánh. Theo bạn hình dạng
của histogram thay đổi nói lên điều gì?

Gợi ý: tạo một danh sách rỗng để chứa các trung bình mẫu tính được, sử dụng hàm
append() để thêm giá trị trung bình vào danh sách sau mỗi lần tính.

a
# Tạo danh sách để chứa trung bình mẫu
sample_means_20 = []

# Thực hiện bài 2 100 lần


for _ in range(100):
sample = np.random.choice(POP, 20)
sample_mean = np.mean(sample)
sample_means_20.append(sample_mean)

# Vẽ histogram cho 100 trung bình mẫu


plt.figure(figsize=(8, 6))
plt.hist(sample_means_20, bins=20, density=True, color='blue',
edgecolor='k')
plt.xlabel('Trung bình mẫu (kích thước 20)')
plt.ylabel('Tần suất')
plt.title('Histogram của Trung bình Mẫu (kích thước 20) - 100 lần')
plt.show()
B
# Tạo danh sách để chứa trung bình mẫu
sample_means_100 = []

# Thực hiện bài 3 100 lần


for _ in range(100):
sample_large = np.random.choice(POP, 100)
sample_mean_large = np.mean(sample_large)
sample_means_100.append(sample_mean_large)

# Vẽ histogram cho 100 trung bình mẫu


plt.figure(figsize=(8, 6))
plt.hist(sample_means_100, bins=20, density=True, color='blue',
edgecolor='k')
plt.xlabel('Trung bình mẫu (kích thước 100)')
plt.ylabel('Tần suất')
plt.title('Histogram của Trung bình Mẫu (kích thước 100) - 100 lần')
plt.show()
C
plt.figure(figsize=(10, 6))

# Histogram cho trung bình m

Bài 5: Khảo sát tỷ lệ mẫu


a. Bạn hãy mô phỏng 1000 lần lấy mẫu có kích cỡ 100. Vẽ histogram tỷ lệ người cao
của các mẫu
import numpy as np
import matplotlib.pyplot as plt

# Giả định dữ liệu mẫu về chiều cao (ví dụ: giá trị ngẫu nhiên)
population_heights = np.random.normal(170, 10, 1000) # Giả định 1000
người với trung bình chiều cao 170 và độ lệch chuẩn 10

sample_size = 100 # Kích cỡ mẫu


num_samples = 1000 # Số lần lấy mẫu

sample_means = []
for _ in range(num_samples):
sample = np.random.choice(population_heights, sample_size)
sample_mean = np.mean(sample)
sample_means.append(sample_mean)

plt.hist(sample_means, bins=30, edgecolor='k')


plt.xlabel('Tỷ lệ người cao trong mẫu')
plt.ylabel('Số lần xuất hiện')
plt.title(f'Biểu đồ histogram tỷ lệ người cao trong mẫu (kích cỡ mẫu =
{sample_size})')
plt.show()

b. Bạn hãy mô phỏng 1000 lần lấy mẫu có kích cỡ 500. Vẽ histogram tỷ lệ người cao
của các mẫu
import numpy as np
import matplotlib.pyplot as plt
# Giả định dữ liệu mẫu về chiều cao (ví dụ: giá trị ngẫu nhiên)
population_heights = np.random.normal(170, 10, 1000) # Giả định 1000
người với trung bình chiều cao 170 và độ lệch chuẩn 10

sample_size = 500 # Kích cỡ mẫu


num_samples = 1000 # Số lần lấy mẫu

sample_means = []
for _ in range(num_samples):
sample = np.random.choice(population_heights, sample_size)
sample_mean = np.mean(sample)
sample_means.append(sample_mean)

plt.hist(sample_means, bins=30, edgecolor='k')


plt.xlabel('Tỷ lệ người cao trong mẫu')
plt.ylabel('Số lần xuất hiện')
plt.title(f'Biểu đồ histogram tỷ lệ người cao trong mẫu (kích cỡ mẫu =
{sample_size})')
plt.show()

Bài 6: Khảo sát phương sai mẫu


Bạn hãy mô phỏng 1000 lần lấy mẫu có kích cỡ 100. Vẽ histogram đại lượng phương
sai của các mẫu (Phương sai bằng bình phương độ lệch chuẩn)

# Tạo danh sách để chứa phương sai của mẫu


sample_variances = []

# Mô phỏng 1000 lần lấy mẫu kích thước 100 và tính phương sai
for _ in range(1000):
sample = np.random.choice(POP, 100)
sample_variance = np.var(sample)
sample_variances.append(sample_variance)

# Vẽ histogram cho phương sai của các mẫu


plt.figure(figsize=(8, 6))
plt.hist(sample_variances, bins=20, density=True, color='blue', edgecolor='k')
plt.xlabel('Phương sai mẫu (kích thước 100)')
plt.ylabel('Tần suất')
plt.title('Histogram của Phương sai Mẫu - 1000 lần lấy mẫu kích thước 100')
plt.show()

bài 7: Bài Tập Ước Lượng


Khảo sát cân nặng (kg) của gà khi xuất chuồng, người ta cân một số con và có kết quả
như sau:
2.1, 1.8, 2.0, 2.3, 1.7, 1.5, 2.0, 2.2, 1.8

Giả sử cân nặng của gà là biến ngẫu nhiên có phân phối chuẩn. Hãy lập khoảng tin
cậy cho cân nặng trung bình của khi xuất chuồng với độ tin cậy là 95%. Trong 2
trường hợp:

a, Biết σ=0.3
import scipy.stats as stats

data = [2.1, 1.8, 2.0, 2.3, 1.7, 1.5, 2.0, 2.2, 1.8]
confidence_level = 0.95
sigma = 0.3

sample_mean = sum(data) / len(data)


sample_size = len(data)
z_critical = stats.norm.ppf(1 - (1 - confidence_level) / 2)
standard_error = sigma / (sample_size ** 0.5)

margin_of_error = z_critical * standard_error


confidence_interval = (sample_mean - margin_of_error, sample_mean +
margin_of_error)

print(f"Khoảng tin cậy ({int(confidence_level * 100)}%):


({confidence_interval[0]:.3f}, {confidence_interval[1]:.3f})")

b, Không biết σ
import scipy.stats as stats

data = [2.1, 1.8, 2.0, 2.3, 1.7, 1.5, 2.0, 2.2, 1.8]
confidence_level = 0.95

sample_mean = sum(data) / len(data)


sample_size = len(data)
sample_std = (sum((x - sample_mean) ** 2 for x in data) / (sample_size - 1)) **
0.5
t_critical = stats.t.ppf(1 - (1 - confidence_level) / 2, df=sample_size - 1)
standard_error = sample_std / (sample_size ** 0.5)

margin_of_error = t_critical * standard_error


confidence_interval = (sample_mean - margin_of_error, sample_mean +
margin_of_error)

print(f"Khoảng tin cậy ({int(confidence_level * 100)}%):


({confidence_interval[0]:.3f}, {confidence_interval[1]:.3f})")

You might also like