Я создаю модель, чтобы увидеть, как элемент кортежа перебирает другие кортежи в списке.
Для экземпляра
EmployerEmployeeEdges = [(12,a), (12,c), (12,d), (14,e), (14,a), (13, a), (13,b), (13,d), (13,c), (16,b),(16,b) ]
Цель состоит в том, чтобы сопоставить, например, скажем, 12 в кортеже с 1 по 12 в кортеже 2 и, если они соответствуют числу.Матч считается «Ссылка».Мне нужно положить количество этих ссылок в матрицу.
Например:
a b c d e
a 0 1 2 2
b 0
c 1 0 0
d 0 0
e 1 0
У меня есть следующий код
from collections import defaultdict
импорт панд как pd импорт numpy как np из itertools импортные комбинации из коллекций import Counter import numpy asnp import scipy.sparse as ss np.seterr (split = 'ignore', invalid = 'ignore')
тестовые данные
year= [2001, 2002, 2002, 2005, 2002, 2004, 2001, 2001, 2002, 2003, 2003, 2002, 2004, 2005, 2003, 2004, 2005, 2004, 2004, 2002, 2001, 2001]
indviduals= [12, 23, 12, 24, 28,30, 15, 17, 18, 18, 19, 12, 15, 12, 12, 12, 15, 15, 15, 12, 12, 15, 200, 200]
employers= ['a', 'b', 'b','c', 'd', 'e', 'a', 'a', 'b', 'b', 'c', 'b', 'a', 'c', 'e', 'a', 'a', 'a', 'a', 'b', 'a', 'a', 'b']
employerEmployeeEdges=[]
for j in np.unique(year):
"""generates the count of employees per employer per year"""
#print("year",j)
d = dict.fromkeys(employers, ())
cond_year = j
for i,e,y in zip(indviduals, employers, year):
if y == cond_year:
d[e] = d[e] + (i,)
#print(d, [len(v) for k, v in d.items()]) # if I want to print all the employers and employee per year
for k, v in d.items():
if len(v)>1:
"""I am gonna have to ignore if there are no values for that specific employer.
Zero employees means nothing for that year"""
#print(j,k)
for item in v:
#print(item, "item")
#print(j, item, k)
edges = (item, k)
edges=edges
#print(edges, type(edges))
employerEmployeeEdges.append(edges) # create a list of employees employer edge for all years
print("employees employer edges", [i for i in employerEmployeeEdges]) # list of possible links between employee and employer
employersNew=[i[1] for i in employerEmployeeEdges]
# print("dfd",employersNew)
n = len([i[1] for i in employerEmployeeEdges])
Q = np.zeros((n, n), dtype=int)
for firstLink in employerEmployeeEdges:
for secondLink in employerEmployeeEdges[1:]: #potential second link where the combination is possible.
if firstLink[0]==secondLink[0]:
print(firstLink[1], secondLink[1])
# # print(firstLink, secondLink)
# # break
# from_node, to_node=firstLink[1],secondLink[1] #check where did the employee go?
# indx, jdx= employersNew.index(from_node), employersNew[1:].index(to_node)
# Q[indx, jdx]=0
# print(Q)
# #print(len(employerEmployeeEdges))
# #print(Q)
Этот вывод не даст мне желаемого результата.Как бы я подсчитал количество ссылок на матрице?
Далее, я хочу использовать Матрицу Q для вычисления вероятности следующим образом:
# P=np.empty((n,n))
# #print(P)
# for i in range(n):
# #print(i)
# P[i, :] = Q[i, :] / Q[i, :].sum()
# #print(P)