#Importamos las librerías necesarias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.express as px
import seaborn as sns
%matplotlib inline 
#Cargue del archivo csv y muestra de las primeras 5 filas
#/datasets/violencia/Estadistica/Bases/Violencia.csv
df = pd.read_csv("/work/Violencia.csv")
df.head(10)
df.dtypes
df.columns
df.describe()
df.shape
print(df.isnull().sum())
df.dtypes.value_counts()
#Agrupamos los casos de violencia por años
df.groupby('año').size()
#Creamos una tabla que contenga la frecuencia relativa de los casos de violencia por años
tabla = df.groupby("año", as_index=False).size()
total = sum(tabla["size"])
#convertimos el año a string para poder ordenar el histrograma
tabla['año']= tabla['año'].apply(str)
tabla["Frecuencia Relativa"] = round(100*tabla["size"]/total,2)
tabla
#Histograma casos por año
barras = px.bar(tabla, 
                x="año", 
                y='size', 
                color='size', 
                title="CASOS DE VIOLENCIA POR AÑOS",
                text='size', 
                width=700, 
                height=500,
                labels={'Relativa':'Numero de Casos'})
barras.update_xaxes(showgrid=False, ticks="outside")
barras.update_layout(xaxis={'categoryorder':'total descending'})  
#Creamos un dataframe por género
df.groupby('sexo_').size()
figura = px.pie(df, names="sexo_",
                title='Casos de Violencia por Genero', 
                width=600, height=500, 
                hole=0.3 ,
                color='sexo_', 
                color_discrete_sequence=px.colors.sequential.GnBu_r,) 
figura.update_traces(textposition='inside', textinfo='percent+label')
figura.show()
#Creamos una tabla que contenga la frecuencia relativa de los casos de violencia
tiposdeViolencia = df.groupby("def_naturaleza", as_index=False, dropna=False).size()
tiposdeViolencia.loc[tiposdeViolencia['def_naturaleza'] == 'Sin informacion', 'def_naturaleza'] = 'Sin Informacion'
tab_2 = tiposdeViolencia.groupby("def_naturaleza", as_index=False, dropna=True).sum()
total = sum(tab_2["size"])
tab_2["Porcentaje"] = round(100*tab_2["size"]/total,2)
tab_2
#Diagrama de pastel que muestra los tipos de violencia
figura = px.pie(df, 
                names="def_naturaleza",
                title='Tipos de Violencia', 
                width=900, height=700, 
                hole=0.1 ,
                color='def_naturaleza', 
                color_discrete_sequence=px.colors.sequential.Blugrn_r) 
figura.update_traces(textposition='inside', textinfo='percent+label')
figura.show()
#Creamos una tabla que contenga la frecuencia relativa de los casos de violencia
Tabla1 = df.groupby("Ciclo de vida", as_index=False).size()
Tabla1.loc[Tabla1['Ciclo de vida'] == 'ERROR: #N/A', 'Ciclo de vida'] = 'Infancia'
total1 = sum(Tabla1["size"])
Tabla1["Frec Relativa"] = round(100*Tabla1["size"]/total1 ,2)
Tabla1
barras1 = px.bar(Tabla1, 
                 x='Ciclo de vida', 
                 y="Frec Relativa", 
                 color='Frec Relativa' , 
                 title="Casos por grupo etereo",
                 text_auto=True,
                 width=700, height=600)
barras1.update_layout(xaxis={'categoryorder':'total descending'}) 
barras1.update_xaxes(showgrid=True, ticks="outside")
barras1.show()
TipoViolencia = df[df["Ciclo de vida"]=='Primera infancia']
TipoViolencia.head()
SinNA = df[df["Grupo edad"]!='ERROR: #N/A']
tabla=SinNA.groupby(["Grupo edad",'sexo_'], as_index=False).size()
tabla.head()
import plotly.express as px
fig = px.bar(tabla, x="Grupo edad", y="size",
             color='sexo_', barmode='group',
             title='Casos de violencia por edad y genero',
             labels={'size':'Casos Reportados'},
             text_auto=True,
             height=400)
fig.show()
datosMujeres = df[df["sexo_"]=="Femenino"]
datosMujeres.shape
tabla2 = datosMujeres.groupby("def_naturaleza", as_index=False).size()
total2 = sum(tabla2["size"])
tabla2["Relativa"] = round (100*tabla2["size"]/total2,2)
tabla2
barras2 = px.bar(tabla2, 
                 x="def_naturaleza", 
                 y="Relativa", 
                 color='Relativa',
                 title="Tipos de Violencia en las mujeres",
                 labels={'Relativa':'% de Casos Reportados'},
                 text_auto=True,
                 width=900, height=700)
barras2.update_layout(xaxis={'categoryorder':'total descending'}) 
barras2.update_xaxes(showgrid=False, ticks="outside")
barras2.show()
tabla6 = datosMujeres.groupby("Ciclo de vida", as_index=False).size()
total6 = sum(tabla6["size"])
tabla6["Relativa"] = round (100*tabla6["size"]/total6, 2)
tabla6
barras2 = px.bar(tabla6, 
                 x="Ciclo de vida", 
                 y="Relativa", 
                 color='Relativa',
                 title="Ciclo de vida de las mujeres",
                 labels={'Relativa':'% de Casos Reportados'},
                 text_auto=True,width=900, height=400)
