Limpieza de Datos Fifa 21
INTRODUCCIÓN
Recientemente se organizó un reto en Kaggel de Limpieza de Datos en el espacio de la tecnología de datos. Este reto se creó para permitir a todos los entusiastas del análisis de datos participar en diferentes niveles (principiante, intermedio, avanzado), poner en práctica todo lo que habíamos aprendido sobre el proceso de limpieza de datos y construir proyectos dignos de un portafolio.
Todos podía utilizar cualquier herramienta de programación para realizar esta tarea. Para mi proceso de limpieza de datos, utilicé el Python para limpiar el conjunto de datos.
DESCRIPCIÓN DEL CONJUNTO DE DATOS
El conjunto de datos utilizado para este desafío fue el conjunto de datos FIFA 21 extraído del sitio web de KAGGLE. Lea más sobre el conjunto de datos aquí ( https://www.kaggle.com/datasets/yagunnersya/fifa-21-messy-raw-dataset-for-cleaning-exploring ). Contiene 18.979 filas y 77 columnas.
A continuación se muestran algunas de las columnas contenidas en el conjunto de datos y sus definiciones
ID: Número de identificación único para cada jugador
Name: Nombre del jugador
Long Name: Nombre completo del jugador
photo URL: URL de la foto del jugador
player URL: URL de la página de perfil del jugador
OVA:- Calificación general, una puntuación que representa la capacidad general del jugador.
POT:- Valoración potencial, una puntuación que representa el potencial de mejora del jugador.
Contract: el equipo para el que juega actualmente el jugador y los detalles del contrato.
Positions: Las distintas posiciones en el campo en las que puede jugar el jugador.
W/F: Valoración del pie débil del jugador.
SM: Clasificación de la habilidad de movimiento del jugador
A/W: Ritmo de trabajo ofensivo del jugador
D/W: Índice de trabajo defensivo del jugador
IR: Nivel de reputación internacional del jugador
PAC: Ritmo del jugador
SHO: Índice de tiro del jugador (1-5)
PAS: Clasificación de pases del jugador
DRI: Clasificación de regate del jugador
DEF: Valoración defensiva del jugador
PHY: Valoración física del jugador
# Importando librerías
import pandas as pd
import numpy as np
data = pd.read_csv('/fifa21.csv',sep = ',')
data.head(5)
#SE TIENE QUE HAY COLUMNAS OCULTAS
pd.set_option('display.max_columns', None)
data.sample(10)
#TAMAÑO DEL DATASET
data.shape
#SE MOSTRARÁ MAYOR DETALLE
data.info()
LIMPIEZA DE DATOS
# CREANDO COPIA DEL ARCHIVO
fifa = data.copy()
fifa.sample(5)
# MOSTRANDO LOS NOMBRES DE LAS COLUMNAS
fifa.columns
____________________________________________________________________________________________________
# REVISANDO LA COLUMNA ID
fifa['ID'].dtype
# CAMBIANDO NOMBRES DE LAS COLUMNAS
fifa = fifa.rename(columns={'Name':'NAME'})
fifa = fifa.rename(columns={'LongName':'FULL_NAME'})
fifa = fifa.rename(columns={'photoUrl':'PHOTO_URL'})
fifa = fifa.rename(columns={'playerUrl':'PLAYER_URL'})
fifa = fifa.rename(columns={'Nationality':'NATIONALITY'})
fifa = fifa.rename(columns={'Age':'AGE'})
fifa = fifa.rename(columns={'↓OVA':'OVA'})
fifa.columns
____________________________________________________________________
# REVISANDO LA COLUMNA CLUB
fifa['Club'].dtype
# ENCONTRANDO PALABRAS ÚNICAS
fifa['Club'].unique()
['\n\n\n\nFC Barcelona', '\n\n\n\nJuventus', '\n\n\n\nAtlético Madrid', '\n\n\n\nManchester City', '\n\n\n\nParis Saint-Germain', '\n\n\n\nFC Bayern München' ]
#QUITANDO \n DE TODO EL CONTIDO DE CLUB
# El strip()método elimina cualquier carácter inicial (espacios al principio) y final (espacios al final) el espacio es el carácter inicial predeterminado para eliminar)
fifa['Club'] = fifa['Club'].str.strip()
fifa['Club'].unique()
['FC Barcelona', 'Juventus', 'Atlético Madrid', 'Manchester City', 'Paris Saint-Germain', 'FC Bayern München' ]
# MOSTRANDO LOS NOMBRES DE LAS COLUMNAS
fifa = fifa.rename(columns={'Club':'CLUB'})
fifa.columns
_______________________________________________________________________________________________________
# REVISANDO LA COLUMNA CONTRACT
fifa['Contract'].dtype
# ENCONTRANDO PALABRAS ÚNICAS
fifa['Contract'].unique()
#IDENTIFICANDO LAS FILAS FREE - ON LOAN
for index, row in fifa.iterrows():
if 'On Loan' in row['Contract'] or 'Free' in row['Contract']:
print(row['Contract'])
# LIMPIEZA DE FECHAS
def extraer_contrato_informacion(contrato):
if contrato == 'Free' or 'On Loan' in contrato:
fecha_inicio = np.nan
fecha_final = np.nan
tamano_contrato = 0
else:
fecha_inicio, fecha_final = contrato.split(' ~ ')
anio_inicial = int(fecha_inicio[:4])
anio_final = int(fecha_final[:4])
tamano_contrato = anio_final - anio_inicial
return fecha_inicio, fecha_final, tamano_contrato
# Aplicar la función a la columna contrato y crear nuevas columnas
nuevas_columnas =['Contract_Star', 'Contract_End','Contract_Length(years)']
nuevo_dato = fifa['Contract'].apply(lambda x: pd.Series(extraer_contrato_informacion(x)))
for i in range(len(nuevas_columnas)):
fifa.insert(loc = fifa.columns.get_loc('Contract')+1+i, column = nuevas_columnas[i], value = nuevo_dato[i])
# MOSTRANDO LOS NOMBRES DE LAS COLUMNAS
fifa = fifa.rename(columns={'Contract':'CONTRACT'})
fifa = fifa.rename(columns={'Contract_Star':'CONTRACT_STAR'})
fifa = fifa.rename(columns={'Contract_End':'CONTRACT_END'})
fifa = fifa.rename(columns={'Contract_Length(years)':'CONTRACT_LENGTH(YEARS)'})
fifa.columns
_______________________________________________________________________________________________________
# REVISANDO LA COLUMNA POSITIONS
fifa['Positions'].dtype
# ENCONTRANDO PALABRAS ÚNICAS
fifa['Positions'].unique()
# COLUMNAS ORDENADAS EN LAS POSICIONES DEJÁNDOLAS EN SUS GRUPOS
posicion = []
for x in range(len(fifa['Positions'])):
y = sorted(fifa['Positions'][x].split(" "))
yx = ' '.join(y)
posicion.append(yx)
fifa['Positions'] = posicion
fifa['Positions'] = fifa['Positions'].astype(object)
fifa['Positions'].unique()
['CF RW, ST,', 'LW ST,', 'GK', 'CAM, CM', 'CAM LW,' ]
# MOSTRANDO LOS NOMBRES DE LAS COLUMNAS
fifa = fifa.rename(columns={'Positions':'POSITIONS'})
fifa.columns
_______________________________________________________________________________________________________
# REVISANDO LA COLUMNA HEIGHT
fifa['Height'].dtype
# ENCONTRANDO PALABRAS ÚNICAS
fifa['Height'].unique()
['166cm', '6\'2"', '164cm', '198cm', '6\'3"', '6\'5"', '5\'11"' ]
# CONVIRTIENDO LAS UNIDADES DE MEDIDAS A cm
def convertir_altura(height):
if "cm" in height:
return int(height.strip("cm"))
else:
feet, inches = height.split("'")
total_inches = int(feet)*12 + int(inches.strip('"'))
return round(total_inches * 2.54)
# SE APLICARÁ LA FUNCIÓN CONVERTIR_ALTURA A LA COLUMNA
fifa['Height'] = fifa['Height'].apply(convertir_altura)
fifa['Height'].unique()
# MOSTRANDO LOS NOMBRES DE LAS COLUMNAS
fifa = fifa.rename(columns = {'Height':'HEIGHT(CM)'})
fifa.columns
____________________________________________________________________________________________________
# SE APLICA EL MISMO CÓDIGO PARA LA COLUMNA WEIGHT
fifa = fifa.rename(columns = {'Weight':'WEIGHT(Kg)'})
fifa.columns
____________________________________________________________________________________________________
from datetime import datetime
# REVISANDO LA COLUMNA JOINED
fifa['Joined'].dtype
# ENCONTRANDO PALABRAS ÚNICAS
fifa['Joined'].unique()
['01-Jul-04', '10-Jul-18', '16-Jul-14', ..., '22-Sep-18', '28-Feb-15', '06-Mar-18']
# CONVERTIR LA FECHA A UN FORMATO AÑO-MES-DIA
fifa['Joined'] = pd.to_datetime(fifa['Joined'], format='%d-%b-%y').dt.strftime('%Y-%m-%d')
fifa['Joined']
# MOSTRANDO LOS NOMBRES DE LAS COLUMNAS
fifa = fifa.rename(columns={'Joined':'JOINED'})
fifa.columns
____________________________________________________________________________________________________
# SE APLICARÁ EL MISMO CÓDIGO EN LA COLUMNA LOAN DATE END
fifa = fifa.rename(columns={'Loan Date End':'LOAN_DATE_END'})
fifa.columns
____________________________________________________________________________________________________
# REVISANDO LA COLUMNA VALUE
fifa['Value'].dtype
# ENCONTRANDO PALABRAS ÚNICAS
fifa['Value'].unique()
# LIMPIEZA DE DATOS
import pandas as pd
def value(x):
if 'M' in x:
x = x.replace('€', '')
x = x.replace('M', '')
x = float(x[:]) * 1000000
return round(x)
elif "K" in x:
x = x.replace('€', '')
x = x.replace('K', '')
x = float(x[:]) * 1000
return round(x)
elif "€" in x:
x = x.replace('€', '')
x = float(x[:]) * 1000
return round(x)
else:
return x
fifa['Value'] = fifa['Value'].apply(value)
# MOSTRANDO LOS NOMBRES DE LAS COLUMNAS
fifa = fifa.rename(columns={'Value':'VALUE'})
fifa.columns
____________________________________________________________________________________________________
# SE APLICARÁ EL MISMO CÓDIGO EN LA COLUMNA WAGE
fifa = fifa.rename(columns={'Wage':'WAGE'})
fifa.columns
____________________________________________________________________________________________________
# SE APLICARÁ EL MISMO CÓDIGO EN LA COLUMNA RELEASE CLAUSE
fifa = fifa.rename(columns={'Release Clause':'RELEASE_CLAUSE'})
fifa.columns
____________________________________________________________________________________________________
# SE APLICARÁ EL MISMO CÓDIGO EN LA COLUMNA RELEASE CLAUSE
fifa = fifa.rename(columns={'Release Clause':'RELEASE_CLAUSE'})
fifa.columns
____________________________________________________________________________________________________
# SE ANALIZÓ QUE EN CIERTAS COLUMNAS NO HABÍAN QUE MODIFICAR CON LA LIMPIEZA ENTONCES SE PROCEDIÓ A CAMBIAR LOS NOMBRES DE LAS COLUMNAS
fifa = fifa.rename(columns={'Attacking':'ATTACKING'})
fifa = fifa.rename(columns={'Crossing':'CROSSING'})
fifa = fifa.rename(columns={'Finishing':'FINISHING'})
fifa = fifa.rename(columns={'Heading Accuracy':'HEADING_ACCURACY'})
fifa = fifa.rename(columns={'Short Passing':'SHORT_PASSING'})
fifa = fifa.rename(columns={'Volleys':'VOLLEYS'})
fifa = fifa.rename(columns={'Skill':'SKILL'})
fifa = fifa.rename(columns={'Dribbling':'DRIBBLING'})
fifa = fifa.rename(columns={'Curve':'CURVE'})
fifa = fifa.rename(columns={'FK Accuracy':'FK_ACCURACY'})
fifa = fifa.rename(columns={'Long Passing':'LONG_PASSING'})
fifa = fifa.rename(columns={'Ball Control':'BALL_CONTROL'})
fifa = fifa.rename(columns={'Movement':'MOVEMENT'})
fifa = fifa.rename(columns={'Acceleration':'ACCELERATION'})
fifa = fifa.rename(columns={'Sprint Speed':'SPRINT_SPEED'})
fifa = fifa.rename(columns={'Agility':'AGILITY'})
fifa = fifa.rename(columns={'Reactions':'REACTIONS'})
fifa = fifa.rename(columns={'Balance':'BALANCE'})
fifa = fifa.rename(columns={'Power':'POWER'})
fifa = fifa.rename(columns={'Shot Power':'SHOT_POWER'})
fifa = fifa.rename(columns={'Jumping':'JUMPING'})
fifa = fifa.rename(columns={'Stamina':'STAMINA'})
fifa = fifa.rename(columns={'Strength':'STRENGTH'})
fifa = fifa.rename(columns={'Long Shots':'LONG_SHOTS'})
fifa = fifa.rename(columns={'Mentality':'MENTALITY'})
fifa = fifa.rename(columns={'Aggression':'AGGRESSION'})
fifa = fifa.rename(columns={'Interceptions':'INTERCEPTIONS'})
fifa = fifa.rename(columns={'Positioning':'POSITIONING'})
fifa = fifa.rename(columns={'Vision':'VISION'})
fifa = fifa.rename(columns={'Penalties':'PENALTIES'})
fifa = fifa.rename(columns={'Composure':'COMPOSURE'})
fifa = fifa.rename(columns={'Defending':'DEFENDING'})
fifa = fifa.rename(columns={'Marking':'MARKING'})
fifa = fifa.rename(columns={'Standing Tackle':'STANDING_TACKLE'})
fifa = fifa.rename(columns={'Sliding Tackle':'SLIDING_TACKLE'})
fifa = fifa.rename(columns={'Goalkeeping':'GOALKEEPING'})
fifa = fifa.rename(columns={'GK Diving':'GK_DIVING'})
fifa = fifa.rename(columns={'GK Handling':'GK_HANDLING'})
fifa = fifa.rename(columns={'GK Kicking':'GK_KICKING'})
fifa = fifa.rename(columns={'GK Positioning':'GK_POSITIONING'})
fifa = fifa.rename(columns={'GK Reflexes':'GK_REFLEXES'})
fifa = fifa.rename(columns={'Total Stats':'TOTAL_STATS'})
fifa = fifa.rename(columns={'Base Stats':'BASE_STATS'})
fifa.columns
____________________________________________________________________________________________________
# REVISANDO LA COLUMNA W/F
fifa['W/F'].dtype
# ENCONTRANDO PALABRAS ÚNICAS
fifa['W/F'].unique()
# LIMPIEZA DE LOS DATOS
fifa['W/F'] = fifa['W/F'].str.replace('★','')
fifa['W/F'].unique()
____________________________________________________________________________________________________
# SE APLICA EL MISMO CÓDIGO PARA LAS COLUMNAS SM, IR
____________________________________________________________________________________________________
# REVISANDO LA COLUMNA HITS
fifa['Hits'].dtype
# ENCONTRANDO PALABRAS ÚNICAS
fifa['Hits'].unique()
# LIMPIEZA DE LOS DATOS
fifa['Hits'] = fifa['Hits'].fillna(0)
# CONVERTIR VALORES CON SUFIJO 'K' A NÚMEROS
fifa['Hits'] = fifa['Hits'].apply(lambda x: int(float(x[:-1]) * 1000) if 'K' in str(x) else int(x))
fifa['Hits'].unique()