Random 选择一组随机推特的好方法是什么?

Random 选择一组随机推特的好方法是什么?,random,graph,twitter,Random,Graph,Twitter,考虑到Twitter用户节点的集合以及u跟随v的关系作为边,我们有一个图,我想从中随机选择一个用户子集。我可能错了,但从API文档中我认为,除了获得已知用户的追随者或朋友之外,不可能获得一个用户集合 那么,从我自己开始,从那里探索推特图,有什么好方法可以随机选择100个用户呢?除非你有整个推特用户图或它的随机样本,否则你将无法随机抽取样本。否则,您所采集的任何样本都会因其与您的关系而产生偏差。假设该结果为真,您可以进行多达6个级别的广度优先搜索,并从该列表中随机选择100个用户。或者你可以说,当

考虑到Twitter用户节点的集合以及u跟随v的关系作为边,我们有一个图,我想从中随机选择一个用户子集。我可能错了,但从API文档中我认为,除了获得已知用户的追随者或朋友之外,不可能获得一个用户集合


那么,从我自己开始,从那里探索推特图,有什么好方法可以随机选择100个用户呢?

除非你有整个推特用户图或它的随机样本,否则你将无法随机抽取样本。否则,您所采集的任何样本都会因其与您的关系而产生偏差。

假设该结果为真,您可以进行多达6个级别的广度优先搜索,并从该列表中随机选择100个用户。或者你可以说,当我得到一百万个独特的用户并从中抽取100个时,我将不再寻找更多的用户


由于存储百万用户的列表并尝试采样可能是禁止的,因此有一种称为的技术可供使用,它允许您在遍历过程中进行采样。

只需查询公共时间线,并使用返回的用户集:

这不会是随机的,因为这只是任何人发送的最后20条推文,但很可能不会是同一组用户发送两次

因为一次只给你20个,结果在他们的服务器上缓存60秒,所以你必须执行5个不同的请求,其间有60秒的暂停

当然,也有可能某些用户在某个特定时间段内会频繁发推,因此在这段时间内,您可能总共收到不到100个用户,因此,如果需要,您可以循环直到收到100个用户。

我将使用数字用户id。生成一组随机数,并基于此获取用户。如果你点击了一个不存在的id,直接跳过它

Twitter API wiki,用于用户/显示:

id.用户的id或屏幕名称


Twitter的流式API有一个名为Sample的端点,它返回所有公共状态的一个小随机样本

作者的twitter ID随推文一起返回,因此这将获得随机的活跃推文用户。

您可以使用在代码执行时从推文中获取连续的推文流。然后,您可以从接收到的tweet信息中提取用户tweeter

下面是使用


您可以使用此repo,[Random Twitter Handles Generator]为特定国家生成随机Twitter HandlesUserName

随机句柄是基于以下内容生成的:

国名 该国家/地区中指定数量的随机坐标点 给定纬度/纵向坐标点的半径(以km为单位)tweets将在该半径内 每个坐标点要获取的指定推文数 推特的语言
是的,我同意,随机性不会是完美的。但是,作为一个不切实际的例子,假设我从我自己开始,采取了10000个随机步骤。我登录的用户是随机的。@I.J:不是真的。这实际上取决于图形的结构。现在你可以做一些假设来暗示这一点,但是谁知道twitter用户图是什么样子的呢。谢谢。你知道数字用户id的范围吗?你可以创建一个新帐户,看看最容易查看的id是什么,RSS提要url包括用户id。我的用户id约为1200,所以我猜他们开始于1或接近1。如果你能找出id的结构,这可能是一个很好的选择。只有当数字ID的范围没有孔,或者ID中的孔在整个ID范围内分布均匀时,这才有效。如果ID范围内的孔分布不均匀,则生成随机ID并跳过无效的孔将导致用户样本有偏差。假设ID范围内的孔越高,孔的分布就越不均匀。如果在该范围内选择100个随机ID,则样本将偏向低ID用户。如果用户ID与您关心的其他用户特征相关,这可能是一个大问题。当Twitter ID在2015年之前为32位时,这一点可以正常工作。它们现在是64位的,这样的策略效率太低了。
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