Data Visualization: The most used words in naming Iranian movies

تصویر زیر دویست کلمه ای است که در نام گذاری فیلم های سینمایی 42 سال اخیر ( 2537 فیلم ) بیشتر مورد استفاده قرار گرفته اند. این تصویر که حاصل چند ساعت بی کاری (!) امروز من است را میتوان نمونه ای از Data Visualization دانست.  
سایز کلمات متناسب با تعداد دفعاتی است که از آنها در نام گذاری فیلمها استفاده شده است. مثلا کلمه شب بیش از سایر کلمات در نام گذاریها استفاده شده است!

در این نوشته قصد دارم مراحلی که برای بدست آوردن این تصویر طی کرده ام را مختصرا شرح دهم.

0- هدف
قبل از هر کاری باید بدانیم چی می خواهیم. چی چیزی را می خواهیم نمایش دهیم. چطور می خواهیم نمایش دهیم. برای چه کسی می خواهیم نمایش دهیم. هر ابهامی در تعیین هدف بعدا گریبانمان را خواهد گرفت ( همانطور که در این نمونه اتفاق افتاد )
هدف ما پاسخ به این سوال است که : " در نام گذاری فیلم های ایرانی معمولا از چه کلماتی استفاده می شود؟ "
می خواهیم اطلاعات لازم را استخراج کنیم، آنها را پردازش کنیم و به کمک روشی مناسب آنها را به نمایش بگذاریم.

1- استخراج اطلاعات
بعد از کمی جست و جو توانستم منبع اطلاعاتی مناسب را پیدا کنم: بانک اطلاعاتی سوره سینما
در این سایت می توانیم اسامی تمام فیلم های سینمایی ایرانی ساخته شده بین سالهای 1350 تا 1391 را پیدا کنید. البته برای این کار باید کمی هم زحمت بکشید. لیست فیلمهای هر سال در صفحه ای با آدرسی شبیه نمونه زیر است:
http://www.sourehcinema.com/Years/In_This_Year.aspx?Year=1388
که با قرار دادن اعداد بین 50 تا 91 به جای رقم های قرمز شده در آدرس بالا می توانید فیلم های بین سالهای 50 تا 91 را ببینید. مثلا نمونه بالا صفحه ای است که حاوی لیست تمام فیلم های سینمایی ساخته شده در سال 88 است.
یک برنامه ساده با زبان سی شارپ نوشتم که این صفحات را تک تک دانلود می کرد. ویژگی جالب این صفحات این بود که همگی  ساختار مشترکی داشتند. در تمام صفحات لیست فیلم های در تگی با شناسه Hp قرار داشت. به این ترتیب با کمترین زحمت توانستم تمام اطلاعات داخل این تگها را استخراج کنم و با کمی تمیز کاری، لیست فیلمها را بدست بیاوم. تمام اسامی را همراه سال ساخت آنها در فایلی به فرمت CSV ذخیره کردم.

2- اصلاح اطلاعات
اطلاعات استخراج شده در مرحله قبل، برای هدف ما خام بودند. باید کمی پردازش روی آنها انجام می شد. با پردازش متنی ابتدای، کلمات هر اسم را جدا کردم و سپس تکرار هر کدام را شمردم و نتیجه را در یک فایل اکسل ذخیره کردم. مهمترین مشکلی که در این مرحله باید حل می شد عبارت بود از:
  • کلمات زاید
  • پسوندها
