2017-04-25 106 views
1

我是初学者编程人员,他尝试分析我的Twitter帐户的网络。 我写这段代码:如何制作twitter的网络图(Python3)

api = twitter.Api(consumer_key = my_consumer_key, 
      consumer_secret = my_consumer_secret, 
      access_token_key = my_access_token_key, 
      access_token_secret = my_access_token_secret, 
      input_encoding = "UTF-8", 
      sleep_on_rate_limit=True) 


friends = api.GetFriends() 

G = networkx.Graph() 

for friend in friends: 
    G.add_edge(myname,friend.screen_name) 


for friend in friends[-3:]: 
    for user in api.GetFriends(friend.id): 
     if user in friends: 
      G.add_edge(friend.screen_name,user.screen_name) 


pos = spring_layout(G) 


draw_networkx_nodes(G, pos, node_size = 100, node_color = 'w') 
draw_networkx_edges(G, pos, width = 1) 
draw_networkx_labels(G, pos, font_size = 12, font_family = 'sans- 
serif', font_color = 'r') 

xticks([]) 
yticks([]) 
savefig("egonetwork.png") 
show() 

我能拿但导致这是由于节点数量巨大的那么复杂。因此,我想要减少节点数量(追随者),例如5或6个节点。我应该编辑哪个部分?如果详细解释,我们将不胜感激。

回答

2

如果我正确理解你的问题,你想选择最多5/6追随者和他们的互连。

如果是这样的话,我建议你改变你的for循环,使得最多五个节点被添加到图中。此外,您需要确保只添加您添加到图表中的五个追随者的追随者。

for i in range(min(5, len(friends))): 
    G.add_edge(myname,friends[i].screen_name) 
    for user in api.GetFriends(friends[i].id): 
     if user in friends[:min(5, len(friends))]: 
      G.add_edge(friend.screen_name,user.screen_name) 

在第一个for循环中,您最多可以将5个追随者添加到图中。 然后第二个循环会遍历刚刚添加的节点的所有追随者,并将它的互连添加到其他四个追随者。

+0

非常感谢您的回答。当我运行这段代码时,我得到了“int”对象不可迭代的“对于这个部分”我为min in(5,len(friends)):“并尝试解决。但我无法做到。发生什么事 ? – user7421972

+1

嗨,对不起,我忘了在第一行添加范围(min(5,len(friends))。更新了答案,我希望它按照预期工作。 – xTikka