Você está na página 1de 3

ICE 21/22 2º semestre

Trabalho Prático 1

Análise de Redes Sociais


(publicado na 2ª feira, 4 de abril; entrega até domingo, 1 de maio, às 23:59)

1. Introdução
A análise de redes sociais é um tópico de estudo importante permitindo obter informação de vários tipos, tais
como o tráfego gerado na net (número de acessos), número de críticas (“likes”), agentes mais populares
(“influencers”) , etc. Existem vários tipos de análise que podem ser feitas, mas neste trabalho vamos apenas
estudar uma relação que se pode estabelecer entre os agentes de uma rede: graus de amizade.
Vamos assumir que os agentes são indicados por um inteiro. Neste contexto, quando um agente ai pede amizade
a um agente aj (e este aceita), então ai fica a ser um amigo direto do agente aj, o que denotaremos por ai,j = 1,
ou equivalentemente que ai é amigo1 de aj. Por outro lado, se ai não é amigo1 de aj, mas se é amigo1 de um
agente am, que por sua vez é amigo1 de aj, então ai fica a ser amigo2 do agente aj. Estes exemplos podem
generalizar-se na seguinte definição indutiva:
Um agente ai é amigoi de um agente aj (i.e. gi,j = i) se:
a) ai é amigo0 de si próprio (gi,i = 0)
b) ai é amigo1 de um agente aj (gi,j = 1) se existe uma relação de amizade direta de ai para aj.
c) ai é amigok de um agente aj se for amigop de um agente am, que é amigoq de aj, se k = p + q e não existir
nenhum outro agente an que induza uma relação de amizade menor, i.e.
1. gi,j = gi,m + gm,j ; e
2. Para qualquer agente an, gi,n + gn,j >= gi,j
d) Se as condições acima não se verificarem, então ai não é amigo em qualquer grau de aj, o que
convencionamos denotar por gi,j = -1.
A rede seguinte pode servir para ilustrar esta relação: a0
• O agente a0 é amigo1 do a1, e vice-versa (g0,1 = g1,0 = 1)
• O agente a0 é amigo1 de a2, mas a2 é apenas amigo2 de a0 ( é amigo1 de a1
a1 a2
que é amigo1 de a0).
a3
• O agente a0 é amigo3 de a5, mas a5 não é amigo de a0 (i.e. g5,0 = -1).
• O agente a3 não tem amigos (exceto ele próprio, g3,3 = 0).
• Todos os agentes são amigos em algum grau (>0) de a5, mas a5 não é amigo a4 a5

de ninguém.
R = [
[0,1,1,0,0,0],
[1,0,1,0,1,0],
Neste trabalho pretende-se determinar o grau de amizade entre agentes de [0,1,0,0,0,0],
uma rede que é especificada como uma matriz quadrada R, em que o [1,1,1,0,1,1],
elemento Ri,j indica se o agente ai é amigo1 de aj. Os agentes são numerados [0,1,0,0,0,1],
de 0 a n-1 em que n é o número de agentes da rede. Por exemplo a rede [0,0,0,0,0,0]
acima é especificada pela matriz: ]

Naturalmente a amizade entre 2 agentes é tanto mais forte quanto menor for o seu grau de amizade (não
consideramos “auto-amizades”, i.e. só consideramos graus de amizade maiores que 0). Podemos associar um
peso a cada grau de amizade (maior para graus de amizade mais diretos) e determinar a popularidade de um
agente ai agregando os graus de amizade gj,i de todos os outros agentes em relação a ai.

2021/22 - 2º semestre Trabalho Prático #1 de ICE 1 /3


2. Objetivo
Mais especificamente deverá implementar as funções com as assinaturas indicadas abaixo.

2.1 Densidade da Rede


Determinar a densidade de uma rede social medida através da razão entre as ligações de amizade direta
existentes na rede (representada por uma matriz R), e todas as potenciais ligações de amizade entre agentes
(excluindo as auto amizades)
def....
se x>0/x=0 R=[] depois dividir
def densidade_de(R):
for i in R:
No caso da rede indicada teremos: if i>x:
densidade_de(R) ® 0.433 = 13 / 30 soma
if=0
já que existem 13 ligações de amizade direta de um possível total de 30 (5*6) soma

2.2 Equilíbrio da Rede


Determinar o equilíbrio de uma rede social medida através da fração de ligações de amizade direta bidirecionais
em relação ao total de ligações de amizade direta (as relações bidirecionais apenas contam como 1 ligação).
def equilíbrio_de(R):
No caso da rede indicada teremos:
equilibrio_de(R) ® 0.3 = 3 / 10
já que existem 13 ligações de amizade direta sendo as 3 bidirecionais (a0 « a1, a1 « a2 e a1 « a4) contadas apenas
uma vez.

2.3 Graus de Amizade


