import os
import pandas as pd
os.chdir(r'H:\2019-2-3新华书店笔记以及资料\资料\HW4')
au=pd.read_csv(r'auto_ins.csv',encoding='gbk')
au.head() #简单查看数据
EngSize | Age | Gender | Marital | exp | Owner | vAge | Garage | AntiTFD | import | Loss | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2.0 | 56 | 男 | 已婚 | 20 | 公司 | 10 | 有 | 有防盗装置 | 进口 | 0.0 |
1 | 1.8 | 41 | 男 | 已婚 | 20 | 公司 | 9 | 有 | 无防盗装置 | 国产 | 0.0 |
2 | 2.0 | 44 | 男 | 未婚 | 20 | 公司 | 8 | 有 | 有防盗装置 | 国产 | 0.0 |
3 | 1.6 | 56 | 男 | 已婚 | 20 | 公司 | 7 | 有 | 有防盗装置 | 国产 | 0.0 |
4 | 1.8 | 45 | 男 | 已婚 | 20 | 公司 | 7 | 无 | 无防盗装置 | 国产 | 0.0 |
def codeMy(x): #编写函数,对数据处理
if x>0:
return 1
else:
return 0
au['loss_flag']=au['Loss'].apply(codeMy)
au["loss_flag1"]= au.Loss.map(lambda x: 'shi' if x >0 else 'f')
au.head() #查看数据处理后的数据
EngSize | Age | Gender | Marital | exp | Owner | vAge | Garage | AntiTFD | import | Loss | loss_flag | loss_flag1 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2.0 | 56 | 男 | 已婚 | 20 | 公司 | 10 | 有 | 有防盗装置 | 进口 | 0.0 | 0 | f |
1 | 1.8 | 41 | 男 | 已婚 | 20 | 公司 | 9 | 有 | 无防盗装置 | 国产 | 0.0 | 0 | f |
2 | 2.0 | 44 | 男 | 未婚 | 20 | 公司 | 8 | 有 | 有防盗装置 | 国产 | 0.0 | 0 | f |
3 | 1.6 | 56 | 男 | 已婚 | 20 | 公司 | 7 | 有 | 有防盗装置 | 国产 | 0.0 | 0 | f |
4 | 1.8 | 45 | 男 | 已婚 | 20 | 公司 | 7 | 无 | 无防盗装置 | 国产 | 0.0 | 0 | f |
#2、对loss_flag分布情况进行描述分析
au.loss_flag1.value_counts()#查看这一列的数据分布
f 3028
shi 1205
Name: loss_flag1, dtype: int64
au.loss_flag1.value_counts()/au.Loss.count()
f 0.715332
shi 0.284668
Name: loss_flag1, dtype: float64
au.loss_flag1.value_counts().plot(kind='bar') #这列数据用图形展示
<matplotlib.axes._subplots.AxesSubplot at 0x996e160>
# 3、分析是否出险和年龄、驾龄、性别、婚姻状态等变量之间的关系
import matplotlib.pyplot as plt
import seaborn as sns
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
#是否出险和年龄
sns.boxplot(x = 'loss_flag1',y = 'Age',data = au, ax = ax1)
#是否出险和驾龄
sns.boxplot(x = 'loss_flag1',y = 'exp',data = au, ax = ax2) #查看是否出险和年龄,驾龄的关系何须图
<matplotlib.axes._subplots.AxesSubplot at 0xb947320>
pd.crosstab(au['Gender'],au.loss_flag1).plot(kind='bar') #性别和出险的关系对比
<matplotlib.axes._subplots.AxesSubplot at 0xbb3ad30>
au['Gender'].value_counts().plot(kind='bar')#男女出险的对比
<matplotlib.axes._subplots.AxesSubplot at 0xbdbd400>
#是否出险和性别
from stack2dim import *
stack2dim(au,'Gender','loss_flag1') #调用以前写的库,画出性别和出险的关系图(柱状图的粗细代表数量,纵坐标代表百分比)
#是否出险和婚姻状态
stack2dim(au,'Marital','loss_flag1')