در دنیای امروز بیشتر افراد به شبکه های اجتماعی اعتیاد پیدا کرده اند. همچنین ، می دانیم که تقریباً هر سیستمی که افراد در آن تعامل داشته باشند ، می تواند به عنوان یک شبکه اجتماعی دسته بندی شود.شبکه های اجتماعی از زمینه سرگرمی و فان گرفته تا زمینه های سیساسی و اجتماعی و اقتصادی تاثیرگذاری به سزایی دارند،چه بسا مواردی که منجر به پاسخگویی و تغییر روند صاحبان برند،اشخاص حقیقی و حقوق و حتی سیاستمداران و رهبران کشورها شده است.
در این میان دیتاساینتیست می توانند به صورت تخصصی کمک به سزایی در فرایند جمع آوری داده های مرتبط از شبکه های اجتماعی ، مصور سازی ، تحلیل نتایج و حتی تحلیل احساسات فضای شبکه های اجتماعی کنند.اما ابزارهایی برای تحلیل شبکه اجتماعی نیز وجود دارند که ممکن است بتوانند تا حدودی با آنها فضای شبکه های اجتماعی را بررسی و مصورسازی کنید.
به تازگی یک مطالعه موردی در مورد سریال محبوب بازی تاج و تخت در سایت DataCamp انجام شده است. در این مطالعه به بررسی شخصیت های این سریال پرداخته شده و چگونگی تغییر اهمیت شخصیت ها در این مجموعه پرداخته شده است. می توایند از اینجا اطلاعات بیشتری راجع به این مطالعه بدست آورید.
تحلیل شبکه اجتماعی
تجزیه و تحلیل شبکه های اجتماعی (SNA) فرآیند بررسی ساختارهای اجتماعی از نظر گره ها (راس ها) و لبه هایی (یال ها) است که آنها را از طریق استفاده از شبکه ها و نظریه گراف به یکدیگر متصل می کند.
نظریه گراف
یک گراف از رئوس ساخته شده است که توسط یال ها به هم متصل می شوند. یال ها می توانند یک طرفه یا دو طرفه باشند. همچنین یال ها می توانند وزن دار باشند یا بدون وزن.
اندازه گیری گراف
۴ معیار برای اندازه گیری یک گراف مورد استفاده قرار می گیرد
ابعاد گراف: اندازه یک شبکه گراف می تواند به تعداد گره های N یا تعداد لبه های E اشاره داشته باشد.
تراکم: تراکم در یک گراف با D نمایش داده می شود که برابر است با تعداد گره یا تقسیم بر تعداد یال های ممکن
قطر: حداکثر کوتاهترین فاصله بین تمام جفتهای گره در نمودار.
کوتاهترین مسیر: برای فاصله بدون وزن ، تعداد لبه های بین دو گره و برای فاصله وزنی ، مجموع وزن بین دو گره را محاسبه می کنیم. برای یافتن کوتاهترین مسیر نیز دو الگوریتم داریم
- جستجوی اول عرض (BFS) – از گره ریشه شروع می کنیم و قبل از رفتن به گره ها در سطح بعدی ، همه گره های همسایه را در عمق فعلی کاوش می کنیم.
- جستجوی اول عمق (DFS)- از گره ریشه شروع می کنیم و قبل از رفتن به شاخه ها در سطح بعدی ، تا آنجا که ممکن است در امتداد هر شاخه کاوش می کنیم.
اندازه گیری گره
درجه مرکزیت: برابر است با تعداد یال هایی که یک گره دارد. هرچه تعداد یال های یک گره بیشتر باشد درجه آن گره بیشتر است.
خاصیت مرکزیت: این معیار تلاش می کند گره هایی که در مرکز ارتباطات در شبکه گراف هستند را مشخص کند.
مرکزیت نزدیکی: در این معیار هرچه گره ها به یکدیگر نزدیک تر باشند دجه بالاتری خواهند داشت.
مرکزیت بینابینی -هر چه یک گره در مسر دو گره بیشتر قرار بگیرد درجه بینابینی بیشتری دارد.
مطالعه موردی: تحلیل شبکه Game of Thrones
بازی تاج و تخت (Game of Thrones) مجموعه تلویزیونی بسیار محبوب HBO است که بر اساس مجموعه کتاب های معروف A Song of Ice and Fire ساخته George R.R. Martin است. مجموعه داده شامل مجموعه کتاب های فصول اول تا پنجم است. ما همچنین از این مجموعه داده برای تجزیه و تحلیل شبکه همبستگی شخصیت های کتاب های بازی تاج و تخت استفاده خواهیم کرد.
ما فقط اولین کتاب A Game of Thrones را لود می کنیم تا نام ستون ها را بررسی کنیم.
import pandas as pd book1 = pd.read_csv('datasets/book1.csv') book1.head()
کتاب اول شامل 5 ستون است: منبع ، هدف ، نوع ، وزن و کتاب. منبع و هدف دو گره هستند که توسط یک لبه به هم متصل می شوند. ویژگی وزنی هر لبه به ما تعاملات متقابل شخصیت ها در کتاب را می گوید.
وقتی داده ها را برای ایجاد یک شبکه در اختیار داشتیم ، از networkx ، یک کتابخانه تجزیه و تحلیل شبکه ، و برای اولین کتاب یک شی گراف ایجاد خواهیم کرد.
import networkx as nx G_book1 = nx.Graph()
در حال حاضر ، نمودار گراف G_book1 خالی است. بنابراین باید آن را با یال های کتاب اول پر کرده و در بقیه کتابها بارگذاری کنیم.
books = [G_book1] book_fnames = ['datasets/book2.csv', 'datasets/book3.csv', 'datasets/book4.csv', 'datasets/book5.csv'] for book_fname in book_fnames: book = pd.read_csv(book_fname) G_book = nx.Graph() for _, edge in book.iterrows(): G_book.add_edge(edge['Source'], edge['Target'], weight=edge['weight']) books.append(G_book)
درجه مرکزیت برای یافتن مهمترین شخصیت
ابتدا از مرکزیت درجه برای اندازه گیری اهمیت گره در شبکه با نگاهی به تعداد همسایگان و تعداد گره های متصل به آن استفاده می کنیم.
# Calculating the degree centrality of book 1 and book 5 deg_cen_book1 = nx.degree_centrality(books[0]) deg_cen_book5 = nx.degree_centrality(books[4]) # Sorting the dictionaries according to their degree centrality and storing the top 10 sorted_deg_cen_book1 = sorted(deg_cen_book1.items(), key=lambda x: x[1], reverse=True)[0:10] ('Eddard-Stark', 0.3548387096774194) sorted_deg_cen_book5 = sorted(deg_cen_book5.items(), key=lambda x: x[1], reverse=True)[0:10] ('Jon-Snow', 0.1962025316455696)
با توجه به مرکزیت درجه ، ما اهمیت تغییرات کاراکترها را در طول زمان درک می کنیم ، بنابراین می خواهیم سیر تحول درجه یک شخصیت را بررسی کنیم.
%matplotlib inline evol = [nx.degree_centrality(book) for book in books] degree_evol_df = pd.DataFrame.from_records(evol) degree_evol_df[['Eddard-Stark', 'Tyrion-Lannister', 'Jon-Snow']].plot()
با ترسیم نمودار ، می توان دریافت که با پیشرفت سری کتاب ، اهمیت ادارد استارک کاهش می یابد. جان اسنو ، در کتاب چهارم افت می کند ، اما در کتاب پنجم افزایش ناگهانی وجود دارد.
مرکزیت بینابینی برای یافتن مهمترین شخصیت
ما مرکزیت بینابینی را برای یافتن شخصیت های مهم در کتاب Game of Thrones پیاده سازی می کنیم و تحول مرکزیت این شبکه را در پنج کتاب ترسیم می کنیم.
evol = [nx.betweenness_centrality(book, weight='weight') for book in books] betweenness_evol_df = pd.DataFrame.from_records(evol).fillna(0) # Finding the top 4 characters in every book set_of_char = set() for i in range(5): set_of_char |= set(list(betweenness_evol_df.T[i].sort_values(ascending=False)[0:4].index)) list_of_char = list(set_of_char) betweenness_evol_df[list_of_char].plot(figsize=(13,7))
ما می توانیم با پیشرفت مجموعه کتاب ، افزایش ویژه ای از اهمیت استنیس باراتئون را مشاهده کنیم. در کتاب پنجم ، او از اهمیت بیشتری نسبت به شخصیت های دیگر شبکه برخوردار است.
الگوریتم PageRank برای یافتن مهمترین شخصیت
اکنون ، PageRank را امتحان می کنیم تا شخصیت های مهم را در Game of Thrones بیابیم و تحولات PageRank این شبکه را در پنج کتاب ترسیم کنیم. PageRank الگوریتمی است که توسط جستجوی Google برای رتبه بندی صفحات وب در نتایج موتور جستجوی خود استفاده می کند و روشی برای اندازه گیری اهمیت صفحات وب سایت است.
evol = [nx.pagerank(book) for book in books pagerank_evol_df = pd.DataFrame.from_records(evol) set_of_char = set() for i in range(5): set_of_char |= set(list(betweenness_evol_df.T[i].sort_values(ascending=False)[0:4].index)) list_of_char = list(set_of_char) pagerank_evol_df[list_of_char].plot(figsize=(13,7))
بر اساس الگوریتم PageRank ، استنیس باراتئون و جان اسنو مهمترین شخصیت های کتاب پنجم هستند.
همبستگی بین معیارهای مختلف
ما سه معیارمختلف را برای محاسبه اهمیت گره در شبکه مشاهده کرده ایم ، اما می خواهیم با استفاده از همبستگی پیرسون ارتباط بین PageRank ، مرکزیت بینابینی و مرکزیت درجه را مشاهده کنیم.
measures = [nx.pagerank(books[4]), nx.betweenness_centrality(books[4], weight='weight'), nx.degree_centrality(books[4])] cor = pd.DataFrame.from_records(measures) cor.T.corr()
می توان نتیجه گرفت که بین این سه معیار همبستگی زیادی برای شبکه همزمانی شخصیت ما وجود دارد.
نتیجه
با توجه به مرکزیت درجه و PageRank ، جان اسنو مهمترین شخصیت کتاب پنجم است. و برای مرکزیت بین یکدیگر ، در کتاب پنجم ، استنیس-باراتئون به طور قابل توجهی از شخصیت های دیگر شبکه مهمتر است.
p_rank, b_cent, d_cent = cor.idxmax(axis=1) print(p_rank) Jon-Snow print(b_cent) Stannis-Baratheon print(d_cent) Jon-Snow