پانداز، اسب دیتا‌ آنالیست‌ها (قسمت اول)

دوستان به اولین سری از رموز پانداز، که یکی از کتابخونه‌های قدرتمند و اپن‌سورس در حوزه علوم داده و برای زبان پایتون هستش، خوش اومدید. توی این سری‌‌ها از ساده‌ترین تکنیک‌ها شروع می‌کنیم و به مرور پیازداغشو زیاد می‌کنیم.امیدوارم که نکات جدیدی برای شما عزیزان در این‌جا وجود داشته باشه و بتونه زندگی رو براتون ساده‌تر کنه :'(نکته مهم :‌ در این وبلاگ‌ها هیچ اثری از خروجی‌ کدها نیست!!! و در واقع بهتره خودتون برید کدها رو بزنید و خروجی رو ببینید و تعقل و اندیشه کنید. با تشکر :)خب قبل از هر چیزی ما این کتابخونه رو در ادیتور یا هر چیز دیگه‌ای که داریم، با استفاده از دستور زیر وارد می‌کنیم :import pandas as pd بعدش برای راحتی کار، یدونه دیتاست کوچولو موچولو می‌سازیم و کار رو با اون پیش می‌بریم :countries = pd.DataFrame({'country': ['United States', 'The Netherlands', 'Spain', 'Mexico', 'Australia'],'capital': ['Washington D.C.', 'Amsterdam', 'Madrid', 'Mexico City', 'Canberra'],'continent': ['North America', 'Europe', 'Europe', 'North America', 'Australia'],'language': ['English', 'Dutch', 'Spanish', 'Spanish', 'English']})همین اول اجازه بدین که یک نکته کوچیک رو راجبه توابع پانداز بگم. یکی از اشتباهاتی که من در اوایل کار با این کتابخونه داشتم راجبه آرگومان inplace = True بود که در فراخوانی بعضی از توابع کتابخونه‌ی پانداز، باید اونو دیده باشین. مقدار دیفالت این متغیر، False هستش. این آرگومان مشخص میکنه که آیا می‌خوایم تغییرات روی دیتافریم اصلی اعمال بشه یا اینکه یک کپی از دیتافریم ایجاد کنیم و تغییرات رو در دیتافریم جدید اعمال کنیم و اونو به یک متغیر جدید نسبت بدیم. در واقع وقتی که inplace = True رو داریم، یعنی تغییرات در دیتافریم اصلی اعمال میشه و این تابع هیچ خروجی‌ای رو دیگه برنمی‌گردونه. اما اگر Inplace = False باشه یعنی اینکه تابع مورد نظر بروی یک کپی از دیتافریم اعمال میشه، و دیتافریم جدید رو return میکنه که باید اون رو به یک متغیر انتساب بدیم.اما نکاتی که در این سری بررسی می‌کنیم : ۱. انتخاب یک زیردیتافریم از دیتافریم country ‌:با استفاده از عملگر loc می‌تونیم یک زیرمجموعه از ردیف‌ها و ستون‌ها رو بر پایه‌ی شماره‌های ردیف(ایندکس‌ها) و نام‌های ستون‌ها انتخاب کنیم. که چند مثال استفاده از این عملگر رو در زیر می‌بینیم :countries.loc[:, 'country':'continent']countries.loc[0:2, 'country':'continent']countries.loc[[0, 4], ['country', 'language']]۲. فیلتر کردن یا انتخاب یک یا چند دسته از دیتافریم:فرض کنید که ما فقط داده‌های مربوط به یک ستون یا چند ستون از دیتافریم رو می‌خوایم. برای انتخاب یک دسته(ستون)، ما از عملگر == استفاده می‌کنیم و برای انتخاب چندین دسته(ستون) از تابع isin استفاده خواهیم کرد. countries[countries.continent == 'Europe']countries[countries.language.isin(['Dutch', 'English'])]۳. فیلتر کردن یا حذف یک یا چند دسته از دیتافریم :‌در تکنیک قبلی، ما مستقیما اسامی ستون‌هایی که می‌خواستیم رو می‌نوشتیم. ولی اینجا ستون‌هایی از دیتافریم رو که نمی‌خوایم در دیتافریم مورد نیاز ما باشن، رو می‌نویسیم. این کار رو با استفاده از عملگر متمم یا ~ انجام می‌دیم. countries[~countries.continent.isin(['Europe'])]countries[~countries.continent.isin(['Europe'])]۴. تغییر نام ستون‌ها :فرض کنید که یک دیتاستی رو داریم و می‌خوایم اسم یکی از ستون‌هاشو تغییر بدیم حالا به هر دلیلی، مثلا اسمش خیلی تو دل برو نیست! یا مثلا ناقصه و یا سازنده اون دیتافریم، اسم اون ستون رو اشتباه نوشته. countries.rename({'capital': 'capital_city', 'language': 'most_spoken_language'}, axis='columns')روش دیگه اینه که کلا بیایم و همه ستون‌ها رو مقدار دهی کنیم و اسامی دلخواه رو به اون ستون‌های مشخص بدیم.countries.columns = ['country', 'capital_city', 'continent', 'most_spoken_language']۵. عوض کردن ترتیب سطرهای دیتافریم: اندیس‌های سطر یک دیتافریم از صفر شروع میشن و تا هر تعداد که سطر داشته باشیم ادامه پیدا میکنه. حالا فرض کنیم می‌خوایم که این ترتیب رو عوض کنیم و به نوعی ترتیب شماره‌ها رو نزولی کنیم. یعنی اندیس‌های بزرگتر به اول(head) دیتافریم بیان. اینبار هم عملگر loc اینکارو برامون انجام میده. دمش گرم. countries.loc[::-1]البته اگه پشیمون شدین و می‌خواستین برگردین به حالت قبلی... فقط کافیه از تابع زیر استفاده کنین. countries.loc[::-1].reset_index(drop=True)و احیانا حواستون باشه که این تابع هم inplace هستش!۶. عوض کردن ترتیب ستون‌های دیتافریمcountries.loc[:, ::-1]۷. تقسیم کردن دیتافریم به دو زیردیتافریم :‌بعضی مواقع پیش میاد که که بخوایم دیتافریممون رو به دو دیتافریم کوچیکتر تبدیل کنیم. مثلا زمانی که می‌خوایم یک دیتافریم آموزش و یک دیتافریم تست برای الگوریتم‌های ماشین‌لرنینگمون داشته باشیم. برای اینکار از تابع sample استفاده می‌کنیم.countries_1 = countries.sample(frac=0.6, random_state=999)countries_2 = countries.drop(countries_1.index)۸. بررسی تساوی دو ستون :برای اینکه بررسی کنیم آیا ستون a عینا و دقیقا و خداییش شبیه ستون b هستش یا نه، از تابع equals استفاده می‌کنیم. df = pd.DataFrame({'col_1': [1, 0], 'col_2': [0, 1], 'col_3': [1, 0]})df['col_1'].equals(df['col_2'])df['col_1'].equals(df['col_3'])اینم بگم که هیچوقت از == استفاده نکنین چون به درستی نمی‌تونه مقادیر NaN موجود در دیتافریم رو کنترل کنه. خب دوستان ممنونم بابت وقتی که گذاشتین و امیدوارم براتون کاربردی بوده باشه. در قسمت بعدی می‌بینمتون. همیشه قبراق باشین.و فعلا ه: