Pandas-profiling library ашиглан хайгуулын мэдээллийн шинжилгээг хурдасгах

Шинэ өгөгдлийн багцтай ажиллаж эхлэх эхний алхам бол үүнийг ойлгох явдал юм. Үүнийг хийхийн тулд жишээлбэл, хувьсагчдын хүлээн зөвшөөрөгдсөн утгын хүрээ, тэдгээрийн төрлийг олж мэдэх, мөн дутуу утгын тоог олж мэдэх хэрэгтэй.

Панда номын сан нь хайгуулын өгөгдлийн шинжилгээ (EDA) хийх олон хэрэгтэй хэрэгслээр хангадаг. Гэхдээ та тэдгээрийг ашиглахаасаа өмнө ихэвчлэн df.describe() гэх мэт ерөнхий функцүүдээс эхлэх хэрэгтэй. Гэсэн хэдий ч ийм функцээр хангагдсан боломжууд хязгаарлагдмал бөгөөд EDA-г гүйцэтгэхдээ аливаа өгөгдлийн багцтай ажиллах эхний үе шатууд нь ихэвчлэн хоорондоо маш төстэй байдаг гэдгийг тэмдэглэх нь зүйтэй.

Pandas-profiling library ашиглан хайгуулын мэдээллийн шинжилгээг хурдасгах

Өнөөдөр бидний нийтэлж буй материалын зохиогч тэрээр давтагдах үйлдэл хийх дуртай биш гэж хэлсэн. Үүний үр дүнд хайгуулын өгөгдлийн шинжилгээг хурдан бөгөөд үр дүнтэй хийх хэрэгслийг хайж олохын тулд тэрээр номын санг олсон панда-профиль хийх. Ажлын үр дүн нь тодорхой бие даасан үзүүлэлтүүдийн хэлбэрээр биш, харин нягт нямбай ажиллаж эхлэхээсээ өмнө мэдэх шаардлагатай дүн шинжилгээ хийсэн мэдээллийн талаархи ихэнх мэдээллийг агуулсан нэлээд нарийвчилсан HTML тайлан хэлбэрээр илэрхийлэгддэг.

Энд бид жишээ болгон Титаник өгөгдлийн багцыг ашиглан панда-профайл номын санг ашиглах онцлогуудыг авч үзэх болно.

Панда ашиглан хайгуулын мэдээллийн дүн шинжилгээ

Би Титаник өгөгдлийн багцад янз бүрийн төрлийн өгөгдөл агуулагдаж, түүнд дутуу утгууд байгаа тул панда-профайл хийх туршилт хийхээр шийдсэн. Пандагийн профайлын номын сан нь өгөгдөл нь хараахан цэвэрлэгдээгүй байгаа бөгөөд шинж чанараас нь хамааран цаашдын боловсруулалт шаарддаг тохиолдолд сонирхолтой байдаг гэж би үзэж байна. Ийм боловсруулалтыг амжилттай гүйцэтгэхийн тулд хаанаас эхлэх, юуг анхаарахаа мэдэх хэрэгтэй. Эндээс панда-г профайл хийх чадвар хэрэгтэй болно.

Нэгдүгээрт, бид өгөгдлийг импортолж, тайлбарласан статистикийг олж авахын тулд панда ашигладаг.

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

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

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

Энэ кодыг ажиллуулсны дараа та дараах зурагт үзүүлсэн зүйлийг авах болно.

Pandas-profiling library ашиглан хайгуулын мэдээллийн шинжилгээг хурдасгах
Стандарт панда хэрэгслийг ашиглан олж авсан тодорхойлолтын статистик

Хэдийгээр энд маш их хэрэгтэй мэдээлэл байгаа ч судалж буй өгөгдлийн талаар мэдэхэд сонирхолтой байх бүх зүйлийг агуулаагүй болно. Жишээлбэл, өгөгдлийн хүрээ, бүтцэд гэж таамаглаж болно DataFrame, 891 мөр байна. Хэрэв үүнийг шалгах шаардлагатай бол хүрээний хэмжээг тодорхойлохын тулд кодын өөр мөр шаардлагатай. Хэдийгээр эдгээр тооцоолол нь маш их нөөц шаарддаггүй ч тэдгээрийг байнга давтах нь өгөгдлийг цэвэрлэхэд илүү үр дүнтэй байх цагийг дэмий үрэх болно.

Pandas-profiling ашиглан хайгуулын мэдээллийн шинжилгээ

Одоо pandas-profiling ашиглан ижил зүйлийг хийцгээе:

pandas_profiling.ProfileReport(df)

Дээрх кодын мөрийг гүйцэтгэснээр хайгуулын өгөгдлийн шинжилгээний үзүүлэлт бүхий тайлан гарна. Дээр үзүүлсэн код нь олсон өгөгдлийг гаргах боловч та үүнийг HTML файл болгож, жишээ нь хэн нэгэнд үзүүлж болно.

Тайлангийн эхний хэсэг нь өгөгдлийн талаархи үндсэн мэдээллийг (ажиглалтын тоо, хувьсагчийн тоо гэх мэт) агуулсан Тойм хэсгийг агуулна. Энэ нь мөн анхааруулах жагсаалтыг агуулж, шинжээчид онцгой анхаарах зүйлсийн талаар мэдэгдэх болно. Эдгээр сэрэмжлүүлэг нь таны өгөгдөл цэвэрлэх хүчин чармайлтаа хаана төвлөрүүлэх талаар мэдээлэл өгөх боломжтой.

