Ich habe Python satt, also habe ich versucht, die Daten mit nehan zu analysieren (ich möchte sogar mit Corona live gehen) - Teil 1)

Gruß

Hallo, das ist Sunfish. ** "Twtter x Corona" ** Dies ist das zweite Mal in der Serie. Letztes Mal hat versucht, die Anzahl der Tweets zu zählen, es war ein Level, aber dieses Mal werde ich mein Bestes geben. Insbesondere wenn Sie von der Verarbeitung natürlicher Sprache wie der Installation von MeCab oder dem Erstellen einer Umgebung erschöpft sind, werfen Sie bitte einen Blick darauf.

Suchen Sie nach Auf- / Ab-Trendwörtern aus Twitter-Daten

Mehr als ein halbes Jahr ist vergangen, seit das Koronavirus zu einem sozialen Problem wurde. Folgen wir dem Tweet, was in den Menschen aufsteigt und was vergessen wird. Im ersten Teil werden wir eine morphologische Analyse durchführen und die zu analysierenden Wörter auswählen.

Daten

Verwenden Sie die Daten nach Letzte Vorverarbeitung. Mit anderen Worten, es sind die Daten des Tweet-Datums und des Tweet-Inhalts. スクリーンショット 2020-10-05 16.14.11.png

Doppelter Löschvorgang

Tatsächlich tritt in diesen Daten derselbe Tweet-Inhalt über mehrere Datensätze und mehrere Tage auf. (Weil es Retweet enthält) Dieses Mal werden wir mit 1 Tweet-Inhalt 1 Datensatz analysieren, ohne die Retweet-Tendenz.

from collections import Counter
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import statsmodels.api as sm
import re
import MeCab
import dask.dataframe as dd
from multiprocessing import cpu_count

#Die meisten wurden für jeden Tweet erstellt_At dauert einen jungen Tag und macht 1 Tweet 1 Rekord
port_13['Created_At'] = pd.to_datetime(port_12['Created_At'])
port_13 = port_12.groupby(['Text']).apply(lambda grp: getattr(
    grp, 'nsmallest')(n=1, columns='Created_At', keep='first'))
port_13['Created_At'] = port_12['Created_At'].map(lambda x: x.date())

スクリーンショット 2020-10-05 16.29.00.png

Morphologische Analyse

Ich werde den Schlüssel zur Sprachverarbeitung tun. Da es schwer zu verstehen ist, ob alle Teile angegeben sind, wird diesmal nur die ** "allgemeine Nomenklatur" ** analysiert.

def tokenizer(text, pos, only_surface):
    def _extract():
        if only_surface:
            return re.sub(r'[\s ]+', '_', feature[0])
        else:
            return re.sub(r'[\s ]+', '_', feature[2])
    _tagger = MeCab.Tagger(
        '-Ochasen -d {}'.format("/var/lib/mecab/dic/mecab-ipadic-neologd"))
    try:
        result = []
        for feature in _tagger.parse(text).split('\n')[:-2]:
            feature = feature.split('\t')
            if pos:
                if feature[3] in pos:
                    result.append(_extract())
            else:
                result.append(_extract())
        return ' '.join(result)
    except UnicodeEncodeError:
        return ''
    except NotImplementedError:
        return ''

port2 = port1.copy()
port2['Text_Morphem'] = port2['Text'].fillna('')
ddf = dd.from_pandas(port2, npartitions=cpu_count()-1)
target_cols = ['Text_Morphem']
pos = ['Substantiv-Allgemeines']
for target_col in target_cols:
    ddf[target_col] = ddf[target_col].apply(
        tokenizer, pos=pos, only_surface=True, meta=(f'{target_col}', 'object'))
port2 = ddf.compute(scheduler='processes')

↓ nehans morphologische Analyse kombiniert durch Leerzeichen getrennte morphologische Elemente und fügt sie in eine Spalte ein. スクリーンショット 2020-10-05 16.43.11.png


Beachten Sie, dass Tweets, die keine allgemeine Nomenklatur enthalten, die Ergebnisse der morphologischen Analyse verlieren. Löschen Sie sie daher. Verwenden Sie die Verarbeitung fehlender Werte.

port_15 = port_14.copy()
port_15 = port_15.dropna(subset=None, how='any')

スクリーンショット 2020-10-05 16.53.19.png

Wählen Sie häufig vorkommende Wörter aus (*)

Da es unvermeidlich ist, Wörter anzuvisieren, die selten vorkommen, haben wir diejenigen analysiert, die im gesamten Zeitraum mehr als 1.500 Wörter enthielten.

#Aggregation der Worthäufigkeit
port_18 = port_15.copy()
flat_words = list(chain.from_iterable(port_18['Text_Morphem'].str.split(' ')))
c = Counter(flat_words)
res = pd.DataFrame.from_dict(c, orient='index').reset_index()
res.columns = ['Wort', 'Anzahl']
port_18 = res

#Zeilenfilter nach Bedingung
port_20 = port_18[(port_18['Anzahl'] >= 1500.0)]

