این مقاله به عنوان بخشی از بلاگاتون علم داده
معرفی
خوب، امکان خوبی وجود دارد که بتوانید!
برای دانشمندان داده که از پایتون به عنوان زبان برنامه نویسی اصلی خود استفاده می کنند، بسته پانداها یک ابزار تجزیه و تحلیل داده ضروری است. بسته پانداها همه چیزهایی را دارد که یک دانشمند داده نیاز دارد، و هر دوره آموزشی در ابتدا نحوه استفاده از آن را به ما آموخت. این بسیار بزرگ، قدرتمند است و تقریباً هر دستکاری جدولی را که می توانید تصور کنید انجام می دهد. با این حال، این وسعت می تواند گاهی اوقات یک نقطه ضعف باشد.
دارای بسیاری از ویژگی های زیبا است که موارد لبه نادر، سناریوهای مختلف را حل می کند.
یکی از اشکالات کلیدی پانداها این است که با مجموعه داده های بزرگ دست و پنجه نرم می کند زیرا پانداها ساختارهای داده خود را در RAM ذخیره می کنند، که با افزایش اندازه داده ها ناکافی می شود. برای این کار از PySpark یا Dask استفاده کنید.
با وجود اینکه بسته پاندا به طور گسترده مورد استفاده قرار می گیرد، هنوز عملکردهای زیادی وجود دارد که ممکن است افراد از آنها چشم پوشی کنند، چه به دلیل استفاده کمتر از آن و چه به دلیل بی اطلاعی از وجود آن. این پست قصد دارد شما را دوباره با این ویژگی ها آشنا کند و نشان دهد که پانداها بسیار توانمندتر از آنچه قبلاً می دانستید، هستند.
لوله
برای انجام تمیز کردن داده ها به صورت مختصر و فشرده در پانداها، می توان از توابع Pipe استفاده کرد که به شما امکان می دهد چندین عملکرد را در یک عملیات ترکیب کنید.
به عنوان مثال، اگر دوست دارید توابعی مانند drop_duplicates، encode_categoricals، remove_outliers را اعمال کنید که آرگومان های آن را می پذیرند.
df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['قیمت'، 'قیراط'، 'عمق']).
فاکتورسازی کنید
این تابع جایگزینی برای Sklearns Label Encoder است.
# به [0] در انتهای الماس توجه کنید["cut_enc"] = pd.factorize(الماس["cut"])[0] >>> الماس["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 نام: cut_enc، dtype: int64
فاکتورسازی چندین مقدار را به دست میدهد: مقدار کدگذاری شده و فهرستی از دستههای منحصربهفرد.
values, unique = pd.factorize(diamonds["cut"], sort=True) >>> مقادیر[:10] آرایه([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> منحصر به فرد ['ایده آل'، 'ممتاز'، 'بسیار خوب'، 'خوب'، 'منصفانه']
منفجر شدن
عکس ادوا فاستر on می Unsplash
Explode تابعی با نام جالب است. بیایید با یک مثال و سپس توضیح شروع کنیم:
df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("کثیف") >>> df
ستون ویژگی دارای دو ردیف است که با لیست مشخص شده است. این نوع داده ها در نظرسنجی ها در دسترس هستند که در آن چند سؤال چند گزینه ای را می پذیرند.
>>> df.explode("کثیف"، ignore_index=True)
این تابع یک سلول با آرایه ای از مقادیر را می گیرد و در چندین ردیف منفجر می شود. برای حفظ ترتیب یک شاخص عددی، از ignore_index به عنوان True استفاده کنید.
میان
برای نمایه سازی بولی ویژگی های عددی در یک محدوده، در اینجا یک تابع مفید وجود دارد:
# الماس هایی را دریافت کنید که قیمت آنها بین 3500 تا 3700 دلار است. الماس [الماس["قیمت"].
T
DataFrame دارای یک ویژگی T ساده است که به عنوان transpose شناخته می شود. ممکن است اغلب از آن استفاده نکنیم، روش توصیف هنگام مشاهده دیتافریم مفید است.
>>> boston.describe().T.head(10)
گزینه های پانداها
می توان از تنظیمات جهانی پانداها استفاده کرد که به اصلاح و تغییر رفتارهای پیش فرض کمک می کند.
>>> dir(pd.options) ['compute', 'display', 'io', 'mode', 'plotting']
از 5 ماژول تشکیل شده است. بیایید گزینه های موجود را در زیر نمایشگر ببینیم. گزینه های زیادی وجود دارد، اما من بیشتر از max_columns استفاده می کنم.
>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' ، "عرض"]
اکثر مردم از max_columns و دقت استفاده می کنند
# محدودیت نمایش تعداد cols را بردارید pd.options.display.max_columns = هیچکدام # فقط 5 عدد بعد از اعشار نشان داده شود pd.options.display.precision = 5 # از علامت علمی خلاص می شود
Convert_dtypes
همه ما می دانیم که پانداها عادت آزاردهنده ای دارند که برخی از ستون ها را به عنوان انواع داده های شی علامت گذاری می کنند. به جای تعریف مستقیم انواع آنها، می توانید از روش تبدیل dtypes استفاده کنید، که تلاش می کند بهترین نوع داده را استنتاج کند:
sample = pd.read_csv("data/station_day.csv",usecols=["StationId"، "CO"، "O3"، "AQI_Bucket"]) >>> sample.dtypes شی StationId CO float64 O3 float64 AQI_Bucket شی dtype: object >>> sample.convert_dtypes().dtypes StationId رشته CO float64 O3 float64 AQI_Bucket string dtype: object
Select_dtypes
از نام، من معتقدم که مشخص است که عملکرد چه کاری انجام می دهد. میتوانید از گزینههای include و exclude برای تعیین ستونهایی استفاده کنید که شامل یا حذف انواع دادههای خاص هستند.
فقط ستون های عددی با np.number را انتخاب کنید، برای مثال:
# فقط ستون های عددی را انتخاب کنید diamonds.select_dtypes(include=np.number).head()
ماسک
این تابع به جایگزینی مقادیری که شرایط سفارشی برآورده نمی شود کمک می کند.
# ایجاد سنین داده نمونه = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") ages
پس از انجام عملیات فوق.
حداقل و حداکثر
اگرچه min و max به خوبی شناخته شده است، اما برخی از خواص بهتری برای برخی از موارد لبه دارد.
index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] libraries = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) برای lib در کتابخانه ها}, index=index ) >>> df
DataFrame خیالی بالا نتایج چهار کتابخانه مختلف تقویت کننده گرادیان را در پنج مجموعه داده نشان می دهد. ما به دنبال بسته ای هستیم که بهترین عملکرد را در هر مجموعه داده داشته باشد. در اینجا نحوه انجام آن با حداکثر به شیوه ای درجه یک آمده است:
>>> df.max(axis=1) Diamonds 99.52684 Titanic 99.63650 Iris 99.10989 Heart Disease 99.31627 Loan Default 97.96728 dtype: float64
بزرگترین و کوچکترین
بزرگترین و کوچکترین برای مشاهده مقادیر بالای N یا ~(بالا N) یک متغیر مفید است.
diamonds.nlargest (5، "قیمت")
diamonds.nsmallest (5، "قیمت")
Idxmax و Idxmin
پانداها وقتی حداکثر یا حداقل را در یک ستون تماس میگیرید، بزرگترین/کوچکترین عدد را برمیگردانند. با این حال، شرایطی وجود دارد که شما به موقعیت حداقل/حداکثر نیاز دارید، که این توابع آن را ارائه نمی دهند.
در عوض، می توانید از idxmax/idxmin استفاده کنید:
>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14
Value_Counts
یک راه متداول برای یافتن درصد مقادیر از دست رفته، ترکیب isnull و sum و تقسیم بر اندازه آرایه است.
اما، value_counts با آرگومانهای مرتبط همین کار را انجام میدهد:
مسکن = pd.read_csv("train.csv") >>> مسکن["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 NaN: 0.01644. float0.01370
گیره یا پنس
عملکرد کلیپ به پیدا کردن نقاط پرت در خارج از محدوده و جایگزینی آنها با محدودیت های سخت کمک می کند.
>>>ages.clip(50، 60)
at_time و Betweeen_time
این توابع هنگام کار با سری های زمانی با دانه بندی بالا مفید هستند.
at_time به دریافت مقادیر در یک تاریخ یا زمان خاص کمک می کند.
index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
>>> df.at_time ("15:00")
between_time برای واکشی ردیف ها در یک محدوده سفارشی استفاده می شود.
from datetime import datetime >>> df.between_time("09:45", "12:00")
Bdate_range
این تابع به ایجاد شاخص های سری زمانی با فرکانس روز کاری کمک می کند. دنیای مالی این نوع فرکانس را دارد. بنابراین، این تابع ممکن است در زمان نمایه سازی مجدد سری های زمانی با تابع reindex مفید باشد.
series = pd.bdate_range("2021-01-01", "2021-01-31") # دوره یک ماهه >>> len(series) 21
در و Iat
این دو دسترسی به طور قابل ملاحظه ای سریعتر از loc و iloc هستند. با این حال، آنها یک نقطه ضعف دارند. آنها فقط به شما اجازه می دهند هر بار یک مقدار را انتخاب یا جایگزین کنید:
# [index, label] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # جایگزین ردیف 16541 ستون قیمت >> > diamonds.at[16541، "قیمت"] = 10000
آرگسورت
این تابع به استخراج شاخص هایی کمک می کند که آرایه ای از ویژگی ها را مرتب کنند.
tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # اکنون، "نکات" را بر اساس total_bill tips.iloc[sort_idx].head() مرتب کنید.
لوازم جانبی گربه
پانداها توابع داخلی پایتون را در تاریخ ها و رشته ها با استفاده از لوازم جانبی مانند str یا dt اجازه می دهند.
>>> diamonds.dtypes قیراط float64 دسته برش دسته رنگ وضوح دسته عمق float64 جدول float64 قیمت int64 x float64 y float64 z float64 cut_enc int64 dtype: object:
می توان از بسیاری از توابع ویژه با استفاده از cat accessor در ستون های دسته بندی استفاده کرد. دارای توابعی مانند دستهها برای یافتن یکتا، rename_categories برای تغییر نام ویژگیها.
diamonds["new_cuts"] = diamonds["cut"].cat.rename_categories(list("ABCDE")) >>> diamonds["new_cuts"].cat.categories Index(['A', 'B', ' C'، 'D'، 'E']، dtype='object')
برای لیست بیشتر توابع زیر، این را بررسی کنید لوازم جانبی گربه.
فشار دادن
فشار دادن عملکردی است که در شرایط نادر و در عین حال تشدید کننده لبه استفاده می شود.
هنگامی که یک مقدار واحد از یک شرط مورد استفاده برای زیر مجموعه یک DataFrame برگردانده می شود، این یکی از این موارد است. سناریوی زیر را در نظر بگیرید:
زیر مجموعه = diamonds.loc[diamonds.index >> زیر مجموعه
حتی اگر تنها یک سلول وجود دارد، DataFrame را برگردانید. این ناخوشایند است زیرا اکنون باید از.loc با نام ستون و فهرست برای بدست آوردن قیمت استفاده کنید.
اگر می دانید چگونه فشار دهید، مجبور نیستید. با استفاده از این تابع می توان یک محور را از یک DataFrame یا Series تک سلولی حذف کرد. سناریوی زیر را در نظر بگیرید:
>>> subset.squeeze() 326
امکان تعیین محور برای حذف وجود دارد. اکنون فقط اسکالر بازگشته بود.
>>> subset.squeeze("columns") # or "rows" 0 326 نام: price, dtype: int64
توجه داشته باشید که این تابع فقط برای Series یا DataFrame با مقادیر تک کار می کند.
Excel_writer
این یک کلاس عمومی برای ایجاد فایل های اکسل و نوشتن DataFrame در آن است. در نظر بگیرید، ما این دو مجموعه داده را داریم.
# بارگذاری دو مجموعه داده الماس = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # در همان فایل اکسل با pd.ExcelWriter("data/data.xlsx") به عنوان نویسنده بنویسید: diamonds.to_excel (writer, sheet_name = "الماس") tips.to_excel (writer, sheet_name = "نکات")
دارای ویژگی هایی برای تعیین فرمت DateTime برای استفاده است، چه به یک فایل جدید نیاز داشته باشید یا یک فایل موجود را تغییر دهید، در صورت وجود برگه چه اتفاقی می افتد. این را بررسی کنید مستندات برای جزئیات بیشتر.
نتیجه
این یک مرور کلی از پانداها نیست و مستندات حاوی اطلاعات بیشتر در مورد کد و ویژگی ها است. توصیه میکنم انواع مختلف کدهای ارائه شده در اینجا و همچنین پارامترهای مختلف را آزمایش کنید. با این کار می توان به طور کامل قدرت پانداها را درک کرد.
کتابخانههایی مانند Dask و datatable به تدریج جایگزین پانداها با ویژگیهای جدید و پر زرق و برق خود برای مدیریت مجموعه دادههای بزرگ میشوند، پانداها همچنان پرکاربردترین ابزار دستکاری داده در جامعه علم داده پایتون است. به دلیل اینکه چقدر خوب در پشته SciPy جا میشود، کتابخانه به عنوان پارادایم برای دنبال کردن و ساخت بستههای دیگر عمل میکند.
امیدوارم این پست برای شما مفید بوده باشد و از خواندن شما سپاسگزارم.
رسانه های نشان داده شده در این مقاله متعلق به Analytics Vidhya نیستند و به صلاحدید نویسنده استفاده می شوند.
مربوط
- "
- 100
- 7
- معرفی
- تحلیل
- علم تجزیه و تحلیل
- استدلال
- مقاله
- بهترین
- تقویت
- بوستون
- ساختن
- صدا
- موارد
- تغییر دادن
- تمیز کاری
- رمز
- ستون
- مشترک
- انجمن
- محاسبه
- ایجاد
- داده ها
- تحلیل داده ها
- علم اطلاعات
- دانشمند داده
- تاریخ
- DID
- مرض
- دلار
- لبه
- اکسل
- تجربه
- منصفانه
- ویژگی
- امکانات
- مالی
- نام خانوادگی
- به دنبال
- قالب
- تابع
- جهانی
- خوب
- شدن
- اداره
- سیار
- اینجا کلیک نمایید
- زیاد
- چگونه
- چگونه
- HTTPS
- شاخص
- اطلاعات
- IT
- کلید
- زبان
- بزرگ
- یادگیری
- کتابخانه
- فهرست
- لیست
- بار
- وام
- فراگیری ماشین
- دست کاری
- ماسک
- رسانه ها
- ویژگی های جدید
- تعداد
- گزینه
- دیگر
- نمونه
- مردم
- لوله
- قدرت
- دقت
- حق بیمه
- در حال حاضر
- قیمت
- برنامه نويسي
- پــایتــون
- رم
- محدوده
- مطالعه
- نتایج
- علم
- دانشمندان
- سلسله
- ساده
- اندازه
- So
- حل
- شروع
- پرده
- زمان
- نکات
- بالا
- یونیکد
- us
- ارزش
- چشم انداز
- WHO
- در داخل
- با این نسخهها کار
- جهان
- نویسنده
- نوشته
- X