如何使用sklearn波士顿住房分类数据集使用matplotlib绘制线性图

时间:2018-12-31 20:16:18

标签: python pandas matplotlib scikit-learn data-science

我是数据科学的初学者,我试图用波士顿数据集的matplotlib(以及其他软件包,如pandas和numpy)绘制线性图。我被要求从[0,1]间隔绘制它。我被要求将房屋价格(TARGET,这是y轴)与该地区的犯罪率(CRIM,这是x轴)作图。我的目标是使用Matplotlib的直方图,但是我找不到如何对这样的分类数据集执行此操作。现在,这是我拥有的代码:

import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_boston

boston = load_boston()

dataFrame_x = pd.DataFrame(boston.data, columns = boston.feature_names)
dataFrame_y = pd.DataFrame(boston.target)

dataFrame_x.describe()

这是数据描述(在SO上看起来太烂了。对此我表示歉意):

    CRIM    ZN  INDUS   CHAS    NOX RM  AGE DIS RAD TAX PTRATIO B   LSTAT
count   506.000000  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000
mean    3.613524    11.363636   11.136779   0.069170    0.554695    6.284634    68.574901   3.795043    9.549407    408.237154  18.455534   356.674032  12.653063
std 8.601545    23.322453   6.860353    0.253994    0.115878    0.702617    28.148861   2.105710    8.707259    168.537116  2.164946    91.294864   7.141062
min 0.006320    0.000000    0.460000    0.000000    0.385000    3.561000    2.900000    1.129600    1.000000    187.000000  12.600000   0.320000    1.730000
25% 0.082045    0.000000    5.190000    0.000000    0.449000    5.885500    45.025000   2.100175    4.000000    279.000000  17.400000   375.377500  6.950000
50% 0.256510    0.000000    9.690000    0.000000    0.538000    6.208500    77.500000   3.207450    5.000000    330.000000  19.050000   391.440000  11.360000
75% 3.677083    12.500000   18.100000   0.000000    0.624000    6.623500    94.075000   5.188425    24.000000   666.000000  20.200000   396.225000  16.955000
max 88.976200   100.000000  27.740000   1.000000    0.871000    8.780000    100.000000  12.126500   24.000000   711.000000  22.000000   396.900000  37.970000

2 个答案:

答案 0 :(得分:2)

根据我对您的评论的理解,以下是对数据进行线性拟合的方法。由于要绘制区域0到1的CRIMTarget的关系图,因此可以使用索引从DataFrame中获取CRIM的值,然后对这些值执行线性回归。

xdata = dataFrame_x['CRIM'][dataFrame_x['CRIM'] < 1].values
ydata = dataFrame_y[dataFrame_x['CRIM'] < 1].values.flatten()

xmesh = np.linspace(min(xdata), max(xdata), 50)

fit = np.poly1d(np.polyfit(xdata, ydata, 1))

plt.plot(xdata, ydata, 'bo', label='Data')
plt.plot(xmesh, fit(xmesh), '-b', label='Fit')
plt.legend(fontsize=16)
plt.xlabel('CRIM', fontsize=18)
plt.ylabel('Target',fontsize=18)

enter image description here

答案 1 :(得分:0)

您正在尝试绘制两个连续变量。因此,可以通过散点图或类似的可视化方式最好地解释这种关系。在这里,我尝试绘制散点图的六角合并。您可以使用以下documentation尝试其他版本。极端显示了各个变量直方图。

import seaborn as sns

filter_cdtn = dataFrame_x['CRIM'] < 1

sns.jointplot(x=dataFrame_x.loc[filter_cdtn,'CRIM'], 
              y=boston.target[filter_cdtn], 
              kind="hex").set_axis_labels("CRIM", "Target")
plt.show()

enter image description here