کلماتی مانند "از"، "در" یا "و" را می توان جزو کلمات زاید برای هدف ما دانست. حتی فعل هایی مانند "است" یا "بود" هم به درد ما نمی خورد. اما برای حذف این کلمات باید اول متناسب با هدفم، تعریفی از کلمات زاید می ساختم.
پسوندهایی مانند "ها"، "ات" و "ش" هم نباید باعث تمایز بین کلمات می شد. مثلا باید "مرد" و "مرد" و "مردها" را یکی در نظر می گرفتیم ( یا نه! ). این هم نیاز مند این بود که از پسوندها تعریف درستی ارائه دهیم. البته مشکل تنها با حذف این پسوندها حل نمی شد. مثل اگر تمام پسوندهای "ات" را حذف می کردیم، کلمه ای مثل "دونات" هم به " دون" تبدیل می شد! پس باید تشخیص می دادیم پسوند هر کلمه از چه نوعی است. برای این کار باید از یک بانک اطلاعاتی واژگان استفاده میشد.
پس مهمترین چیزی که در این مرحله فهمیدم، این بود که باید اول بدانم دقیقا می خواهم نتیجه چه چیزی را نشان بدهد. آیا برای من مهم است نشان بدهم کلمه "مردان" بیشتر از "مرد" استفاده شده است یا اینکه فقط می خواهم نشان بدهم کلمه "مرد" و مشتقاتش چقدر استفاده شده است. آیا برای من مهم است که در نتیجه نشان بدهم فعل "رفت" چقدر استفاده شده است یا قرار است مانند افعالی چون "است" یا "بود" آن را حذف کنم؟ اصلا لزومی دارد همین افعال "است" و "بود" را هم در نتیجه نشان بدهم یا نه؟
پس باید برمیگشتم و هدف را دقیقتر تعریف می کردم.
علاوه بر این مشکل رایج زبان فارسی را هم باید حل می کردم. وجود چند نوع "ی" یا "ک". 
در نهایت کلمات و تکرار هر یک را محاسبه کردم و در یک فایل اکسل دخیره کردم.

3- انتخاب قالب مناسب نمایش
برای نمایش ابزار متنوعی وجود دارد. ابزار کلاسیکی مانند نمودارهای Bar، Pie یا Bubble، ... . از طرفی دیگر راهکارهای جالب و یک بارمصرفی(!) هم توسط افراد مختلف استفاده شده است که می شد از آنها الهام گرفت. در نهایت سومین راه این بود که خودم یک روش مناسب و جدید برای ارائه اطلاعات پیدا کنم.
با توجه به جنس اطلاعاتی که باید نمایش داده می شد، تعداد ویژگی ها، تناسب متغیرهای اندازه گیری شده با نمایش گرافیکی آن و ... از میان این راهها موجود، تصمیم گرفتم از یک روش مناسب و آشنا استفاده کنم: Wordle (مدتی پیش در مورد Wordle و ابزارهای مشابه آن و همچنین الگوریتمهای آنها بررسی های انجام دادم که بعدا در مورد آن صحبت می کنیم). Wordle از جمله روشهای بصری سازی خانوده Tag Cloud محسوب می شود. ابزار ارائه شده برای ساخت Wordle بسیار قوی و انعطاف پذیر و جالب توجه است.

4- بصری سازی
در آخرین قدم باید اطلاعات پردازش شده را به شکال گرافیکی مورد نظر تبدیل می کردم. برای این کار از Wordle استفاده کردم. این ابزار آنلاین از روش های مختلفی ورودی خود را تامین می کند. من از روش دادن متن به صورت مستقیم استفاده کردم. این ابزار سایز هر کلمه را بر اساس تعداد دفعات تکرار آن تعیین می کند. برای همین فایلی متنی ساختم که هر کلمه را به تعداد دفعات تکرار آن ( که در مرحله دوم محاسبه کردم ) در آن می نوشتم. سپس این فایل را به Wordle دادم تا نمودار را برای من تولید کند. با کمی دستکاری تنظیمات این ابزار توانستم خروجی دلخواه را بدست بیاروم.

آینده
این 5 مرحله را امروز، و در وقت کوتاه بی کاری ام انجام دادم. برای همین کدها در هم و برهم هستندو ممکن است در جاهایی دچار اشکال باشند. به علاوه هنوز هم در مورد تعریف دقیق هدف دچار مشکل هستم! در هر صورت در اولین فرصت این مشکلات را حل خواهم کرد و کدها را هم اینجا قرار خواهم داد.
همچنین در فرصتی مناسب در مورد تجارب مفیدی که طی این کار بدست آوردم و مطالبی که از آنها عبور کردیم، خواهم نوشت. برای مثال در مورد:

  • دانلود فایل های HTML و مشکلی که ممکن است در زمان استخراج متن فارسی از آنها با آن بر خورد کنید.
  • Wordle و الگوریتم آن
  • پردازش متن فارسی برای محاسبه تکرار
  • روشی ساده برای کار کردن با فایلهای Excel در محیط دات نت
  • و از همه مهمتر اطلاعات جالب دیگری که از پردازش این اطلاعات به دست آوردم. مثلا بیشتر فیلم های سینمایی ایرانی 9 حرف دارند یا اینکه طولانی ترین اسم رسمی برای یک فیلم 50 حرف دارد!