数据项目总结 - 租房数据分析(完整篇)

 Datawhale干货 

作者:皮钱超,厦门大学,Datawhale成员

深圳租房数据分析完整篇

从2020年11月发表第一篇深圳租房数据分析的文章,到这篇基于深度学习框架Keras的建模分析和预测,在此谈谈3篇文章的特点:

1、第一篇:

写于2020年11月,笔者作为一名数据分析师,学习了Python、SQL、爬虫、可视化以及部分机器学习的常见算法和模型,所以在第一篇文章中的重点是:统计与可视化分析。看过文章的小伙伴应该都知道,里面出现了许多还算漂亮的可视化图表(下面是部分图)。

一图胜千言,从统计和可视化图表的角度能够很快速且直观地看到数据分布和变化趋势。文章中使用可视化库是Plotly,一个非常棒的动态可视化库,强烈推荐学习~

cfec97a5c0b3813711a55b6ca1e25a81.png

文章地址

https://mp.weixin.qq.com/s/DEsclUfdnmVqICiK5rM57Q

2、第二篇:

写于2022年3月,笔者仍然是一名数据分析师。从2020年末到2022年初,一年左右的时间,笔者接触和学习了更多的是机器学习的算法、特征工程以及模型的可解释性等知识点。

在这篇文章中,笔者花费了大量的工作来做10个字段的预处理和特征工程工作,重点是如何做编码处理,便于后续输入到不同的回归模型中,以及各种模型的对比。

最后,笔者对模型的可解释性进行了探索,主要基于目前一个流行的可解释库:SHAP。

SHAP将所有的特征都视为“贡献者”。 对于每个预测样本,模型都产生一个对应的预测值,SHAP value就是该样本中每个特征所分配到的数值

关于特征工程的学习,笔者推荐一本书:《特征工程入门与实践》。

5e02ef559b8135a84f52ff4314b8eb38.png

文章地址

https://mp.weixin.qq.com/s/iO47yo6IgYgw6xZ8W-8lbQ

3、第三篇(本篇)

写第3篇(也就是看到的这篇)的时候,笔者依旧是一名数据分析师。今年的学习重点转移到了深度学习和kaggle比赛,最近一段时间学习一些DL的基础和Keras框架对于分类和回归问题的建模,从网络模型搭建、编译、训练网络等步骤完成整个建模的基本过程。

DL的建模过程后面深入学习了之后,会对现有的模型进行下一步的优化!

ba1e9fd56d00d80d778d1be4da24a1c7.png

写在最后:3篇文章仅代表了笔者的一些学习经历和知识总结,关于文章的具体细节部分,如果大家有认为有更好的处理方式或者不恰当的地方,欢迎指出来一起学习讨论~

Datawhale后台回复 深圳 可下载租房数据

本文是针对深圳租房数据的第3次分析,主要包含数据预处理、采样处理、基于Keras的建模等:

cf96b56e9f4dada5db483ae3400a8008.png

导入库

import numpy as np
import pandas as pd

import plotly.express as px
import plotly.graph_objects as go
import matplotlib.pyplot as plt
import seaborn as sns
# plt.style.use("fivethirtyeight")
plt.style.use('ggplot')

import sklearn.preprocessing as pre_processing
from imblearn.over_sampling import SMOTE   
from sklearn.preprocessing import StandardScaler,MinMaxScaler

import tensorflow as tf
from keras import models
from keras import layers

np.random.seed(123)

pd.options.mode.chained_assignment = None

数据基本信息

读取数据

df = pd.read_excel("leyoujia.xls")
df.head()
e273a97e6db6e6950be4d0943668fa0a.png

数据shape

In [3]:

# 数据形状

df.shape

Out[3]:

(2020, 12)

数据shape返回的是一个列表,第一个取值表示数据的行数,第二个是属性个数,即字段的多少

字段类型

In [4]:

# 数据的字段类型

df.dtypes

Out[4]:

大部分都是字符串类型,只有money,就是最终的预测值是数值型

name           object
layout         object
location       object
size           object
sizeInside     object
zhuangxiu      object
numberFloor    object
time           object
zone           object
position       object
money           int64
way            object
dtype: object

In [5]:

# 数据中的缺失值

df.isnull().sum()

Out[5]:

name           0
layout         0
location       0
size           0
sizeInside     0
zhuangxiu      0
numberFloor    0
time           6  # 缺失值
zone           0
position       0
money          0
way            0
dtype: int64

缺失值处理

找出缺失值

在time字段中存在缺失值,找出缺失值所在的行数据信息:

134a96d835188e40fd67c6d162c641ec.png

填充缺失值

缺失值的填充有多种方法:

  • 填充具体值

  • 填充现有数据的某个统计值,比如均值、众数等

  • 填充前后项的值等

本文直接在网上找到每个小区的具体时间进行填充:

In [7]:

# 2019 2003 2004  2019 2019 2020

times = ["2019年", "2003年", "2004年", "2019年", "2019年", "2020年"]

# 通过对应的索引位置来填充缺失值
for i in range(len(df0)):
    df.iloc[df0.index.tolist()[i], 7] = times[i]

