合作网络建模(1)

如上图,是我们在处理联合风投数据时常遇到的格式,但是可能我们更习惯于处理投资方放在同一行内的格式,为此我我写了一个简易的转换函数:

点击查看代码
def type_change( df1):
    '''
        用于转换数据格式类型,输入为dataframe格式,输出为list
        dataframe要求第一列是受资者,第二列是投资者
        投资者从分行格式的转为同一行
    '''
    a=[]
    x=[]
    i=0
    while i<len(df1)-1:
        if (df1.loc[i][0]==df1.loc[i+1][0]):
            x.append(df1.loc[i][1])
        elif (df1.loc[i][0]==df1.loc[i-1][0])&(df1.loc[i][0]!=df1.loc[i+1][0]):
            x.append(df1.loc[i][1])
            a.append(x)
            x=[]
        else:
            a.append([df1.loc[i][1]])
        i=i+1
    return a
导出列表后,接下来是提取节点列表与边列表来构建网络

节点列表:

点击查看代码
def get_nodes(co_list):                    #节点列表
    nodes_list = []
    for authors in co_list:
        auths = authors[0].split(",") # 分隔符
        for auth in auths:
            if auth not in nodes_list: # 去除重复
                nodes_list.append(auth)
    return nodes_list

边列表

点击查看代码
def get_edges(co_list,col=0):
    ''' (Newest)co_list: 二维列表/一维列表
        col: 节点所在列数,默认为第一列(仅二维列表用到此参数)
        返回值:边列表,[[企业1,企业2],...]
    '''
    edge_list = []
    num = 1
    for authors in co_list:
        length = len(authors)
        for i in range(length-1):
            for j in range(i+1,length):
                edge_list.append([authors[i],authors[j]])
    return edge_list

其实得到这两个表以后就足够建模了,个人认为算是最基础的网络建模,当然如果你的数据是处于一行内的话可以直接参考后面两个函数就OK,注意分隔符的差别进行改用

posted @ 2022-08-11 09:42  108再见  阅读(285)  评论(0)    收藏  举报