作者: afenxi来源: afenxi时间:2017-03-01 14:01:43
摘要:本篇文章是使用python抓取数据的第二篇,使用urllib方法对人人贷网站贷款列表页进行抓取。并从中获取贷款用户,金额和期限的分布情况。
本篇文章是使用python抓取数据的第二篇,使用urllib方法对人人贷网站贷款列表页进行抓取。并从中获取贷款用户,金额和期限的分布情况。
准备工作
首先是准备工作,导入需要使用的库文件,re用于通过正则提取数据,time用于设置Sleep时间,numpy用于数值计算,pandas用于数据汇总和分析,urllib用于数据抓取,matplotlib用于数据可视化。
#导入所需库文件
import re
import time
import numpy as np
import pandas as pd
import urllib.request
import matplotlib.pyplot as plt
抓取列表页
开始抓取前设置列表页的URL地址,其中page-后面的部分是页码,将在后面动态生成。url=http://www.we.com/loan#page-
设置请求的头文件信息,这部分内容可以在Chrome的开发者工具中获得,或者在网站搜索头文件信息。
#设置请求头文件信息
headers = )
#查看表的维度,1020行,4列
rrd.shape
(1020, 4)
#查看数据表前5行
rrd.head()
#查看字段类型
rrd.dtypes
amount object
interest object
months object
title object
dtype: object
#更改amount,interest和months字段的格式
rrd[[amount,interest,months]]=rrd[[amount,interest,months]].astype(np.float64)
#再次查看更改后的字段格式
rrd.dtypes
amount float64
interest float64
months float64
title object
dtype: object
贷款数据关键指标
查看数据表中的贷款数据的关键指标,如贷款总金额,总笔数,人均贷款金额和贷款金额范围等等。
#总贷款金额和笔数
rrd[amount].sum(),rrd[amount].count()
(95390400.0, 1020)
#平均贷款金额
rrd[amount].sum()/rrd[amount].count()
93520.0
#贷款金额的最大值和最小值
rrd[amount].max(),rrd[amount].min()
(262000.0, 15400.0)
贷款总金额9539万元,笔数1020笔。每一笔的平均贷款金额为93520元。贷款金额最大值为262000元,最小值为15400元。
贷款目的金额及笔数分布
按贷款目的对比贷款金额及笔数的分布情况,首先分别按贷款目的汇总贷款金额和笔数数据。
#按贷款目的汇总贷款笔数
title_count=rrd.groupby(title)[amount].agg(count)
#按贷款目的汇总贷款金额
title_sum=rrd.groupby(title)[amount].agg(sum)
绘制图表查看金额和笔数分布情况。从图表中可以看出日常生活消费的贷款笔数最多,但总金额较低,而资金周转的贷款笔数较低,但总贷款金额较大。
#绘制贷款用户金额及笔数分布图
plt.rc(font, family=STXihei, size=15)
a=np.array([1,2,3,4,5])
plt.figure()
plt.barh([1,2,3,4,5],title_count,color=#99CC01,alpha=0.8,align=center,edgecolor=white)
plt.barh([1,2,3,4,5],-rrd_title,color=#39A2E1,alpha=0.8,align=center,edgecolor=white)
plt.ylabel(贷款用途分类)
plt.title(贷款用户金额及笔数)
plt.xticks(a,())
plt.yticks(a,(资金周转,装修,增购新车,购买货物,日常生活消费))
plt.show()
贷款期限分布
按贷款期限对贷款笔数进行汇总,查看不同期限的贷款笔数分布情况。首先对数据按期限进行汇总。
#按期限汇总贷款笔数
month_count=rrd.groupby(months)[amount].agg(count)
绘制图表,查看贷款期限分布情况,大部分贷款期限为36个月,24个月和48个月的贷款数量明显较少。
#汇总不同期限贷款笔数分布图
plt.rc(font, family=STXihei, size=15)
a=np.array([1,2,3])
plt.bar([1,2,3],month_count,color=#99CC01,alpha=0.8,align=center,edgecolor=white)
plt.xlabel(期限分布)
plt.ylabel(贷款笔数)
plt.title(不同期限的贷款笔数分布)
plt.legend([贷款笔数], loc=best)
plt.grid(color=#95a5a6,linestyle=--, linewidth=1,axis=y,alpha=0.4)
plt.xticks(a,([24个月,36个月,48个月]))
plt.show()
贷款金额分布
对贷款金额进行分组,5万元一组,共分为6组。然后查看各个分组内贷款金额的情况。首先对贷款金额进行分组,然后按分组对金额进行汇总。
#对贷款金额进行分组
bins = [0, 50000, 100000, 150000, 200000, 250000, 300000]
amount_group = [0-5万, 5-10万, 10-15万, 15-20万,20-25万,25-30万]
rrd[amount_group] = pd.cut(rrd[amount], bins, labels=amount_group)
#查看分组后的数据表
rrd.head()
#按贷款金额分组汇总笔数
amount_group=rrd.groupby(amount_group)[amount_group].agg(len)
绘制贷款用户金额分布图,从图表中可以看出,5-10万元的贷款笔数做多,其次为0-5万元。大金额的贷款笔数较少。
#绘制贷款用户金额分布图
plt.rc(font, family=STXihei, size=13)
a=np.array([1,2,3,4,5,6])
plt.bar([1,2,3,4,5,6],amount_group,color=#99CC01,alpha=0.8,align=center,edgecolor=white)
plt.xlabel(金额分组)
plt.ylabel(贷款笔数)
plt.title(贷款用户金额分布)
plt.legend([笔数], loc=upper right)
plt.grid(color=#95a5a6,linestyle=--, linewidth=1,axis=y,alpha=0.4)
plt.xticks(a,(0-5万, 5-10万, 10-15万, 15-20万,20-25万,25-30万))
plt.show()