数据分析(以kaggle上的加州房价为例)

这篇具有很好参考价值的文章主要介绍了数据分析(以kaggle上的加州房价为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据来源:House Prices - Advanced Regression Techniques

参考文献:

  • Comprehensive data exploration with Python

1. 导入数据

import pandas as pd
import warnings
warnings.filterwarnings('ignore') # 忽略警告
df_train = pd.read_csv('./house-prices-advanced-regression-techniques/train.csv')
df_train.columns
Index(['Id', 'MSSubClass', 'MSZoning', 'LotFrontage', 'LotArea', 'Street',
       'Alley', 'LotShape', 'LandContour', 'Utilities', 'LotConfig',
       'LandSlope', 'Neighborhood', 'Condition1', 'Condition2', 'BldgType',
       'HouseStyle', 'OverallQual', 'OverallCond', 'YearBuilt', 'YearRemodAdd',
       'RoofStyle', 'RoofMatl', 'Exterior1st', 'Exterior2nd', 'MasVnrType',
       'MasVnrArea', 'ExterQual', 'ExterCond', 'Foundation', 'BsmtQual',
       'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinSF1',
       'BsmtFinType2', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', 'Heating',
       'HeatingQC', 'CentralAir', 'Electrical', '1stFlrSF', '2ndFlrSF',
       'LowQualFinSF', 'GrLivArea', 'BsmtFullBath', 'BsmtHalfBath', 'FullBath',
       'HalfBath', 'BedroomAbvGr', 'KitchenAbvGr', 'KitchenQual',
       'TotRmsAbvGrd', 'Functional', 'Fireplaces', 'FireplaceQu', 'GarageType',
       'GarageYrBlt', 'GarageFinish', 'GarageCars', 'GarageArea', 'GarageQual',
       'GarageCond', 'PavedDrive', 'WoodDeckSF', 'OpenPorchSF',
       'EnclosedPorch', '3SsnPorch', 'ScreenPorch', 'PoolArea', 'PoolQC',
       'Fence', 'MiscFeature', 'MiscVal', 'MoSold', 'YrSold', 'SaleType',
       'SaleCondition', 'SalePrice'],
      dtype='object')
df_train['SalePrice'].describe()
count      1460.000000
mean     180921.195890
std       79442.502883
min       34900.000000
25%      129975.000000
50%      163000.000000
75%      214000.000000
max      755000.000000
Name: SalePrice, dtype: float64

2. 变量分析

import seaborn as sns
# 绘制售价的直方图
sns.distplot(df_train['SalePrice']);

数据分析(以kaggle上的加州房价为例)

# 输出偏度和峰度
print("Skewness: %f" % df_train['SalePrice'].skew())
print("Kurtosis: %f" % df_train['SalePrice'].kurt())
Skewness: 1.882876
Kurtosis: 6.536282
  • 偏度(Skewness)是一种衡量随机变量概率分布的偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。偏度可以用来反映数据分布相对于对称分布的偏斜程度。偏度的取值范围为 (−∞,+∞),完全服从正态分布的数据的偏度值为0,偏度值越大,表示数据分布的右侧尾部较长和较厚,称为右偏态或正偏态;偏度值越小,表示数据分布的左侧尾部较长和较厚,称为左偏态或负偏态。
  • 峰度(Kurtosis)是一种衡量随机变量概率分布的峰態的指标。峰度高就意味着方差增大是由低频度的大于或小于平均值的极端差值引起的。峰度可以用来度量数据分布的平坦度(flatness),即数据取值分布形态陡缓程度的统计量。
# 绘制GrLivArea(生活面积)的散点图
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0, 800000));

数据分析(以kaggle上的加州房价为例)

# 绘制TotalBsmtSF(地下室面积)的散点图
var = 'TotalBsmtSF'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0, 800000));

数据分析(以kaggle上的加州房价为例)

import matplotlib.pyplot as plt
# 绘制OverallQual(房屋整体材料和装修质量)的箱线图
var = 'OverallQual'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x=var, y='SalePrice', data=data)
fig.axis(ymin=0, ymax=800000);

数据分析(以kaggle上的加州房价为例)

# 绘制YearBuilt(建造年份)的箱线图
var = 'YearBuilt'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(16, 8))
fig = sns.boxplot(x=var, y='SalePrice', data=data)
fig.axis(ymin=0, ymax=800000)
plt.xticks(rotation=90);    # 旋转x轴标签90度

