Проблемы, связанные с таблицей в кадре данных - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь выполнить упражнение по созданию простого алгоритма машинного обучения на python.Это относится к информационному фрейму, содержание которого является образцом битв покемонов и победителей.Что я пытаюсь сделать: у меня есть набор данных с более чем 50000 образцов сражений покемонов, и я хочу подсчитать, сколько раз каждый из них выиграл свои сражения, и я хочу вставить это число в таблицу, которая содержит некоторые данные каждого покемона,Код (в блокноте Jupyter):

import pandas as pd
import numpy as np

pokemon = pd.read_csv('datas/pokemons_data.csv')
combates = pd.read_csv('datas/combats.csv')

pokemon

nome_corrigido = dict(zip(pokemon['#'], pokemon['Name']))
combates = combates[['First_pokemon', 'Second_pokemon', 
'Winner']].replace(nome_corrigido)
combates

primeiro = combates['First_pokemon'].value_counts()
segundo = combates['Second_pokemon'].value_counts()
vitorias = combates['Winner'].value_counts()
total_de_batalhas = primeiro + segundo
percentual_vitorias = vitorias/total_de_batalhas

percentual_vitorias = percentual_vitorias.sort_values()
percentual_vitorias.head()
vitorias.head()

pokemon['status_total'] = pokemon['Hit Points'] + pokemon['Attack'] + 
 pokemon['Defense'] + pokemon['Sp. Atk'] + \
 pokemon['Sp. Def'] + pokemon['Speed']

pokemon['vitorias'] = vitorias[0]
pokemon['percentual_vitorias'] = percentual_vitorias[0]

pokemon.iloc[:, [1, -3]].head()

from sklearn.model_selection import train_test_split

x = pokemon['status_total']
y = pokemon['percentual_vitorias']

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25)

from sklearn.linear_model import LinearRegression

x_train = np.array(x_train).reshape(len(x_train) , 1)
y_train = np.array(y_train).reshape(len(y_train) , 1)
y_test = np.array(y_test).reshape(len(y_test) , 1)
x_test = np.array(x_test).reshape(len(x_test) , 1)

modelo_linear = LinearRegression()
modelo_linear.fit(x_train, y_train)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

modelo_linear.predict(x)

Вопросы: 1) Первые проблемы возникают в строке 'pokemon [' vitorias '] = vitorias [0]'. Понятно, что новый столбец будетбыть заполненным только значением "152", которое является первой записью в массиве "vitorias" (без [0] я получу NaN, потому что я отображаю весь вектор в ячейку в наборе данных).Что я намеревался сделать: в наборе данных combats.csv есть строка со столбцом, который является покемоном, второй - еще один покемон, а третий - победитель этого сражения.Я посчитал, сколько раз выиграл какой-то покемон, и создал этот массив, в котором каждая запись - это число выигранных, отсортированных от наибольшего к последнему.152 - это количество раз, когда я выиграл два сражения.Теперь я хочу заполнить новый столбец «Витории» этим числом 152 только для двух, а количество побед для другого покемона соответствует тому, сколько раз они выиграли.Я не знаю как это сделать.Моя проблема, моя большая проблема, состоит в том, чтобы сопоставить, например, 152, который является первой записью в векторе vitorias, с соответствующей строкой, где «mewtwo» находится в другом наборе данных, наборе данных «pokemon».То есть, чтобы отобразить число побед покемона в векторе vitorias в соответствующую запись в таблице покемонов.

2) в строке modelo_linear.predict (x), которую я получил: ожидаемый двумерный массив, получилВместо 1D массива "Почему он ожидал 2D массив? Как я могу это исправить?

Это pokemons_data.csv: This is the pokemons_data.csv Я пытаюсь вставить количество победскажем, бульбазаур, в новом столбце, кроме столбца "type2". Поэтому я иду в этот кадр данных, combats.csv:

This is the combats.csv и пытаюсь подсчитать числовыигрыши каждого покемона, идентифицированные по идентификатору (цифры 1 для бульбазаура, 2 для ивисаура и т. д.).

1 Ответ

0 голосов
/ 04 октября 2018

Используйте pd.join/pd.merge() между combates и pokemon, чтобы вы могли получить Имена для First_/Second_pokemon.Остальное будет легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...