انبار کوهسار در کرمانشاه سه سال خرید عمده را در یک سامانه صندوق ثبت کرده بود و میخواست بداند بزرگترین تامینکنندهاش کیست. جواب اول گندمکاران دشت سیلاخور بود، با ۹۸۷۰ کیلوگرم. جواب درست لبنیات کوهسار بود، با ۱۱۳۶۰ کیلوگرم، که در آن فایل به چهار املا نوشته شده بود و هیچکدامشان به تنهایی از ۹۸۷۰ بیشتر نبود.
نامی که چهار جور نوشته شده تا وقتی کسی یکیشان نکند چهار تامینکننده است. بزرگترین آن چهار املا به تنهایی ۵۲۴۰ کیلوگرم بود، یعنی دوم جدول، جلوتر از زعفران قائنات با ۳۴۱۰ و پشت سر گندمکاران. هیچ خطایی در هیچ فرمولی نبود؛ جمعها همه درست بودند و روی چیزی جمع زده میشد که چهار چیز شمرده میشد. برای دو هفته قرارداد بر اساس همان جدول بسته شد.
پیش از هر جمعی، مقدارهای یکتای ستون را بشمارید
این ارزانترین کاری است که میشود کرد و بیشترین چیز را بیرون میکشد: پیش از اعتماد به هر جمعی، مقدارهای یکتای آن ستون را بشمارید. اگر انبار کوهسار با هجده تامینکننده کار میکند و ستون نام بیستوشش مقدار یکتا دارد، هشتتایش املای دوم یک نفر است و کار همانجا شروع میشود.
در فارسی این عدد همیشه بزرگتر از چیزی است که انتظار دارید، به چهار دلیل که هیچکدام تقصیر کسی نیست. نیمفاصله، که یک کلمه را دو جور مینویسد. کیبورد عربی، که حرفهای شبیه به هم و متفاوت تولید میکند. ترتیب نام، «لبنیات کوهسار» در برابر «کوهسار، لبنیات». و پیشوندی که گاهی هست و گاهی نیست، مثل «شرکت» و «آقای». هر چهارتا با چند خط جایگزینی برطرف میشوند، و هیچکدام خودشان را اعلام نمیکنند.
ستونی که واحدش ثبت نشده
یک ستون که واحدش ثبت نشده، جمعش را ده برابر یا یکدهم میکند. این خطای مخصوص فارسی است و در هیچ راهنمای انگلیسی نیست: ستون مبلغ در فایل کوهسار بعضی سطرها ریالی بود و بعضی تومانی، چون دو نفر آن را پر کرده بودند و هیچجا ننوشته بود کدام است.
تفاوتش با یک سطر پرت این است که سطر پرت را نمودار نشان میدهد و این یکی را نه، چون هر دو گروه منظم و باورپذیرند. تنها راه پیدا کردنش نگاه کردن به توزیع ارقام است: اگر مبلغها دو کوهان دارند که فاصلهشان تقریباً ده برابر است، ستون دو واحد دارد. در فایل کوهسار ۶۷ سطر اینطور بودند و کنار گذاشته شدند، چون هیچ راهی نبود که مطمئن شویم کدام کدام است.
آنچه از یک برونریز سهساله باقی ماند
در مجموع ۲۶۸ سطر کنار گذاشته شد و هر سه بریدن دلیل خودش را داشت. صندوق ۲۴۱۰ سطر تحویل داد. با برداشتن ۱۲۶ سطر آزمایشیِ روز مهاجرت، که همه تاریخ یک روز را داشتند، ۲۲۸۴ سطر تحویل واقعی ماند. ۶۲ سطر وزن نداشتند و ۲۲۲۲ سطر باقی گذاشتند، و خالی صفر نیست: اگر خالی را صفر بگیرید میانگین وزن هر تحویل را پایین کشیدهاید، و اگر حذفش کنید دستکم میدانید چند سطر را حذف کردهاید. با کنار گذاشتن همان ۸۰ سطری که واحد مبلغشان معلوم نبود، ۲۱۴۲ سطر قابل شمردن ماند.
هر یک از این سه بریدن یک تصمیم است که کسی گرفته و میتواند از آن دفاع کند، و همین است که آنها را از «داده خراب بود» جدا میکند. هرچه را عوض کردید بنویسید، وگرنه جواب تکرارپذیر نیست. فصل بعد همین برونریز دوباره میآید و اگر آن سه خط جایی نوشته نشده باشد، تصمیمها کمی فرق میکنند و دو فصل با هم قابل مقایسه نیستند.
ترتیب
چهار حلقه، و همانی که معمولاً بسته کشیده میشود
هیچکدام از دیگری مهمتر نیست، و جواب فقط به اندازه همان حلقهای خوب است که از رویش رد شدهاند.
- به دست آوردنشآنچه کسی تصمیم گرفته ثبت کند تعیین میکند چه میشود پرسید
- تمیز کردنشحلقهای که بیشتر دورهها بسته میکشندش و بیشتر شغلها هفته را رویش میگذارند
- تحلیلشمیانه کنار میانگین، و نگاهی به هرچه با آن دو نمیخواند
- نشان دادنشجایی که یک تحلیل صادق هم میتواند با محورش گمراه کند
حلقه باز سختترینشان نیست. آن است که خرابیهایش خودشان را اعلام نمیکنند، و این خاصیت دیگری است و بدتر.
ایست: تمیز کردن با دست، در یک صفحهگسترده
کار اینجا میایستد و ایستادنش شبیه کار کردن است. کسی فایل را در یک صفحهگسترده باز میکند، چهار املا را با دست یکی میکند، سطرهای آزمایشی را پاک میکند، و نتیجه را ذخیره میکند. نیم روز طول میکشد و جواب درست هم درمیآید.
چیزی که از بین رفته این است که هیچکدام آن تصمیمها جایی ثبت نشدهاند. فصل بعد همان نیم روز دوباره خرج میشود، با تصمیمهای کمی متفاوت، و کسی نمیتواند بگوید تغییرِ عدد از بازار آمده یا از تمیز کردن. راه بیرون آمدن مکانیکی است: همان کارها را به جای موس، در چند خط بنویسید، حتی اگر بدخط باشند. یک فایل دهخطی که بشود دوباره اجرا کرد از یک صفحهگسترده تمیزِ بیتاریخچه بیشتر میارزد.
وقتی جدول تمیز شد، دو چیز که هنوز گمراه میکنند
میانه از یک سطر بیمعنی جان سالم به در میبرد و میانگین نه. در فایل کوهسار یک تحویل ۹۸۰۰ کیلویی ثبت شده بود که در واقع یک اشتباه تایپی روی ۹۸۰ بود؛ میانگین وزن تحویلها را محسوس بالا برد و میانه اصلاً تکان نخورد. عادت درست این است که این دو را همیشه کنار هم گزارش کنید: جایی که از هم فاصله میگیرند، یک سطر دارد جدول را میراند.
و در آخر، محور بریده یک ادعاست، و معمولاً همان ادعایی نیست که در نظر بوده. نموداری که محور عمودیاش از ۹۰۰۰ شروع شود، اختلاف کوهسار و گندمکاران را چند برابر بزرگتر از آنچه هست نشان میدهد. اگر بریدن محور لازم است، خودش باید روی نمودار نوشته شود، چون کسی که یک ثانیه نگاه میکند شکل را میخواند نه اعداد را.
پیش و پس از یک یکیسازی
یک سطر جابهجا شد، و همان کافی بود که جواب عوض شود
یکی کردن چهار املای یک نام، جمع یک تامینکننده را عوض کرد و بقیه سطرها را دقیقاً سر جایشان گذاشت.
همانطور که صادر شدپس از یکی شدن املاها
- لبنیات کوهسارچهار املا، یک تامینکننده، سه سال۵۲۴۰ کیلوگرم۱۱۳۶۰ کیلوگرم
- گندمکاران دشت سیلاخوراز اول تا آخر یک جور نوشته شده. هیچچیز جابهجا نشد۹۸۷۰ کیلوگرم۹۸۷۰ کیلوگرم
- زعفران قائناتاینجا هم چیزی جابهجا نشد، که دلیل کشیدنش همین است۳۴۱۰ کیلوگرم۳۴۱۰ کیلوگرم
دو سطری که تکان نخوردند به اندازه آن یکی که خورد کار میکنند. یک پیش و پس که فقط سطر عوضشده را نشان بدهد، تبلیغ همان تغییر است.
چهار کاری که هر تحلیل از آنها میگذرد
اول جایی که داده از آن میآید، پیش از آنکه به درد بخورد، چون آنچه کسی تصمیم گرفته ثبت کند تعیین میکند بعدها چه سوالی میشود پرسید. بعد هشتاد درصدی از کار که کسی از آن عکس نمیگیرد، که همین صفحه بیشترش درباره آن بود. بعد تبدیل یک جدول به یک جواب، و آخر دیدنی کردن یافته، جایی که یک تحلیل صادق هم هنوز میتواند گمراه کند. چیزی که تحلیل واقعاً در آن انجام میشود در هر چهار مرحله لازم میشود و به تنهایی مرحله نیست.
ترتیبی که مسئلهساز است، شروع از حلقه سوم است. تحلیلی که روی ستون نام تمیزنشده اجرا شود جواب میدهد، جواب باورپذیری هم میدهد، و هیچ علامتی ندارد. حلقه دوم سختترین نیست؛ آن است که خرابیهایش خودشان را اعلام نمیکنند، و این خاصیت دیگری است و بدتر.
سه ابزاری که هیچکدام حساب نمیخواهند
DuckDB از ۲۰۲۶ جای بالا آوردن یک پایگاه داده برای خواندن یک فایل را گرفته است: روی همان فایل صادرشده مستقیم پرسوجو میزند و شمردن مقدارهای یکتای یک ستون در آن یک خط است. رایگان و متنباز، و روی دستگاه خودتان اجرا میشود.
OpenRefine از ۲۰۲۶ جای یکی کردن املاها با دست در یک صفحهگسترده را گرفته؛ املاهای نزدیک را خوشهبندی میکند و مهمتر از آن، هر کاری که کردید را به شکل یک فایل قابل اجرای دوباره نگه میدارد، که همان چیزی است که تمیز کردن با دست از دست میدهد. pandas هم از ۲۰۲۶ همچنان جای نوشتن حلقه روی سطرها را گرفته و زبان مشترک این کار است. هر سه رایگان و متنباز و محلیاند و هیچکدام حساب یا کارت خارجی نمیخواهند، که یعنی هیچ بهانهای برای بیرون فرستادن داده مشتری نیست.
این ماده خام همان چیزی است که کار کردن با مدلها، فهمیدنشان، و ساختن با آنها بالاترین پلهاش را روی آن میسازد: جایی که هیچکس تکتک خروجیها را نمیخواند و یک جمع بیرون میآید. مدلی که روی ستون نام تمیزنشده آموزش ببیند دقیقاً همان خطا را یاد میگیرد، که موضوع مدلهایی که از داده یاد گرفته میشوند، نه با دست نوشته است. و همین جدولها وقتی درباره کمپین و ترافیک باشند، اسمشان عوض میشود نه کارشان، که آن نتیجهای بودن که کلیک میشود، بیآنکه پولش را داده باشید بخشی از آن است.
چیزی که این صفحه ندارد، جواب این است که آن چهار املا از کجا آمدند. تا وقتی فرم ثبت تحویل یک فهرست بازشو نشود و تایپ آزاد بماند، هر فصل دوباره ساخته میشوند، و تمیز کردن به جای یک کار یکباره، یک اشتراک ماهانه است.