
در دنیای واقعی، معمولاً امکان بررسی تمام دادهها وجود ندارد؛ به همین دلیل نمونهبرداری و برآورد نقطهای نقش کلیدی در تحلیل دادهها ایفا میکنند. در این قسمت از دوره آموزش نمونه برداری در پایتون یاد میگیرید چگونه از یک مجموعهداده بزرگ، نمونههای معنادار استخراج کنید و با استفاده از آنها به درک درستی از کل داده برسید. با بررسی یک مسئلهی واقعی مرتبط با نمونههای قهوه، مفهوم نمونهبرداری را بهصورت کاربردی درک میکنید، با متد sample برای نمونهبرداری آشنا میشوید و یاد میگیرید چگونه از DataFrame و Pandas Series نمونهگیری کنید. همچنین با فرمت Feather آشنا میشوید که امکان ذخیرهسازی و بارگذاری سریع دادهها را برای تحلیلهای حرفهای فراهم میکند.
اهمیت نمونهبرداری در تحلیل آماری
نمونهبرداری، در واقع اساس و سنگبنای آمار اثتنتاژی و آزمون فرض محسوب میشود. به همین دلیل، پیش از شروع این دوره، لازم است با مفاهیم پایهای آمار و پایتون آشنا باشید.
نمونهبرداری یک مهارت قدرتمند است که به ما این امکان را میدهد بدون بررسی کل جمعیت، و تنها با طراحی آزمایش و تحلیل دادههای نمونه، پارامترهای جمعیت را تخمین بزنیم و درباره آنها نتیجهگیری کنیم. در این دوره یاد میگیریم:
- چه زمانی از نمونهبرداری استفاده کنیم
- با روشهای رایج نمونهبرداری آشنا شویم
- از نمونهبرداری تصادفی ساده تا روشهای پیشرفتهتر مانند نمونهبرداری طبقهای و خوشهای استفاده کنیم
در طول این دوره، با مجموعهدادههای واقعی کار خواهیم کرد؛ از جمله:
- مجموعهداده مربوط به رتبهبندی دانههای قهوه
- مجموعهداده آهنگهای Spotify
- مجموعهداده مربوط به استهلاک کارکنان
با استفاده از این دادهها یاد میگیریم چگونه شاخصهای آماری را تخمین بزنیم و با بهکارگیری روشهایی مانند توزیع نمونهای و Bootstrap، عدمقطعیت موجود در تخمینهای خود را کاهش دهیم.
نمونهبرداری چیست و چرا مفید است؟
بحث را با اولین مفهوم آغاز میکنیم و بررسی میکنیم که نمونهبرداری چیست و چرا میتواند ابزار مفیدی باشد. فرض کنید میخواهیم تعداد افرادی که در کشور فرانسه زندگی میکنند را محاسبه کنیم. روش استاندارد برای این کار، استفاده از سرشماری است؛به این معنا که با هر خانواده تماس گرفته شود و تعداد افراد ساکن در آن خانواده پرسیده شود. اما سؤال اینجاست آیا چنین کاری واقعاً امکانپذیر است؟ با توجه به اینکه میلیونها نفر در فرانسه زندگی میکنند، این فرآیند میتواند بسیار زمانبر و پرهزینه باشد. به همین دلیل است که حتی با وجود فناوریهای پیشرفته، سرشماری معمولاً هر چند سال یکبار انجام میشود.
در سال ۱۷8۶، فردی به نام پیر-سیمون لاپلاس (Pierre-Simon Laplace) متوجه شد که میتوان با تلاش بسیار کمتر، جمعیت یک کشور را تخمین زد. بهجای پرسش از تمام خانوادهها، کافی است از تعدادی محدود سؤال کنیم و سپس با استفاده از روشهای آماری، تعداد کل جمعیت را تخمین بزنیم. این روش همان چیزی است که امروز با نام نمونهبرداری (Sampling) شناخته میشود. در این قسمت، دو مفهوم اصلی را تعریف میکنیم:
- جمعیت (Population): جمعیت به مجموعه کامل دادههایی گفته میشود که قصد بررسی آنها را داریم. در مثال قبلی، جمعیت شامل تمام افراد ساکن فرانسه است. در آمار، معمولاً امکان بررسی کامل جمعیت وجود ندارد و مقدار دقیق آن نیز مشخص نیست.
- نمونه (Sample): نمونه، زیرمجموعهای از دادههای جمعیت است که روی آن محاسبات آماری انجام میدهیم.
هدف از کار با نمونه این است که بتوانیم پارامترهای جمعیت اصلی را با دقت مناسبی تخمین بزنیم.
معرفی مجموعهداده ارزیابی قهوه
در ادامه، وارد Jupyter Notebook میشویم و بررسی مفاهیم نمونهبرداری را روی یک مجموعهداده واقعی آغاز میکنیم. در ابتدا نگاهی میاندازیم به مجموعهداده Coffee Ratings. این دادهها در سال ۲۰۱۸ توسط سازمان کیفیت قهوه (Coffee Quality Institute) جمعآوری شدهاند و در ادامه، از آنها برای بررسی مفاهیم آماری استفاده خواهیم کرد. در این مجموعهداده، دو گونه قهوه وجود دارد:
- Arabica
- Robusta
هر ردیف از دادهها مربوط به یک نمونه قهوه است که توسط متخصصان قهوه، امتیازی بین ۰ تا ۱۰۰ دریافت کرده است. این امتیاز در ستونی با عنوان Total Cup Points ثبت شده است. برای مشاهده اطلاعات دقیقتر درباره ساختار این مجموعهداده، میتوانیم از متد ()info استفاده کنیم.

