Py爬虫后的数据分析+出图

隔了好久都没及时把爬虫后的数据进行处理,干吗去了呢,看了个异步加载网页爬虫以及emmm校园琐事,今天填坑。

上次爬虫后主有六个维度的信息:价格、面积、当前热度,这三个是数值型的;区域、描述、户型,这三个是文本型。

这次并没有对户型和描述做分析,这个放在下次单独学 词云的作图。

先对数值型进行分析

    df.describe()
  Out[10]:
                  price       square     popular
  count   8694.000000 8694.000000 8694.000000
  mean     9463.443639   95.332610     2.725213
  std     8854.171512   57.460427     4.084303
  min       600.000000   11.630000     0.000000
  25%     4800.000000   58.330000     0.000000
  50%     6800.000000   81.610000     1.000000
  75%     10500.000000   112.150000     4.000000
  max   130000.000000   682.080000   44.000000

在经过一系列租房市场震荡后符合我们要求结果有8694条。

价格在9463.4元/月,一半的价格是在6800元以下的,价格极差较大[600,13w];

面积平均95.3平方米,一半的面积小于81.6平方米,75%以下的面积小于112.15平方米,虽然最大到了682平方米的租房面积,112.15以上的还是少数(占25%);

受欢迎程度来看极差较大[0,44],后面我们来看看到底哪些房源受欢迎,哪些没人看;

这里可以加一列面积的均价:

    df['average_price']=df['price']/df['square']
   
  df.describe()
  Out[12]:
                  price       square     popular average_price
  count   8694.000000 8694.000000 8694.000000   8694.000000
  mean     9463.443639   95.332610     2.725213     99.250649
  std     8854.171512   57.460427     4.084303     65.722560
  min       600.000000   11.630000     0.000000     19.686589
  25%     4800.000000   58.330000     0.000000     64.365126
  50%     6800.000000   81.610000     1.000000     92.093085
  75%     10500.000000   112.150000     4.000000     123.314479
  max   130000.000000   682.080000   44.000000   4135.338346

租金面价均价99.25元/平方,75%在123元/平方以下,最大到了4135元/平,一个月的租金,这个最大值让我忍不住先去看了下到底何方神圣

 

 

从图中可看出,9月北京市各区域的房租均在3500元/月以上,其中最高区域为朝阳区,均价达12695元/月。同时朝阳区也是房源最多的区,超过房源第二的海淀区一倍以上。

朝阳区位与东城区、丰台区、海淀区相毗邻,北连昌平区、顺义区,东与通州区接壤,南与大兴区相邻,幅员面积470.8平方公里,平均海拔34米,是北京市中心城区中面积最大的一个区。全区常住人口308.3万(2008年数据,现在估计会*1.5)

 

上图可以看出,均价在8000-10000之间的房屋数量最多,其次为4000-8000和1w+的第二梯队,第三梯队为2000-4000,小于2000的很少【哪里有这么好的地方我去租,,,】

据北京市统计局数据,2017年全市居民月人均可支配收入为4769元。

当然考虑到租房中合租行为较多,

另查58同城和赶集网发布的报告,2017年北京人均月租金为2795元。

北京租房者的房租收入比,惊人地接近60%。很多人一半的收入,都花在了租房上。

为了进一步拆解价格,分析单位面积均价特征

 

上图表明单位面积的均价在50-100最多,100-150其次。按照人家租房花费2795元来计算,均价在50-100的主力军所代表的是人均18.6-27.9平米的住房空间,emmm很多人真的是只租了卧室啊 。。怪不得还见过一个卧室分床再出租的┗( ▔, ▔ )┛

 

从上图可以看出浏览较多,受欢迎的房源还是100平以下的居多,在链家网租房子为了住的还是多数,大平米的浏览都比较少了。

 

从房源面积来看60-100平房源最多,其次为30-60平的房源,整个供需还是配套的。

Python 数据分析出图练习 end

做完图 顺便查了下:

北京房地产中介行业协会 在九月和十月还是做出些成绩的

10 月 21 日的新闻:北京市房地产中介行业协会公布的最新数据显示,截至 10 月 20 日, 10 家租赁服务企业累计投放房源 133131 套(间),完成公开承诺总量的 1.1 倍。环比 9 月,北京住房租赁市场量、价继续回落,成交量环比下降约 8%

