Yangi ma'lumotlar to'plami bilan ishlashni boshlashda birinchi qadam uni tushunishdir. Buni amalga oshirish uchun, masalan, o'zgaruvchilar tomonidan qabul qilingan qiymatlar diapazonini, ularning turlarini, shuningdek etishmayotgan qiymatlar sonini bilib olishingiz kerak.
Pandalar kutubxonasi bizga tadqiqot ma'lumotlarini tahlil qilish (EDA) uchun juda ko'p foydali vositalarni taqdim etadi. Lekin ularni ishlatishdan oldin odatda df.describe() kabi umumiy funktsiyalardan boshlashingiz kerak. Ammo shuni ta'kidlash kerakki, bunday funktsiyalar tomonidan taqdim etilgan imkoniyatlar cheklangan va EDAni amalga oshirishda har qanday ma'lumotlar to'plami bilan ishlashning dastlabki bosqichlari ko'pincha bir-biriga juda o'xshash.
Bugun e'lon qilayotgan materialimiz muallifi takroriy harakatlarni amalga oshirish tarafdori emasligini aytadi. Natijada, qidiruv ma'lumotlarini tez va samarali tahlil qilish uchun vositalarni qidirib, u kutubxonani topdi
Bu erda biz misol sifatida Titanik ma'lumotlar to'plamidan foydalangan holda pandalarni profillash kutubxonasidan foydalanish xususiyatlarini ko'rib chiqamiz.
Pandalardan foydalangan holda ma'lumotlarni tahlil qilish
Men Titanik ma'lumotlar to'plamida turli xil ma'lumotlar va undagi etishmayotgan qiymatlar mavjudligi sababli pandalar profilini sinab ko'rishga qaror qildim. Menimcha, pandalar-profillash kutubxonasi, ayniqsa, ma'lumotlar hali tozalanmagan va uning xususiyatlariga qarab qo'shimcha ishlov berishni talab qiladigan holatlarda qiziqarli. Bunday qayta ishlashni muvaffaqiyatli amalga oshirish uchun siz qaerdan boshlashingiz va nimaga e'tibor berishingiz kerakligini bilishingiz kerak. Bu erda pandalar profilini yaratish qobiliyati yordam beradi.
Birinchidan, biz ma'lumotlarni import qilamiz va tavsiflovchi statistik ma'lumotlarni olish uchun pandalardan foydalanamiz:
# ΠΈΠΌΠΏΠΎΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
import pandas as pd
import pandas_profiling
import numpy as np
# ΠΈΠΌΠΏΠΎΡΡ Π΄Π°Π½Π½ΡΡ
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')
# Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ
df.describe()
Ushbu kod qismini bajarganingizdan so'ng, siz quyidagi rasmda ko'rsatilgan narsani olasiz.
Standart pandalar vositalari yordamida olingan tavsiflovchi statistika
Bu erda juda ko'p foydali ma'lumotlar mavjud bo'lsa-da, u o'rganilayotgan ma'lumotlar haqida bilish qiziq bo'lgan hamma narsani o'z ichiga olmaydi. Masalan, ma'lumotlar ramkasida, strukturada deb taxmin qilish mumkin DataFrame
, 891 qator bor. Agar buni tekshirish kerak bo'lsa, ramka o'lchamini aniqlash uchun yana bir qator kod talab qilinadi. Ushbu hisob-kitoblar ayniqsa resurs talab qilmasa ham, ularni har doim takrorlash vaqtni behuda sarflashga olib keladi, bu ma'lumotlarni tozalashga sarflanishi mumkin.
Pandas-profiling yordamida ma'lumotlarni kashfiyot tahlili
Endi pandas-profiling yordamida xuddi shunday qilamiz:
pandas_profiling.ProfileReport(df)
Yuqoridagi kod satrini bajarish tadqiqot ma'lumotlarini tahlil qilish ko'rsatkichlari bilan hisobot yaratadi. Yuqorida ko'rsatilgan kod topilgan ma'lumotlarni chiqaradi, lekin siz uni HTML faylini chiqarishingiz mumkin, masalan, kimgadir ko'rsatishingiz mumkin.
Hisobotning birinchi qismida ma'lumotlar (kuzatishlar soni, o'zgaruvchilar soni va boshqalar) haqida asosiy ma'lumotlarni ko'rsatadigan Umumiy ko'rinish bo'limi mavjud. Shuningdek, u ogohlantirishlar ro'yxatini o'z ichiga oladi, tahlilchiga alohida e'tibor berish kerak bo'lgan narsalar haqida xabar beradi. Ushbu ogohlantirishlar ma'lumotlarni tozalash harakatlaringizni qayerga qaratishingiz mumkinligi haqida maslahatlar berishi mumkin.
Umumiy hisobot bo'limi
Izlanishli o'zgaruvchan tahlil
Hisobotning Umumiy ko'rinish bo'limi ostida har bir o'zgaruvchi haqida foydali ma'lumotlarni topishingiz mumkin. Ular, jumladan, har bir o'zgaruvchining taqsimlanishini tavsiflovchi kichik diagrammalarni o'z ichiga oladi.
Yosh sonli o'zgaruvchisi haqida
Oldingi misoldan ko'rinib turibdiki, pandalarni profillash bizga etishmayotgan qiymatlarning foizi va soni, shuningdek, biz allaqachon ko'rgan tavsiflovchi statistik ko'rsatkichlar kabi bir nechta foydali ko'rsatkichlarni beradi. Chunki Age
raqamli o'zgaruvchidir, uning gistogramma ko'rinishida taqsimlanishini vizualizatsiya qilish bizda o'ngga qiyshaygan taqsimotga ega degan xulosaga kelishimizga imkon beradi.
Kategorik o'zgaruvchini ko'rib chiqishda, chiqish natijalari raqamli o'zgaruvchi uchun topilganidan bir oz farq qiladi.
Jinsiy kategoriya o'zgaruvchisi haqida
Ya'ni, o'rtacha, minimal va maksimalni topish o'rniga, pandalarni profillash kutubxonasi sinflar sonini topdi. Chunki Sex
- ikkilik o'zgaruvchi, uning qiymatlari ikkita sinf bilan ifodalanadi.
Agar siz ham men kabi kodni tekshirishni yoqtirmoqchi bo'lsangiz, pandalar-profillash kutubxonasi ushbu ko'rsatkichlarni qanday aniq hisoblashi sizni qiziqtirishi mumkin. Kutubxona kodi ochiq va GitHub-da mavjud ekanligini hisobga olsak, bu haqda bilish unchalik qiyin emas. Men loyihalarimda qora qutilardan foydalanishni yaxshi ko'rmaganim uchun kutubxonaning manba kodini ko'rib chiqdim. Masalan, raqamli o'zgaruvchilarni qayta ishlash mexanizmi funksiya bilan ifodalangan shunday ko'rinadi
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)
Ushbu kod qismi juda katta va murakkab bo'lib tuyulishi mumkin bo'lsa-da, uni tushunish juda oddiy. Gap shundaki, kutubxonaning dastlabki kodida o'zgaruvchilarning turlarini aniqlaydigan funksiya mavjud. Agar kutubxona raqamli o'zgaruvchiga duch kelganligi aniqlansa, yuqoridagi funksiya biz ko'rib chiqayotgan ko'rsatkichlarni topadi. Bu funksiya turdagi ob'ektlar bilan ishlash uchun standart panda operatsiyalaridan foydalanadi Series
, kabi series.mean()
. Hisoblash natijalari lug'atda saqlanadi stats
. Histogrammalar funksiyaning moslashtirilgan versiyasi yordamida yaratiladi matplotlib.pyplot.hist
. Moslashuv funksiyaning har xil turdagi ma'lumotlar to'plamlari bilan ishlashini ta'minlashga qaratilgan.
Korrelyatsiya ko'rsatkichlari va o'rganilgan namunaviy ma'lumotlar
O'zgaruvchilarni tahlil qilish natijalaridan so'ng, korrelyatsiyalar bo'limida pandas-profiling, Pearson va Spearman korrelyatsiya matritsalarini ko'rsatadi.
Pearson korrelyatsiya matritsasi
Agar kerak bo'lsa, siz hisobotni yaratishni qo'zg'atadigan kod qatorida korrelyatsiyani hisoblashda foydalaniladigan chegara qiymatlari ko'rsatkichlarini o'rnatishingiz mumkin. Buni amalga oshirish orqali siz tahlilingiz uchun qanday korrelyatsiya kuchi muhim deb hisoblanishini belgilashingiz mumkin.
Nihoyat, Namuna bo'limida pandalarni profillash hisoboti, misol sifatida, ma'lumotlar to'plamining boshidan olingan ma'lumotlar qismini ko'rsatadi. Bunday yondashuv yoqimsiz kutilmagan hodisalarga olib kelishi mumkin, chunki dastlabki bir nechta kuzatishlar butun ma'lumotlar to'plamining xususiyatlarini aks ettirmaydigan namunani ko'rsatishi mumkin.
O'rganilayotgan namuna ma'lumotlarini o'z ichiga olgan bo'lim
Natijada, men ushbu oxirgi qismga e'tibor berishni tavsiya etmayman. Buning o'rniga, buyruqni ishlatish yaxshiroqdir df.sample(5)
, bu ma'lumotlar to'plamidan tasodifiy 5 ta kuzatishni tanlaydi.
natijalar
Xulosa qilib aytadigan bo'lsak, pandalarni profillash kutubxonasi tahlilchiga ma'lumotlar haqida tezda taxminiy tasavvurga ega bo'lishingiz yoki kimgadir razvedka tahlili hisobotini topshirishingiz kerak bo'lgan hollarda foydali bo'ladigan ba'zi foydali imkoniyatlarni beradi. Shu bilan birga, ma'lumotlar bilan haqiqiy ish, uning xususiyatlarini hisobga olgan holda, panda-profillashdan foydalanmasdan, qo'lda amalga oshiriladi.
Agar siz bitta Jupyter daftarida barcha razvedka ma'lumotlarini tahlil qilish qanday ko'rinishini ko'rib chiqmoqchi bo'lsangiz,
Hurmatli o'quvchilar! Yangi ma'lumotlar to'plamini tahlil qilishni qayerdan boshlaysiz?
Manba: www.habr.com