
Pairplot median_income  housing_median_age  median_house_value
Heatmapươế
FacetGrid Histogram + KDE median_house_value  housing_median_age

đ
!pipinstallpandasnumpymatplotlibseaborn
Requirement already satisfied: pandas in /usr/local/lib/python3.12/dist-packages (2.2.2)
Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (2.0.2)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.12/dist-packages (3.10.0)
Requirement already satisfied: seaborn in /usr/local/lib/python3.12/dist-packages (0.13.2)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas) (2
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2)
Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.3
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (4.
Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (25.0
Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (11.3.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (3.2
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2->
fromgoogle.colabimportfiles
files.upload()
Show hidden output
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income med
0 -122.05 37.37 27.0 3885.0 661.0 1537.0 606.0 6.6085
1 -118.30 34.26 43.0 1510.0 310.0 809.0 277.0 3.5990
2 -117.81 33.78 27.0 3589.0 507.0 1484.0 495.0 5.7934
3 -118.36 33.82 28.0 67.0 15.0 49.0 11.0 6.1359
4 -119.67 36.33 19.0 1241.0 244.0 850.0 237.0 2.9375
importpandasaspd
importnumpyasnp
importmatplotlib.pyplotasplt
importseabornassns
sns.set(style="whitegrid")
#Đọcdữliệu(uploadfilecalifornia_housing.csvlênColabtrước)
df=pd.read_csv('california_housing.csv')
df.head()

median_income
housing_median_age
median_house_value

df_sample=df.sample(3000,random_state=42)
sns.pairplot(df_sample,
vars=['median_income','housing_median_age','median_house_value'],
diag_kind='kde',
plot_kws={'alpha':0.2,'s':10},
diag_kws={'shade':True})
11:14 24/11/25
california_eda_visualization - Colab
1/5
/usr/local/lib/python3.12/dist-packages/seaborn/axisgrid.py:1513: FutureWarning:
`shade` is now deprecated in favor of `fill`; setting `fill=True`.
This will become an error in seaborn v0.14.0; please update your code.
func(x=vector, **plot_kwargs)
/usr/local/lib/python3.12/dist-packages/seaborn/axisgrid.py:1513: FutureWarning:
`shade` is now deprecated in favor of `fill`; setting `fill=True`.
This will become an error in seaborn v0.14.0; please update your code.
func(x=vector, **plot_kwargs)
/usr/local/lib/python3.12/dist-packages/seaborn/axisgrid.py:1513: FutureWarning:
`shade` is now deprecated in favor of `fill`; setting `fill=True`.
This will become an error in seaborn v0.14.0; please update your code.
func(x=vector, **plot_kwargs)
plt.show()
1) Biến nào có mi quan h rõ rt nht vi giá nhà (median_house_value)?
đđ
ưăưăếơ
2) Thu nhp h gia đình (median_income) có nh hưng thế nào đến giá nhà?
đươươđ
đĩếơ
ư
3) Tui nhà (housing_median_age) có mi liên h rõ vi thu nhp hoc giá nhà không?
ếđư
ăĐếếđếđ
đđ

ươế
ươ
11:14 24/11/25
california_eda_visualization - Colab
2/5
longitude latitude housing_median_age total_rooms total_bedrooms population households me
longitude 1.000000 -0.925017 -0.064203 0.049865 0.070869 0.111572 0.051062
latitude -0.925017 1.000000 -0.025143 -0.039632 -0.068245 -0.117318 -0.068296
housing_median_age -0.064203 -0.025143 1.000000 -0.367850 -0.323154 -0.299888 -0.305171
total_rooms 0.049865 -0.039632 -0.367850 1.000000 0.937749 0.838867 0.914116
total_bedrooms 0.070869 -0.068245 -0.323154 0.937749 1.000000 0.856387 0.970758
population 0.111572 -0.117318 -0.299888 0.838867 0.856387 1.000000 0.895530
households 0.051062 -0.068296 -0.305171 0.914116 0.970758 0.895530 1.000000
median_income -0.018701 -0.072363 -0.144315 0.221249 0.024025 0.032361 0.048625
median_house_value -0.050662 -0.138428 0.091409 0.160427 0.082279 -0.001192 0.100176
#Chi
lâ
ycáccộtsô
(numeric)
numeric_df=df.select_dtypes(include=[np.number])
corr=numeric_df.corr(method='pearson')
plt.figure(figsize=(12,8))
sns.heatmap(corr,cmap='coolwarm',center=0)
plt.title('Heatmapmatrậntươngquan(Pearson)')
plt.tight_layout()
plt.show()
corr
1) Nhóm biến nào có tương quan rt cao vi nhau?
ếươđđếưtotal_rooms,
total_bedrooms, population, households
ếđđđưưăươ
2) Biến nào có tương quan mnh nht vi median_house_value?
ếươmedian_income

