房价预测Task1
pandas:简单的房价预测实例
我们使用pandas等工具,对于给出的.csv
文件进行处理,完成要求的几个Task。
利用sklearn的线性回归,对于房价进行简单的预测。
所有的要求,数据集等文件,请到我的GitHub仓库自行下载:github.com/rongyupan/HousePricePred
如果你是pandas这类数据分析工具的新手,那这个项目很适合你。因为这个项目只需要用到最基本,最简单的操作。
数据集描述
transactions.csv
数据集是我们的主要数据集;agents.csv
和agency.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的更多相关文章
- 使用sklearn进行数据挖掘-房价预测(4)—数据预处理
在使用机器算法之前,我们先把数据做下预处理,先把特征和标签拆分出来 housing = strat_train_set.drop("median_house_value",axis ...
- 使用sklearn进行数据挖掘-房价预测(6)—模型调优
通过上一节的探索,我们会得到几个相对比较满意的模型,本节我们就对模型进行调优 网格搜索 列举出参数组合,直到找到比较满意的参数组合,这是一种调优方法,当然如果手动选择并一一进行实验这是一个十分繁琐的工 ...
- 使用sklearn进行数据挖掘-房价预测(1)
使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...
- 使用sklearn进行数据挖掘-房价预测(2)—划分测试集
使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...
- 使用sklearn进行数据挖掘-房价预测(3)—绘制数据的分布
使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...
- 使用sklearn进行数据挖掘-房价预测(5)—训练模型
使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...
- Ames房价预测特征工程
最近学人工智能,讲到了Kaggle上的一个竞赛任务,Ames房价预测.本文将描述一下数据预处理和特征工程所进行的操作,具体代码Click Me. 原始数据集共有特征81个,数值型特征38个,非数值型特 ...
- 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示
第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...
- Kaggle(一):房价预测
Kaggle(一) 房价预测 (随机森林.岭回归.集成学习) 项目介绍:通过79个解释变量描述爱荷华州艾姆斯的住宅的各个方面,然后通过这些变量训练模型, 来预测房价. kaggle项目链接:ht ...
随机推荐
- 基于 HTML5 WebGL 的高炉炼铁厂可视化系统
前言 在当今 工业4.0 新时代的推动下,不仅迎来了 工业互联网 的发展,还开启了 5G 时代的新次元.而伴随着带宽的提升,网络信息飞速发展,能源管控上与实时预警在工业互联网中也占着举足轻 ...
- 数据结构(C语言版)---二叉树
1.二叉树:任意一个结点的子结点个数最多两个,且子结点的位置不可更改,二叉树的子树有左右之分. 1)分类:(1)一般二叉树(2)满二叉树:在不增加树的层数的前提下,无法再多添加一个结点的二叉树就是满二 ...
- 数值计算方法实验之Newton 多项式插值(MATLAB代码)
一.实验目的 在己知f(x),x∈[a,b]的表达式,但函数值不便计算或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)=yi (i=0,1,……, n)求出简单函 ...
- Vue【你知道吗?】
前言 Vue的由来 Vue最早发布于2014年左右,作者是美中国学生尤雨溪.Vue 的定位就是为前端开发提供一个低门槛,高效率,但同时又能够伴随用户成长的框架 尤雨溪谈Vue.js :缔造自由与真我 ...
- vue显示富文本
来源:https://segmentfault.com/q/1010000013952512 用 v-html 属性解决
- 一,连接Oracle 一
连接Oracle数据库方法: 一,使用sqlplus连接 二,使用第三方软件连接 sqlplus sqlplus 工具简介 (1).概述:sqlplus是在Linux下操作oracle的工具 (2). ...
- awk和sed命令
awk awk是一个强大的编辑工具,可以在无交互的情况下实现相当复杂的文本操作 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 a ...
- 【Linux常见命令】cut命令
cut - remove sections from each line of files 参数: -b 可以按字节来查看文件中的内容 -b参数用在中文上,容易出现乱码问题.因为中文字符一个字符占两个 ...
- iOS逆向之一 工具的安装和使用
iOS逆向之一-工具的安装和使用 最近在学习iOS安全方面的技术,有些东西就记录下来了,所有有了这篇文章.顺便也上传了DEMO,可以再这里找到这些DEMO的源码:dhar/iOSReProject 越 ...
- NPM采用Rust以消除性能瓶颈
Npam的指数级增长促使npm工程团队从Node.js切换到Rust,以处理那些将成为性能瓶颈的CPU绑定任务.最近的一份白皮书概述了在Rust中开发这个新服务,以及将其投入生产一年多的经验. 大部分 ...