平安简单分析

1、爬虫数据收集

import os
import requests
import pandas as pd


headers={'User-Agent':'Mozilla 5.0'}


def get_data_and_save(year_month):
    '''
    获取中国平安规模保费数据并保存为csv文件
    :param year_month:形如'201801'表示18年1月份数据
    :return:
    '''
    url='http://www.pingan.cn/zh/common/ir/questions-answers/income/%s.shtml?' % year_month

    r=requests.get(url, headers=headers)
    r.encoding='utf-8'
    print(year_month,len(r.text))
    dfs=pd.read_html(r.text)
    for index, df in enumerate(dfs, 1):    # 一个序列、迭代器或其他支持迭代对象   下标起始位置
        df.to_csv('data/pingan/%s_%s.csv' % (year_month, index), index=False, header=False, encoding='utf_8_sig')
        

def start():
    '''
    下载中国平安历史规模保费数据,只需要第一次使用,后续只需下载每月数据即可
    zfill返回指定长度的字符串,原字符串右对齐,前面填充0
    :return:
    '''
    try:
        os.makedirs(r'data/pingan')   # 创建目录
    except:
        pass  
    year_months=[str(i)+str(j).zfill(2) for i in range(2015, 2019) for j in range(1, 13)]
    for i in year_months:
        try:
            get_data_and_save(i)
            print(i)
        except:
            pass


if __name__ == '__main__':
    start()  #第一次使用
    # m = input('enter a month like 201701:')
    # get_data_and_save(m)
    
View Code

2、简单分析

2.1 数据预览  import pandas as pd

# 使用pandas读取csv文件
df1 = pd.read_csv('data/pingan/201801_1.csv')
df2 = pd.read_csv('data/pingan/201801_2.csv')
df3 = pd.read_csv('data/pingan/201801_3.csv')

各子公司的保费数据

寿险保费数据

财险数据

 

2.2 

2.数据整合并保存

这里把各个月份的保费数据汇总到一个文件

#读取某年份保费数据
def get_year_data(year, data_type):
    '''
    input:年份;类型,包括1,2,3
    '''
    #文件路径
    filepaths = [''.join(['data/pingan/',year,str(i).zfill(2),'_',data_type,'.csv']) for i in range(1, 13)]
    #pandas读取数据
    dfs=[pd.read_csv(i, index_col=0, header=0) for i in filepaths if os.path.exists(i)]
    #数据合并并转置
    df = pd.concat(dfs, axis=1).T
    #设置时间序列索引
    dates = pd.date_range(year + '-01-01', year + '-12-31', freq='M')[:len(df)]
    df = df.set_index(dates)
    return df
View Code

各年度保费数据合并

def get_total_data(data_type):
    dfs = [get_year_data(i, datatype) for i in ['2015','2016', '2017', '2018']]
    df = pd.concat(dfs, axis=0)
    return df
View Code

各子公司数据如下:

df_1.to_csv('data/pingan/gross_premium_1.csv', encoding='utf_8_sig')

3.pandas数据筛选

按年份筛选

按月份筛选

筛选某个时间段

4.绘图

DataFrame.plot(x=None, y=None, kind='line', ax=None, 
    subplots=False, sharex=None, sharey=False, layout=None,
    figsize=None, use_index=True, title=None, grid=None, 
    legend=True, style=None, logx=False, logy=False,loglog=False, 
    xticks=None, yticks=None, xlim=None, ylim=None, rot=None, 
    fontsize=None, colormap=None,table=False, yerr=None, xerr=None, 
    secondary_y=False, sort_columns=False, **kwds)
参数

5.累计规模保费增长率

用pct_change方法计算增长率,periods表示计算间隔,这里是年度增长率(同比)

6.简略分析

从增速图上可以看到,健康险保费增速经历了大起大落,16年后半年开始加速增长,最高增速200%以上,但到18年初大幅回落。

其他几家公司增速再作图看一下具体情况。

 

可以看到几家的累计增速也是变化较多。

(1)寿险相对稳定,增速基本维持30%。

(2)财险2016年稳定,2017年处于上升通道,全年维持20%。

(3)养老险2016年初至2016年末,从40%增速跌至-10%,2017年开门红迅速回升并全年稳定10%

posted @ 2018-06-01 10:40  nick560  阅读(388)  评论(2编辑  收藏  举报