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 13

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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 鈥榪uien?鈥, 鈥榙onde?鈥, 鈥榗omo?鈥, 鈥榗uando?鈥 de un 鈥榪ue?鈥
  • 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 鈥榥o 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 鈥榝low鈥, 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']]

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})

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 !

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.

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})