Форум сайта python.su
BelgЭто всё проблемы pandas, к питону это не относится. Они там что-то планируют переделывать и вот сразу пишут, что будут переделывать. Очень на винду смахивает: вместо того, чтобы делать свои дела, ты сидишь и занимаешься проблемами самой системы.
Теперь говорит:
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:858: FutureWarning:
Passing list-likes to .loc or with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.
BelgНу и как ты определяешь? Просто не видно, в чём необходимость использования pandas. Всё это можно делать на голом питоне, который сделан гораздо логичнее, чем модуль какой-то там.
Если нужно описание задачи, то вот кратко:
Есть данные на 50 тысяч боёв в доте 2, надо научить модель определять победителя.
Офлайн
scidamА возможно это реализовать ещё и с помощью цикла? Что б брать ячейку x и в конце цикла i увеличивать на один? И что б значение увеличивалось тоже в “итой” ячейке, а то весь столбец заполняется количеством вообще всех ‘radiant_Nukers’ в таблице, а должно: если есть в строчке 1 или 2 таких ячейки, то в этой же строчке и меняется значение, не воздействуя на остальные.
Хорошо, вот рабочий пример. Проверяем есть ли в колонке ‘r1_hero_roles’ подстрока ‘sd’,если есть, то увеличиваем соответствующее значение в колонке ‘radiant_Nukers’. Без циклов.
Офлайн
BelgЦиклы в Python медленные. Поскольку у вас 50k записей, то цикл по всем записям будет считаться достаточно долго.
А возможно это реализовать ещё и с помощью цикла?
Офлайн
scidamМогу объяснить задачу подробнее. Есть данные на бой в доте 2, в нём как известно участвуют 5 на 5 игроков. По кучке данных необходимо предсказать победу той или иной команды. Мне пришла идея подсчитать количество героев каждой роли (те самые Nukers и другие) в обоих командах (radiant и dire). Строка - это 1 бой, их 50 тысяч, на основе их будет обучаться модель. Есть столбец roles, где через запятую указаны “роли” каждого героя. На их основе надо посчитать общее количество героев в команде, которые могут исполнять ту или иную роль. Вооот. Так же есть практически такая же задача с типом атаки, и ещё одна, но эта задача, мне кажется, для отдельной темы. Вот такие пироги.
Отредактировано Belg (Апрель 10, 2018 02:28:08)
Прикреплённый файлы: t1.png (149,0 KБ)
Офлайн
Ваша задача может быть сформулирована как задача классификации; чтобы построить классификатор, решающий
задачу, рекомендуется использовать готовые для этого решения, например, библиотеку scikit-learn.
Конечно, можно создать “экспертный” классификатор на чистом Python, без всяких там sklearn, например,
использовать решающее правило “если в команде больше героев, то та и победит”. Однако, может оказать так, что подобные экспертные классификаторы могут обаладать слабой прогностической силой.
Я представляю себе задачу следующим образом. Для начала нам нужно подготовить данные, чтобы их можно
было передать на обучение одному из алгоритмов классификации из sklearn. При этом нам лучше будет использовать
какой-нибудь классификатор, который принимает как количественные, так и качественные признаки. Хорошим выбором в этом случае будут деревья решений или случайный лес (RandomForestClassifier).
Самое главное теперь подготовить данные. У нас есть две команды: radiant, dire. и результат боя – допустим это
переменная Y. Эта переменная может принимать 2 значения: 0 – победила команда dire, 1 – победила команда radiant;
если возможна ничья, то тогда у переменной Y должно будет 3 значения: 2 – дополнительно соответствует ничье.
Таким образом, у нас должен быть сформирован массив Y из 0 и 1 (или 0, 1, 2 – если допустимы ничьи) – общей длиной 50k. Используя pandas это должно быть просто.
Теперь собственно данные X, которые вместе с Y, должны будут переданы на обучение классификатору.
C матрицей данных, или значениями переменных предикторов более сложно. Здесь мы сами должны создать такие предикторы (по ML терминологии этот этап обычно называется feature engeneering), или отобрать, если они уже созданы.
Здесь должны быть переменные, характеризующие как первую, так и вторую команду, какая-то такая матрица:
'num_of_heroes1 ' 'total_health1 ' ..., 'num_of_heroes2 ' 'total_health2 ' .... 3 420 2 510 ....etc. 50 k rows
clf = RandomForestClassfiier() clf.fit(X, Y)
clf.predict(NEW_DATA)
Офлайн
scidam
Ваша задача может быть сформулирована как задача классификации; чтобы построить классификатор, решающийзадачу, рекомендуется использовать готовые для этого решения, например, библиотеку scikit-learn. Конечно, можно создать “экспертный” классификатор на чистом Python, без всяких там sklearn, например, использовать решающее правило “если в команде больше героев, то та и победит”. Однако, может оказать так, что подобные экспертные классификаторы могут обаладать слабой прогностической силой.Я представляю себе задачу следующим образом. Для начала нам нужно подготовить данные, чтобы их можно было передать на обучение одному из алгоритмов классификации из sklearn. При этом нам лучше будет использоватькакой-нибудь классификатор, который принимает как количественные, так и качественные признаки. Хорошим выбором в этом случае будут деревья решений или случайный лес (RandomForestClassifier).Самое главное теперь подготовить данные. У нас есть две команды: radiant, dire. и результат боя – допустим этопеременная Y. Эта переменная может принимать 2 значения: 0 – победила команда dire, 1 – победила команда radiant;если возможна ничья, то тогда у переменной Y должно будет 3 значения: 2 – дополнительно соответствует ничье.Таким образом, у нас должен быть сформирован массив Y из 0 и 1 (или 0, 1, 2 – если допустимы ничьи) – общей длиной 50k. Используя pandas это должно быть просто. Теперь собственно данные X, которые вместе с Y, должны будут переданы на обучение классификатору. C матрицей данных, или значениями переменных предикторов более сложно. Здесь мы сами должны создать такие предикторы (по ML терминологии этот этап обычно называется feature engeneering), или отобрать, если они уже созданы. Здесь должны быть переменные, характеризующие как первую, так и вторую команду, какая-то такая матрица:
Отредактировано Belg (Апрель 10, 2018 14:01:45)
Офлайн
scidam
Ваша задача может быть сформулирована как задача классификации; чтобы построить классификатор, решающийзадачу, рекомендуется использовать готовые для этого решения, например, библиотеку scikit-learn. Конечно, можно создать “экспертный” классификатор на чистом Python, без всяких там sklearn, например, использовать решающее правило “если в команде больше героев, то та и победит”. Однако, может оказать так, что подобные экспертные классификаторы могут обаладать слабой прогностической силой.Я представляю себе задачу следующим образом. Для начала нам нужно подготовить данные, чтобы их можно было передать на обучение одному из алгоритмов классификации из sklearn. При этом нам лучше будет использоватькакой-нибудь классификатор, который принимает как количественные, так и качественные признаки. Хорошим выбором в этом случае будут деревья решений или случайный лес (RandomForestClassifier).Самое главное теперь подготовить данные. У нас есть две команды: radiant, dire. и результат боя – допустим этопеременная Y. Эта переменная может принимать 2 значения: 0 – победила команда dire, 1 – победила команда radiant;если возможна ничья, то тогда у переменной Y должно будет 3 значения: 2 – дополнительно соответствует ничье.Таким образом, у нас должен быть сформирован массив Y из 0 и 1 (или 0, 1, 2 – если допустимы ничьи) – общей длиной 50k. Используя pandas это должно быть просто. Теперь собственно данные X, которые вместе с Y, должны будут переданы на обучение классификатору. C матрицей данных, или значениями переменных предикторов более сложно. Здесь мы сами должны создать такие предикторы (по ML терминологии этот этап обычно называется feature engeneering), или отобрать, если они уже созданы. Здесь должны быть переменные, характеризующие как первую, так и вторую команду, какая-то такая матрица:
for lines in x['r1_attack_type']: i= x['r1_attack_type'][lines] if i =='Melee': x['radiant_melee'][lines] +=1 else: x['radiant_ranged'][lines] +=1
for lines in x['r1_attack_type']: i= str(x['r1_attack_type'][lines]) if i =='Melee': x['radiant_melee'][lines] +=1 else: x['radiant_ranged'][lines] +=1
Офлайн
Пусть x это dataframe с колонками r1_attack_type, radiant_melee, radiant_ranged;
при этом r1_attack_type имеет dtype=np.object;
тогда фрагмент
for lines in x['r1_attack_type']: i= x['r1_attack_type'][lines] if i =='Melee': x['radiant_melee'][lines] +=1 else: x['radiant_ranged'][lines] +=1
x.loc[x['r1_attack_type'] == 'Melee', 'radiant_melee'] += 1 x.loc[x['r1_attack_type'] != 'Melee', 'radiant_ranged'] += 1
Офлайн