Ответ 1
(Разработчик Spyder здесь) Поддержка массивов объектов будет добавлена в Spyder 4, который будет выпущен в 2019 году.
У меня есть проблема в Anaconda Spyder (Python).
Массив типов объектов нельзя увидеть под Windows 10 в проводнике переменных. Если я нажимаю X или Y, я вижу ошибку:
массивы объектов в настоящее время не поддерживаются.
У меня Win 10 Home 64bit (i7-4710HQ) и Python 3.5.2 | Anaconda 4.2.0 (64-разрядная версия) [MSC v.1900 64-разрядная версия (AMD64)]
(Разработчик Spyder здесь) Поддержка массивов объектов будет добавлена в Spyder 4, который будет выпущен в 2019 году.
Хороший пример здесь
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
dataset = pd.read_csv('Salary_Data.csv') #in your case right name of your file
X=dataset.iloc[:,:-1].values #this will convert dataframe to object
df = pd.DataFrame(X)
Вы можете просматривать данные в dataframe, это преобразует массив в dataframe.
И проводник переменных принимает фрейм данных. Выше приведен правильный и проверенный код
Я использовал то же самое без dataFrame
и .values
.
Это сработало для меня.
x = dataset.iloc[:, :-1]
y = dataset.iloc[:,3]
Решение: понизить версию spyder до 3.2.0
Вы можете сделать это, перейдя в анаконду-навигатор.
Если вы следите за курсом Udemy по компьютерному обучению, возможно, инструктор использует старую версию spyder и работает для него. В более новых версиях, таких как 3.2.8, он не работает, но может быть включен в будущие версии в будущем.
Я проанализировал код до того момента, когда он может не сработать.
Похоже, что редактор массива Spyder не поддерживает отображение массивов смешанных типов (объектных массивов).
Здесь вы можете увидеть поддерживаемые форматы.
Что-то сбивало с толку меня в первый раз, когда я его использовал: вы получаете тот же редактор, когда нажимаете на набор данных, и когда вы нажимаете на переменную массива.
В случае переменной типа array вы получаете виджет ArrayEditor. Я думаю, что звонок сделан здесь.
Но в случае переменной типа DataFrame вы получаете DataFrameEditor. Я думаю, что звонок сделан здесь
Проблема в том, что оба виджета выглядят более или менее одинаково, поэтому можно подумать, что они получают одинаковый результат в обоих случаях, но DataFrameEditor допускает смешанные типы, а ArrayEditor - нет.
Вы можете попытаться проверить переменные массива в консоли IPython до тех пор, пока в Spyder не будет выпущена поддержка для правильных виджетов.
Используйте следующий код:
dataset = pd.read_csv('Data.csv')
X = pd.DataFrame(dataset.iloc[:, :-1].values)
Это связано с тем, что массив имеет более одного типа данных, поэтому он не может отображать объект с более чем одним типом данных, потому что он не может выбрать один тип. Но если он имеет только один тип данных, тип - "float64", поэтому это можно увидеть.
Пока ваш тип переменных не одинаковый, а в переменном explorer вы видите это как объект, это означает, что переменная должна быть преобразована в тот же тип в вашем случае. Вы можете исправить это, используя fit_transform():
Вот часть кода, приведенная в этом учебнике:
from sklearn.preprocessing import LabelEncoder , OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_1.fit_transform(X[:, 2])
onehotencoder = OneHotEncoder(categorical_features = [1])
X = onehotencoder.fit_transform(X).toarray()
Есть две возможности, которые вы можете сделать, чтобы обойти средство просмотра переменных в Spyder. Вы также можете
A) используйте "print (X)", чтобы показать содержимое X, или
B) Просто используйте консоль IPython, просто набрав X и нажмите return. Это также позволяет вам быстро выявить, выполняют ли обсуждаемые функции ML свою работу.
Он еще не поддерживается Spyder, но вы можете использовать IPyhon Console для печати этих значений, просто набрав для него имя переменной.
С обновленной версией spyder вы больше не видите смешанные массивы, используя переменную explorer. Вы можете распечатать массив на консоли, чтобы проверить его.
У меня была аналогичная проблема, потому что я настаивал на использовании точного формата для переменной y
как для x
, то есть x[:, 0] = labelencoder_x.fit_transform(x[:,0])
, и я использовал y[:] = labelencoder_y.fit_transform(y[:]) *(taking into account the syntax for the fit transform for y)*
Вышеприведенный dtype для y_test
и y_train
"объект", который нельзя просмотреть в Spyder в проводнике переменных.
Когда я использовал точную строку, используемую инструктором: y = labelencoder_y.fit_transform(y)
. Dtype изменен на int64
который можно просмотреть в проводнике переменных.
Это сработало для меня:
import pandas as pd
labels = pd.read_csv('labels/labels.csv')
# object arrays are currently not supported exception
breeds = labels.breed.unique()
# Supported Version
# working fine
breeds = pd.DataFrame(labels.breed.unique())
Добавить
X = pd.DataFrame(X)
для преобразования объекта X в dataframe, который можно проверить в spyder также без ошибки.
Работал для меня!
Это связано с тем, что данные не закодированы. Все категориальные данные должны быть "закодированы". После просмотра данных в переменной explorer вашего sypder (https://i.stack.imgur.com/uApwt.jpg) ясно, что X содержит данные о какой-либо стране (например, [Франция, 44.0, 72000]), поэтому имя страны должно быть закодировано и аналогично y содержит "Да" или "Нет", поэтому оно также должно быть закодировано
Добавьте следующий код после строки 21, вы увидите массив объектов
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
'''
To prevent the machine learning equations from thinking
(if there are more than one country) that one country is greater than
another, use the concept of dummy variables
'''
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
'''
Since y is dependent variable, the machine learning model will know
that its a category, so we are going to use only the LableEncoder()
'''
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
У меня такая же проблема. Проблема была в строке
oneHotEncoder.fit_transform(X).toarray()
Что не возвращает данные массиву X. Вместо этого следующая строка должна исправить проблему:
X=oneHotEncoder.fit_transform(X).toarray()
Если данные относятся к тому же типу, например, int или float, они будут отображаться в проводнике переменных, в противном случае он не поддерживает, например, если данные имеют строку и int.
Но есть решение для проверки данных, вы можете сделать это в консоли IPython.
Я действительно работал над этим курсом, и инструктор никогда не открывает объект в средстве просмотра переменных. Я вернулся, чтобы проверить, и он действительно пытается, и сталкивается с той же проблемой, что и вы. При просмотре набора данных он просматривает его в консоли, а не в средстве просмотра переменных.
Как уже упоминалось выше, вы можете преобразовать все это в фрейм данных, который затем можете открыть в средстве просмотра переменных:
dataset = pd.read_csv("data.csv")
dataframe = pd.DataFrame(dataset)
Теперь вы сможете просматривать данные в средстве просмотра переменных вместе с категориальными переменными, как вам нравится. В то время я только просматривал набор данных в консоли, вводя имя импортированных данных, но это также все еще рабочий подход к новейшей версии Spyder.