the-stats-duck 0.6: آمار واقعی داخل SQL
خلاصهٔ کاملتر
افزونهی متنباز the-stats-duck که موتور آماری پشت Bedevere و KoliLang ـه، نسخهی v0.6.0 رو منتشر کرد. کاری که میکنه اینه که DuckDB رو به یه ابزار آماری واقعی تبدیل میکنه: توزیعها، آزمونها، رگرسیون و حتی نمودار — بدون اینکه از SQL بیرون بیای. مجوزش MIT ـه و هرجا DuckDB اجرا بشه اجرا میشه، حتی داخل مرورگر.
اولین چیزی که آدم با یه دیتاست تازه میخواد، یه نگاه کلیه. تابع meta() همین کارو میکنه و برای هر ستون یه ردیف پروفایل میده. با SUMMARIZE خودِ DuckDB همپوشانی داره، ولی چون meta() یه table function ـه میشه join و filter و CTEاش کرد — مثلاً بپرسی «چند ستون عددی داریم و مجموع مقادیر گمشده چقدره؟»
رگرسیون هم مستقیم داخل کوئری انجام میشه: lm() جدول ضرایب رو با estimate، std_error، t_statistic و p_value میده و lm_summary() سطر سطح-مدل رو با R²، R² تعدیلشده، F و درجهی آزادی باقیمانده. پشت صحنه یه حل Cholesky روی X'X ـه که با R روی دیتاستهای cars و mtcars تا چهار رقم اعشار مقایسه شده. تعامل بین متغیرها هنوز تو نسخهی ۰.۶ نیست.
اگه نخوای نرمالبودن رو فرض بگیری، bootstrap(value, statistic, n_iters [, seed]) با جایگذاری نمونهگیری میکنه و لیستی از آمارهی هر بازنمونه رو برمیگردونه؛ با list_aggregate میتونی ازش بازهی صدکی بسازی و با seed حتی بین گروههای GROUP BY هم بازتولیدپذیره.
بخش نمودار هم رشد کرده: یه گرامر کوچیک رسم (ggsql) که به Vega-Lite کامپایل میشه. این نسخه مارک violin، فست دوبعدی و مهمتر از همه STAT در سطح هر لایه رو اضافه کرده. یعنی DRAW point DRAW line STAT smooth بهت یه اسکترپلات با منحنی LOESS میده، در حالی که مارک regression یه خط مستقیم کمترینمربعات میکشه. سه اصلاحگر smooth، summary و identity عرضه شدن.
زوی توزیعها هم دهتا عضو جدید گرفته — دوجملهای منفی، فوقهندسی، وایبول، لاگنرمال و پواسون — هرکدوم با سهگانهی R-استایل d/p/q، بهعلاوه یه ست کامل نمونهگیر تصادفی مثل rnorm و rpois. همهشون تا شش رقم اعشار با R چک شدن.
ولی شاید عملیترین خبر این نسخه، کارایی باشه. خوندن فایلهای SAS/SPSS/Stata بهطور تصادفی O(N²) بود: ریدر برای هر چانک ۲۰۴۸ ردیفی، فایل رو از بایت صفر دوباره پارس میکرد! حالا هر فایل دقیقاً یک بار پارس و تو یه column store بافرشده استریم میشه. نتیجه: یه XPT ۲۰۰ هزار ردیفی از ۶۷ ثانیه به ۱.۳ ثانیه (۵۲ برابر)، و ۱.۶ میلیون ردیف از ۷۰ دقیقه به ۱۵ ثانیه.
نکات کلیدی:
- افزونهی متنباز (MIT) که آمار واقعی رو به DuckDB میآره؛ حتی داخل مرورگر اجرا میشه
- lm() و lm_summary() برای رگرسیون با فرمول R-استایل، با حل Cholesky و اعتبارسنجی در برابر R
- bootstrap() برای بازهی اطمینان بدون فرض نرمال بودن، با seed بازتولیدپذیر
- نمودار داخل SQL با گرامر ggsql: ویولن، فست دوبعدی و LOESS از طریق STAT smooth
- ده توزیع جدید با سهگانهی d/p/q و نمونهگیرهای تصادفی
- خوندن فایلهای XPT از O(N²) نجات پیدا کرد: تا ۵۲ برابر سریعتر



