python数据分析项目之:房地产数据可视化分析

先回顾一下数据分析的四大步骤:

目录

一、数据导入

二、数据清洗

三、特征构造(核心)

四、可视化分析


下面就根据以上步骤进行房地产项目数据分析实战:

一、数据导入

python 复制代码
# 1. 导入项目所用到的库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from matplotlib import rcParams
rcParams['font.sans-serif'] = ['SimHei'] #win电脑画图字体
python 复制代码
# 2. 导入数据
df = pd.read_csv(r'E:/project/data/house_sales.csv')
python 复制代码
# 3. 数据概览
print('总记录数:', len(df))
print('字段数量:', len(df.columns))
df.head(5)
df.info()

运行结果如下:

二、数据清洗

python 复制代码
# 数据清洗
# 1、删除无用的数据列
df.drop(columns='origin_url',inplace=True)
python 复制代码
# 2、检查是否有缺失值
df.isna().sum()
# 删除缺失值
df.dropna(inplace=True)
python 复制代码
# 检查是否有重复值
df.duplicated().sum()
# 删除重复数据
df.drop_duplicates(inplace=True)
python 复制代码
# 查看数据
print(len(df))
python 复制代码
# 3、数据列处理
# 面积的数据类型转换
df['area'] = df['area'].str.replace('㎡','').astype(float)
# 售价的数据类型转换
df['price'] = df['price'].str.replace('万','').astype(float)
# 朝向的数据类型转换
df['toward'] = df['toward'].astype('category')
# 单价的数据类型转换
df['unit'] = df['unit'].str.replace('元/㎡','').astype(float)
# 建造年份的数据类型转换
df['year'] = df['year'].str.replace('年建','').astype(int)
python 复制代码
# 4、异常值的处理
# 房屋面积的异常处理
df = df[ (df['area']<600) & (df['area']>20)]
python 复制代码
# 房屋售价的异常处理  IQR
Q1 = df['price'].quantile(0.25)
Q3 = df['price'].quantile(0.75)
IQR = Q3 - Q1
low_price = Q1 - 1.5*IQR
high_price = Q3 + 1.5*IQR
df = df[ (df['price']<high_price) & (df['price']>low_price) ]

三、数据特征构造

python 复制代码
# 1. 新数据特征构造
# 地区district
df['district'] = df['address'].str.split('-').str[0]

# 楼层的类型floor_type
df['floor_type'] = df['floor'].str.split('(').str[0].astype('category')
def fun1(str1):
    if pd.isna(str1):
        return '未知'
    elif '低' in str1:
        return '低楼层'
    elif '中' in str1:
        return '中楼层'
    elif '高' in str1:
        return '高楼层'
    else:
        return '未知'
df['floor_type2'] = df['floor'].apply(fun1).astype('category')

# 是否是直辖市zxs
df['zxs'] = df['city'].apply(lambda x: 1 if x in ['北京','上海','天津','重庆'] else 0)

# 卧室的数量bedrooms
df['bedrooms'] = df['rooms'].str.split('室').str[0].astype(int)

# 客厅的数量livingrooms
# df['rooms'].str.split('室').str[1].str.split('厅').str[0].astype(int)
df['livingrooms'] = df['rooms'].str.extract(r'(\d+)厅').astype('int')

# 楼龄building_age
df['building_age'] = 2025 - df['year']

# 价格的分段price_labels
df['price_labels'] = pd.cut(df['price'],bins=4,labels=['低价','中价','高价','豪华'])

四、可视化分析

复制代码
问题编号: A1
问题: 哪些变量最影响房价?面积、楼层、房间数哪个影响更大?
分析主题: 特征相关性
分析目标: 了解房屋各特征对房价的线性影响
分组字段: 无
指标/方法: 皮尔逊相关系数
python 复制代码
# 选择数值型特征
a = df[['price','area','unit','building_age']].corr()#相关系数
# 对房价的影响最大的几个因素的排序
a['price'].sort_values(ascending=False)[1:]
# 相关性的热力图
plt.figure(figsize = (5,5))
sns.heatmap(a,cmap='coolwarm')
plt.title('房屋特征相关性热力图')
plt.tight_layout()

运行结果如下:

复制代码
问题编号: A2
问题: 全国房价总体分布是怎样的?是否存在极端值?
分析主题: 描述性统计
分析目标: 概览数值型字段的分布特征
分组字段: 无
指标/方法: 平均数/中位数/四分位数/标准差

代码如下:

python 复制代码
# 房价分布直方图
plt.subplot(111)
plt.hist(df['price'],bins=10)
df.head()
sns.histplot(data=df,x='price',bins=10,kde=True)

运行结果如下;

复制代码
问题编号: A3
问题: 哪些城市房价最高?直辖市与非直辖市差异如何?
分析主题: 城市对比
分析目标: 比较不同城市房价水平
分组字段: city
指标/方法: 均价/单价中位数/箱线图

代码如下:

