Как нарисовать линейный график с помощью matplotlib, используя категориальный набор данных sklearn boston жилье - PullRequest
0 голосов
/ 31 декабря 2018

Я новичок в науке о данных, и я пытаюсь нарисовать линейный график с помощью 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 голосов
/ 01 января 2019

Вы пытаетесь построить две непрерывные переменные.Следовательно, взаимосвязь лучше всего объяснить графиком рассеяния или подобной визуализацией.Здесь я попытался построить гексагональный биннинг на графике рассеяния.Вы можете попробовать другие версии, используя следующую документацию .Гистограммы отдельных переменных показаны в крайних случаях.

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

0 голосов
/ 31 декабря 2018

Исходя из моего понимания ваших комментариев, ниже приведен способ линейного соответствия данных.Поскольку вы хотите построить график CRIM против Target для региона от 0 до 1, вы используете индексирование для получения значений CRIM из DataFrame, а затем выполняете линейную регрессию для значений.

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

...