数据分析(以kaggle上的加州房价为例)

  • GrLivAreaTotalBsmtSFSalePrice呈线性关系。TotalBsmtSF的斜率更大,说明地下室面积对售价的影响更大。
  • OverallQualYearBuiltSalePrice呈正相关关系。

3. 更进一步的变量分析

第二步只是凭着直觉对数据进行了初步的分析,下面我们将对数据进行更进一步的分析。

# 绘制变量相关矩阵
corrmat = df_train.corr(numeric_only=True) # 仅对数值型变量进行相关分析
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True);

数据分析(以kaggle上的加州房价为例)

import numpy as np
# SalePrice与其他变量的相关系数
k = 10
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index # 与SalePrice相关系数最大的10个变量的索引
cm = np.corrcoef(df_train[cols].values.T) # 计算相关系数矩阵
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, annot=True, fmt='.2f', annot_kws={'size': 10},
                 yticklabels=cols.values, xticklabels=cols.values)  # 设置annot=True,显示相关系数
plt.show()

数据分析(以kaggle上的加州房价为例)

对于GarageCarsGarageArea,两者有很强的关联性,因此选择保留GrageCars,因为它与SalePrice的相关性更高;TotalBsmtSF1stFloor(First Floor square feet)也有很强的关联性,地下室面积一般情况下不会大于一楼的面积,故选择保留TotalBsmtSF

因此最终保留了7个与SalePrice关联最大的7个变量,分别是OverallQualGrLivAreaGarageCarsTotalBsmtSFFullBathYearBuiltYearRemodAdd

# 绘制变量之间的pairplot散点图
sns.set()
cols = ['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF',
        'FullBath', 'YearBuilt', 'YearRemodAdd']
sns.pairplot(df_train[cols], size=2.5)
plt.show()

数据分析(以kaggle上的加州房价为例)

观察成对散点图:

TotalBsmtSFGrLivArea两者的图像上有一条直线,仿佛边界一般。说明地下室面积和生活面积成正比。就像上面提到的地下室面积和一楼面积的关系一样。

SalePriceYearBuilt的散点仿佛指数函数一般,说明房价随着建造年份的增加而增加。

4. 缺失值处理

total = df_train.isnull().sum().sort_values(ascending=False) # 统计每个变量的缺失值个数
percent = (df_train.isnull().sum() / len(df_train)).sort_values(ascending=False) # 统计每个变量的缺失值比例
missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
missing_data.head(20)
Total Percent
PoolQC 1453 0.995205
MiscFeature 1406 0.963014
Alley 1369 0.937671
Fence 1179 0.807534
MasVnrType 872 0.597260
FireplaceQu 690 0.472603
LotFrontage 259 0.177397
GarageYrBlt 81 0.055479
GarageCond 81 0.055479
GarageType 81 0.055479
GarageFinish 81 0.055479
GarageQual 81 0.055479
BsmtFinType2 38 0.026027
BsmtExposure 38 0.026027
BsmtQual 37 0.025342
BsmtCond 37 0.025342
BsmtFinType1 37 0.025342
MasVnrArea 8 0.005479
Electrical 1 0.000685
Id 0 0.000000
df_train = df_train.drop((missing_data[missing_data['Total'] > 1]).index, axis=1) # 将缺失数量大于1的列删去
df_train = df_train.drop(df_train.loc[df_train['Electrical'].isnull()].index) # 将Electrical缺失的行删去
df_train.isnull().sum().max() # 检查是否还有缺失值
0
from sklearn.preprocessing import StandardScaler
saleprice_scaled = StandardScaler().fit_transform(df_train['SalePrice'].to_numpy()[:, np.newaxis])
# 输出异常值
low_range = saleprice_scaled[saleprice_scaled[:, 0].argsort()][:10]
high_range = saleprice_scaled[saleprice_scaled[:, 0].argsort()][-10:]
print('outer range (low) of the distribution:')
print(low_range)
print('\nouter range (high) of the distribution:')
print(high_range)
outer range (low) of the distribution:
[[-1.83820775]
 [-1.83303414]
 [-1.80044422]
 [-1.78282123]
 [-1.77400974]
 [-1.62295562]
 [-1.6166617 ]
 [-1.58519209]
 [-1.58519209]
 [-1.57269236]]

