链家数据分析二-数据分组处理
关于
学习日月光华老师的《Python数据分析从入门到机器学习》,通过写该文来巩固数据分析中使用的知识点。
主要是针对链家的数据进行各个不同方向的分析,本文是第二篇,针对数据中各个房源成交单价及其总价的分析。
准备
工具 :Anaconda、juyter notebook
类库:numpy、pandas、matplotlib
分析及代码实现
首先接上一篇,先读入整个的数据,代码实现如下:
import numpy as np
import pandas as pd
from 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名两个方面来介绍。
一,每个版块里面每个经纪人成交总价,
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对象
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为自定义函数),可以针对每一列进行函数计算,只能返回一个标量值。
结算结果如下:
对每个版块的成交前5名进行分析,首先对cjdanjia进行预处理,通过 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) //计算得出结果
部分结果如下图:
image.png 涉及知识点:DataFrame.groupby对象的apply()方法:是一个更一般化的方法,将一个数据分拆-应用-汇总,跟agg()主要区别就是apply()不仅仅返回一个标量值,可以返回多个或者其他类型。
总结
到目前为止,对版块的每个经纪人成交总价和单价的top5分析到此为止已经分析完毕。
未完,后面写会针对其他的方向对链家数据进行分析。
如果对您有点帮助的话,麻烦您给点个赞,谢谢。
链家数据分析一--数据离散化处理:链家数据分析一--数据离散化处理