GooSeeker共词矩阵excel怎样转换成Gephi支持的csv格式

2022-7-28 12:04| 发布者: Fuller| 查看: 4052| 评论: 0

摘要: Gephi支持相当多的输入格式,GooSeeker共词矩阵是一种邻接矩阵,可直接导入Gephi,不用转换。那么,本notebook仅仅是为了练习Python编程,练习输入文件格式转换,并熟悉Gephi的输入数据格式。 ...

1  介绍

【注意】Gephi支持相当多的输入格式,GooSeeker共词矩阵是一种邻接矩阵,可直接导入Gephi,不用转换。那么,本notebook仅仅是为了练习Python编程,练习输入文件格式转换,并熟悉Gephi的输入数据格式。

本notebook重点讲解怎样转换成Gephi要求的csv格式的边列表输入数据。

同学们对文本内容进行分词以后,可以基于词和文档的关系做很多计算,其中比较常做的计算是共词分析。GooSeeker文本分词和情感分析软件能够导出共词矩阵表,是Excel格式的矩阵,是一种邻接矩阵,如果要变成edge list格式,需要逐行逐列进行循环。

Gephi官网用一个关系图展示了所支持的输入数据格式,该图如下:

其中,如果导入csv文件,还有多种节点和边的描述格式,参看官网上csv格式介绍,罗列如下:

  • Edge List
  • Adjacency List
  • Mixed
  • Matrix
  • Edge weight 
其中,GooSeeker共词矩阵导出的格式直接对应Matrix类型。

本Notebook假设要给Gephi导入更复杂的Edge List格式,包含三个明确的字段:

  • Source
  • Target
  • Weight 
那么,本Notebook通过python程序,将Matrix格式转换成这种边列表格式。其实还可以加更多字段,让生成的graph内容更加丰富,这也是Edge List格式的优点,因为在邻接矩阵中每个单元格存一个数字,就再没有其他位置存更多信息了。

本notebook是一个系列中的一篇,这个系列讲解Gephi的使用方法。此前已经发布了几篇和Gephi相关的文章,如下:

  1. 社会网络可视化分析方法探索—Gephi分析工具的下载和安装
  2. Gephi案例分享:基于社会网络分析的网络公益信息传播研究——以微博为例
  3. Gephi社会网络分析数据的批量生成和导入

2  怎样获取用于Gephi社会网络分析的互联网数据

很多搞研究的同学,都在使用下面这个流程或者其中的一部分,来获取研究所需的数据:

图2. 获取数据流程

2.1  互联网社交数据的采集

微博目前是研究社会舆情和人群特征的重要数据源,很多毕业设计论文是在挖掘微博内容后写成的,很多同学使用集搜客微博采集工具箱来采集微博博文,博主信息,微博评论和转发,博主粉丝和关注者,微博话题搜索等。

图3. 微博采集工具箱

2.2  文本分词和情感分析

很多同学在采集得到互联网社交数据后,导入GooSeeker分词和文本分析软件对文本内容进行初步加工,然后可以建立多种分析模型,比如计算相似度、进行分类或者聚类、做回归计算、基于共现词做图分析和度分析等等。

图4. GooSeeker分词软件导出共词矩阵表

2.3  数据格式问题

从分词工具导出的共词矩阵是excel格式的邻接矩阵,看下图,行与列的交叉点表示两个节点的邻接关系。在共词矩阵中,这个数字表示两个词同时出现的文档数量。

图5. 共词矩阵截图

如果想把共词矩阵转换成Gephi的Edge List格式,最少需要包含边的Source和Target,表示图中的边的起点和终点。下图是把Edge List导入Gephi的截图

图6. Gephi导入csv文件

2.3.1  使用什么工具进行数据格式转换?

python下有很多功能强大的内置库和第三方库,可以借助这些工具进行各种数据的处理,比如:文本,时间日期,数字等。

我们今天使用的Pandas是一个很好用的工具。Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 是Python数据分析实践与实战的必备高级工具。

Pandas 适用于处理以下类型的数据:

  • 与 SQL 或 Excel 表类似的,含异构列的表格数据;
  • 有序和无序(非固定频率)的时间序列数据;
  • 带行列标签的矩阵数据,包括同构或异构型数据;
  • 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。

在前一周的notebook中,我们对GooSeeker网络爬虫软件采集到的商品参数结构,在notebook中使用Pandas做多个数据表的合并。从那里可以体会到使用notebook的特点:第一,可以交互式探索;第二,探索过程自然而然地记录在notebook中。

本nonotebook会读取GooSeeker分词和文本分析软件输出的微博文本共词矩阵表,转换成Gephi所需的边数据csv格式文件。

3  本Notebook适应的场景

本模板根据GooSeeker分词和文本分析软件输出的微博文本共词矩阵表,在python中使用Pandas打开excel表,进行格式转换后保存为Gephi支持的可导入csv文件。

3.1  使用方法

