7
votes

Qu'est-ce qu'un bon moyen de sélectionner un ensemble aléatoire de Twitterers?

Considérant l'ensemble des utilisateurs de Twitter "Nœuds" et la relation U suit v comme "bords", nous avons un graphique à partir de laquelle je voudrais sélectionner un sous-ensemble des utilisateurs au hasard. Je pourrais avoir tort, mais de lire les Documents API, je pense qu'il est impossible d'obtenir une collection d'utilisateurs, sauf en obtenant les adeptes ou les amis d'un utilisateur déjà connu.

Donc, à partir de moi-même et explorez le graphique Twitter à partir de là, quel est un bon moyen de sélectionner un échantillon aléatoire de (disons 100) utilisateurs?


0 commentaires

7 Réponses :


1
votes

Sauf si vous avez l'ensemble du graphique de l'utilisateur Twitter (ou un échantillon aléatoire de celui-ci), vous ne pourrez pas prendre un échantillon aléatoire. Sinon, tout échantillon que vous prenez sera biaisé par sa relation avec vous.


2 commentaires

Oui, je suis d'accord, le hasard ne sera pas parfait. Mais, comme exemple peu pratique, supposons que j'ai commencé avec moi-même et a pris 10 000 étapes aléatoires. L'utilisateur que j'ai atterri sera assez aléatoire.


@ I.j: pas vrai. Cela dépend vraiment de la structure du graphique. Maintenant, vous pouvez faire des hypothèses qui impliqueront que, mais qui sait ce que ressemble au graphique de l'utilisateur Twitter.



1
votes

supposer le Six degrés de séparation est vrai, vous pouvez faire une première largeur de recherche jusqu'à 6 niveaux et sélectionnez 100 utilisateurs aléatoires de cette liste. Ou vous pourriez dire, je cesserai de chercher plus d'utilisateurs lorsque je reçois un million d'utilisateurs uniques et un échantillon 100 de cela.

Étant donné que le stockage d'une liste de millions d'utilisateurs et d'essayer d'échantillonner peut être prohibitif, il existe une technique appelée échantillonnage du réservoir < / a> que vous pouvez utiliser, qui vous permet d'échantillonner pendant la traversée elle-même.


0 commentaires

1
votes

interroger simplement la chronologie publique et utiliser l'ensemble des utilisateurs renvoyés:

http://apiwiki.twitter.com/twitter -Rest-API-Méthode% 3A-Status-Public_timeline

Ce ne sera pas aléatoire, car il ne s'agit que des 20 derniers tweets envoyés par n'importe qui, mais il ne serait probablement jamais le même ensemble d'utilisateurs deux fois.

Étant donné que cela ne vous donne que 20 à la fois, et que les résultats sont mis en cache sur leurs serveurs pendant 60 secondes, vous devrez faire 5 demandes différentes avec une pause de 60 secondes entre eux.

Bien sûr, il est également possible que certains utilisateurs se tweetant fréquemment dans une certaine période, vous pourriez obtenir un total de moins de 100 utilisateurs à cette époque, de sorte que vous pourriez simplement boucler jusqu'à ce que vous ayez 100 ans, si vous avez besoin de à.


0 commentaires

6
votes

J'utiliserais l'ID utilisateur numérique . Générez un tas de nombres aléatoires et récupérez les utilisateurs en fonction de cela. Si vous frappez un identifiant inexistant, ignorez simplement cela.

Le wiki Twitter API, pour les utilisateurs / spectacle:

id. L'identifiant ou le nom d'écran d'un utilisateur.


6 commentaires

Merci. Connaissez-vous la gamme d'identifiants numériques?


Vous pouvez créer un nouveau compte et voir quelle carte d'identité devient (plus facile à regarder l'URL de flux RSS, qui inclut l'ID utilisateur). Mon identifiant d'utilisateur est ~ 1200, alors je suppose qu'ils ont commencé à 1 (ou à proximité de cela).


Si vous pouvez comprendre une structure de l'IDS, c'est probablement une très bonne option.


Cela ne fonctionnera que si la gamme d'identifiants numériques n'a pas de trous ou si la distribution des trous dans l'IDS est uniforme sur la plage des identifiants. S'il y a une distribution non uniforme de trous dans la plage d'identité, générer ainsi des ID aléatoires et sauter des cadres invalides (trous) entraînera un échantillon biaisé d'utilisateurs. Imaginez qu'il y a plus de trous plus élevés que vous allez dans la plage d'identification (distribution non uniforme des trous). Si vous sélectionnez 100 identifiants aléatoires dans la plage, votre échantillon sera biaisé vers les utilisateurs de basse identité. Cela pourrait être un gros problème si l'ID utilisateur est corrélé à un autre trait utilisateur que vous vous souciez.


@Donniedeboer Votre argument est faux. C'est un mécanisme d'échantillonnage accepté-rejet et il n'a pas de biais de ce type de la distribution des trous. Pour le cas hypothétique que vous mentionnez, vos données d'origine elles-mêmes ont des utilisateurs moins numériques avec des identifiants élevés. L'échantillon collecté a également proportionnellement le même comportement. Le point de référence doit être les données d'origine ignorant les trous et non l'ensemble de l'espace user_id.


Cela fonctionne correctement lorsque les identifiants Twitter étaient 32 bits (avant 2015). Ils sont maintenant 64 bits et une telle stratégie est trop inefficace.



2
votes

L'API de streaming de Twitter a un point d'extrémité appelé "échantillon" que renvoie un petit échantillon aléatoire de tous les statuts publics (cf. https://dev.twitter.com/docs/apl'/1.1/get/statats/sample )

Les auteurs Les identifiants Twitter sont retournés avec les tweets. Cela vous permettrait donc d'obtenir des utilisateurs de Twitter actifs aléatoires Twitter.


0 commentaires

2
votes

Vous pouvez utiliser Obtenir des statuts / exemple pour obtenir un flux continu de tweets de Twitter étant affichés pendant que votre code est exécuté. Vous pouvez ensuite extraire l'utilisateur (Tweeter) à partir des informations Tweet reçues

Voici le code Python pour le faire à l'aide du Python Twitter API P>

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


0 commentaires

0
votes

Vous pouvez utiliser ce repo, [Générateur de Twitter aléatoire], pour générer des poignées de Twitter aléatoires (noms d'utilisateur) pour un pays spécifique.

Les poignées aléatoires sont générées sur la base de:

  • Nom du pays
  • Nombre spécifié de points de coordonnées aléatoires dans ce pays
  • rayon de la latitude / longitude donnée (point de coordonnée) en km (tweets se situera dans ce rayon)
  • Nombre spécifié de tweets pour obtenir un point de coordonnée
  • Langue des Tweets

0 commentaires