** 最后代码 **

    import numpy as np
  import pandas as pd
  from pyecharts import Overlap, Bar, Line, Kline, Pie
  df = pd.read_csv('house price.csv',sep=',',header=None,encoding='utf-8',names=['area','title','price','rtype','square','popular'])
  #dtype = {'area':str,'title':str,'price':int,'rtype':str,'square':float,'popular':int}
  df=df.dropna(axis = 0)
  #df=df[~df['popular'].isin(['nan'])] 备选
  df['price']=df['price'].astype(int)
  df['square']=df['square'].astype(float)
    #清理过后只有8694条有效数据,虽然只爬了链家(自如又爆出举报检测机构),从这家老牌租房网站来看其实北京租房市场也没我之前想象的大,自如蛋壳就更少了。
    #均价为9463.5元/月,中位数为6800。一半的房源价格在6800以下,所有房源的价格极差大[600,130000]
  df['average_price']=df['price']/df['square']
  area = df.groupby(['area'])
  house_com = area['price'].agg(['mean','count'])
  house_com.reset_index(inplace=True)
  area_main = house_com.sort_values('count',ascending=False)
  attr = area_main['area']
   
  v1 = area_main['count']
   
  v2 = area_main['mean']
  line = Line("北京主要区域房租均价")
   
  line.add("房租均价",attr,v2,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
      mark_point=['min','max'],xaxis_interval=0,line_color='#32CD32',
      line_width=4, mark_point_textcolor='red',mark_point_symbol="",)
  bar = Bar("北京主要区域房屋数量与均价")
  bar.add("数量",attr,v1,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
      xaxis_interval=0,is_splitline_show=False,color='green')
  overlap = Overlap()
   
  overlap.add(bar)
   
  overlap.add(line,yaxis_index=1,is_add_yaxis=True)
   
  overlap.render('北京路段_房屋均价分布图.html')
  #房源价格区间分布图
   
  price_info = df[['area', 'price','average_price']]
   
  #对价格分区
  bins = [0,1000,1500,2000,2500,3000,4000,5000,6000,8000,10000]
  level = ['0-1000','1000-1500', '1500-2000', '2000-3000', '3000-4000', '4000-5000', '5000-6000', '6000-8000', '8000-1000','10000以上']
  price_stage = pd.cut(price_info['price'], bins = bins,labels = level).value_counts().sort_index()
  attr = price_stage.index
  v3 = price_stage.values
  bar2 = Bar("价格区间&房源数量分布")
   
  bar2.add("",attr,v3,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
   
      xaxis_interval=0,is_splitline_show=False)
   
  average_price_stage = pd.cut(price_info['average_price'], bins = bins,labels = level).value_counts().sort_index()
  attr = average_price_stage.index
  v4 = average_price_stage.values
   
  bar3 = Bar("价格区间&房源数量分布")
  bar3.add("",attr,v4,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
   
      xaxis_interval=0,is_splitline_show=False)
   
  overlap = Overlap()
   
  overlap.add(bar2)
   
  overlap.render('价格区间&房源数量分布.html')
   
   
   
   
   
  bins = [0,50,100,150,200,300,500,1000,10000]
  level = ['0-50','50-100','100-150', '150-200', '200-300', '300-500', '500-1000', '1000以上']
  average_price_stage = pd.cut(price_info['average_price'], bins = bins,labels = level).value_counts().sort_index()
  attr = average_price_stage.index
  v4 = average_price_stage.values
   
  bar3 = Bar("面积均价区间&房源数量分布")
  bar3.add("",attr,v4,is_stack=True,xaxis_rotate=30,yaxix_min=4.2,
   
      xaxis_interval=0,is_splitline_show=False)
   
  overlap = Overlap()
   
  overlap.add(bar3)
   
  overlap.render('单位面积价格区间&房源数量分布.html')
   
  distribution=[]
  popular_com=df['square'].groupby(df['popular'])
  for i in range(len(list(popular_com.max()))):
      distribution.append([list(popular_com.min())[i],list(popular_com.min())[i],list(popular_com.max())[i],list(popular_com.max())[i]])
   
  kline = Kline("不同受欢迎程度房源的面积分布图")
  kline.add("", list(popular_com.max().index),distribution)
  kline.render('热度面积')
       
   
  #房屋面积分布
   
  bins =[0,30,60,90,120,150,200,300,400,700]
  level = ['0-30', '30-60', '60-90', '90-120', '120-150', '150-200', '200-300','300-400','400+']
  square_level= pd.cut(df['square'],bins = bins,labels = level)
  s = square_level.value_counts()
  attr = s.index
  v5 = s.values
  pie = Pie("房屋面积分布",title_pos='center')
  pie.add(
      "",
      attr,
      v5,
      radius=[40, 75],
      label_text_color=None,
      is_label_show=True,
      legend_orient="vertical",
      legend_pos="left",
  )
  overlap = Overlap()
  overlap.add(pie)
  overlap.render('房屋面积分布.html')

 

上一篇:[LeetCode] 836. Rectangle Overlap


下一篇:LeetCode | 0836. Rectangle Overlap矩形重叠【Python】