#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()