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-DI

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()