Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus

Über diesen Artikel

In Letztes Mal veröffentlicht folgte ich der Manga-basierten Statistik [Faktoranalyse] Kapitel 4 Hauptkomponentenanalyse mit Python.

Dieses Mal werde ich die Hauptkomponentenanalyse von Textdaten mit Python herausfordern.

Referenz

Hintergrund Zweck

Ursprünglich war es dieses Textanalysebuch von Herrn Akitetsu Kim, das mich dazu brachte, etwas über die Hauptkomponentenanalyse zu wissen. Als ich Textdaten gruppieren wollte, fand ich die Hauptkomponentenanalyse dieses Buches interessant, und dies war der Auslöser für das Studium der Hauptkomponentenanalyse.

Über den Analyseinhalt

Das Analyseziel besteht darin, Daten zu drei Themen zu schreiben (Freunde, Autos, japanisches Essen). Insgesamt gibt es 33 Daten für 3 Themen x 11 Personen.

Die Daten können vom Quellcode-Download auf der Support-Seite von [hier] abgerufen werden (https://www.kyoritsu-pub.co.jp/bookdetail/9784320112612).

Die Daten sind kein Text, sondern bereits im BoW-Format (Bag of Words). Daher sind Verarbeitungen wie morphologische Analysen und BoW-Umrechnungen diesmal nicht enthalten.

Code (Hauptkomponentenanalyse)

Der Code wird von Vorheriger Artikel umgeleitet.

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
from matplotlib import rcParams
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Hiragino Maru Gothic Pro', 'Yu Gothic', 'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'Noto Sans CJK JP']

#Lesen von Schreibdaten * Bitte ändern Sie den Dateipfad entsprechend Ihrer Umgebung.
df = pd.read_csv('./sakubun3f.csv',encoding='cp932')
data = df.values
# "Words"Säule,"OTHERS"Spalten ausschließen
d = data[:,1:-1].astype(np.int64)

#Datenstandardisierung * Die Standardabweichung wird durch unverzerrte Standardabweichung berechnet
X = (d - d.mean(axis=0)) / d.std(ddof=1,axis=0)

#Finden Sie die Korrelationsmatrix
XX = np.round(np.dot(X.T,X) / (len(X) - 1), 2)

#Finden Sie den Eigenwert und den Eigenwertvektor der Korrelationsmatrix
w, V = np.linalg.eig(XX)

print('-------Eigenwert-------')
print(np.round(w,3))
print('')

#Finden Sie die erste Hauptkomponente
z1 = np.dot(X,V[:,0])

#Finden Sie die zweite Hauptkomponente
z2 = np.dot(X,V[:,1])

##############################################################
#Zeichnen Sie ein Diagramm der ersten Hauptkomponentenbewertung und der zweiten Hauptkomponentenbewertung, die bisher erhalten wurden
##############################################################

#Objekte für Diagramme generieren
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111)

#Gitterlinien einfügen
ax.grid()

#Grenze der zu zeichnenden Daten
lim = [-6.0, 6.0]
ax.set_xlim(lim)
ax.set_ylim(lim)

#Bringen Sie die linke und untere Achse in die Mitte
ax.spines['bottom'].set_position(('axes', 0.5))
ax.spines['left'].set_position(('axes', 0.5))
#Löschen Sie die rechte und obere Achse
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

#Passen Sie den Abstand der Achsenskalen an
ticks = np.arange(-6.0, 6.0, 2.0)
ax.set_xticks(ticks)
ax.set_yticks(ticks)

#Achsenbeschriftung hinzufügen, Position anpassen
ax.set_xlabel('Z1', fontsize=16)
ax.set_ylabel('Z2', fontsize=16, rotation=0)
ax.xaxis.set_label_coords(1.02, 0.49)
ax.yaxis.set_label_coords(0.5, 1.02)

#Datenplot
for (i,j,k) in zip(z1,z2,data[:,0]):
    ax.plot(i,j,'o')
    ax.annotate(k, xy=(i, j),fontsize=16)

#Zeichnung
plt.show()

Ausführungsergebnis (Hauptkomponentenanalyse)

