使用python抓取并分析数据—人人贷(urllib)

本篇文章是使用python抓取数据的第二篇,使用urllib方法对人人贷网站贷款列表页进行抓取。并从中获取贷款用户,金额和期限的分布情况。

本篇文章是使用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 = {‘User-Agent’:’Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11′,

‘Accept’:’text/html;q=0.9,*/*;q=0.8′,

‘Accept-Charset’:’ISO-8859-1,utf-8;q=0.7,*;q=0.3′,

‘Connection’:’close’,

‘Referer’:’http://bzclk.baidu.com/’

}

列表页共有52个页面,使用for循环每次输出一个页码,与之前设置的URL地址拼接成要抓取的列表页URL,并进行抓取。每次抓取间休息2秒针。将抓取的到的页面保存在html中。

#循环抓取列表页信息

for i in range(0,52):

i=str(i)

if i==0:

req=urllib.request.Request(url=url+i,headers=headers)

resq=urllib.request.urlopen(req,timeout=2)

html=resq.read()

else:

req=urllib.request.Request(url=url+i,headers=headers)

resq=urllib.request.urlopen(req,timeout=2)

html2=resq.read()

html = html + html2

time.sleep(2)

print(url+i)

解析页面并提取信息

抓取到的页面需要进行解析,然后使用正则提取关键信息,以便后续的分析过程。

#对页面进行解析

html=html.decode(‘utf-8’)

#使用正则提取title字段

title=re.findall(r'”title”:(.*),’,html)

使用python抓取并分析数据—人人贷(urllib)

#使用正则提取amount字段

amount=re.findall(r'”amount”:(.*),’,html)

#使用正则提取interest字段

interest=re.findall(r'”interest”:(.*),’,html)

#使用正则提取months字段

months=re.findall(r'”months”:(.*),’,html)

创建数据表并清洗数据

将提取的字段拼接在一起创建用于分析的数据透视表。并对数据进行清洗和预处理。

#拼接字段创建名为rrd的数据表

rrd=pd.DataFrame({‘title’:title,’amount’:amount,’interest’:interest,’months’:months})

#查看表的维度,1020行,4列

rrd.shape

(1020, 4)

#查看数据表前5行

rrd.head()

使用python抓取并分析数据—人人贷(urllib)

#查看字段类型

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()

使用python抓取并分析数据—人人贷(urllib)

贷款期限分布

按贷款期限对贷款笔数进行汇总,查看不同期限的贷款笔数分布情况。首先对数据按期限进行汇总。

#按期限汇总贷款笔数

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()

使用python抓取并分析数据—人人贷(urllib)

贷款金额分布

对贷款金额进行分组,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()

使用python抓取并分析数据—人人贷(urllib)

#按贷款金额分组汇总笔数

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()

使用python抓取并分析数据—人人贷(urllib)

本文为专栏文章,来自:蓝鲸,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/42341.html 。

(0)
蓝鲸的头像蓝鲸专栏
上一篇 2017-03-10 06:00
下一篇 2017-03-11 05:58

相关文章

关注我们
关注我们
分享本页
返回顶部