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)
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
各年度保费数据合并
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
各子公司数据如下:
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%