中国保险业过去五年基础数据分析
分析报告目录
一.分析报告介绍
“保险”是近两年来人们茶余饭后的热门话题,我本次的报告是网上学习了数据分析相关课程以后的项目结业作业。本作业将从公开途径抓取中国保险业过去5年的基础数据,管中窥豹看一看这个行业及保险产品当前的状况,过去的发展及未来的驱势。
本次作业选取了这两年我个人比较感兴趣,自己平时比较关注的保险业进行了简单的分析,从选题,数据抓取,建模分析独立完成,历时一周,花了大量的时间。虽然这份报告对于真正业内人士来说只能算是皮毛,但是也给了我一个很好了解,体验数据挖掘/数据分析的整个过程。最大的感受是最重要的是好的,足够完备的数据,有了好的数据,后面的分析建模很多时候就是水到渠成的事情了。
此外,对保险行业内部的相关资料和知识点查询,也感谢我个人的保险经纪人陆颖一直一来有问必答的无私帮助。
二.用到的主要工具
Python版本: Python3.6
jupter notebook: Anaconda3-5.2.0-Windows-x86_64
pandas:数据分析读取数据
matplotlib:绘图
rcParams:用来正常显示中文,并设置中文字体
三.保险数据采集
本次报告的数据是通过和讯保险页面采集自2013年1月至2018年9月的保险行业基础数据,主要是保险总保费,各险种保费,和总赔付支出,各险种赔付支出的数据。
具体数据爬取代码这里就省略了。
四.数据清洗和预处理
经过数据爬取阶段,我们获得了所有的数据组成一个以月份为辨识标签的二维数组(total_data),接下来我们需要对数据进行基本的预处理,其中包括了生成Dataframe,查看数据缺失及错误状况,添加缺失并修改错误数据。
import pandas as pd
import numpy as np
a = np.vstack(total_data) #将初始数组生成DataFrame
columns_name = ['date','原保险保费总收入','财产险收入','人身险总收入','寿险收入','健康险收入','人身意外保险收入','原保险赔付总支出','财产险支出','人身险总支出','寿险支出','健康险支出','人身意外保险支出']
df = pd.DataFrame(data = a,columns = columns_name)
df.date = pd.to_datetime(df.date) #将传入的日期数据转变成datatime
df.set_index('date',inplace = True) #将日期数据转成DatatimeIndex
df1 = df.loc[:,:].astype(float) #确保每个表项都是float型
由于数据都是线性的,所以我们可以通过画个图来看数据采集是否完整,有无错误。
###############################################
####本段内容是为了解决画图无法显示中文字体的问题,如果可以显示中文则无需执行本段内容
####指定默认字体 需要先将网上下载的的SimHei.ttf 文件放入 ~\Anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\ttf 中,然后敲入以下命令即可:
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family']='sans-serif'
#解决负号'-'显示为方块的问题
matplotlib.rcParams['axes.unicode_minus'] = False
###############################################
from matplotlib import pyplot as plt
%matplotlib inline
df1.plot(figsize=(16,9)) #对初始的DataFrame进行画图
根据图示,我们可以看到2016年后段,17年1月份,12月份数据缺失,此外,16年7月, 18年2月和8月线条都有突变,预示数据大概率有误。这里数据的矫正只能手动输入,矫正数据源自保险监督管理委员会官网。
官网数据网页没有规律,且网页内表格不同年份的格式不一致,所以并未直接作为数据源进行采样。
df2 = df1.replace(0,np.nan) #先将0值全部替换成NAN值,以便后期检索是否还有未补缺数据
#获取缺失的基本月份数据
data1608 = [22958.9373,5635.0848,17323.8524,13721.4564,3098.2305,504.1655,6901.1431,2937.1279,3964.0152,3242.7249,605.3101,115.9803]
data1609 = [25168.2615,6370.5827,18797.6788,14783.8733,3430.4069,583.3985,7750.6999,3321.5870,4429.1129,3610.5333,687.1908,131.3888]
data1610 = [27010.3752,7018.3821,19991.9932,15703.9707,3647.7410,640.2814,8526.1670,3670.1245,4856.0425,3946.5561,763.4167,146.0697]
data1611 = [28864.8711,7773.0544,21091.8167,16556.6817,3841.7960,693.3390,9450.0194,4131.1226,5318.8968,4287.5209,870.7195,160.6564]
data1701 = [8553.4033,973.8127,7579.5907,6861.5894,641.1138,76.8875,1277.2914,419.6850,857.6063,729.5261,109.4866,18.5937]
data1712 = [36581.0074,9834.6579,26746.3495,21455.5650,4389.4604,901.3241,11180.7933,5087.4496,6093.3437,4574.8907,1294.7670,223.6859