Tăng tốc phân tích dữ liệu khám phá bằng thư viện hồ sơ gấu trúc

Bước đầu tiên khi bắt đầu làm việc với một tập dữ liệu mới là hiểu nó. Để làm được điều này, chẳng hạn, bạn cần tìm ra phạm vi giá trị được các biến chấp nhận, loại của chúng, đồng thời tìm hiểu về số lượng giá trị còn thiếu.

Thư viện pandas cung cấp cho chúng ta nhiều công cụ hữu ích để thực hiện phân tích dữ liệu khám phá (EDA). Nhưng trước khi sử dụng chúng, bạn thường cần bắt đầu với các hàm tổng quát hơn như df.describe(). Tuy nhiên, cần lưu ý rằng khả năng được cung cấp bởi các chức năng đó còn hạn chế và các giai đoạn làm việc ban đầu với bất kỳ tập dữ liệu nào khi thực hiện EDA thường rất giống nhau.

Tăng tốc phân tích dữ liệu khám phá bằng thư viện hồ sơ gấu trúc

Tác giả của tài liệu mà chúng tôi xuất bản hôm nay nói rằng ông ấy không phải là người thích thực hiện các hành động lặp đi lặp lại. Kết quả là, để tìm kiếm các công cụ giúp thực hiện phân tích dữ liệu khám phá một cách nhanh chóng và hiệu quả, anh đã tìm thấy thư viện hồ sơ gấu trúc. Kết quả công việc của nó được thể hiện không phải dưới dạng một số chỉ số riêng lẻ mà dưới dạng một báo cáo HTML khá chi tiết chứa hầu hết thông tin về dữ liệu được phân tích mà bạn có thể cần biết trước khi bắt đầu làm việc chặt chẽ hơn với nó.

Ở đây chúng ta sẽ xem xét các tính năng của việc sử dụng thư viện hồ sơ gấu trúc bằng cách sử dụng bộ dữ liệu Titanic làm ví dụ.

Phân tích dữ liệu thăm dò bằng cách sử dụng gấu trúc

Tôi quyết định thử nghiệm tính năng lập hồ sơ gấu trúc trên tập dữ liệu Titanic do nó chứa nhiều loại dữ liệu khác nhau và sự hiện diện của các giá trị bị thiếu trong đó. Tôi tin rằng thư viện hồ sơ gấu trúc đặc biệt thú vị trong trường hợp dữ liệu chưa được làm sạch và yêu cầu xử lý thêm tùy thuộc vào đặc điểm của nó. Để thực hiện thành công quá trình xử lý như vậy, bạn cần biết bắt đầu từ đâu và những gì cần chú ý. Đây là lúc khả năng lập hồ sơ gấu trúc phát huy tác dụng.

Đầu tiên, chúng tôi nhập dữ liệu và sử dụng gấu trúc để lấy số liệu thống kê mô tả:

# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np

# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')

# вычисление показателей описательной статистики
df.describe()

Sau khi thực thi đoạn mã này, bạn sẽ nhận được những gì được hiển thị trong hình dưới đây.

Tăng tốc phân tích dữ liệu khám phá bằng thư viện hồ sơ gấu trúc
Thống kê mô tả thu được bằng các công cụ gấu trúc tiêu chuẩn

Mặc dù có rất nhiều thông tin hữu ích ở đây nhưng nó không chứa mọi thứ thú vị cần biết về dữ liệu đang nghiên cứu. Ví dụ, người ta có thể giả định rằng trong một khung dữ liệu, trong một cấu trúc DataFrame, có 891 dòng. Nếu điều này cần được kiểm tra thì cần có một dòng mã khác để xác định kích thước của khung. Mặc dù những tính toán này không đặc biệt tiêu tốn nhiều tài nguyên, nhưng việc lặp lại chúng liên tục chắc chắn sẽ lãng phí thời gian mà có lẽ tốt hơn nên dành để làm sạch dữ liệu.

Phân tích dữ liệu thăm dò bằng cách sử dụng hồ sơ gấu trúc

