zoukankan      html  css  js  c++  java
  • 平安简单分析

    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%

  • 相关阅读:
    robotframework安装与配置--学习第一天
    Google chrome浏览器打不开网页,显示ERR_Failed...等问题的解决方法
    解决dos窗口乱码问题
    打印风车旋转效果
    spring Security 得到认证用户名的方法
    spring requestmapping 拦截多个请求
    github多人协同使用。
    Spring boot Security 用于权限管理,用户添加等。
    spring boot上传 下载图片。
    mysql修改数据库编码(数据库字符集)和表的字符编码的方法
  • 原文地址:https://www.cnblogs.com/nick477931661/p/9116919.html
Copyright © 2011-2022 走看看