美文网首页python
Python编程&数据科学入门 - 波士顿房价数据分析

Python编程&数据科学入门 - 波士顿房价数据分析

作者: 桦渔 | 来源:发表于2017-09-07 16:03 被阅读0次

    本文将使用Python的绘图库Matplotlib,通过数据可视化分析影响房价的主要因素。

    波士顿房价数据集

    波士顿房价数据集来源于1978年美国某经济学杂志上。该数据集包含若干波士顿房屋的价格及其各项数据,每个数据项包含14个数据,分别是犯罪率、是否在河边和平均房间数等相关信息,其中最后一个数据是房屋中间价。

    数据来源:https://archive.ics.uci.edu/ml/datasets/Housing

    变量名称解释

    1. CRIM: per capita crime rate by town 每个城镇人均犯罪率
    2. ZN: proportion of residential land zoned for lots over 25,000 sq.ft. 超过25000平方英尺用地划为居住用地的百分比
    3. INDUS: proportion of non-retail business acres per town 非零售商用地百分比
    4. CHAS: Charles River dummy variable (= 1 if tract bounds river; 0 otherwise) 是否靠近查尔斯河
    5. NOX: nitric oxides concentration (parts per 10 million) 氮氧化物浓度
    6. RM: average number of rooms per dwelling 住宅平均房间数目
    7. AGE: proportion of owner-occupied units built prior to 1940 1940年前建成自用单位比例
    8. DIS: weighted distances to five Boston employment centres 到5个波士顿就业服务中心的加权距离
    9. RAD: index of accessibility to radial highways 无障碍径向高速公路指数
    10. TAX: full-value property-tax rate per $10,000 每万元物业税率
    11. PTRATIO: pupil-teacher ratio by town 小学师生比例
    12. B: 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town 黑人比例指数
    13. LSTAT: % lower status of the population 下层经济阶层比例
    14. MEDV: Median value of owner-occupied homes in $1000's 业主自住房屋中值

    数据导入和查看

    波士顿房价数据集在机器学习的sklearn.datasets包中,用datasets.load_boston()导入数据。接着使用.data.target分别加载房屋属性参数值和房屋中间价。

    import pandas as pd
    from sklearn import datasets
    boston_dataset = datasets.load_boston()
    
    X_full = boston_dataset.data
    Y = boston_dataset.target
    

    用房屋属性参数值创建DataFrame,使用.columns修改行标签为房屋属性名称,并添加一列房屋中间价数据。分别使用.head().info()查看数据,可以看到数据导入和整理成功,便于下一步的可视化分析。

    boston = pd.DataFrame(X_full)
    boston.columns = boston_dataset.feature_names
    boston['PRICE'] = Y
    boston.head()
    
    boston.info()
    
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 506 entries, 0 to 505
    Data columns (total 14 columns):
    CRIM       506 non-null float64
    ZN         506 non-null float64
    INDUS      506 non-null float64
    CHAS       506 non-null float64
    NOX        506 non-null float64
    RM         506 non-null float64
    AGE        506 non-null float64
    DIS        506 non-null float64
    RAD        506 non-null float64
    TAX        506 non-null float64
    PTRATIO    506 non-null float64
    B          506 non-null float64
    LSTAT      506 non-null float64
    PRICE      506 non-null float64
    dtypes: float64(14)
    memory usage: 55.4 KB
    

    数据可视化分析

    从上文的数据可以看出,接下来要分析13个房屋属性参数与房屋中间价的关系。房屋属性参数中有一个数据是离散数据(CHAS,0 或者 1),其余的均为连续数据。

    首先,使用matplotlib绘图分析河边CHAS(离散数据)和价格PRICE是否有相关性,可以看到二者没有明显的相关性,接下来的数据分析可以剔除属性CHAS。

    import matplotlib.pyplot as plt
    
    %matplotlib inline
    %config InlineBackend.figure_format = 'retina'
    
    plt.style.use('seaborn-whitegrid')
    plt.scatter(boston.CHAS, boston.PRICE)
    plt.xlabel('CHAS') 
    plt.ylabel('PRICE')
    plt.show()
    

    接下来,需要分析12个连续数据与房屋中间价的相关性。因为变量比较多,为了迅速找出影响房屋中间价的因素,可以使用matplotlib中的Seaborn模块绘制多变量图。多变量图的对角线上是变量分布的直方图,非对角线上是两个变量的散点图。

    把12个房屋属性分成两组与中间价绘图,第一组:CRIM, ZN, INDUS, NOX, RM 和 AGE。

    从图中可以看出,CRIM(犯罪率)和 RM(平均房间数目)与PRICE(房屋中间价)有明显相关性,RM和 PRICE呈现正态分布。

    import seaborn as sns
    sns.pairplot(boston, vars=['CRIM', 'ZN', 'INDUS', 'NOX', 'RM', 'AGE', 'PRICE'])
    

    第二组:DIS, RAD, TAX, PTRATIO, B 和 LSTAT。从图中可以看出,LSTAT(下层经济阶层比例)与PRICE有明显相关性。

    sns.pairplot(boston, vars=['DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'PRICE'])
    

    将CRIM,RM,LSTAT 与 PRICE绘图,可以更清楚的观察和分析数据的相关性。从图中看出 PRICE 与 LSTAT 及 CRIM 呈非线性关系,而与 RM 更呈线性关系。

    sns.pairplot(boston, vars=['CRIM', 'RM', 'LSTAT', 'PRICE'])
    

    总结:

    通过数据可视化分析,获得波士顿地区自住房屋中间价与下层经济阶层比例、平均房间数目和犯罪率有明显的相关性。具体符合哪种相关性,进一步分析将会涉及到线性回归等模型的应用。

    相关文章

      网友评论

        本文标题:Python编程&数据科学入门 - 波士顿房价数据分析

        本文链接:https://www.haomeiwen.com/subject/zumijxtx.html