如何使用分类 sklearn boston 住房数据集使用 matplotlib 绘制线性图
Posted
技术标签:
【中文标题】如何使用分类 sklearn boston 住房数据集使用 matplotlib 绘制线性图【英文标题】:How to draw a linear plot with matplotlib using the categorical sklearn boston housing dataset 【发布时间】:2019-05-28 04:51:19 【问题描述】:我是数据科学的初学者,我正在尝试使用 matplotlib(以及其他包,如 pandas 和 numpy)与 boston 数据集绘制线性图。我被要求从 [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 列来绘制吗? 由于您正在使用数据集,因此您应该知道要绘制和可视化什么。您在这个项目背后的具体意图是什么? 这不是一个真正的项目。我被要求用数据集创建一个简单的图。 “带有数据集的简单绘图”这个术语太模糊了。我建议通过波士顿数据集相关网站了解您应该绘制的内容。 【参考方案1】:根据我对您的 cmets 的理解,以下是对数据执行线性拟合的方法。由于您想针对区域 0 到 1 绘制 CRIM
与 Target
,因此您使用索引从 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)
【讨论】:
非常感谢。我已接受并赞成您的回答。如果您认为这是一个很好的问题,您能否也给我一个赞成票? 我做到了。谢谢。很高兴为您提供帮助【参考方案2】:您正在尝试绘制两个连续变量。因此,散点图或类似的可视化可以最好地解释关系。在这里,我试图绘制散点图的六边形分箱。您可以使用以下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()
【讨论】:
问题。 1、filter_cdtn = dataFrame_x['CRIM'] < 1
的用途是什么,为什么小于1? 2.如果filter_cdtn
代表CRIM
,那么y=boston.target[filter_cdtn]
是什么意思?
1.既然你在你的问题draw it from the [0,1] interval
中提到过,我已经根据这个条件过滤了记录。 2. 同样的记录过滤也适用于y
。如果您不需要,您可以删除 filter_cdtn。以上是关于如何使用分类 sklearn boston 住房数据集使用 matplotlib 绘制线性图的主要内容,如果未能解决你的问题,请参考以下文章
sklearn库学习----随机森林(RandomForestClassifier,RandomForestRegressor)