#python #pandas #matplotlib
#python #панды #matplotlib
Вопрос:
Да, я прочитал документацию на веб-сайте pyplot. Нет, это все еще не имеет смысла.
Что делает следующий фрагмент кода? Я думаю, что он читает первые 100 строк набора данных, но не уверен, что он делает в отношении столбцов:
# select setosa and versicolor
y = df.iloc[0:100, 4].values
y = np.where(y == 'Iris-setosa', -1, 1)
# extract sepal length and petal length
X = df.iloc[0:100, [0, 2]].values
# plot data
plt.scatter(X[:50, 0], X[:50, 1],
color='red', marker='o', label='setosa')
plt.scatter(X[50:100, 0], X[50:100, 1],
color='blue', marker='x', label='versicolor')
plt.xlabel('sepal length [cm]')
plt.ylabel('petal length [cm]')
plt.legend(loc='upper left')
Ответ №1:
строка y = df.iloc[0:100, 4].values
занимает первые 100 строк (как вы знаете) и 5-й (индекс 4) столбец. И .values
в конце преобразует это в numpy arrray, а не в серию pandas.
строка X = df.iloc[0:100, [0, 2]].values
снова берет первые 100 строк, а также первый и третий (индексы 0 и 2) столбцы и снова преобразует их в массив. Это дает нам массив размером 100×2, поскольку мы выбрали два столбца, и я думаю, именно поэтому автор использовал заглавную X
букву для имени переменной, по сравнению со строчным регистром y
для 100x1
массива с первого шага.
Третий раздел, эта строка:
plt.scatter(X[:50, 0], X[:50, 1],
color='red', marker='o', label='setosa')
создает точечную диаграмму с первыми 50 строками X
, где первый столбец — горизонтальное положение, а второй столбец — вертикальное положение. Следующая строка:
plt.scatter(X[50:100, 0], X[50:100, 1],
color='blue', marker='x', label='versicolor')
делает то же самое с нижней половиной (строки 50-100) X
. Если вы запускаете этот код и ничего не происходит, попробуйте добавить plt.show()
в конце.