به نام خدا
سلام
این آخرین پست از پست های مربوط به تحلیل داده است و در این پست الگوریتم تشخیص اجتماع LPA رو بر روی داده ها با استفاده از کتابخانه networkx اعمال میکنیم.
اگر پست های قبلی رو نخوندید پیشنهاد میکنم از لینک های پایین دنبال بکنید. باعث میشه درک الگوریتمی که روی داده های اعمال میکنیم بهتر باشه.
قصد ندارم راجع به کتابخانه networkx مطلب بنویسم، و مقدماتی درباره این که چی هست و چه کمکی به ما میکنه رو براتون میگم و همچنین لینک های داکیومنت و توضیحات بیشتر رو در ادامه خواهم گذاشت.
اگر در زبان برنامه نویسی پایتون قصد استفاده از گراف و مدل سازی داده ها در قالب گراف و یا هر گونه مسئله ای که به گراف منتهی شود را داشته باشید، بهترین انتخاب networkx خواهد بود. بسیاری از الگوریتم های معروف به خوبی در این کتابخانه پیاده سازی شده اند. البته برای ابعاد بالا انتخاب مناسبی نیست و بیشتر فاز تحقیقاتی دارد و بعید میدونم در عمل در پروژه های سنگین استفاده بشه. ( البته که نمیدونم و شاید هم بشه )
در پست قبل به جایی رسیده بودیم که تمامی داده ها رو دریافت کردیم و دیگه با API توییتر کاری نداریم. من یک خروجی از پایگاه داده neo4j گرفتم و در قالب csv ذخیره کردم.
از اینجا به بعد پروژه رو روی کولب انجام دادم و لینک کولب رو هم براتون میزارم ( البته بعد از حذف کردن یک سری اطلاعات مهم )
در ابتدا باید گراف را در دیتافریم ها وارد کنیم و گراف را با توجه به وزن هر رابطه به گراف وزن دار تبدیل کنیم. اینکار باعث می شود تعداد یال ها کاهش پیدا بکند و رابطه بین هر جفت گراف یکتا شود.
در ادامه کد های مربوط به آن آورده شده است.
در کد های بالا در ابتدا داده ها ایمپورت شده است سپس با استفاده از متد groupby و فانکشن weight_group گراف را وزن دار کرده ایم.
در گام بعد باید گراف جهت دار خود را ایجاد بکنیم. برخی از الگوریتم ها و متد ها صرفا بر روی گراف بدون جهت و برخی صرفا بر روی گراف جهت دار اجرا می شوند. بنابراین باید از همان ابتدا نوع گراف را مشخص بکنیم. گراف جهت دار در networkx با کلاس DiGraph ایجاد می شود.
در ادامه کد های مربوط به ساختن کلاس آن را مشاهده می کنید.
همانطور که توضیح دادم ابتدا یک کلاس از گراف جهت دار ساخته ایم و در ادامه داده هایی که در دیتافریم قرار داشته اند را وارد کلاس کرده ایم.
در گام بعدی الگوریتم LPA را اعمال میکنیم و داده ها به چند بخش تقسیم بندی می شوند. در ادامه کد های آن آورده شده است.
بعد از اینکه الگوریتم را بر روی داده ها اعمال کرده ایم نتایج آن را به صورت تعداد اعضای هر گروه مشاهده می کنیم که در ادامه آورده شده است. با توجه به تصویر پایین 3 گروه بزرگ از میان هزار گره پیدا شده است. و باقی گروه ها به شدت کوچک هستند و به طور مثال گروه 22 نفری تماما برای ایران اینترنشنال می باشد.
بعد از این که از روی تعداد تونستیم گروه ها رو تشخیص بدیم، باید label های مربوط به هر گروه را به دیتا فریم اضافه بکنیم که برای هر سه گروه در کد ها آورده شده است.
دسته اول این تحقیقات که 633 عضو داشت با توجه به مشاهدات مختصر و بر اساس پروفایلشون جزو افراد عادی حساب میکنیم که بیشتر روزمره مینویسن و در مورد سیاست توییت میزنن.
دسته دوم که 111 عضو داره افراد فارسی زبان غیر ایرانی هستند که اکثرا افغانستانی بودند. کشف این دسته هم برام جالب بود و شاید با الگوریتم های nlp به خوبی جدا نمی شدند.
دسته سوم مربوط به افراد مشهور دولتی هست و برام جالب بود که با توجه به رابطه ها این افراد به خوبی دسته بندی شده اند.
تحقیق من تقریبا همینجا تموم میشه و من از اینجا به بعد یکم در مورد ایده های گسترش این تحقیق و مواردی که ممکنه جذاب ترش بکنه مینویسم.
اولین موضوعی که من رو خیلی ناراحت کرد و باباتش ناراحت هستم این هستش که حجم داده هام به نسبت چیزی که در ابتدا بهش فکر میکردم خیلی پایین تره و در حقیقت جذابیت این تحقیقات رو کم میکنه و کاربردش رو محدود میکنه.
مورد اول رو با داشتن تجهیزات و سرور قوی میشه حل کرد و همچنین روی الگوریتم های بیشتری مطالعه کرد و الگوریتم مناسب رو پیدا کرد.
دومین چیزی که من قصد داشتم انجام بدم و با تحقیقات فعلی ترکیب بکنم، استفاده از الگوریتم های متن کاوی و دسته بندی کاربرها و مقایسه این ها با هم بود که به دلیل محدودیت های زمانی به زمان دیگری موکول کردم و عملا ار دیتاست 25 گیگی متنی هیچ استفاده ای نکردم.
مورد سوم انتشار نتایج تحقیق هستش. یه ضعف بزرگ این تحقیق منتشر نکردن نتایج اون به صورت عمومی هستش. در آینده امیدوارم فرصت بکنم و نتایج این پژوهش رو در گیت هاب به همراه کد ها و نتایجش منتشر بکنم.
در نهایت یکی از کارهای جالبی که میشه انجام داد و جزو تحقیقات جامع شناسی هستش اینه که ترند های ایرانی توییتر رو به همراه نتایج این تحقیق ترکیب بکنیم و این که چه گروهی از جامعه چه چیزهایی رو ترند میکنند رو بررسی می کنیم که برای جامع شناس ها به نظرم خیلی جالب خواهد شد و تحقیق به صورت علمی جلو میره و نه صرفا بر اساس حدس و گمان.
ممنون که تو این چند قسمت من رو همراهی کردید و تجربیاتم رو خوندید.