تحليل الشبكة الاجتماعية في R و Gephi: البحث في Twitter
نشرت: 2022-03-11وُلد تحليل الشبكات الاجتماعية في عام 1934 عندما أنشأ جاكوب ليفي مورينو مخططات اجتماعية وتجريدية للتفاعلات الاجتماعية. على وجه التحديد ، المخطط الاجتماعي هو رسم بياني تمثل فيه كل عقدة شخصًا وتمثل الحواف التفاعلات بينهما. استخدم مورينو مخططات اجتماعية لدراسة سلوك مجموعات صغيرة من الناس.
لماذا صغيرة؟ لأنه في العصر الذي عمل فيه ، كان من الصعب الحصول على معلومات دقيقة حول عدد كبير من التفاعلات الشخصية. تغير هذا مع ظهور الشبكات الاجتماعية عبر الإنترنت مثل Twitter. في الوقت الحاضر ، يمكن لأي شخص تنزيل بيانات ضخمة على Twitter مجانًا ، مما يفتح الباب لتحليلات مثيرة للاهتمام ، يقودنا إلى فهم جديد لكيفية تصرفنا وتأثير السلوكيات المختلفة على المجتمع.
في هذا الجزء الأول من سلسلة تحليل الشبكات الاجتماعية ، نوضح كيفية إجراء بعض هذه التحليلات باستخدام لغة R للحصول على البيانات ومعالجتها مسبقًا ، و Gephi لإنتاج تصورات مذهلة. Gephi هو تطبيق مفتوح المصدر مصمم خصيصًا لتصور أي نوع من الشبكات. تمكن المستخدمين من تكوين تصورات بسهولة من خلال العديد من المعايير والخصائص.
تنزيل بيانات Twitter لتحليل الشبكة الاجتماعية في R
إذا لم يكن لديك حساب مطور Twitter ، فأنشئ حسابًا ، وتقدم بطلب للحصول على وصول أساسي. بعد ذلك ، لتنزيل بيانات Twitter ، أنشئ تطبيقًا في Twitter Developer Portal. بعد ذلك ، حدد التطبيق الخاص بك في قسم المشاريع والتطبيقات وانتقل إلى علامة التبويب المفاتيح والرموز. هناك سيكون عليك إنشاء بيانات الاعتماد الخاصة بك. سيتم استخدام هذه للوصول إلى Twitter API وتنزيل البيانات.
بمجرد إنشاء بيانات الاعتماد الخاصة بك ، يمكنك بدء التحليل. سوف نستخدم ثلاث مكتبات R:
- igraph لإنشاء الرسم البياني للتفاعل.
- tidyverse لإعداد البيانات.
- rtweet للتواصل مع Twitter Dev API.
يمكنك تثبيت هذه المكتبات باستخدام وظيفة install.packages() . لأغراضنا ، سنفترض أنك قمت بتثبيت R و RStudio ، وأن لديك فهمًا أساسيًا لهما.
في عرضنا التوضيحي ، سنحلل النقاش الساخن على الإنترنت حول لاعب كرة القدم الأرجنتيني الشهير ليونيل ميسي خلال أسبوعه الأول مع نادي باريس سان جيرمان لكرة القدم (PSG). من المهم ملاحظة أنه باستخدام واجهة برمجة تطبيقات Twitter المجانية ، يمكنك تنزيل التغريدات لمدة سبعة أيام فقط قبل التاريخ الحالي. لن تتمكن من تنزيل نفس البيانات التي نستشهد بها ، ولكن ستتمكن من تنزيل المناقشات الحالية.
لنبدأ بالتنزيل. أولاً ، سنقوم بتحميل المكتبات ، ثم ننشئ رمزًا مميزًا للترخيص باستخدام بيانات الاعتماد ، وأخيرًا نضبط معايير التنزيل.
يوضح جزء التعليمات البرمجية هذا كيفية تنفيذ جميع الخطوات الثلاث:
## Load libraries library(rtweet) library(igraph) library(tidyverse) ## Create Twitter token token <- create_token( app = <YOUR_APP_NAME>, consumer_key = <YOUR_CONSUMER_KEY>, consumer_secret = <YOUR_CONSUMER_SECRET>, access_token =<YOUR_ACCESS_TOKEN>, access_secret = <YOUR_ACCESS_SECRET>) ## Download Tweets tweets.df <- search_tweets("messi", n=250000,token=token,retryonratelimit = TRUE,until="2021-08-13") ## Save R context image save.image("filename.RData")ملاحظة: استبدل جميع العلامات الموجودة بين <> بالمعلومات التي قمت بإنشائها في خطوة بيانات الاعتماد السابقة.
باستخدام هذا الرمز ، استفسرنا عن Twitter API لجميع التغريدات (حتى 250000) التي تحتوي على كلمة "messi" وتم نشرها بين 8 أغسطس 2021 و 13 أغسطس 2021. لقد وضعنا حدًا يبلغ 250.000 تغريدة لأن Twitter يتطلب قيمة الكمية ولأن الرقم كبير بما يكفي للسماح بتحليل مثير للاهتمام.
معدل تنزيل Twitter هو 45000 تغريدة لكل 15 دقيقة ، لذا فإن تنزيل 250.000 تغريدة يستغرق أكثر من ساعة.
أخيرًا ، قمنا بحفظ جميع متغيرات السياق في ملف RData حتى نتمكن من استعادتها إذا أغلقنا RStudio أو أغلقنا الجهاز.
إنشاء الرسم البياني للتفاعل
بمجرد انتهاء التنزيل ، سيكون لدينا التغريدات داخل tweets.df dataframe. تحتوي مصفوفة إطار البيانات هذه على صف واحد لكل تغريدة وعمود واحد لكل حقل تغريدة. أولاً ، سنستخدمه لإنشاء الرسم البياني للتفاعل الذي تمثل فيه كل عقدة مستخدمًا ، وتمثل الحواف التفاعلات (إعادة التغريد أو الإشارة) فيما بينها. باستخدام tidyverse و igraph ، يمكننا إنشاء هذا الرسم البياني بسرعة وفي بيان واحد فقط:
## Create graph filter(tweets.df, retweet_count > 0) %>% select(screen_name, mentions_screen_name) %>% unnest(mentions_screen_name) %>% filter(!is.na(mentions_screen_name)) %>% graph_from_data_frame() -> net بعد تنفيذ هذا الخط ، لدينا رسم بياني في net المتغير جاهز للتحليل. على سبيل المثال ، لمعرفة عدد العقد والحواف الموجودة:
summary(net) # IGRAPH fd955b4 DN-- 138963 217362 --تنتج بيانات العينة الخاصة بنا 138000 عقدة و 217000 حافة. هذا رسم بياني كبير. يمكننا إنشاء تصورات من خلال R إذا أردنا ذلك ، ولكن في تجربتي ، فإنها تستغرق وقتًا طويلاً للحساب وليست جذابة بصريًا مثل تصورات Gephi. لذلك ، دعنا ننتقل مع Gephi.
تصور الرسم البياني مع Gephi
سنحتاج أولاً إلى إنشاء ملف يمكن لـ Gephi قراءته. هذا سهل ، حيث يمكننا إنشاء ملف .gml باستخدام وظيفة write_graph :
write_graph(simplify(net), "messi_network.gml", format = "gml") الآن ، افتح Gephi ، وانتقل إلى "فتح ملف الرسم البياني" ، وابحث عن ملف messi_network.gml ، وافتحه. ستظهر نافذة تلخص معلومات الرسم البياني. حدد قبول. سيظهر هذا:
وغني عن القول ، هذا ليس مفيدا للغاية. هذا لأننا لم نطبق تخطيطًا حتى الآن.
تخطيط الشبكة
في الرسم البياني الذي يحتوي على آلاف العقد والحواف ، يعد وضع العقد في الرسم أمرًا حيويًا. هذا هو الغرض من التخطيطات. يضعون العقد في المواقف التي تحددها معايير محددة.
في برنامجنا التعليمي لتحليل الشبكات الاجتماعية ، سنستخدم مخطط ForceAtlas2 ، وهو خيار قياسي لهذا النوع من التحليل. يضع العقد عن طريق محاكاة القوى الفيزيائية للجاذبية والتنافر فيما بينها. إذا تم توصيل عقدتين ، فسيكونان على مقربة من بعضهما البعض ؛ إذا لم يكنا متصلين ، فسيكونان بعيدًا عن بعضهما البعض. ينتج عن هذا التخطيط رسم بياني إعلامي من حيث المجتمعات ، لأنه سيتم تجميع المستخدمين الذين ينتمون إلى نفس المجتمع معًا بينما سيكون المستخدمون من المجتمعات المختلفة في مناطق مختلفة.
لتطبيق هذا التخطيط على حالتنا ، ننتقل إلى نافذة التخطيط (في الزاوية اليسرى السفلية) ، حدد ForceAltas 2 ، وانقر فوق تشغيل. عند القيام بذلك ، سترى العقد تبدأ في التحرك وتشكل العديد من "السحب". بعد بضع ثوانٍ ، سيكون لديك نمط مستقر للغاية وستكون قادرًا على النقر فوق إيقاف. يرجى ملاحظة أن الأمر قد يستغرق الكثير من الوقت للتوقف تلقائيًا.
نظرًا لأن هذه خوارزمية عشوائية ، سيكون لديك نواتج مختلفة قليلاً في كل تشغيل. يجب أن يكون الإخراج الخاص بك مشابهًا لهذا:

