转载本文请联系数仓宝贝库公众号。Pandas在与网络数据采集爬虫配合时,也可以充分发挥其优势,承担数据调用和数据存储的工作。将数据存入DataFrame后,就可以直接进入下一步分析了。在这个例子中,目标是获取房地产网站的房价,体验Pandas的便利。首先使用requests(需要安装)库获取单个社区的平均价格:importrequests#Installation:pipinstallrequests#CreateaSessions=requests.Session()#访问社区页面xq=s.get('https://bj.lianjia.com/xiaoqu/1111027382589/')#查看页面源码xq.text#在价格位置附近找到源码:#95137#分割分析xq。text.split('xiaoquUnitPrice">')[1].split('')[0]#'93754'最后得到这个小区的平均房价,这里介绍一下信息切片的方法两边的目标信息,形成一个列表,然后读取使用也可以用第三方库BeautifulSoup4解析。BeautifulSoup是一个Python库,可以从HTML或XML文件中提取数据,它可以通过解析源代码轻松获取指定信息。Webuildafunctiontoobtainthenameofthecommunityandtheaveragehousingprice:#Thefunctionofobtainingthenameofthecommunitydefpa_name(x):xq=s.get(f'https://bj.lianjia.com/xiaoqu/{x}/')name=xq.text.split('detailTitle">')[1].split('')[0]returnname#Thefunctionofobtainingtheaveragehousepricedefpa_price(x):xq=s.get(f'https://bj.lianjia.com/xiaoqu/{x}/')price=xq.text.split('xiaoquUnitPrice">')[1].split('')[0]returnpriceNextusePandas执行爬虫获取信息:#小区列表xqs=[1111027377595,1111027382589,1111027378611,1111027374569,1111027378069,1111027374228,116964627385853]#构造数据df=pd.DataFrame(xqs,columns=['小区'])#爬取小区名df['communityname']=df.community.apply(lambdax:pa_name(x))#Crawlpricedf['price']=df.community.apply(lambdax:pa_price(x))#Viewresultdf'''小区小区名房价01111027377595瞰都国际7336111111027382589棕榈泉国际公寓9375421111027378611南十里居5645931111027374569观湖国际8866141111027378069丽水嘉园7682751111027374228泛海国际碧海园970616116964627385853东山condo145965'''可以先用Python的类改造函数,再用Chainmethodcall:#reptileclassPaChong(object):def__init__(self,x):self.s=requests.session()self.xq=self.s.get(f'https://bj.lianjia.com/xiaoqu/{x}/')self.name=self.xq.text.split('detailTitle">')[1].split('')[0]self.price=self.xq.text.split('xiaoquUnitPrice">')[1].split('')[0]#抓取数据(df.assign(社区名=df.community.apply(lambdax:PaChong(x).name)).assign(priceprice=df.community.apply(lambdax:PaChong(x).price)))以上网站可能改版,代码不适用时需要调整爬虫代码。html采集。该网页将显示上个月的房价排名。先复制前20个城市的数据,然后使用pd.read_clipboard()读取。我们分析一下当月的数据(下例中使用的是2020年10月的数据)。importpandasapdimportmatplotlib.pyplotaspltplt.rcParams['figure.figsize']=(8.0,5.0)#固定显示大小plt.rcParams['font.family']=['sans-serif']#设置中文字体plt.rcParams['font.sans-serif']=['SimHei']#设置中文字体plt.rcParams['axes.unicode_minus']=False#显示负号dfr=pd.read_clipboard()#获取源数据dfr.head()'''序号城市名称平均单价(元/㎡)同比01深圳78722+2.61%+20.44%12北京63554-0.82%-1.2%23上海58831+0.4%+9.7%34厦门48169-0.61%+9.52%45广州38351-1.64%+13.79%'''查看数据类型:dfr.dtypes'''序号int64城市名称对象平均单价(元/㎡)对象链比对象同比-yearobjectdtype:object'''数据都是object类型,需要对数据进行Extract和typeconvert:df=(#去掉第1000位,转为整数dfr.assign(averageunitprice=dfr['averageunitprice(元/㎡)'].str.replace(',','').astype(int)).assign(year-on-year=dfr.year-on-year.str[:-1].astype(float))#去掉百分号,转为浮点型.assign(chainratio=dfr.环比。str[:-1].astype(float))#去掉百分号,转为浮点数类型.loc[:,['城市名','平均单价','同比','环比']]#heavyNamedcolumn)df.head()'''城市名称平均单价同比比0深圳7872220.442.611北京63554-1.20-0.822上海588319.700.403厦门481699.52-0.614广州3835113.79-1.64'''接下来,我们就可以整理一下数据进行分析了。先看每个城市的平均价差,数据的顺序不需要调整,代码执行效果如图1所示。(df.set_index('cityname').Averageunitprice.plot.bar())图1 各城市平均房价各城市同比和环比平均房价分别如图2所示。(df.set_index('城市名').loc[:,'同比':'环比'].plot.bar())图2 的平均房价各个城市的同比和环比都会用到同比和环比的极值可以看出东莞格外突出,房价同比和环比都出现了大幅上涨-month,如图3所示。year','环比']).format({'平均单价':"{:,.0f}"}).format({'YoY':"{:2}%",'MoM':"{:2}%"}))图3 各城市平均房价变化规律绘制各城市平均单价柱状图,如图4所示。#Bargraph(df.style.bar(subset=['平均单价'],color='黄色'))图4 的av各城市平均单价风格图全面可视化数据风格:平均单价背景色设置为渐变色,指定色系BuGn;同比和环比柱状图采用不同色系,以0为中点反映正负;在比率中添加百分号。最终效果如图5所示。(df.style.background_gradient(subset=['平均单价'],cmap='BuGn').format({'YoY':"{:2}%",'ringratio':"{:2}%"}).bar(subset=['year-on-year'],color=['#ffe4e4','#bbf9ce'],#上升下降的颜色vmin=0,vmax=15,#范围定义为上下以0为准15align='zero').bar(subset=['ringratio'],color=['red','green'],#涨跌的颜色vmin=0,vmax=11,#范围设置为0上下标杆11align='zero'))图5 各城市平均房价综合样式图作者:李庆辉,数据产品专家,某电商数据产品团队负责人,擅长通过数据治理、数据分析、数据化运营提升公司数据应用水平。