11:14 24/11/25
california_eda_visualization - Colab
3/5
Đươđếăăếếđ
3) Khi xây dng mô hình, cn lưu ý gì khi nhiu biến có tương quan gn 1?
ếươư
đếđ
đưếươ
ếếđếĩơ
 housing_median_age 





đ median_house_value 

#Că
tnhómtuô
inhà
bins=[0,10,20,30,40,50]
labels=['0–10','11–20','21–30','31–40','41–50']
df['age_group']=pd.cut(df['housing_median_age'],bins=bins,labels=labels,include_lowest=True)
#Loạibo
giátrịNaN(nê
ucótuô
i>50)
subset=df.dropna(subset=['age_group'])
g=sns.FacetGrid(subset,col="age_group",col_wrap=3,sharex=False,sharey=False)
g.map(sns.histplot,"median_house_value",kde=True)
g.set_axis_labels("median_house_value","Count")
g.fig.subplots_adjust(top=0.9)
g.fig.suptitle("Phânbô
giánhàtheonhómtuô
inhà")
plt.show()
1) Nhóm tui nhà nào tp trung nhiu mc giá thp?

11:14 24/11/25
california_eda_visualization - Colab
4/5
đĐ
ũươ
2) Nhóm nào có phân b giá tri rng hơn?
ũưđđđđơ
ư
Đũđđđđ
3) Có mi quan h tuyến tính rõ rt gia tui nhà và giá nhà không?
đưếũ
ơđđư
11:14 24/11/25
california_eda_visualization - Colab
5/5

Preview text:

11:14 24/11/25
california_eda_visualization - Colab
 California Housing – Pairplot, Heatmap, FacetGrid
Notebook này thực hiện 3 bài:
1. Pairplot cho: median_income , housing_median_age , median_house_value
2. Heatmap ma trận tương quan Pearson giữa các biến số
3. FacetGrid Histogram + KDE: phân bố median_house_value theo nhóm housing_median_age
 0. Chuẩn bị & đọc dữ liệu
