# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# ## Ejercicio 58
#
# Observe una muestra aleatoria de los comentarios de las acciones realizadas por
# usuarios o ips antes de ser bloqueados. Observe otra muestra de comentarios de
# acciones de todos.

import pandas as pd
import numpy as np

logs = pd.read_csv("logs.csv")
logs.head()

# Solo necesito algunas columnas, por lo que reduzco el dataframe

logs = logs[['timestamp','contributor_username','contributor_ip','action','title']]
logs.head()

# Como trabajo con un datetime, aplico el cast
logs['timestamp'] = pd.to_datetime(logs['timestamp'], format='%Y-%m-%dT%H:%M:%SZ')
logs.info()

# 1 - Solo me quedo con aquellas filas cuyo action es block.

logs['username/ips'] = logs['contributor_username'].fillna(logs['contributor_ip'])
del logs['contributor_username']
del logs['contributor_ip']
logs

action_grouped = logs.groupby(['action'])
blocked_actions = action_grouped.get_group('block')
blocked_actions = blocked_actions[['timestamp','title']]
blocked_actions

blocked_actions['title'].replace({'nan':None},inplace=True)
blocked_actions['title'].isnull().sum()

blocked_actions['title'].dropna(inplace=True)

blocked_actions['title'].isnull().sum()


# Con los nulls limpios, manipulo los strings de manera que solo me quede los usuarios que fueron bloqueados
def clean_Usuario(x):
    j = x.split(":")
    return j[1]


blocked_actions = blocked_actions.astype({'title': 'str'})


blocked_actions['title'].replace({'nan':None},inplace=True)
blocked_actions['title'].dropna(inplace=True)
blocked_actions['title'] = blocked_actions['title'].apply(clean_Usuario)

# Como title ya son los usuarios bloqueados,modifico el nombre
blocked_actions.rename(columns={'title':'user_blocked'},inplace=True)

blocked_actions

# Necesito saber cuando fue la primera vez que los usuarios que se repiten fueron bloqueados por lo que.
blocked_actions['first_block_date'] = blocked_actions.groupby('user_blocked')['timestamp'].transform('min')
blocked_actions = blocked_actions[['timestamp','user_blocked','first_block_date']]
blocked_actions

logs.rename(columns={'username/ips':'user_blocked'},inplace=True)
#Solo me interesan aquellos usuarios que estan en user_blocked.
logs

# Me quedo con los registros de las acciones de los usuarios que fueron bloqueados
blocked_logs = logs.loc[logs['user_blocked'].isin(blocked_actions.user_blocked)]
blocked_logs

# Ahora que en blocked_logs tengo los usuarios que fueron bloqueados, le agrego la columna de la fecha que fueron por primera
# vez bloqueados
blocked_actions = blocked_actions[['user_blocked','first_block_date']]
before_being_blocked_logs = blocked_logs.merge(blocked_actions,on='user_blocked')
before_being_blocked_logs

# Ahora solo me quedo con aquellos que el timestamp es menor a su primera vez bloqueado.
before_being_blocked_logs['valid_log'] = before_being_blocked_logs['timestamp'] < before_being_blocked_logs['first_block_date']
before_being_blocked_logs

before_being_blocked_logs = before_being_blocked_logs.loc[before_being_blocked_logs.valid_log == True]
before_being_blocked_logs = before_being_blocked_logs[['user_blocked','action','timestamp','first_block_date']]
before_being_blocked_logs

# +
# before_being_blocked_logs son las acciones de los usuarios que luego fueron bloqueados.

StarcoderdataJupyterScriptsDedupFiltered