2010-02-06 69 views
5

考虑到一组Twitter用户“节点”和关系u follows v作为“边缘”,我们有一张图表,我想从中随机选择一个用户子集。我可能是错的,但是通过阅读API文档,我认为除了获取已知用户的关注者或朋友之外,不可能获得一组用户。什么是一个好的方法来选择一个随机的twitterers?

因此,从我自己和从那里探索Twitter图形,选择100个用户的随机样本的好方法是什么?

回答

3

我会用数字user id。生成一堆随机数,并基于此获取用户。如果你击中了一个不存在的ID,那就简单地跳过它。

Twitter的API的wiki,为用户/显示:

ID。用户的ID或屏幕名称。

+0

谢谢。你知道数字用户id的范围吗? – 2010-02-07 00:50:42

+0

您可以创建一个新帐户,并查看它获取的ID(最简单的方法是查看RSS提要网址,其中包含用户ID)。我的用户名是~1200,所以我猜他们从1开始(或接近)。 – 2010-02-07 02:55:49

+0

如果你能弄清楚ID的结构,这可能是一个非常好的选择。 – 2010-02-07 06:58:50

1

除非您有完整的twitter用户图表(或其随机样本),否则您将无法随机抽样。否则,您采取的任何样品都会因与您的关系而有所偏差。

+0

是的,我同意,随机性不会是完美的。但是,作为一个不切实际的例子,假设我从自己开始并采取了10,000个随机步骤。我登陆的用户会非常随机。 – 2010-02-06 03:27:59

+1

@ I.J:不正确。它真的取决于图的结构。现在你可以做出一些暗示的假设,但是谁知道Twitter用户图表是什么样的。 – 2010-02-06 15:12:00

1

假设six degrees of separation为真,您可以进行6个级别的宽度优先搜索,并从该列表中选择100个随机用户。或者你可以说,当我说,100万独立用户和100个样本时,我将停止寻找更多用户。

由于存储一个包含百万用户的列表并试图进行采样可能会令人望而却步,因此您可以使用一种名为Reservoir Sampling的技术,该技术允许您在遍历期间进行采样。

1

只需查询公共时间轴,并使用一组用户返回:

http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses-public_timeline

这不会是随机的,因为它只是由任何人发送的最后20个鸣叫,但它很可能会永远不会同一组用户两次。

由于它一次只给你20个,结果在服务器上缓存了60秒,所以你需要做5个不同的请求,并在它们之间暂停60秒。

当然,也有可能某些用户会在特定的时间段内频繁发微博,所以在那段时间你可能总共只有100个用户,所以你可以循环直到你达到100,如果你需要。

1

您可以使用GET statuses/sample从代码执行过程中发布twitter的连续流。然后,您可以从中提取鸣叫信息的用户(高音)接受

这里是Python代码这样做使用Python twitter api

import twitter 

f=open("account","r") #this file should contain "consumer_key consumer_secret access_token_key access_token_secret" 
acc=f.read().split() 
f.close() 

api=twitter.Api(consumer_key=acc[0], consumer_secret=acc[1], access_token_key=acc[2], access_token_secret=acc[3]) 


lis = api.GetStreamSample() 
cnt = 0 
userIDs = [] 

for tweet in lis: 

    # stop after getting 100 tweets. You can adjust this to any number 
    if cnt == 100: 
     break; 

    cnt += 1 
    userIDs.append(tweet['user']['id']) 


userIDs = list(set(userIDs)) # To remove any duplicated user IDs 
print userIDs 
相关问题