我们平时会用很多社交媒体,比如微信、微博、抖音等,在这些平台上,我们会关注一些KOL,在同时,我们身边的亲朋好友也会关注我们,成为我们自己的粉丝。慢慢的,随着时间的推移,关注度和粉丝量的积累,这一层关系网就会不断的增长,大量的信息也不断的通过这个关系网传播出去。因此,分析这些社交网络对我们的决策也至关重要。今天我们使用一些Python第三方库来可视化社交网络数据源,本案例中使用的数据是来自LinkedIn的社交关系数据。由于笔者之前在美国留学,正在国外寻找实习和工作,所以通过LinkedIn投递了简历和联系了同事。久而久之,他逐渐形成了自己的社交网络,下载了这部分社交数据,然后使用pandas模块读取,由于涉及隐私信息,数据不便提供。如果你有LinkedIn账户,你可以通过设置中的“获取数据副本”导出这样的CSV关系数据。或者你可以根据这个表头自己生成一个假数据:数据读取和清理先导入需要的模块importpandasaspdimportjanitorimportdatetimefromIPython.core.displayimportdisplay,HTMLfrompyvisimportnetworkasnetimportnetworkxasnxneedsto读取数据集df_ori=pd.read_csv("Connections.csv",skiprows=3)df_ori.head()接下来我们清洗数据,具体思路是去掉空值,以及中的“Connectedon”列数据集包含一个日期,但是数据类型是字符串,所以我们还需要将其改为日期格式。df=(df_ori.clean_names()#去掉字符串中的空格,把大写改成小写.drop(columns=['first_name','last_name','email_address'])#去掉这三列.dropna(subset=['company','position'])#去除company和position列中的空值.to_datetime('connected_on',format='%d%b%Y'))outputcompanycompanyxxalpositionconnected_on0AcXXXX2021-08-151XXXXXXXXXXXX副合作伙伴2021-08-142xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxtxxxxxxxxxtxxxxxxtxxxxtxxxxxtxxxxxxxxtxxxxxxxxxtripanter区分所有df['company'].value_counts().head(10).plot(kind="barh").invert_yaxis()你在哪些公司工作的输出?看一下我的网络,大部分是职业df['position'].value_counts().head(10).plot(kind="barh").invert_yaxis()的输出接下来我们画一个可视化图的社交网络。但在此之前,我们需要解释几个术语。每个社交网络包括:节点:社交网络中的每个参与者边:代表每个参与者之间的关系以及关系的紧密程度。先从简单的开始画社交网络主要用到了networkx模块和pyvis模块,g=nx.Graph()g.add_node(0,label="root")#初始化自己为centralnodeg.add_node(1,label="公司1",size=10,title="info1")g.add_node(2,label="公司2",size=40,title="info2")g.add_node(3,label="公司3",size=60,title="info3")我们先创建了4个节点,分别命名。参数size表示节点的大小,然后我们将这些节点连接起来g.add_edge(0,1)g.add_edge(0,2)g.add_edge(0,3)最终出现如图下面我们首先从网络和他们的公司形象化网络。首先,我们对他们所属的公司进行统计排序df_company=df['company'].value_counts().reset_index()df_company.columns=['company','count']df_company=df_company.sort_values(by="count",ascending=False)df_company.head(10)输出公司count0Amazonxx1Googlexx2Facebookxx3StevensIns技术XX4XX4MicrosoftXX5JPMorganChase&Co。XX6AmazonWebServices(AWS)XX9AppleX10GoldmanSachsX8Oraclexoraclex然后然后然后我们来图表图表图表图表图表##g=nx.graph(nx.graph(nx.graph)()myself')#将自己置于网络中心#遍历数据集中的每一行for_,rowindf_company_reduced.iterrows():#将公司名称和统计结果赋值给一个新的变量company=row['company']count=row['count']title=f"{company}}"positions=set([xforxindf[company==df['company']]['position']])positions=''.join('{positions}
"hover_info=title+position_listg.add_node(company,size=count*2,title=hover_info,color='#3449eb')g.add_edge('root',company,color='grey')#生成网络图nt=net.Network(height='700px',width='700px',bgcolor="black",font_color='white')nt.from_nx(g)nt.hrepulsion()nt.show('company_graph.html')display(HTML('company_graph.html'))输出同样,让我们??可视化网络中各个位置的分布先做统计排序df_position=df['position'].value_counts().reset_index()df_position.columns=['position','count']df_position=df_position.sort_values(by="count",ascending=False)df_position.head(10)输出位置计数0软件工程师XX1数据科学家XX2高级软件工程师XX3数据分析师XX4高级数据科学家XX5软件开发工程师XX6软件开发工程师IIXX7创始人XX8数据工程师XX8数据工程师XX9BusinessAnalystXXXXx=nx.Graph()g.add_node('myself')#将自己置于网络中心for_,rowindf_position_reduced.iterrows():#将帖子名称和统计结果赋值给新变量position=row['position']count=row['count']title=f"{position}–{count}"positions=set([xforxindf[位置==df['position']]['position']])positions=''.join('{positions}
"hover_info=title+position_listg.add_node(position,size=count*2,title=hover_info,color='#3449eb')g.add_edge('root',position,color='grey')#生成网络图nt=net.Network(height='700px',width='700px',bgcolor="black",font_color='white')nt.from_nx(g)nt.hrepulsion()nt.show('position_graph.html')输出以上是社交网络关系的可视化分析。这里的数据结论对你没有任何参考价值,但你可以在类似的分析场景中使用该方法。最近花了几天时间整理了一个Python入门理论+实践进阶教程。这可能是您见过的最好的学习材料之一。独家打造,完全免费,需要的同学可以关注gzh【Python编程学习圈】,发送“学习资料”获取~
