继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

链家数据分析二-数据分组处理

慕村9548890
关注TA
已关注
手记 1260
粉丝 227
获赞 989

关于
  学习日月光华老师的《Python数据分析从入门到机器学习》,通过写该文来巩固数据分析中使用的知识点。
主要是针对链家的数据进行各个不同方向的分析,本文是第二篇,针对数据中各个房源成交单价及其总价的分析。
准备
工具 :Anaconda、juyter notebook
类库:numpy、pandas、matplotlib
分析及代码实现
  首先接上一篇,先读入整个的数据,代码实现如下:

import numpy as npimport pandas as pdfrom matplotlib import pyplot as plt
%matplotlib inline

data_list = []for i in range(1, 8):    try:
        data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i), encoding='GBK')    except:
        data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i))    finally:
        data_list.append(data)
data = pd.concat(data_list)

  数据分组处理,我通过每个版块里面每个经纪人成交总价和每个版块里面成交单价的前5名两个方面来介绍。

 一,每个版块里面每个经纪人成交总价,


我们要对成交总价进行分析,首先先查看一个cjzongjia这个参数的类型,如下:

webp

image.png

,从上面可知,类型为float64,可以直接进行计算。如下,对cjzongjia进行去除缺省值,并且去除cjzongjia为0的数据

data.dropna(subset = ['cjzongjia'], inplace = True)  //去除cjzongjia缺省的行数据data = data[~data['cjzongjia'].isin([0])]  //去除cjzongjia中为0的数据

    涉及知识点:
     pandas.Series.isin(values):判断values(为list)值是否在Series中,返回bool dtype
接下来,对数据按照‘bankuai’和‘xingming’进行分组,如下,返回一个object对象

webp

image.png

对每个板块经纪人的cjzongjia进行求和,具体的实现如下


data.groupby(by = ['bankuai', 'xingming'])['cjzongjia'].agg('sum')

    涉及知识点:
     DataFrame.groupby分组计算
        1.DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False,observed=False)
          by:按照什么来分组,可以是list
        2.agg() 可以使用自定义函数和内置函数,比如data.groupby(['bankuai', 'xingming']).agg({'cjdanjia':fun, 'cjzongjia':'max'})(fun为自定义函数),可以针对每一列进行函数计算,只能返回一个标量值。
结算结果如下:

webp

image.png

 二、每个版块里面成交单价的前5名
对每个版块的成交前5名进行分析,首先对cjdanjia进行预处理,通过

webp

image.png

可以看出cjdanjia为object型,我们需要对其进行处理,如下


data.dropna(subset = ['cjdanjia'], inplace = True) //去除缺省值data['cjdanjia'] = data.cjdanjia.map(lambda x: float(x.replace('元/平', ''))) //转化类型

下面,我们就可以对其按照bankuai进行分组,并且取每个版块中cjdanjia的top5,具体实现如下:

def top5(group, n=5):
    return group.sort_values(by = ['cjdanjia'], ascending = False)[:n] //自定义函数,返回cjdanjia的top5
data.groupby(['bankuai']).apply(top5, 5) //计算得出结果

部分结果如下图:

webp

image.png

    涉及知识点:
     DataFrame.groupby对象的apply()方法:是一个更一般化的方法,将一个数据分拆-应用-汇总,跟agg()主要区别就是apply()不仅仅返回一个标量值,可以返回多个或者其他类型。
总结
  到目前为止,对版块的每个经纪人成交总价和单价的top5分析到此为止已经分析完毕。
未完,后面写会针对其他的方向对链家数据进行分析。





作者:s_nash
链接:https://www.jianshu.com/p/f8c3cd2541bc


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP