直接上代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as stats
plt.style.use("ggplot")
df = pd.read_csv("Titanic.csv")
df.shape
df.info()
df.head()
df.keys()
df['Survived'].value_counts()
###################################
'''
pandas可以使用crosstab 直接返回一个table对象,并且直接使用scipy的函数,计算出卡方值。
'''
pd.crosstab(df['Sex'], df['Survived'])
pd.crosstab(df['Pclass'], df['Survived'])
stats.chi2_contingency([[80, 136], [97, 87], [372, 119]])
table = pd.crosstab(df['Pclass'], df['Survived'])
table
stats.chi2_contingency(table)
'''
尝试使用pivot—table
'''
'''
pivot_table会默认使用index 作为分行,对所有的变量进行分行统计
'''
# df.pivot_table(index=df['Sex'])
# 只统计存活
df.pivot_table(index=df['Sex'])['Survived']
df.pivot_table(index=df['Sex'],aggfunc=sum)['Survived']
df.pivot_table(index=df['Sex'], aggfunc=np.mean)['Survived']
df.pivot_table(index=df['Sex'], aggfunc=np.sum)['Survived']
df.pivot_table(index=['Sex', 'Pclass'])['Survived']
'''
使用groupby
'''
df.groupby(df['Sex'])['Survived'].value_counts()
#使用 unstack 可以实现和 crosstab 同样的效果
df.groupby(df['Sex'])['Survived'].value_counts().unstack()
df.groupby([df['Sex'], df['Pclass']])['Survived'].value_counts().unstack()
########################
######## 开始作图
########################
sns.countplot(x='Sex', hue='Survived', data=df)
sns.countplot(x='Pclass', hue='Survived', data=df)
df['Survived'].value_counts(sort=True).plot(kind="pie", labels=['dead', 'survived'], autopct='%1.2f%%')
df.groupby(df['Sex'])['Survived'].value_counts().plot.bar()
####使用crosstab的对象作图
pd.crosstab(df['Sex'], df['Survived']).plot(kind='bar')
##################################
############# 最简单的做堆积条形图的方法,就是使用table对象,
##################################
table
table.plot(kind = 'bar')
table = pd.crosstab(index=df['Sex'], columns=df['Survived'])
table
table.plot(kind = 'bar')
table.plot(kind='bar', stacked = True)
###################################
############## 使用sns作图
###################################
sns.countplot(x='Sex', hue='Survived', data=df)
sns.countplot(x='Pclass', hue='Survived', data=df)
#如果想使用多个分类, 就需要使用catplot
##############年龄作图
df['Age'].plot(kind='kde')
df[df['Survived']==0]['Age'].plot(kind='kde')
df[df['Survived']==1]['Age'].plot(kind='kde')
sns.kdeplot(data=df['Age'])
sns.kdeplot(data= df[df['Survived']== 0]['Age'], shade=True )
sns.kdeplot(data= df[df['Survived']== 1]['Age'], shade=True )