-------Eigenwert-------
[ 5.589e+00  4.433e+00  2.739e+00  2.425e+00  2.194e+00  1.950e+00
  1.672e+00  1.411e+00  1.227e+00  1.069e+00  9.590e-01  9.240e-01
  7.490e-01  6.860e-01  5.820e-01  5.150e-01  4.330e-01  3.840e-01
  2.970e-01  2.200e-01  1.620e-01  1.080e-01  8.800e-02  7.800e-02
  4.600e-02  3.500e-02 -7.000e-03 -2.000e-03  4.000e-03  1.700e-02
  1.300e-02]

Streudiagramm (Hauptkomponentenanalyse)

テキスト主成分分析1.png

Berücksichtigung aus dem Ergebnis

Nach der Erklärung des Buches lautet der Text mit 9 am Ende des Etiketts "japanisches Essen", 2 am Ende "Freund" und 5 am Ende "Auto".

Die Streukarte wird in der entgegengesetzten Richtung zum Buch ausgegeben, aber die drei Themen sind ordentlich klassifiziert: "Japanisches Essen" in der oberen linken Richtung, "Freunde" in der oberen rechten Richtung und "Auto" in der unteren rechten Richtung. .. (Die Zahl, die der des Buches entgegengesetzt ist, kann auf die Beliebigkeit eines konstanten Vielfachen des Eigenwerts zurückzuführen sein.)

Code (Faktor laden)

#Koordinaten mit dem Eigenvektor, der dem größten Eigenwert auf der horizontalen Achse entspricht, und dem Eigenvektor, der dem vorletzten Eigenwert auf der vertikalen Achse entspricht.
V_ = np.array([(V[:,0]),V[:,1]]).T
V_ = np.round(V_,2)

#Daten für die Grafikzeichnung
data_name=df.columns[1:-1]
z1 = V_[:,0]
z2 = V_[:,1]

#Objekte für Diagramme generieren
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111)

#Gitterlinien einfügen
ax.grid()

#Grenze der zu zeichnenden Daten
lim = [-0.4, 0.4]
ax.set_xlim(lim)
ax.set_ylim(lim)

#Bringen Sie die linke und untere Achse in die Mitte
ax.spines['bottom'].set_position(('axes', 0.5))
ax.spines['left'].set_position(('axes', 0.5))
#Löschen Sie die rechte und obere Achse
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

#Passen Sie den Abstand der Achsenskalen an
ticks = np.arange(-0.4, 0.4, 0.2)
ax.set_xticks(ticks)
ax.set_yticks(ticks)

#Achsenbeschriftung hinzufügen, Position anpassen
ax.set_xlabel('Z1', fontsize=16)
ax.set_ylabel('Z2', fontsize=16, rotation=0)
ax.xaxis.set_label_coords(1.02, 0.49)
ax.yaxis.set_label_coords(0.5, 1.02)

#Datenplot
for (i,j,k) in zip(z1,z2,data_name):
    ax.plot(i,j,'o')
    ax.annotate(k, xy=(i, j),fontsize=14)
    
#Zeichnung
plt.show()

Streudiagramm (Faktorbelastung)

テキスト主成分分析2.png

Berücksichtigung aus dem Ergebnis

Die Faktorbelastung ist ebenfalls entgegengesetzt, aber das Ergebnis ist fast das gleiche wie im Buch.

Wörter, die wahrscheinlich mit dem Thema "japanisches Essen" wie "Japanisch" und "Reis" in der oberen linken Richtung zusammenhängen, und Wörter, die wahrscheinlich mit dem Thema "Freunde" wie "bester Freund" und "Freund" in der oberen rechten Richtung zusammenhängen. In der unteren rechten Richtung gibt es jedoch Wörter, die mit dem Thema "Auto" in Zusammenhang zu stehen scheinen, wie "Verkehr" und "Unfall".

Wenn Sie es mit dem Streudiagramm der Hauptkomponenten vergleichen, können Sie sehen, dass die Richtungen der Wörter, die wahrscheinlich mit jedem Thema zusammenhängen, gleich sind.

Impressionen

Als ich den Code vom vorherigen Artikel umleitete, konnte ich die Hauptkomponenten von Textdaten einfacher analysieren als erwartet.

