No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Transformación de datos de transacciones

11/25
Recursos

Aportes 15

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Me gustaría que el curso esté enfocado en un proyecto y una solución, creo que el profesor explica muy bien peero no veo una idea clara, se que él la sabe, sabe cuál es el objetivo pero yo no lo sé y solo me guío de lo que hace el profesor y no me da la libertad a mi de ir hacer una solución de una manera distinta.

Tal vez esto sirva para aclarar un poco,

Al final lo que hizo el profesor fue construir 3 dimensiones:

  • Una dimension es algo que describe o da contexto a una metrica, normalmente responde el ‘quien?’, ‘donde?’, ‘como?’, ‘cuando?’ de un ‘que?’
  • Por ejemplo, al hacer un pedido por amazon, puede haber una tabla de hechos (fact table) llamada ordenes, que va a tener metricas (precio, cantidades), para dar contexto a esta orden se tendrian estas dimensiones:
  • dimension cliente: (dim_customer) el usuario que compro esta orden, con informacion adicional, como su email, hace cuanto es cliente, el pais donde vive, etc.
  • dimension almacen: (dim_warehouse) el almacen desde donde se va a despachar el producto, su ubicacion, etc.
  • dimension vendedor: (dim_seller) quien es la persona que vende el producto en amazon, con datos adicionales sobre el.

NORMALMENTE estos datos vienen de una aplicacion, por ejemplo puede ser SAP, NetSuite, Stripe, Salesforce, y ya tienen sus primary keys y foreign keys creadas, por lo tanto ‘no seria necesario’ construir los ids de cada dimension.

En esta clase el profe Carlos constuye cada dimension a partir de los mismos atributos de la dimension,

  • para dim quantity crea un id unico apartir del quantity_name que es un string, porque nativamente no tenia identificadores unicos.
  • para dim flow crea un id unico a partir del ‘flow’, ya que tampoco tenia un identificador unico.

Code

df_trades_final = df_trades_clean[['id_trades', 'trade_usd', 'kg', 'quantity', 'id_code', 'id_country', 'id_quantity', 'id_flow', 'id_year']]
df_countries = df_countries[['id_country', 'alpha-3', 'country', 'region', 'sub-region']]
df_codes = df_codes[['id_code', 'clean_code', 'Description', 'parent_description']]

El curso empezó bien con la intro de la primera clase. Después no se aclaro el camino y se hizo de todo sin explicar por que ! No hubo enfoque solo procesos sin rumbo !

También podemos usar enumerate en la función:

def create_dimension(data, id_name):
    list_keys = []
    #value = 1

    for count, _ in enumerate(data):
        list_keys.append(count + 1)

    return pd.DataFrame({id_name: list_keys, 'values': data})

Creo que el error de esta clase no fue explicar la codificación que usa el profesor que aunque es valiosa, le falto explicar a mayor profundidad los conceptos de dimensiones , métricas y los hechos, ya que esta es la base conceptual de un ETL

Importante anotar que los identificadores unicos que utiliza el profesor no son suficientes para garantizar que no tenemos duplicados, pues pandas crea los index sin importar si 2 registros tienen los mismos valores, en este caso la mejor opcion es comparar los dos registros utilizando surrogate_keys.

df_trades_fact['surrogate_key'] = df_trades_fact.apply(lambda row: ''.join(hex(hash(row[col]))[2:] for col in df_trades_fact.columns), axis=1)

Muy buena la clase y todos lo aportes dados en la misma, pero en lo personal tuve problemas para conectar la base datos por Dataspell,y por tanto no podía seguir con el proyecto pero lo logre solucionar de esta forma.

<code> 
import psycopg2
import os
import pandas as pd

try:
      Connection=psycopg2.connect(host="localhot",
                                  
                                  user="postgres",
                                  
                                  password="",
                                  
                                  database="universida",
                                 
                                 puerto ="5432")
      
      print(f"conexion exitosa")
      cursor=Connection.cursos()
      cursor.execute("SELECT version()*")
      row=cursor.fetchone()
      print(row)
      cursor.execute("SELECT * FROM  curso")
      rows=cursor.fetchall()
      for row in rows:
          print(row)
except Exception as ex:
    print(ex)
finally:
    Connection.close()
    print("se termino la conexion")

Espero les sea de ayuda.

Aplicando listas comprensivas ```js def create_dimension(data, id_name): list_keys = [ value + 1 for value in range(len(data)) ] return pd.DataFrame({ id_name: list_keys, "values": data }) ```
Pense que este profesor era mas del corte de los que intenta enseñar, y creo quiere mostrar que tan bueno es el, no recomiendo para nada este curso, el cual me tomo una semana aprendiendo por otro lado a crear u bash para cargar la sql tan grandem, que lo unico que hace es en el Coolab bloquear mi pc, ojala puedan mejorar este curso y trabajar en como enseña el profesor que no enseño nada sino el codea aplicando unas funciones a base de conceptos muy cortos que son llaves unicas para mejorar complementar las tablas con relaciones lo cuale s poderoso pero necesitaba todo lo anterior para enseñar de zero a hero, OJALA mejore Platzi me estoy cansando
Eso fue muy hermoso
Alguien sabe como en DataSpell uno puede guardar cambios ? no encuentro ningun comando al estilo Control + S, para ir guardando los cambios en el notebook, siempre me ha tocado confiar en que se autoguarda. Pero me da miedo, ya que no veo ninguna indicación en el entorno dataSepell que me lo indique. Help !!

Ahora capté mejor lo que involucra la transformación y en sí el ETL. Muy lindo el curso

Una forma de hacerlo mas corto

def create_dimension(data, id_name):
    list_keys = [ i+1 for i in range(data.size) ]
    return pd.DataFrame({id_name:list_keys, "values": data})
def create_dimension(data, id_name):
    list_keys = []
    value =1
    for _ in data:
        list_keys.append(value)
        value = value + 1  
    
    return pd.DataFrame({id_name:list_keys,'values':data})