- Load data into a dataframe
Ví dụ:# Azure storage access info for open dataset diabetes
blob_account_name = "azureopendatastorage"
blob_container_name = "mlsamples"
blob_relative_path = "diabetes"
blob_sas_token = r"" # Blank since container is Anonymous access
# Set Spark config to access blob storage
wasbs_path = f"wasbs://%s@%s.blob.core.windows.net/%s" % (blob_container_name, blob_account_name, blob_relative_path)
spark.conf.set("fs.azure.sas.%s.%s.blob.core.windows.net" % (blob_container_name, blob_account_name), blob_sas_token)
print("Remote blob path: " + wasbs_path)
# Spark read parquet, note that it won't load any data yet by now
df = spark.read.parquet(wasbs_path)
=>đổi phần cuối thành như thế này để giữ cache, tránh trường hợp mỗi lần chạy -lại các code sau đó lphair chạy lại toàn bộ project
# Spark read parquet, note that it won't load any data yet by now
df = spark.read.parquet(wasbs_path).cache()
df.count()
display(df)
kết quả:
2. Nhập DF vào Pandas:
df = df.toPandas()df.head()
Việc sử dụng DataFrame của pandas giúp bạn dễ dàng xử lý và thao tác với dữ liệu trước khi đưa vào mô hình học máy. Dưới đây là một số lý do tại sao bạn cần sử dụng pandas DataFrame trong quy trình này:
Dễ dàng làm sạch dữ liệu: Pandas cung cấp các phương thức mạnh mẽ để xử lý dữ liệu thiếu, lọc, nhóm và sắp xếp dữ liệu. Việc làm sạch dữ liệu (như loại bỏ các giá trị thiếu, xử lý dữ liệu không hợp lệ) là một bước quan trọng trước khi áp dụng mô hình học máy.
Chuyển đổi dữ liệu dễ dàng: Trong quá trình chuẩn bị dữ liệu cho học máy, bạn có thể cần phải chuyển đổi dữ liệu từ các định dạng khác (CSV, Excel, SQL) thành pandas DataFrame. Pandas hỗ trợ nhiều định dạng dữ liệu và có thể dễ dàng chuyển đổi giữa chúng.
Hỗ trợ các thao tác phức tạp: Với pandas, bạn có thể thực hiện các phép toán phức tạp như tính toán thống kê, chuyển đổi dữ liệu (pivoting, melting), lọc và kết hợp nhiều bảng dữ liệu. Điều này rất hữu ích khi bạn cần phân tích hoặc trích xuất các đặc trưng (features) từ dữ liệu thô.
Tích hợp tốt với các thư viện ML: Pandas DataFrame có thể dễ dàng chuyển đổi thành các đối tượng phù hợp với các thư viện học máy như Scikit-learn, TensorFlow hoặc PyTorch. Bạn có thể dễ dàng lấy dữ liệu từ pandas DataFrame và đưa nó vào các mô hình ML mà không cần quá nhiều bước trung gian.
Hiển thị và trực quan hóa dữ liệu: Pandas giúp bạn nhanh chóng xem và phân tích dữ liệu thông qua các phương thức như head(), tail(), và describe(). Điều này cực kỳ quan trọng khi bạn cần kiểm tra dữ liệu của mình trước khi đưa vào mô hình.
Vì vậy, sử dụng pandas DataFrame giúp bạn chuẩn bị dữ liệu hiệu quả và dễ dàng hơn trong các dự án học máy. Nếu bạn đang làm việc trong môi trường Fabric, pandas sẽ là công cụ hữu ích để xử lý và chuẩn bị dữ liệu trước khi truyền vào các mô hình học máy.
3. Kiểm tra cấu trúc
codeCopy
# Display the number of rows and columns in the dataset
print("Number of rows:", df.shape[0])
print("Number of columns:", df.shape[1])
df.shape[0] lấy số dòng trong DataFrame, vì chỉ số dòng nằm ở vị trí đầu tiên của tuple.
df.shape[1] lấy số cột trong DataFrame, vì chỉ số cột nằm ở vị trí thứ hai của tuple.
# Display the data types of each column
print("\nData types of columns:")
print(df.dtypes)
4. Kiểm tra data thiếu
codeCopy
missing_values = df.isnull().sum()
print("\nMissing values per column:")
print(missing_values)
The code checks for missing values. Observe that there’s no
missing data in the dataset.
5. Thống kê tính trạng các data số
codeCopy
df.describe()
6.Vẽ biểu đồ phân phối dữ liệu
codeCopy
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt:
- Thư viện matplotlib là một công cụ mạnh mẽ để vẽ đồ thị trong Python. pyplot là một module của matplotlib giúp vẽ các loại đồ thị như biểu đồ cột, biểu đồ phân tán, biểu đồ đường, v.v. Trong trường hợp này, plt là bí danh (alias) cho module này
- Seaborn là thư viện mở rộng của matplotlib,
cung cấp các công cụ trực quan hóa dữ liệu đẹp hơn và dễ sử dụng hơn. sns
là bí danh để sử dụng các hàm của seaborn, đặc biệt hữu ích khi bạn muốn tạo
ra các biểu đồ thống kê với ít dòng mã.
import numpy as np:
- Numpy là thư viện hỗ trợ các phép toán số học và mảng đa chiều (arrays) trong Python. Trong trường hợp này, thư viện numpy có thể được sử dụng để tạo dữ liệu giả lập hoặc tính toán các thống kê mô tả cho dữ liệu.
# Calculate the mean, median of
the BMI variable
mean = df['BMI'].mean()
median = df['BMI'].median()
df['BMI'] truy xuất đến cột có tên BMI
trong DataFrame df.
# Histogram of the BMI variable
plt.figure(figsize=(8, 6))
plt.hist(df['BMI'], bins=20,
color='skyblue', edgecolor='black')
plt.title('BMI Distribution')
plt.xlabel('BMI')
plt.ylabel('Frequency')
plt.figure(figsize=(8,
6)):
- Câu lệnh
này thiết lập kích thước của hình vẽ (figure) với chiều rộng 8 inch và chiều
cao 6 inch.
plt.hist(df['BMI'],
bins=20, color='skyblue', edgecolor='black'):
- plt.hist() vẽ một biểu đồ histogram cho cột
BMI của DataFrame df.
- bins=20 chia dữ liệu thành 20 nhóm (hoặc
các "thùng" trên biểu đồ).
- color='skyblue' thiết lập màu sắc của các thanh
trên biểu đồ là màu xanh dương nhạt.
- edgecolor='black' thiết lập màu sắc của đường viền
thanh histogram là màu đen.
plt.title('BMI
Distribution'):
- Thiết
lập tiêu đề cho biểu đồ là "BMI Distribution".
plt.xlabel('BMI'):
- Thiết
lập nhãn cho trục x là "BMI", biểu thị rằng trục này đại diện
cho các giá trị của chỉ số BMI.
plt.ylabel('Frequency'):
- Thiết
lập nhãn cho trục y là "Frequency", biểu thị số lượng các giá trị
BMI trong mỗi nhóm (bin).
# Add lines for the mean and
median
plt.axvline(mean, color='red',
linestyle='dashed', linewidth=2, label='Mean')
plt.axvline(median, color='green', linestyle='dashed', linewidth=2, label='Median')
# Add a legend
plt.legend()
plt.show()
7. Perform multivariate analysis
Let’s generate visualizations such
as scatter plots and box plots to uncover patterns and relationships within the
data.
7.1 Scatter plots-biểu đồ phân tán
codeCopy
import matplotlib.pyplot as plt
import seaborn as sns
# Scatter plot of BMI vs. Target
variable
plt.figure(figsize=(8, 6))
sns.scatterplot(x='BMI', y='Y',
data=df)
plt.title('BMI vs. Target
variable')
plt.xlabel('BMI')
plt.ylabel('Target')
plt.show()
We can see that as the BMI
increases, the target variable also increases, indicating a positive linear
relationship between these two variables.
=>dù
có sự liên quan giữa BMI và biến (cùng tăng) nhưng đồ thị có sự phân tán nhiều
dẫn tới khó kết luận chính xác.
7.2 Biểu đồ hộp
codeCopy
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 5))
# Replace numeric values with
labels
df['SEX'] = df['SEX'].replace({1: 'Male', 2: 'Female'})
sns.boxplot(x='SEX', y='BP',
data=df, ax=ax)
ax.set_title('Blood pressure
across Gender')
plt.tight_layout()
plt.show()
These observations suggest that
there are differences in the blood pressure profiles of male and female
patients. On average, female patients have a higher blood pressure than male
patients.

Hộp của nữu cao hơn
nam=>Nữ huyết áp trung bình cao hơn
Hộp của
nữ dài hơn=>nữ có sự biến động về huyết
áp ở dữ liệu trung tâm 25%-75%
Min-max
của nam rộng hơn: có nhiều cá nhân có huyết áp nằm ngoài mức trung bình hơn,
tức là có những người huyết áp rất thấp hoặc rất
cao.
Nam giới có vài điểm ngoại lai (outliers) ở phía trên, cho thấy có một số người có huyết áp cao bất thường.
Kết
luận:
- Nữ có huyết áp trung bình cao hơn nam, cho thấy
có thể có sự khác biệt sinh lý hoặc lối sống ảnh hưởng đến huyết áp giữa
hai giới.
- Huyết áp của nữ biến động nhiều hơn trong khoảng
trung tâm (IQR rộng hơn), nghĩa là một số người có mức huyết áp ổn định,
trong khi những người khác dao động nhiều hơn.
- Nam giới có phạm vi huyết áp rộng hơn (MIN -
MAX lớn hơn), chứng tỏ có một số cá nhân có huyết áp rất thấp hoặc rất
cao, có thể do yếu tố sức khỏe hoặc lối sống.
- Một số nam giới có huyết áp cao bất thường
(outliers), có thể cần chú ý vì đây có thể là dấu hiệu của bệnh lý hoặc
nguy cơ tim mạch cao.
Hành
động gợi ý:
- Kiểm tra nguyên nhân tại sao nữ có huyết áp trung
bình cao hơn, có thể liên quan đến chế độ ăn uống, căng thẳng hoặc yếu
tố sinh lý.
- Đối với nữ, nên theo dõi huyết áp định kỳ hơn,
đặc biệt với những người có sự biến động lớn để phát hiện sớm các vấn đề sức
khỏe.
- Đối với nam, cần chú ý đến những người có huyết áp
quá thấp hoặc quá cao, kiểm tra yếu tố nguy cơ như lối sống, bệnh nền
hoặc chế độ dinh dưỡng.
- Những người có huyết áp quá cao (đặc biệt là
outliers ở nam) nên được tư vấn y tế, vì đây có thể là dấu hiệu của bệnh
tim mạch hoặc cao huyết áp cần kiểm soát.
- Xem xét các biện pháp cải thiện sức khỏe tổng thể,
như điều chỉnh chế độ ăn uống, tập thể dục và kiểm tra huyết áp thường
xuyên để đảm bảo huyết áp ổn định hơn.
7.3 Biểu đồ cột có tính toán
codeCopy
import matplotlib.pyplot as plt
import seaborn as sns
# Calculate average BP and BMI by
SEX
avg_values = df.groupby('SEX')[['BP', 'BMI']].mean()
# Bar chart of the average BP and
BMI by SEX
ax = avg_values.plot(kind='bar', figsize=(15, 6), edgecolor='black')
# Add title and labels
plt.title('Avg. Blood Pressure and
BMI by Gender')
plt.xlabel('Gender')
plt.ylabel('Average')
# Display actual numbers on the
bar chart
for p in ax.patches:
ax.annotate(format(p.get_height(), '.2f'),
(p.get_x() + p.get_width() /
2., p.get_height()),
ha = 'center', va = 'center',
xytext = (0, 10),
textcoords = 'offset points')
plt.show()
This graph shows that the average
blood pressure is higher in female patients compared to male patients.
Additionally, it shows that the average Body Mass Index (BMI) is slightly
higher in females than in males.
- Huyết áp trung bình của nữ cao hơn nam (98.19
so với 91.52), cho thấy nữ có nguy cơ cao huyết áp cao hơn nam giới.
- BMI của nữ cũng cao hơn nam một chút (26.79 so
với 26.01), cho thấy nữ có xu hướng có chỉ số khối cơ thể cao hơn.
- Do mối liên hệ giữa BMI và huyết áp, nữ giới
có thể cần chú ý hơn đến chế độ ăn uống, tập thể dục để kiểm soát cân nặng
và duy trì huyết áp ổn định.
Hành
động gợi ý:
- Nữ giới nên theo dõi huyết áp thường xuyên hơn
và có chế độ ăn uống hợp lý để hạn chế nguy cơ cao huyết áp.
- Duy trì lối sống lành mạnh, như tập thể dục
thường xuyên, ăn uống cân bằng để giữ BMI ổn định.
- Nam giới dù có huyết áp trung bình thấp hơn, nhưng
vẫn cần chú ý đến cá nhân có nguy cơ cao (outliers) để tránh các vấn đề
sức khỏe sau này.
7.4 Biểu đồ Line có tính toán
codeCopy
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10, 6))
sns.lineplot(x='AGE', y='BMI',
data=df, errorbar=None)
plt.title('BMI over Age')
plt.xlabel('Age')
plt.ylabel('BMI')
plt.show()
The age group of 19 to 30 years
has the lowest average BMI values, while the highest average BMI is found in
the age group of 65 to 79 years. Additionally, observe that the average BMI for
most age groups falls within the overweight range.
8. Correlation analysis-phân tích tương quan
Let’s calculate correlations
between different features to understand their relationships and dependencies.
codeCopy
df.corr(numeric_only=True)
#tính ma trận tương quan giữa các cột số trong DataFrame.
codeCopy
plt.figure(figsize=(15, 7))
sns.heatmap(df.corr(numeric_only=True),
annot=True, vmin=-1, vmax=1, cmap="Blues")
Phân
tích Heatmap
Bản đồ
nhiệt này hiển thị ma trận tương quan giữa các biến số, trong đó:
- Màu xanh đậm (gần 1.0) → Tương quan dương mạnh.
- Màu xanh nhạt (gần 0) → Tương quan yếu hoặc
không có mối quan hệ rõ ràng.
- Màu trắng/xanh rất nhạt (gần -1.0) → Tương
quan nghịch mạnh.
🔎 Nhận xét từ heatmap
- AGE và BMI có tương quan dương (0.19)
→ Tuổi tăng, BMI có xu hướng tăng nhưng không mạnh. - AGE và BP có tương quan khá tốt (0.34)
→ Tuổi càng cao, huyết áp (BP) có xu hướng tăng. - S1, S2, S3, S4, S5, S6 có tương quan chặt với nhau
→ Đây có thể là các biến liên quan đến một chỉ số chung nào đó (như sinh hóa, lipid máu, v.v.). - S3 có mối quan hệ nghịch với S4 (gần -1.0)
→ Hai biến này có xu hướng đối lập nhau, cần kiểm tra ý nghĩa thực tế. - Y (biến mục tiêu) có tương quan với một số biến
- BMI, BP có tương quan khá rõ với Y (khoảng 0.19 -
0.3).
- S5 có tương quan dương khá mạnh với Y.
- S3 và S4 có ảnh hưởng đối lập đến Y.
🛠 Giải pháp & Định hướng
🔹 Dự đoán Y:
- Nếu Y là một chỉ số sức khỏe/dự báo bệnh lý, có thể tập
trung vào BMI, BP và S5 để xây dựng mô hình dự đoán.
- Kiểm tra tác động của S3 và S4 để tránh nhiễu trong
phân tích.
🔹 Loại bỏ đa cộng tuyến:
- Vì nhóm S1-S6 có tương quan cao, có thể dùng PCA
(Principal Component Analysis) để giảm số chiều dữ liệu.
- Nếu một số biến quá giống nhau (hệ số tương quan
~1.0), có thể loại bớt để tránh dư thừa thông tin.
🔹 Ứng dụng vào thực tế:
- Nếu mục tiêu là cải thiện sức khỏe, có thể tập trung
vào việc kiểm soát BMI và BP, đặc biệt là khi tuổi tăng.
- Nếu đây là dữ liệu bệnh nhân, có thể xem xét mối quan
hệ giữa các biến sinh hóa và nguy cơ bệnh tật.
Nhận xét
Đăng nhận xét