Dieses Mal wurden die Daten bereits sauber vorverarbeitet, sodass die Ergebnisse ziemlich gut waren. Das nächste Mal möchte ich prüfen, ob es in Nachrichtenartikeln ordentlich klassifiziert werden kann.

Ende

Recommended Posts

Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
Datenanalyse mit Python 2
Datenanalyse mit Python
Ich habe versucht, die Hauptkomponenten mit Titanic-Daten zu analysieren!
Hauptkomponentenanalyse mit Python von nim mit nimpy
Text Mining mit Python ① Morphologische Analyse
Hauptkomponentenanalyse mit Spark ML
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
Dies und das der Hauptkomponentenanalyse
Hauptkomponentenanalyse mit Livedoor News Corpus --Practice--
Datenanalyse Python
Praktische Übung zur Datenanalyse mit Python ~ 2016 New Coder Survey Edition ~
Einführung in die Python-Grundlagen des maschinellen Lernens (unbeaufsichtigtes Lernen / Hauptanalyse)
Empfehlung von Altair! Datenvisualisierung mit Python
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Ich habe 0 Jahre Programmiererfahrung und fordere die Datenverarbeitung mit Python heraus
Hauptkomponentenanalyse mit Livedoor News Corpus - Vorbereitung--
Dimensionskomprimierung durch Selbstcodierer- und Hauptkomponentenanalyse
PRML Kapitel 12 Bayesianische Hauptanalyse Python-Implementierung
Statische Analyse von Python-Code mit GitLab CI
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Sprachanalyse mit Python
Erkennen Sie die Kontur und Richtung eines geformten Objekts mit OpenCV3 und Python3 (Hauptkomponentenanalyse: PCA, Eigenvektor)
Python-Datenanalysevorlage
Hauptkomponentenanalyse (Hauptkomponentenanalyse: PCA)
Sprachanalyse mit Python
Python-Übungsdatenanalyse Zusammenfassung des Lernens, dass ich ungefähr 10 mit 100 Schlägen getroffen habe
[Python] Vergleich der Theorie und Implementierung der Hauptkomponentenanalyse durch Python (PCA, Kernel PCA, 2DPCA)
2. Multivariate Analyse in Python 3-2. Hauptkomponentenanalyse (Algorithmus)
Koordinierte Filterung mit Hauptkomponentenanalyse und K-Mittel-Clustering
[Python] [Word] [python-docx] Einfache Analyse von Diff-Daten mit Python
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Lesehinweis: Einführung in die Datenanalyse mit Python
Mathematisches Verständnis der Hauptkomponentenanalyse von Anfang an
Aufbau einer Datenanalyseumgebung mit Python (IPython Notebook + Pandas)
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Liste des Python-Codes, der bei der Big-Data-Analyse verwendet wird
Flugzeugskelettanalyse mit Python (4) Umgang mit erzwungener Verschiebung
Hauptkomponentenanalyse (PCA) und unabhängige Komponentenanalyse (ICA) mit Python
[Grundlagen der Datenwissenschaft] Sammeln von Daten aus RSS mit Python
2. Multivariate Analyse in Python 3-1. Hauptkomponentenanalyse (Scikit-Learn)
Verwenden Sie Python, das von Pyenv mit Sublime REPL von Sublime Text 3 installiert wurde
Holen Sie sich mit Python eine große Menge von Starbas Twitter-Daten und probieren Sie die Datenanalyse Teil 1 aus
[In-Database Python Analysis Tutorial mit SQL Server 2017] Schritt 4: Feature-Extraktion von Daten mit T-SQL
Mit Python erstellte Beispieldaten
Mein Python-Datenanalyse-Container
[Python] Morphologische Analyse mit MeCab
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Python für die Datenanalyse Kapitel 4
Python: Japanischer Text: Morphologische Analyse
Holen Sie sich Youtube-Daten mit Python
Emotionsanalyse von Python (word2vec)
Statische Analyse von Python-Programmen
[Python] Hinweise zur Datenanalyse
Lernen ohne Lehrer 3 Hauptkomponentenanalyse