Bây giờ hãy thực hiện tương tự bằng cách sử dụng hồ sơ gấu trúc:

pandas_profiling.ProfileReport(df)

Việc thực thi dòng mã trên sẽ tạo ra một báo cáo với các chỉ báo phân tích dữ liệu thăm dò. Mã được hiển thị ở trên sẽ xuất dữ liệu được tìm thấy, nhưng bạn có thể làm cho nó xuất ra một tệp HTML mà bạn có thể hiển thị cho ai đó chẳng hạn.

Phần đầu tiên của báo cáo sẽ có phần Tổng quan, cung cấp thông tin cơ bản về dữ liệu (số lượng quan sát, số lượng biến, v.v.). Nó cũng sẽ chứa một danh sách các cảnh báo, thông báo cho người phân tích những điều cần đặc biệt chú ý. Những cảnh báo này có thể cung cấp manh mối về nơi bạn có thể tập trung nỗ lực dọn dẹp dữ liệu của mình.

Tăng tốc phân tích dữ liệu khám phá bằng thư viện hồ sơ gấu trúc
Phần báo cáo tổng quan

Phân tích biến thăm dò

Bên dưới phần Tổng quan của báo cáo, bạn có thể tìm thấy thông tin hữu ích về từng biến. Chúng bao gồm, cùng với những thứ khác, các biểu đồ nhỏ mô tả sự phân bổ của từng biến số.

Tăng tốc phân tích dữ liệu khám phá bằng thư viện hồ sơ gấu trúc
Về biến số tuổi

Như bạn có thể thấy từ ví dụ trước, việc lập hồ sơ gấu trúc cung cấp cho chúng ta một số chỉ báo hữu ích, chẳng hạn như tỷ lệ phần trăm và số lượng giá trị bị thiếu, cũng như các thước đo thống kê mô tả mà chúng ta đã thấy. Bởi vì Age là một biến số, việc trực quan hóa phân bố của nó dưới dạng biểu đồ cho phép chúng ta kết luận rằng chúng ta có phân phối lệch sang phải.

Khi xem xét một biến phân loại, kết quả đầu ra hơi khác so với kết quả tìm thấy cho một biến số.

Tăng tốc phân tích dữ liệu khám phá bằng thư viện hồ sơ gấu trúc
Giới thiệu về biến phân loại Giới tính

Cụ thể, thay vì tìm mức trung bình, tối thiểu và tối đa, thư viện hồ sơ gấu trúc đã tìm thấy số lượng lớp. Bởi vì Sex — một biến nhị phân, các giá trị của nó được biểu thị bằng hai lớp.

Nếu bạn muốn kiểm tra mã như tôi, bạn có thể quan tâm đến cách thư viện hồ sơ gấu trúc tính toán các số liệu này một cách chính xác như thế nào. Tìm hiểu về điều này, vì mã thư viện mở và có sẵn trên GitHub, không quá khó. Vì tôi không phải là người thích sử dụng hộp đen trong các dự án của mình nên tôi đã xem mã nguồn của thư viện. Ví dụ: đây là cơ chế xử lý các biến số, được biểu thị bằng hàm mô tả_số_1d:

def describe_numeric_1d(series, **kwargs):
    """Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series).
    Also create histograms (mini an full) of its distribution.
    Parameters
    ----------
    series : Series
        The variable to describe.
    Returns
    -------
    Series
        The description of the variable as a Series with index being stats keys.
    """
    # Format a number as a percentage. For example 0.25 will be turned to 25%.
    _percentile_format = "{:.0%}"
    stats = dict()
    stats['type'] = base.TYPE_NUM
    stats['mean'] = series.mean()
    stats['std'] = series.std()
    stats['variance'] = series.var()
    stats['min'] = series.min()
    stats['max'] = series.max()
    stats['range'] = stats['max'] - stats['min']
    # To avoid to compute it several times
    _series_no_na = series.dropna()
    for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
        # The dropna() is a workaround for https://github.com/pydata/pandas/issues/13098
        stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)
    stats['iqr'] = stats['75%'] - stats['25%']
    stats['kurtosis'] = series.kurt()
    stats['skewness'] = series.skew()
    stats['sum'] = series.sum()
    stats['mad'] = series.mad()
    stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN
    stats['n_zeros'] = (len(series) - np.count_nonzero(series))
    stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)
    # Histograms
    stats['histogram'] = histogram(series, **kwargs)
    stats['mini_histogram'] = mini_histogram(series, **kwargs)
    return pd.Series(stats, name=series.name)

