pyplot — что делает iloc в этом фрагменте кода

#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() в конце.