API qui peut obtenir des données sur Twitter
Pour plus d'informations,
Pour la méthode d'acquisition de l'API, reportez-vous au Résumé des procédures de l'enregistrement de l'API Twitter (méthode de demande de compte) à l'approbation
Social graph - Wikipedia The social graph is a graph that represents social relations between entities. In short, it is a model or representation of a social network, where the word graph has been taken from graph theory.
Un graphique montrant la relation sociale entre les objets (= nœuds). Exprimez l'amitié avec une ligne (= bord).
L'acquisition d'API est omise
Importation de bibliothèque
import json
import random
import pandas as pd
import matplotlib.pyplot as plt
from requests_oauthlib import OAuth1Session
import emoji
import networkx as nx
Stocker le jeton dans la variable
CK = '***************************'
CS = '***************************'
AT = '***************************'
ATS ='***************************'
Définition des fonctions
def get_twitter_session():
return OAuth1Session(CK, CS, AT, ATS)
Décidez de ce que vous voulez dessiner
user_list = ['himemoriluna','tokoyamitowa', 'amanekanatach','tsunomakiwatame','kiryucoco']
Créer un dictionnaire simple pour le dessin
user_id_list = []
user_name_list = []
for user_screenname_t in user_list:
ENDPOINT = 'https://api.twitter.com/1.1/users/show.json'
SEARCH_WORD_SCREENNAME = user_screenname # twitter_ID
twitter = get_twitter_session()
params = {'screen_name': SEARCH_WORD_SCREENNAME}
req = twitter.get(ENDPOINT, params=params)
req_json = json.loads(req.text)
user_id_list += [req_json['id']]
user_name_list += [req_json['name']]
target_id_dict = {}
for i in range(0,5):
target_id_dict[user_id_list[i]] = user_list[i]
# {1200396798281445376: 'himemoriluna',
# 1200357161747939328: 'tokoyamitowa',
# 1200396304360206337: 'amanekanatach',
# 1200397643479805957: 'tsunomakiwatame',
# 1200397238788247552: 'kiryucoco'}
target_name_dict = {}
for i in range(0,5):
target_name_dict[user_list[i]] = user_name_list[i]
# {'himemoriluna': 'Himemori Luna',
# 'tokoyamitowa': 'Towa éternel',
# 'amanekanatach': 'Kanata Amane',
# 'tsunomakiwatame': 'Pour enroulement carré',
# 'kiryucoco': 'Kiryu Coco'}
ʻObtenir l'utilisateur que l'utilisateur spécifié par user_list` suit et conserver le résultat dans le type de dictionnaire.
follow_ids_dict = {}
for user_id in user_id_list:
ENDPOINT = 'https://api.twitter.com/1.1/friends/ids.json'
SEARCH_WORD_ID = user_id
twitter = get_twitter_session()
params = {'screen_name': SEARCH_WORD_SCREENNAME}
req = twitter.get(ENDPOINT, params=params)
#Obtenez jusqu'à 5000 informations de suivi
follow_ids = json.loads(req.text)
follow_ids_dict[user_id] = follow_ids['ids']
Créer un dictionnaire pour contenir les noms d'utilisateurs
follow_name_dict = {}
follow_screenname_dict = {}
for user_id in follow_ids_dict.keys():
follow_name_list = []
follow_screenname_list = []
for user_id_nt in follow_ids_dict[user_id]:
ENDPOINT = endpoint['user']
SEARCH_WORD_ID = user_id_nt
twitter = get_twitter_session()
params = {'user_id': SEARCH_WORD_ID}
req = twitter.get(ENDPOINT, params=params)
req_json = json.loads(req.text)
follow_name_list += [req_json['name']]
follow_screenname_list += [req_json["screen_name"]]
follow_name_dict[target_name_dict[user_id]] = follow_name_list
follow_screenname_dict[target_name_dict[user_id]] = follow_screenname_list
Cette fois, nous allons visualiser un graphe dans lequel les branches sont orientées (branches dirigées) et les branches sont pondérées.
(C'est gênant si le pictogramme est affiché au passage, alors supprimez-le)
def remove_emoji(str_):
return ''.join(c for c in str_ if c not in emoji.UNICODE_EMOJI)
#Sélectionnez l'un des éléments suivants
# use_dict = follow_ids_dict #Visualisez avec un ID interne
# use_dict = follow_screenname_dict #Identifiant d'utilisateur(@xxxx)Visualisez avec
use_dict = follow_name_dict #Visualiser par nom d'utilisateur
Row_From = [] #point de départ
Row_To = [] #point final
for i in use_dict.keys():
for j in follow_name_dict[i]:
Row_From += [remove_emoji(target_name_dict[i])]
Row_To += [remove_emoji(j)]
result = pd.DataFrame(
data={'From':Row_From, 'To':Row_To},
columns=['From', 'To'])
result.head()
From | To | |
---|---|---|
0 | Himemori Luna | Talent Otouf |
1 | Himemori Luna | ROG Global |
2 | Himemori Luna | Fall Guys |
3 | Himemori Luna | Tomari |
4 | Himemori Luna | Nishizawa 5㍉ |
Puisque le but de ce temps est une expérience de visualisation, le poids de la branche est décidé de manière appropriée avec un nombre aléatoire.
def return_randint(num):
return random.randrange(1, 10000)/1000000000
result['WC'] = 0
result['WC'] = result['WC'].apply(return_randint)
network = result
From | To | WC | |
---|---|---|---|
0 | Himemori Luna | Talent Otouf | 7.649000e-06 |
1 | Himemori Luna | ROG Global | 7.657000e-06 |
2 | Himemori Luna | Fall Guys | 9.127000e-06 |
3 | Himemori Luna | Tomari | 4.878000e-06 |
4 | Himemori Luna | Nishizawa 5㍉ | 8.054000e-06 |
La valeur par défaut font_family
ne peut afficher que des caractères alphanumériques. Précisez parce que vous souhaitez afficher le japonais.
network_np = network.values
G = nx.DiGraph()
G.add_weighted_edges_from(network_np)
weighted_edges = []
for i in range(len(network)):
weighted_edges += [list(network.iloc[i])]
G_practice = nx.DiGraph()
G_practice.add_weighted_edges_from(weighted_edges)
pos=nx.spring_layout(G)
fig = plt.figure(figsize=(40, 40), dpi=100,facecolor='w', linewidth=0, edgecolor='w')
nx.draw_networkx(G_practice,pos,font_size=16,font_family='IPAexGothic')
fig.show()
↑ j'ai pu dessiner quelque chose comme ça ('ω')
Cette fois, le graphique des relations sociales a été réalisé à partir des informations de suivi sur Tiwtter. À l'avenir, nous rechercherons des variables qui peuvent décrire les relations avec plus de précision et, sur cette base, nous ajusterons les poids des branches et les découperons.
Recommended Posts