基本操作顺序是:

  1. 使用GooSeeker分词和文本分析软件进行共词矩阵分析,导出共词矩阵表。
  2. 将导出的共词矩阵excel表放在本notebook的data/raw文件夹中
  3. 从头到尾执行本notebook的单元
  4. 转换后Gephi需要的csv文件保存在data/processed文件夹中

注意:每个notebook项目目录都预先规划好了,具体参看Jupyter Notebook项目目录规划参考。如果要做多个分析项目,把整个模板目录专门拷贝一份给每个分析项目。

4  运行环境的搭建

如何快速搭建运行本Notebook需要的环境?最简单的方法是下载安装Anaconda,这是一个python集成环境,常用的库都配套好了。

5  数据源

本Notebook用来演示的数据是微博采集工具箱微博评论采集工具采集的微博评论数据。供参考和实验。

6  修改历史

2022-07-15:第一版发布

7  版权说明

本notebook是GooSeeker大数据分析团队开发的,所分析的源数据是微博采集工具箱的微博评论采集工具采集的,本notebook中的数据和代码可自由共享使用,包括转发、复制、修改、用于其他项目中。

8  准备程序环境

导入必要的Python程序包,设定要分析的文件名变量。使用以下变量对应GooSeeker分词软件导出的共词矩阵表:

  • file_coword_matrix:共词矩阵表

【编程细节】本节下面的代码将对上述共词矩阵表表名变量赋值

import pandas as pd

import os

import datetime

import re

import csv

%xmode Verbose

import warnings

warnings.filterwarnings("ignore", category=DeprecationWarning)

# 存原始数据的目录

raw_data_dir = os.path.join(os.getcwd(), '../../data/raw')

# 存处理后的数据的目录

processed_data_dir = os.path.join(os.getcwd(), '../../data/processed')

filename_temp = pd.Series(['共词矩阵'])

file_coword_matrix = ''

输出结果:

Exception reporting mode: Verbose

9  检测data\raw目录下是否有共词矩阵表

# 0:'微博评论'

print(raw_data_dir + '\r\n')

for item_filename in os.listdir(raw_data_dir):

    if filename_temp[0] in item_filename:

        file_coword_matrix = item_filename

        continue

if file_coword_matrix:

    print("共词矩阵excel表:", "data/raw/", file_coword_matrix)

else:

    print("共词矩阵excel表:不存在")

输出结果:

C:\Users\work\workspace\notebook\GooSeeker共词矩阵excel怎样转换成Gephi支持的csv格式\notebook\eda\../../data/raw

共词矩阵excel表: data/raw/ 共词矩阵_胡锡进关键词_名词动词_202206221647322370.xlsx

10  读取共词矩阵表

以下演示以从GooSeeker分词和文本分析软件导出的共词矩阵表数据excel表为例,需要把excel表放到本notebook的data/raw文件夹下

df = pd.read_excel(os.path.join(raw_data_dir, file_coword_matrix))


10.1  查看excel表的前5行

df.head(5)

输出结果:

11  生成列名数组

【注意】下面的python代码并不是最优的,目的是为了用最直白的方法讲解转换过程,实际使用的时候,应该选择更优的函数。比如,下面生成列数组,是可以直接使用Pandas的提取列关键字的函数的。

#生成列名数组

afield = []

for column in df.columns:

    afield.append(column)

#列名数组的长度

afield_len = len(afield)

12  存csv文件

12.1  要写入的csv文件名

file_coword_matrix_output = 'output_' + file_coword_matrix + '.csv'

12.2  把共词矩阵数据转换成Gephi需要的一条条边数据

每2个词当作1条表的Source和Target,共现的次数当作边的权重(Weight)。

共词矩阵应该当成无向图进行处理,邻接矩阵是一个对称矩阵,只需要上三角或者下三角的内容即可,所以,下面只取上三角的内容构造edge list

with open(os.path.join(processed_data_dir, file_coword_matrix_output),'w',newline='') as file:

    writer = csv.writer(file)

    writer.writerow(["Source","Target","Weight"])

    for row in df.index:

        for column in df.columns:

            column_num = afield.index(column)

            if column_num >= row + 2:

                print(afield[row+1],afield[column_num],df.loc[row][column])

                writer.writerow([afield[row+1],afield[column_num],df.loc[row][column]])

12.3  关闭文件

file.close()

13  使用文件

生成的文件放在data/processed文件夹,找到后导入到Gephi,就可进行图分析。导入过程要注意以下两点:

1. 设定正确的字符集

上面的转换过程,完成以后存入csv并没有指定字符集,那么,如果在windows下运行,会存成GB2312字符集。如果加载到Gephi中,中文可能显示为乱码,就要选择正确的字符集,如下图:

图7. 选择正确的字符集

2. 导入生成无向图

如下图,选择无向图导入

图8. 选择导入无向图

14 下载本Notebook

下载源代码请进入:将GooSeeker共词矩阵转换成Gephi支持的csv格式


鲜花

握手

雷人

路过

鸡蛋

最新评论

GMT+8, 2024-11-21 19:52