!pip install pandas numpy matplotlib seaborn
Requirement already satisfied: pandas in /usr/local/lib/python3.12/dist-packages (2.2.2)
Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (2.0.2)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.12/dist-packages (3.10.0)
Requirement already satisfied: seaborn in /usr/local/lib/python3.12/dist-packages (0.13.2)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas) (2
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2)
Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.3
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (4.
Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (25.0
Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (11.3.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (3.2
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2-> from google.colab import files files.upload() Show hidden output import pandas as pd import numpy as np
import matplotlib.pyplot as plt import seaborn as sns sns.set(style="whitegrid")
# Đọc dữ liệu (upload file california_housing.csv lên Colab trước)
df = pd.read_csv('california_housing.csv') df.head()
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income med 0 -122.05 37.37 27.0 3885.0 661.0 1537.0 606.0 6.6085 1 -118.30 34.26 43.0 1510.0 310.0 809.0 277.0 3.5990 2 -117.81 33.78 27.0 3589.0 507.0 1484.0 495.0 5.7934 3 -118.36 33.82 28.0 67.0 15.0 49.0 11.0 6.1359 4 -119.67 36.33 19.0 1241.0 244.0 850.0 237.0 2.9375  Bài 1 – Pairplot Vẽ Pairplot cho: median_income housing_median_age median_house_value
df_sample = df.sample(3000, random_state=42) sns.pairplot(df_sample,
vars=['median_income','housing_median_age','median_house_value'], diag_kind='kde',
plot_kws={'alpha':0.2, 's':10}, diag_kws={'shade':True})
https://colab.research.google.com/drive/1Hin5G4EQ4-eY86Eao1zEp1uGXIwfUCqo#printMode=true 1/5 11:14 24/11/25
california_eda_visualization - Colab plt.show()
/usr/local/lib/python3.12/dist-packages/seaborn/axisgrid.py:1513: FutureWarning:
`shade` is now deprecated in favor of `fill`; setting `fill=True`.
This will become an error in seaborn v0.14.0; please update your code. func(x=vector, **plot_kwargs)
/usr/local/lib/python3.12/dist-packages/seaborn/axisgrid.py:1513: FutureWarning:
`shade` is now deprecated in favor of `fill`; setting `fill=True`.
This will become an error in seaborn v0.14.0; please update your code. func(x=vector, **plot_kwargs)
/usr/local/lib/python3.12/dist-packages/seaborn/axisgrid.py:1513: FutureWarning:
`shade` is now deprecated in favor of `fill`; setting `fill=True`.
This will become an error in seaborn v0.14.0; please update your code. func(x=vector, **plot_kwargs) Nhận xét
1) Biến nào có mối quan hệ rõ rệt nhất với giá nhà (median_house_value)?
Biểu đồ Pairplot cho thấy median_income (thu nhập trung vị) có mối quan hệ rõ rệt nhất với giá nhà. Các điểm dữ liệu phân bố theo xu
hướng tăng: thu nhập càng cao thì giá nhà càng có xu hướng tăng, khác với các biến còn lại vốn phân tán ngẫu nhiên hơn.
2) Thu nhập hộ gia đình (median_income) có ảnh hưởng thế nào đến giá nhà?
Thu nhập có tác động dương và khá mạnh lên giá nhà: các khu vực thu nhập cao thường có mức giá nhà cao hơn đáng kể. Tuy nhiên, ở
nhóm thu nhập cao, nhiều điểm tập trung tại mức ~500.000 USD cho thấy giá nhà bị cắt trần, nghĩa là giá thực tế có thể cao hơn
nhưng bị giới hạn trong dữ liệu.
3) Tuổi nhà (housing_median_age) có mối liên hệ rõ với thu nhập hoặc giá nhà không?
Tuổi nhà không thể hiện mối quan hệ tuyến tính rõ rệt với thu nhập hoặc giá nhà. Các điểm phân bố rải rác, không theo một xu hướng
tăng/giảm cụ thể. Điều này cho thấy tuổi nhà không phải là yếu tố quan trọng quyết định giá nhà, so với yếu tố thu nhập và các đặc điểm vị trí địa lý.
 Bài 2 – Heatmap ma trận tương quan
Tính tương quan Pearson giữa các biến số rồi vẽ heatmap.
https://colab.research.google.com/drive/1Hin5G4EQ4-eY86Eao1zEp1uGXIwfUCqo#printMode=true 2/5 11:14 24/11/25
california_eda_visualization - Colab # Chi
̉ lấy các cột số (numeric)
numeric_df = df.select_dtypes(include=[np.number])
corr = numeric_df.corr(method='pearson') plt.figure(figsize=(12, 8))
sns.heatmap(corr, cmap='coolwarm', center=0)
plt.title('Heatmap ma trận tương quan (Pearson)') plt.tight_layout() plt.show() corr
longitude latitude housing_median_age total_rooms total_bedrooms population households me longitude 1.000000 -0.925017 -0.064203 0.049865 0.070869 0.111572 0.051062 latitude -0.925017 1.000000 -0.025143 -0.039632 -0.068245 -0.117318 -0.068296 housing_median_age -0.064203 -0.025143 1.000000 -0.367850 -0.323154 -0.299888 -0.305171 total_rooms 0.049865 -0.039632 -0.367850 1.000000 0.937749 0.838867 0.914116 total_bedrooms 0.070869 -0.068245 -0.323154 0.937749 1.000000 0.856387 0.970758 population 0.111572 -0.117318 -0.299888 0.838867 0.856387 1.000000 0.895530 households 0.051062 -0.068296 -0.305171 0.914116 0.970758 0.895530 1.000000 median_income -0.018701 -0.072363 -0.144315 0.221249 0.024025 0.032361 0.048625 median_house_value -0.050662 -0.138428 0.091409 0.160427 0.082279 -0.001192 0.100176 Nhận xét
1) Nhóm biến nào có tương quan rất cao với nhau?
Những biến có tương quan rất cao (màu đỏ đậm, gần 1) là các biến mô tả quy mô dân cư và nhà ở, bao gồm: total_rooms,
total_bedrooms, population, households