outer range (high) of the distribution:
[[3.82758058]
 [4.0395221 ]
 [4.49473628]
 [4.70872962]
 [4.728631  ]
 [5.06034585]
 [5.42191907]
 [5.58987866]
 [7.10041987]
 [7.22629831]]
# 重新绘制GrLivArea和SalePrice的散点图
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0, 800000));

数据分析(以kaggle上的加州房价为例)

上图中右下角的两个点是异常值,因为它们的GrLivArea很大,但是售价很低。因此将它们删除。

lines = df_train.sort_values(by='GrLivArea', ascending=False)[:2]
df_train = df_train.drop(lines.index)

5. 测试数据

对于结果的计算分析,需要建立在一定的数据假设上。通常,需要考虑这四种情况:

  • 正态性(Normality):许多的统计方法测试都是基于数据是正态分布的情况,因此,如果数据服从正态分布能避免很多问题。
  • 同方差性(Homoscedasticity):同方差性是指因变量的方差在自变量的每个水平上都相等。同方差性是许多统计检验的一个前提条件,如果数据不符合同方差性,可能会导致结果不准确。
  • 线性性(Linearity):线性模型的一个前提条件是自变量和因变量之间的关系是线性的,如果不是线性的,可能需要对数据进行转换。
  • 不存在相关错误(Absence of correlated errors):相关错误是指数据中的一个观测值的误差与另一个观测值的误差相关。例如,如果两个观测值的误差都是正的,那么它们之间就存在正相关错误。相关错误可能会导致结果不准确。
from scipy.stats import norm
from scipy import stats
# 绘制直方图与正态概率图
sns.distplot(df_train['SalePrice'], fit=norm)
fig = plt.figure()
res = stats.probplot(df_train['SalePrice'], plot=plt)

数据分析(以kaggle上的加州房价为例)

数据分析(以kaggle上的加州房价为例)

# 对SalePrice进行log转换使其更接近正态分布,并重新绘制直方图与正态概率图
df_train['SalePrice'] = np.log(df_train['SalePrice'])
sns.distplot(df_train['SalePrice'], fit=norm)
fig = plt.figure()
res = stats.probplot(df_train['SalePrice'], plot=plt)

数据分析(以kaggle上的加州房价为例)

数据分析(以kaggle上的加州房价为例)

# 同理,对GrLivArea绘制直方图与正态概率图
sns.distplot(df_train['GrLivArea'], fit=norm)
fig = plt.figure()
res = stats.probplot(df_train['GrLivArea'], plot=plt)

数据分析(以kaggle上的加州房价为例)

数据分析(以kaggle上的加州房价为例)

# 对GrLivArea进行log转换使其更接近正态分布,并重新绘制直方图与正态概率图
df_train['GrLivArea'] = np.log(df_train['GrLivArea'])
sns.distplot(df_train['GrLivArea'], fit=norm)
fig = plt.figure()
res= stats.probplot(df_train['GrLivArea'], plot=plt)

数据分析(以kaggle上的加州房价为例)

数据分析(以kaggle上的加州房价为例)

# 还有TotalBsmtSF
sns.distplot(df_train['TotalBsmtSF'], fit=norm)
fig = plt.figure()
res = stats.probplot(df_train['TotalBsmtSF'], plot=plt)

数据分析(以kaggle上的加州房价为例)

数据分析(以kaggle上的加州房价为例)

由于一些房子没有地下室,导致有很多0值,因此不能对TotalBsmtSF进行log转换。

这里创建一个新的变量,如果TotalBsmtSF>0,则为1,否则为0。

df_train['HasBsmt'] = pd.Series(len(df_train['TotalBsmtSF']), index=df_train.index)
df_train['HasBsmt'] = 0
df_train.loc[df_train['TotalBsmtSF'] > 0, 'HasBsmt'] = 1
# 对HasBsmt为1的数据进行log转换
df_train.loc[df_train['HasBsmt'] == 1, 'TotalBsmtSF'] = np.log(df_train['TotalBsmtSF'])
sns.distplot(df_train[df_train['TotalBsmtSF'] > 0]['TotalBsmtSF'], fit=norm)
fig = plt.figure()
res = stats.probplot(df_train[df_train['TotalBsmtSF'] > 0]['TotalBsmtSF'], plot=plt)

数据分析(以kaggle上的加州房价为例)

