تحلیلی بر آمار فالوئرهای پیج‌های ایرانی در اینستاگرام - قسمت ۲

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

و اما دوباره اینستا... به پیشنهاد یکی از کامنت‌های پست قبلی... تصمیم گرفتم که یک decision tree از روی این فیچرها بسازم. حس کردم که این کار نسبتاً سنگین‌تری از کارهای قبلیم هستش و نیاز به کامپیوتر قوی‌تری دارم. رم VPS ام ۴ گیگ بود و سی‌پی‌یوی درست حسابی‌ام هم نداشت. بنابراین روی اوردم به اسپارک. اسپارک یه framework برای تحلیل داده در مقیاس‌های خیلی بزرگتر هستش و یه سری امکانات خیلی خوبی داره. ما تو شرکت خیلی زیاد از اسپارک استفاده می‌کنیم و خیلی راه دستم بود استفاده ازش. موقعی که تو شرکت داشتیم یاد می‌گرفتیمش، یه کورس edX رو داشتم می‌دیدم و یادم بود که شرکت databricks یه سری کلاستر اسپارک کوچولو برای تست به ملت می‌دادش که بتونن باهاش اسپارک کد بزنن و یاد بگیرن. من هم از اون کلاسترهای تستیش برای تحلیل داده‌ها و ساختن یک decision tree استفاده کردم. decision tree یک مدل یادگیری ماشینی هستش که خروجیش یک درخت تصمیم گیری هستش. شاید یه چیزی شبیه به اکیناتور. می‌تونید یه غول جادو فرضش کنید که هی از شما می‌پرسه، آیا فلان صفحه رو فالو می‌کنید، شما می‌گید بله یا خیر، بعد دوباره یه صفحه دیگه رو ازتون می‌پرسه و بعد از چندین سوال و جواب پیش‌بینی می‌کنه که شما یک صفحه‌ی خاص (‌که قبلاً ازتون نپرسیده بوده!) رو فالو می‌کنید یا خیر.
اسپارک هم خودش مقوله‌ی سنگینی هستش که توضیحش در یک پست وبلاگ نمی‌گنجه. به طور خلاصه یک سری مفاهیم و ساختمان‌داده‌های خوبی داره و مجبورتون می‌کنه یه جوری کد بزنید که بشه توزیعش کرد روی چند تا کامپیوتر و در نتیجه روی داده‌های خیلی حجیم هم جواب می‌ده.

آماده‌سازی دیتا و اجرا

اول باید یه خورده داده رو صاف و صوف می‌کردم. برای این کار از لیست ID هایی که داشتم یه جدول ساختم که هر ستونش یک پیج اینستا و هر ردیفش یک کاربر اینستا رو نشون می‌داد و هر سلول از جدول نشون می‌داد که آیا کاربر X پیج Y رو فالو می‌کنه یا نه. به زبان یادگیری ماشین ستون‌ها ویژگی‌ها، یا featureهام بودند. feature ها مقادیری هستند که به ازای اون باید tag رو پیش‌بینی بکنیم. tag هم جواب مسئله هستش! مثلاً این که یک کاربر پیج الناز شاکردوست رو فالو می‌کنه یا خیر رو می‌تونیم tag در نظر بگیریم و این که دیگه چه پیج‌هایی رو فالو می‌کنه رو feature در نظر بگیریم.

بعد از این که یک الگوریتم ساخت decision tree به نام RandomForest رو روی دیتا اجرا کردم، تونستم به دقت حدود ۸۰ درصد برسم و وقتی میزان اهمیت هر یک از feature ها رو بررسی کردم چیزی مشابه همون heatmap ای که توی پست قبل بود دراومد و اون سلول‌هایی که خیلی کمرنگ یا پررنگ بودند اهمیت زیادی داشتند. منطقی بودش که دقت الگوریتم از این هم بیشتر نشه، چون افراد زیادی وجود دارند که تمامی featureهاشون با یکدیگر یکسان هستش اما tag شون فرق داره و از هیچ الگوریتمی نباید توقع بیش از حد داشت! در واقع دو نفر وجود دارند که همه‌ی پیج‌هایی که فالو می‌کنند مثل هم هستش ولی توی یه پیج خاص فرق دارند.

نتایج

تنها کار به دردبخوری که این دفعه کردم این بود که تعداد کل کاربران و تعداد کاربران رو بر اساس تعداد پیج‌هایی که فالو می‌کردند در اوردم. تعداد کل کاربران بر اساس این ۱۹ تا صفحه ۱۷,۹۲۸,۱۶۸ بودش. این عدد خیلی به تعداد نصب اینستاگرام توی کافه‌بازار نزدیک بود که نشونه خوبیه! نمودار زیر هم تعداد کاربران بر اساس تعداد پیج‌هایی که فالو می‌کردند بودش. دقت کنید محور عمودی که تعداد رو نشون می‌ده، لگاریتمی هستش.

۹ میلیون کاربر بودند که فقط یک پیج از این پیج‌ها رو فالو می‌کردند، پیج‌ها گوناگونی نسبتاً زیادی داشتند و همه چیز رو هم در برنداشتند، اما عدد ۹ میلیون برام خیلی وسوسه برانگیز بود تا این مسیر رو ادامه بدم و برم سراغ crawl کردن خود کاربران اینستا. تخمینی که دارم اینه که حدود یک هفته طول می‌کشه تا دیتاش کاملاً استخراج بشه و بعدش می‌شه روش تحلیل انجام داد. منتظر قسمت سوم باشید.


کدها و دیتاست

لینک نوت‌بوک اسپارک که توش می‌تونید کدها رو ببینید

فایل‌های زیر توی هر کدوم ID افرادی هستند که صفحه اون فرد رو follow می‌کردند در اینستا. امیدوارم تو قسمت بعدی یه دیتاست کامل و بهتری رو بتونم ارائه بکنم.

amirtataloi
aroose_ayandeh
babakjahanbakhshoriginal
bbcpersian
elnazshakerdoost
hame_chiz_baraye
hassan_reyvandi
hrouhani
khamenei_ir
mahnaz_afshar
manotoofficial
mehrab_ghasemkhani
palange_irooni
parvizparastouei
radiojavan
raisi_org
soroush.jamshidy
varzesh3
zhuaan