项目简介
本项目根据个人需求进行北京二手房信息的数据分析,通过数据分析观察住房特征规律,利用机器学习模型进行简单的预测。

数据源
通过爬虫爬取第三方房屋中间商网站(链家和安居客)获取数据源,仅供学习使用。

目的
北京房价是最受关注的话题。因此,本项目以研究北京二手房房价为目的,对二手房房价进行数据分析。

统计北京各区域二手房房价情况
统计北京各区域二手房数量
统计西城区、东城区和海淀区各地方二手房房价
统计房价与房屋面积区段的房屋数量

技术和工具
本项目以Python语言编程完成数据分析。

数据分析:pandas,numpy,matplolib

1、 数据导入和清洗

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 导入链家二手房数据
lianjia_df = pd.read_csv('./lianjia.csv')
print(lianjia_df.head())
print('\n')# 删除没用的列 ['Id', 'Direction', 'Elevator', 'Renovation'],为了与安居客数据合并
drop = ['Id', 'Direction', 'Elevator', 'Renovation']
lianjia_df_clean = lianjia_df.drop(drop, axis=1)# 重新摆放列位置 ['Region', 'District', 'Garden', 'Layout', 'Floor', 'Year', 'Size', 'Price']
columns = ['Region', 'District', 'Garden', 'Layout', 'Floor', 'Year', 'Size', 'Price']
lianjia_df_clean = pd.DataFrame(lianjia_df_clean, columns=columns)
print(lianjia_df_clean.head())
print('\n')# 计算Region列数据的总量
lianjia_total_num = lianjia_df_clean['Region'].count()
print(lianjia_total_num)

运行结果:

# 导入安居客二手房数据
anjuke_df = pd.read_csv('./anjuke.csv')
print(anjuke_df.head())
print('\n')# 正则表达式
anjuke_df['District'] = anjuke_df['Region'].str.extract(r'.+?-(.+?)-.+?', expand= False)
anjuke_df['Region'] = anjuke_df['Region'].str.extract(r'(.+?)-.+?-.+?', expand= False)
print(anjuke_df.head())
print('\n')#清洗数据,重新摆放列位置
columns = ['Region', 'District', 'Garden', 'Layout', 'Floor', 'Year', 'Size', 'Price']
anjuke_df = pd.DataFrame(anjuke_df, columns=columns)
print(anjuke_df.head())
print('\n')#计算Region列数据的总量
anjuke_total_num = anjuke_df['Region'].count()
print(anjuke_total_num)

运行结果:

# 数据集合并:将链家数据集与安居客数据集合并
df = pd.merge(lianjia_df_clean, anjuke_df, how='outer')
print(df)
print('\n')# 增加一列:每平方的价格
df['PriceMs'] = df['Price'] / df['Size']
print(df)
print('\n')# 对汇总数据再次清洗 (Null, 重复)
df.dropna(how='any')
df.drop_duplicates(keep='first', inplace=True)# 一些别墅的房屋单价有异常,删选价格大于25万一平的
df = df.loc[df['PriceMs']<25]   # 保留25万以下的数据total_num = anjuke_total_num + lianjia_total_num
df_num = df['Region'].count()
drop_num = total_num - df_numprint(total_num)
print(df_num)
print(drop_num)

运行结果:

2.数据可视化分析

北京各区域二手房房价均值对比 & 二手房数量对比

# 统计北京各区域二手房房价数量
df_house_count = df.groupby('Region')['Price'].count().sort_values(ascending=False)
print(df_house_count)print('\n')# 统计北京各区域二手每平方米房房价
df_house_mean = df.groupby('Region')['PriceMs'].mean().sort_values(ascending=False)
print(df_house_count)

运行结果:


方案一:

plt.figure(figsize=(20,10))
plt.rc('font', family='SimHei', size=13)
plt.style.use('ggplot')plt.subplot(211)
plt.title('各区域二手房平均价格的对比', fontsize = 20)
plt.ylabel('二手房平均价格 (万/平方米)', fontsize = 15)
bar1 = plt.bar(np.arange(len(df_house_mean.index)),  df_house_mean.values, color='c')
plt.show()

运行结果:

由方案一可以看出,x轴上不是索引值,需要对其进行进一步的改进。

方案二:
在方案一的基础上改进。
先对方案一中得到得bar1进行循环便利打印:

for i in bar1:print(i)

运行结果:

然后根据打印结果编写一个函数,将索引值添加到横轴:

def auto_x(bar, x_index):x = []for i in bar: x.append(i.get_x() + i.get_width()/2)x = tuple(x)plt.xticks(x, x_index)

调用函数:

auto_x(bar1, df_house_mean.index)

对方案一改进得最终结果:

def auto_x(bar, x_index):x = []for i in bar: x.append(i.get_x() + i.get_width()/2)x = tuple(x)plt.xticks(x, x_index)plt.figure(figsize=(20,10))
plt.rc('font', family='SimHei', size=13)
plt.style.use('ggplot')plt.subplot(211)
plt.title('各区域二手房平均价格的对比', fontsize = 20)
plt.ylabel('二手房平均价格 (万/平方米)', fontsize = 15)
bar1 = plt.bar(np.arange(len(df_house_mean.index)),  df_house_mean.values, color='c')auto_x(bar1, df_house_mean.index)plt.show()

运行结果:

方案三:
方案二不是最优做法,方案三更为简洁。

