将Twitter用户的“节点”集合和关系u follows v
视为“边缘”,我们有一个图表,我希望从中随机选择一个用户子集。我可能是错的,但是通过阅读API文档,我认为除非获得已知用户的关注者或朋友,否则无法获得用户集合。
所以,从我自己开始,然后从那里开始探索Twitter图,有什么好方法可以随机选择一个(例如100个)用户样本?
我将使用数字user id
。生成一堆随机数,并以此为基础获取用户。如果您输入了不存在的ID,只需跳过该ID即可。
Twitter API Wiki,用于用户/节目:
id。用户的ID或屏幕名称。
假设six degrees of separation为真,您可以进行广度优先搜索,最多搜索6个级别,然后从该列表中选择100个随机用户。或者您可以说,当我说一百万个唯一用户并从中抽样100个时,我将停止寻找更多的用户。
由于存储一百万个用户的列表并尝试采样可能是禁止的,因此可以使用一种称为Reservoir Sampling的技术,它允许您在遍历过程中进行采样。
只需查询公共时间轴,并使用返回的用户集:
http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses-public_timeline
不会是随机的,因为它只是任何人发送的最后20条推文,但很可能永远不会是同一组用户两次。
由于一次只能给您20个,并且结果在其服务器上缓存了60秒,因此您必须执行5个不同的请求,并且它们之间要暂停60秒。
当然,某些用户可能会在特定时间段内频繁发推文,因此在这段时间内您可能会获得不到100个用户,因此,如果需要,您可以循环播放直到获得100个用户。
除非您拥有整个Twitter用户图(或其随机样本),否则您将无法获取随机样本。否则,您抽取的任何样本都会因与您的关系而有偏差。
Twitter的流式API的端点名为“示例”,Returns a small random sample of all public statuses
(参见https://dev.twitter.com/docs/api/1.1/get/statuses/sample)
作者的推特ID与推文一起返回,因此这将使您随机地成为[[active Twitter用户。
这是使用Python twitter api的python代码
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
随机句柄是基于:
生成的