بدأ الرسم البياني في الظهور بشكل جذاب. الآن دعونا نضيف بعض الألوان إليها.
كشف المجتمع
يمكننا تلوين العقد باستخدام عدة معايير ؛ النهج الأكثر شيوعًا هو من خلال المجتمع. إذا كان لدينا أربع مجتمعات في الرسم البياني الخاص بنا ، فسنحصل على أربعة ألوان. من خلال اللون ، من السهل فهم كيفية تفاعل المجموعات ، بالنظر إلى بياناتك.
لتلوين العقد ، علينا أولاً تحديد المجتمعات. في Gephi ، انقر فوق الزر Modularity في النافذة أسفل علامة التبويب الإحصائيات - يطبق هذا الزر خوارزمية مجموعة الرسم البياني Louvain الشهيرة ، وهي واحدة من أسرع الخوارزميات المتاحة ، وتعتبر من أحدث الخوارزميات نظرًا لأدائها العالي. في النافذة التي تظهر ، انقر فوق قبول. ستظهر نافذة أخرى تحتوي على مخطط مبعثر للمجتمعات الموزعة حسب الحجم. الآن لدينا سمة جديدة في كل عقدة تسمى Modularity Class ، والتي تحتوي على المجتمع الذي يمتلكه المستخدم.
بعد الانتهاء من الخطوات السابقة ، يمكننا الآن تلوين الرسم البياني حسب المجموعات. للقيام بذلك ، في علامة التبويب المظهر ، انقر فوق تطبيق.
هنا يمكننا أن نرى الحجم (من حيث نسبة المستخدمين) لكل مجتمع. في حالتنا ، تحتوي المجتمعات الرئيسية (البنفسجي والأخضر) على 11.34٪ و 9.29٪ من إجمالي السكان ، على التوالي.
باستخدام التخطيط الحالي ولوحة الألوان ، سيبدو الرسم البياني كما يلي:
الكشف عن المؤثرين على تويتر
أخيرًا ، نود تحديد المشاركين الرئيسيين في المناقشة لفهم ، على سبيل المثال ، من ينتمي إلى أي مجتمع. يمكننا قياس تأثير كل مستخدم من خلال خصائص مختلفة ؛ واحد منهم من خلال درجتهم . يشير هذا إلى عدد المستخدمين الذين أعادوا تغريد أو ذكرهم.
لتسليط الضوء على المستخدمين الذين لديهم الكثير من التفاعلات ، سنقوم بتغيير حجم العقد باستخدام خاصية الدرجة:
سيعرض الرسم البياني الآن المؤثرين كعقد ممثلة بدوائر أكبر:
الآن بعد أن حددنا المستخدمين الذين لديهم عدد كبير من التفاعلات ، يمكننا الكشف عن أسمائهم. للقيام بذلك ، انقر فوق السهم الأسود في الشريط الموجود أسفل الشاشة:
ثم انقر فوق Labels and Configuration. في النافذة التي تظهر ، حدد مربع الاختيار الاسم وانقر فوق قبول. بعد ذلك ، انقر فوق خانة الاختيار العقد. ستظهر خطوط سوداء صغيرة في الرسم البياني. هذه هي أسماء جميع المستخدمين. لكننا لا نريد أن نراهم جميعًا ، فقط الأهم منهم.
لتعريفها ، قم بتغيير حجمها حسب درجة العقدة باستخدام نفس النافذة التي استخدمناها لحجم العقدة. قمنا بزيادة الحجم الأدنى من 0.1 إلى 10 وزدنا الحجم الأقصى من 10 إلى 300.
مع إضافة الأسماء ، يصبح الرسم البياني أكثر إفادة بشكل ملحوظ ، حيث يعرض كيفية تفاعل المجتمعات المختلفة مع المؤثرين:
نحن الآن نفهم الكثير عن مناقشة Twitter هذه. على سبيل المثال ، يكشف تضمين المجتمع الأخضر لحسابات مثل mundodabola و neymarjrdepre عن موقعه البرازيلي. تحتوي المجتمعات البرتقالية والرمادية على مستخدمين يتحدثون الإسبانية مثل sc_espn و InvictosSomos. على وجه الخصوص ، يبدو أن المجتمعات الرمادية والسوداء تتحدث الإسبانية لأن لديهم مستخدمين مثل IbaiOut و LaScaloneta و Streamer الشهير IbaiLlanos. أخيرًا ، يبدو أن مجتمعات البنفسج والأحمر تتحدث الإنجليزية لأنها تتميز بحسابات مثل ESPNFC و brfootball.
الآن يمكننا أن نفهم بشكل أفضل سبب تشكيل هؤلاء المستخدمين لمجتمعات مختلفة من حيث علم الاجتماع وليس فقط حساب الرسم البياني: إنهم يتحدثون لغات مختلفة! إنهم جميعًا يغردون عن ميسي وفريقه الجديد ، لكن من المنطقي أن يتفاعل المتحدثون الأسبانية مع المتحدثين الآخرين بالإسبانية أكثر من تفاعلهم مع المتحدثين باللغة البرتغالية أو الإنجليزية. علاوة على ذلك ، يمكننا أيضًا أن نفهم أنه على الرغم من أن المجتمعات الرمادية والبرتقالية تتحدث الإسبانية ، إلا أنها تفعل ذلك من وجهات نظر مختلفة. يستخدم المجتمع الرمادي أسلوبًا فكاهيًا يفسر سبب تفاعلهم مع بعضهم البعض أكثر من تفاعلهم مع حسابات كرة القدم الرسمية أو الصحفيين.
إطلاق العنان لإمكانيات R و Gephi
لو لم نستخدم Gephi للرسم البياني ، لكنا استخدمنا مكتبة R's Ggplot. ومع ذلك ، من وجهة نظري ، فإن هذه المكتبة محدودة للغاية من حيث الرسوم البيانية للشبكة. إنه ليس ديناميكيًا مثل Gephi ، وهو أكثر صعوبة في التكوين والشاشة الناتجة أقل وضوحًا.
في بقية السلسلة ، سنأخذ هذا التحليل إلى أبعد من ذلك. سنقوم ببعض التحليلات النصية لنمذجة الموضوعات لمعرفة مقدار حديث المستخدمين والموضوعات التي تهمهم ؛ سنجري تحليلًا للمشاعر لمعرفة ما إذا كانت إيجابية أم سلبية ؛ وسنقوم بتحليل رسم بياني أعمق لتحليل أكبر المؤثرين على تويتر.
يمكنك استخدام هذه الخطوات لتحليل مناقشات Twitter الجديدة ومعرفة الأفكار التي يمكنك اكتسابها من الرسوم البيانية لمخططك.
