Cách thực hiện phân tích dữ liệu khám phá

Cách thực hiện phân tích dữ liệu khám phá

Cách thực hiện phân tích dữ liệu khám phá

Giới thiệu

Phân tích dữ liệu khám phá là một tập hợp các kỹ thuật được phát triển bởi Tukey, John Wilder vào năm 1970. Triết lý đằng sau cách tiếp cận này là kiểm tra dữ liệu trước khi xây dựng mô hình. John Tukey khuyến khích các nhà thống kê khám phá dữ liệu và có thể hình thành các giả thuyết có thể dẫn đến việc thu thập và thử nghiệm dữ liệu mới. Ngày nay, các nhà khoa học và phân tích dữ liệu dành phần lớn thời gian của họ trong việc khám phá dữ liệu. Nhưng phân tích dữ liệu khám phá là gì và tại sao nó lại quan trọng như vậy? Bài viết này giải thích phân tích dữ liệu khám phá là gì và cách áp dụng các kỹ thuật này cho tập dữ liệu.

Phân tích dữ liệu khám phá là gì?

Phân tích dữ liệu khám phá (EDA) được sử dụng để thu thập thông tin chi tiết từ dữ liệu. Các nhà khoa học và nhà phân tích dữ liệu cố gắng tìm ra các mẫu, mối quan hệ và sự bất thường trong dữ liệu bằng cách sử dụng một số biểu đồ thống kê và các kỹ thuật trực quan khác. Cụ thể bao gồm một số tác vụ như:

  • Lấy được cái nhìn tổng quan đa từ tập dữ liệu
  • Khám phá cấu trúc cơ bản
  • Trích xuất các biến quan trọng từ tập dữ liệu
  • Phát hiện những điểm bất thường (nếu có)
  • Kiểm tra các giả thuyết cơ bản
  • Xác định các hệ số tối ưu

Tại sao Phân tích dữ liệu khám phá lại quan trọng?

Mục đích chính của EDA là phát hiện bất kỳ lỗi nào, ngoại lệ cũng như để hiểu các mẫu khác nhau trong dữ liệu. Nó cho phép Nhà phân tích hiểu dữ liệu tốt hơn trước khi đưa ra bất kỳ giả thuyết nào. Kết quả của EDA giúp doanh nghiệp biết khách hàng của họ, mở rộng kinh doanh và đưa ra quyết định phù hợp.

Làm thế nào để thực hiện Phân tích dữ liệu khám phá?

Để hiểu rõ hơn về EDA, chúng ta hãy xem xét một ví dụ. Ta sẽ sử dụng Tập dữ liệu về ô tô (Automobile Dataset) để phân tích.

Import thư viện và tải tập dữ liệu

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
auto=pd.read_csv(Automobile_data.csv)
auto.head()

Chúng ta thấy rằng tập dữ liệu có 26 thuộc tính và cũng có thể quan sát thấy có dấu ‘?’ ở một số vị trí, điều đó có nghĩa là dữ liệu bị thiếu giá trị. Cột price là biến mục tiêu của chúng ta.

Kiểm tra các giá trị bị thiếu

auto.isnull().sum()

Điều này cho thấy rằng không có bất kỳ giá trị rỗng nào trong tập dữ liệu nhưng chúng ta đã quan sát trước đó rằng có các ký hiệu ‘?’ trong tập dữ liệu, có nghĩa là các ký hiệu này ở dạng một đối tượng (kiểu chuỗi chẳng hạn). Bây giờ hãy kiểm tra các kiểu dữ liệu của từng thuộc tính.

auto.info()

Ta có thể quan sát thấy rằng những cột có ký hiệu là ở kiểu đối tượng (object) cũng như một số cột đúng ra kiểu số nguyên nhưng là kiểu đối tượng. Bây giờ ta tìm xem cột nào có ký hiệu ‘?’ và nếu có bất kỳ ký hiệu nào khác nữa.

for col in auto.columns:
    print('{} : {}'.format(col,auto[col].unique()))

Có các giá trị null trong tập dữ liệu và ở dạng ‘?’. Nhưng pandas không đọc chúng nên ta sẽ thay thế chúng thành dạng np.nan.

for col in auto.columns:
    auto[col] = auto[col].replace('?', np.nan)
auto.head()

Bây giờ ta có thể thấy các ký hiệu ‘?’ đã được chuyển thành dạng NaN. Hãy kiểm tra lại các giá trị bị thiếu.

auto.isnull().sum()

Ta thấy rằng bây giờ đã có các giá trị bị thiếu trong một số cột.

Trực quan hóa các giá trị còn thiếu

Với sự trợ giúp của bản đồ nhiệt (heatmap), ta có thể thấy lượng dữ liệu bị thiếu trong các thuộc tính. Với điều này, chúng tôi có thể đưa ra quyết định loại bỏ các giá trị bị thiếu này hoặc thay thế chúng.

