Fundamentos pr谩cticos

1

Aplica Platzidoro en este curso y asegura el 茅xito de tu aprendizaje

2

Los fundamentos de machine learning que aprender谩s

3

Introducci贸n a Numpy

4

Introducci贸n y manipulaci贸n de datos con Pandas

5

Introducci贸n a ScikitLearn

6

Comandos b谩sicos de las librer铆as usadas en el curso (Numpy, Pandas y ScikitLearn)

Regresi贸n Lineal y Log铆stica

7

驴Qu茅 es la predicci贸n de datos?

8

Sobreajuste y subajuste en los datos

9

Regresi贸n lineal simple y regresi贸n lineal m煤ltiple

10

Regresi贸n lineal simple con Scikit-Learn: divisi贸n de los datos

11

Regresi贸n lineal simple con Scikit-Learn: creaci贸n del modelo

12

Regresi贸n log铆stica con Scikit-Learn: definici贸n y divisi贸n de datos

13

Regresi贸n log铆stica con Scikit-Learn: evaluaci贸n del modelo

14

Matriz de confusi贸n

15

PlatziDoro C谩psula 1

脕rboles de decisi贸n

16

驴Qu茅 es un 谩rbol de decisi贸n y c贸mo se divide?

17

Comprendiendo nuestro data set para la creaci贸n de un 谩rbol de decisi贸n

18

Creando un clasificador con Scikit-Learn

19

Entrenamiento del modelo de clasificaci贸n

20

Visualizaci贸n del 谩rbol de decisi贸n

K-Means

21

驴Qu茅 es K-Means?

22

Cargando el data set de Iris

23

Construcci贸n y evaluaci贸n del modelo con K-Means

24

Graficaci贸n del modelo

25

PlatziDoro C谩psula 2

Aprendizaje profundo

26

Introducci贸n al aprendizaje profundo

27

Conceptos b谩sicos de Tensor Flow

28

Red neuronal convolucional

29

Conociendo el set de datos para la creaci贸n de la red neuronal

30

Crea y entrena tu primera red neuronal convolucional con Tensor Flow

31

Evaluaci贸n de la red convolucional

32

PlatziDoro C谩psula 3

Despedida

33

Recomendaciones para analizar correctamente tu problema

34

Siguientes pasos para continuar aprendendiendo de Machine Learning

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Creando un clasificador con Scikit-Learn

18/34
Recursos

Aportes 50

Preguntas 16

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

algunas cosas que comentar que pueden ser utiles

  • cuando se hace el drop intentando eliminar algunas variables que no ser谩n de inter茅s, axis = 1 indica que estas variables son "columnas ", axis = 0 , indicar铆a que son filas.
  • las dummy variables que se mencionan ligeramente convierten las variables categ贸ricas en indicadoras como 0,1,2,鈥tc
  • cuando se completaron los valores faltantes en las variables edad y la clase del pasajero (embarked), falt贸 mencionar un comando muy util para saber en que variables se tienen valores faltantes. Se puede usar train_df.isnull.any().

Cuando se llenan los espacios con vac铆os (fillna), para el caso de datos num茅ricos se utiliza la mediana porque es una de las medidas de tendencia central que menos se afecta por los datos at铆picos.

Para el caso de los datos categ贸ricos relacionados con el embarque, se utiliza la letra S porque representa el embarque en la ciudad de South Hampton, en donde m谩s personas se unieron al viaje.

Estos datos se obtienen de un an谩lisis previo a los datos trabajados.

Tratamiento de Datos

  • Para transformar datos cualitativos a un c贸digo que entienda la m谩quina podemos usar un label encoder, se encuentra en el m贸dulo preprocessing:
from sklearn import preprocessing
label_encoder = preprocessing.LabelEncoder()
encoder_sex = label_encoder.fit_transform(train_df['Sex'])

Obtenemos as铆 un encoder para la columna Sexo (no usaremos este encoder, usaremos el m茅todo de dummies)

  • Completaremos los valores nulos de Age (con la media de edades) y Embarked (con 鈥楽鈥; embarcados en Southampton)
train_df.Age = train_df.Age.fillna(train_df.Age.median())
train_df.Embarked = train_df.Embarked.fillna('S')
  • Eliminamos la columnas que no consideramos necesarias
