تسریع تجزیه و تحلیل داده های اکتشافی با استفاده از کتابخانه پروفایل پاندا

اولین قدم هنگام شروع کار با یک مجموعه داده جدید، درک آن است. برای انجام این کار، به عنوان مثال، باید محدوده مقادیر پذیرفته شده توسط متغیرها، انواع آنها و همچنین در مورد تعداد مقادیر از دست رفته را بیابید.

کتابخانه پانداها ابزارهای مفید بسیاری را برای انجام تجزیه و تحلیل داده های اکتشافی (EDA) در اختیار ما قرار می دهد. اما قبل از استفاده از آنها، معمولاً باید با توابع عمومی تری مانند df.describe() شروع کنید. با این حال، باید توجه داشت که قابلیت های ارائه شده توسط چنین توابعی محدود است و مراحل اولیه کار با هر مجموعه داده در هنگام انجام EDA اغلب بسیار شبیه به یکدیگر است.

تسریع تجزیه و تحلیل داده های اکتشافی با استفاده از کتابخانه پروفایل پاندا

نویسنده مطالبی که امروز منتشر می کنیم می گوید که طرفدار انجام کارهای تکراری نیست. در نتیجه، در جستجوی ابزارهایی برای انجام سریع و کارآمد تجزیه و تحلیل داده های اکتشافی، کتابخانه را پیدا کرد پروفایل پانداها. نتایج کار آن نه در قالب شاخص های فردی خاص، بلکه در قالب یک گزارش نسبتاً دقیق HTML حاوی بیشتر اطلاعات در مورد داده های تجزیه و تحلیل شده بیان می شود که ممکن است قبل از شروع کار دقیق تر با آن نیاز به دانستن آنها داشته باشید.

در اینجا ما به ویژگی های استفاده از کتابخانه پروفایل پانداها با استفاده از مجموعه داده تایتانیک به عنوان مثال نگاه خواهیم کرد.

تجزیه و تحلیل داده های اکتشافی با استفاده از پانداها

به دلیل انواع مختلف داده ها و وجود مقادیر گمشده در آن، تصمیم گرفتم با نمایه پانداها روی مجموعه داده تایتانیک آزمایش کنم. من معتقدم که کتابخانه نمایه پانداها به ویژه در مواردی جالب است که داده ها هنوز پاک نشده اند و بسته به ویژگی های آن نیاز به پردازش بیشتری دارند. برای انجام موفقیت آمیز چنین پردازشی، باید بدانید که از کجا شروع کنید و به چه مواردی توجه کنید. اینجاست که قابلیت‌های نمایه کردن پانداها به کار می‌آیند.

ابتدا داده ها را وارد می کنیم و از پانداها برای به دست آوردن آمار توصیفی استفاده می کنیم:

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

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

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

پس از اجرای این قطعه کد، آنچه در شکل زیر نشان داده شده است را دریافت خواهید کرد.

تسریع تجزیه و تحلیل داده های اکتشافی با استفاده از کتابخانه پروفایل پاندا
آمار توصیفی به دست آمده با استفاده از ابزار استاندارد پاندا

اگرچه اطلاعات مفید زیادی در اینجا وجود دارد، اما حاوی همه چیزهایی نیست که دانستن آن در مورد داده های مورد مطالعه جالب باشد. برای مثال، ممکن است فرض کنیم که در یک چارچوب داده، در یک ساختار DataFrame، 891 ردیف وجود دارد. اگر لازم است این مورد بررسی شود، برای تعیین اندازه فریم به خط دیگری از کد نیاز است. در حالی که این محاسبات به ویژه به منابع زیادی نیاز ندارند، تکرار مداوم آنها باعث هدر رفتن زمان می شود که احتمالاً بهتر است برای تمیز کردن داده ها صرف شود.

تجزیه و تحلیل داده های اکتشافی با استفاده از پانداها

حالا بیایید همین کار را با استفاده از pandas-profiling انجام دهیم:

pandas_profiling.ProfileReport(df)

اجرای خط کد بالا، گزارشی با شاخص های تجزیه و تحلیل داده های اکتشافی ایجاد می کند. کد نشان داده شده در بالا داده های یافت شده را خروجی می دهد، اما می توانید آن را به عنوان یک فایل HTML تبدیل کنید که می توانید به عنوان مثال به کسی نشان دهید.

بخش اول گزارش شامل یک بخش نمای کلی است که اطلاعات اولیه در مورد داده ها (تعداد مشاهدات، تعداد متغیرها و غیره) را ارائه می دهد. همچنین حاوی لیستی از هشدارها است که تحلیلگر را از مواردی که باید به آنها توجه ویژه داشته باشد مطلع می کند. این هشدارها می‌توانند سرنخ‌هایی را در مورد اینکه کجا می‌توانید تلاش‌های پاکسازی داده‌های خود را متمرکز کنید، ارائه دهد.

تسریع تجزیه و تحلیل داده های اکتشافی با استفاده از کتابخانه پروفایل پاندا
بخش گزارش اجمالی

تجزیه و تحلیل متغیرهای اکتشافی

در زیر بخش نمای کلی گزارش می توانید اطلاعات مفیدی در مورد هر متغیر بیابید. آنها شامل نمودارهای کوچکی هستند که توزیع هر متغیر را توصیف می کنند.

تسریع تجزیه و تحلیل داده های اکتشافی با استفاده از کتابخانه پروفایل پاندا
درباره متغیر عددی سن

