数据分析-北京房价项目

这是一个基于python简单的数据分析项目,原博客地址:https://www.imooc.com/article/67498
在这个博客中用来完成一些对该博客的解释。
首先我们打入的包中

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from IPython.display import display
import seaborn as sns
#plt.style.use("fivethirtyeight") 
sns.set_style({'font.sans-serif':['simhei','Arial']}) 

pandas和numpy用于科学计算,matplotlib,seaborn用于画图。
这里sns的样式设置{‘font.sans-serif’:[‘simhei’,‘Arial’]}目的是为了解决后面画图中文乱码的问题,在调整后图中的中文方块乱码已经变成正常。
之后观察数据和调整数据的部分我们就略过了,因为比较简单也没什么好说的。
画图部分代码:

df_house_count = df.groupby('Region')['Price'].count().sort_values(ascending=False).to_frame().reset_index() 
df_house_mean = df.groupby('Region')['PerPrice'].mean().sort_values(ascending=False).to_frame().reset_index() 

df_house_count想表示出每个区的二手房数量,而mean则表示每个区的平均价格。groupby(‘Region’)[‘Price’]则代表选中所有的Region对它们的Price特征进行处理,处理方式为:count()统计总数,然后进行从小到大的排序sort_values(),这时候生成的是一个pandas.core.series.Series对象里面记录了我们想要的结果。我们再把它通过to_frame转换成dataframe,reset_index()则使索引重置,变成从0开始的新索引和以前的索引变得没有关联。

f, [ax1,ax2,ax3] = plt.subplots(3,1,figsize=(20,15)) 

上面是创建一个图和一组子图的命令,f是图 ax列表是坐标系集合,3和1参数是网格的行列数,这里是3行一列,显然就是三个图一层接着一层的那种样式。figsize设置窗口尺寸。

sns.barplot(x='Region', y='PerPrice', palette="Blues_d", data=df_house_mean, ax=ax1) 

利用seaborn画柱状图,x轴上是Region的成员,y轴上是价格。palette调节一下颜色,这里blue后面的_d表示颜色从强到弱变化,默认其实是从弱到强,这一手操作就很骚。然后数据我们需要给一个dataframe它会从里面寻找xy已经设置的列名。ax为轴选择ax1,之后我们要来设置ax1了。

ax1.set_title('lianjia house') 
ax1.set_xlabel('区域') 
ax1.set_ylabel('每平米单价') 

上面代码设置名称和xylabel的名称,之后就是重复的代码了,把ax123全设置完成后就可以plt show来显示出图像了。

sns.barplot(x='Region', y='Price', palette="Greens_d", data=df_house_count, ax=ax2) 
ax2.set_title('北京各大区二手房数量对比',fontsize=15) 
ax2.set_xlabel('区域') 
ax2.set_ylabel('数量') 
sns.boxplot(x='Region', y='Price', data=df, ax=ax3) 
ax3.set_title('北京各大区二手房房屋总价',fontsize=15) 
ax3.set_xlabel('区域') 
ax3.set_ylabel('房屋总价') 
plt.show()

这里有一个箱型图

在这里插入图片描述
之后我们继续特征分析:

f, [ax1,ax2] = plt.subplots(1, 2, figsize=(15, 5)) 
sns.distplot(df['Size'], bins=20, ax=ax1, color='r') 
sns.kdeplot(df['Size'], shade=True, ax=ax1)

distplot(直方图):直方图又称质量分布图,它是表示资料变化情况的一种主要工具。用直方图可以解析出资料的规则性,比较直观地看出产品质量特性的分布状态,对于资料分布状况一目了然,便于判断其总体质量分布情况。直方图表示通过沿数据范围形成分箱,然后绘制条以显示落入每个分箱的观测次数的数据分布。

核密度估计(KDE) Kernel density estimaton:通过核密度估计图可以比较直观的看出数据样本本身的分布特征。每一个观察都被一个以这个值为中心的正态(高斯)曲线所取代。

代码中参数1为dataframe某一列的全部数据,参数2为规格bins,参数3坐标系,参数4颜色。而把distplot和kdeplot画在一个坐标系里是因为他们的功能类似,都是表征总体size特征的分布状态。
在这里插入图片描述
可以看到房源的大小多数集中在100平附近。

sns.regplot(x='Size', y='Price', data=df, ax=ax2) 
plt.show()

regplot绘制散点图,能够看到
在这里插入图片描述
价格和房子大小的关系,在定位查找奇怪的离散值左侧那一列零散数据后发现是错误爬取的别墅数据,因此需要在处理的时候剔除掉这些数据。

f, ax1= plt.subplots(figsize=(20,20)) 
sns.countplot(y='Layout', data=df, ax=ax1) 
ax1.set_title('房屋户型',fontsize=15) 
ax1.set_xlabel('数量') 
ax1.set_ylabel('户型') 
plt.show()

通过countplot能够看到layout的全特征数量,对layout中所有的特征进行一个统计:
在这里插入图片描述
对于电梯那一列的缺失值进行填补,其实就是按照楼层是不是大于6判断的:

df.loc[(df['Floor']>6)&(df['Elevator'].isnull()), 'Elevator'] = '有电梯' 
df.loc[(df['Floor']<=6)&(df['Elevator'].isnull()), 'Elevator'] = '无电梯' 

然后根据之前的年份价格和电梯的信息画出它们结构化多绘图网格:
FacetGrid当您想要在数据集的子集中分别可视化变量的分布或多个变量之间的关系时,该类非常有用。一个FacetGrid可以与多达三个维度。八个图片是elevator和renovation两个维度的组合,纵轴是price的维度,横轴是year的维度。

grid = sns.FacetGrid(df, row='Elevator', col='Renovation', palette='seismic',size=4) 
grid.map(plt.scatter, 'Year', 'Price') 				#将绘图函数应用于子集  plt.scatter是散点图
grid.add_legend()									#绘制一个图例,可能将其放在轴外并调整图形大小

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值