Open Tomorrowdawn opened 2 months ago
关于GraphGenerator的预期行为和逻辑
class GraphGenerator: def init(self, proposals: pd.DataFrame, members: pd.DataFrame, votes: pd.DataFrame):
外部预期表现: 根据 输入参数 内含的 meeting 的数据(102-116的编号),将数据集划分为15个 meeting 所属,并根据每个 meeting对应的数据生成该 meeting 对应的 1个 DGLGraph; 对于 g_list = gen[start:end] 这样的访问, g_list 将会是一个元素为 DGLGraph 的 List
由于meeting_id是时序的,同一个meeting里面每个人表决的bill数量是不同的
对于每次会议的votes部分 新建一个列把meeting_id从bill_name种独立出来,然后每个meeting的数据生成一个子图,总共15个子图, 维护一个 num_bills X num_members的矩阵,初始化为-inf 对于每项 bill, 如果对应的member, 投票为 y +1, 为 n -1, 为 nv +0,
然后最后得到一个该次会议的投票矩阵,用这个矩阵去算这次会议的成员之间的 投票部分的相似度
m_copy = m
mask = m==-inf
m_copy[mask]=0
sum m_copy
然后关于meetingnum * billnum * member的大矩阵 meeting就按 102-116的编号 从0-14 bill 先按meeting_id 排序 再按字典序 全部转换成0开始的数字下标 member 直接按 id 字典序 没问题吧 全部转换成0开始的数字下标
除此以外,还要补充proposal部分的 edge_weight 信息
网络中重要节点/关系Inspecter: relation.py class RelaAnaly(object): def init(self,G) 输入为DGL图,需要有边权值、节点相关信息 调用class内函数可返回各类度量指标,具体功能注释内已详细说明 已补充简单测试样例,可直接运行
relation.txt 没权限,这么给下代码吧
关于GraphGenerator的预期行为和逻辑
class GraphGenerator: def init(self, proposals: pd.DataFrame, members: pd.DataFrame, votes: pd.DataFrame, start_time, window_size, window_step):
外部预期表现: 根据 start_time, window_size, window_step 三项参数,将数据集划分为若干窗口(窗口之间可能有部分区域重叠),并根据每个窗口内部的数据生成该窗口对应的 1个 DGLGraph; 对于 g_list = gen[start:end] 这样的访问, g_list 将会是一个元素为 DGLGraph 的 List
内部大致实现逻辑: 单个DGLGraph的生成策略可以分成 3个环节(步骤): 1.根据输入的参数,生成一个大的graph和权重表(这应该是一个[T,E]大小的tensor) 2.根据访问参数的对应窗口,调用mask和权重表得到该窗口对应的 subgraph 3.根据 threshold 确定subgraph哪些边被保留,权重低于 threshold 的边被删去,大于threshold的边及其权重被保留
大的graph和权重表实现: (待细化)
mask实现: (待细化) 根据窗口内部数据确定该窗口对应的 所有节点间的窗口内权重(边权重)
relation.txt 没权限,这么给下代码吧
请把邮箱发给我, 我给你拉进collaborator
关于GraphGenerator的预期行为和逻辑
class GraphGenerator: def init(self, proposals: pd.DataFrame, members: pd.DataFrame, votes: pd.DataFrame):
外部预期表现: 根据 输入参数 内含的 meeting 的数据(102-116的编号),将数据集划分为15个 meeting 所属,并根据每个 meeting对应的数据生成该 meeting 对应的 1个 DGLGraph; 对于 g_list = gen[start:end] 这样的访问, g_list 将会是一个元素为 DGLGraph 的 List
由于meeting_id是时序的,同一个meeting里面每个人表决的bill数量是不同的
对于每次会议的votes部分 新建一个列把meeting_id从bill_name种独立出来,然后每个meeting的数据生成一个子图,总共15个子图, 维护一个 num_bills X num_members的矩阵,初始化为-inf 对于每项 bill, 如果对应的member, 投票为 y +1, 为 n -1, 为 nv +0,
然后最后得到一个该次会议的投票矩阵,用这个矩阵去算这次会议的成员之间的 投票部分的相似度
m_copy = m mask = m==-inf m_copy[mask]=0 sum m_copy
然后关于meetingnum billnum member的大矩阵 meeting就按 102-116的编号 从0-14 bill 先按meeting_id 排序 再按字典序 全部转换成0开始的数字下标 member 直接按 id 字典序 没问题吧 全部转换成0开始的数字下标
除此以外,还要补充proposal部分的 edge_weight 信息
generator需要提供一个get_num_nodes, 以及g.ndata['vote'],g.ndata['vote'] 指的是每个节点上的 vote 数据
subgraph 需要手动加 add_self_loop,并对边权重进行 edge norm
迭代需要返回subgraph_meeting 和 subgraph_bills,subgraph_bills是个字典,包含了sponsors和cosponsors
目前需要完成的代码部分: