pandas:简单的房价预测实例

我们使用pandas等工具,对于给出的.csv文件进行处理,完成要求的几个Task。

利用sklearn的线性回归,对于房价进行简单的预测。

所有的要求,数据集等文件,请到我的GitHub仓库自行下载:github.com/rongyupan/HousePricePred

如果你是pandas这类数据分析工具的新手,那这个项目很适合你。因为这个项目只需要用到最基本,最简单的操作。

数据集描述

transactions.csv数据集是我们的主要数据集;agents.csvagency.csv保存了agents和agency之间的关系,也就是每个agency下具体是哪几个agents。

下面我们针对每个task,对于使用到的函数,以及解决的思路进行一下简单的总结。

自己的经验

1.尽量使用pandas自带的函数进行处理

比如统计数量、平均、求和这种操作,使用自带的函数比自己写循环要靠谱。

可以这样理解:pandas更像python版的excel。在使用excel要对行/列求和之类的操作时,你会自己重写一个函数吗?

基本上在excel里可以用鼠标点击完成的,大部分在pandas中有内置函数对应。

2. 先对数据表进行增删改

如果想要遵照经验1,你会发现有时候直接对原始的数据表操作不可行,这时候就要对数据表进行筛选。

在完成下面每个task之前,几乎都需要对于数据表进行增删改,增加/删除/改动某几列。

我们改动数据表的目的就是为了更好地完成经验1。

数据集导入

import pandas as pd 

df = df.read_csv('./transactions.csv')

Task 1

求出每个agency的交易总量,并降序排列。

思路:先获取每个agent的交易总量,再计算每个agency的数量。

计算每个agency的交易总量

解决方案:(1)遍历表中每行,根据agent来判断加到具体哪个agency;最直接,但是最麻烦。

(2)使用df['xxx'].value_counts(),自动统计每列中,出现的元素的对应数量。

agt = df['AgentId'].value_counts()
print(agt) # 获取每个元素的数量
agt[0] # return
3 93
2 88
4 76
1 74
5 44
0 39
Name: AgentId, dtype: int64 39

table显示

我们可以使用pd.DataFrame()来以表格的形式显示。

创建数据帧可以使用字典导入的方式,但一定要注意:字典的值的类型需要为list

Agency = {'Agency Name':["Other","Your Estate","Lovely Housing"],\
'Numbers':[sum_agc[0],sum_agc[1],sum_agc[2]]}
res_1 = pd.DataFrame(Agency)

降序排列

使用res_1.sort_values("Numbers", ascending=False),也就是对于'Numbers'这一列进行降序排列。

如果没有ascending=False这个参数,默认为升序排列。

Task1其他方法

task1尽管简单,但是思路很多。上面是间接法:先使用value_counts()函数得到了每个agent的数量,间接求得了agency的数量。

方法1:新增一列AgencyId

我们只有agent的信息,那我们就先增加一列,整理出agency的信息。这里就是用到了上面说的经验2。

得到了agency的信息后,就能用value_counts()这个函数直接得到结果。

df_1 = df[['AgentId']]  # (1)
df_1['AgencyId'] = 1 # (2) for i in range(len(df_1)): # (3)
agtId = df_1.loc[i, 'AgentId'] # (4)
if agtId == 0:
df_1.loc[i, 'AgencyId'] = 0 # (5)
if agtId == 2 or agtId == 3 or agtId == 5:
df_1.loc[i, 'AgencyId'] = 1
if agtId == 1 or agtId == 4:
df_1.loc[i, 'AgencyId'] = 2 df_1['AgencyId'].value_counts() # return
1 225
2 150
0 39
Name: AgencyId, dtype: int64

(1)截取第一列df_1 = df['AgentId']df_1 = df[['AgentId']]有何不同?

是维度的不同。第一种为一维,可以理解成一个array或list;第二种是二维的表格,表头为AgentId,每一列都有序号。

建议使用第二种写法。

(2)如何新增一列?

直接用df_1['Col_name']=1就能新建一列名为Col_name,值全为1的列。

(3)len(df_1)是什么意思?

获取df_1的长度,也就是多少行,当然,不包括表头的那一行。

等价的写法是df_1.shape[0]df_1.shape会返回(414, 2)这样一个list,也就是取其第一个数。

(4)df_1.loc[i, 'AgentId']定位

第一个参数是第i行,从0开始;第二个位置是列位置。

(5)这里为什么不能先在前面设置一个参数,比如agcId,然后使用这个更短的参数不是写起来更方便?

为了修改值,只能这么写。如果使用了第三个参数,实质上是把这个位置的值复制了一遍,修改的是这个复制的值,而不是真实值。

这种方法代码这么多,没有刚开始的方法简洁,但是,如果后面有agency相关,那么这里的工作就是值得了。

方法2:数据表截取

为了获取agency的信息,有没有更简单的方法?

df_1 = df[['AgentId']]

df_1_0 = df_1[df_1['AgentId'] == 0]
df_1_0['AgencyId'] = 0
df_1_0

我们就得到了Agency0的所有数据。df_1['AgentId'] == 0会得到一列全是 True/False 的序列;

然后在加上df_1[df_1['AgentId'] == 0]就得到所有'AgentId'=0的内容;

最后在以上的基础上新增一列AgencyId即可。使用for等循环语句即可自动化这个过程

同样的,如果后面需要agency的信息,这样就会大大简化后面的处理。

房价预测Task1的更多相关文章

  1. 使用sklearn进行数据挖掘-房价预测(4)—数据预处理

    在使用机器算法之前,我们先把数据做下预处理,先把特征和标签拆分出来 housing = strat_train_set.drop("median_house_value",axis ...

  2. 使用sklearn进行数据挖掘-房价预测(6)—模型调优

    通过上一节的探索,我们会得到几个相对比较满意的模型,本节我们就对模型进行调优 网格搜索 列举出参数组合,直到找到比较满意的参数组合,这是一种调优方法,当然如果手动选择并一一进行实验这是一个十分繁琐的工 ...

  3. 使用sklearn进行数据挖掘-房价预测(1)

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  4. 使用sklearn进行数据挖掘-房价预测(2)—划分测试集

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  5. 使用sklearn进行数据挖掘-房价预测(3)—绘制数据的分布

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  6. 使用sklearn进行数据挖掘-房价预测(5)—训练模型

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  7. Ames房价预测特征工程

    最近学人工智能,讲到了Kaggle上的一个竞赛任务,Ames房价预测.本文将描述一下数据预处理和特征工程所进行的操作,具体代码Click Me. 原始数据集共有特征81个,数值型特征38个,非数值型特 ...

  8. 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示

    第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...

  9. Kaggle(一):房价预测

    Kaggle(一) 房价预测 (随机森林.岭回归.集成学习)  项目介绍:通过79个解释变量描述爱荷华州艾姆斯的住宅的各个方面,然后通过这些变量训练模型, 来预测房价.   kaggle项目链接:ht ...

随机推荐

  1. testNG 预期异常、忽略测试、超时测试

    通过@Test 注解的参数值实现如下的几种测试 一.通过 @Test(expectedExceptions=异常类名) 参数实现到达 预期指定的异常效果 @Test(expectedException ...

  2. 被折磨致死的heroku——herku部署

    最近一直在弄heroku部署上线,但是因为中国墙和英语问题,一直弄不好,,很是烦躁,所有暂时先放弃了,但是因为查询了一些资料,有些文档链接有必要放到下面,方便各位和自己查看: heroku官方网站: ...

  3. 如何用Github钩子做自动部署

    最近机缘巧合的购置了域名和服务器,不用实在是浪费,再加上一直没有属于自己的个人网站,所以打算用hexo在服务器上玩一下,这样也就不用再纠结用Github pages还是Gitee pages了.当然, ...

  4. Java 网络编程 -- 基于TCP 实现聊天室 群聊 私聊

    分析: 聊天室需要多个客户端和一个服务端. 服务端负责转发消息. 客户端可以发送消息.接收消息. 消息分类: 群聊消息:发送除自己外所有人 私聊消息:只发送@的人 系统消息:根据情况分只发送个人和其他 ...

  5. 关于“xxx”object is not callable的异常

    参考博文:https://blog.csdn.net/yitiaodashu/article/details/79016671 所谓callable对象是指一个后边可以加()的对象,比如函数, 所以这 ...

  6. Kylin on Parquet 介绍和快速上手

    Apache Kylin on Apache HBase 方案经过长时间的发展已经比较成熟,但是存在着一定的局限性.Kylin 查询节点当前主要的计算是在单机节点完成的,存在单点问题.而且由于 HBa ...

  7. SQLI-LABS学习笔记(二)

    逼话少说,如有错误,烦请指出,谢谢 这两天生病,效率很低 第5关 打开页面 发现跟前几题不同,没有直接返回数据.. 加个单引号 You have an error in your SQL syntax ...

  8. eclipse安装Axis2插件和简单的webservice发布

    2019独角兽企业重金招聘Python工程师标准>>> Axis2与CXF是现在很主流的WebService开发框架(java6也已经支持了),项目上还都是基本上用前两种做开发,今天 ...

  9. 使nfs同步生效

    我们在使用nfs的时候会遇到往nfs server端写个文件,client需要很久才能生效,我们想让立刻生效有两种办法:1.mount -t nfs -o noac IP:/data/xxxx /xx ...

  10. ip地址与运算 ipcalc命令

    http://man.linuxde.net/ipcalc 转载于:https://blog.51cto.com/sonlich/2064133