۱. منبع داده
دادهها از سامانههای portal.mosharekatha.ir و my.mosharekatha.ir استخراج و در مخزن Iran-Private-School-Fees منتشر شدهاند: ۲۴٬۶۴۸ مدرسه، ۳۲ استان، ۵۵۸ ناحیه. داشبورد هیچ دادهای را تغییر نمیدهد؛ فقط از روی فایل schools_data.parquet خروجی نمایشی میسازد و سلامت دیتاست با validate_data.py کنترل میشود.
۲. قانون «آخرین شهریه ثبتشده» (واحد: تومان)
همه مبالغ داشبورد به تومان (ریال ÷ ۱۰) نمایش داده میشوند. چون فرایند ابلاغ شهریه ۱۴۰۵ هنوز برای همه مدارس تمام نشده (پوشش فعلی حدود ۵۳٪)، در همه کارتها، جدولها، نمودارها و گراف این قانون اعمال میشود:
- اگر مدرسه جمع ۱۴۰۵ داشته باشد، همان نمایش داده میشود (بدون برچسب).
- وگرنه جمع ۱۴۰۴ با برچسب ریز (۱۴۰۴) میآید.
- رتبهبندی «۲۰۰ مدرسه گرانتر»، سقفوکفها و اندازه گرههای گراف هم با همین عدد نمایشی ساخته میشوند.
- فقط نمودارهای «روند» سالخالصاند (میانه واقعی هر سال).
۳. قرنطینه مقادیر نامعتبر و حد نصاب (شفاف)
دو فیلتر کیفی روی نمایش اعمال میشود؛ دیتاست دستنخورده میماند:
- سقف: مقادیر بالای ۵۰ میلیارد ریال ناممکناند (یک نمونه واقعی: فوقبرنامه ۱۴۰۴ یک مدرسه در خرمشهر). در نمایش و رتبهبندی کنار گذاشته و فهرست دقیقشان در
national.json → quarantinedثبت است. - کف: جمعهای زیر ۱۰ میلیون ریال (۱ میلیون تومان) یعنی «شهریه واقعی ثبت نشده» (صفر/خالی) و در همه خروجیها missing حساب میشوند؛ شمارشان در
national.json → n_below_minimumاست.
۴. خوشهبندی موسس
نام «موسس» هر مدرسه نرمالسازی میشود (یکدستسازی ی/ک/ه، حذف پیشوندهایی مثل موسسه/آموزشی/فرهنگی/غیرانتفاعی و اعداد) و مدارس همنامخانواده با هش یکسان خوشه میشوند: ۴٬۲۸۳ خوشه چندمدرسهای. در گراف، اعضای هر خوشه با زنجیره (i−1 → i) به هم وصلاند: خط سبز ضخیم یعنی نام مدرسهها هم یکسان است، خطچین کمرنگ یعنی موسس یکی ولی نام متفاوت است. فهرست خوشهها برای بازبینی انسانی در reports/founder_clusters.csv است.
۵. چیدمان گراف
چون ۲۴٬۶۴۸ گره را نمیشود زنده جانمایی کرد، مختصات همه گرهها آفلاین و قطعی محاسبه شده (Seed ثابت؛ اجرای مجدد بایتبهبایت یکسان): استانها روی دایره بزرگ، ناحیهها روی دایره استانی، مدارس روی حلقه دور ناحیه خودشان با ۲۵٪ کشش به مرکز خوشه موسس. اندازه گره = 2 + 7·√(آخرین شهریه / بیشینه). یالها در فایل ذخیره نشدهاند و در مرورگر بازسازی میشوند. مدارس بدون شهریه ثبتشده خاکستری و ریزند و یال ندارند (دادهشان کامل است، فقط کمرنگاند). رندر دو مرحلهای است: اول گرهها (فریم اول سریع)، بعد یالها.
نمای پیشفرض روی کل کشور است و نما بهطور خودکار اندازه کادر را پر میکند. منوی کشویی «تفکیک استانی» گراف را به یک استان محدود میکند (یا به کل کشور برمیگرداند): در این حالت فقط گرهها و یالهای همان استان ساخته میشوند، شمارنده تعداد مدرسههای همان استان را نشان میدهد و نما دوباره روی همان استان تنظیم میشود. اگر از جستوجو مدرسهای خارج از استان انتخابشده را بزنید، نما خودکار به استان همان مدرسه میپرد. هیچ مدرسهای حذف نمیشود؛ فقط از نمای جاری کنار گذاشته میشود.
تعامل با گراف. با بردن ماوس روی هر گره، فقط همان نقطه و یالهای خودش روشن میمانند و بقیه گراف تقریباً محو میشود (emphasis.focus='adjacency' همراه با blur). گرهها را میتوان با کشیدن جابهجا کرد؛ یالهای متصل همراه گره حرکت میکنند. چون بازسازی کل ۲۵٬۲۰۶ گره پرهزینه است، جابهجاییها فقط در همان نشست مرورگر نگه داشته میشوند (پیش از هر بازسازی، مختصات از خود نمودار خوانده و دوباره اعمال میشود) و با «بازنشانی نما» به چیدمان اصلی برمیگردند. هنگام نگهداشتن ماوس روی یک مدرسه، کل خوشهٔ همان مؤسس در پنل کناری فهرست میشود و روی خود گراف، خطهای هممؤسس پررنگتر از یالهای ناحیه نمایش داده میشوند تا فقط هممؤسسها به چشم بیایند. منوی «حداقل اشتراک مؤسس» هم یک آستانه است: بزرگترین اشتراک در کل دیتاست **۵۰ مدرسه** است و آستانههای پیشنهادی ۲، ۳، ۴، ۵، ۱۰، ۱۵، ۲۰، ۳۰ و ۴۰ مدرسهاند؛ گزینهٔ پیشفرض «بدون فیلتر» است. با انتخاب آستانهٔ K، تمام خوشههایی که کمتر از K مدرسه دارند (هم گرهها و هم یالهایشان) پنهان میشوند؛ مدارسِ بدون مؤسس مشترک همیشه دیده میشوند. بخش «اشتراک مؤسس به تفکیک استان» برای هر آستانه، هم **کل کشور** و هم **به تفکیک هر ۳۲ استان** (تعداد خوشه، تعداد مدرسه و بزرگترین اشتراک) را نشان میدهد. توجه: اندازهٔ اشتراک روی **همهٔ** مدارس آن مؤسس شمرده میشود، نه فقط مدارسی که شهریه ثبتشده دارند. نام مدارس از خود فایل گراف (`school_names`) خوانده میشود، نه از ایندکس ۸ مگابایتی جستوجو.
هشدار: «مؤسس مشترک» قطعی نیست. در دیتاست هیچ شناسهٔ یکتای شخصی (مانند کد ملی) ثبت نشده است؛ نرمالسازی و خوشهبندی مؤسسان فقط بر پایهٔ نام انجام میشود. نتیجه دو خطای محتمل دارد: یک نام مشترک ممکن است به دو شخص یا دو شرکت متفاوت تعلق داشته باشد (خوشهٔ کاذب)، و یک مؤسس واقعی ممکن است زیر نامهای متفاوت ثبت شده باشد و به چند خوشهٔ جدا بیفتد (خوشهٔ ناقص). بنابراین «مدارس با مؤسس یکسان» در این داشبورد یک نشانهٔ احتمالی است، نه رابطهٔ قطعی مالکیت. به همین دلیل در گراف، یالهای مؤسسی پررنگتر از یالهای ناحیه نمایش داده میشوند تا بهعنوان «احتمال» خوانده شوند، و دیتاست اصلی دستنخورده میماند.
۶. سقف و کف، میانه و پوشش
- سقفوکف هر مقطع: ارزانترین و گرانترین مدرسه به تفکیک «بقیه کشور» و «تهران» (تهران = شهر تهران + شهرستانهای تهران).
- میانه/کمترین/بیشترین هر استان در هر مقطع در سه بخش کشویی (details) با جدول و دانلود CSV جداگانه.
- میانهها روی اعداد نمایشی (۱۴۰۵-first، به تومان) حساب میشوند؛ چارک اول/سوم در تولتیپ نمودار مقطع هست.
- پوشش ۱۴۰۵: سهم مدارس دارای جمع ۱۴۰۵؛ چون زیر ۶۰٪ است، کارت هشدار نمایش داده میشود.
۷. فناوری و کارایی
- صفحات استاتیک؛ نمودارها ECharts 5، جستوجو Fuse.js (روی دستگاه کاربر)، فونت Vazirmatn — همه از CDN.
- فایلهای سنگین (گراف ∼۳٫۳MB، ایندکس جستوجو ∼۶MB، ثبتشدههای ۱۴۰۵ ∼۳MB) فقط با کلیک کاربر و با نوار پیشرفت دانلود میشوند، بعد در حافظه مرورگر (Cache) میمانند؛ صفحه گراف اگر داده را در حافظه ببیند خودش و بدون کلیک بارگذاری میشود. دانلود گراف تایماوت ۱۵۰ ثانیهای و دکمه تلاش مجدد دارد.
- خروجی PNG هر نمودار، پانوشت «IranOpenDataLab • github.com/IranOpenDataLab» را با فونت وزیرمتن زیر تصویر میافزاید.
۸. محدودیتها
- سامانههای مبدأ از خارج ایران در دسترس نیستند؛ بهروزرسانی داده دستی و از داخل ایران انجام میشود.
- مبالغ به توماناند؛ ساعت فوقبرنامه در جمعها نیست.
- پروفایل هر مدرسه لینک مستقیم صفحه آن در سامانه را هم دارد.