[PYTHON] Erstellen Sie eine partielle Korrelationsmatrix und zeichnen Sie ein unabhängiges Diagramm

Ich werde das Verfahren zum Zeichnen eines unabhängigen Diagramms mit graphviz einführen

Partielle Korrelationsmatrix und unabhängiger Graph

Es gibt zwei Gründe, warum die Korrelation beobachtet wird:

Die Teilkorrelation dient dazu, den Korrelationskoeffizienten nach Entfernen des letzteren Effekts zu erhalten, und der unabhängige Graph soll die Faktoren mit einer hohen Teilkorrelation verbinden. Siehe unten für Details.

Ableitung der Bedeutung des partiellen Korrelationskoeffizienten und der Formel https://mathtrain.jp/partialcor

1. Installieren Sie graphviz

Ich habe es noch nicht bestätigt, aber ich denke, es wird wahrscheinlich unten sein

Installieren Sie den Python-Wrapper von graphviz mit pip

terminal


pip install graphviz

Installieren Sie den Hauptteil von graphviz und stellen Sie ihn im jupyter notebook zur Verfügung

terminal


conda install -c conda-forge python-graphviz

2. Wie zeichnet man ein Diagramm?

Sie können einen Knoten mit node () und eine Verkettung mit edge () wie unten gezeigt schreiben. Wenn render () ausgeführt wird, wird der graphviz-Quellcode einmal exportiert und das Diagramm basierend darauf als png oder pdf exportiert. Wenn cleanup = True ist, exportieren Sie die Bilddatei nach dem Export als PNG unten

Ungerichtete Grafik

python


from graphviz import Graph

g = Graph(format='png')

g.node('1')
g.node('2')
g.node('3')
g.edge('1', '2')
g.edge('2', '3')
g.edge('3', '1')

g.render(filename='../test', format='png', cleanup=True, directory=None)
display(Image.open('../test.png'))

ダウンロード (2).png

Gerichteter Graph

python


from graphviz import Digraph

dg = Digraph(format='png')

dg.node('1')
dg.node('2')
dg.node('3')
dg.edge('1', '2')  # 1 -> 2
dg.edge('2', '3')  # 2 -> 3
dg.edge('3', '1')  # 3 -> 1

dg.render(filename='../test', format='png', cleanup=True, directory=None)
display(Image.open('../test.png'))

ダウンロード (3).png

3. Datenaufbereitung

Dieses Mal werde ich Iris als Beispieldaten verwenden

python


import numpy as np
import pandas as pd
from sklearn import datasets
import seaborn as sns

iris = datasets.load_iris()
df = pd.DataFrame(np.hstack([iris.data, iris.target.reshape(-1, 1)]), 
                  columns=iris.feature_names + ['label'])
sns.pairplot(df, hue='label')

ダウンロード (8).png

4. Erstellen einer Korrelationsmatrix

python


import matplotlib.pyplot as plt

cm = pd.DataFrame(np.corrcoef(df.T), columns=df.columns, index=df.columns)

sns.heatmap(cm, annot=True, square=True, vmin=-1, vmax=1, fmt=".2f", cmap="RdBu")
plt.savefig("pcor.png ")
plt.show()

ダウンロード (4).png

5. Erstellen einer partiellen Korrelationsmatrix

Ich habe diesen Code ausgeliehen. Hatena Blog Hashikure Engineer Verspottungsnotizen

Es scheint eine Möglichkeit zu geben, es etwas sorgfältiger zu testen und die nicht signifikante Korrelation nicht zu subtrahieren, aber hier handelt es sich um eine einheitliche Subtraktion.

python


import scipy

def cor2pcor(R):
    inv_cor = scipy.linalg.inv(R)
    rows = inv_cor.shape[0]
    regu_1 = 1 / np.sqrt(np.diag(inv_cor))
    regu_2 = np.repeat(regu_1, rows).reshape(rows, rows)
    pcor = (-inv_cor) * regu_1 * regu_2
    np.fill_diagonal(pcor, 1)
    return pcor

pcor = pd.DataFrame(cor2pcor(cm), columns=cm.columns, index=cm.index)

sns.heatmap(pcor, annot=True, square=True, vmin=-1, vmax=1, fmt=".2f", cmap="RdBu")
plt.savefig("pcor.png ")
plt.show()

ダウンロード (5).png

6. Zeichnen Sie ein Diagramm

Zeichnen Sie einen ungerichteten Graphen, indem Sie Stellen verketten, an denen der Absolutwert des Korrelationskoeffizienten größer als der entsprechend eingestellte Schwellenwert ist.

python


from graphviz import Graph
from PIL import Image

def draw_graph(cm, threshold):
    edges = np.where(np.abs(cm) > threshold)
    edges = [[cm.index[i], cm.index[j]] for i, j in zip(edges[0], edges[1]) if i > j]

    g = Graph(format='png')
    for k in range(cm.shape[0]):
        g.node(cm.index[k])

    for i, j in edges:
        g.edge(j, i)

    g.render(filename='../test', format='png', cleanup=True, directory=None)
    display(Image.open('../test.png'))

threshold = 0.3
draw_graph(cm, threshold)
draw_graph(pcor, threshold)

Grafik aus Korrelationsmatrix

ダウンロード (6).png

Grafik aus partieller Korrelationsmatrix

ダウンロード (7).png

Zusammenfassung

Da der Korrelationskoeffizient niedrig ist, scheint es ein wenig schwierig zu sein, allein damit zu schließen, aber wenn dies korrekt ist, korrelieren Länge und Breite des Gaku nur mit der Länge und Breite der Blütenblätter, nicht direkt mit der Art der Iris. Es scheint eine Sache zu sein. Es ist besser, ein Diagramm zu erstellen, als die Korrelationsmatrix zu betrachten, damit das Bild leichter zu verstehen ist.

Lass es uns versuchen

Recommended Posts

Erstellen Sie eine partielle Korrelationsmatrix und zeichnen Sie ein unabhängiges Diagramm
Erstellen Sie einen Axtgenerator und zeichnen Sie unendlich viele Diagramme
[Python] So erstellen Sie eine Korrelationsmatrix und eine Heatmap
Zeichnen Sie mit NetworkX ein Diagramm
Zeichnen Sie mit networkx ein Diagramm
Zeichne ein Diagramm mit Julia + PyQtGraph (2)
Zeichnen Sie eine Streudiagrammmatrix mit Python
Zeichnen Sie mit matplotlib ein loses Diagramm
Zeichne ein Diagramm mit Julia + PyQtGraph (1)
Zeichne ein Diagramm mit Julia + PyQtGraph (3)
Zeichnen Sie ein Diagramm mit Pandas + XlsxWriter
Zeichnen Sie ein Diagramm mit der PySimple-Benutzeroberfläche
[Python] Erstellen Sie einen Linebot, um den Namen und das Alter auf das Bild zu schreiben
Erstellen Sie eine Python3-Umgebung mit pyenv auf einem Mac und zeigen Sie NetworkX-Diagramme an
So zeichnen Sie ein Diagramm mit Matplotlib
Erstellen Sie mit dem Sympy-Modul ein Diagramm
Zeichnen Sie einfach ein Diagramm, indem Sie eine Datei angeben
Erstellen Sie eine Matrix mit PythonGUI (Textfeld)
Zeichnen Sie ein Diagramm mit PyQtGraph Part 1-Drawing
Erstellen Sie ein Diagramm mit Rändern, die mit matplotlib entfernt wurden
Erstellen Sie mit matplotlib ein gestapeltes Diagramm, das sowohl der positiven als auch der negativen Richtung entspricht
Erstellen Sie einen Filter, um ein Zugriffstoken mit der Graph-API (Flask) zu erhalten.