Documentos de Académico
Documentos de Profesional
Documentos de Cultura
id_user \
0 fe1e23b7-5925-428e-b103-c1803a8a802a
1 5fcc8b47-8fa0-4791-a6b8-6260f2ab0888
2 add08a93-d03a-449c-bf09-9c1535ce2419
3 0882f78e-0295-458a-934d-18278c31adc7
4 c33f22df-997a-481f-9d51-df94e0689d3d
gclid user_recurrent \
0 Cj0KCQjw1dGJBhD4ARIsANb6OdkNOTEPAcfCTEAhlJfk6g... True
1 Cj0KCQjw1dGJBhD4ARIsANb6OdmYnQIBLDemeVg6nbOtVV... False
2 Cj0KCQjw1dGJBhD4ARIsANb6OdkuQkoBgr2y0lU5c3la2s... False
3 Cj0KCQjw1dGJBhD4ARIsANb6OdmPt8bwmNTJnZJinw0MUh... False
4 Cj0KCQjw1dGJBhD4ARIsANb6Odnrixsd4Gcl1wcT68auuj... True
url_landing
0 https://www.metropolis.com/es/?gclid=Cj0KCQjw1... (https://www.metropolis.com/es/?gclid=Cj0KCQjw1...)
1 https://www.metropolis.com/es/ixs-electrico?gc... (https://www.metropolis.com/es/ixs-electrico?gc...)
2 https://www.metropolis.com/es/tria?gclid=Cj0KC... (https://www.metropolis.com/es/tria?gclid=Cj0KC...)
3 https://www.metropolis.com/es/tria?gclid=Cj0KC... (https://www.metropolis.com/es/tria?gclid=Cj0KC...)
4 https://www.metropolis.com/es/?gclid=Cj0KCQjw1... (https://www.metropolis.com/es/?gclid=Cj0KCQjw1...)
ts 7268
uuid 7268
id_user 7268
gclid 7268
user_recurrent 7268
url_landing 7148
dtype: int64
Nombre de las columnas: Index(['ts', 'uuid', 'id_user', 'gclid', 'user_recurrent', 'url_landing'], dtype='object')
print(df_convierte.head())
print('Numero de filas y columnas que tiene: ', df_convierte.shape, '\n')
print('Numero total de datos: ', df_convierte.size, '\n')
print('Nombre de las columnas: ', df_convierte.columns, '\n')
print('Nombre de los indices: ', df_convierte.index, '\n')
date hour id_lead id_user \
Nombre de las columnas: Index(['date', 'hour', 'id_lead', 'id_user', 'gclid', 'lead_type', 'result'], dtype='object')
Si el criterio es la velocidad de tratamiento, deberíamos eliminar todo un registro (fila) cuando algún campo esté con NaN.
Un dato que no llega completo lleva a pensar que puede estar corrupto, y por tanto ¿Cual es la validez de los campos que sí están en ese registro???
Si estamos en
Análisis Masivo de datos, no parece lógico perder el tiempo tratando datos incompletos (tenemos muchos)
Además el tratamiento hace un programa pierda velocidad mirando datos que a priori no deberían haber llegado así. Por eso yo los eliminaría en Big Data, no así bases
tradicionales donde los datos son más excasos, y no hace falta tratarlos en tiempo real y es posible mirarlos con calma y analizar con criterio. Pero aquí en Big Data los
eliminaría.
(No lo voy a hacer porque en siguientes apartados se piden opciones sin id_user o sin g_clid)(y la profesora no quiere que lo hagamos)
Por tanto cambio los NaN a campos de texto vacíos para esta práctica
ts uuid \
id_user \
0 fe1e23b7-5925-428e-b103-c1803a8a802a
1 5fcc8b47-8fa0-4791-a6b8-6260f2ab0888
2 add08a93-d03a-449c-bf09-9c1535ce2419
3 0882f78e-0295-458a-934d-18278c31adc7
4 c33f22df-997a-481f-9d51-df94e0689d3d
gclid user_recurrent \
0 Cj0KCQjw1dGJBhD4ARIsANb6OdkNOTEPAcfCTEAhlJfk6g... True
1 Cj0KCQjw1dGJBhD4ARIsANb6OdmYnQIBLDemeVg6nbOtVV... False
2 Cj0KCQjw1dGJBhD4ARIsANb6OdkuQkoBgr2y0lU5c3la2s... False
3 Cj0KCQjw1dGJBhD4ARIsANb6OdmPt8bwmNTJnZJinw0MUh... False
4 Cj0KCQjw1dGJBhD4ARIsANb6Odnrixsd4Gcl1wcT68auuj... True
url_landing
0 https://www.metropolis.com/es/?gclid=Cj0KCQjw1... (https://www.metropolis.com/es/?gclid=Cj0KCQjw1...)
1 https://www.metropolis.com/es/ixs-electrico?gc... (https://www.metropolis.com/es/ixs-electrico?gc...)
2 https://www.metropolis.com/es/tria?gclid=Cj0KC... (https://www.metropolis.com/es/tria?gclid=Cj0KC...)
3 https://www.metropolis.com/es/tria?gclid=Cj0KC... (https://www.metropolis.com/es/tria?gclid=Cj0KC...)
4 https://www.metropolis.com/es/?gclid=Cj0KCQjw1... (https://www.metropolis.com/es/?gclid=Cj0KCQjw1...)
ts uuid \
id_user \
0 fe1e23b7-5925-428e-b103-c1803a8a802a
1 5fcc8b47-8fa0-4791-a6b8-6260f2ab0888
2 add08a93-d03a-449c-bf09-9c1535ce2419
3 0882f78e-0295-458a-934d-18278c31adc7
4 c33f22df-997a-481f-9d51-df94e0689d3d
gclid user_recurrent \
0 Cj0KCQjw1dGJBhD4ARIsANb6OdkNOTEPAcfCTEAhlJfk6g... True
1 Cj0KCQjw1dGJBhD4ARIsANb6OdmYnQIBLDemeVg6nbOtVV... False
2 Cj0KCQjw1dGJBhD4ARIsANb6OdkuQkoBgr2y0lU5c3la2s... False
3 Cj0KCQjw1dGJBhD4ARIsANb6OdmPt8bwmNTJnZJinw0MUh... False
4 Cj0KCQjw1dGJBhD4ARIsANb6Odnrixsd4Gcl1wcT68auuj... True
url_landing modelo \
0 https://www.metropolis.com/es/?gclid=Cj0KCQjw1... (https://www.metropolis.com/es/?gclid=Cj0KCQjw1...)
4 https://www.metropolis.com/es/?gclid=Cj0KCQjw1... (https://www.metropolis.com/es/?gclid=Cj0KCQjw1...)
In [ ]:
Comentarios Punto 2
Dejo 2 columnas no pedidas, modelo y rec por si hubiera que usarlas en las preguntas finales
Comprueba si hay is_users repetidos No vacíos, luego sobre los vacío si hay gclids repetidos y finalmente si con id_user y gclid vacío encuentra uuid (cookie) repetidas
In [9]: # Repetidos, cuando existe id_user
serie3=df_navega1[df_navega1['id_user']!=""].groupby(df_navega1[df_navega1['id_user']!=""]['id_user'].tolist()).size()
#print("\n","*"*8,"Analizar Repetidos si id_user tiene información ","*"*8, "\n\n", df_navega3, end="\n"*2)
print("Los id_user repetidos ordenados de mayor a menor repeticion, son: \n\n",serie3[serie3 >1].sort_values(ascending=False), "\
#repetidos, cuando id_user esta en blanco
serie4=df_navega1[df_navega1['id_user']==""].groupby(df_navega1[df_navega1['id_user']==""]['gclid'].tolist()).size()
#print("\n","*"*8,"Analizar Repetidos si id_user está vacío ","*"*8, "\n\n", df_navega4, end="\n"*2)
print("Los gclid repetidos si id_user es vacío, ordenados de mayor a menor repeticion son: \n\n",serie4[serie4 >1].sort_values(asc
#repetidos, cuando id_user y gclid estan en blanco
mask= (df_navega1['id_user']=="") & (df_navega1['gclid']=="")
serie5=df_navega1[mask].groupby(df_navega1[mask]['uuid'].tolist()).size()
#print("\n","*"*8,"Analizar Repetidos si id_user y gclid están vacíos ","*"*8, "\n\n", df_navega5, end="\n"*2)
print("Los uuid repetidos si id_user y gclid están vacío, ordenados de mayor a menor repeticion son: \n\n",serie5[serie5 >1].sort_v
e9c3c28b-c6b5-4332-95f7-258a8c2f5de3 15
053a7ccc-43ab-4829-8b82-93f30180630a 12
47a4f1f8-5d1b-4186-a2c9-88e01c2e6f33 10
1ff5e77b-9338-45af-b673-0f7b7901af36 10
09369b67-fd40-4299-8990-326a52187308 8
..
9d591588-b07c-440b-94f3-7ea2bd0d41ba 2
9d52aeed-aef2-4775-b109-d1bbdcea?1b6 2
9d3d797c-bc11-4be0-8167-80a5ff4b520e 2
9cdae29c-7361-4eb4-a262-e19b4f861385 2
000f5acb-6e91-4db5-a1a7-8eace5cd42c5 2
****************************************************************************************************
Los gclid repetidos si id_user es vacío, ordenados de mayor a menor repeticion son:
****************************************************************************************************
Los uuid repetidos si id_user y gclid están vacío, ordenados de mayor a menor repeticion son:
****************************************************************************************************
EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEgJVzfD_BwE 124
0 35
CjwKCAjwjbCDBhAwEiwAiudBy3jlJeW4vAzqieU59RXrhxtMvbHXgK5UdK0KHtUCtcp6GWd38D0u6BoC76EQAvD_BwE 10
Cj0KCQjw-NaJBhDsARIsAAja6dOww1IgSWThNMRCIYMOqCLia0Udue7wdypptdIMPRlUBCr6gTi-_C4aAgdIEALw_wcB 5
Cj0KCQjw-NaJBhDsARIsAAja6dMELUkx0xI6udIqEYLUIQSpbP0FQtNk2aVxcUiMQUjb058AhqTsvhcaAho4EALw_wcB 5
...
Cj0KCQjw-NaJBhDsARIsAAja6dPvG1JtJ9QmzxpWT4xnk0NOTtFIlJltdBGHd8a5HLTTYWURnEHvD6UaAjJwEALw_wcB 2
Cj0KCQjw-NaJBhDsARIsAAja6dPw5PpJAOZRDCT5fpiUPL4dvWDMmLFr03DOHIA9qzrDClxCS9N_YH8aAsO1EALw_wcB 2
Cj0KCQjw-NaJBhDsARIsAAja6dPxm-pY4PfjXUXnORQcN3e7fH3I-rNWx-UY6aStQi7lKbFtxlZLPVQaAttIEALw_wcB 2
Cj0KCQjw-NaJBhDsARIsAAja6dPyAIvZEJI-MNcZkHRuy_e6PZJbLvJQzsxrHd2AGva_9C46ZVqxvggaAkV2EALw_wcB 2
Cj0KCQjw-NaJBhDsARIsAAja6dOx4Am-XpUWqhRGxT_syMW-IogS5rhqPo_TtP_k5H6xpZFRBWHte08aAmEvEALw_wcB 2
****************************************************************************************************
In [11]: print(df_navega1[df_navega1['gclid']=="EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEgJVzfD_BwE"][['id_user','gclid']])
id_user \
6 53f1a3fa-8fc4-4aeb-87a0-dcbe059339ae
7 cbe653fa-8fc4-4aeb-87a0-dcbe059339ae
34 431a56fa-8fc4-4aeb-87a0-dcbe059339ae
41 d300f5fa-8fc4-4aeb-87a0-dcbe059339ae
47 d20e93fa-8fc4-4aeb-87a0-dcbe059339ae
... ...
7257 5bd4774a-8fc4-4aeb-87a0-dcbe059339ae
7258 d7df874a-8fc4-4aeb-87a0-dcbe059339ae
7259 521d774a-8fc4-4aeb-87a0-dcbe059339ae
7263 d6ac974a-8fc4-4aeb-87a0-dcbe059339ae
7265 de57a84a-8fc4-4aeb-87a0-dcbe059339ae
gclid
6 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
7 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
34 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
41 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
47 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
... ...
7257 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
7258 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
7259 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
7263 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
7265 EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEg...
Hay que limpiar los datos con gclid = EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEgJVzfD_BwE y 124 repeticiones y otras 35 repeteciones con valor 0, y
diferentes id_user dentro de cada grupo de ellas, esto indica que cada grupo se corresponde con una araña rastreando en cada caso
In [12]: indices_borrar1=df_navega1[df_navega1['gclid']=="EAIaIQobChMIwPu5t4qs3AIVAQAAAB0BAAAAEAAYACAAEgJVzfD_BwE"].index
df_navega1.drop(indices_borrar1 , inplace=True)
indices_borrar2=df_navega1[df_navega1['gclid']=="0"].index
df_navega1.drop(indices_borrar2 , inplace=True)
serie6=df_navega1.groupby(df_navega1['gclid'].tolist()).size()
print("Los gclid repetidos ahora ordenados de mayor a menor repeticion, son: \n\n",serie6[serie6 >1].sort_values(ascending=False),
CjwKCAjwjbCDBhAwEiwAiudBy3jlJeW4vAzqieU59RXrhxtMvbHXgK5UdK0KHtUCtcp6GWd38D0u6BoC76EQAvD_BwE 10
Cj0KCQjw-NaJBhDsARIsAAja6dMELUkx0xI6udIqEYLUIQSpbP0FQtNk2aVxcUiMQUjb058AhqTsvhcaAho4EALw_wcB 5
Cj0KCQjw-NaJBhDsARIsAAja6dOww1IgSWThNMRCIYMOqCLia0Udue7wdypptdIMPRlUBCr6gTi-_C4aAgdIEALw_wcB 5
Cj0KCQjw-NaJBhDsARIsAAja6dPLhRHDqi-qYz4dcE9XFVvOcq4o0eiCW5ss8t3T_h7u9VB4NXAS-FkaAhKzEALw_wcB 4
Cj0KCQjw-NaJBhDsARIsAAja6dPF-dZH3B6kU3Lp_q8fn9f8bl4tz8uOoZbmJJcL6EkgWPG6mvqGRZ0aAoWoEALw_wcB 4
..
Cj0KCQjw-NaJBhDsARIsAAja6dPw5PpJAOZRDCT5fpiUPL4dvWDMmLFr03DOHIA9qzrDClxCS9N_YH8aAsO1EALw_wcB 2
Cj0KCQjw-NaJBhDsARIsAAja6dPxm-pY4PfjXUXnORQcN3e7fH3I-rNWx-UY6aStQi7lKbFtxlZLPVQaAttIEALw_wcB 2
Cj0KCQjw-NaJBhDsARIsAAja6dPyAIvZEJI-MNcZkHRuy_e6PZJbLvJQzsxrHd2AGva_9C46ZVqxvggaAkV2EALw_wcB 2
Cj0KCQjw-NaJBhDsARIsAAja6dPykgOqL7Ow28PKh1dtWu76TrWRkcb7bhRbvnUqTAl71KzEhR_BqA8aAiHGEALw_wcB 2
66999d78163412d9d6affc4df53f7ac2 2
****************************************************************************************************
Vamos a convertir ts a una cadena numérica que permita ordenar por ella
In [13]: df= df_navega1
df['ts']=df['ts'].apply((lambda x: ''.join([str(campo.lstrip()).zfill(2) for campo in re.split(' |\.|:|-', x)])))
df1= df.sort_values(['id_user','ts'],ascending=True)
print (df1)
ts uuid \
id_user \
2364 00058196-6d2b-47ed-82c5-0da02ebbc036
4489 00086e39-418a-4c71-81e3-5708e7817ee6
1536 0009dc9a-b6ef-43f5-8820-dbf7fc361fe5
4133 000c70dc-5e30-43c4-960f-5a65e8230ae3
4286 000d3ecf-f976-441f-a9a4-f73551ca6fd1
... ...
5510 ffd2f80c-891a-4c42-9a47-e72477e86db0
5809 ffdf96f7-73be-4795-b76c-2a013eb7d96c
2648 ffe198c1-4af3-4f27-ad65-a11c5644eaf1
2694 ffe198c1-4af3-4f27-ad65-a11c5644eaf1
1026 fff88164-ce92-486c-a4d8-41c7b9779f24
gclid user_recurrent \
url_landing modelo \
a.- Resetea los índices de filas para dejar el dataframe df2 ordenado en primer nivel por id_user y en segundo nivel por fechas (ts)
b.- Añade una columna contador que contiene el número de repetición de cada valor de iduser
In [14]: df2=df1.reset_index(drop=True)
#print(df1)
df2['contador']=df2.groupby('id_user').cumcount()
print(df2)
ts uuid \
0 20210906121948835 a2a3c255-1b49-4964-b6cc-9554f9a8b627
1 20210906165905026 ebfee846-b9a0-417e-af70-1b55b410ba6b
2 20210906102951027 c5d2d6c5-f2f0-45eb-8a7c-84359ce07ad0
3 20210906161206883 378be2d9-1985-493c-a297-d768629509d6
4 20210906163025539 82481331-bf99-4e79-b396-b9543b7c7402
id_user \
0 00058196-6d2b-47ed-82c5-0da02ebbc036
1 00086e39-418a-4c71-81e3-5708e7817ee6
2 0009dc9a-b6ef-43f5-8820-dbf7fc361fe5
3 000c70dc-5e30-43c4-960f-5a65e8230ae3
4 000d3ecf-f976-441f-a9a4-f73551ca6fd1
... ...
7104 ffd2f80c-891a-4c42-9a47-e72477e86db0
7105 ffdf96f7-73be-4795-b76c-2a013eb7d96c
7106 ffe198c1-4af3-4f27-ad65-a11c5644eaf1
7107 ffe198c1-4af3-4f27-ad65-a11c5644eaf1
7108 fff88164-ce92-486c-a4d8-41c7b9779f24
gclid user_recurrent \
0 Cj0KCQjw-NaJBhDsARIsAAja6dPJ-JyDW839JlfKcoC8FA... False
1 Cj0KCQjw-NaJBhDsARIsAAja6dPDS7626ZVRCPEgnCoxI6... False
2 Cj0KCQjw-NaJBhDsARIsAAja6dNajQVq0jWgLNTuC5FWEB... False
3 Cj0KCQjw-NaJBhDsARIsAAja6dM9h8p2ibuONyK14kBsSD... False
4 Cj0KCQjw-NaJBhDsARIsAAja6dMuD1IYSfb-t9IJkr0S5e... False
url_landing modelo \
a.- Crea un dataframe sólo con las filas cuyo valor de contador es 0 que son las más antiguas en fecha.
0 20210906121948835 a2a3c255-1b49-4964-b6cc-9554f9a8b627
1 20210906165905026 ebfee846-b9a0-417e-af70-1b55b410ba6b
2 20210906102951027 c5d2d6c5-f2f0-45eb-8a7c-84359ce07ad0
3 20210906161206883 378be2d9-1985-493c-a297-d768629509d6
4 20210906163025539 82481331-bf99-4e79-b396-b9543b7c7402
id_user \
0 00058196-6d2b-47ed-82c5-0da02ebbc036
1 00086e39-418a-4c71-81e3-5708e7817ee6
2 0009dc9a-b6ef-43f5-8820-dbf7fc361fe5
3 000c70dc-5e30-43c4-960f-5a65e8230ae3
4 000d3ecf-f976-441f-a9a4-f73551ca6fd1
... ...
5638 ffcd8ee1-232b-484f-9b3c-f7373be9f049
5639 ffd2f80c-891a-4c42-9a47-e72477e86db0
5640 ffdf96f7-73be-4795-b76c-2a013eb7d96c
5641 ffe198c1-4af3-4f27-ad65-a11c5644eaf1
5642 fff88164-ce92-486c-a4d8-41c7b9779f24
gclid user_recurrent \
0 Cj0KCQjw-NaJBhDsARIsAAja6dPJ-JyDW839JlfKcoC8FA... False
1 Cj0KCQjw-NaJBhDsARIsAAja6dPDS7626ZVRCPEgnCoxI6... False
2 Cj0KCQjw-NaJBhDsARIsAAja6dNajQVq0jWgLNTuC5FWEB... False
3 Cj0KCQjw-NaJBhDsARIsAAja6dM9h8p2ibuONyK14kBsSD... False
4 Cj0KCQjw-NaJBhDsARIsAAja6dMuD1IYSfb-t9IJkr0S5e... False
url_landing modelo \
Se entra con [7109 rows x 13 columns] y se ha salido con [5643 rows x 12 columns]
Ahora se tratarán los datos procedentes del fichero conversiones.csv almacenados en df_convierte
In [16]: df_convierte = df_convierte.fillna("")
print(df_convierte)
gclid lead_type \
0 Cj0KCQjw1dGJBhD4ARIsANb6Odl8LjduiZVnMw6VFe8APD... FORM
1 None CALL
2 None CALL
3 None CALL
4 None CALL
5 None CALL
6 None CALL
7 None CALL
8 None CALL
9 None CALL
10 Cj0KCQjw-NaJBhDsARIsAAja6dNU5vPDlafKLhm6CdDtyd... FORM
11 None CALL
12 None CALL
13 None CALL
14 Cj0KCQjw-NaJBhDsARIsAAja6dOehjJTnm8rZs-IwWC5sa... FORM
15 None CALL
16 Cj0KCQjw-NaJBhDsARIsAAja6dNCueDuJnpMRCegupZko2... FORM
17 Cj0KCQjw-NaJBhDsARIsAAja6dM1v0WCTK_OfE2RBzWB7r... CALL
18 EAIaIQobChMIsNjZj_Lq8gIVD6h3Ch2APQeBEAAYASAAEg... FORM
19 Cj0KCQjw1dGJBhD4ARIsANb6Odlnpclu0aWW8w1k4oOWd7... FORM
20 Cj0KCQjw-NaJBhDsARIsAAja6dM6qdbSmrcMxQl5WJrG9i... CALL
21 Cj0KCQjw-NaJBhDsARIsAAja6dMkLcC2x5KGCyFoyyjDiD... CALL
22 EAIaIQobChMIhsr_gYnp8gIVxQyLCh04MwVEEAAYASAAEg... FORM
23 Cj0KCQjw1dGJBhD4ARIsANb6Odmm0scxrJhSEv-sJOjunw... CALL
24 Cj0KCQjw-NaJBhDsARIsAAja6dNtVZXsxzlO0dE1Mk8wIs... FORM
25 Cj0KCQjw1dGJBhD4ARIsANb6OdkF0-DcGTMMXczOIXbbjK... CALL
26 Cj0KCQjw1dGJBhD4ARIsANb6Odlnpclu0aWW8w1k4oOWd7... FORM
27 EAIaIQobChMIquKwkIDq8gIVRLrVCh3JEwTmEAAYASAAEg... CALL
result
0 Ilocalizable
1 No le interesa
2 No le interesa
3 No le interesa
4 No le interesa
5 No le interesa
6 No le interesa
7 No le interesa
8 No le interesa
9 No le interesa
10 Positivo
11 Positivo
12 No le interesa
13 Ilocalizable
14 Positivo
15 Positivo
16 Ilocalizable
17 No le interesa
18 Ilocalizable
19 Positivo
20 Ilocalizable
21 Ilocalizable
22 No le interesa
23 Ilocalizable
24 Positivo
25 No le interesa
26 Positivo
27 No le interesa
Busca si hay algún registro de conversiones duplicado, iguales id_user, gclids, lead_type y result
In [17]: df_convierte1=df_convierte.copy()
serie8=df_convierte1.groupby(df_convierte1['gclid'].tolist()).size()
print("Los gclid repetidos ordenados de mayor a menor repeticion, son: \n\n",serie8[serie8 >1].sort_values(ascending=False), "\n"
None 13
Cj0KCQjw1dGJBhD4ARIsANb6Odlnpclu0aWW8w1k4oOWd7g1IE11WEQ00IZ4fYuqMnbULg7mXXPdJmYaAhEJEALw_wcB 2
dtype: int64
****************************************************************************************************
In [18]: print(df_convierte1[df_convierte1['gclid']=="Cj0KCQjw1dGJBhD4ARIsANb6Odlnpclu0aWW8w1k4oOWd7g1IE11WEQ00IZ4fYuqMnbULg7mXXPdJmYaAhEJEA
No voy a implementar más código para hacerlo automáticamente, pues se nos indica que hagamos análisis (humano)
Por lo tanto como sólo hay dos posiciones repetidas,
None 13
dtype: int64
****************************************************************************************************
In [20]: print(df_convierte1)
gclid lead_type \
0 Cj0KCQjw1dGJBhD4ARIsANb6Odl8LjduiZVnMw6VFe8APD... FORM
1 None CALL
2 None CALL
3 None CALL
4 None CALL
5 None CALL
6 None CALL
7 None CALL
8 None CALL
9 None CALL
10 Cj0KCQjw-NaJBhDsARIsAAja6dNU5vPDlafKLhm6CdDtyd... FORM
11 None CALL
12 None CALL
13 None CALL
14 Cj0KCQjw-NaJBhDsARIsAAja6dOehjJTnm8rZs-IwWC5sa... FORM
15 None CALL
16 Cj0KCQjw-NaJBhDsARIsAAja6dNCueDuJnpMRCegupZko2... FORM
17 Cj0KCQjw-NaJBhDsARIsAAja6dM1v0WCTK_OfE2RBzWB7r... CALL
18 EAIaIQobChMIsNjZj_Lq8gIVD6h3Ch2APQeBEAAYASAAEg... FORM
19 Cj0KCQjw1dGJBhD4ARIsANb6Odlnpclu0aWW8w1k4oOWd7... FORM
20 Cj0KCQjw-NaJBhDsARIsAAja6dM6qdbSmrcMxQl5WJrG9i... CALL
21 Cj0KCQjw-NaJBhDsARIsAAja6dMkLcC2x5KGCyFoyyjDiD... CALL
22 EAIaIQobChMIhsr_gYnp8gIVxQyLCh04MwVEEAAYASAAEg... FORM
23 Cj0KCQjw1dGJBhD4ARIsANb6Odmm0scxrJhSEv-sJOjunw... CALL
24 Cj0KCQjw-NaJBhDsARIsAAja6dNtVZXsxzlO0dE1Mk8wIs... FORM
25 Cj0KCQjw1dGJBhD4ARIsANb6OdkF0-DcGTMMXczOIXbbjK... CALL
26 EAIaIQobChMIquKwkIDq8gIVRLrVCh3JEwTmEAAYASAAEg... CALL
result
0 Ilocalizable
1 No le interesa
2 No le interesa
3 No le interesa
4 No le interesa
5 No le interesa
6 No le interesa
7 No le interesa
8 No le interesa
9 No le interesa
10 Positivo
11 Positivo
12 No le interesa
13 Ilocalizable
14 Positivo
15 Positivo
16 Ilocalizable
17 No le interesa
18 Ilocalizable
19 Positivo
20 Ilocalizable
21 Ilocalizable
22 No le interesa
23 Ilocalizable
24 Positivo
25 No le interesa
26 No le interesa
Ahora quedan 27 filas, es decir ha eliminado la posición 26 completa y se ha reseteado el índice de filas
Nuevamente indico que no voy a tratar los None porque así lo indica la profesora
Creo de verdad que datos incompletos pueden indicar registro corrupto y por tanto datos no válidos, pero..
Crear una columna indicando si el usuario ha convertido o No ha convertido. Unión a través de id_user
La unión está correcta puesto que hay 13 registros de los (28-1) de conversión que tienen id_user y gclid en blanco.
Por ello No es posible asociarlos a ninguna cookie pues los uuid de navegación y los id_lead de conversión no están relacionados.
Por ello pasamos de los 5643 registros de navegación limpia a 5656 (5643 + 13) en el total
In [79]: print (dfTotal[dfTotal.result.notnull()].count())
ts 14
uuid 14
id_user 27
gclid_x 14
user_recurrent 14
url_landing 14
modelo 14
campaña 14
adgroup 14
site_link 14
advertisement 14
rec 14
date 27
hour 27
id_lead 27
gclid_y 27
lead_type 27
result 27
dtype: int64
Preguntas a responder
Como previamente se han eliminado duplicados (ha sido mi elección), entonces entiendo que cada entrada con ts es una visita.
proporción entre navegación y conversión, no creo que vaya a cambiar mucho el porcentaje.
In [81]: visitas6 = dfTotal[ (dfTotal["ts"] <"20210907000000") & (dfTotal["ts"] >"20210905000000") ]['ts'].count()
print("El número de visitas el 6 de septiembre: ", visitas6)
Todas las que aparecen se las vamos a imputar a visitas del día 6, aunque en algunas no hay enlace claro.
Nº de conversiones Positivas: 6
In [83]: print ("En porcentaje, la relación de visitas y conversiones es de: ", positivas * 100 /visitas6)
Conclusión: Realmente parece que se puede expresar en tanto por mil, como un 1 por mil
Y las que No, pues serán del 999 por mil. Es decir del 99.9% no se convierten
Puede parecer exagerado pero No lo es porque hablamos de coches, las páginas se visitan mucho, pero su compra es una inversión
2.- Por tipo de conversión (Call, Form). ¿Cuántas hay de cada una?
Que hayan sido positivas, es decir que se haya vendido un coche, son 6 en total, 2 desde Call y 4 desde Form
Nº de CALLs totales: 19
Nº de FORMS totales: 8
In [85]: print ("Nº de CALLs con conversión Positiva: ", dfTotal[(dfTotal["lead_type"]=="CALL") & (dfTotal["result"]=="Positivo")]['lead_ty
print ("Nº de FORM con conversión Positiva: ", dfTotal[(dfTotal["lead_type"]=="FORM") & (dfTotal["result"]=="Positivo")]['lead_ty
In [ ]:
Tenemos sobre un total de 5643 visitas (hay de más de 1 día), 947 recurrentes y 4696 por primera vez
El porcentaje de visitantes recurrentes ronda el: 16,78% mientras que son nuevos el 83,22% restante
In [ ]:
In [ ]:
277 cea
117 cea-e
60 cea-h
383 clin200
18 clin200n
10 clin200-electrico
289 clin400
134 clin50
3 comercial
153 dep30
40 dep30F
82 fm
14 fm-hev
311 home
107 ixs-
electrico
112 ixs-hibrido
22 k43
122 life
1206 tria
150 tria-hibrido
2 renting
3612 totales
In [87]: modelos=["tria-hibrido","tria[^-]|^tria$","life","k43","ixs-h","ixs-e","home","fm-h","fm[^-]|^fm$","dep30F","dep30[^F]|^dep30$","co
contador_modelo = list(map(lambda x : dfTotal[dfTotal.modelo.str.contains(x, regex=True, na=False)]['modelo'].count(), modelos))
print( [listado for listado in zip(modelos, contador_modelo)])
print (max(contador_modelo))
[('tria-hibrido', 150), ('tria[^-]|^tria$', 1206), ('life', 122), ('k43', 22), ('ixs-h', 112), ('ixs-e', 107), ('home', 311),
('fm-h', 14), ('fm[^-]|^fm$', 82), ('dep30F', 40), ('dep30[^F]|^dep30$', 153), ('comercial', 3), ('clin50', 134), ('clin400', 28
9), ('clin200n', 18), ('clin200-e', 10), ('clin200[^-^n]|^clin200$', 383), ('cea-hibrido', 60), ('cea-e', 117), ('cea[^-]|^cea
$', 277)]
1206
Ese día, de los positivos o conversiones, sólo parecen disponibles las de 3 coches:
In [88]: print(dfTotal[dfTotal["result"]=="Positivo"].groupby(['modelo'])['result'].count())
modelo
cea-electrico 1
clin400 1
tria 1
como sitelink (es decir Nan != 0 y Nan != ""). He dejado este criterio para los cáculos
Nº de clicks indefinidos: 28
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: