منطق ایجنت‌ها › M8 — ساختن، خودکارکردن، تحویل‌دادن
۸.۲ فرّار تدریسی ~۴۵ دقیقه

📊 داده به گزارش — کامل

قبل از این فصل: فصل ۴.۲ · فصل ۴.۵

در یک نگاه

۸.۲.۱

CSV و Excel: تفاوت عملی

هر دو جدول‌اند، ولی برای کار با ایجنت فرقشان مهم است:

و قاعده‌ی عملی: برای پردازش، CSV؛ برای تحویل، Excel. اگر فایل اکسل داری، ازش CSV بگیر، کار را روی CSV بکن، و در آخر خروجی را اکسل کن. این هم کار را ساده‌تر می‌کند و هم قابل بازرسی‌تر.

و یک تله‌ی فارسیِ همیشگی از فصل ۴.۲.۴: CSV با کاما جدا می‌شود، ولی عددهای فارسی هم با کاما هزارگان می‌آیند. بخش بعد نشان می‌دهد این تله دقیقاً چه بلایی سرِ فایل نمونه‌ی ما آورده.

۸.۲.۲

تمیزکردن داده‌ی به‌هم‌ریخته

فایل نمونه‌ها/داده/فروش-۱۴۰۵.csv را باز کن — یازده ردیف داده دارد و هفت نوع خرابی در آن هست. همه‌شان را می‌توانی با چشم ببینی، چون فایل کوچک است:

  1. یک ردیف ۷ ستون دارد به‌جای ۶. علتش دقیقاً همان تله‌ی بالاست: قیمت 450,000 بدون گیومه نوشته شده، پس آن کاما به‌عنوان جداکننده خوانده می‌شود و ردیف را می‌شکند. نتیجه‌اش این است که قیمت می‌شود 450 و 000 سر از ستون مشتری درمی‌آورد.
  2. سه قالب تاریخ متفاوت: 1405/01/05 · 1405/1/18 (ماه یک‌رقمی) · 1405-02-22 (خط تیره) — و یکی هم با ارقام فارسی: ۱۴۰۵/۰۲/۱۵.
  3. دو سلول خالی: یک ردیف مشتری ندارد، یک ردیف تعداد ندارد.
  4. «شركت ب» با کافِ عربی در کنار «شرکت ب» با کافِ فارسی. این دو عیناً یک شکل دیده می‌شوند ولی برای کامپیوتر دو چیز متفاوت‌اند.
  5. یک ردیف تقریباً تکراری: دو ردیف با همان تاریخ، محصول، تعداد و قیمت — که یکی‌شان مشتری ندارد. تکراریِ دقیق نیست، پس ابزارهای «حذف تکراری» پیدایش نمی‌کنند.
  6. دو ردیف «مرجوعی» — که فروش نیستند و نباید در جمع بیایند.
  7. و یک ردیف «در انتظار» که تعدادش خالی است.

به‌خاطر بسپار ترتیب درست: اول تمیز کن، بعد حساب کن. اگر روی داده‌ی کثیف حساب کنی، جوابی می‌گیری که شکلِ درستی دارد — و همان چیزی است که نمی‌شود تشخیصش داد. عددِ غلط هیچ علامتی روی خودش ندارد.

۸.۲.۳

محاسبه و جمع‌بندی

حالا عددها. و اینجا نکته‌ی اصلیِ فصل است — این ارقام را خودت می‌توانی بشماری، پس ادعا نیستند:

و جالب‌تر اینکه این ۲۲.۶٪ از چند خطای جدا می‌آید که هم‌جهت نیستند:

و همین آخری درسِ مهمی دارد: خطاها همدیگر را خنثی می‌کنند و پنهان می‌شوند. اگر فقط جمع کل را نگاه کنی، نمی‌فهمی سه خطای جدا داشتی — فقط یک عددِ نه‌چندان عجیب می‌بینی.

و برای شمارش مشتری‌ها هم همان اتفاقِ فصل ۴.۲ می‌افتد: گروه‌بندی خام ۶ مشتری می‌دهد، در حالی که مشتریِ واقعی ۴ تاست — چون «شركت ب» و «شرکت ب» جدا شمرده می‌شوند، و 000ی که از ردیفِ شکسته آمده هم به‌عنوان یک مشتری شمرده می‌شود.

۸.۲.۴

قالب‌بندی خروجی

گزارشِ عددی چند قاعده دارد که رعایت‌نکردنشان زحمتت را بی‌اثر می‌کند:

۸.۲.۵

راستی‌آزمایی عددی: از کجا بفهمی عدد درست است

