CSV و Excel: تفاوت عملی
هر دو جدولاند، ولی برای کار با ایجنت فرقشان مهم است:
- CSV یک فایل متنیِ ساده است: هر سطر یک ردیف، ستونها با کاما جدا. مزیتش این است که خودت هم میتوانی بازش کنی و ببینی — و برای راستیآزمایی این خیلی ارزش دارد. عیبش: فرمول، رنگ، چند برگه، و قالببندی ندارد.
- Excel همهی آنها را دارد، ولی یک فایل دودویی است — یعنی بازکردنش ابزار میخواهد و دیدنِ خامش ممکن نیست.
و قاعدهی عملی: برای پردازش، CSV؛ برای تحویل، Excel. اگر فایل اکسل داری، ازش CSV بگیر، کار را روی CSV بکن، و در آخر خروجی را اکسل کن. این هم کار را سادهتر میکند و هم قابل بازرسیتر.
و یک تلهی فارسیِ همیشگی از فصل ۴.۲.۴: CSV با کاما جدا میشود، ولی عددهای فارسی هم با کاما هزارگان میآیند. بخش بعد نشان میدهد این تله دقیقاً چه بلایی سرِ فایل نمونهی ما آورده.
تمیزکردن دادهی بههمریخته
فایل نمونهها/داده/فروش-۱۴۰۵.csv را باز کن — یازده
ردیف داده دارد و هفت نوع خرابی در آن هست. همهشان را میتوانی
با چشم ببینی، چون فایل کوچک است:
- یک ردیف ۷ ستون دارد بهجای ۶. علتش دقیقاً همان تلهی
بالاست: قیمت
450,000بدون گیومه نوشته شده، پس آن کاما بهعنوان جداکننده خوانده میشود و ردیف را میشکند. نتیجهاش این است که قیمت میشود450و000سر از ستون مشتری درمیآورد. - سه قالب تاریخ متفاوت:
1405/01/05·1405/1/18(ماه یکرقمی) ·1405-02-22(خط تیره) — و یکی هم با ارقام فارسی: ۱۴۰۵/۰۲/۱۵. - دو سلول خالی: یک ردیف مشتری ندارد، یک ردیف تعداد ندارد.
- «شركت ب» با کافِ عربی در کنار «شرکت ب» با کافِ فارسی. این دو عیناً یک شکل دیده میشوند ولی برای کامپیوتر دو چیز متفاوتاند.
- یک ردیف تقریباً تکراری: دو ردیف با همان تاریخ، محصول، تعداد و قیمت — که یکیشان مشتری ندارد. تکراریِ دقیق نیست، پس ابزارهای «حذف تکراری» پیدایش نمیکنند.
- دو ردیف «مرجوعی» — که فروش نیستند و نباید در جمع بیایند.
- و یک ردیف «در انتظار» که تعدادش خالی است.
بهخاطر بسپار ترتیب درست: اول تمیز کن، بعد حساب کن. اگر روی دادهی کثیف حساب کنی، جوابی میگیری که شکلِ درستی دارد — و همان چیزی است که نمیشود تشخیصش داد. عددِ غلط هیچ علامتی روی خودش ندارد.
محاسبه و جمعبندی
حالا عددها. و اینجا نکتهی اصلیِ فصل است — این ارقام را خودت میتوانی بشماری، پس ادعا نیستند:
- جمعِ خام (هر ردیف که قابل محاسبه بود، بدون تمیزکاری): ۴۵٬۹۶۰٬۹۰۰
- جمعِ درست (فقط تحویلشدهها، ردیفِ شکسته اصلاح، تکراری حذف): ۳۷٬۵۰۰٬۰۰۰
- اختلاف: ۸٬۴۶۰٬۹۰۰ — یعنی ۲۲.۶٪ بیشبرآورد.
و جالبتر اینکه این ۲۲.۶٪ از چند خطای جدا میآید که همجهت نیستند:
- +۸٬۴۰۰٬۰۰۰ از ردیف تکراری — بزرگترین سهم، از یک خطای کاملاً بیسروصدا.
- +۹۶۰٬۰۰۰ از دو ردیف مرجوعی که نباید شمرده میشدند.
- −۸۹۹٬۱۰۰ از ردیفِ شکسته که قیمتش بهجای ۴۵۰٬۰۰۰ برابر ۴۵۰ خوانده شد — این یکی جمع را کم میکند.
و همین آخری درسِ مهمی دارد: خطاها همدیگر را خنثی میکنند و پنهان میشوند. اگر فقط جمع کل را نگاه کنی، نمیفهمی سه خطای جدا داشتی — فقط یک عددِ نهچندان عجیب میبینی.
و برای شمارش مشتریها هم همان اتفاقِ فصل ۴.۲ میافتد:
گروهبندی خام ۶ مشتری میدهد، در حالی که مشتریِ واقعی
۴ تاست — چون «شركت ب» و «شرکت ب» جدا شمرده میشوند، و
000ی که از ردیفِ شکسته آمده هم بهعنوان یک مشتری
شمرده میشود.
قالببندی خروجی
گزارشِ عددی چند قاعده دارد که رعایتنکردنشان زحمتت را بیاثر میکند:
- واحد را بنویس. «۳۷٬۵۰۰٬۰۰۰» بدون واحد، نصف اطلاعات است.
- جداکنندهی هزارگان بگذار. خواندنِ ۳۷۵۰۰۰۰۰ از انسان کار میکشد و اشتباهخواندنش آسان است.
- بگو چه چیزی حذف شده. «مرجوعیها و یک ردیف تکراری حذف شدند» — بدون این، خواننده نمیداند عدد چه معنایی دارد.
- و عددِ خام را هم کنارش بیاور وقتی تفاوت جدی است. اینکه خواننده ببیند «خام ۴۵.۹ / پس از تمیزکاری ۳۷.۵» هم شفاف است و هم نشان میدهد کارِ واقعی انجام شده.
راستیآزمایی عددی: از کجا بفهمی عدد درست است
خواندنِ خروجی، راستیآزمایی نیست. چهار روشِ عملی، از ارزان به گران:
- ردیفها را بشمار. سادهترین و مؤثرترین. اگر فایل ۱۱ ردیف داده دارد و گزارش میگوید ۱۰ ردیف پردازش شد، یک ردیف جایی افتاده — و باید بدانی کدام و چرا.
- یک ردیف را دستی حساب کن. یکی کافی است، ولی ردیفِ عجیب را انتخاب کن نه ردیف اول را. ردیف اولِ هر فایل معمولاً سالم است؛ ارزش اطلاعاتیاش صفر است.
- مرتبهی بزرگی را بسنج. جمع باید حدوداً «تعداد ردیف × میانگین» باشد. اگر جواب ده برابرِ انتظار است، احتمالاً یک ردیف قیمتش اشتباه خوانده شده.
- و جمعِ اجزا را با کل بسنج. اگر فروشِ هر محصول را جدا داری، جمعشان باید با کل یکی باشد. این سادهترین تلهٔ خطاست و اغلب نصب نمیشود.
بهخاطر بسپار هیچوقت یک عدد را بدون شمارشِ ردیفها قبول نکن. عددِ نهایی نمیگوید چند ردیف در آن است — و رایجترین خطای پردازش داده، افتادنِ بیصدای چند ردیف است، نه محاسبهی غلط.
تمرین (ساختنی + توضیحی)
روی نمونهها/داده/فروش-۱۴۰۵.csv اجرا کن:
- فهرست خرابیها را بگیر و با هفت موردِ بخش ۸.۲.۲ مقایسه کن — چندتا را پیدا کرد؟
- جمع فروش را بگیر و ببین به ۳۷٬۵۰۰٬۰۰۰ میرسد یا نه.
- یکی از اعداد را دستی چک کن — و ردیف عجیب را انتخاب کن.
- و فایل
موجودی انبار.csvرا هم بده: کدام کالا زیر حداقل موجودی است؟
پاسخنامه — کدام خرابیها را پیدا میکند و کدام را نه
معمولاً پیدا میکند: قالبهای مختلف تاریخ · سلولهای خالی · ردیفِ ۷ ستونی · ارقام فارسی. اینها ساختاریاند و از روی شکل قابل تشخیصاند.
معمولاً پیدا نمیکند — و اینها گرانترها هستند:
- «شركت ب» با کافِ عربی. چون در خروجی عیناً یک شکل چاپ میشود، حتی وقتی جدا شمرده شده. تنها راهِ دیدنش، شمردنِ مشتریهای یکتاست: اگر ۶ گفت و تو ۴ تا میشناسی، همین است.
- ردیف تقریباً تکراری. چون دقیقاً یکسان نیست (یکی مشتری ندارد)، «حذف تکراری» ردش نمیکند. و این بزرگترین سهمِ خطا بود: ۸٫۴ میلیون از ۸٫۵ میلیون.
- مرجوعیها. و این تقصیرِ ایجنت نیست — یک تصمیم کاری است، نه یک خطای داده. او نمیداند مرجوعی باید کم شود یا نه، مگر بگویی. برای همین بخش «نکتهی طلایی» گفت فهرست تصمیمها را قبلش تأیید کن.
و انبار: دو کالا زیر حداقلاند — «محصول B» با موجودی ۸ در برابر حداقل ۲۵، و «محصول A (بستهبندی جدید)» با موجودی صفر در برابر حداقل ۲۰. اگر جوابی که گرفتی فقط یکی را گفت، احتمالاً صفر را بهعنوان «خالی» رد کرده — و صفر یک مقدار است، نه نبودِ مقدار. این یکی از کلاسیکترین خطاهای کار با داده است.