In [8]:

df.isnull().sum()

Out[8]:

填充之后发现没有缺失值:

name           0
layout         0
location       0
size           0
sizeInside     0
zhuangxiu      0
numberFloor    0
time         
  • 15
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
数据分析实战项⽬--链家租房数据可视化分析 导语:前⼏天舍友送了⼀本介绍的书籍,由此联想到,好久没有爬过⽹站了,但之前学的东西差不多全还给秦⽼板了(给我们上python的 ⽼师)。于是⽴马上⽹找了⼏篇博客,重温了⼀下⼏个包的知识点,动了⼀下⼩⼿,这不就有了等下要和你们讲的故事喽。 (⼀)项⽬介绍 (⼀)项⽬介绍 1. ⼯具 ⼯具 pycharm 2020.1.5 2. 内容 内容 本项⽬分为两部分: + 数据可视化分析 (1)爬⾍:⽤包爬取链家租房⽹页内容——BeautifulSoup解析——re正则表达式匹配我们需要的内容——sqlite3保存数据 (2)分析:pandas清洗分析数据——pyecharts进⾏可视化分析 (⼆)爬⾍部分 (⼆)爬⾍部分 ( (1)爬⾍第⼀步,了解我们将要爬取⽹页的信息 )爬⾍第⼀步,了解我们将要爬取⽹页的信息 如图所⽰:⼩框是链家⽹页租房的⽹址,⼤框是我们想要从⽹页中获取的内容。 由于链家的限制, 把页⾯往下拉到底部就可以看见,⼀次最多只能访问100页,⼀个页⾯有30套房,就是说,我们⼀次最多能看见 3000套房⼦的信息。但是实际上的租房房源远不3000。怎么办呢?我们可以通过增加限制条件来获取到尽量全的房源。 现在问题⼜来了,按区域爬⾍,区域我们是确定知道的,因为北京统共就那么⼏个区,但是⽹址中还需要知道各个区域的页数,各个 区域的页数⼜不相同,那么各个区域分别有多少页呢?这⾥我⽤了⼀个⽐较笨的⽅法,但⽅法虽笨,实现还是挺简单的,就是先爬取每个区 域的第⼀页,页⾯的最后有显⽰最⼤⽹页数,由此我们就可以得到最⼤⽹页数。现在先Fn+F12⼀下来看看⽹页的html⽂件吧~ 从上图,我们可以看出页数的信息在div class="content__pg"下⾯的内容,由此我们可以据其写出正则匹配表达式,并在div class="content__pg"下⾯的内容找到最⼤页数。 本次爬⾍⽤的是requests包,⾸先构造⼀个响应头部header,⽤于伪装,然后构造get请求并发起,将爬取下来的数据存于html中, 详见代码ask_url函数。 在get_page函数中调⽤ask_url函数,循环爬取每个区的第⼀页,⼀边爬⼀边⽤BeautifulSoup解析,并在解析过的数据中,⽤ re.findall()在div class="content__pg"下⾯的内容匹配找出最⼤页数。get_page函数中⽤了两个for循环,⼀个调⽤regions中的区,然 后爬⾍,⼀个⽤来查找爬取内容的最⼤页数。(本次爬⾍的限制条件,即区域,只有13个,其他4个较为边缘的区没有计⼊) ( (2)正式爬取⽹页信息并解析匹配 )正式爬取⽹页信息并解析匹配 从上⾯,我们得到了每个区的页数,并保存于pagelist⾥⾯,返回。接下来,就要正式爬取我们想要的内容了。⾸先,设置⼀个空列 表来存放我们解析匹配后得到的数据。两个for循环,调⽤ask_url函数,才能得到regions⾥⾯所有区各⾃的页数的全部内容。 爬取⼀页内容,解析⼀页。 再⼀次Fn+F12,可以看见,我们想要获取的内容,都在div class_="content__list--item",我们先print⼀个或者多个解析过后的 soup,观察其结构和内容,可根据其中内容⽤re.compile()构造出我们所需内容的正则表达式,在这⾥就不⼀⼀展开了,有兴趣的uu找找 相关正则表达式的博客。 之后就开始匹配我们需要的内容,⽤re包⾥⾯的findall⽅法找出和正则表达式匹配的内容,并先将内容暂时存在⼀个data列表⾥,等 到所有想要得到的内容都匹配完成之后,再加⼊datalist列表中。这⼀步,我们会得到所有想要的信息。 1 import requests 2 from bs4 import BeautifulSoup 3 import re 4 import sqlite3 5 import pandas as pd 6 7 def main(): 8 baseurl = 'https://bj.lianjia.com/zufang/' 9 pagelist = get_page(baseurl) #得到每个区的页数 10 datalist = get_data(baseurl, pagelist) #得到所有数据 11 dbpath = "zufang.db" 12 savedata_2_db(datalist, dbpath) #存⼊数据库 13 14 findpage = re.compile(r'data-totalpage="(\d*)" data-ur') #构建正则匹配,最⼤页数 15 16 17 def get_page(baseurl): #找出每个

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值