خواندنِ خروجی، راستی‌آزمایی نیست. چهار روشِ عملی، از ارزان به گران:

  1. ردیف‌ها را بشمار. ساده‌ترین و مؤثرترین. اگر فایل ۱۱ ردیف داده دارد و گزارش می‌گوید ۱۰ ردیف پردازش شد، یک ردیف جایی افتاده — و باید بدانی کدام و چرا.
  2. یک ردیف را دستی حساب کن. یکی کافی است، ولی ردیفِ عجیب را انتخاب کن نه ردیف اول را. ردیف اولِ هر فایل معمولاً سالم است؛ ارزش اطلاعاتی‌اش صفر است.
  3. مرتبه‌ی بزرگی را بسنج. جمع باید حدوداً «تعداد ردیف × میانگین» باشد. اگر جواب ده برابرِ انتظار است، احتمالاً یک ردیف قیمتش اشتباه خوانده شده.
  4. و جمعِ اجزا را با کل بسنج. اگر فروشِ هر محصول را جدا داری، جمعشان باید با کل یکی باشد. این ساده‌ترین تلهٔ خطاست و اغلب نصب نمی‌شود.

به‌خاطر بسپار هیچ‌وقت یک عدد را بدون شمارشِ ردیف‌ها قبول نکن. عددِ نهایی نمی‌گوید چند ردیف در آن است — و رایج‌ترین خطای پردازش داده، افتادنِ بی‌صدای چند ردیف است، نه محاسبه‌ی غلط.

ضدالگو قبول‌کردنِ خروجی چون «عددها منطقی به نظر می‌رسند». در فایل نمونه‌ی ما، ۴۵٬۹۶۰٬۹۰۰ هم کاملاً منطقی به نظر می‌رسد — نه خیلی بزرگ است نه خیلی کوچک. تنها راهِ فهمیدنِ غلط‌بودنش، شمردن است. «منطقی به نظر می‌رسد» فقط یعنی خطا به‌قدر کافی بزرگ نبوده که خودش را لو بدهد.
نکته‌ی طلایی از ایجنت بخواه قبل از محاسبه، فهرست خرابی‌ها را بدهد و بگوید با هرکدام چه می‌کند — و آن فهرست را تأیید کن. آن‌وقت تصمیم‌های تمیزکاری تصمیم‌های تو هستند، نه فرض‌های خاموشِ او. «مرجوعی را حساب کنم یا نه؟» سؤالی است که جوابش به کارِ تو بستگی دارد، نه به داده.

تمرین (ساختنی + توضیحی)

روی نمونه‌ها/داده/فروش-۱۴۰۵.csv اجرا کن:

  1. فهرست خرابی‌ها را بگیر و با هفت موردِ بخش ۸.۲.۲ مقایسه کن — چندتا را پیدا کرد؟
  2. جمع فروش را بگیر و ببین به ۳۷٬۵۰۰٬۰۰۰ می‌رسد یا نه.
  3. یکی از اعداد را دستی چک کن — و ردیف عجیب را انتخاب کن.
  4. و فایل موجودی انبار.csv را هم بده: کدام کالا زیر حداقل موجودی است؟
پاسخنامه — کدام خرابی‌ها را پیدا می‌کند و کدام را نه

معمولاً پیدا می‌کند: قالب‌های مختلف تاریخ · سلول‌های خالی · ردیفِ ۷ ستونی · ارقام فارسی. این‌ها ساختاریاند و از روی شکل قابل تشخیص‌اند.

معمولاً پیدا نمی‌کند — و این‌ها گران‌ترها هستند:

  • «شركت ب» با کافِ عربی. چون در خروجی عیناً یک شکل چاپ می‌شود، حتی وقتی جدا شمرده شده. تنها راهِ دیدنش، شمردنِ مشتری‌های یکتاست: اگر ۶ گفت و تو ۴ تا می‌شناسی، همین است.
  • ردیف تقریباً تکراری. چون دقیقاً یکسان نیست (یکی مشتری ندارد)، «حذف تکراری» ردش نمی‌کند. و این بزرگ‌ترین سهمِ خطا بود: ۸٫۴ میلیون از ۸٫۵ میلیون.
  • مرجوعی‌ها. و این تقصیرِ ایجنت نیست — یک تصمیم کاری است، نه یک خطای داده. او نمی‌داند مرجوعی باید کم شود یا نه، مگر بگویی. برای همین بخش «نکته‌ی طلایی» گفت فهرست تصمیم‌ها را قبلش تأیید کن.

و انبار: دو کالا زیر حداقل‌اند — «محصول B» با موجودی ۸ در برابر حداقل ۲۵، و «محصول A (بسته‌بندی جدید)» با موجودی صفر در برابر حداقل ۲۰. اگر جوابی که گرفتی فقط یکی را گفت، احتمالاً صفر را به‌عنوان «خالی» رد کرده — و صفر یک مقدار است، نه نبودِ مقدار. این یکی از کلاسیک‌ترین خطاهای کار با داده است.

ذخیره شد