1
ACTIVIDAD
Actividad 2 informe de extracción de fuentes, pipeline y estrategia
Cristian Ramos Moreno
Facultad de Ingeniería de Sistemas, Fundación Universitaria Compensar
Técnicas de extracción y almacenamiento de datos masivos
2023
2
ACTIVIDAD
Tabla de contenido
Informe creación y extracción de las fuentes ...................................................................... 3
Api TMDB. ..................................................................................................................... 3
Caso de estudio actividad.................................................................................................... 8
Diseño y construcción de pipeline .................................................................................. 8
Diagrama del diseño de pipeline ................................................................................... 13
Url del pipeline implementado...................................................................................... 13
Ficha técnica o diccionario de datos ............................................................................. 14
Graficas de frecuencias por año y tipo .......................................................................... 17
Estrategia de adquisición de contenidos ........................................................................... 21
Desarrollo de la estrategia ............................................................................................. 21
Conclusión ........................................................................................................................ 25
Referencias ........................................................................................................................ 26
3
ACTIVIDAD
Informe creación y extracción de las fuentes
Api TMDB.
Creación de cuenta en TMDB y Api Key.
Se creo la cuenta junto con su confirmación por correo y la solicitud de la api key y el
token.
Creación de la blog storage en Azure.
4
ACTIVIDAD
Se creo la cuenta de azure en modo estudiantil adicionalmente de la creación del servicio
de Azure blog
Se creo el grupo y los contenedores:
5
ACTIVIDAD
Se carga el archivo “netflix_titles.csv”.
6
ACTIVIDAD
Creación de Azure DataBase for PostgreSQL y cargue de la base “moviedb”
Se crea el servidor de PostgreSQL Server
Se realiza la conexión en el servidor y el cargue del archivo “moviedb.sql”
7
ACTIVIDAD
8
ACTIVIDAD
Caso de estudio actividad
Usted es un Ingeniero de Datos trabajando para una empresa que maneja Streaming de
películas y series.
Se le pide que diseñe y construya un Pipeline usando Python, que tome información de
diversas fuentes: la base de datos TMDB (The Movie DataBase), una base de datos de un
RDBMS (Postgresql) que contiene los títulos disponibles en DisneyPlus y AmazonPrimeVideo y
un archivo texto en Azure Object Storage que contiene los títulos disponibles en Netflix. Dicha
información debe ser extraída de las fuentes y luego convertida a dataframes de la librería
pandas.
Diseño y construcción de pipeline
Se diseña y construye el pipeline de acuerdo con la solución que se requiere y se realizan
las pruebas en Google Colab y de manera local, se adjunta el código Python.
Pipeline API TMDB
Se realiza el pipeline con las librería de pandas y se realiza una correcta ejecución con el
requerimiento propuesto, se adjunta evidencia de manera local y en Google Colab.
#Importar de las librerias necesarias
import pandas as pd
import requests
#Definicion de la URL de la API y los parámetros de la solicitud
url = 'https://api.themoviedb.org/3/movie/top_rated'
#clave de la api creada propiamente desde la cuenta
params = {'api_key': '8c57ef8387976dc1c6b0ca3f8c3858cb', 'page': 1}
#Definicion de una lista vacía para almacenar los datos
data = []
#se realiza la solicitud get para la API y poder procesar la respuesta
#adicionalmente se realiza un limite de 10000 registros en un rango de 500 por
pagina
for i in range(500):
response = requests.get(url, params=params)
json_data = response.json()
9
ACTIVIDAD
data += json_data['results']
params['page'] += 1
if len(data) >= 10000:
break
#se convierte los datos en un dataframe de la libreria Pandas
df = pd.DataFrame(data)
df.to_csv('top_rated_movies.csv', index=False)
Imagen creación del archivo con el consumo de la API de manera local
Pipeline BD moviedb y creación de archivos .csv
# importacion de las librerias
import pandas as pd
import psycopg2
# Establecer la conexión con la base de datos
conn = psycopg2.connect(
host = 'peliculaspgdata.postgres.database.azure.com',
database = "moviedb",
user = "cramosm@peliculaspgdata",
password = "UsuarioP123",
port = 5432
10
ACTIVIDAD
# Consulta SQL para obtener los datos de la tabla
query_disney = "SELECT * FROM public.disneyplus_movie"
query_amazon = "SELECT * FROM public.amazon_movie"
# Leer los datos en un dataframe utilizando Pandas
dfDisney = pd.read_sql_query(query_disney, conn)
dfAmazon = pd.read_sql_query(query_amazon, conn)
#Creacion de archivos csv con el resultado de la consulta
dfDisney.to_csv("disneyplus_movie.csv", index=False, encoding='utf-8')
dfAmazon.to_csv("amazon_movie.csv", index=False, encoding='utf-8')
# Cerrar la conexión con la base de datos
conn.close()
Imagen ejecución del pipilne de manera local
11
ACTIVIDAD
Pipeline extracción de archivo en Azure Storage
#importancion de las librerias necesarias
from azure.storage.blob import BlobServiceClient
import pandas as pd
#definicion de la cadena de conexion junto con el contenedor y nombre del archivo
generados en azure
connection_string =
'DefaultEndpointsProtocol=https;AccountName=almacenamientopeliculas;AccountKey=jM
hxWSC+7JpRmhj1W1wt+dR8OgZfgnHFYwEhrMqclno7yXxG+TRfh5+so+e9CBlPizIr46DilS4C+ASt7cP
j2A==;EndpointSuffix=core.windows.net'
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
container_client = blob_service_client.get_container_client('contenedor')
blob_client = container_client.get_blob_client('netflix_titles.csv')
#descarga el archivo .csv y convierte los datos en un data frame de Pandas
with blob_client as my_blob:
data = my_blob.download_blob().content_as_text()
df = pd.read_csv(data)
df.to_csv('netflix_titles.csv', encoding='utf-8', index=False)
12
ACTIVIDAD
Imagen ejecución pipeline
Se realiza la correcta ejecución del pipeline con el ingreso a las diferentes fuentes y su
debido extracción, así como la lectura del dataframe y las consultas necesarias que se
propusieron.
13
ACTIVIDAD
Diagrama del diseño de pipeline
Se realizo el diagrama del diseño del pipeline de acuerdo con el requerimiento del caso
de estudio.
Url del pipeline implementado
https://colab.research.google.com/drive/1GR30CVXT_NBLW1asBEOvSOJj7RGoGs16?usp=sharing
14
ACTIVIDAD
Ficha técnica o diccionario de datos
Archivo “Top_Rated_Movies.csv”
CAMPO TAMAÑO TIPO DE DESCRIPCIÓN
DATO
adult 3 Carácter Clasificación de contenido
para adultos
backdrop_path 40 Numérico Caratula de la imagen
genre_ids 12 Numérico Identificación del grupo
género
id 12 Numérico Identificación de la película
original_lenguage 20 Numérico Lenguaje original de la
película
original_title 28 Carácter Titulo Original
overview 40 Carácter descripción general de la
película
popularity 15 Carácter Descripción actual de la
popularidad de la película
poster_path 15 Carácter descripción del cartel de
lanzamiento de la película
release_date 20 Tiempo Fecha de lanzamiento
title 50 Carácter Título de lanzamiento
video 50 Carácter Url del video promocional
vote_average 50 Numérico Número promedio de votos
vote_count 50 Numérico Contador total de votos
Archivo “disneyplus_movie.csv”
CAMPO TAMAÑO TIPO DE DESCRIPCIÓN
DATO
show_id 250 Alfanumérico Identificación de la película
type 250 Alfanumérico Descripción del género de la
película
title 250 Alfanumérico Título de la película
director 250 Alfanumérico Nombre del director de la
película
cast 250 Alfanumérico Campo dummy
country 250 Alfanumérico País de la película
date_added 250 Alfanumérico Fecha del cargue de la
película
15
ACTIVIDAD
release_year 250 Alfanumérico Fecha de lanzamiento de la
película
rating 250 Alfanumérico Popularidad de la película
duration 250 Alfanumérico Duración en segundos de la
película
listed_in 250 Alfanumérico Genero del listo de la
película
description 250 Alfanumérico descripción de la película
Archivo “amazon_movie.csv”
CAMPO TAMAÑO TIPO DE DESCRIPCIÓN
DATO
show_id 250 Alfanumérico Identificación de la película
type 250 Alfanumérico Descripción del género de la
película
title 250 Alfanumérico Título de la película
director 250 Alfanumérico Nombre del director de la
película
cast 250 Alfanumérico Campo dummy
country 250 Alfanumérico País de la película
date_added 250 Alfanumérico Fecha del cargue de la
película
release_year 250 Alfanumérico Fecha de lanzamiento de la
película
rating 250 Alfanumérico Popularidad de la película
duration 250 Alfanumérico Duración en segundos de la
película
listed_in 250 Alfanumérico Genero del listo de la
película
description 250 Alfanumérico descripción de la película
Archivo “netflix_titles.csv”
CAMPO TAMAÑO TIPO DE DESCRIPCIÓN
DATO
show_id 250 Alfanumérico Identificación de la película
type 250 Alfanumérico Descripción del género de la
película
title 250 Alfanumérico Título de la película
director 250 Alfanumérico Nombre del director de la
película
16
ACTIVIDAD
cast 250 Alfanumérico Campo dummy
country 250 Alfanumérico País de la película
date_added 250 Alfanumérico Fecha del cargue de la
película
release_year 250 Alfanumérico Fecha de lanzamiento de la
película
rating 250 Alfanumérico Popularidad de la película
duration 250 Alfanumérico Duración en segundos de la
película
listed_in 250 Alfanumérico Genero del listo de la
película
description 250 Alfanumérico descripción de la película
Ejecución del pipeline con la estructura de cada fuente
17
ACTIVIDAD
Graficas de frecuencias por año y tipo
Gráficas títulos Amazon
Gráficas títulos Disney
18
ACTIVIDAD
Gráficas títulos Netflix
Pipeline gráficas usando librería “matplotlib”
import pandas as pd
from azure.storage.blob import BlobServiceClient
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
#lectura de columnas y conteos de las fuentes
lecturaAmazon = pd.read_csv('amazon_movie.csv', sep=',')
lecturaDisney = pd.read_csv('disneyplus_movie.csv', sep=',')
lecturaNetflix = pd.read_csv('netflix_titles.csv', sep=',')
lecturaApi = pd.read_csv('top_rated_movies.csv', sep=',')
conteoAmazon = lecturaAmazon.count()
conteoDisney = lecturaDisney.count()
conteoNetflix = lecturaNetflix.count()
conteoApi = lecturaApi.count()
#Estructura Amazon
print("Estructura de columnas amazon_movie.csv:")
print('columnas: ', list(lecturaAmazon.keys()))
print("Conteo de registros: ", + conteoAmazon)
#Estructura Disney
print("Estructura de columnas disneyplus_movie.csv:")
print('columnas: ', list(lecturaDisney.keys()))
print("Conteo de registros: ", + conteoDisney)
#Estructura Amazon
19
ACTIVIDAD
print("Estructura de columnas netflix_titles.csv:")
print('columnas: ', list(lecturaNetflix.keys()))
print("Conteo de registros: ", + conteoNetflix)
#Estructura Amazon
print("Estructura de columnas top_rated_movies.csv:")
print('columnas: ', list(lecturaApi.keys()))
print("Conteo de registros: ", + conteoApi)
#Se lee el archivo de Amazon para representar grafica de secuencias por release
de los contenidos
peliculasAmazon = pd.read_csv('amazon_movie.csv', sep=',')
#print('columnas: ', list(peliculasAmazon.keys()))
# las graficas se dividen en dos para representar las tendencias por año de el
tipo de contenido de Amazon
y_fechaAmazon = peliculasAmazon['release_year']
x_tipo1Amazon = peliculasAmazon['type'] == 'Movie'
x_tipo2Amazon = peliculasAmazon['type'] == 'TV Show'
plt.plot(x_tipo1Amazon,y_fechaAmazon)
plt.title('Grafica de frecuencias Amazon por Movie')
plt.grid()
plt.show()
plt.plot(x_tipo2Amazon,y_fechaAmazon)
plt.title('Grafica de frecuencias Amazon por TV Show')
plt.grid()
plt.show()
#Se lee el archivo de DisneyPlus para representar grafica de secuencias por
release de los contenidos
peliculasDisney = pd.read_csv('disneyplus_movie.csv', sep=',')
separar_fecha = peliculasDisney["date_added"].str.split(expand=True)
separar_fecha.columns = ['Mes', 'Dia', 'Year']
#print('columnas: ', list(peliculasDisney.keys()))
nuevoDataFrame = pd.concat([peliculasDisney, separar_fecha], axis=1)
#print('columnas: ', list(nuevoDataFrame.keys()))
#print(nuevoDataFrame.head(10))
nuevoDataFrame.to_csv('DisneyArreglo.csv', index=False, encoding='utf-8')
nuevoDataFrame = pd.read_csv('DisneyArreglo.csv', sep=',')
# las graficas se dividen en dos para representar las tendencias por año de el
tipo de contenido de Amazon
20
ACTIVIDAD
y_fechaDisney = nuevoDataFrame['Year']
x_tipo1Disney = nuevoDataFrame['type'] == 'Movie'
x_tipo2Disney = nuevoDataFrame['type'] == 'TV Show'
plt.plot(x_tipo1Disney,y_fechaDisney, 'ro')
plt.title('Grafica de frecuencias Disney por Movie')
plt.grid()
plt.show()
plt.plot(x_tipo2Disney,y_fechaDisney)
plt.title('Grafica de frecuencias Disney por TV Show')
plt.grid()
#Se lee el archivo de Netflix para representar grafica de secuencias por release
de los contenidos
peliculasNetflix = pd.read_csv('netflix_titles.csv', sep=',')
#print('columnas: ', list(peliculasAmazon.keys()))
# las graficas se dividen en dos para representar las tendencias por año de el
tipo de contenido de Disney
y_fechaAmazon = peliculasNetflix['release_year']
x_tipo1Amazon = peliculasNetflix['type'] == 'Movie'
x_tipo2Amazon = peliculasNetflix['type'] == 'TV Show'
plt.plot(x_tipo1Amazon,y_fechaAmazon)
plt.title('Grafica de frecuencias Netflix por Movie')
plt.grid()
plt.show()
plt.plot(x_tipo2Amazon,y_fechaAmazon)
plt.title('Grafica de frecuencias Netflix por TV Show')
plt.grid()
plt.show()
21
ACTIVIDAD
Estrategia de adquisición de contenidos
Desarrollo de la estrategia
De acuerdo con el modelo STAR la siguiente estrategia que se presentará se dividirá en
tres ejecuciones, teniendo en cuenta la respuesta a las interrogantes presentadas del
requerimiento.
Análisis de datos:
Netflix tiene acceso a grandes cantidades de datos sobre el comportamiento de sus
usuarios, lo que puede ayudar a la compañía a entender qué tipos de contenido son más
populares y cuáles generan mayor interés entre sus usuarios. Utilizando esta información, Netflix
podría identificar qué contenidos son más valiosos para su audiencia y enfocar sus esfuerzos en
adquirirlos.
Por consiguiente, se da respuesta a las siguientes interrogantes utilizando los métodos de
extracción y análisis de la data por medio del lenguaje de programación Python (pipeline):
¿Cuáles son las 10 películas mejor calificadas (vote_average) de la historia?
De acuerdo con el análisis y las consultas del cruce de las fuentes podemos ver que esas
son las 10 películas mejor calificadas.
22
ACTIVIDAD
¿Cuáles son las 10 películas con mayor revenue cuyo release_date sea mayor a 2010-01-
01?
Se puede observar que esas son las peliculas con mayor ganancia, popularidad que se
estrenaton despues del año 2010.
¿Cuáles son las 10 películas colombianas con mayor vote_average?
En este caso se puede observar que la relación entre las diferentes fuentes una
colaboración de Colombia junto con otros países como España para la realización de contenido.
¿Cuáles son las 10 más rentables películas de la historia definiendo rentabilidad como
revenue/Budget?
23
ACTIVIDAD
En este caso no se pudo observar el campo “renueve” sin embargo podemos hacer un
analizar similar coon el campo popularidad debido a que ambos se pueden complementar.
¿Cuáles son los contenidos compartidos por Netflix, Amazon y Disney?
Para este caso realizamos un cruce de la data entre las diferentes fuentes y creamos un archivo
.csv que se llama “contenidos_compartidos.csv”, el contenido de ese archivo es el siguiente:
contenidos_compar
tidos.csv
¿Cuáles son los contenidos que tiene Amazon o Disney y no tiene Netflix?
En este caso se tomo el arreglo del archivo anterior modificacndo loss que no cruzaban y
se obtune el resultado junto con la id de ese contenido.
¿Cuáles son los contenidos con el menor “Budget” pero con el mayor vote_average que
deba adquirir Netflix?
24
ACTIVIDAD
En este caso no se pudo cruzar el campo “Budget” pero el campo “vote_average” se
ordeno con lo menores de forma descendente.
Desarrollar relaciones con los creadores de contenido
Analizando los datos y teniendo en cuenta la respuesta a las interrogantes lo más
recomendable es que Netflix establezca relaciones con los creadores de contenido, ya sea a
través de acuerdos de producción o mediante el incentivo económico a nuevas creaciones de
contenido que son las que mantienen a los usuarios en constante pago de membresía debido al
estreno semanal de nuevos capítulos, al hacerlo Netflix podría obtener información sobre las
tendencias en el desarrollo de contenidos y conocer qué proyectos se encuentran en desarrollo;
también, podría trabajar junto a los creadores para adquirir derechos exclusivos de contenidos
que puedan resultar atractivos para su audiencia de acuerdo con lo que se analizó y nos arrojó la
data y que se propone realizar secuelas de los contenidos con mayor ganancia y popularidad.
Diversificar los tipos de contenidos
Es necesario mencionar que la plataforma Netflix fue de las primeras de contenido
streaming hace más de una década, aunque Netflix se ha ganado una reputación por su amplia
selección de películas y series de televisión, la compañía podría expandir su catálogo para incluir
otros tipos de contenidos, como documentales, programas infantiles, conciertos en vivo y
deportes en vivo; por consiguiente, Netflix podría atraer a una audiencia más amplia y aumentar
su valor como plataforma de entretenimiento además de no agregar publicidad para tratar de
obtener un poco más de ganancias ya que puede encontrarse molesto para el usuario promedio.
25
ACTIVIDAD
Conclusión
El objetivo guía del presente trabajo era realizar el laboratorio de configuración de las
fuentes y hacerlas funcionar de acuerdo con las instrucciones dadas, analizar la data de dichas
fuentes, importancia, creación y uso de “pipeline” como una herramienta para aplicar las técnicas
de extracción de datos, almacenamiento de datos y seguridad de los datos.
Adicionalmente, la realización del caso problema y la temática de realizar un reporte y
diseñar una estrategia para proponer a una compañía real, proporcionó la practica y ampliación
de conocimiento sobre Python y sus librerías como pandas que se utilizaron en este ejercicio que
también se aplicaron al conocimiento propio y la realización del código fuente con mi propio
análisis e interpretación.
26
ACTIVIDAD
Referencias
[1] Klippa. (04 de Agosto de 2022). Klippa.com. Obtenido de
https://www.klippa.com/es/blog/informativo/extraccion-
datos/#:~:text=Extraer%20los%20datos%20permite%20procesarlos,proceso%20de%20to
ma%20de%20decisiones.
[2] Naeem, T. (23 de Junio de 2020). Astera. Obtenido de
https://www.astera.com/es/type/blog/database-extraction/
[3] PowerData. (2022). PowerData.es. Obtenido de https://www.powerdata.es/seguridad-de-
datos