python项目练习--链家房价分析

本文通过Python进行链家房价数据分析,包括读取csv数据、数据清洗、时间处理、特征研究,如地区、价格、交易量等。重点探讨了每平米二手房单价计算、各区域房屋面积总和、周交易趋势及单位均价变化等关键指标。
摘要由CSDN通过智能技术生成
import numpy as np
import pandas as pd
import matplotlib as mpl                   # 注意此处的引用不要漏掉,否则下面的中文显示设置报错
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"]=False # 用来正常显示负号
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签

% matplotlib inline

读取数据并查看数据基本情况

# pd.read_csv('链家分区汇总.csv')   
# 如果是文件名中包含中文导致,解决办法:
# 1.将文件名改为英文-->成功解决
# pd.read_csv('lianjia.csv',encoding='utf-8',sep='\t')
# 2. 先open后读取    UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 34: illegal multibyte sequence
# 报错原因:要打开的文件中,有‘gbk’解析不了的文本内容;也可能是文件格式并非'gbk'格式的。将f = open('链家分区汇总.csv')改为如下内容即可
# f = open('链家分区汇总.csv',encoding='utf-8')
# pd.read_csv(f,sep='\t')
# 3. 指定引擎为python-->成功解决
# pandas的read_csv()方法时,默认使用C engine作为parser engine,而当文件名中含有中文的时候,
# 用C engine在部分情况下就会出错。所以在调用read_csv()方法时指定engine为Python就可以解决问题了。
df = pd.read_csv('链家分区汇总.csv',engine='python',encoding='utf-8',sep='\t')
df.head(2)
成交价(万) 成交时间 所在小区 户型 建筑面积 挂牌价格(万) 成交周期(天) 调价(次) 带看(次) 关注(人) ... 房屋朝向 建成年代 装修情况 建筑结构 供暖方式 梯户比例 产权年限 配备电梯 xx1 xx2
0 大兴 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 297 2019-10-29 成交 格林云墅 3室1厅 89.95 300 608 1.0 4.0 43.0 ... 南 北 2014 精装 钢混结构 集中供暖 一梯两户 70 NaN NaN

2 rows × 32 columns

# df.info()   # 32列 38393行 数据类型为object的29列,3列(调价,带看,关注)为float64
df.describe()
调价(次) 带看(次) 关注(人)
count 38379.000000 38379.000000 38379.000000
mean 0.655202 25.251544 35.793976
std 0.475309 33.931704 73.704051
min 0.000000 0.000000 0.000000
25% 0.000000 4.000000 4.000000
50% 1.000000 13.000000 19.000000
75% 1.000000 33.000000 45.000000
max 1.000000 534.000000 6522.000000

数据清洗

将地区信息单独成列

df['地区'] = df['成交价(万)']
df['地区'].unique()   # 查看“地区”这一列中的数据情况,目标是删除数字项
df['地区'] = df['地区'].str.replace('-','').replace('\d+',np.nan,regex=True)
df['地区'].fillna(inplace=True,method='ffill')
# 将地区放到第一列
lianjiadaqu = df['地区']
df.drop('地区',axis=1,inplace=True)   
df.insert(0,'大区',lianjiadaqu)
df.dropna(axis=0,thresh=20,inplace=True)

删除 xx1 xx2

df.drop('xx1',axis=1,inplace=True)
df.drop('xx2',axis=1,inplace=True)
df.sample(5)
df.columns
Index(['大区', '成交价(万)', '成交时间', '所在小区', '户型', '建筑面积', '挂牌价格(万)', '成交周期(天)',
       '调价(次)', '带看(次)', '关注(人)', '浏览(次', '链家编号', '交易权属', '挂牌时间', '房屋用途',
       '房屋年限', '房权所属', '房屋户型', '所在楼层', '户型结构', '套内面积(㎡)', '建筑类型', '房屋朝向',
       '建成年代', '装修情况', '建筑结构', '供暖方式', '梯户比例', '产权年限', '配备电梯'],
      dtype='object')

先把涉及时间的统一处理

df[['成交时间', '成交周期(天)','挂牌时间']].head(5)
成交时间 成交周期(天) 挂牌时间
1 2019-10-29 成交 608 2018/3/1
2 2019-10-29 成交 31 2019/9/29
3 2019-10-29 成交 364 2018/10/31
4 2019-10-29 成交 39 2019/9/21
5 2019-10-29 成交 114 2019/7/7

成交时间规范

df['成交时间'].unique()   # 主要问题:分隔符不同  成交二字不必
df['成交时间'] = df['成交时间'].str.replace('成交','')
df['成交时间'] = pd.to_datetime(df['成交时间'])
# df['成交时间'].dropna()
# df['成交时间'].unique() 
a = df[df['成交时间'].dt.year == 1905].index.tolist()     # 记得加入.dt才能获取年份信息
display(len(a))                                            # 有913条数据的年份是1905?什么造成的&
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值