副标题[/!--empirenews.page--]
数据初探
首先导入要使用的科学计算包numpy,pandas,可视化matplotlib,seaborn,以及机器学习包sklearn。
- import pandas as pd
- import numpy as np
- import seaborn as sns
- import matplotlib as mpl
-
- import matplotlib.pyplot as plt
- from IPython.display import display
- plt.style.use("fivethirtyeight")
- sns.set_style({'font.sans-serif':['simhei','Arial']})
- %matplotlib inline
-
-
- # 检查Python版本
- from sys import version_info
- if version_info.major != 3:
- raise Exception('请使用Python 3 来完成此项目')
然后导入数据,并进行初步的观察,这些观察包括了解数据特征的缺失值,异常值,以及大概的描述性统计。
- # 导入链家二手房数据
- lianjia_df = pd.read_csv('lianjia.csv')
- display(lianjia_df.head(n=2))

初步观察到一共有11个特征变量,Price 在这里是我们的目标变量,然后我们继续深入观察一下。
- # 检查缺失值情况
- lianjia_df.info()

发现了数据集一共有23677条数据,其中Elevator特征有明显的缺失值。
- lianjia_df.describe()

上面结果给出了特征值是数值的一些统计值,包括平均数,标准差,中位数,最小值,最大值,25%分位数,75%分位数。这些统计结果简单直接,对于初始了解一个特征好坏非常有用,比如我们观察到 Size 特征 的最大值为1019平米,最小值为2平米,那么我们就要思考这个在实际中是不是存在的,如果不存在没有意义,那么这个数据就是一个异常值,会严重影响模型的性能。
当然,这只是初步观察,后续我们会用数据可视化来清晰的展示,并证实我们的猜测。
- # 添加新特征房屋均价
- df = lianjia_df.copy()
- df['PerPrice'] = lianjia_df['Price']/lianjia_df['Size']
-
- # 重新摆放列位置
- columns = ['Region', 'District', 'Garden', 'Layout', 'Floor', 'Year', 'Size', 'Elevator', 'Direction', 'Renovation', 'PerPrice', 'Price']
- df = pd.DataFrame(df, columns = columns)
-
- # 重新审视数据集
- display(df.head(n=2)
我们发现 Id 特征其实没有什么实际意义,所以将其移除。由于房屋单价分析起来比较方便,简单的使用总价/面积就可得到,所以增加一个新的特征 PerPrice(只用于分析,不是预测特征)。另外,特征的顺序也被调整了一下,看起来比较舒服。

数据可视化分析
Region特征分析
对于区域特征,我们可以分析不同区域房价和数量的对比。
- # 对二手房区域分组对比二手房数量和每平米房价
- 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()
-
- f, [ax1,ax2,ax3] = plt.subplots(3,1,figsize=(20,15))
- sns.barplot(x='Region', y='PerPrice', palette="Blues_d", data=df_house_mean, ax=ax1)
- ax1.set_title('北京各大区二手房每平米单价对比',fontsize=15)
- ax1.set_xlabel('区域')
- ax1.set_ylabel('每平米单价')
-
- 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()



(编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|