2010-02-06 6 views
5

ट्विटर उपयोगकर्ताओं के सेट को ध्यान में रखते हुए "नोड्स" और संबंध u follows v "किनारों" के रूप में, हमारे पास एक ग्राफ है जिसमें से मैं यादृच्छिक रूप से उपयोगकर्ताओं का एक सबसेट चुनना चाहता हूं। मैं गलत हो सकता था, लेकिन एपीआई दस्तावेज़ों को पढ़ने से मुझे लगता है कि पहले से ज्ञात उपयोगकर्ता के अनुयायियों या दोस्तों को छोड़कर उपयोगकर्ताओं का संग्रह प्राप्त करना असंभव है।twitterrers के यादृच्छिक सेट का चयन करने का एक अच्छा तरीका क्या है?

तो, अपने आप से शुरू करना और वहां से ट्विटर ग्राफ की खोज करना, यादृच्छिक नमूना (100 कहें) उपयोगकर्ताओं का चयन करने का एक अच्छा तरीका क्या है?

उत्तर

3

मैं संख्यात्मक user id का उपयोग करूंगा। यादृच्छिक संख्याओं का एक गुच्छा उत्पन्न करें, और उस पर आधारित उपयोगकर्ताओं को लाएं। यदि आप एक nonxistent आईडी मारा, बस इसे छोड़ दें।

ट्विटर एपीआई विकी, उपयोगकर्ताओं/शो के लिए:

आईडी। उपयोगकर्ता का आईडी या स्क्रीन नाम।

+0

धन्यवाद। क्या आप संख्यात्मक उपयोगकर्ता आईडी की सीमा जानते हैं? –

+0

आप एक नया खाता बना सकते हैं, और देख सकते हैं कि यह कौन सी आईडी प्राप्त करता है (आरएसएस फ़ीड यूआरएल को देखने के लिए सबसे आसान, जिसमें उपयोगकर्ता आईडी शामिल है)। मेरा उपयोगकर्ता आईडी ~ 1200 है, इसलिए मुझे लगता है कि वे 1 (या उसके पास) पर शुरू हुए। –

+0

यदि आप आईडी की संरचना का पता लगा सकते हैं, तो यह शायद एक बहुत अच्छा विकल्प है। –

1

जब तक आपके पास संपूर्ण ट्विटर उपयोगकर्ता ग्राफ (या इसका यादृच्छिक नमूना नहीं है), तो आप एक यादृच्छिक नमूना नहीं ले पाएंगे। अन्यथा, आपके द्वारा किए गए किसी भी नमूने को आपके रिश्ते से पक्षपातपूर्ण किया जाएगा।

+0

हाँ, मैं मानता हूँ, अनियमितता सही नहीं होगा। लेकिन, एक अव्यवहारिक उदाहरण के रूप में, मान लीजिए कि मैंने खुद से शुरुआत की और 10,000 यादृच्छिक कदम उठाए। जिस उपयोगकर्ता पर मैं उतरा था वह बहुत यादृच्छिक होगा। –

+1

@ आईजे: सच नहीं है। यह वास्तव में ग्राफ की संरचना पर निर्भर करता है। अब आप कुछ धारणाएं कर सकते हैं जो इसका अर्थ देंगे, लेकिन कौन जानता है कि ट्विटर उपयोगकर्ता ग्राफ कैसा दिखता है। –

1

six degrees of separation मानना ​​सच है, आप 6 स्तर तक पहली बार एक ब्रेडथ खोज कर सकते हैं और उस सूची से 100 यादृच्छिक उपयोगकर्ताओं का चयन कर सकते हैं। या आप कह सकते हैं, जब मैं कहता हूं, मैं लाखों अद्वितीय उपयोगकर्ताओं और उस से नमूना 100 कहता हूं, तो मैं अधिक उपयोगकर्ताओं की तलाश करना बंद कर दूंगा।

चूंकि लाखों उपयोगकर्ताओं की सूची संग्रहित करने और नमूना करने का प्रयास करने से निषिद्ध हो सकता है, तो Reservoir Sampling नामक एक तकनीक है जिसका उपयोग आप कर सकते हैं, जो आपको ट्रैवर्सल के दौरान नमूना देने की अनुमति देता है।

1

बस सार्वजनिक समय क्वेरी, और उपयोगकर्ताओं के सेट का उपयोग लौटे:

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

यह यादृच्छिक नहीं होगी क्योंकि यह सिर्फ पिछले 20 ट्वीट्स किसी के द्वारा भेजा है, लेकिन यह सबसे अधिक संभावना होगा उपयोगकर्ताओं के दो बार कभी भी एक ही सेट न हो।

चूंकि यह केवल आपको एक समय में 20 देता है, और परिणाम 60 सेकंड के लिए अपने सर्वर पर कैश किए जाते हैं, तो आपको उनके बीच 60 सेकंड विराम के साथ 5 अलग-अलग अनुरोध करना होगा।

बेशक, यह भी संभव है कि कुछ उपयोगकर्ता एक निश्चित समय अवधि में अक्सर ट्वीट कर रहे हों, ताकि आप उस समय कुल 100 से अधिक उपयोगकर्ताओं को प्राप्त कर सकें, ताकि आप केवल 100 तक पहुंच सकें, जब तक आप 100 प्राप्त नहीं कर लेते करने की जरूरत है।

1

ट्विटर की स्ट्रीमिंग एपीआई कि समाप्ति बिंदु "नमूना" जो Returns a small random sample of all public statuses (सीएफ https://dev.twitter.com/docs/api/1.1/get/statuses/sample)

लेखक चहचहाना आईडी ट्वीट्स के साथ वापस आ रहे हैं कहा जाता है, तो यह आप यादृच्छिक सक्रिय चहचहाना उपयोगकर्ताओं मिलेगा।

1

आप अपने कोड निष्पादित करते समय ट्विटर पर पोस्ट की गई ट्वीट्स की निरंतर स्ट्रीम प्राप्त करने के लिए GET statuses/sample का उपयोग कर सकते हैं।इसके बाद आप निकाल सकते हैं उपयोगकर्ता (ट्वीटर) ट्वीट जानकारी से

प्राप्त यहाँ ऐसा करने के लिए अजगर कोड का उपयोग कर 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 
संबंधित मुद्दे

 संबंधित मुद्दे