#Spaltenauswahl
port_21 = port_20[['Wort']]

スクリーンショット 2020-10-05 17.36.21.png

↓ Die Anzahl der Erscheinungen der ausgewählten 27 Wörter sieht folgendermaßen aus スクリーンショット 2020-10-05 17.53.26.png

↓ Als Bonus ist es eine Wortwolke vor der Auswahl. スクリーンショット 2020-10-05 17.36.54.png

Aggregieren Sie die Anzahl der Wörter, die jeden Tag erscheinen, und beschränken Sie sich auf häufig vorkommende Wörter

Da die Zielwörter im vorherigen Schritt eingegrenzt wurden, besteht der nächste Schritt darin, tägliche Daten zu erstellen. Aggregieren Sie die Worthäufigkeit mit "Created_At" als Schlüsselspalte.

port_16 = port_15.copy()
target_col = 'Text_Morphem'
groupby_cols = ['Created_At']
tmp = port_16[groupby_cols+[target_col]]
tmp = tmp.groupby(groupby_cols)[target_col].apply(lambda x: ' '.join(x))
vec_counter = CountVectorizer(tokenizer=lambda x: x.split(' '))
X = vec_counter.fit_transform(tmp)
res = pd.DataFrame(X.toarray(), columns=vec_counter.get_feature_names(), index=tmp.index
                   ).reset_index().melt(id_vars=groupby_cols, var_name='Wort', value_name='Anzahl')
port_16 = res.sort_values(groupby_cols).reset_index(drop=True)

スクリーンショット 2020-10-05 17.39.39.png


Kombinieren Sie hier die * Daten, beschränken Sie die täglichen Daten auf die zu analysierenden Wörter, und die Arbeit des ersten Teils ist abgeschlossen.

port_22 = pd.merge(port_21, port_16, how='inner',
                   left_on=['Wort'], right_on=['Wort'])

スクリーンショット 2020-10-05 17.46.07.png

↓ Filtern Sie als Test die erhaltenen Daten und visualisieren Sie die Anzahl der Wortauftritte pro Tag. Ein Lächeln ist besser als ein weinendes Gesicht. スクリーンショット 2020-10-05 17.56.28.png

Zusammenfassung

Es ist lange her, aber ich habe versucht, die Anzahl der häufigen Wörter zu ermitteln, die jeden Tag erscheinen. Wir legen Wert auf Einfachheit gegenüber Strenge. Bei dem Versuch, eine komplizierte Analyse durchzuführen, ist der Code in der Regel lang und schwierig, aber nehan tut dies mit 10 Knoten (der Anzahl der grünen Kreise). Natürlich habe ich keine Programme geschrieben. Ich hoffe, Sie werden sich auch nur ein wenig für nehan interessieren.

Recommended Posts

Ich habe Python satt, also habe ich versucht, die Daten mit nehan zu analysieren (ich möchte sogar mit Corona live gehen) - Teil 2)
Ich habe Python satt, also habe ich versucht, die Daten mit nehan zu analysieren (ich möchte sogar mit Corona live gehen) - Teil 1)
Ich hatte Python satt und analysierte die Daten mit Nehan (Corona verwandt, ist das Wort jetzt?)
Ich habe versucht, die statistischen Daten der neuen Corona mit Python abzurufen und zu analysieren: Daten der Johns Hopkins University
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich möchte Daten mit Python analysieren können (Teil 1)
Ich möchte Daten mit Python analysieren können (Teil 4)
Ich möchte Daten mit Python analysieren können (Teil 2)
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich möchte Protokolle mit Python analysieren
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, die Negativität von Nono Morikubo zu analysieren. [Vergleiche mit Posipa]
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
☆ Mr. Anzai… !! Ich möchte die Daten analysieren …… Teil 1 Datenvorbereitung ☆ Analysieren wir die NBA-Spielerstatistiken (Ergebnisse) mit Python. Basketball
Ich bin ein Amateur am 14. Tag von Python, aber ich möchte maschinelles Lernen mit Scicit-Learn ausprobieren
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich möchte mit Python-Datenklasse nach hinten erben
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich habe versucht, die Laufdaten des Rennspiels (Assetto Corsa) mit Plotly zu visualisieren
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, die Emotionen des gesamten Romans "Wetterkind" zu analysieren
Ich möchte eine andere Version von Python mit pyvenv angeben
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
[Python] Ich habe versucht, Tweets über Corona mit WordCloud zu visualisieren
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich möchte die Natur von Python und Pip kennenlernen
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, die Punktgruppendaten-DB der Präfektur Shizuoka mit Vue + Leaflet anzuzeigen
Ich habe versucht, das Problem von F02 zu lösen, wie man mit Python offline in Echtzeit schreibt
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich möchte mit Python eine beliebige URL aus der Zeichenfolge der HTML-Quelle extrahieren
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services mit Python zu überprüfen. # 1
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services in Python zu überprüfen. # 2
[Python] Ich habe versucht, das Preisgeld von "ONE PIECE" über 100 Millionen Zeichen mit matplotlib zu visualisieren.
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen