资源简介

共现矩阵生成python实现 包括源代码和打包好的exe
Co-occurrence_Matrix.exe 软件本体
data.csv 原始数据 上面让你准备的那个
node.csv 节点数据 (包含节点名称+词频数)
edge.csv 节点关系的三元组存储形式存储(包含两两节点关系+关系频数)
co_occurrence_matrix.csv 共现矩阵(稀疏矩阵形式)

资源截图

代码片段和文件信息

# encoding:utf-8
import datetime


def sortDictValueByme(dict is_reverse):
    ‘‘‘
    将字典按照value排序
    :param dict: 待排序的字典
    :param is_reverse: 是否按照倒序排序
    :return s: 符合csv逗号分隔格式的字符串
    ‘‘‘
    # 对字典的值进行倒序排序items()将字典的每个键值对转化为一个元组key输入的是函数item[1]表示元组的第二个元素reverse为真表示倒序

    tups = sorted(dict.items() key=lambda item: item[0] reverse=is_reverse)
    s = ‘‘
    for tup in tups:  # 合并成csv需要的逗号分隔格式
        s = s + tup[0] + ‘‘ + str(tup[1]) + ‘\n‘
    return s


def get_Co_authors(filePath):
    ‘‘‘
    读取csv文件获取作者信息并存储到列表中
    :param filePath: csv文件路径
    :return co_authors_list: 一个包含所有作者的列表
    ‘‘‘
    # 设置编码为utf-8-sig防止首部\ufeff的出现它是windows系统自带的BOM用于区分大端和小端UTF-16编码
    with open(filePath ‘r‘ encoding=‘utf-8-sig‘) as f:
        text = f.read()
        co_authors_list = text.split(‘\n‘)  # 分割数据中的换行符‘\n‘两边的数据
        # print(co_authors_list)
        co_authors_list.remove(‘‘)  # 删除列表结尾的空字符
        return co_authors_list


def str2csv(filePath s):
    ‘‘‘
    将字符串写入到本地csv文件中
    :param filePath: csv文件路径
    :param s: 待写入字符串(逗号分隔格式)
    ‘‘‘
    with open(filePath ‘w‘ encoding=‘utf-8‘) as f:
        f.write(s)
    print(‘写入文件成功请在‘ + filePath + ‘中查看‘)


def sortDictValue(dict is_reverse):
    ‘‘‘
    将字典按照value排序
    :param dict: 待排序的字典
    :param is_reverse: 是否按照倒序排序
    :return s: 符合csv逗号分隔格式的字符串
    ‘‘‘
    # 对字典的值进行倒序排序items()将字典的每个键值对转化为一个元组key输入的是函数item[1]表示元组的第二个元素reverse为真表示倒序
    tups = sorted(dict.items() key=lambda item: item[0] reverse=is_reverse)
    s = ‘‘
    for tup in tups:  # 合并成csv需要的逗号分隔格式
        s = s + tup[0] + ‘‘ + str(tup[1]) + ‘\n‘
    return s


def build_matrix(co_authors_list is_reverse):
    ‘‘‘
    根据共同作者列表构建共现矩阵(存储到字典中)并将该字典按照权值排序
    :param co_authors_list: 共同作者列表
    :param is_reverse: 排序是否倒序
    :return node_str: 三元组形式的节点字符串(且符合csv逗号分隔格式)
    :return edge_str: 三元组形式的边字符串(且符合csv逗号分隔格式)
    ‘‘‘
    node_dict = {}  # 节点字典包含节点名+节点权值(频数)
    edge_dict = {}  # 边字典包含起点+目标点+边权值(频数)
    # 第1层循环遍历整表的每行作者信息
    for row_authors in co_authors_list:
        row_authors_list = row_authors.split(‘‘)  # 依据‘‘分割每行所有作者存储到列表中
        # filter(None row_authors_list)
        while ‘‘ in row_authors_list:
            row_authors_list.remove(‘‘)
        # print(row_authors_list)

        # 第2层循环遍历当前行所有作者中每个作者信息
        for index pre_au in enumerate(row_authors_list):  # 使用enumerate()以获取遍历次数index
            # 统计单个作者出现的频次
            if pre_au not in node_dict:
                node_dict[pre_au] = 1
            else:
                node_dict[pre_au] += 1
            # 若遍历到倒数第一个元素则无需记录关系结束循环即可
            if pre_au == row_authors_list[-1]:
                break
            connect_list = row_authors_list[index + 1:]
            # 第3层循环遍历当前行该作者后面所有的合作者以统计两两作者合作的频次
            for next_au in connect_list:
                A B = pre_au next_au
                # 固定两两作者的顺序
                if A > B:
                    A B = B A
                key = A + ‘‘ + B  # 格式化为逗号分隔AB形式作为字典的键
                # 若该关

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-11-27 09:35  共现矩阵\
     文件     6579035  2019-11-26 23:36  共现矩阵\Co-occurrence_Matrix.exe
     文件        8108  2019-11-27 09:35  共现矩阵\Co-occurrence_Matrix.py
     文件        1352  2019-11-27 09:34  共现矩阵\co_occurrence_matrix.csv
     文件         269  2019-11-27 09:09  共现矩阵\data.csv
     文件         944  2019-11-27 09:34  共现矩阵\edge.csv
     文件         315  2019-11-27 09:34  共现矩阵\node.csv
     文件      575179  2019-11-27 09:31  共现矩阵\操作说明.docx

评论

共有 条评论