Ich frage mich oft, welches Diagramm ich zur Visualisierung von Daten verwenden soll. Daher habe ich beim letzten Mal die Diagramme zusammengefasst, die für jeden Typ von erklärender Variable und objektiver Variable geeignet sind (Erklärende Variable, Visualisierungsmethode von Daten nach objektiver Variable). Ich dachte jedoch, ich schreibe "Ich werde das bald vergessen!" Aus diesem Grund habe ich eine Methode erstellt, die den Variablentyp automatisch ermittelt und ein geeignetes Diagramm zeichnet.
Die geeignete Seaborn-Methode für jede Art von erklärender Variable und objektiver Variable (ob es sich um eine diskrete Größe handelt oder nicht) ist wie folgt. Einzelheiten finden Sie im vorherigen Artikel über den obigen Link.
Unten ist der Code für meine eigene Methode.
import matplotlib.pyplot as plt
import seaborn as sns
def visualize_data(data, target_col):
for key in data.keys():
if key==target_col:
continue
length=10
subplot_size=(length, length/2)
if is_categorical(data, key) and is_categorical(data, target_col):
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.tight_layout()
plt.show()
elif is_categorical(data, key) and not is_categorical(data, target_col):
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.tight_layout()
plt.show()
elif not is_categorical(data, key) and is_categorical(data, target_col):
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].legend()
plt.tight_layout()
plt.close()
plt.show()
else:
sg=sns.jointplot(x=key, y=target_col, data=data, height=length*2/3)
plt.show()
Die is_categorical lautet wie folgt.
def is_categorical(data, key):
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
Der Umriss ist
Es ist geworden. Wenn der Datentyp int ist, wenn es 6 oder mehr Arten von Werten gibt, ist es eine kontinuierliche Größe, und wenn es nur 5 oder weniger Arten von Werten gibt, ist es eine diskrete Größe. Um ehrlich zu sein, gibt es hier Raum für Verbesserungen im Urteil.
Wenden Sie es auf Titandaten an (nur eine Kopie, da das Ergebnis lang ist).
import pandas as pd
data=pd.read_csv("train.csv")
data=data.drop(["PassengerId", "Name", "Ticket", "Cabin"], axis=1) #Schließt eindeutige Werte aus
visualize_data(data, "Survived")
Ich konnte für jeden Typ automatisch ein passendes Diagramm zeichnen!
In dem zuvor veröffentlichten GitHub zusammen mit Methode, um einen Überblick über Daten mit Pandas zu erhalten angehoben. Bitte benutzen Sie es! Ich möchte in Zukunft verschiedene Vorverarbeitungen automatisieren.