همانطور که از مثال قبلی می بینید، پانداها چندین شاخص مفید مانند درصد و تعداد مقادیر از دست رفته و همچنین معیارهای آمار توصیفی که قبلاً دیده ایم به ما می دهد. زیرا Age یک متغیر عددی است، تجسم توزیع آن در قالب یک هیستوگرام به ما امکان می دهد نتیجه بگیریم که توزیعی به سمت راست مایل است.

هنگام در نظر گرفتن یک متغیر طبقه بندی، نتایج خروجی کمی متفاوت از نتایج بدست آمده برای یک متغیر عددی است.

تسریع تجزیه و تحلیل داده های اکتشافی با استفاده از کتابخانه پروفایل پاندا
درباره متغیر طبقه بندی جنسیت

یعنی به جای یافتن میانگین، حداقل و حداکثر، کتابخانه نمایه پانداها تعداد کلاس ها را پیدا کرد. زیرا Sex - یک متغیر باینری، مقادیر آن توسط دو کلاس نمایش داده می شود.

اگر دوست دارید مانند من کد را بررسی کنید، ممکن است برایتان جالب باشد که چگونه کتابخانه پروفایل پانداها این معیارها را محاسبه می کند. با توجه به باز بودن و در دسترس بودن کد کتابخانه در GitHub، اطلاع از این موضوع چندان دشوار نیست. از آنجایی که من علاقه زیادی به استفاده از جعبه سیاه در پروژه های خود ندارم، نگاهی به کد منبع کتابخانه انداختم. به عنوان مثال، مکانیزم پردازش متغیرهای عددی به این شکل است که توسط تابع نشان داده می شود describe_numeric_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)

اگرچه ممکن است این قطعه کد بسیار بزرگ و پیچیده به نظر برسد، اما درک آن در واقع بسیار ساده است. نکته این است که در کد منبع کتابخانه تابعی وجود دارد که انواع متغیرها را تعیین می کند. اگر معلوم شود که کتابخانه با یک متغیر عددی مواجه شده است، تابع بالا معیارهایی را که ما در نظر داشتیم پیدا می کند. این تابع از عملیات استاندارد پانداها برای کار با اشیاء از نوع استفاده می کند Series، پسندیدن series.mean(). نتایج محاسبات در یک فرهنگ لغت ذخیره می شود stats. هیستوگرام ها با استفاده از یک نسخه اقتباس شده از تابع تولید می شوند matplotlib.pyplot.hist. هدف تطبیق حصول اطمینان از این است که تابع می تواند با انواع مختلف مجموعه داده کار کند.

شاخص های همبستگی و داده های نمونه مورد مطالعه

پس از نتایج تجزیه و تحلیل متغیرها، pandas-profiling در قسمت Correlations، ماتریس های همبستگی پیرسون و اسپیرمن را نمایش می دهد.

تسریع تجزیه و تحلیل داده های اکتشافی با استفاده از کتابخانه پروفایل پاندا
ماتریس همبستگی پیرسون

در صورت لزوم، می توانید در خط کدی که تولید گزارش را آغاز می کند، شاخص های مقادیر آستانه مورد استفاده در هنگام محاسبه همبستگی را تنظیم کنید. با انجام این کار، می توانید مشخص کنید که چه قدرت همبستگی برای تحلیل شما مهم در نظر گرفته می شود.

در نهایت، گزارش pandas-profiling، در بخش Sample، به عنوان مثال، بخشی از داده های گرفته شده از ابتدای مجموعه داده را نمایش می دهد. این رویکرد می تواند به شگفتی های ناخوشایند منجر شود، زیرا چند مشاهدات اول ممکن است نمونه ای را نشان دهد که ویژگی های کل مجموعه داده را منعکس نمی کند.

تسریع تجزیه و تحلیل داده های اکتشافی با استفاده از کتابخانه پروفایل پاندا
بخش حاوی داده های نمونه مورد مطالعه است

در نتیجه، توجه به این بخش آخر را توصیه نمی کنم. در عوض بهتر است از دستور استفاده کنید df.sample(5)، که به طور تصادفی 5 مشاهدات را از مجموعه داده انتخاب می کند.

نمایش نتایج: از

به طور خلاصه، کتابخانه نمایه پانداها قابلیت‌های مفیدی را در اختیار تحلیلگر قرار می‌دهد که در مواردی که نیاز دارید به سرعت ایده‌ای تقریبی از داده‌ها به دست آورید یا گزارش تجزیه و تحلیل اطلاعاتی را به کسی منتقل کنید، مفید خواهد بود. در همان زمان، کار واقعی با داده ها، با در نظر گرفتن ویژگی های آن، بدون استفاده از پروفایل پاندا، به صورت دستی انجام می شود.

اگر می خواهید نگاهی بیاندازید به اینکه تمام تجزیه و تحلیل داده های هوش در یک نوت بوک Jupyter چگونه است، نگاهی به این پروژه من با استفاده از nbviewer ایجاد شد. و در این می توانید کد مربوطه را در مخازن GitHub پیدا کنید.

خوانندگان عزیز! تجزیه و تحلیل مجموعه داده های جدید را از کجا شروع می کنید؟

تسریع تجزیه و تحلیل داده های اکتشافی با استفاده از کتابخانه پروفایل پاندا

منبع: www.habr.com

اضافه کردن نظر