Calcular os graus de amizade para com um agente a na rede R
def amigos_de(a, R):
Dada uma rede representada pela matriz R, deve retornar uma lista A com o grau de amizade de todos os
agentes em relação ao agente a, em que A[i] representa o grau de amizade do agente i em relação ao agente a,
determinados como explicado anteriormente. Note que a rede R pode ser qualquer matriz quadrada de
dimensão N x N, preenchida com 0s e 1s, em que todos os elementos R[i][i] são 0s (“auto amizade”). O
argumento a deve ser um inteiro entre 0 e N-1.
No caso da rede R anterior teremos:
amigos_de(0,R) ® [ 0, 1, 2, 1, 2,-1]
amigos_de(1,R) ® [ 1, 0, 1, 1, 1,-1]
amigos_de(2,R) ® [ 1, 1, 0, 1, 2,-1]
amigos_de(3,R) ® [-1,-1,-1, 0,-1,-1]
amigos_de(4,R) ® [ 2, 1, 2, 1, 0,-1]
amigos_de(5,R) ® [ 3, 2, 3, 1, 1, 0]
Sugestão: Dado um inteiro a (entre 0 e N-1, inclusive), determine todos os seus amigos i de grau 1 e registe esse
valor nas posições A[i]. Determine depois os amigos de grau 2, e assim por diante até ao grau N-2. Note que
pode não ser possível terminar este procedimento antes de atingir o grau N-2.

2.4 Popularidade
A popularidade de uma agente depende não apenas dos amigos que tem, como também do seu grau de
amizade. Para cada grau de amizade é definido um peso que tem o valor 0 para os graus de amizade 0 (auto
amizade) e -1 (não amizade). Para cada um dos outros graus, o seu valor será 1/d, em que d é a soma dos inteiros
desde 1 até ao grau de amizade considerado.

2021/22 - 2º semestre Trabalho Prático #1 de ICE 2 /3


2.4.1 Defina uma função com assinatura
def peso_de(g):
que dado um grau de amizade retorna o respetivo peso. Por exemplo,
peso(1) ® 1/1 ; peso(2) ® 1/1+2 ; peso(3) ® 1/1+2+3 ; ...

2.4.2 Especifique uma função de popularidade de um agente


def popularidade_de(a, R):
sendo a popularidade definida pela soma pesada dos graus de amizade de todos os outros agente para com a.
Por exemplo, assumindo para a rede R anterior teremos:
popularidade_de(0,R) ® 2.666 = 2 * 1 + 2 * 1/1+2
popularidade_de(1,R) ® 4.0 = 4 * 1
popularidade_de(2,R) ® 3.333 = 3 * 1 + 1 * 1/1+2
popularidade_de(3,R) ® 0.0
popularidade_de(4,R) ® 2.666 = 2 * 1 + 2 * 1/1+2
popularidade_de(5,R) ® 2.666 = 2 * 1 + 1 * 1/1+2 + 2 * 1/1+2+3

2.5 Popularidades na Redes


Especifique a função abaixo
def popularidades_na_rede(R):
que retorna um triplo com, respetivamente, a popularidade máxima de algum agente na rede R, a popularidade
média dos agentes com popularidade positiva e a popularidade mínima dos agentes com popularidade positiva.
popularidades_na_rede(R) ® (4.0, 3.066, 2.666)

2.6 Populares na Rede


Especifique a função abaixo
def populares_na_rede(R):
que retorna um triplo com, respetivamente, a lista de agentes com maior popularidade, a lista de agentes com
popularidade mínima (mas positiva) e a lista de agentes isolados (i.e. com popularidade nula).
populares_na_rede (R) ® ([1], [0, 4, 5], [3])

3. Notas Finais
1. O trabalho deve ser feito em grupos de 2 alunos.
2. Cada grupo deverá entregar um ficheiro com as funções implementadas (idealmente serão as 6 funções,
mas podem não implementar alguma – com a correspondente penalização na nota). Atenção que as
funções deverão ter a assinatura exatamente igual à que é pedida, nomeadamente os nomes das
funções devem ser em minúsculas e não devem ter quaisquer acentos.
3. A entrega do trabalho deverá ser feita seguindo as instruções indicadas em separado.
4. As funções implementadas deverão ser testadas o mais exaustivamente possível, e no mínimo com os
exemplos no enunciado (e outros fornecidos)
5. A classificação do trabalho tem em conta não só a correção do código das funções, mas também a
qualidade do código apresentado, nomeadamente a sua estrutura e facilidade de leitura, medida em
aspetos como a documentação das funções pedidas, a escolha do nome das variáveis utilizadas e a
decomposição adequada dos problemas.
6. Este trabalho cobre a matéria dada sobre funções, listas e vetores, ciclos e condições. Além do material
das aulas, a documentação do Python e o livro de texto serão boas fontes para estudar o que precisam
para resolver estes problemas.

2021/22 - 2º semestre Trabalho Prático #1 de ICE 3 /3

Você também pode gostar