به نام خدا
سلام
تو این پست میخوام راجع به پروژه پایانی مقطع لیسانس که 18 شهریور 1399 دفاع کردم توضیح بدم.
دلیل این که حدود پنج ماه هست پست نذاشتم این هست که ، خیلی فشرده درگیر پروژه پایانی بودم و اصلا فرصت نوشتن رو نداشتم. برای توضیح جامع و کامل پروژه پایانیم فکر کنم نیاز به 5 6 تا پست 10 دقیقه ای باشه.
موضوع پروژه پایانی من تحلیل داده های توییتر با الگوریتم های داده کاوی هستش.
خب عنوان پایان نامه خیلی گنگ و نامفهومه ، اولا توییتر هزار مدل داده داره. دوما هزار مدل الگوریتم برای داده کاوی وجود داره. دلیل اینکه عنوان پایان نامه من انقدر گنگ و نامفهومه این هستش که وقتی شروع کردم فقط می دونستم که میخوام درباره داده کاوی باشه چون هم زمان زیادی برای یادگیریش صرف کردم و هم علاقه زیادی نسبت بهش دارم. و به همین دلیل دنبال چند تا موضوع مرتبط با داده کاوی گشتم ، از بین چند تا موضوعی که انتخاب کرده بودم ، داده های توییتر رو استاد راهنما انتخاب کرد. و تحقیق و کاری که روی داده های توییتر انجام دادم بعد انتخاب عنوان پایان نامه بود. از طرفی هم میترسیدم که عنوان پروژه ام رو چیزی بذارم که نتونم انجامش بدم به خاطر همین یه عنوان جنرال برای پایان نامه انتخاب کردم که راه گریزی داشته باشم. ولی الان که تکمیل شده و دفاع کردم، میتونم عنوان بهتری براش انتخاب بکنم :
من تو این پست ابتدا مقدمات بحث رو مطرح میکنم و توی پست های بعدی درباره قسمت های مختلف پروژه مفصل تر شرح میدم.
سخت ترین قسمت پایان نامه من مربوط میشه به نوشتن مرور ادبیات ، از طرفی بحث گراف خیلی بحث گسترده ای هست و تقریبا اکثر افراد هیچ پیشینه ذهنی راجع بهش ندارند ، حتی بچه هایی که تو دانشگاه مهندسی میخونن هم بیشترین چیزی که ازش میدونند مربوط میشه به فصل اول کتاب گسسته چهارم دبیرستان. بنابر این هم خودم باید دربارش خیلی میخوندم و هم به نحوی نگارشش رو انجام می دادم که قابل فهم باشه. تو پست بعدی که درباره مرور ادبیات میخوام بنویسم، از پایه درباره گراف ها خیلی خوانا و قابل فهم مینویسم ( به زبون خودمونی) و کمتر شبیه پایان نامه که پر از رفرنس و خشکه توضیح میدم. توی مرور ادبیات یه بخشی هم درباره توییتر توضیح میدم که خب به نظرم توی این پست ها لازم نیست و توضیح واضحاته.
من برای مرور ادبیات یک کتاب خوندم، حدودا 5 6 تا مقاله و تعداد زیادی پست بلاگ. که خب سخت ترین قسمتش همون کتاب بود و هم حجم بالایی داشت و هم ترجمه خوبی نداشت و از حوصله خارج بود.
کتابی که من خوندم تحلیل شبکه های اجتماعی (د. مهدی اسماعیلی، نیازدانش) بود. که ترجمه کتاب Social Network Data Analytics هستش .
یکی از بخش های پر چالش پروژه بحث جمع آوری داده های توییتر بود که من قبل از این که مباحث تئوری رو شروع بکنم شروع به جمع آوری داده کردم و توی پستی که راجع به جمع آوری داده خواهم نوشت میگم روش بهینه جمع آوری داده چی بود و چه اشتباهاتی در حین جمع آوری داده مرتکب شدم. البته برای من جذاب ترین قسمت انجام این پروژه مربوط به همین قسمت هستش و خیلی خوشحالم که این پروژه رو انجام دادم و به شدت باعث شد تجربه ام نسبت به کار با بیگ دیتا بالا بره و حس کردم که چقدر نیاز دارم آپاچی هدوپ رو یاد بگیرم.
در این قسمت مفصل راجع به Api توییتر خواهم نوشت، از مشکلاتی که برای فعال سازی اکانت توسعه دهنده داشتم تا محدودیت های EndPoint ها و جمع آوری رابطه بین افراد و توییت ها .
همینطور درباره پایگاه داده های گرافی مفصل مطلب خواهم نوشت و تجربه ای که در عمل از Neo4j , MongoDB , SQL Server داشتم رو بیان خواهم کرد .
در انتها باید بگم که زبان برنامه نویسی که برای جمع آوری داده و مدلسازی ازش استفاده کردم پایتون هست و از کتابخونه tweepy استفاده کردم. و برای جمع آوری داده از یه سرور مجازی ضعیف استفاده کردم (در واقع یه ابرک از سروریوس آروان گرفتم) که مشکلات فیلترینگ و همچنین حجم بالای داده رو بر طرف بکنم.
من هم مثل اکثر افرادی که تو حوزه داده کاوی مشغول هستند، برای تمیز کردن داده ها و پیش پردازش ها از دیتافریم پانداس استفاده میکنم ولی این ابزار برای مقدمات کار و پیش پردازش ها مناسب هستند و الگوریتم های گراف کاوی رو نمیتونیم توی مجموعه scipy پیدا بکنیم و از یه کتابخونه مجزا برای تحلیل های مرتبط با گراف استفاده میشه. پایتون یه کتابخونه برای گراف داره به اسم networkx که بهترین کتابخونه پایتونی برای گراف هستش و من هم برای اجرای الگوریتم ها از این کتابخونه استفاده کردم. که اخیرا هم روی یکی از ایشوهاش پول ریکوئست فرستادم
رسم گراف و روابط بینشون تو ابعاد بالا به سادگی رسم داده های یک نمودار x-y نیست و پیچیدگی زیادی داره. بنابراین من از یه ابزار مجزا برای این کار استفاده کردم که تصویرش رو اول پست به عنوان دورنما دیدید. Graphistry به نظر من بهترین ابزار برای ترسیم گراف ها هستش و اگر گراف با ابعاد بالا دارید ، این سرویس برای این ایجاد شده. البته بسیاری از امکاناتش هزینه بالایی داره.
من تو این پست یک مقدماتی رو مطرح کردم و در پست های آینده درباره هر کدوم به تفصیل خواهم نوشت (البته اگر تنبلی نکنم). کد های مربوط به جمع آوری داده و نوت بوک های ژوپیتری که برای تحلیل داده نوشتم رو روی گیت هاب قرار خواهم داد. احتمالا یه سایت هم برای آموزش مفاهیم گراف کاوی درست میکنم چون که محتوای فارسی برای تحلیل شبکه های اجتماعی کمتر توی وب فارسی وجود داره و من تنها چیز مناسبی که پیدا کردم مربوط به آموزش های این سایت بود.