# 各区域二手房平均价格对比 # plt.rc('font', family='SimHei', size=13) plt.style.use('ggplot')
plt.figure(figsize=(20,10))
plt.rc('font', family='SimHei', size=13)
plt.style.use('ggplot')plt.subplot(211)
plt.title('各区域二手房平均价格的对比', fontsize = 20)
plt.ylabel('二手房平均价格 (万/平方米)', fontsize = 15)
bar1 = plt.bar(df_house_mean.index,  df_house_mean.values, color='c')plt.show()# 各区域二手房数量对比
plt.figure(figsize=(20,10))
plt.subplot(212)
plt.title('各区域二手房平均数量的对比', fontsize = 20)
plt.ylabel('二手房数量', fontsize = 15)
bar1 = plt.bar(df_house_count.index,  df_house_count.values, color='c')plt.show()

运行结果:

3、饼图可视化

# 各区域二手房数量百分比
plt.figure(figsize=(6,6))
plt.title('各区域二手房数量的百分比', fontsize=20)
ex = [0]*len(df_house_count)
ex[0] = 0.1
print(ex)
plt.pie(df_house_count, radius=1, autopct='%1.f%%', labels = df_house_count.index, explode=ex )plt.show()# 各区域二手房每平方米房价
plt.figure(figsize=(6,6))
plt.title('各区域二手房每平方米房价的百分比', fontsize=20)
ex = [0]*len(df_house_mean)
ex[0] = 0.1
print(ex)
plt.pie(df_house_mean, radius=1, autopct='%1.f%%', labels = df_house_count.index, explode=ex )plt.show()

运行结果:

【项目实战】北京二手房房价分析与预测相关推荐

  1. 数据挖掘实战项目——北京二手房房价分析

    本次实战项目的主要目的是分析北京二手房房价,项目源自博文:入门Python数据分析最好的实战项目(一)和入门Python数据分析最好的实战项目(二).本篇文章仅记录博主在学习过程中的思路. 数据分析 ...

  2. 北京二手房房价分析(建模篇)

    数据科学俱乐部 中国数据科学家社区 本篇将继续上一篇数据分析用Python分析北京二手房房价之后进行数据挖掘建模预测,这两部分构成了一个简单的完整项目.结合两篇文章通过数据分析和挖掘的方法可以达到二手 ...

  3. 深圳二手房房价分析及预测

    分析目标: 通过处理后的房价数据,筛选对房价有显著影响的特征变量. 确定特征变量,建立深圳房价预测模型并对假设情景进行模拟 数据预处理 import pandas as pd import os fi ...

  4. Crawl:利用bs4和requests爬取了国内顶级某房源平台(2020年7月2日上海二手房)将近30*100多条数据并进行房价分析以及预测

    Crawl:利用bs4和requests爬取了国内顶级某房源平台(2020年7月2日上海二手房)将近30*100多条数据并进行房价分析以及预测 目录 利用bs4和requests爬取了国内顶级某房源平 ...

  5. 数据挖掘机器学习[六]---项目实战金融风控之贷款违约预测

    相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据挖掘机器学习---汽车交易价格预测详细版本[二]{EDA-数据探索性分析} 数据挖掘机器学习 ...

  6. spark项目实战:电商分析平台之各个范围Session步长、访问时长占比统计(需求一)

    spark项目实战:电商分析平台之各个范围Session步长.访问时长占比统计(需求一) 项目基本信息,架构,需要一览 各个范围Session步长.访问时长占比统计概述 各个范围Session步长.访 ...

  7. spark项目实战:电商分析平台之项目概述

    spark项目实战:电商分析平台之项目概述 目录 项目概述 程序架构分析 需求解析 初始代码和完成代码存放在github上面 1. 项目概述 在访问电商网站时,我们的一些访问行为会产生相应的埋点日志( ...

  8. 商业大数据线下回归实验:北京二手房房价实验步骤(上)

    商业大数据线性回归实验:北京二手房房价实验步骤(上) 实验要求 (1)使用北京二手房房价.csv文件,创建一个工作流. (2) 用北京二手房房价.csv文件中的数据生成单位面积房价直方图.内部因素的单 ...

  9. python建筑案例_Python数据分析实战-链家北京二手房价分析

    前言 最近在自学Python,通过学习大家的分享案例,看到使用Python进行较多的主要4个方面:爬虫,数据处理,数据可视化以及机器学习建模.对我来说目标就是: 熟练使用numpy pandas 进行 ...

最新文章

  1. Zabbix监控系统部署:配置详解
  2. unix awk手册读书笔记
  3. 查看无线网卡工作模式
  4. 游国色天香中国馆有感
  5. _编程语言_C++_Lambda函数与表达式
  6. mysql免安装如何改密码_mysql免安装版配置与修改密码的教程
  7. html的课设作业6,第七节课html标签元素属性作业-2019-9-6 作业
  8. 防御 | 阻止木马侵入(电脑设置)
  9. 【编译原理笔记16】代码优化:流图,常用代码优化方法, 基本块的优化
  10. lastLogon和lastLogonTimestamp的区别
  11. LNAMP服务器环境(源码安装)
  12. Servlet详细介绍
  13. 概率论与数理统计学习笔记(5)——极大似然估计
  14. 4个让你相见恨晚的电脑操作技巧
  15. 日本房产泡沫的崩塌,虽然很长,希望80后仔细阅读
  16. mac安装软件提示没有权限
  17. 树莓派CSI摄像头使用
  18. wordpress博客构建
  19. 数据结构_线段树 详解+模板
  20. 已声明“XXX”,但从未读取其值,vscode 如何关闭ts报错

热门文章

  1. 微信群裂变文案微信群裂变软件
  2. 基于javaweb的房地产客户关系管理系统(java+jsp+javascript+servlet+mysql)
  3. 不说话的“狼人杀”游戏
  4. linux安装Redis保姆级别
  5. /proc/vmstat输出含义
  6. 群体机器人kilobots研究文章推荐(群体智能)
  7. 2019应届生平均月薪6000左右!
  8. angular5+动态设置页面标题title
  9. 快速微课制作方法和技巧
  10. OpenStack Magnum 项目简介