Pandas-profiling library ашиглан хайгуулын мэдээллийн шинжилгээг хурдасгах
Тойм тайлангийн хэсэг

Хайгуулын хувьсагчийн шинжилгээ

Тайлангийн тойм хэсгийн доор та хувьсагч бүрийн талаар хэрэгтэй мэдээллийг олж авах боломжтой. Тэдгээрийн дотор хувьсагч бүрийн тархалтыг тодорхойлсон жижиг графикууд орно.

Pandas-profiling library ашиглан хайгуулын мэдээллийн шинжилгээг хурдасгах
Насны тоон хувьсагчийн тухай

Өмнөх жишээнээс харахад пандагийн профайл нь алга болсон утгуудын хувь хэмжээ, тоо зэрэг хэд хэдэн ашигтай үзүүлэлтүүдийг, мөн бидний өмнө нь үзсэн статистикийн тодорхойлолтыг өгдөг. Учир нь Age нь тоон хувьсагч бөгөөд түүний тархалтыг гистограм хэлбэрээр дүрслэх нь бидэнд баруун тийш хазайсан тархалт байна гэж дүгнэх боломжийг олгодог.

Категорийн хувьсагчийг авч үзэхэд гаралтын үр дүн нь тоон хувьсагчийн олдсон үр дүнгээс арай өөр байна.

Pandas-profiling library ашиглан хайгуулын мэдээллийн шинжилгээг хурдасгах
Сексийн категори хувьсагчийн тухай

Тухайлбал, пандагийн профайлын номын сан дундаж, доод, дээд хэмжээг олохын оронд ангийн тоог олжээ. Учир нь Sex - хоёртын хувьсагч, түүний утгыг хоёр ангиар төлөөлдөг.

Хэрэв та над шиг кодыг шалгах дуртай бол панда-н профайлын номын сан эдгээр хэмжигдэхүүнийг яг хэрхэн тооцдог болохыг сонирхож магадгүй юм. Номын сангийн код нээлттэй бөгөөд GitHub дээр байдаг тул энэ талаар олж мэдэх нь тийм ч хэцүү биш юм. Би төсөлдөө хар хайрцгийг ашиглахыг тийм ч их дэмждэггүй тул номын сангийн эх кодыг харлаа. Жишээлбэл, функцээр дүрслэгдсэн тоон хувьсагчдыг боловсруулах механизм нь иймэрхүү харагдаж байна дүрслэх_тоон_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 нь Корреляци хэсэгт Пирсон ба Спирман корреляцийн матрицуудыг харуулах болно.

Pandas-profiling library ашиглан хайгуулын мэдээллийн шинжилгээг хурдасгах
Пирсоны корреляцийн матриц

Шаардлагатай бол тайланг гаргахад хүргэдэг кодын мөрөнд корреляцийг тооцоолоход ашигласан босго утгын үзүүлэлтүүдийг тохируулж болно. Үүнийг хийснээр та өөрийн шинжилгээнд ямар хамаарлын хүч чухал болохыг тодорхойлж болно.

Эцэст нь, Панда-н профайлын тайлангийн жишээ хэсэгт өгөгдлийн багцын эхнээс авсан өгөгдлийн хэсгийг харуулдаг. Эхний хэдэн ажиглалт нь бүх өгөгдлийн багцын шинж чанарыг тусгаагүй түүврийг төлөөлж болох тул энэ арга нь таагүй гэнэтийн зүйлд хүргэж болзошгүй юм.

Pandas-profiling library ашиглан хайгуулын мэдээллийн шинжилгээг хурдасгах
Судалж буй түүвэр өгөгдлийг агуулсан хэсэг

Үүний үр дүнд би энэ сүүлчийн хэсэгт анхаарлаа хандуулахыг зөвлөдөггүй. Үүний оронд командыг ашиглах нь дээр df.sample(5), энэ нь өгөгдлийн багцаас 5 ажиглалтыг санамсаргүй байдлаар сонгох болно.

Үр дүн

Дүгнэж хэлэхэд панда-н профайлын номын сан нь шинжээчдэд өгөгдлийн талаар хурдан ойлголт авах эсвэл тагнуулын шинжилгээний тайланг хэн нэгэнд дамжуулах шаардлагатай тохиолдолд хэрэг болох зарим ашигтай чадварыг өгдөг. Үүний зэрэгцээ, өгөгдөлтэй бодит ажил, түүний онцлогийг харгалзан, панда профайлыг ашиглахгүйгээр гараар хийдэг.

Хэрэв та нэг Jupyter дэвтэрт бүх тагнуулын мэдээллийн дүн шинжилгээ хэрхэн харагддагийг харахыг хүсвэл дараахыг хараарай. энэ нь Миний төсөл nbviewer ашиглан бүтээгдсэн. Тэгээд дотор энэ нь Та тохирох кодыг GitHub репозитороос олох боломжтой.

Эрхэм уншигчид! Та шинэ өгөгдлийн багцад дүн шинжилгээ хийх ажлыг хаанаас эхлэх вэ?

Pandas-profiling library ашиглан хайгуулын мэдээллийн шинжилгээг хурдасгах

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх