[PYTHON] Visualisieren Sie Daten und erfassen Sie gleichzeitig die Korrelation

Einführung

Ich denke, Sie werden bei der Analyse von Daten Diagramme verwenden, um die Daten zu visualisieren. Zu diesem Zeitpunkt wäre es zweckmäßig, wenn die Statistiken, die die Korrelation zwischen den beiden Variablen zeigen, gleichzeitig angezeigt werden könnten. Daher haben wir es möglich gemacht, die entsprechenden Statistiken in der entsprechenden Grafik entsprechend dem Inhalt der Variablen (Kategorie oder numerischer Wert) anzuzeigen.

Rückblick bisher

Hier ist eine Zusammenfassung der geeigneten Grafikmethoden für jeden Variableninhalt und der Statistiken, die die Korrelationen darstellen, die ich bisher behandelt habe. Bitte beachten Sie den Link unten für Details. sns_corr_summary.png Visualisierung von Daten anhand einer erklärenden Variablen und einer objektiven Variablen So finden Sie die Korrelation für kategoriale Variablen

Stellen Sie die richtigen Statistiken in das richtige Diagramm

Ändern Sie die zuvor erstellte Methode "Zeichnen Sie das richtige Diagramm entsprechend dem Inhalt der Variablen (Kategorie oder Nummer)" und fügen Sie die richtigen Statistiken in das richtige Diagramm ein (siehe: [pandas DataFrame ist richtig] Ich habe eine Methode zur automatischen Auswahl und Visualisierung verschiedener Diagramme erstellt](https://qiita.com/mr160/items/d89ec84bfab865562a88).

import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as st

def visualize_data(data, target_col, categorical_keys=None):
     
    keys=data.keys()
        
    if categorical_keys is None:
        
        categorical_keys=keys[[is_categorical(data, key) for key in keys]]
   
    for key in keys:
        
        if key==target_col:
            continue
            
        length=10
        subplot_size=(length, length/2)
        
        if (key in categorical_keys) and (target_col in categorical_keys):

            r=cramerV(key, target_col, data)
            
            fig, axes=plt.subplots(1, 2, figsize=subplot_size)
            sns.countplot(x=key, data=data, ax=axes[0])
            sns.countplot(x=key, data=data, hue=target_col, ax=axes[1])
            plt.title(r)
            plt.tight_layout()
            plt.show()

        elif (key in categorical_keys) and not (target_col in categorical_keys):

            r=correlation_ratio(cat_key=key, num_key=target_col, data=data)
            
            fig, axes=plt.subplots(1, 2, figsize=subplot_size)
            sns.countplot(x=key, data=data, ax=axes[0])
            sns.violinplot(x=key, y=target_col, data=data, ax=axes[1])
            plt.title(r)
            plt.tight_layout()
            plt.show()

        elif not (key in categorical_keys) and (target_col in categorical_keys):

            r=correlation_ratio(cat_key=target_col, num_key=key, data=data)
            
            fig, axes=plt.subplots(1, 2, figsize=subplot_size)            
            sns.distplot(data[key], ax=axes[0], kde=False)
            g=sns.FacetGrid(data, hue=target_col)
            g.map(sns.distplot, key, ax=axes[1], kde=False)
            axes[1].set_title(r)
            axes[1].legend()            
            plt.tight_layout()
            plt.close()
            plt.show()

        else:

            r=data.corr().loc[key, target_col]
            
            sg=sns.jointplot(x=key, y=target_col, data=data, height=length*2/3)
            plt.title(r)
            plt.show()            

Außerdem wird unterwegs die folgende Methode angewendet.

def is_categorical(data, key):  #Bestimmen Sie, ob es sich um eine kategoriale Variable handelt
    
    col_type=data[key].dtype
    
    if col_type=='int':
        
        nunique=data[key].nunique()
        return nunique<6
    
    elif col_type=="float":
        return False
    
    else:
        return True

def correlation_ratio(cat_key, num_key, data):  #Finden Sie das Korrelationsverhältnis
    
    categorical=data[cat_key]
    numerical=data[num_key]
    
    mean=numerical.dropna().mean()
    all_var=((numerical-mean)**2).sum()
    
    unique_cat=pd.Series(categorical.unique())
    unique_cat=list(unique_cat.dropna())
    
    categorical_num=[numerical[categorical==cat] for cat in unique_cat]
    categorical_var=[len(x.dropna())*(x.dropna().mean()-mean)**2 for x in categorical_num]    

    r=sum(categorical_var)/all_var
    
    return r

def cramerV(x, y, data):  #Finden Sie die Anzahl der Verknüpfungen
    
    table=pd.crosstab(data[x], data[y])
    x2, p, dof, e=st.chi2_contingency(table, False)
    
    n=table.sum().sum()
    r=np.sqrt(x2/(n*(np.min(table.shape)-1)))

    return r

Versuchen Sie, es auf Titandaten anzuwenden (es werden nur Teilergebnisse angezeigt).

train_data=pd.read_csv("train.csv")
train_data=train_data.drop(["PassengerId", "Name", "Ticket", "Cabin"], axis=1)

categories=["Survived", "Pclass", "Sex", "Embarked"]
visualize_data(train_data, "Survived", categories)
countplot_corr.png distplot_corr.png

Schließlich

Ich habe versucht, die Methoden zusammenzufassen, die ich bisher gemacht habe. Jetzt können Sie die Daten visualisieren und die Korrelation sofort verstehen. Der Quellcode befindet sich auf github. Sie können ihn also gerne verwenden!

Recommended Posts

Visualisieren Sie Daten und erfassen Sie gleichzeitig die Korrelation
Zeichnen Sie mit Pythons Matplotlib mehrere Karten und Daten gleichzeitig
wxPython: Gleichzeitiges Zeichnen von Animationen und Grafiken
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ②
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ①
Durchsuchen Sie .loc und .iloc gleichzeitig in pandas DataFrame
Schleifen Sie gleichzeitig Variablen in der Vorlage
Ich möchte gleichzeitig einen Musik-Player erstellen und Musik ablegen
[In kürzester Zeit verstehen] Python-Grundlagen für die Datenanalyse
Verfahren zum gleichzeitigen Ändern des Tabellennamens und des Spaltennamens des Django-Modells
In Python integrierte Funktion ~ divmod ~ Lassen Sie uns gleichzeitig den Quotienten und den Rest der Division erhalten
[Python 3.8 ~] Schreiben Sie Arrays usw. gleichzeitig mit der Definition neu [Tipps]
[Statistik] Visualisieren und verstehen Sie die Hamiltonsche Monte-Carlo-Methode mit Animation.
Über Zeitreihendaten und Übertraining
python Hinweis: enumerate () - Index und Element der Liste gleichzeitig abrufen und zur Anweisung wenden
Richten Sie einen Server ein, der mehrere Verbindungen gleichzeitig verarbeitet
[Python] So öffnen Sie zwei oder mehr Dateien gleichzeitig
Visualisieren Sie einfach den Korrelationskoeffizienten zwischen Variablen
Rufen Sie den Python-Debugger jederzeit auf
Verstehen Sie den Entscheidungsbaum und klassifizieren Sie Dokumente
Visualisieren Sie die Exportdaten des Piyo-Protokolls
OpenFOAM-Zeitreihendaten lesen und Daten einstellen
Python open und io.open sind gleich
Lassen Sie uns die Beziehung zwischen Durchschnittsgehalt und Industrie mit XBRL-Daten und Seaborn visualisieren! (7/10)
Stellen Sie sicher, dass die Vorverarbeitung zum Zeitpunkt der Erstellung und Vorhersage des Vorhersagemodells ausgerichtet ist
Typkonvertierung mehrerer Spalten von Pandas DataFrame mit Astype gleichzeitig
Drehen Sie in Python mehrere Listen mit for-Anweisung gleichzeitig
Visualisieren Sie Eisenbahnstreckendaten und lösen Sie kürzeste Streckenprobleme (Python + Pandas + NetworkX)
[Python] Konvertierungsnotiz zwischen Zeitdaten und numerischen Daten
Visualisieren Sie Daten interaktiv mit TreasureData, Pandas und Jupyter.
Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
Zum Zeitpunkt des Python-Updates mit Ubuntu
Verstehen Sie den TensorFlow-Namespace und die gemeinsam genutzten Mastervariablen
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Es ist Zeit, ernsthaft über die Definition und die Fähigkeiten von Datenwissenschaftlern nachzudenken