上篇:Kaggle数据集之电信客户流失数据分析(一)
采用整体流失率作为标准,用于后面分析各维度的流失率做对比。
人口统计指标:‘gender’,‘SeniorCitizen’,‘Partner’,'Dependents’
fig,axes=plt.subplots(2,2,figsize=(15,15)) #画多子图,函数返回一个figure图像和子图axes的array列表
for i,j in enumerate(['gender','SeniorCitizen','Partner','Dependents']): #enumerate将数据对象组合为索引序列
plt.subplot(2,2,i+1) #i从0开始,子图的第i+1个图
ax=sns.countplot(x=j,hue='Churn',data=df,palette="Set2",order=df_Churn.groupby(j)['Churn'].value_counts().index.levels[0])
plt.title(str(j),fontsize=20)
plt.xlabel('Churn',fontsize=15)
plt.xticks(fontsize=15)
plt.legend(fontsize=15)
lent=df_Churn.groupby(j)['Churn'].value_counts().shape[0]
for p in range(lent):
Rate=df_Churn.groupby(j)['Churn'].value_counts()[p]/df.groupby(j,as_index=False)['Churn'].size()[p]
plt.text(p,100,'流失率{:.2%}'.format(Rate),fontsize=12)
i+=1
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
举例子理解groupby
例1
import pandas as pd
df1 = pd.DataFrame(data={
'books':['bk1','bk1','bk1','bk2','bk2','bk3'], 'price': [12,12,12,15,15,17],'num':[2,1,1,4,2,2]})
print(df1)
print(df1.groupby('books',as_index=True).sum())
print(df1.groupby('books',as_index=False).sum())
print(df1.groupby('books',as_index=False)['num'].size()) #统计
print(df1.groupby('books',as_index=False)['price'].size())
books price num
0 bk1 12 2
1 bk1 12 1
2 bk1 12 1
3 bk2 15 4
4 bk2 15 2
5 bk3 17 2
price num
books
bk1 36 4
bk2 30 6
bk3 17 2
books price num
0 bk1 36 4
1 bk2 30 6
2 bk3 17 2
books
bk1 3
bk2 2
bk3 1
dtype: int64
books
bk1 3
bk2 2
bk3 1
dtype: int64
例2
df2 = pd.DataFrame({
'A': ['a', 'b', 'a', 'c', 'a', 'c', 'b', 'c'],
'B': [2, 8, 1, 4, 3, 2, 5, 9],
'C': [102, 98, 107, 104,