این مجموعهداده شامل:
- ۱۳۳۸ سطر
- ۴۳ ستون
از میان این ستونها:
- ۱۸ ستون عددی (Numerical)
- ۲۵ ستون کیفی یا دستهبندیشده (Categorical)
علاوه بر نوع دانه قهوه و امتیاز نهایی، اطلاعات متنوع دیگری نیز در دادهها وجود دارد؛ از جمله:
- ویژگیهای کیفی مانند طعم، عطر، بادی (Body) و سایر شاخصهای حسی
- اطلاعات مربوط به تاریخ برداشت
- نام مزرعه
- کشور تولیدکننده و...
این مجموعهداده نماینده کل قهوههای دنیا نیست و ممکن است تمام کشورها را پوشش ندهد، اما با توجه به حجم و تنوع اطلاعات، دادههای موجود برای تحلیل آماری کاملاً کافی و مناسب هستند.
فرمت Feather
نکتهای که در این مجموعهداده قابل توجه است، پسوند Feather فایل دادههاست. تا اینجا، بیشتر با مجموعهدادههایی با فرمت CSV کار کرده بودیم؛ اما Feather تفاوتهایی با CSV دارد. Feather یک فرمت فایل برای ذخیره دادههای جدولی است که بهطور خاص برای تبادل سریع دادهها بین زبانهای برنامهنویسی، بهویژه پایتون و R، طراحی شده است. از دلایل محبوبیت Feather در جامعه علم داده میتوان به موارد زیر اشاره کرد:
- سرعت بالای خواندن و نوشتن دادهها
- ساختار ساده و بهینه
- عملکرد بهتر نسبت به بسیاری از فرمتهای دیگر
نکته مهم این است که برای کار با فایلهای Feather، باید کتابخانه مربوط به آن از قبل نصب شده باشد.
نمونهبرداری با متد sample
در ادامه بحث نمونهبرداری، برای شروع رابطه بین Total Cup Points و Flavor را در نظر میگیریم. برای این منظور:
- یک متغیر تعریف میکنیم
- آن را برابر با ستونهای Total Cup Points و Flavor قرار میدهیم
به این ترتیب، یک زیرمجموعه از مجموعهداده اصلی ایجاد میکنیم که قصد داریم عملیات نمونهبرداری را روی آن انجام دهیم.
# In [4]:
pts_vs_flavor_pop = coffee_ratings[['total_cup_points','flavor']]برای انجام نمونهبرداری، از متد ()sample استفاده میکنیم. در این مرحله:
- یک دیتافریم جدید تعریف میکنیم
- متد ()sample را روی آن فراخوانی میکنیم
- تعداد نمونهها را مشخص میکنیم
در این مثال، قصد داریم ۱۰ نمونه از دادهها انتخاب کنیم تا فرآیند نمونهبرداری را بررسی کنیم.
# In [4]:
pts_vs_flavor_pop = coffee_ratings[['total_cup_points','flavor']]
# In [5]:
pts_vs_flavor_pop.sample(n=10) total_cup_points flavor
121 84.75 7.83
1132 79.92 7.08
948 81.42 7.33
1023 80.92 7.08
308 83.75 7.42
297 83.75 7.83
930 81.50 7.42
284 83.83 7.83
22 87.17 8.25
372 83.50 7.50نمونهبرداری به این صورت انجام میشود. توجه داشته باشید که متد sample بهصورت پیشفرض، نمونهگیری بدون جایگزینی (Without Replacement) انجام میدهد؛ به این معنا که میتوانیم مطمئن باشیم نمونههای انتخابشده منحصربهفرد هستند و داده تکراری در نمونه وجود ندارد. در این مرحله، یک متغیر تعریف میکنیم و نتیجه نمونهبرداری را در آن ذخیره میکنیم. به این ترتیب، اکنون دو مجموعه داده در اختیار داریم:
- مجموعه داده جمعیت (Population)
- مجموعه داده نمونه (Sample)
# In [4]:
pts_vs_flavor_pop = coffee_ratings[[ 'total_cup_points','flavor' ]]
# In [6]:
pts_vs_flavor_samp = pts_vs_flavor_pop.sample(n=10)نمونهبرداری با متد sample در Pandas Series
متد sample علاوه بر DataFrame، روی Pandas Series نیز قابل استفاده است.
برای مثال، اگر از مجموعه داده Coffee Ratings ستون Total Cup Points را انتخاب کنیم، در واقع یک Series ایجاد کردهایم. حالا میتوانیم متد sample را مستقیماً روی این Series فراخوانی کنیم و مقدار n را برابر با ۱۰ قرار دهیم تا ۱۰ نمونه انتخاب شود.
# In [7]:
coffee_ratings['total_cup_points'].sample(n=10)359 83.50
5333 82.92
114 84.92
746 82.25
571 82.83
209 84.25
489 83.08
174 84.42
212 84.17
1089 80.33
Name: total_cup_points, dtype: float64در ادامه، یک متغیر جدید در نظر میگیریم و خروجی نمونهبرداری را در آن ذخیره میکنیم. در این مرحله، دو دیتافریم داریم:
- یک دیتافریم مربوط به جمعیت
- یک دیتافریم مربوط به نمونه
# In [8]:
cup_points_samp = coffee_ratings['total_cup_points'].sample(n=10)اکنون میتوانیم محاسبات مربوط به تخمین نقطهای پارامترهای جمعیتی را انجام دهیم. پارامتر جمعیتی به مقداری آماری گفته میشود که روی کل مجموعه داده جمعیت محاسبه میشود. برای محاسبه این پارامتر، میتوانیم از کتابخانه NumPy استفاده کنیم. بهعنوان مثال، با فراخوانی متد میانگین (Mean) و دادن مجموعه داده جمعیت بههمراه ستون موردنظر (در اینجا Total Cup Points)، مقدار میانگین جمعیت محاسبه میشود. در این مرحله، مقدار پارامتر جمعیتی به دست میآید
# In [9]:
np.mean(pts_vs_flavor_pop['total_cup_points'])
# Out[9]:
82.15120328849018محاسبه تخمین نقطهای (Point Estimate)
تخمین نقطه ای، فرآیند یافتن مقدار تقریبی پارامترهای جمعیتی، مانند میانگین از نمونه های تصادفی جامعه است. حال میخواهیم تخمین نقطهای یا Point Estimate را محاسبه کنیم. برای این کار، بهجای مجموعه جمعیت، از دادههای نمونه استفاده میکنیم.
دوباره از NumPy و متد میانگین استفاده میکنیم و این بار دادههای نمونه را به آن میدهیم. میانگینی که به دست میآید، تخمین نقطهای ما از پارامتر جمعیتی است. نکته مهم این است که:
- میانگین جمعیت و میانگین نمونه به یکدیگر بسیار نزدیک هستند
- اما معمولاً دقیقاً برابر نیستند
# In [10]:
np.mean(cup_points_samp)
# Out[10]:
82.642محاسبه میانگین با استفاده از Pandas
علاوه بر NumPy، میتوانیم برای محاسبه میانگین از Pandas نیز استفاده کنیم که در بسیاری از موارد سادهتر و خواناتر است. برای مثال:
- ابتدا ستون Flavor را از مجموعه داده جمعیت انتخاب میکنیم
- سپس متد
()meanرا روی آن فراخوانی میکنیم تا میانگین جمعیتی به دست آید
در ادامه، برای محاسبه تخمین نقطهای:
- ستون Flavor را از دیتافریم نمونه انتخاب میکنیم
- دوباره متد
()meanرا اجرا میکنیم
در این حالت نیز مشاهده میکنیم که مقدار میانگین نمونه، تخمینی از مقدار واقعی میانگین جمعیت است.
# In [11]:
pts_vs_flavor_pop['flavor'].mean()
# Out[11]:
7.526046337817636
# In [12]:
pts_vs_flavor_samp['flavor'].mean()
# Out[12]:
7.726000000000001جمعبندی
در این درس یاد گرفتید چگونه با استفاده از نمونهبرداری آماری، از یک مجموعهداده بزرگ به درک معناداری از کل داده برسید. با حل یک مسئلهی واقعی مبتنی بر نمونههای قهوه، مفهوم برآورد نقطهای را بهصورت عملی تجربه کردید و با متد sample برای انتخاب تصادفی دادهها آشنا شدید.با فرمت Feather بهعنوان راهکاری سریع و بهینه برای ذخیره و بارگذاری دادهها در پروژههای تحلیلی آشنا شدید. این مهارتها پایهی تحلیل آماری دقیق و ورود به مباحث پیشرفتهتر علم داده محسوب میشوند. 🚀
