Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Dados de aprisionamento dos EUA: análise da rede, grafo e média.

0 votos
52 visitas
perguntada Dez 18, 2020 em Ciência da Computação por José Henriques Jr (1 ponto)  
Compartilhe

1 Resposta

0 votos
respondida Dez 18, 2020 por José Henriques Jr (1 ponto)  
editado Dez 18, 2020 por José Henriques Jr

Utilizaremos a base de dados “crime1” como objeto de estudo para a construção da nossa rede. A base foi construída a partir de dados empíricos de prisões nos EUA com N = 2725 dados individuais e transversais que fazem parte do livro “Introdução À Econometria: Uma Abordagem Moderna- Jeffrey M. Wooldrigge”. A base pode ser obtida através do seguinte endereço https://www.cengage.com/cgi-wadsworth/course_products_wp.pl?fid=M20b&product_isbn_issn=9780324581621&discipline_number=413 no formato XLSX no qual é possível importar os arquivos para Python utilizando a biblioteca Networkx.
Para analisarmos a rede utilizamos a biblioteca networkx e para a visualização utilizamos a biblioteca matplotlib.pyplot as plt.

import matplotlib.pyplot as plt
import networkx as nx
import pandas as pd

## Variáveis
Diretorio = './Input/'
DiretorioOutput = './Output/'
Arquivos_dados2 = 'crime1.xlsx'

Criando um gráfico de bolhas

Aqui iremos prosseguir agrupando dados para identificar quantos indivíduos estão em cada grupo. Após, agrupamos por etnia e por ter estado ao não na prisão Em seguida, a proporção de pessoas que já foram presas por grupo étnico é definida.

Tabela_total_grupo = Tabela2.groupby('group').size().reset_index(name='count')
Tabela_total_prision = Tabela2.groupby(['prision', 'group']).size().reset_index(name='count')
T = Tabela_total_prision.loc[3:5, 'count'].reset_index()
Tabela_total_grupo['ratio'] = T['count']/Tabela_total_grupo['count']

Logo em seguida iremos construir um gráfico de bolhas, sendo o tamanho das bolhas proporcional à participação de pessoas com passagem dentro de seu grupo étnico.

tamanho_grupo = [tamanho*100000 for tamanho in Tabela_total_grupo['ratio']]
plt.xlim([-1, 4])
plt.ylim([-0, 0.15])
plt.scatter(Tabela_total_grupo['group'], Tabela_total_grupo['ratio'], s=tamanho_grupo, c=["red", "blue", "gray"], alpha=0.7)
plt.savefig(Diretorio+'Particiapação_Etnia_Prisao.png')  # Salva a figura
plt.show()

A imagem será apresentada aqui.

Análise do tempo de prisão

Vamos criar uma variável “group” que categoriza "hispan", "black" and "other"

Tabela2.loc[Tabela2['black'] == 1, 'group'] = 1
Tabela2.loc[Tabela2['hispan'] == 1, 'group'] = 2
Tabela2.loc[(Tabela2['hispan'] == 0) & (Tabela2['black'] == 0), 'group'] = 3

Agora vamos criar uma variável “presion” que categoriza se o indivíduo já foi preso.

Tabela2.loc[Tabela2['tottime'] > 0, 'prision'] = 1
Tabela2.loc[Tabela2['tottime'] == 0, 'prision'] = 0

Criar uma variável que identifica a renda de quem já foi preso

Tabela2.loc[Tabela2['prision'] == 1, 'inc_prision'] = Tabela2['inc86']
Tabela2.loc[Tabela2['prision'] == 0, 'inc_prision'] = 0

grafo = nx.Graph()  # Inicia o grafo
grafo = nx.from_pandas_edgelist(Tabela2, source='tottime', target='group')
print(nx.info(grafo))  # Apresenta as informações do Graph

"""
Name: 
Type: Graph
Number of nodes: 115
Number of edges: 125
Average degree:   2.1739
“””
plt.figure(figsize=(20,20))  # Inicia a figura
posicao = nx.spring_layout(grafo, k=0.15)  # Posicione os nós usando o algoritmo direcionado à força de Fruchterman-Reingold

tempo_prisao = [key*150 for key, item in posicao.items()]  # Cria uma lista para individualiazr o tamanho dos nodes

Criando a rede considerando que os nodes tenham tamanhos proporcionais ao tempo de prisão associado.

nx.draw_networkx(grafo, posicao, node_size=tempo_prisao, node_color='cyan')
plt.savefig(Diretorio+'TempoPrisaoEtinia.png')  # Salva a figura
plt.show()  # Mostra a figura

A imagem será apresentada aqui.

Análise da renda

Agora iriemos analisar a renda dos indivíduos que foram presos

grafo_renda = nx.Graph()  # Inicia o grafo
grafo_renda = nx.from_pandas_edgelist(Tabela2, source='inc_prision', target='group')
print(nx.info(grafo))  # Apresenta as informações do Graph
plt.figure(figsize=(20,20))  # Inicia a figura
posicao_renda = nx.spring_layout(grafo_renda, k=0.15)  # Posicione os nós usando o algoritmo direcionado à força de Fruchterman-Reingold
renda = [key*100 for key, item in posicao_renda.items()]  # Cria uma lista para individualiazr o tamanho dos nodes

Precisamos criar a rede considerando que os nodes tenham tamanhos proporcionais a renda recebida pelos indivíduos que já foram presos.

nx.draw_networkx(grafo_renda, posicao_renda, node_size=renda, node_color='cyan')
plt.savefig(Diretorio+'RendaEtnia.png')  # Salva a figura
plt.show()  # Mostra a figura

A imagem será apresentada aqui.

Conclusão:

O objetivo do exercício foi verificar os pontos de contato entre o perfil de grupos étnicos que foram aprisionados até 1986.
O exercício mostrou que grupos étnicos com baixa representatividade dentro da amostra que no caso são grupos de pessoas pretas e hispânicas apresenta um percentual de aprisionamento maior de pessoas não pertencentes a esses grupos, por exemplo, quando nós olhamos para o grupo de pessoas hispânicas percebemos que aproximadamente 8% das pessoas foram aprisionadas em algum momento, podendo ser visto pelo gráfico de bolhas.

comentou Dez 18, 2020 por Fernando Fellows (16 pontos)  
Boa tarde, José. Não estou conseguindo abrir o link para download dos arquivos.

Outra coisa, aonde tem

"""
Name:
Type: Graph
Number of nodes: 115
Number of edges: 125
Average degree:   2.1739
“””

tem um misstype aí, finaliza com """ ao invés de “””. Pode ter sido na passagem do arquivo para o prorum.
Outra coisa, nos nodes de tempo de prisão e renda, vejo os três grupos bem distintos, mas existe uma dificuldade maior em identificar cada grupo (apesar de já ser esperado latinos e negros terem uma renda inferior e um tempo de prisão maior do que o grupo considerado "outros").
...