Các biến này đều đo mức độ lớn của khu dân cư, nên chúng có xu hướng tăng/giảm cùng nhau → tương quan rất cao.
2) Biến nào có tương quan mạnh nhất với median_house_value?
Biến có tương quan mạnh nhất với giá nhà median_house_value là: median_income (thu nhập trung vị)
https://colab.research.google.com/drive/1Hin5G4EQ4-eY86Eao1zEp1uGXIwfUCqo#printMode=true 3/5 11:14 24/11/25
california_eda_visualization - Colab
Điều này tương đồng với kết quả từ Pairplot: thu nhập tăng thì giá nhà tăng, cho thấy thu nhập là yếu tố quan trọng quyết định giá nhà.
3) Khi xây dựng mô hình, cần lưu ý gì khi nhiều biến có tương quan gần 1?
Khi nhiều biến có tương quan quá cao (gần 1), cần lưu ý:
Có thể xảy ra đa cộng tuyến (multicol inearity) trong mô hình hồi quy → làm sai lệch hệ số dự đoán.
Không nên đưa tất cả các biến tương tự vào cùng mô hình.
Có thể loại bớt biến trùng lặp, hoặc biến đổi thành các biến mới mang ý nghĩa hơn.
 Bài 3 – FacetGrid Histogram + KDE theo nhóm tuổi nhà
Chia housing_median_age thành các nhóm: 0–10 11–20 21–30 31–40 41–50
Sau đó vẽ Histogram + KDE cho median_house_value trong từng nhóm. # Că ́t nhóm tuổi nhà bins = [0, 10, 20, 30, 40, 50]
labels = ['0–10', '11–20', '21–30', '31–40', '41–50']
df['age_group'] = pd.cut(df['housing_median_age'], bins=bins, labels=labels, include_lowest=True) # Loại bo ̉ giá trị NaN (nê ́u có tuổi > 50)
subset = df.dropna(subset=['age_group'])
g = sns.FacetGrid(subset, col="age_group", col_wrap=3, sharex=False, sharey=False)
g.map(sns.histplot, "median_house_value", kde=True)
g.set_axis_labels("median_house_value", "Count") g.fig.subplots_adjust(top=0.9) g.fig.suptitle("Phân bô
́ giá nhà theo nhóm tuổi nhà") plt.show() Nhân xét
1) Nhóm tuổi nhà nào tập trung nhiều ở mức giá thấp?
https://colab.research.google.com/drive/1Hin5G4EQ4-eY86Eao1zEp1uGXIwfUCqo#printMode=true 4/5 11:14 24/11/25
california_eda_visualization - Colab
Các nhóm 21–30 và 31–40 có mật độ tần suất cao nhất ở vùng giá thấp (~150.000–250.000 USD). Điều này cho thấy ở những khu vực
có tuổi nhà trung bình–cũ vừa phải, giá nhà thường thấp hơn so với các nhóm khác.
2) Nhóm nào có phân bố giá trải rộng hơn?
Nhóm 0–10 (nhà mới) và 41–50 (nhà cũ nhưng lâu đời, có thể ở khu đô thị đắt đỏ) có dải phân bố rộng hơn, xuất hiện cả giá thấp lẫn
giá rất cao (gồm cả các giá sát ngưỡng 500.000).
Điều này cho thấy cả nhà mới và nhà rất cũ đều có thể nằm ở khu vực đắt tiền, tùy thuộc vào vị trí địa lý chứ không chỉ độ tuổi.
3) Có mối quan hệ tuyến tính rõ rệt giữa tuổi nhà và giá nhà không?
Không. Biểu đồ cho thấy không tồn tại xu hướng tuyến tính rõ ràng (không phải nhà càng mới/càng cũ thì giá càng cao/thấp). Giá nhà
phụ thuộc nhiều hơn vào thu nhập khu vực, vị trí địa lý, mật độ dân cư, chứ không chỉ tuổi nhà.
https://colab.research.google.com/drive/1Hin5G4EQ4-eY86Eao1zEp1uGXIwfUCqo#printMode=true 5/5