python 复制代码
# 按城市统计
city_stats = df.groupby('city').agg({
    'price': ['mean', 'median', 'count'],
    'unit': ['mean', 'median']
})
print("\n各城市房价统计:")
display(city_stats.sort_values(('unit', 'mean'), ascending=False).head(10))

# 可视化前10城市
top_cities = city_stats.sort_values(('unit', 'mean'), ascending=False).head(10).index
df_top = df[df['city'].isin(top_cities)]

plt.figure(figsize=(12, 6))
sns.boxplot(x='city', y='price', data=df_top, order=top_cities)
plt.title('TOP10城市房价分布对比', fontsize=14)
plt.xlabel('城市')
plt.ylabel('价格(元)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

运行结果如下:

复制代码
问题编号: A4
问题: 高价房在面积、楼层等方面有什么特征?
分析主题: 价格分层
分析目标: 识别不同价位房屋特征差异
分组字段: 价格分段(低中高)
指标/方法: 列联表/卡方检验
python 复制代码
# 按价格分段分析特征
price_group = df.groupby('price_labels').agg({
    'area': ['mean', 'median'],
    'building_age': 'mean',
    'unit': 'median',
    'zxs': 'mean'  # 直辖市占比
})

print("\n各价格层级特征对比:")
display(price_group)

# 可视化
plt.figure(figsize=(14, 5))

plt.subplot(131)
sns.barplot(x='price_labels', y='area', data=df, estimator=np.median)
plt.title('不同价格层级面积对比')
plt.ylabel('面积(㎡)')

plt.subplot(132)
sns.boxplot(x='price_labels', y='building_age', data=df)
plt.title('不同价格层级楼龄分布')
plt.ylabel('楼龄(年)')


plt.tight_layout()
plt.show()

运行结果如下:

复制代码
问题编号: A5
问题: 哪种户型最受欢迎?三室比两室贵多少?
分析主题: 户型分析
分析目标: 分析不同户型的市场表现
分组字段: rooms
指标/方法: 占比/平均单价/溢价率
python 复制代码
print("\n=== A5 户型分析 ===")

# 提取房间数(示例:"3室2厅" -> 3)
df['room_count'] = df['rooms'].str.extract('(\d+)室').astype(float)

# 按户型统计
room_stats = df.groupby('room_count').agg({
    'price': ['mean', 'median'],
    'unit': 'median',
    'area': 'median',
    'city': 'nunique'
}).sort_values(('price', 'mean'))

print("\n各户型市场表现:")
display(room_stats)

# 可视化
plt.figure(figsize=(14, 5))

plt.subplot(131)
sns.boxplot(x='room_count', y='price', data=df)
plt.title('不同户型总价分布')
plt.xlabel('房间数')

plt.subplot(132)
sns.scatterplot(x='area', y='price', hue='room_count', data=df, palette='viridis')
plt.title('面积-价格-户型关系')

plt.subplot(133)
sns.barplot(x='room_count', y='unit', data=df, estimator=np.median)
plt.title('不同户型单价对比')
plt.xlabel('房间数')

plt.tight_layout()
plt.show()
复制代码
问题编号: A6
问题: 南北向是否真比单一朝向贵?贵多少?
分析主题: 朝向溢价
分析目标: 评估不同朝向的价格差异
分组字段: toward
指标/方法: 方差分析/多重比较
python 复制代码
df['toward'].value_counts()
df.groupby('toward').agg({
    'price':['mean','median'],
    'unit':'median',
    'building_age':'mean',
})
# 数据可视化
plt.figure(figsize=(14, 5))
sns.boxplot(x='toward', y='price', data=df)
plt.tight_layout()

运行结果如下:

以上就是通过项目来加强学习的整体内容,有兴趣也可是看看视频教程:

https://www.bilibili.com/video/BV1D9GLzyEL6?spm_id_from=333.788.videopod.episodes&vd_source=2fabb5d4151ae7af2ad1f5a9905c5bbe&p=63

相关推荐
快乐的钢镚子8 小时前
【leetcode hot 100】49.字母异位词分组
python·leetcode
honeysuckle_luo9 小时前
RandLA-net-pytorch 复现
人工智能·pytorch·python
SunnyDays101110 小时前
Python 高效实现 Excel 与 TXT 文本文件之间的数据转换
python·excel转txt·文本转excel·excel转文本·txt转excel
硬件人某某某11 小时前
python基于卷积神经网络的桥梁裂缝检测系统(django),附可视化界面,源码
python·cnn·django
java1234_小锋11 小时前
PyTorch2 Python深度学习 - 自动微分(Autograd)与梯度优化
开发语言·python·深度学习·pytorch2
java1234_小锋11 小时前
PyTorch2 Python深度学习 - 简介以及入门
python·深度学习·pytorch2
tao35566713 小时前
【Python刷力扣hot100】42. Trapping Rain Water
开发语言·python·leetcode
一只安13 小时前
从零开发AI(不依赖任何模型)
人工智能·python
2501_9387820913 小时前
实战 Python NLP:处理 PDF 文档批量提取文本并进行主题建模
python·自然语言处理·pdf