Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- El modelo va así:
- COMPANY(id integer, name string, associated_partner string, close_date string)
- associated_partner muestra si la compañía la trajo el equipo de asociados, y su valor es el nombre del asociado si fue traida por un asociado, si no, es vacío.
- CONVERSATIONS(account_id integer, total integer, date date, successful boolean, id integer)
- Una compañía puede tener MÚLTIPLES cuentas, en cada cuenta la compañía despliega conversaciones, en la tabla conversaciones se agrupan por dia, cuenta y si son exitosas o no (successful). Por ejemplo en un registro así:
- ["A", 200, '2023-02-01', true, 'ak200']
- Significa que la cuenta con id 1 (que pertenece a una compañía, tuvo una conversación exitosa con 200 mensajes en la fecha correspondiente)
- STRIPE_INVOICE(sent_date date, invoice_id string, company_id string, amount integer, currency string)
- Stripe es el sistema utilizado para enviar facturas a las compañias, cada compañia puede tener multiples cuentas de stripe. La columan company_id en esta tabla es el id interno que crea stripe por cuenta.
- COMPANY_IDENTIFIERS(account_identifier integer, company_id integer, stripe_company_ids string)
- Esta tabla se encarga de asociar una compañía con las tablas de conversaciones y facturas. Ejemplo:
- [1, 1, 'ak_1, ak_2']
- [2, 1, 'ak_1, ak_2']
- Aqui se puede ver que la compania con ID 1 tiene 2 cuentas en conversaciones (ids 1 y 2) y dos cuentas en stripe("ak_1,ak_2")
- Mes a mes, que porcentaje de las compañias recientemente cerradas fueron exitotas? una compañia cerrada recientemente es una compañia cerrada en los 2 meses previos. Por ejemplo, en Octubre de 2023, las compañias cerradas para ese mes son compañias cerradas en septiembre y octubre
- una compañia es existosa en un mes especifico si en ese mes la compañia tuvo mas de 1500 conversaciones exitosas
- En este ejemplo, en el mes de octubre 2023, necesito contar cuantas compañias fueron cerradas en septiembre y octubre, and de ese set de compañias calcular el porcentaje de compañias que desplegaron al menos 1500 conversacones exitosas en octubre
- MI SOLUCION:
- """
- import redshift_connector
- import matplotlib.pyplot as plt
- from datetime import datetime, timedelta
- from calendar import monthrange
- conn = redshift_connector.connect(
- user="user_test",
- password="Password123",
- host="redshift-cluster-datawarehouse.cew9a5azwld4.us-east-1.redshift.amazonaws.com",
- port="5439",
- database="test"
- )
- cursor = conn.cursor()
- def define_query(month, year):
- if(month == 1):
- start_date = datetime(year-1, 12, 1)
- last_day_of_month = monthrange(year, 1)[1]
- finish_date = datetime(year, 12, last_day_of_month)
- else:
- start_date = datetime(year, month -1, 1)
- last_day_of_month = monthrange(year, month)[1]
- finish_date = datetime(year, month, last_day_of_month)
- actual_date = datetime(year, month, monthrange(year, month)[1])
- actual_date_start = datetime(year, month, 1)
- query = f"SELECT c.id, c.close_date, SUM(co.total) AS successful_messages FROM(SELECT id, close_date FROM company WHERE close_date >= '{start_date}' AND close_date <= '{finish_date}') AS closed_companies INNER JOIN company_identifiers ci ON closed_companies.id = ci.company_id INNER JOIN conversations co ON co.account_id = ci.account_identifier INNER JOIN company c on c.id = ci.company_id WHERE co.date >= '{actual_date_start}' AND co.date <= '{actual_date}' AND co.successful = TRUE GROUP BY c.id, c.close_date HAVING SUM(co.total) >= 1500"
- query_total = f"select COUNT(*) from company where close_date >= '{start_date}' AND close_date <= '{finish_date}'"
- cursor.execute(query)
- results = len(cursor.fetchall())
- cursor.execute(query_total)
- total = cursor.fetchall()[0][0]
- print("RESULTS", results, "TOTAL", total, "PERCENTAGE: ", ((results/total)*100))
- return ((results/total)*100)
- percentages = []
- for i in range(1,9):
- print("PARA MES ", i)
- percentages.append(define_query(i,2023))
- print(percentages)
- month_labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug']
- plt.figure(figsize=(10, 6))
- plt.plot(month_labels, percentages, marker='o')
- plt.xlabel("Month")
- plt.ylabel("Percentage of Successful Companies")
- plt.title("Percentage of Recently Closed Companies That Were Successful (2023)")
- plt.grid(True)
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement