این نسخه وب دسترسی باز Python برای تجزیه و تحلیل داده ها نسخه 3 اکنون به عنوان همراه با نسخه های چاپی و دیجیتال در دسترس است. اگر با هرگونه Errata روبرو شدید ، لطفاً آنها را در اینجا گزارش دهید.
اگر نسخه آنلاین کتاب را مفید می دانید ، لطفاً برای پشتیبانی از نویسنده ، یک نسخه کاغذی یا یک کتاب الکترونیکی بدون DRM را در نظر بگیرید.
محتوای این وب سایت ممکن است کپی یا تکثیر نشود. نمونه های کد دارای مجوز MIT هستند و می توان در GitHub یا Gitee یافت.
طبقه بندی مجموعه داده ها و استفاده از یک تابع برای هر گروه ، خواه یک جمع یا تحول ، می تواند یک مؤلفه مهم یک گردش کار تجزیه و تحلیل داده ها باشد. پس از بارگیری ، ادغام و تهیه مجموعه داده ، ممکن است برای اهداف گزارش یا تجسم نیاز به محاسبه آمار گروهی یا احتمالاً جداول محوری داشته باشید. Pandas یک رابط کاربری گروهی همه کاره ارائه می دهد و شما را قادر می سازد تا مجموعه داده ها را به روشی طبیعی برش ، تاس و خلاصه کنید.
یکی از دلایل محبوبیت بانکهای اطلاعاتی رابطه ای و SQL (که مخفف "زبان پرس و جو ساختاری" است) سهولت است که می توان داده ها را به آن پیوست ، فیلتر ، دگرگون و جمع کرد. با این حال ، زبانهای پرس و جو مانند SQL محدودیت های خاصی را در انواع عملیات گروهی که می توانند انجام دهند ، تحمیل می کنند. همانطور که خواهید دید ، با بیان پایتون و پاندا ، می توانیم با بیان آنها به عنوان توابع پایتون سفارشی که داده های مرتبط با هر گروه را دستکاری می کنند ، عملیات گروهی کاملاً پیچیده ای انجام دهیم. در این فصل ، شما یاد خواهید گرفت که چگونه:
با استفاده از یک یا چند کلید (به شکل توابع ، آرایه ها یا نام ستون های DataFrame) یک شیء پاندا را به قطعات تقسیم کنید)
آمار خلاصه گروه ، مانند تعداد ، میانگین یا انحراف استاندارد یا یک عملکرد تعریف شده توسط کاربر را محاسبه کنید
تحولات درون گروهی یا دستکاری های دیگر مانند عادی سازی ، رگرسیون خطی ، رتبه یا انتخاب زیر مجموعه را اعمال کنید
میزهای محوری و تابشهای متقابل را محاسبه کنید
تجزیه و تحلیل کمی و سایر تجزیه و تحلیل های گروهی را انجام دهید
تجمع مبتنی بر زمان داده های سری زمانی ، یک مورد استفاده ویژه از Groupby ، به عنوان تغییر شکل مجدد در این کتاب گفته می شود و در CH 11: سری زمانی درمان جداگانه ای دریافت می کند.
مانند بقیه فصل ها ، ما با وارد کردن Numpy و Pandas شروع می کنیم:
10. 1 نحوه فکر کردن در مورد عملیات گروهی
هدلی ویکهام، نویسنده بسیاری از بسته های محبوب برای زبان برنامه نویسی R، اصطلاح split-apply-combine را برای توصیف عملیات گروهی ابداع کرد. در مرحله اول فرآیند، دادههای موجود در یک شی پاندا، چه سری، چه DataFrame یا موارد دیگر، بر اساس یک یا چند کلید که شما ارائه میدهید به گروههایی تقسیم میشوند. تقسیم بر روی یک محور خاص از یک جسم انجام می شود. به عنوان مثال، یک DataFrame را می توان در ردیف های آن ( axis="index") یا ستون های آن (axis="columns") گروه بندی کرد. پس از انجام این کار، یک تابع برای هر گروه اعمال می شود که یک مقدار جدید تولید می کند. در نهایت، نتایج همه آن برنامه های کاربردی در یک شیء نتیجه ترکیب می شوند. شکل شیء حاصل معمولاً به کاری که با داده ها انجام می شود بستگی دارد. شکل 10. 1 را برای نمونه ای از یک تجمع گروهی ساده ببینید.
هر کلید گروهبندی میتواند اشکال مختلفی داشته باشد، و لازم نیست کلیدها از یک نوع باشند:
لیست یا آرایه ای از مقادیر که طول آن به اندازه محور گروه بندی شده است
مقداری که نام ستون را در DataFrame نشان می دهد
فرهنگ لغت یا سری که تناظری بین مقادیر روی محور گروه بندی شده و نام گروه ها ارائه می دهد
تابعی که باید روی شاخص محور یا برچسبهای جداگانه در ایندکس فراخوانی شود
شکل 10. 1: تصویری از تجمع گروهی
توجه داشته باشید که سه روش آخر میانبرهایی برای تولید آرایه ای از مقادیر هستند که برای تقسیم شیء مورد استفاده قرار می گیرند. اگر همه اینها انتزاعی به نظر می رسد نگران نباشید. در طول این فصل، من نمونه های زیادی از همه این روش ها را بیان خواهم کرد. برای شروع، در اینجا یک مجموعه داده جدولی کوچک به عنوان DataFrame وجود دارد:
فرض کنید می خواهید میانگین ستون data1 را با استفاده از برچسب های key1 محاسبه کنید. برای انجام این کار چندین راه وجود دارد. یکی دسترسی به data1 و فراخوانی groupby با ستون (a Series) در key1 است:
این متغیر گروهبندیشده اکنون یک شی «GroupBy» ویژه است. در واقع هنوز چیزی را محاسبه نکرده است به جز برخی از داده های میانی در مورد کلید گروه df["key1"]. ایده این است که این شی تمام اطلاعات مورد نیاز برای اعمال برخی از عملیات در هر یک از گروه ها را دارد. برای مثال، برای محاسبه گروه به این معنی است که میتوانیم متد GroupBy را فراخوانی کنیم:
بعداً در Data Aggregation، در مورد آنچه که هنگام فراخوانی . mean() چه اتفاقی می افتد توضیح خواهم داد. نکته مهم در اینجا این است که داده ها (یک سری) با تقسیم داده ها روی کلید گروه جمع آوری شده اند و یک سری جدید تولید می شود که اکنون با مقادیر منحصر به فرد در ستون key1 نمایه می شود. نمایه نتیجه نام "key1" را دارد زیرا ستون DataFrame df["key1"] این کار را کرد.
اگر در عوض ما چندین آرایه را به عنوان لیست منتقل کرده بودیم ، چیز دیگری را می گیریم:
در اینجا ما داده ها را با استفاده از دو کلید گروه بندی کردیم ، و سری حاصل اکنون دارای یک شاخص سلسله مراتبی است که از جفت های منحصر به فرد کلیدها مشاهده شده است:
در این مثال ، کلیدهای گروه همه سری هستند ، اگرچه می توانند هر آرایه ای از طول مناسب باشند:
غالباً ، اطلاعات گروه بندی در همان DataFrame به عنوان داده هایی که می خواهید روی آن کار کنید یافت می شود. در این حالت ، شما می توانید نام ستون ها (خواه رشته ها ، اعداد یا سایر اشیاء پایتون) را به عنوان کلیدهای گروه منتقل کنید:
ممکن است در مورد دوم ، df. groupby ("key2") متوجه شده باشید. یعنی () ، که هیچ ستون key1 در نتیجه وجود ندارد. از آنجا که DF ["Key1"] داده های عددی نیست ، گفته می شود که یک ستون مزاحمت است ، بنابراین به طور خودکار از نتیجه خارج می شود. به طور پیش فرض ، تمام ستون های عددی جمع می شوند ، هرچند که به زودی امکان فیلتر کردن به زیر مجموعه وجود دارد.
صرف نظر از هدف در استفاده از GroupBy ، یک روش Groupby به طور کلی مفید است ، که یک سری حاوی اندازه گروه را برمی گرداند:
توجه داشته باشید که هر مقدار از دست رفته در یک کلید گروهی به طور پیش فرض از نتیجه خارج می شود. این رفتار را می توان با عبور از dropna = false to groupby غیرفعال کرد:
یک عملکرد گروهی مشابه با روح با اندازه ، شمارش است که تعداد مقادیر غیر طبیعی را در هر گروه محاسبه می کند:
تکرار بیش از گروه ها
شیء برگشتی توسط GroupBy از تکرار پشتیبانی می کند و دنباله ای از 2 عکس حاوی نام گروه را به همراه تکه ای از داده ها ایجاد می کند. موارد زیر را در نظر بگیرید:
در مورد چندین کلید ، اولین عنصر در Tuple یک مقادیر کلیدی خواهد بود:
البته ، شما می توانید هر کاری را که می خواهید با قطعات داده انجام دهید. یک دستور العمل که ممکن است مفید پیدا کنید محاسبه فرهنگ لغت قطعات داده به عنوان یک لاینر است:
به طور پیش فرض گروه های گروهی در محور = "فهرست" ، اما می توانید در هر یک از محورهای دیگر گروه بندی کنید. به عنوان مثال ، ما می توانیم ستون های مثال DF را در اینجا گروه بندی کنیم که آیا آنها با "کلید" یا "داده" شروع می کنند:
ما می توانیم گروه ها را مانند آن چاپ کنیم:
انتخاب ستون یا زیر مجموعه ستون ها
نمایه سازی یک شیء Groupby که از یک DataFrame با نام ستون یا آرایه ای از نام ستون ها ایجاد شده است ، اثر زیر ستون برای جمع آوری را دارد. این بدان معنی است که:
راحتی برای:
به خصوص برای مجموعه داده های بزرگ ، ممکن است مطلوب باشد که فقط چند ستون جمع شود. به عنوان مثال ، در مجموعه داده های قبل ، برای محاسبه وسایل فقط برای ستون Data2 و به دست آوردن نتیجه به عنوان DataFrame ، می توانیم بنویسیم:
اگر یک لیست یا آرایه منتقل شود ، یا یک سری گروه بندی شده اگر فقط یک نام ستون به عنوان یک مقیاس منتقل شود ، شیء DataFrame گروه بندی شده است:
گروه بندی با فرهنگ لغت و سریال
گروه بندی اطلاعات ممکن است به شکلی غیر از یک آرایه وجود داشته باشد. بیایید یک مثال دیگر DataFrame را در نظر بگیریم:
حال ، فرض کنید من یک مکاتبات گروهی برای ستون ها دارم و می خواهم ستون ها را به صورت گروه جمع کنم:
اکنون ، شما می توانید آرایه ای را از این فرهنگ لغت برای عبور به Groupby بسازید ، اما در عوض ما فقط می توانیم فرهنگ لغت را تصویب کنیم (من کلید "F" را درج کردم تا برجسته شود که کلیدهای گروه بندی استفاده نشده خوب هستند):
همان عملکرد برای سری ، که می تواند به عنوان یک نقشه برداری با اندازه ثابت مشاهده شود:
گروه بندی با توابع
استفاده از توابع پایتون یک روش عمومی تر برای تعریف نقشه برداری گروهی در مقایسه با یک فرهنگ لغت یا سری است. هر عملکردی که به عنوان یک کلید گروهی منتقل می شود یک بار در هر مقدار شاخص (یا یک بار در هر ستون در صورت استفاده از محور = "ستون") نامیده می شود ، با مقادیر بازگشت به عنوان نام گروه استفاده می شود. به طور دقیق تر ، نمونه DataFrame را از بخش قبلی در نظر بگیرید ، که نام اول افراد به عنوان مقادیر شاخص است. فرض کنید می خواستید با طول نام گروه بندی کنید. در حالی که می توانید مجموعه ای از طول رشته را محاسبه کنید ، ساده تر است که فقط عملکرد LEN را منتقل کنید:
اختلاط توابع با آرایه ها ، فرهنگ لغت ها یا سریال ها مشکلی نیست ، زیرا همه چیز به آرایه های داخلی تبدیل می شود:
گروه بندی بر اساس سطح شاخص
راحتی نهایی برای مجموعه داده های فهرست بندی شده سلسله مراتبی ، امکان جمع آوری با استفاده از یکی از سطوح شاخص محور است. بیایید به یک مثال نگاه کنیم:
برای گروه بندی براساس سطح ، شماره یا نام سطح را با استفاده از کلمه کلیدی سطح منتقل کنید:
10. 2 جمع آوری داده ها
تجمع به هرگونه تغییر داده ای که مقادیر مقیاس از آرایه ها تولید می کند ، اشاره دارد. نمونه های قبلی از چندین مورد از آنها استفاده کرده است ، از جمله میانگین ، تعداد ، حداقل و جمع. ممکن است تعجب کنید که هنگام استناد به میانگین () در یک شیء Groupby چه اتفاقی می افتد. بسیاری از تجمع مشترک ، مانند موارد موجود در جدول 10. 1 ، پیاده سازی های بهینه شده است. با این حال ، شما فقط به این مجموعه روش ها محدود نمی شوید.
نام عملکرد | شرح |
---|---|
همه ، همه | اگر هر یک یا چند مقدار) یا تمام مقادیر غیر NA "حقیقت" هستند ، درست برگردید |
شمردن | تعداد مقادیر غیر NA |
کامین ، کاماکس | حداقل و حداکثر مقادیر غیر NA |
قدر | جمع تجمعی مقادیر غیر NA |
انبوه | محصول تجمعی مقادیر غیر NA |
اول آخر | اولین و آخرین مقادیر غیر NA |
منظور داشتن | میانگین مقادیر غیر NA |
میانه | میانه حسابی مقادیر غیر NA |
حداقل، حداکثر | حداقل و حداکثر مقادیر غیر NA |
نهمین | مقداری را که در موقعیت n با داده ها به ترتیب مرتب شده ظاهر می شود، بازیابی کنید |
ohlc | چهار آمار «باز-بالا-کم-بستن» را برای داده های سری زمانی محاسبه کنید |
تولید | محصول مقادیر غیر NA |
چندک | کمیت نمونه را محاسبه کنید |
رتبه | رتبههای ترتیبی مقادیر غیرNA، مانند فراخوانی Series. rank |
اندازه | اندازه گروه را محاسبه کنید، نتیجه را به صورت یک سری برگردانید |
مجموع | مجموع مقادیر غیر NA |
std، var | انحراف معیار و واریانس نمونه |
میتوانید از تجمیعهای طراحی شده خودتان استفاده کنید و بهعلاوه هر متدی را که روی شیء گروهبندی شده نیز تعریف شده است، فراخوانی کنید. به عنوان مثال، متد nsmallest Series کمترین تعداد مقادیر درخواستی را از داده ها انتخاب می کند. در حالی که nsmallest به صراحت برای GroupBy پیاده سازی نشده است، ما همچنان می توانیم آن را با یک پیاده سازی بهینه نشده استفاده کنیم. در داخل، GroupBy سری را تکه تکه می کند، piece. nsmallest(n) را برای هر قطعه فراخوانی می کند و سپس آن نتایج را در شیء نتیجه جمع می کند:
برای استفاده از توابع تجمیع خود، هر تابعی را که یک آرایه را تجمیع می کند به متد aggregate یا نام مستعار کوتاه آن agg ارسال کنید:
ممکن است متوجه شوید که برخی از روشها، مانند توصیف، نیز کار میکنند، حتی اگر بهطور دقیق آنها ادغام نباشند:
آنچه را که در اینجا در Apply اتفاق افتاده است با جزئیات بیشتری توضیح خواهم داد: General split-apply-combine.
توابع تجمیع سفارشی معمولاً بسیار کندتر از توابع بهینه شده موجود در جدول 10. 1 هستند. این به این دلیل است که در ساخت تکههای دادههای گروه میانی مقداری سربار اضافی (تماسهای تابع، بازآرایی دادهها) وجود دارد.
برنامه کاربردی ستون عاقلانه و چند منظوره
بیایید به مجموعه داده نوک استفاده شده در فصل آخر بازگردیم. پس از بارگیری آن با pandas. read_csv، یک ستون درصد انعام اضافه می کنیم:
اکنون یک ستون tip_pct با درصد انعام از کل صورت حساب اضافه می کنم:
همانطور که قبلاً دیدید، تجمیع یک سری یا همه ستونهای یک DataFrame با استفاده از aggregate (یا agg) با تابع مورد نظر یا فراخوانی روشی مانند mean یا std است. با این حال، ممکن است بخواهید با استفاده از یک تابع متفاوت، بسته به ستون، یا چندین تابع به طور همزمان، جمع آوری کنید. خوشبختانه، این امکان وجود دارد که من از طریق تعدادی مثال توضیح خواهم داد. ابتدا، نکات را بر اساس روز و فرد سیگاری دسته بندی می کنم:
توجه داشته باشید که برای آمارهای توصیفی مانند آنچه در جدول 10. 1 آمده است، می توانید نام تابع را به عنوان یک رشته ارسال کنید:
اگر لیستی از توابع یا نام عملکرد را به جای آن منتقل کنید ، با نام ستون های گرفته شده از توابع ، یک DataFrame را باز می گردانید:
در اینجا لیستی از توابع تجمیع را به AGG منتقل کردیم تا به طور مستقل در گروه های داده ارزیابی کنیم.
لازم نیست نامهایی را که Groupby به ستون ها می دهد بپذیرید. نکته قابل توجه ، توابع Lambda دارای نام "" است که باعث می شود شناسایی آنها دشوار باشد (با دیدن یک ویژگی __name__ عملکرد می توانید خودتان را ببینید). بنابراین ، اگر لیستی از (نام ، تابع) Tuples را منتقل کنید ، از اولین عنصر هر Tuple به عنوان نام ستون DataFrame استفاده می شود (می توانید به لیست 2 عکس به عنوان نقشه برداری سفارش داده شده فکر کنید):
با استفاده از DataFrame گزینه های بیشتری دارید ، زیرا می توانید لیستی از توابع را برای استفاده در همه ستون ها یا توابع مختلف در هر ستون مشخص کنید. برای شروع ، فرض کنید ما می خواستیم همان سه آمار را برای ستون های TIP_PCT و TOTAL_BILL محاسبه کنیم:
همانطور که مشاهده می کنید ، DataFrame حاصل دارای ستون های سلسله مراتبی است ، همان چیزی که می توانید هر ستون را به طور جداگانه جمع کنید و با استفاده از Concat برای چسبیدن نتایج با استفاده از نام ستون به عنوان آرگومان کلیدها استفاده کنید:
مانند گذشته ، می توان لیستی از Tuples با نام های سفارشی را تصویب کرد:
حال فرض کنید که می خواهید عملکردهای بالقوه متفاوتی را در یک یا چند ستون اعمال کنید. برای انجام این کار ، یک فرهنگ لغت را به AGG منتقل کنید که شامل نقشه برداری از نام ستون ها به هر یک از مشخصات عملکردی است که تاکنون ذکر شده است:
DataFrame فقط در صورت استفاده از چندین توابع برای حداقل یک ستون ، دارای ستون های سلسله مراتبی خواهد بود.
بازگرداندن داده های جمع شده بدون شاخص های ردیف
در تمام نمونه های تا کنون ، داده های جمع شده با یک شاخص ، به طور بالقوه سلسله مراتبی ، که از ترکیبات کلیدی گروه منحصر به فرد تشکیل شده است ، باز می گردد. از آنجا که این همیشه مطلوب نیست ، می توانید در بیشتر موارد با عبور از AS_INDEX = FALSE به Groupby ، این رفتار را غیرفعال کنید:
البته ، همیشه با فراخوانی Reset_Index در نتیجه ، می توان نتیجه این قالب را بدست آورد. استفاده از AS_INDEX = آرگومان دروغین از برخی از محاسبات غیر ضروری جلوگیری می کند.
10. 3 درخواست کنید: تقسیم بندی کلیپ کاملاً کامپوزیت
روش عمومی ترین روش Groupby اعمال می شود که موضوع این بخش است. اعمال شیء را که به صورت قطعات دستکاری شده است ، تقسیم می کند ، عملکرد منتقل شده را در هر قطعه فراخوانی می کند ، و سپس سعی می کند قطعات را جمع کند.
با بازگشت به مجموعه داده های Tipping از قبل ، فرض کنید می خواهید پنج مقادیر برتر TIP_PCT را به صورت گروه انتخاب کنید. ابتدا تابعی را بنویسید که ردیف ها را با بزرگترین مقادیر در یک ستون خاص انتخاب کند:
حال اگر ما توسط سیگاری ها گروه بندی می کنیم ، می گویند و با این عملکرد تماس می گیریم ، موارد زیر را دریافت می کنیم:
اینجا چه اتفاقی افتاده است؟اول ، نکات DataFrame بر اساس ارزش سیگاری به گروه ها تقسیم می شود. سپس عملکرد بالا در هر گروه فراخوانی می شود ، و نتایج هر تماس عملکرد با استفاده از pandas. concat به هم چسبیده می شود و قطعات را با نام گروه برچسب می زند. بنابراین نتیجه دارای یک شاخص سلسله مراتبی با سطح داخلی است که حاوی مقادیر شاخص از DataFrame اصلی است.
اگر تابعی را برای اعمال استفاده کنید که آرگومان ها یا کلمات کلیدی دیگری را می گیرد ، می توانید این موارد را پس از عملکرد منتقل کنید:
فراتر از این مکانیک های اصلی استفاده ، استفاده بیش از حد از کاربرد ممکن است به خلاقیت نیاز داشته باشد. آنچه در داخل عملکرد گذشت اتفاق می افتد به شما بستگی دارد. باید یک شیء پاندا یا یک مقدار مقیاس را برگرداند. بقیه این فصل عمدتاً شامل نمونه هایی خواهد بود که به شما نشان می دهد که چگونه می توانید مشکلات مختلف را با استفاده از GroupBy حل کنید.
به عنوان مثال ، شما ممکن است به یاد بیاورید که من قبلاً در مورد یک شیء Groupby توصیف کردم:
در داخل Groupby ، هنگامی که شما از روشی مانند توصیف استفاده می کنید ، در واقع فقط یک میانبر برای:
سرکوب کلیدهای گروه
در مثالهای قبلی ، می بینید که شیء حاصل دارای شاخص سلسله مراتبی است که از کلیدهای گروه تشکیل شده است ، به همراه شاخص های هر قطعه از شیء اصلی. شما می توانید این کار را با عبور از Group_Keys = False to Groupby غیرفعال کنید:
تجزیه و تحلیل کمی و سطل
همانطور که ممکن است از CH 8 به یاد بیاورید: داده های Wrangling: پیوستن ، ترکیب و تغییر شکل ، پاندا برخی از ابزارها را دارد ، به ویژه pandas. cut و pandas. qcut ، برای خرد کردن داده ها به سطل های انتخابی خود یا با استفاده از مقدار نمونه. ترکیب این توابع با GroupBy باعث می شود انجام سطل یا تجزیه و تحلیل کمی در یک مجموعه داده راحت باشد. یک مجموعه داده تصادفی ساده و یک طبقه بندی سطل با طول برابر را با استفاده از pandas. cut در نظر بگیرید:
شیء طبقه بندی شده توسط برش می تواند مستقیماً به Groupby منتقل شود. بنابراین ما می توانیم مجموعه ای از آمار گروهی را برای کوارتل ها محاسبه کنیم ، مانند این:
به خاطر داشته باشید که همان نتیجه می توانست به سادگی با: محاسبه شود:
این سطل های با طول برابر بودند. برای محاسبه سطل های اندازه برابر بر اساس مقدار نمونه ، از pandas. qcut استفاده کنید. ما می توانیم 4 را به عنوان تعداد کوارتیل های نمونه محاسبه سطل منتقل کنیم ، و برچسب ها را منتقل کنیم تا فقط شاخص های کوارتیل را به جای فواصل بدست آوریم:
مثال: پر کردن مقادیر گمشده با مقادیر خاص گروه
هنگام تمیز کردن داده های گمشده ، در بعضی موارد مشاهدات داده را با استفاده از Dropna حذف خواهید کرد ، اما در برخی دیگر ممکن است بخواهید مقادیر تهی (NA) را با استفاده از یک مقدار ثابت یا مقداری حاصل از داده ها پر کنید. Fillna ابزاری مناسب برای استفاده است. به عنوان مثال ، در اینجا مقادیر تهی را با میانگین پر می کنم:
فرض کنید مقدار پر کردن به گروه متغیر است. یکی از راه های انجام این کار ، گروه بندی داده ها و استفاده از کاربردی است که با عملکردی که Fillna را در هر قطعه داده فراخوانی می کند. در اینجا برخی از داده های نمونه در مورد کشورهای ایالات متحده به مناطق شرقی و غربی تقسیم شده است:
بیایید مقادیر موجود در داده ها را از دست بدهیم:
ما می توانیم مقادیر NA را با استفاده از گروه به معنای آن پر کنیم ، مانند:
در مورد دیگر ، شما ممکن است مقادیر پر از پیش تعریف شده را در کد خود داشته باشید که به صورت گروهی متفاوت است. از آنجا که گروه ها دارای یک ویژگی نام داخلی هستند ، می توانیم از آن استفاده کنیم:
مثال: نمونه گیری تصادفی و جابجایی
فرض کنید شما می خواهید یک نمونه تصادفی (با یا بدون جایگزینی) را از یک مجموعه داده بزرگ برای اهداف شبیه سازی مونت کارلو یا برخی از برنامه های دیگر ترسیم کنید. چندین روش برای انجام "قرعه کشی" وجود دارد. در اینجا ما از روش نمونه برای سری استفاده می کنیم.
برای نشان دادن ، در اینجا راهی برای ساخت یک عرشه کارت بازی به سبک انگلیسی وجود دارد:
اکنون ما یک سری از طول 52 داریم که شاخص آن شامل نام کارت است و مقادیر آن مواردی است که در Blackjack و سایر بازی ها استفاده می شود (برای ساده نگه داشتن چیزها ، من اجازه می دهم که Ace "A" 1 باشد):
اکنون ، بر اساس آنچه قبلاً گفتم ، ترسیم یک دست از پنج کارت از عرشه می تواند به این صورت نوشته شود:
فرض کنید شما از هر کت و شلوار دو کارت تصادفی می خواستید. از آنجا که کت و شلوار آخرین شخصیت هر نام کارت است ، ما می توانیم بر اساس این گروه گروه بندی کنیم و از آن استفاده کنیم:
از طرف دیگر ، ما می توانیم Group_Keys = False را برای رها کردن شاخص کت و شلوار بیرونی عبور دهیم ، و فقط در کارتهای انتخاب شده قرار می گیریم:
مثال: میانگین و همبستگی وزنی گروه
تحت الگوی تقسیم کننده ترکیبی از Groupby ، عملیات بین ستون ها در یک DataFrame یا دو سری مانند میانگین وزنی گروهی امکان پذیر است. به عنوان نمونه ، این مجموعه داده حاوی کلیدهای گروهی ، مقادیر و برخی از وزن ها را بگیرید:
میانگین وزنی براساس دسته بندی می شود:
به عنوان نمونه دیگر ، یک مجموعه داده مالی را که در ابتدا از Yahoo! بدست آمده در نظر بگیرید. امور مالی حاوی قیمت های پایان روز برای چند سهام و شاخص S& P 500 (نماد SPX):
روش DataFrame Info () در اینجا یک روش مناسب برای به دست آوردن یک مرور کلی از محتوای یک DataFrame است.
یکی از کارهای مورد علاقه ممکن است محاسبه یک DataFrame متشکل از همبستگی سالانه بازده روزانه (محاسبه از درصد تغییرات) با SPX باشد. به عنوان یکی از راه های انجام این کار ، ابتدا تابعی را ایجاد می کنیم که همبستگی جفت هر ستون را با ستون "SPX" محاسبه می کند:
در مرحله بعد ، ما با استفاده از PCT_CHANGE ، درصد تغییر را در CLOSE_PX محاسبه می کنیم:
سرانجام ، ما این درصد تغییرات را در سال گروه بندی می کنیم ، که می تواند از هر برچسب ردیف با یک عملکرد یک خط که ویژگی سال هر برچسب DateTime را برمی گرداند ، استخراج شود:
شما همچنین می توانید همبستگی بین کلون را محاسبه کنید. در اینجا ما همبستگی سالانه بین اپل و مایکروسافت را محاسبه می کنیم:
مثال: رگرسیون خطی گروهی
در همان موضوع به عنوان مثال قبلی ، می توانید از GroupBy برای انجام تجزیه و تحلیل آماری گروهی پیچیده تر استفاده کنید ، تا زمانی که عملکرد یک شیء پاندا یا مقدار مقیاس را برگرداند. به عنوان مثال ، من می توانم عملکرد رگرسیون زیر را تعریف کنم (با استفاده از کتابخانه Econometrics Statsmodels) ، که یک رگرسیون معمولی حداقل مربعات (OLS) را در هر بخش از داده ها اجرا می کند:
اگر قبلاً آن را ندارید می توانید Statsmodels را با Conda نصب کنید:
اکنون ، برای اجرای یک رگرسیون خطی سالانه AAPL در بازده SPX ، اجرا:
10. 4 گروه تبدیل گروه و گروه های "بدون باز"
در درخواست: کلی پ-پلیپ کاملاً ترکیبی ، ما به روش اعمال در عملیات گروه بندی شده برای انجام تحولات نگاه کردیم. یک روش داخلی دیگر به نام Transform وجود دارد ، که شبیه به کاربرد است اما محدودیت های بیشتری را بر روی نوع عملکردی که می توانید استفاده کنید تحمیل می کند:
این می تواند یک مقدار مقیاس ایجاد کند تا به شکل گروه پخش شود.
این می تواند یک شیء به همان شکل گروه ورودی تولید کند.
نباید ورودی خود را جهش دهد.
بیایید یک مثال ساده را برای تصویر در نظر بگیریم:
در اینجا معنی گروه از طریق کلید وجود دارد:
در عوض ، فرض کنید ما می خواستیم یک سری به همان شکل DF ["مقدار"] تولید کنیم اما با مقادیر جایگزین شده توسط میانگین گروه بندی شده توسط "کلید". ما می توانیم تابعی را که میانگین یک گروه واحد را محاسبه می کند برای تبدیل: محاسبه کنیم:
برای توابع جمع آوری داخلی ، می توانیم مانند روش Groupby AGG یک نام مستعار رشته ای را منتقل کنیم:
مانند Apply ، Transform با توابعی که سری بازگشت دارند کار می کند ، اما نتیجه باید به اندازه ورودی باشد. به عنوان مثال ، ما می توانیم با استفاده از یک عملکرد یاور ، هر گروه را با 2 ضرب کنیم:
به عنوان نمونه پیچیده تر ، می توانیم برای هر گروه ، صفوف را به ترتیب نزولی محاسبه کنیم:
یک تابع تحول گروهی را که از تجمع ساده تشکیل شده است در نظر بگیرید:
ما می توانیم در این مورد با استفاده از تبدیل یا اعمال ، نتایج معادل را بدست آوریم:
توابع کل ساخته شده مانند "میانگین" یا "مبلغ" اغلب بسیار سریعتر از یک عملکرد کلی کاربردی هستند. این موارد همچنین هنگام استفاده از Transform دارای "مسیر سریع" هستند. این به ما امکان می دهد آنچه را که به عنوان یک عملیات گروهی نامیده می شود ، انجام دهیم:
در اینجا ، ما به جای نوشتن یک تابع و انتقال آن به Groupby (.) ، بین خروجی های مختلف عملیات Groupby انجام می دهیم. این همان چیزی است که منظور از "بدون باز" است.
در حالی که یک عملیات گروهی بدون استفاده ممکن است شامل تجمع چند گروه باشد ، فواید کلی عملیات بردار اغلب از این امر بیشتر است.
10. 5 میز محوری و جدول بندی متقاطع
جدول محوری یک ابزار جمع آوری داده ها است که اغلب در برنامه های صفحه گسترده و سایر نرم افزار تجزیه و تحلیل داده ها مشاهده می شود. این یک جدول از داده ها توسط یک یا چند کلید را جمع می کند و داده ها را در یک مستطیل با برخی از کلیدهای گروه در امتداد ردیف ها و برخی در امتداد ستون ها قرار می دهد. جداول محوری در پایتون با پاندا از طریق تسهیلات Groupby که در این فصل شرح داده شده است ، همراه با عملیات تغییر شکل با استفاده از نمایه سازی سلسله مراتبی امکان پذیر است. DataFrame همچنین دارای یک روش Pivot_Table است ، و همچنین یک عملکرد سطح بالا PANDAS. PIVOT_TABLE وجود دارد. علاوه بر ارائه رابط راحتی به Groupby ، Pivot_Table می تواند کل جزئی را اضافه کند ، همچنین به عنوان حاشیه شناخته می شود.
با بازگشت به مجموعه داده های Tipping ، فرض کنید می خواستید یک جدول از گروه های گروه (نوع پیش فرض Pivot_Table) را که توسط روز و سیگاری در ردیف ها تنظیم شده است محاسبه کنید:
این می توانست مستقیماً با GroupBy تولید شود ، با استفاده از نکات. groupby (["روز" ، "سیگاری"]). میانگین (). حال فرض کنید که ما می خواهیم میانگین فقط TIP_PCT و اندازه را بگیریم و علاوه بر این به صورت گروه. من سیگاری را در ستون های جدول و زمان و روز در ردیف ها قرار می دهم:
ما می توانیم این جدول را تقویت کنیم تا با عبور از حاشیه ها ، تعداد جزئی را شامل شود. این تأثیر افزودن تمام برچسب های ردیف و ستون دارد ، با مقادیر مربوطه ، آمار گروهی برای تمام داده های موجود در یک ردیف واحد است:
در اینجا ، تمام مقادیر بدون در نظر گرفتن سیگاری در مقابل غیر سیگاری (همه ستون ها) یا هر یک از دو سطح گروه بندی در ردیف ها (همه ردیف) است.
برای استفاده از یک تابع تجمع غیر از میانگین ، آن را به آرگومان کلیدی Aggfunc منتقل کنید. به عنوان مثال ، "Count" یا LEN به شما یک جدول بندی متقابل (تعداد یا فرکانس) از اندازه گروه می دهد (هرچند "تعداد" مقادیر تهی را از تعداد گروه های داده حذف می کند ، در حالی که لن چنین نخواهد کرد):
اگر برخی از ترکیبات خالی هستند (یا در غیر این صورت NA) ، ممکن است بخواهید یک Fill_value را منتقل کنید:
برای خلاصه گزینه های Pivot_Table به جدول 10. 2 مراجعه کنید.
بحث و جدل | شرح |
---|---|
ارزش های | نام ستون یا نام برای جمع ؛به طور پیش فرض ، همه ستون های عددی را جمع می کند |
فهرست مطالب | نام ستون یا کلیدهای گروهی دیگر برای گروه بندی در ردیف های جدول محوری حاصل |
ستون ها | نام ستون یا کلیدهای گروهی دیگر برای گروه بندی در ستون های جدول محوری حاصل |
باسن | عملکرد تجمیع یا لیست توابع ("میانگین" به طور پیش فرض) ؛می تواند هر عملکردی باشد که در یک زمینه Groupby معتبر باشد |
پر کردن_ | مقادیر گمشده را در جدول نتیجه جایگزین کنید |
قطره | اگر درست است ، ستون هایی را که ورودی های آنها همه سدیم است شامل نشوید |
حاشیه | افزودن Subtotals Row/Column و Grand Total (به طور پیش فرض نادرست) |
margins_name | نام برای استفاده از برچسب های ردیف/ستون حاشیه هنگام عبور از حاشیه = true ؛پیش فرض به "همه" |
مشاهده شده | اگر کلیدهای گروهی طبقه بندی شوند ، اگر درست باشد ، فقط مقادیر دسته بندی مشاهده شده را در کلیدها به جای همه دسته ها نشان دهید |
تابلوی های متقابل: متقاطع
یک جدول بندی متقابل (یا به طور خلاصه متقاطع) یک مورد خاص از یک جدول محوری است که فرکانس های گروهی را محاسبه می کند. به عنوان مثال:
به عنوان بخشی از برخی از تجزیه و تحلیل های نظرسنجی ، ما ممکن است بخواهیم این داده ها را با ملیت و دستی خلاصه کنیم. برای انجام این کار می توانید از pivot_table استفاده کنید ، اما عملکرد pandas. crosstab می تواند راحت تر باشد:
دو آرگومان اول به Crosstab می تواند یک آرایه یا سری یا لیستی از آرایه ها باشد. همانطور که در داده ها:
10. 6 نتیجه گیری
تسلط بر ابزارهای گروه بندی داده های پانداس می تواند به تمیز کردن داده ها و مدل سازی یا کار تجزیه و تحلیل آماری کمک کند. در CH 13: مثالهای تجزیه و تحلیل داده ها ما به چندین مورد استفاده دیگر برای GroupBy در داده های واقعی خواهیم پرداخت.