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.
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. Visualisierung von Daten anhand einer erklärenden Variablen und einer objektiven Variablen So finden Sie die Korrelation für kategoriale Variablen
Ä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)
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