<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 1. Признаки по одному
1.1. Количественные
Гистограмма и боксплот
Step1:  1.2. Категориальные
countplot
Step2:  2. Взаимодействия признаков
2.1. Количественный с количественным
pairplot, scatterplot, корреляции, heatmap
Step3:  2.2.  Количественный с категориальным
boxplot, violinplot
Step4:  2.3. Категориальный с категориальным
countplot
Step5:  3. Прочее
Manifold learning, один из представителей – t-SNE
<ASSISTANT_TASK:>
Python Code:
df['Total day minutes'].hist();
sns.boxplot(df['Total day minutes']);
df.hist();
Explanation: 1. Признаки по одному
1.1. Количественные
Гистограмма и боксплот
End of explanation
df['State'].value_counts().head()
df['Churn'].value_counts()
sns.countplot(df['Churn']);
sns.countplot(df['State']);
sns.countplot(df[df['State'].\
                 isin(df['State'].value_counts().head().index)]['State']);
Explanation: 1.2. Категориальные
countplot
End of explanation
feat = [f for f in df.columns if 'charge' in f]
df[feat].hist();
sns.pairplot(df[feat]);
df['Churn'].map({False: 'blue', True: 'orange'}).head()
df[~df['Churn']].head()
plt.scatter(df[df['Churn']]['Total eve charge'], 
            df[df['Churn']]['Total intl charge'],
           color='orange', label='churn');
plt.scatter(df[~df['Churn']]['Total eve charge'], 
            df[~df['Churn']]['Total intl charge'],
           color='blue', label='loyal');
plt.xlabel('Вечерние начисления');
plt.ylabel('Межнар. начисления');
plt.title('Распределение начислений для лояльных/ушедших');
plt.legend();
sns.heatmap(df.corr());
df.drop(feat, axis=1, inplace=True)
sns.heatmap(df.corr());
Explanation: 2. Взаимодействия признаков
2.1. Количественный с количественным
pairplot, scatterplot, корреляции, heatmap
End of explanation
sns.boxplot(x='Churn', y='Total day minutes', data=df);
sns.boxplot(x='State', y='Total day minutes', data=df);
sns.violinplot(x='Churn', y='Total day minutes', data=df);
df.groupby('International plan')['Total day minutes'].mean()
sns.boxplot(x='International plan', y='Total day minutes', data=df);
Explanation: 2.2.  Количественный с категориальным
boxplot, violinplot
End of explanation
pd.crosstab(df['Churn'], df['International plan'])
sns.countplot(x='International plan', hue='Churn', data=df);
sns.countplot(x='Customer service calls', hue='Churn', data=df);
Explanation: 2.3. Категориальный с категориальным
countplot
End of explanation
from sklearn.manifold import TSNE
tsne = TSNE(random_state=0)
df2 = df.drop(['State', 'Churn'], axis=1)
df2['International plan'] = df2['International plan'].map({'Yes': 1, 
                                                             'No': 0})
df2['Voice mail plan'] = df2['Voice mail plan'].map({'Yes': 1, 
                                                             'No': 0})
df2.info()
%%time
tsne.fit(df2)
plt.scatter(tsne.embedding_[df['Churn'].values, 0], 
            tsne.embedding_[df['Churn'].values, 1], 
            color='orange', alpha=.7);
plt.scatter(tsne.embedding_[~df['Churn'].values, 0], 
            tsne.embedding_[~df['Churn'].values, 1], 
            color='blue', alpha=.7);
Explanation: 3. Прочее
Manifold learning, один из представителей – t-SNE
End of explanation
<END_TASK>