sns.heatmap(auto.isnull(),cbar=False,cmap='viridis')

Bây giờ, hãy quan sát rằng có nhiều giá trị bị thiếu trong normalized_losses trong khi các cột khác có ít giá trị bị thiếu hơn. Chúng tôi không thể bỏ cột normalized_losses vì nó có thể quan trọng với dự đoán của chúng ta.

Thay thế các giá trị bị thiếu

Chúng ta sẽ thay thế các giá trị bị thiếu này bằng giá trị trung bình vì số lượng giá trị bị thiếu ít hơn (chúng ta cũng có thể sử dụng giá trị trung vị).

um_col = ['normalized-losses', 'bore',  'stroke', 'horsepower', 'peak-rpm','price']
for col in num_col:
    auto[col]=pd.to_numeric(auto[col])
    auto[col].fillna(auto[col].mean(), inplace=True)
auto.head()

Ta thấy rằng bây giờ các giá trị bị thiếu đã được thay thế bằng giá trị trung bình.

Đặt câu hỏi phân tích và trực quan hóa

Đây là bước quan trọng nhất trong EDA. Bước này sẽ quyết định bạn có thể suy nghĩ thế nào với tư cách là một Nhà phân tích. Bước này khác nhau ở mỗi người về khả năng đặt câu hỏi của họ. Cố gắng đặt các câu hỏi liên quan đến các biến độc lập và biến mục tiêu. Ví dụ – loại xăng sẽ ảnh hưởng đến giá xe như thế nào? Trước khi điều này, hãy kiểm tra mối tương quan giữa các biến khác nhau, điều này sẽ cung cấp cho chúng ta một lộ trình về cách tiếp tục.

plt.figure(figsize=(10,10))
sns.heatmap(auto.corr(),cbar=True,annot=True,cmap='Blues')

Tương quan dương

  • Price – wheel_base, length, width, curb_weight, engine_size, bore, horsepower
  • wheelbase – length, width, height, curb_weight, engine_size, price
  • horsepower – length, width, curb_weight, engine_size, bore, price
  • Highway mpg – city mpg

Tương quan âm

  • Price – highway_mpg, city_mpg
  • highway_mpg – wheel base, length, width, curb_weight, engine_size, bore, horsepower, price
  • city – wheel base, length, width, curb_weight, engine_size, bore, horsepower, price

Bản đồ nhiệt này đã cung cấp thông tin chi tiết tuyệt vời về dữ liệu.

Bây giờ hãy áp dụng kiến thức nền của mình và đặt những câu hỏi sẽ ảnh hưởng đến giá ô tô.

Mã lực ảnh hưởng đến giá cả như thế nào?

plt.figure(figsize=(10,10))
plt.scatter(x='horsepower',y='price',data=auto)
plt.xlabel('Horsepower')
plt.ylabel('Price')

Ta thấy rằng hầu hết giá trị mã lực nằm trong khoảng 50-150 có giá chủ yếu nằm trong khoảng 5000-25000, cũng có những giá trị ngoại lệ (từ 200-300). Hãy phân tích đơn biến về mã lực.

sns.histplot(auto.horsepower,bins=10)
This image has an empty alt attribute; its file name is image-10.png

Mối quan hệ giữa kích thước động cơ và giá cả là gì?

plt.figure(figsize=(10,10))
plt.scatter(x='engine-size',y='price',data=auto)
plt.xlabel('Engine size')
plt.ylabel('Price')

Sự hao tốn nhiên liệu trên đường cao tốc (highway_mpg) ảnh hưởng đến giá như thế nào?

plt.figure(figsize=(10,10))
plt.scatter(x='highway-mpg',y='price',data=auto)
plt.xlabel('Higway mpg')
plt.ylabel('Price')

Chúng ta có thể thấy giá giảm khi higway_mpg tăng.

Hãy kiểm tra số lượng cửa.

auto['num-of-doors'].value_counts()

Mối quan hệ giữa số lượng cửa và giá cả

Chúng ta sẽ sử dụng boxplot cho phân tích này.

sns.boxplot(x='price',y='num_of_doors',data=auto)

Với biểu đồ này, ta có thể kết luận rằng giá trung bình của một chiếc xe có hai cửa là 10000 và giá trung bình của một chiếc xe có bốn cửa là 12000.

Như vậy, chúng ta đã có đủ các thông tin chi tiết từ dữ liệu và sẵn sàng xây dựng mô hình từ đó.

Lời kết

Cảm ơn bạn đã đọc bài viết này.

Tôi hy vọng bài viết này đã giúp bạn hiểu về Phân tích dữ liệu khám phá và cách áp dụng các kỹ thuật EDA khác nhau cho tập dữ liệu.

Bạn có thể tham khảo thêm về phân tích dữ liệu trong khóa học của tôi:

Leave a Reply