2010-02-06 70 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 
相關問題