Actividad 2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 26

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

También podría gustarte