train_predictors = train_df.drop(['PassengerId','Survived','Name','Ticket','Cabin'], axis=1) #axis=1 se refiere a las columnas (axis=0 鈫 filas)
  • Separamos las columnas categ贸ricas de las num茅ricas:
    • Para detectar la columnas categ贸ricas analizamos la columna con dtype (debe ser igual a 鈥榦bject鈥), consideramos adem谩s que no haya mas de 10 diferentes valores (como factor de seguridad)
categorical_cols = [cname for cname in train_predictors.columns if train_predictors[cname].nunique() <10
                    and train_predictors[cname].dtype=='object']
- Para detectar la columnas num茅ricas analizamos la columna con dtype (debe ser igual a 'int64' o 'float64')
numerical_cols = [cname for cname in train_predictors if
                  train_predictors[cname].dtype in ['int64','float64']]
-  Unimos nuevamente las columnas en una sola variable pero con los datos num茅ricos separados de los categ贸ricos
my_cols = categorical_cols+numerical_cols
train_predictors = train_predictors[my_cols]
  • Usamos el m茅todo get_dummies para codificar las variables num茅ricas
dummy_encoded_train_predictors = pd.get_dummies(train_predictors)
  • Ahora tenemos nuestra data sin valores vac铆os y codificada, lista para entrenar nuestro algoritmo
  • 脡sta l铆nea: encoder_sex = label_encoder.fit_transform(data_set_train[鈥楽ex鈥橾) , transforma una etiqueta textual a un equivalente num茅rico.
  • 脡sta l铆nea: categorical_cols = [cname for cname in train_predictors.columns if
    train_predictors[cname].nunique() <10 and
    train_predictors[cname].dtype == 鈥榦bject鈥
    ]
    Encuentra las columnas que contiene informaci贸n no num茅rica.
  • 脡sta l铆nea: numerical_cols = [cname for cname in train_predictors.columns if
    train_predictors[cname].dtype in [鈥榠nt64鈥, 鈥榝loat64鈥橾
    ]
    Encuentra las columnas con datos num茅ricos.

Estoy bien? o entend铆 algo mal. Quedo a la espera de sus comentarios. gracias.

Si a alguno de ustedes no les quedo muy en claro c贸mo funciona la instrucci贸n ". get_dummies() " , en este video lo esplican muy bien.

https://www.youtube.com/watch?v=0s_1IsROgDc

Una manera mas sencilla de filtrar las columnas a mi parecer, parece un poco mas enredoso por que todo se hace con funciones y propiedades de pandas, pero les recomiendo mucho aprender ha usar esta libreria.

number_cols = df_train.select_dtypes(include = 'number').columns.tolist()

categorical_cols = ( df_train.select_dtypes(include='object').nunique() < 10 )
categorical_cols = categorical_cols[categorical_cols == True].index.tolist()
number_cols, categorical_cols
<h3>Explicacion del codigo:</h3>

Con la funcion select_dtypes puedes muestra el valor de las columnas que tengan ese tipo ( Los tipos de todas columnas se puede ver con el metodo info o con la propiedad dtypes), puedes incluir o excluir los tipos, como en ese caso solo nos interesan las columnas usamos la propiedad columns del DataFrame y lo convertimos a una lista con la funcion tolist


Para las variables categoricas es un poco mas complejo ya que la primer parte devuelve un objeto de tipo Series de pandas como indices tiene todas las columnas del tipo seleccionado y como valor es un valor booleano ( True o False ) depende de si cumple la condicion ( En ese caso, que el numero de datos unicos sea menor a 10 ) y al final solo filtro la Serie para quedarme con los valores que cumplen con la condicion ( valor True ) y como los indices son las columnas me quedo solo con los indices y lo convierto a una lista

No entend铆 realmente por qu茅 despu茅s de separar los datos categ贸ricos y los n煤mericos, a train_predictors se le asigna los mismos datos pero organizados diferente, pero sigue siendo lo mismo.

No entend铆 para que se hace el LabelEncoder en la columna Sex, pero nunca se lo utiliza.

No entiendo la utilidad de contar los valores de la columna 鈥楶class鈥 al final del video. La profesora solo lo hace y da una explicaci贸n muy vaga y ambigua al respecto. 鈥淐u谩les son las clases de este entrenamiento, c贸mo es que lo ha dividido鈥. 驴Qu茅 significa eso? 驴No se supone que esa columna ven铆a en el dataset original y no fue incluida dentro de la manipulaci贸n de los datos? Esta clase es la peor del curso hasta ahora, muy mal explicada鈥

import pandas as pd 
import matplotlib.pylot as plt
import seaborn as sns
import re
import numpy as np
from sklearn import tree
from sklearn.model_selection import train_test_split

%matplotlib inline  
sns.set()

test_df = pd.read_csv('/content/titanic-test.csv')
train_df = pd.read_csv('/content/titanic-train.csv')

train_df.head()


train_df.info()

train_df.Sex.value_counts().plot(kind='bar', color =['b', 'r'])
plt.title('Distribucion de sobrevivientes')
plt.show()


from skelearn preprocessing
label_encoder = preprocessing.LabelEcoder()
encoder_sex = label_encoder.fit_transform(train_df['sex'])
train_df.head()
train_df['Age'] = train_df['Age'].fillna(train_df['Age'].median())
train_df['Embarked'] = train_df ['Embarked'].fillna('S')

#Eliminar datos inensarios
train_predictors = train_df.drop(['PassengerId','Survived', 'Name','Tciket', 'Cabin'], axis = 1)

categorical_cols = [cname for in train_predictos.columns if 
                    train_predictors[cname].nunique() < 10 and 
                    train_predcitors[cname].dtype  == 'object'  
                                       
                    ]            

numerical_cols [cname for cname in train_predictors.columns if train_predictors[cname].dtype in ['int64', 'float64']]
my_cols = categorical_cols + numeric_cols
train_predictors = Train_predictors ['my_cols']

dummy_encoded_train_predictors = pd.get_dummies(train_predictors)
train_df ['Pclass'].value_counts()

#variable predictora
y_target = train_df ['Survived'].values
x_features_one = dummy_encoded_train_predictors

x_train, x_validation, y_train, y_validation = train_test_split(x_features_one, y_target, test_size = .25, random_state = 1)

#prediccion
tree_one = tree.DecisionTreeClassifier()
tree_one = tree_one.fit(x_features_one, y_target)

#que tan cercano predice
tree_one_accuracy = round (tree_one.score(x_features_one, y_target), 4)
print('Accuracy:  %0.4f' % (tree_one_accuracy))

from io import StringIO
from IPython.display import Image, display
import pydotplus

out = StringIO
tree.export_graphviz(tree_one, out_file=out)
graph = pydotplus.graph_from_dot_data(out.getvalue())
graph.write_png('titanic.png')```

Para saber si tenemos elementos nulos en nuestro dataset y en que columnas, usamos

trainTitanicDataset.isnull().any()

Que da como resultado:

PassengerId    False
Survived       False
Pclass         False
Name           False
Sex            False
Age             True
SibSp          False
Parch          False
Ticket         False
Fare           False
Cabin           True
Embarked        True
dtype: bool

Recordemos que la columna Cabin fue descartada con la funcion .drop, por lo que no fue necesario rellenar sus valores nulos.

Un error en el min 3:31 escribi贸 la mediana en lugar de la media

Muchas cosas en el aire鈥 Pero bueno, algo sacamos, ah铆 vamos avanzando.

Me sent铆 s煤per perdido en esta clase
Realmente creo que buscar茅 m谩s inofrmaci贸n aparte鈥
驴Alguna recomendaci贸n?

En el minuto 1:48 la profesora dice que quiere ver 鈥渜u茅 informaci贸n tenemos una vez que hacemos el encoder鈥, pero se trae el head del dataset original. Le falt贸 decir que train_df[鈥楽ex鈥橾 = encoder_sex.

Me parece ins贸lito que despu茅s de hacer el head() no se d茅 cuenta de que no hizo ese paso tan importante y que perfectamente puede confundir mucho a los estudiantes con poca pr谩ctica.

Deber铆an ser m谩s rigurosos con el contenido, y si una clase queda mal hecha (como es este caso), hacerla de nuevo, ya que es m谩s importante que sus alumnos aprendan a que ustedes ahorren recursos.

Una manera de llenar los datos faltantes de la edad, es, utilizar una nube de datos alrededor de la media, para ser m谩s preciso, una desviaci贸n est谩ndar de la media, de esta meneara nos adherimos un poco m谩s a la distribuci贸n de los datos.

mean = np.mean(train_df.append(test_df)['Age'])
    std  = np.std(train_df.append(test_df)['Age'])
    nans = dataset['Age'].isna().sum()
    
    
ramdom_age = np.random.randint(mean - std , mean + std , size=nans)
    copy = dataset['Age'].copy()
    copy[copy.isna()] = ramdom_age
    dataset['Age'] = copy
    dataset['Age'] = dataset['Age'].astype(int)


Cuando la profesora completo los datos de la edad no utiliza la media como ella lo dice, si no utiliza la mediana que no en todos los casos son iguales.

Sugiero tener m谩s cuidado con las palabras que se utilizan para explicar los conceptos. Para alguien que no maneje ciertos contenidos, una palabra puede hacer la diferencia entre comprender algo o no y esto puede ser fatal. En el minuto 5:29 la profesora dice 鈥淭odo esto se encuentra en la posici贸n 1 de nuestro dataset鈥 cuando en realidad ese par谩metro (axis) determina si estamos hablando de columnas o filas. axis=0 significa filas, axis=1 columnas.

Error en su codigo, al hacer get_dummies() solo ejecuta el metodo en la ultima columna 鈥淓mbarked鈥(lo clasifica en embarked_C,embarked_Q y embarked_S ), hagan un print para verificar.
Si quieren aplicar get_dummies a una tabla con varias columnas seria asi:
pd.get_dummies(data = table_name , columns = columns_names ), o sea

pd.get_dummies(data = train_predictors, columns = my_cols )

Que mal que cometan estos errores, confunden cuando uno no se da cuenta.

no entend铆 muy bien el paso de categorical_cols y numerical_cols

Se puede hacer exactamente lo mismo con este c贸digo:

cat_col = ['Sex','Embarked']
df_cat = pd.get_dummies(train[cat_col])
df_cat

#Concatenar dos dataframes
train_dummies = pd.concat([train_predictors, df_cat], axis=1)
train_dummies.drop(['Sex','Embarked'], axis = 1, inplace = True)
train_dummies

Algo que no me parece correcto es eliminar variables porque si. Entiendo que para facilitar el curso es mucho mejor borrar estas variables del dataframe, pero al hacerlo no se menciona que se pierde informaci贸n VALIOSA.

Para los que se quedaron con la dudas del dummy:
Lo que hace es transformar variables categ贸ricas a cero y uno pero tomando en cuanta todas las posibilidades.

  • Para el caso de Sex: Dummies me devuelve dos columnas una por cada categor铆a como esta en la siguiente imagen:
    imagen:

  • Para el caso de Embarked: Dummies me devuelve 3 columnas ya que hay 3 categor铆as como en la siguiente figura:
    imagen:

De esto es importante entender que no necesitamos todas las columnas solo necesitamos las K-1, donde K es el numero de categor铆as. Es decir, podemos eliminar una columna de cada categor铆a. Para este caso en particular quedar铆a as铆:

dummy_encoded_train_predictor = pd.get_dummies(train_predictors, columns=['Sex','Embarked'], drop_first=True )

Obtendr铆amos la siguiente tabla final:

NOTA: en la clase no lo hicieron de esta forma no sabr铆a decir porque, pero la informaci贸n la saque del siguiente video que explica bien la l贸gica de dummies video

En el minuto 3:30 dice media pero usa la mediana

otra forma de obtener las columnas categoricas y numericas:

numerical_cols = train_predictors.select_dtypes(include=['int64','float64']).columns

Dummies, lo que hace es dividir las columnas de 鈥渃ategorias鈥 que tengan un valor no numerico (como por ejemplo una letra), si revisan la tabla van a ver que tiene 3 columnas mas

Aunque la columna Pclass es de tipo entero, yo creo que deber铆a de ser una variable categ贸rica y no num茅rica

  • Los datos categ贸ricos aparecen cuando una variable se mide en una escala que solo incluye a los posibles encuestados en un n煤mero limitado de grupos. Por ejemplo, una encuesta donde se recoge informaci贸n sobre variables como el g茅nero, estado civil o afiliaci贸n pol铆tica. Fuente: Tema 1: Introducci贸n al An谩lisis de datos Categ贸ricos

  • Una variable ficticia o dummy variable es aquella para reemplazar una variable no cuantificable y que toma solo el valor 0 o 1 para indicar la ausencia o presencia de alg煤n efecto categ贸rico que se puede esperar que cambie el resultado. Fuentes: Dummy variable y Variable ficticia

Un aporte constructivo para esta clase es que cuando la profe hace imputaci贸n de datos ella dice que reemplaza los datos faltantes por la media en el caso de 鈥淎ge鈥 y no es as铆 .Estrictamente lo que ella utilizo fue la MEDIANA que es 鈥渕edian鈥 si fuese la media tendr铆a haber digitado 鈥渕ean()鈥.

Error en la codificaci贸n de la Linea de c贸digo por parte de la profesora

Compa帽eros, no entend铆 exactamente que es cname y como funciona la siguiente estructura
cname for cname in 鈥
Recuerdo que la estudie en cursos anteriores, pero no recuerdo donde
Si alguien me pudiera ayudar estar铆a muy agradecido
Saludos

Me parece que la Dra. Yesi muestra las diversas formas en las que se puede transformar los valores categoricos en numericos, de forma puntual con :

label_encoder.fit_transform(train_df['sex'])

Separando las variables en conjuntos, para convertirlos los categoricos unicamente y luego juntarlos con los numericos

categorical_cols 
numerical_cols

o usando get_dummies para hacerlo de golpe todo.

dummy_encoded_train_predictors = pd.get_dummies(train_predictors) 

Asi lo entendi.

correccion de errores

recomiendo corrijan esta clase, ya que al colocar partes del codigo donde no se explica su funcionamiento o donde nisiquiera se usa el codigo solo genera muchas confusiones.
mencionare algunos errores:

  • la maestra menciona que se usara la media para llenar valores nulos
  • en la clase no sirvio de nada hacer:
from sklearn import preprocessing
label_encoder = preprocessing.LabelEncoder()

encoder_sex = label_encoder.fit_transform(train_df['Sex'])

y

categorical_cols = [cname for cname in train_predictors.columns if
                        train_predictors[cname].nunique() < 10 and
                        train_predictors[cname].dtype == 'object'
                        ]
numerical_cols = [cname for cname in train_predictors.columns if
                train_predictors[cname].dtype in ['int64', 'float64']
                ]
print(categorical_cols, numerical_cols)

my_cols = categorical_cols + numerical_cols
train_predictors = train_predictors[my_cols]

ya que pd.dummy hizo todo el trabajo , en relaidadtodo el codigo que se necesitaba era:

train_df['Age'] = train_df['Age'].fillna(train_df['Age'].median()) # la mediana
train_df['Embarked'] = train_df['Embarked'].fillna('S')

train_predictors = train_df.drop(['PassengerId', 'Survived', 'Name', 'Ticket', 'Cabin'], axis = 1)

dummy_encoded_train_predictors = pd.get_dummies(train_predictors)
dummy_encoded_train_predictors.head()

y literalmente obtendriamos el mismo dataset preparado que el de la clase

Por si eres distraido como yo y tardaste en entender por que embarked y Age, al inicio con el describe pudimos notar que tenian un numero de non nulls menor al total de filas

Esta clase se pone cada vez m谩s buena. Muchas gracias Yesi!!!

Guiado por la secci贸n de preguntas he notado muchas personas confundidas por estas lineas de c贸digo:

Estas lineas hacen referencia a un for para recorrer las columnas, simplemente la profesora hizo
List Comprehension, este tema se toca en los cursos de python aqu铆 en Platzi es parte de la ruta de Data Science,

categorical_cols = [cname for cname in train_predictors.columns if train_predictors[cname].nunique() < 10 and train_predictors[cname].dtype == 'object'

Escoge los mejores features

Es importante realizar un an谩lisis estad铆stico para saber cuales variables independientes (features) son significativos en tu modelo, ya que en varias ocasiones muchos de ellos no aportan nada al modelo. De igual forma, es importante ver si existen correlaciones entre ellos, puesto que en ocasiones una variable podr铆a representar el comportamiento de las demas. Esto es 煤til para optimizar recursos computacionales y tiempos de entrenamiento.

TODO HASTA EL MOMENTO CON COMENTARIOS
EN ALGUNOS CASOS SI DESEA MAS INFORMACION ELIMINE COMENTARIO

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import re
import numpy as np
from sklearn import tree
from sklearn.model_selection import train_test_split

#datos prueba / entrenamiento
test_df = pd.read_csv(鈥榯itanic-test.csv鈥)
train_df = pd.read_csv(鈥榯itanic-train.csv鈥)

#Exploracion
train_df.info()
train_df.head()
train_df.dtypes

#Si desea explorar por Sexo sin grafica

train_df.Sex.value_counts()

Explore visualizacion de sobrevivientes x Sexo

train_df[train_df[鈥楽urvived鈥橾 == 1 ][鈥楽ex鈥橾.value_counts().plot(kind=鈥榖ar鈥, color=[鈥榖鈥,鈥榬鈥橾)

plt.title(鈥楧istribucion de sobrevivientes鈥)

#Para ser entendido un dato
#por la maquina, se crea un label encoder
#el modelo usara campo Sex de tipo 鈥榦bject鈥
#el cual puede ser modificado a tipo categoria

from sklearn import preprocessing
label_encoder = preprocessing.LabelEncoder()
encoder_sex = label_encoder.fit_transform(train_df[鈥楽ex鈥橾)
train_df[鈥楽ex鈥橾 = encoder_sex

#Limpiar informacion
#===================

#Manejo de nulos
train_df[鈥楢ge鈥橾 = train_df[鈥楢ge鈥橾.fillna(train_df[鈥楢ge鈥橾.median() )
train_df[鈥楨mbarked鈥橾 = train_df[鈥楨mbarked鈥橾.fillna(鈥楽鈥)

#Los campos que no se pueden predecir eliminelos
#y cree nuevo dataframe
train_predictors = train_df.drop([鈥楶assengerId鈥, 鈥楽urvived鈥, 鈥楴ame鈥, 鈥楥abin鈥橾, axis=1)

#Crear lista de columnas categoricas del dataFrame
#Condiciones unicos < 10 y tipo objeto

TENGO DUDA DE PORQUE nunique< 10 ???

categorical_cols = [cname for cname in train_predictors.columns if
train_predictors[cname].nunique() < 10 and
train_predictors[cname].dtype ==鈥榦bject鈥
]

print(categorical_cols)

-> Resultado [鈥楨mbarked鈥橾

#Si desea explorar valores posibles de Embarked

train_df.Embarked.value_counts()

#Crear lista de columnas numericas del dataFrame
#Condicion int64, float64
numerical_cols = [cname for cname in train_predictors.columns if
train_predictors[cname].dtype in [鈥榠nt64鈥,鈥榝loat64鈥橾
]
#print(numerical_cols)

-> Resultado [鈥楶class鈥, 鈥楽ex鈥, 鈥楢ge鈥, 鈥楽ibSp鈥, 鈥楶arch鈥, 鈥楩are鈥橾

pd.get_dummies(train_predictors)
estamos convirtiendo datos categ贸rigos en datos num茅ricos

Me siento iluminado al ver el curso por segunda vez 馃槃

Para saber cual es la cantidad de nulos que se tienen con pandas es:

df.isna().sum()

El resultado indicar谩 la cantidad de nulos por columna

La definici贸n de las variables en el data set del titanic:
https://www.kaggle.com/c/titanic/data

Recomiendo leer esto para entender mejor preprocessing.LabelEncoder

Dummies, lo que hace es dividir las columnas de 鈥渃ategorias鈥 que tengan un valor no numerico (como por ejemplo una letra), si revisan la tabla van a ver que tienen nuevas columnas.
Esto es util porque reemplaza lo de usar 鈥渆ncoders鈥 todo el rato

Algunos puntos que es importante saber:
-label_encoder

Codifica etiquetas de una caracter铆stica categ贸rica en valores num茅ricos entre 0 y el n煤mero de clases menos 1

El metodo fit lo entrena (crea un mapeado entre las etiquetas y los numeros dichos anteriormente

El metodo transform, transforma las etiquetas que se incluyan como argumento

Fuentes:
https://www.interactivechaos.com/python/function/labelencoder#:~:text=LabelEncoder codifica etiquetas de una,n煤mero de clases menos 1.&text=El 煤nico atributo de esta,cada etiqueta en el array).

Las variables dummies, podr铆amos decir, que separa ciertas etiquetas o columnas de acuerda a la variedad de sus datos

Ser铆a bueno cursos donde expliquen las librer铆as mas usadas, ya s茅 que existe la documentaci贸n y el curso de Pandas pero mejorar铆a la comprensi贸n de los estudiantes si ya tenemos experiencias usandos est谩s librer铆as

Tengo una observaci贸n, al utilizar las siguientes lineas de codigo:

from sklearn import preprocessing
label_encoder = preprocessing.LabelEncoder()
encoder_sex = label_encoder.fit_transform(train_df[鈥楽ex鈥橾)
encoder_sex

no se le asigno al DataFrame train_df original, es decir no se guardo el cambio, por lo que la columna train_df[鈥楽ex鈥橾 no surti贸 efectos.