barras2.update_layout(xaxis={'categoryorder':'total descending'}) 
barras2.update_xaxes(showgrid=True, ticks="outside")
barras2.show()
Jovenes = datosMujeres[datosMujeres["Ciclo de vida"]=="Jovenes"]
#Diagrama de pastel que muestra los tipos de violencia en las mujeres jovenes
figura = px.pie(Jovenes, 
                names="def_naturaleza",
                title='Tipos de Violencia en las mujeres Jóvenes', 
                width=700, height=500, 
                hole=0.1 ,
                color='def_naturaleza', 
                color_discrete_sequence=px.colors.sequential.Purp) 
figura.update_traces(textposition='inside', textinfo='percent+label')
figura.show()
figura = px.pie(Jovenes, 
                names="parentezco_vict",
                title='Tipos de agresor en las mujeres Jovenes', 
                width=700, height=600, 
                hole=0.1 ,
                color='parentezco_vict', 
                color_discrete_sequence=px.colors.sequential.Purp_r) 
figura.update_traces(textposition='inside', textinfo='percent+label')
figura.show()
datosHombres = df[df["sexo_"]=="Masculino"]
SinNAhom = datosHombres[datosHombres["Grupo edad"]!='ERROR: #N/A']
SinNAhom.shape
tabla3 = datosHombres.groupby("def_naturaleza", as_index=False).size()
total3 = sum(tabla3["size"])
tabla3["Relativa"] = round (100*tabla3["size"]/total3, 2)
tabla3
barras3 = px.bar(tabla3, 
                 x="def_naturaleza",
                 y="Relativa",
                 color='Relativa',
                 title="Tipos de Violencia en los hombres",
                 labels={'Relativa':'% de Casos Reportados'},
                 text_auto=True,
                 width=900, height=700)
barras3.update_layout(xaxis={'categoryorder':'total descending'}) 
barras3.update_xaxes(showgrid=False, ticks="outside")
barras3.show()
tablahom = SinNAhom.groupby("Ciclo de vida", as_index=False).size()
total = sum(tablahom["size"])
tablahom["Relativa"] = round (100*tablahom["size"]/total, 2)
tablahom
grupo1 = SinNAhom[SinNAhom["Ciclo de vida"].isin(["Primera infancia", "Infancia", "Adolescencia"])]
tablahom1=grupo1.groupby(["Grupo edad",'def_naturaleza'], as_index=False).size()
tablahom1.head()
fig = px.bar(tablahom1, x="Grupo edad", y="size",
             color='def_naturaleza', barmode='group',
             title='Casos de violencia por edad y tipo',
             labels={'size':'Casos Reportados'},
             text_auto=True,
             height=600,width=1100)
fig.update_layout(xaxis={'categoryorder':'total descending'})
fig.show()
Negligencia = SinNA.loc[:, 'def_naturaleza'] == 'Negligencia y abandono'
df_Negligencia = SinNA.loc[Negligencia]
df_Negligencia.head()
tabla4 = df_Negligencia.groupby("Ciclo de vida", as_index=False).size()
total4 = sum(tabla4["size"])
tabla4["Relativa"] = round( 100*tabla4["size"]/total4, 2)
tabla4
barras4 = px.bar(tabla4,
                 x="Ciclo de vida", 
                 y="Relativa", 
                 color='Relativa',
                 title="Negligencia y abandono por edades",
                 labels={'Relativa':'% Casos Reportados'},
                 text_auto=True,width=800, 
                 height=400)
barras4.update_layout(xaxis={'categoryorder':'total descending'}) 
barras4.update_xaxes(showgrid=True, ticks="outside")
barras4.show()
tabla5 = df_Negligencia.groupby('sexo_', as_index=False).size()
total5 = sum(tabla5["size"])
tabla5["Relativa"] = round (100*tabla5["size"]/total5,2)
tabla5
figura = px.pie(df_Negligencia, 
                names="sexo_",
                title='Abandono y Negligencia por Genero', 
                width=700, height=500, 
                hole=0.3 ,
                color='sexo_', 
                color_discrete_sequence=px.colors.sequential.Blugrn ) 
figura.update_traces(textposition='inside', textinfo='percent+label')
figura.show()
df_Negligencia.iloc[:, [0,6,7,21]]  # Seleccion de columnas por sexo y parentezco de la victima
figura2 = px.pie(df_Negligencia, names="parentezco_vict",title='Victimario', width=700, height=600) 
figura2.update_traces(textposition='inside', textinfo='percent+label')
figura2.show()
SinNANegligencia = df_Negligencia[df["Tipo de Seguridad Social"]!='ERROR: #N/A']
SinNANegligencia.head()
figura3 = px.pie(SinNANegligencia,
                 names="Tipo de Seguridad Social",
                 title='Regimen de Salud', 
                 width=700, height=500) 
figura3.update_traces(textposition='inside', textinfo='percent+label')
figura3.show()