数据分析(以kaggle上的加州房价为例)

对于同方差的检验,可以绘制散点图。如果散点呈现锥形(就像之前画的),这意味着数据的方差随着自变量的增加而增加,通常被称为异方差;变量是同方差,散点的数据应该分布在一条直线附近。

现在我们来看一下经过log运算后的SalePriceGrLivArea还有TotalBsmtSF的散点图。

plt.scatter(df_train['GrLivArea'], df_train['SalePrice']);

数据分析(以kaggle上的加州房价为例)

plt.scatter(df_train[df_train['TotalBsmtSF'] > 0]['TotalBsmtSF'], df_train[df_train['TotalBsmtSF'] > 0]['SalePrice']);

数据分析(以kaggle上的加州房价为例)

6. 哑变量

# 将类别变量转换为哑变量
df_train = pd.get_dummies(df_train)

总结

本次使用了pandas库和seaborn库对数据进行了初步的分析,对数据的缺失值进行了处理,对数据进行了转换,最后将类别变量转换为哑变量。文章来源地址https://www.toymoban.com/news/detail-706725.html

到了这里,关于数据分析(以kaggle上的加州房价为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 竞赛 大数据房价预测分析与可视

    🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据房价预测分析与可视 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/

    2024年02月07日
    浏览(27)
  • 城市房价数据可视化分析 计算机毕设 数据分析大数据毕设

    1.读数据表 首先,读取数据集。 CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT target 0.00632 18 2.31 0 0.538 6.575 65.2 4.09 1 296 15.3 396.9 4.98 24 0.02731 0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 396.9 9.14 21.6 0.02729 0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03 34.7 0.03237 0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.

    2024年02月20日
    浏览(32)
  • 数据分析与数据挖掘实战案例本地房价预测(716):

    2022 年首届钉钉杯大学生大数据挑战赛练习题目 练习题 A:二手房房价分析与预测 要点: 1、机器学习 2、数据挖掘 3、数据清洗、分析、pyeahcrs可视化 4、随机森林回归预测模型预测房价 1、读入数据、清洗数据: 2、解决相关问题: (一) 根据附件中的数据集,将二手房数据

    2024年02月07日
    浏览(40)
  • 【毕业设计】大数据房价数据分析可视化 - python

    🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定

    2024年02月02日
    浏览(37)
  • 基于多元线性回归的Boston房价数据分析

    Boston房价数据是R语言中一类重要的数据,常被用来做各种方法分析,即它是波士顿不同地区的506个家庭住房信息,其中包括影响房价的14个因素如城镇的人均犯罪率、氮氧化合物浓度、城镇黑人的比例、低教育程度的人口比例等,而且每个因素对房价的影响都是不同显著程度

    2024年01月19日
    浏览(47)
  • 【毕设选题】大数据房价预测分析与可视

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月03日
    浏览(35)
  • kaggle竞赛-Stable Diffusion数据分析与baseline

    你的目的是来预测我们生成图像的提示词 这个竞赛的目标不是从文本提示生成图像,而是创建一个模型,可以在给定生成图像的情况下预测文本提示(你有一堆提示词,你预测是否该提示词参与了图像的生成)?您将在包含由Stable Diffusion 2.0生成的各种(提示,图像)对的数据集

    2023年04月26日
    浏览(30)
  • python毕设 大数据房价数据分析及可视化(源码分享)

    今天分享一个大数据毕设项目:毕设分享 大数据房价数据分析及可视化(源码分享) 项目获取: https://gitee.com/sinonfin/algorithm-sharing 实现效果 毕业设计 房价大数据可视化分析 房地产是促进我国经济持续增长的基础性、主导性产业。如何了解一个城市的房价的区域分布,或者不

    2024年02月02日
    浏览(32)
  • python 导入fetch_california_housing 加州房价数据集报错解决

    1 导入加州房价数据集 显示 HTTP Error 403:Forbidden 2 处理方法  ①手工下载数据集  打开_california_housing.py 文件,里面有数据集的下载地址,不知道_california_housing.py文件地址的可以看报错中提示的位置  _california_housing.py文件中43行,有数据集的下载地址(https://www.dcc.fc.up.pt/~l

    2024年02月07日
    浏览(27)
  • 互联网加竞赛 大数据房价预测分析与可视

    🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据房价预测分析与可视 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/

    2024年02月22日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包