作业要求:
使用auto_ins作如下分析
1、首先对loss重新编码为1/0,有数值为1,命名为loss_flag
2、对loss_flag分布情况进行描述分析
3、分析是否出险和年龄、驾龄、性别、婚姻状态等变量之间的关系(提示:使用分类盒须图,堆叠柱形图)
##########################################################
#-*- coding: utf-8 -*-
import pandas as pd
import os
os.chdir(r'D:\HW4')
data=pd.read_csv('auto_ins.csv',encoding='gbk')
# In[]######################################################
#对loss重新编码为1/0,有数值为1,命名为loss_flag,即0为不出险,1为出险
#查看loss分布情况
data['Loss'].value_counts()
#定义编码函数
def onecode(x):
if x <= 0:
return 0
elif x>0:
return 1
data['loss_flag']=data['Loss'].map(onecode)
'''
import numpy as np
data['loss_flag']=np.sign(data['Loss'])
#可直接应用sign函数达到相同效果
'''
# In[]######################################################
#对loss_flag分布情况描述分析
data['loss_flag'].value_counts()/data['loss_flag'].count()
##########################################################
Out[5]:
0 0.715332
1 0.284668
Name: loss_flag, dtype: float64
##########################################################
# In[]
#分析是否出险和年龄、驾龄、性别、婚姻状态等变量之间的关系(提示:使用分类盒须图,堆叠柱形图)
#loss_flag,Age,exp,Gender,Marital
import seaborn as sns
sns.boxplot(x = 'loss_flag', y = 'Age', data = data)
##########################################################
# In[]
sns.boxplot(x = 'loss_flag', y = 'exp', data = data)
##########################################################
from stack2dim import *
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
sns.set_context("talk")
stack2dim(data, i="loss_flag", j="Gender")
##########################################################
# In[]
#不用老师的包,自己画一个,确定丑了点
data_cross_raw=pd.crosstab(data['loss_flag'],data['Marital'])
data_cross=data_cross_raw.div(data_cross_raw.sum(1),axis=0)
data_cross.plot(kind='bar',stacked=True)