وصال دانشور
وصال دانشور
خواندن ۴ دقیقه·۴ سال پیش

الگوریتم تشخیص اجتماعات LPA (قسمت پنجم داده کاوی توییتر)

به نام خدا

سلام

این آخرین پست از پست های مربوط به تحلیل داده است و در این پست الگوریتم تشخیص اجتماع LPA رو بر روی داده ها با استفاده از کتابخانه networkx اعمال میکنیم.

اگر پست های قبلی رو نخوندید پیشنهاد میکنم از لینک های پایین دنبال بکنید. باعث میشه درک الگوریتمی که روی داده های اعمال میکنیم بهتر باشه.

https://vrgl.ir/TKNSG


https://vrgl.ir/k6WW4


https://vrgl.ir/r7II2


https://vrgl.ir/PxJTF



کتابخانه networkx
کتابخانه networkx

قصد ندارم راجع به کتابخانه networkx مطلب بنویسم، و مقدماتی درباره این که چی هست و چه کمکی به ما میکنه رو براتون میگم و همچنین لینک های داکیومنت و توضیحات بیشتر رو در ادامه خواهم گذاشت.

https://networkx.github.io/

اگر در زبان برنامه نویسی پایتون قصد استفاده از گراف و مدل سازی داده ها در قالب گراف و یا هر گونه مسئله ای که به گراف منتهی شود را داشته باشید، بهترین انتخاب networkx خواهد بود. بسیاری از الگوریتم های معروف به خوبی در این کتابخانه پیاده سازی شده اند. البته برای ابعاد بالا انتخاب مناسبی نیست و بیشتر فاز تحقیقاتی دارد و بعید میدونم در عمل در پروژه های سنگین استفاده بشه. ( البته که نمیدونم و شاید هم بشه )

در پست قبل به جایی رسیده بودیم که تمامی داده ها رو دریافت کردیم و دیگه با API توییتر کاری نداریم. من یک خروجی از پایگاه داده neo4j گرفتم و در قالب csv ذخیره کردم.

از اینجا به بعد پروژه رو روی کولب انجام دادم و لینک کولب رو هم براتون میزارم ( البته بعد از حذف کردن یک سری اطلاعات مهم )

در ابتدا باید گراف را در دیتافریم ها وارد کنیم و گراف را با توجه به وزن هر رابطه به گراف وزن دار تبدیل کنیم. اینکار باعث می شود تعداد یال ها کاهش پیدا بکند و رابطه بین هر جفت گراف یکتا شود.

در ادامه کد های مربوط به آن آورده شده است.

https://gist.github.com/vessaldaneshvar/0ad8c0ec8f4899189408d1cc97b6cc6a

در کد های بالا در ابتدا داده ها ایمپورت شده است سپس با استفاده از متد groupby و فانکشن weight_group گراف را وزن دار کرده ایم.

در گام بعد باید گراف جهت دار خود را ایجاد بکنیم. برخی از الگوریتم ها و متد ها صرفا بر روی گراف بدون جهت و برخی صرفا بر روی گراف جهت دار اجرا می شوند. بنابراین باید از همان ابتدا نوع گراف را مشخص بکنیم. گراف جهت دار در networkx با کلاس DiGraph ایجاد می شود.

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

https://gist.github.com/vessaldaneshvar/093fb690caae911d533db8fd5198a8a0

همانطور که توضیح دادم ابتدا یک کلاس از گراف جهت دار ساخته ایم و در ادامه داده هایی که در دیتافریم قرار داشته اند را وارد کلاس کرده ایم.

در گام بعدی الگوریتم LPA را اعمال میکنیم و داده ها به چند بخش تقسیم بندی می شوند. در ادامه کد های آن آورده شده است.

https://gist.github.com/vessaldaneshvar/65f732abc8a9a86b047edfa75bc15831

بعد از اینکه الگوریتم را بر روی داده ها اعمال کرده ایم نتایج آن را به صورت تعداد اعضای هر گروه مشاهده می کنیم که در ادامه آورده شده است. با توجه به تصویر پایین 3 گروه بزرگ از میان هزار گره پیدا شده است. و باقی گروه ها به شدت کوچک هستند و به طور مثال گروه 22 نفری تماما برای ایران اینترنشنال می باشد.

lpa result
lpa result

بعد از این که از روی تعداد تونستیم گروه ها رو تشخیص بدیم، باید label های مربوط به هر گروه را به دیتا فریم اضافه بکنیم که برای هر سه گروه در کد ها آورده شده است.

اما این سه گروه چه افرادی هستند؟

دسته اول این تحقیقات که 633 عضو داشت با توجه به مشاهدات مختصر و بر اساس پروفایلشون جزو افراد عادی حساب میکنیم که بیشتر روزمره مینویسن و در مورد سیاست توییت میزنن.

دسته دوم که 111 عضو داره افراد فارسی زبان غیر ایرانی هستند که اکثرا افغانستانی بودند. کشف این دسته هم برام جالب بود و شاید با الگوریتم های nlp به خوبی جدا نمی شدند.

دسته سوم مربوط به افراد مشهور دولتی هست و برام جالب بود که با توجه به رابطه ها این افراد به خوبی دسته بندی شده اند.


اگه فرصت بیشتری داشتم چیکار میکردم؟

تحقیق من تقریبا همینجا تموم میشه و من از اینجا به بعد یکم در مورد ایده های گسترش این تحقیق و مواردی که ممکنه جذاب ترش بکنه مینویسم.

اولین موضوعی که من رو خیلی ناراحت کرد و باباتش ناراحت هستم این هستش که حجم داده هام به نسبت چیزی که در ابتدا بهش فکر میکردم خیلی پایین تره و در حقیقت جذابیت این تحقیقات رو کم میکنه و کاربردش رو محدود میکنه.

مورد اول رو با داشتن تجهیزات و سرور قوی میشه حل کرد و همچنین روی الگوریتم های بیشتری مطالعه کرد و الگوریتم مناسب رو پیدا کرد.

دومین چیزی که من قصد داشتم انجام بدم و با تحقیقات فعلی ترکیب بکنم، استفاده از الگوریتم های متن کاوی و دسته بندی کاربرها و مقایسه این ها با هم بود که به دلیل محدودیت های زمانی به زمان دیگری موکول کردم و عملا ار دیتاست 25 گیگی متنی هیچ استفاده ای نکردم.

مورد سوم انتشار نتایج تحقیق هستش. یه ضعف بزرگ این تحقیق منتشر نکردن نتایج اون به صورت عمومی هستش. در آینده امیدوارم فرصت بکنم و نتایج این پژوهش رو در گیت هاب به همراه کد ها و نتایجش منتشر بکنم.


در نهایت یکی از کارهای جالبی که میشه انجام داد و جزو تحقیقات جامع شناسی هستش اینه که ترند های ایرانی توییتر رو به همراه نتایج این تحقیق ترکیب بکنیم و این که چه گروهی از جامعه چه چیزهایی رو ترند میکنند رو بررسی می کنیم که برای جامع شناس ها به نظرم خیلی جالب خواهد شد و تحقیق به صورت علمی جلو میره و نه صرفا بر اساس حدس و گمان.

تشکر ویژه

ممنون که تو این چند قسمت من رو همراهی کردید و تجربیاتم رو خوندید.

lpaگرافnetworkxداده کاویتوییتر
دانشجوی ارشد بهینه سازی، گیک ، فعال در حوزه تحلیل داده ، عاشق دنیای کامپیوتر ها
شاید از این پست‌ها خوشتان بیاید