Librerias IA Python

Capítulo para compartir notas sobre librerías de Python para Inteligencia Artificial.

Pandas

Importar librería

import pandas as pd

DataFrame

Es como una hoja de Excel, se pueden crear manualmente o subir un archivo de Excel.

Crear DataFrame manualmente.

items = {'Raul' : [10,20,30],
               'Adriana' : [40,50,60]}
df = pd.DataFrame(items)
print(df)

Crear DataFrame con librería.

items = {'Raul' : pd.Series([10,20,30], ['apple', 'banana', 'mango']},
               'Adriana' : pd.Series([40,50,60], ['apple', 'orange', 'mango']}
df = pd.DataFrame(items)
print(df)

Conocer el índice de un DataFrame.

df.index

Devolver los valores el DataFrame.

df.values

Ver los nombres de las columnas.

df.columns

Ver las dimensiones, filas y columnas respectivamente.

df.shape

Obtener una sola columna del DataFrame.

df = pdDataFrame(items, columns = ['Raul'])
print(df)

Ver una columna con solo los índices necesarios.

df = pdDataFrame(items, columns = ['Raul'], index = ['apple', 'banana'])
print(df)

Ahora importaremos un archivo csv y empezaremos a usarlo para nuestro propósito.

Pandas utiliza varios tipos de archivos, pero los mas usados son los csv o datos separados por coma.

Poder descargar el siguiente archivo csv o ir al enlace https://www.kaggle.com/ y descargarlo, allí encontrarán muchos ejercicios donde muchas compañías suben sus problemas y las mejores soluciones son acreedoras a un premio. .

Importar Pandas

import pandas as pd

Crear un DataFrame a partir de un archivo externo.

df = pd.read_csv('data_fifa.csv')

Ver las 5 primeras filas en un DataFrame.

df.head()

Ver mas de 5 filas.

df.head(10)

Ver las 5 últimas filas en un DataFrame.

df.tail()

Ver un número exacto de las últimas filas.

df.tail(3)

Ver las variables estadísticas más importantes de un DataFrame.

df.describe()

Ver el máximo valor de acuerdo a las columnas.

df.max()

Ver el mínimo valor de acuerdo a las columnas.

df.min()

Ver la correlación para saber como las columnas están relacionadas.

df.corr()

Ver cuantos jugadores están en el Club FC Barcelona.

Club es una Columna.

df[df['Club'] == 'FC Barcelona']

Ver el jugador que tenga mayor Overall(Columna).

df[df['Overall'] == df['Overall'].max()]

Ver el jugador que tenga menor Overall(Columna).

df[df['Overall'] == df['Overall'].min()]

Ver solo jugadores de Nacionalidad España.

df[df['Nacionality'] == 'Spain']

Matplotlib

Funciona para visualizar mejor los datos en un DataFrame.

Importar pandas, matplotlib, seaborn

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Función que permite visualizar los gráficos dentro de jupyter notebook, debajo del import.

%matplotlib inline

Cargar archivo csv.

df = pd.read_csv('data_fifa.csv')
df

Ver solo las columnas

print(df.columns)

Conocer los rostros reales del videojuego Real Face.

Crear un grafico de barras.

sns.countplot(data = df, x = 'Real Face')

Llamar la paleta de colores, ya que cada que ejecutamos un código, estos cambian. Los colores se componen por índice.

sns.color_palette()

Asignar un color a una variable.

color_base = sns.color_palette()[2]

Asignar un color a un gráfico de barras.

sns.countplot(data = df, x = 'Real Face', color = color_base)

Ver gráfico de jugadores en una posición.

sns.countplot(data = df, x = 'Position')

Ver los gráficos, pero con el nombre rotado para que no se vean amontonado los datos.

sns.countplot(data = df, x = 'Position')
plt.xticks(rotation = 90)

Crear variable para que los datos se vean en orden.

order_position = df['Position'].value_counts().index
sns.countplot(data = df, x = 'Position', color = color_base, order = order_position)
plt.xticks(rotation = 90)

Gráficos Circulares.

Pie Chart o Gráficos Circulares

Importar las librerías.

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

Mostrar solo las columnas.

df = pd.read_csv('data_fifa.csv')
df.head(4)
print(df.columns)

Hacer un gráfico circular de Real Face. Primero limpiar la columna o quitar los valores nulos y ordenado en forma descendente.

sorted_values = df['Real Face'].value_counts()
plt.pie(sorted_values, labels = sorted_values.index)

Para que empiece del centro del circulo y no de cualquier angulo.

sorted_values = df['Real Face'].value_counts()
plt.pie(sorted_values, labels = sorted_values.index, startangle = 90)

Cambiar el orden, a descendente.

sorted_values = df['Real Face'].value_counts()
plt.pie(sorted_values, labels = sorted_values.index, startangle = 90, counterclock = False)

Agregar; para que se vean más limpio los gráficos.

sorted_values = df['Real Face'].value_counts()
plt.pie(sorted_values, labels = sorted_values.index, startangle = 90, counterclock = False);

La función axis para poner en óvalo el gráfico.

sorted_values = df['Real Face'].value_counts()
plt.pie(sorted_values, labels = sorted_values.index, startangle = 90, counterclock = False);

Agregar; para que se vean más limpio los gráficos.

sorted_values = df['Real Face'].value_counts()
plt.pie(sorted_values, labels = sorted_values.index, startangle = 90, counterclock = False);

Grafico de dona.

Agregar; para que se vean más limpio los gráficos.

sorted_values = df['Real Face'].value_counts()
plt.pie(sorted_values, labels = sorted_values.index, startangle = 90, counterclock = False,
wedgeprops = {'width' : 0.5});

Histogramas

Crear histogramas con Matplotlib, searbon : Histogramas

Primero importar las librerías.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

Usar el mismo archivo adjunto en este tutorial.

df = pd.read_csv("data_fifa.csv")
df.head(4)

Crear un histograma.

plt.hist(data = df, x = 'Potential');

Ajustarlo por valores, podemos usar el código print(df[‘Potential´].describe()) para ver los valores máximos y mínimos del historial, o podemos crear variables con las funciones min y max, también importar NumPy.

import numpy as np
min_valor = df['Potential'].min()
max_valor = df['Potential'].max()
bins_base = np.arange(min_valor, max_valor, 5)
print(bins_base)
plt.hist(data = df, x = 'Potential', bins = bins_base);

Histograma con seaborn


sns.distplot(df['Potential']);

Quitando el contorno.

sns.distplot(df['Potential'], kde = False);

Gráfico de Dispersión.

Histograma con dos argumentos de columnas.

plt.scatter(data = df, x = 'BallControl', y = 'Dribbling')

Histograma con matplotlib.pyplot

Agregar etiquetas para tener más claro el histograma.

Para poder ver que existe una relación positiva, es decir, cuando mejor se esté desfigurando, más fácil podrán tener control del valor

Es casi lo mismo a diferencia que existe una línea que indica la regresión lineal

sns.regplot(data = df, x = 'BallControl', y = 'Dribbling')
plt.xlabel('BallControl')
plt.ylabel('Dribbling');

Gráficos de caja, Heat Map o gráfico de calor.

Parecido a los histogramas a diferencia que en Heat Map podemos usar dos columnas para comparar.

import numpy as np
plt.hist2d(data = df, x = 'Potential', y = 'Age');

Para conocer que significan los colores

plt.hist2d(data = df, x = 'Potential', y = 'Age');
plt.xlabel('Potential')
plt.ylabel('Age')
plt.colorbar();

Podemos mejorar el gráfico agregando otras variables y funciones.

import numpy as np
bins_potential = np.arange(48, df['Potential'].max() + 5, 5)
bins_age = np.arange(16, 45 + 5, 5)
plt.hist2d(data = df, x = 'Potential', y = 'Age', bins = [bins_potential, bins_age]);
plt.xlabel('Potential')
plt.ylabel('Age')
plt.colorbar();

Diagrama de caja o Box Plot, con librería seaborn.

sns.boxplot(data = df, x = 'Age', y = 'Potential');

Agrandar el gráfico con la librería matplotlib.pyplot

plt.figure(figsize = [10, 5])
sns.boxplot(data = df, x = 'Age', y = 'Potential');

Los puntitos son los jugadores, de lado izquierdo el potencial y abajo la edad.

Para saber ejemplo quien es el jugador con mayor potencial poemos hacer lo siguiente,

df[df['Potential'] == df['Potential'].max()]

Ejercicio.

Predecir potencial de un jugador.

Ver si las columnas Age y Potential tienen valores nulo

print((df['Age'].isnull().any(), df['Potential'].isnull().any()))

Ver la relación entre 2 columnas.

plt.scatter(data = df, x = 'Age', y = 'Potential')
plt.xlabel('Age')
plt.ylabel('Potential');

Compararlo con un mapa de color.

plt.hist2d(data = df, x = 'Age', y = 'Potential')
plt.xlabel('Age')
plt.ylabel('Potential')
plt.colorbar();

Para extraer datos para testear el modelo, se necesita…

# data traning: x_train = age, y_train = potential
# data testing: x_test = age, y_test = potential
#Libreria sckikit_learn

from sklearn.model_selection import train_test_split
#Dividir
x_train, x_test, y_train, y_test = train_test_split(df['Age'], df['Potential'], test_size = 0.2)
print(x_train, x_test, y_train, y_test)
#Entrenamiento

#Primero transformar las dimencones con la funcion de numpy-

#Convert to ndarray
x_train = np.array(x_train)
y_train = np.array(y_train)
x_test = np.array(x_test)
#Reshape
x_train = x_train.reshape(-1, 1)
y_train = y_train.reshape(-1, 1)
x_test = x_test.reshape(-1, 1)
print(x_train.shape)
#Seleccionar el modelo

from sklearn.linear_model import LinearRegression
regression = LinearRegression()
#Entrenamiento

regression.fit(x_train, y_train)
#Prediction
y_predict = regression.predict(x_test)
#Comprobr la prediccón
#Observar que un jugador de 19 años, segun la predicción su potencial es de 71.33

print(x_test)
print('\n')
print(y_predict)
#Comprobar si la predicción esta bien o mal, buscando el error

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test, y_predict)

Entre mas bajo es el error, mejor es nuestro algoritmo de predcción

Gracias por compartir.

Related Posts

Deja una respuesta

Tu dirección de correo electrónico no será publicada.