[PYTHON] Versuchen Sie, mit der Twitter-API v2 ein soziales Diagramm zu zeichnen

Was du machen willst

  1. Ich möchte prüfen, ob ich hier ein Diagramm ← zeichnen kann

Was ist die Twitter-API?

API, die Daten auf Twitter erhalten kann

Für mehr Informationen,

Informationen zur API-Erfassungsmethode finden Sie unter Zusammenfassung der Verfahren von der Registrierung der Twitter-API (Kontoanwendungsmethode) bis zur Genehmigung. * Die Informationen sind möglicherweise veraltet

Soziale Grafik

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.

Ein Diagramm, das die soziale Beziehung zwischen Objekten (= Knoten) zeigt. Drücken Sie die Freundschaft mit einer Linie (= Kante) aus.

Hauptthema

Vorbereitung

Die API-Erfassung entfällt

Bibliotheksimport

import json
import random
import pandas as pd
import matplotlib.pyplot as plt
from requests_oauthlib import OAuth1Session
import emoji
import networkx as nx

Token in Variable speichern

CK = '***************************'
CS = '***************************'
AT = '***************************'
ATS ='***************************'

Funktionsdefinition

def get_twitter_session():
    return OAuth1Session(CK, CS, AT, ATS)

Entscheide, was du zeichnen möchtest

user_list = ['himemoriluna','tokoyamitowa', 'amanekanatach','tsunomakiwatame','kiryucoco']

Erstellen Sie ein einfaches Wörterbuch zum Zeichnen

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': 'Ewige Towa',
#  'amanekanatach': 'Kanata Amane',
#  'tsunomakiwatame': 'Zum quadratischen Wickeln',
#  'kiryucoco': 'Kiryu Coco'}

Daten bekommen

Erfasst den Benutzer, gefolgt von dem in user_list angegebenen Benutzer, und enthält das Ergebnis im Wörterbuchtyp.

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)

    #Erhalten Sie bis zu 5000 Follow-up-Informationen
    follow_ids = json.loads(req.text)
    follow_ids_dict[user_id] = follow_ids['ids']

Erstellen Sie ein Wörterbuch für Benutzernamen

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

DataFrame-Erstellung

Dieses Mal werden wir ein Diagramm visualisieren, in dem die Zweige ausgerichtet sind (gerichtete Zweige) und die Zweige gewichtet werden.

(Es ist problematisch, wenn das Piktogramm übrigens angezeigt wird, also löschen Sie es)

def remove_emoji(str_):
    return ''.join(c for c in str_ if c not in emoji.UNICODE_EMOJI)
#Wählen Sie eine der folgenden Optionen
# use_dict = follow_ids_dict #Visualisieren Sie mit interner ID
# use_dict = follow_screenname_dict #Benutzeridentifikation(@xxxx)Visualisieren mit
use_dict = follow_name_dict #Visualisieren Sie nach Benutzername

Row_From = [] #Startpunkt
Row_To = [] #Endpunkt

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㍉

Da der Zweck dieser Zeit ein Visualisierungsexperiment ist, wird das Gewicht des Zweigs angemessen mit einer Zufallszahl bestimmt.

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

Visualisierung

Die Standardeinstellung "font_family" kann nur alphanumerische Zeichen anzeigen. Geben Sie an, weil Sie Japanisch anzeigen möchten.

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()

image.png

↑ Ich konnte so etwas zeichnen ('ω')

Zukunftsaussichten

Dieses Mal wurde das Diagramm der sozialen Beziehungen basierend auf den Follow-up-Informationen zu Tiwtter erstellt. In Zukunft werden wir nach Variablen suchen, die Beziehungen genauer beschreiben können, und basierend darauf werden wir die Gewichte von Zweigen anpassen und ausschneiden.

Referenz

Recommended Posts

Versuchen Sie, mit der Twitter-API v2 ein soziales Diagramm zu zeichnen
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der Twitter-API
Diagrammzeichnung mit matplotlib
Versuchen Sie, Tweets mithilfe der Twitter-API in großen Mengen zu löschen
Versuchen Sie es mit der PeeringDB 2.0-API
Erstellen Sie mithilfe der Twitter-Streaming-API einen Echtzeit-Bot für die automatische Antwort
Versuchen Sie es mit der Admin-API von Janus Gateway
Zeichnen einer Silbersteinkurve mit Python
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
Versuchen Sie es mit der Aktions-API von Python argparse
Erstellen Sie die CRUD-API mit der Fast API
Verwenden der Diagrammzeichnung mit Pythons Matplotlib + Seaborn unter Windows, einer Nicht-Python-Ausführungsumgebung
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
So zeichnen Sie ein Diagramm mit Matplotlib
Versuchen Sie, eine einfache Animation in Python zu zeichnen
Versuchen Sie, mit matplotlib eine Normalverteilung zu zeichnen
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Ich habe versucht, mit einer Schildkröte eine Linie zu ziehen
Tweet mit der Twitter-API in Python
Erstellen Sie mit dem Sympy-Modul ein Diagramm
Versuchen Sie es mit einer probabilistischen Programmiersprache (Pyro).
Versuchen Sie, eine Karte mit Python + Cartopy 0.18.0 zu zeichnen
Versuchen Sie es mit Platypus, einer Mehrzweckoptimierungsbibliothek
Zeichnen Sie ein Diagramm mit PyQtGraph Part 1-Drawing
Verstärkungslernen 10 Versuchen Sie es mit einem trainierten neuronalen Netz.
Versuchen Sie, QR-Code mit Raspberry Pi zu verwenden
100-Sprach-Verarbeitung Knock-79 (mit Scikit-Learn): Präzisions-Recall-Grafikzeichnung
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Versuchen Sie es mit Sourcetrail, einem Quellcode-Visualisierungstool
Erstellen wir eine REST-API mit SpringBoot + MongoDB
Versuchen Sie eine lockere OAuth-Authentifizierung mit einem Kolben (Slack API V2).
Versuchen Sie, ein Konturdiagramm mit matplotlib mit OpenFOAM zu zeichnen
Versuchen Sie es mit der Kabu Station API von au Kabucom Securities
Versuchen Sie, eine Karte mit Pythons Folium-Paket zu zeichnen
Bereiten Sie einen Pseudo-API-Server mit GitHub-Aktionen vor
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Versuchen Sie, die DropBox Core-API mit Python zu verwenden