Mặc dù đoạn mã này có vẻ khá lớn và phức tạp nhưng thực ra nó rất đơn giản để hiểu. Vấn đề là trong mã nguồn của thư viện có một hàm xác định các loại biến. Nếu thư viện gặp phải một biến số, hàm trên sẽ tìm thấy các số liệu mà chúng ta đang xem xét. Hàm này sử dụng các thao tác pandas tiêu chuẩn để làm việc với các đối tượng thuộc loại Series, giống series.mean(). Kết quả tính toán được lưu trữ trong từ điển stats. Biểu đồ được tạo bằng cách sử dụng phiên bản phù hợp của hàm matplotlib.pyplot.hist. Sự thích ứng nhằm mục đích đảm bảo rằng chức năng có thể hoạt động với các loại tập dữ liệu khác nhau.

Các chỉ số tương quan và dữ liệu mẫu được nghiên cứu

Sau khi có kết quả phân tích các biến, hồ sơ gấu trúc, trong phần Tương quan, sẽ hiển thị ma trận tương quan Pearson và Spearman.

Tăng tốc phân tích dữ liệu khám phá bằng thư viện hồ sơ gấu trúc
Ma trận tương quan Pearson

Nếu cần, bạn có thể, trong dòng mã kích hoạt tạo báo cáo, đặt chỉ báo về các giá trị ngưỡng được sử dụng khi tính toán mối tương quan. Bằng cách này, bạn có thể chỉ định mức độ tương quan nào được coi là quan trọng đối với phân tích của bạn.

Cuối cùng, báo cáo hồ sơ gấu trúc, trong phần Mẫu, hiển thị, làm ví dụ, một phần dữ liệu được lấy từ đầu tập dữ liệu. Cách tiếp cận này có thể dẫn đến những bất ngờ khó chịu vì một vài quan sát đầu tiên có thể đại diện cho một mẫu không phản ánh các đặc điểm của toàn bộ tập dữ liệu.

Tăng tốc phân tích dữ liệu khám phá bằng thư viện hồ sơ gấu trúc
Phần chứa dữ liệu mẫu đang nghiên cứu

Do đó, tôi khuyên bạn không nên chú ý đến phần cuối cùng này. Thay vào đó, tốt hơn là sử dụng lệnh df.sample(5), sẽ chọn ngẫu nhiên 5 quan sát từ tập dữ liệu.

Kết quả

Tóm lại, thư viện hồ sơ gấu trúc cung cấp cho nhà phân tích một số khả năng hữu ích sẽ hữu ích trong trường hợp bạn cần nhanh chóng có được ý tưởng sơ bộ về dữ liệu hoặc chuyển báo cáo phân tích tình báo cho ai đó. Đồng thời, công việc thực sự với dữ liệu, có tính đến các tính năng của nó, được thực hiện theo cách thủ công mà không cần sử dụng hồ sơ gấu trúc.

Nếu bạn muốn xem tất cả các phân tích dữ liệu thông minh trông như thế nào trong một sổ ghi chép của Jupyter, hãy xem này dự án của tôi được tạo bằng nbviewer. Và trong Điều này Bạn có thể tìm thấy mã tương ứng trong kho GitHub.

Gởi bạn đọc! Bạn bắt đầu phân tích tập dữ liệu mới từ đâu?

Tăng tốc phân tích dữ liệu khám phá bằng thư viện hồ sơ gấu trúc

Nguồn: www.habr.com

Thêm một lời nhận xét