<jupyter_start><jupyter_text>Aplicando Python para un caso de NetflixInvestigando películas de Netflix y estrellas invitadas en la oficinaAplique las habilidades fundamentales de Python que aprendió en Introducción a Python y Python intermedio manipulando y visualizando datos de películas y TV.  Descripción del proyecto En este proyecto, aplicará las habilidades que aprendió en Introducción a Python y Python intermedio para resolver un problema de ciencia de datos del mundo real. Pulsarás "ver próximo episodio" para descubrir si las películas de Netflix se acortan con el tiempo y qué estrellas invitadas aparecen en el episodio más popular de "The Office", utilizando de todo, desde listas y bucles hasta pandas y matplotlib.También obtendrá experiencia en una habilidad esencial en ciencia de datos: el análisis exploratorio de datos. Esto le permitirá realizar tareas críticas como manipular datos sin procesar y sacar conclusiones de los gráficos que cree de los datos. ¡Presiona play para comenzar! Proyecto guiadoExplore un conjunto de datos de películas de Netflix del mundo real usando todo, desde listas y bucles hasta pandas y matplotlib. ¡Presiona play para comenzar!  1. Cargar los datos de su amigo en un diccionario Netflix! Lo que comenzó en 1997 como un servicio de alquiler de DVD se ha convertido en la mayor empresa de entretenimiento / medios por [capitalización de mercado](https://www.marketwatch.com/story/netflix-shares-close-up-8-for-yet-another-record-high-2020-07-10), con más de 200 millones de suscriptores en [enero de 2021](https://www.cbsnews.com/news/netflix-tops-200-million-subscribers-but-faces-growing-challenge-from-disney-plus/).Dada la gran cantidad de películas y series disponibles en la plataforma, es una oportunidad perfecta para flexibilizar nuestras habilidades de manipulación de datos y sumergirnos en la industria del entretenimiento. Nuestro amigo también ha estado mejorando sus habilidades con Python y ha probado por primera vez un archivo CSV que contiene datos de Netflix. Para su primera orden del día, han estado realizando algunos análisis y creen que la duración promedio de las películas ha ido disminuyendo.Como prueba de ello, nos han facilitado la siguiente información. Para los años de 2011 a 2020, la duración promedio de las películas es 103, 101, 99, 100, 100, 95, 95, 96, 93 y 90, respectivamente.Si vamos a trabajar con estos datos, sabemos que un buen lugar para comenzar sería probablemente comenzar a trabajar con pandas. Pero primero, necesitaremos crear un DataFrame desde cero. Comencemos creando un objeto Python cubierto en el curso hasta ahora: ¡un diccionario!<jupyter_code># Crear la lista con los años(years) y las duraciones(durations)
years = ...
durations = ...

# Crear un diccionario con las dos listas
movie_dict = ...

# imprima el diccionario
movie_dict<jupyter_output><empty_output><jupyter_text>2. Crear un DataFrame desde un diccionario Para convertir nuestro diccionario `movie_dict` a un DataFrame de pandas, primero necesitaremos importar la biblioteca con su alias habitual. También queremos inspeccionar nuestro DataFrame para asegurarnos de que se creó correctamente. Realicemos estos pasos ahora.<jupyter_code># Importar pandas bajo su alias habitual
...

# Crear el dataframe desde el diccionario
durations_df = ...

# Imprima el DataFrame
...<jupyter_output><empty_output><jupyter_text>3. Una inspección visual de nuestros datos Muy bien, ahora tenemos un DataFrame de pandas, la forma más común de trabajar con datos tabulares en Python. Ahora volvamos a la tarea que tenemos entre manos. Queremos dar seguimiento a la afirmación de nuestro amigo de que la duración de las películas ha ido disminuyendo con el tiempo. Un buen lugar para comenzar será la visualización de los datos.Dado que los datos son continuos, una gráfica lineal sería una buena opción, con las fechas representadas a lo largo del eje `x` y la duración promedio en minutos a lo largo del eje `y`. Esto nos permitirá detectar fácilmente cualquier tendencia en la duración de las películas. Hay muchas formas de visualizar datos en Python, pero `matploblib.pyplot` es uno de los paquetes más comunes para hacerlo.**Nota:** Para que podamos probar correctamente el gráfico, deberá inicializar un objeto Figura `matplotlib.pyplot`, que ya hemos proporcionado en la celda a continuación. Puede continuar creando su figura como aprendió.<jupyter_code># Importar matplotlib.pyplot bajo su alias usual y cree una figura
...
fig = plt.figure()

# Dibuje un gráfico de linea con release_years y durations
...

# Crea un título
...

# Muestra el gráfico
...<jupyter_output><empty_output><jupyter_text>4. Cargando el resto de los datos desde un CSV Bueno, parece que hay algo en la idea de que la duración de las películas ha disminuido en los últimos diez años. Pero equipados solo con las agregaciones de nuestros amigos, estamos limitados en las exploraciones adicionales que podemos realizar. Hay algunas preguntas sobre esta tendencia que actualmente no podemos responder, que incluyen:1. ¿Cómo se verá esta tendencia durante un período de tiempo más largo?1. ¿Es esto explicable por algo como el género de entretenimiento?Al pedirle a nuestro amigo el CSV original que utilizaron para realizar sus análisis, con mucho gusto lo complacen y lo envían. Ahora tenemos acceso al archivo CSV, disponible en la ruta "datasets / netflix_data.csv". Creemos otro DataFrame, esta vez con todos los datos. Dada la longitud de los datos de nuestro amigo, imprimir todo el DataFrame probablemente no sea una buena idea, por lo que lo inspeccionaremos imprimiendo solo las primeras cinco filas.<jupyter_code># Leer el CSV como un DataFrame
netflix_df = ...

# Imprima las primeras 5 filas del DataFrame
...<jupyter_output><empty_output><jupyter_text>5. ¡Filtremos por peliculas! ¡Bien, tenemos nuestros datos! Ahora podemos sumergirnos y empezar a ver la duración de las películas.¿O podemos? Mirando las primeras cinco filas de nuestro nuevo DataFrame, notamos un tipo de columna. Al escanear la columna, está claro que también hay programas de televisión en el conjunto de datos. Además, la columna de duración que planeamos usar parece representar diferentes valores dependiendo de si la fila es una película o un programa (quizás la cantidad de minutos versus la cantidad de temporadas).Afortunadamente, un DataFrame nos permite filtrar datos rápidamente y podemos seleccionar filas donde el tipo es Película. Ya que estamos en eso, no necesitamos información de todas las columnas, así que creemos un nuevo DataFrame netflix_movies que contenga solo el título, el país, el género, el año de lanzamiento y la duración.¡Pongamos en práctica nuestras habilidades de subconjunto de datos!<jupyter_code># Subconjunto del DataFrame por tipo de Película("Movie")
netflix_df_movies_only = ...

# Seleccionemos solamente las columnas de interés
netflix_movies_col_subset = ...

# Imprimite las primeras 5 filas del nuevo DataFrame
...<jupyter_output><empty_output><jupyter_text>6. Pintate un gráfico de dispersión (Scatterplot) Bien, ahora estamos llegando a alguna parte. Hemos leído los datos sin procesar, las filas seleccionadas de películas y hemos limitado nuestro DataFrame a nuestras columnas de interés. Intentemos visualizar los datos nuevamente para inspeccionarlos durante un período de tiempo más largo.Esta vez, ya no trabajamos con agregados, sino con películas individuales. Un diagrama de líneas ya no es una buena opción para nuestros datos, así que intentemos un diagrama de dispersión en su lugar. Nuevamente trazaremos el año de lanzamiento en el eje x y la duración de la película en el eje y._Nota: Aunque no se ha enseñado en el curso, le proporcionamos el código `fig = plt.figure (figsize = (12,8))` para aumentar el tamaño del gráfico (para ayudarlo a ver los resultados), así como para ayudar con pruebas. Para obtener más información sobre cómo crear o trabajar con una figura de matplotlib, consulte la [documentación](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.figure.html)._<jupyter_code># Crea un gráfico e incrementa su tamaño
fig = plt.figure(figsize=(12,8))

# Create un gráfico de dispersión de la duración vs el año
...

# Create un título
...

# Mostrá el gráfico
...<jupyter_output><empty_output><jupyter_text>7. Profundicemos Esto ya es mucho más informativo que la trama simple que creamos cuando nuestro amigo nos dio algunos datos por primera vez. También podemos ver que, si bien las películas más nuevas están sobrerrepresentadas en la plataforma, se han lanzado muchas películas cortas en las últimas dos décadas.Tras una inspección más profunda, algo más está sucediendo. ¡Algunas de estas películas duran menos de una hora! Filtremos nuestro DataFrame para películas con una duración inferior a 60 minutos y veamos los géneros. Esto podría darnos una idea de lo que está arrastrando el promedio.<jupyter_code># Filtrar por duraciones inferiores a 60 minutos
short_movies = ...

# Imprime las primeras 20 filas de short_movies
...<jupyter_output><empty_output><jupyter_text>8. Marcando películas que no son de largometraje ¡Interesante! Parece que muchas de las películas que duran menos de 60 minutos pertenecen a géneros como "Niños", "Stand-Up" y "Documentales". Este es un resultado lógico, ya que este tipo de películas a menudo duran menos de 90 minutos en un éxito de taquilla de Hollywood.Podríamos eliminar estas filas de nuestro DataFrame y trazar los valores nuevamente. Pero otra forma interesante de explorar el efecto de estos géneros en nuestros datos sería trazarlos, pero marcarlos con un color diferente.En Python, hay muchas formas de hacer esto, pero una forma divertida podría ser usar un bucle(Loop) para generar una lista de colores basada en el contenido de la columna de género. Al igual que hicimos en Intermediate Python, podemos pasar esta lista a nuestra función de trazado en un paso posterior para colorear todos los géneros no típicos en un color diferente.Nota: Aunque estamos usando los colores básicos de rojo, azul, verde y negro, matplotlib tiene muchos colores con nombre que puede usar al crear gráficos. Para obtener más información, puede consultar la documentación [aquí](https://matplotlib.org/stable/gallery/color/named_colors.html).<jupyter_code># Definite una lista vacía
colors = ...

# Iterar sobre las filas de netflix_movies_col_subset
for ..., ... in ... :
    if ... :
        ...
    elif ... :
        ...
    elif ... :
        ...
    else:
        ...
        
# Inspeccione los primeros 10 valores de su lista       
...<jupyter_output><empty_output><jupyter_text>9. ¡Grafiquemos con color! ¡Bucle encantador! Ahora tenemos una lista de colores que podemos pasar a nuestro diagrama de dispersión, lo que debería permitirnos inspeccionar visualmente si estos géneros podrían ser responsables de la disminución en la duración promedio de las películas.Esta vez, también arreglaremos nuestra trama con algunas etiquetas de eje adicionales y un nuevo tema con plt.style.use (). Este último no se enseña en Python intermedio, pero puede ser una forma divertida de agregar un toque visual a una trama básica de matplotlib. ¡Puede encontrar más información sobre cómo personalizar el estilo de su parcela [aquí](https://matplotlib.org/stable/tutorials/introductory/customizing.html)!<jupyter_code># Ajusta el estilo del gráfico e inicializa una nueva gráfica
plt.style.use('fivethirtyeight')
fig = plt.figure(figsize=(12,8))

# Create un gráfico de dispersión de la duración vs el release_year
...

# Crea un título y dale nombre a los ejes
...
...
...

# Muestra el gráfico
...<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.04982876712328767, 'fraction_numerical': 0.00761986301369863, 'mean_word_length': 4.759861932938856, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 37, 'https://': 5, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '640297', 'license': 'MIT', 'n_tokens_mistral': 3728, 'n_tokens_neox': 3702, 'n_words': 1614, 'path': 'introduccion-python/.ipynb_checkpoints/Python Aplicado-checkpoint.ipynb', 'repo_name': 'JoseCuevasM/introduccion-machine-learning', 'size': '11680'}