我是数据科学的初学者,我试图用波士顿数据集的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
答案 0 :(得分:2)
根据我对您的评论的理解,以下是对数据进行线性拟合的方法。由于要绘制区域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)
答案 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()