许多网络数据都保存为.gml格式的文件,可以使用Gephi软件进行读取,但是这样可能会有点麻烦,所以可以考虑使用matlab程序进行网络数据的格式转换,gml数据类似json格式,使用正则表达式进行数据的转换即可,可以使用如下代码。

function AdjGraphMat = gmlread(fileName)
% ReadMe:
% 功能:此函数用于读取gml格式的网络数据文件
% 参数列表:只有一个传入参数,参数为文件名
% 返回参数为邻接矩阵%% 读取文本,打开文件并创建文件句柄fid
fid = fopen(fileName);
%% 将文本的Ascii码内容存为stringAsc
stringAsc = fread(fid)';
%% 关闭文件句柄
fclose(fid);
%% 将Ascii码转化为字符串形式
string = char(stringAsc);
%% 正则表达式,解析json格式的gml图数据
%% 此文件数据是否为有向图
isDirect = ~isempty(regexp(string,'directed 1\n','once'));
%% ----------------------1.节点------------------------
%% 设置node节点的字段匹配模式
patternNode = 'node[^a-z].*?]';
[strStart,strStop] = regexp(string,patternNode);
%% 设定节点的结构体及其数据成员的属性
stringTmp = string(strStart(1):strStop(1));
if isempty(regexp(stringTmp,'label', 'once'))isLabel = 0;nodeList(1:length(strStart)) = struct('id',[]);
elseisLabel = 1;nodeList(1:length(strStart)) = struct('id',[],'label',[]);
end
for i = 1 : length(strStart)stringTmp = string(strStart(i):strStop(i));[strStartTmp,strStopTmp] = regexp(stringTmp,'id [0-9]+\n');nodeList(i).id = str2double(stringTmp(strStartTmp+3:strStopTmp-1));if isLabel[strStartTmp,strStopTmp] = regexp(stringTmp,'label ".*"\n');nodeList(i).label = stringTmp(strStartTmp+7:strStopTmp-2);end
end
%% ----------------------2.边------------------------
%% 设置edge边的字段匹配模式
patternEdge = 'edge[^a-z].*?]';
[strStart,strStop] = regexp(string,patternEdge);
%% 设定边的结构体及其数据成员的属性
edgeList = zeros(length(strStart),2);
for i = 1 : length(strStart)stringTmp = string(strStart(i):strStop(i));[strStartTmp,strStopTmp] = regexp(stringTmp,'source [0-9]+\n');edgeList(i,1) = str2double(stringTmp(strStartTmp+7:strStopTmp-1));[strStartTmp,strStopTmp] = regexp(stringTmp,'target [0-9]+\n');edgeList(i,2) = str2double(stringTmp(strStartTmp+7:strStopTmp-1));
end
%% 构建邻接矩阵
AdjGraphMat = zeros(length(nodeList));
for i = 1 : length(edgeList)AdjGraphMat(edgeList(i,1)+1-nodeList(1).id,edgeList(i,2)+1-nodeList(1).id) = 1;if isDirect == 0AdjGraphMat(edgeList(i,2)+1-nodeList(1).id,edgeList(i,1)+1-nodeList(1).id) = 1;end
end
%% 稀疏矩阵写表
xlswrite([fileName(1:end-4) '.xlsx'],edgeList)
%% 邻接矩阵写.mat
save([fileName(1:end-4) '.mat'],'AdjGraphMat','edgeList')
end
% ReadMe:
% 功能:此函数用于,使用另一个执行函数,对数据集总目录下的所有文件分目录,分别运行
% 其各自的数据,并将各自的运行结果保存到分目录,以便一步运行所有数据集%% 设置需要执行的函数句柄
fun = @gmlread;
%% 设置数据集总目录位置
filesDir = [pwd '\数据集\社区发现数据集'];
%% 判断目录是否存在
if exist(filesDir,'dir') ~= 7disp('文件目录不存在,请检查核对目录');return;
end
%% 列出数据集总目录下的所有数据集分目录
filesInDir = dir(filesDir);
%% 将压缩包等非目录文件删去,只留下目录文件夹
isDir = zeros(length(filesInDir),1);
for i = 1 : length(filesInDir)isDir(i) = filesInDir(i).isdir;
end
filesInDir(isDir==0)=[];
%% 对每个数据集的分目录,执行函数运算
for i = 3 : length(filesInDir)fileName = [filesInDir(i).folder '\' filesInDir(i).name '\' filesInDir(i).name '.gml'];fun(fileName);
end

使用matlab读取gml网络数据相关推荐

  1. MATLAB 爬取网络数据

    MATLAB 爬取网络数据 第一步:申请数据 第二步:观察并简化数据 第三步:提取信息 by HPC_ZY 第一步:申请数据 以优酷为例 url='https://www.youku.com/'; % ...

  2. MATLAB读取写入文本数据最佳方法 | Best Method for Loading Saving Text Data Using MATLAB

    MATLAB读取文件有很多方法.然而笔者在过去进行数据处理中,由于函数太多,相互混杂,与C#,Python等语言相比,反而认为读取文本数据比较麻烦.C#和Python等高级语言中,对于大部分的文本数据 ...

  3. matlab 读取txt文件数据

    文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件.MATLAB提供了一系列低层输入输出函数,专门用于文件操作. 1.文件的打开与关闭 1)打开文件 在读写文件之前,必须先用f ...

  4. matlab读取心电txt数据画图,图解MIT-BIH数据库心电数据下载和Matlab读取程序

    开源数据网站PhysioNet(https://physionet.org/)提供了诸如MIMIC.MIT-BIH等丰富的生理信号数据库,这些数据库对于人体生理信号的分析.数据挖掘有着非常大的作用.M ...

  5. MATLAB读取nc格式数据并可视化显示(以海面风场反演为例)

    MATLAB读取nc数据并实现可视化 (以全球海洋风场反演为例-更新版) 1.海面风场数据下载 从ECNWF(https://apps.ecmwf.int/datasets/data/era40-da ...

  6. [MATLAB学习笔记]MATLAB读取UG三维模型数据

    UG完成三维建模之后,导出STL格式的外形数据. missile.txt文件网盘链接 https://pan.baidu.com/s/1HAsXYD8bz-5MA2an6P-skg  密码: ttbx ...

  7. matlab读取grib三维数据,Grib格式数据处理

    上次我们说到了如何,这次我们说一下如何使用python处理grib格式数据. Grib格式是一种应用于气象领域的简明数据格式,由世界气象组织进行标准化.通常用来存储历史气象数据.当前有3个版本的gri ...

  8. matlab读取grib三维数据,matlab读取grib2文件

    用matlab读取nc文件是简单的.但气象局的很多数据存储文件是grib2格式的.该如何读取呢?看了网上的众多方法,nctoolbox,read_grib都没有成功.最后投机取巧,用了36计中的瞒天过 ...

  9. MATLAB 读取文件及数据

    读取文件 [FileName,PathName] =uigetfile('*.txt','Select the M-file'); 'file = fullfile(PathName,FileName ...

最新文章

  1. PHP 删除数组中元素的方式
  2. hduoj4092 Yummy Triangular Pizza(打表)
  3. [JS] 动态修改ckPlayer播放器宽度
  4. 服务器如何运行java文件_在linux服务器上运行java文件
  5. MATLAB知识点1
  6. mysql PREPARE用法_PHP5 mysqli的
  7. 【转载】C ++ 基础 指针 引用
  8. 【APICloud系列|8】APICloud下载编译包安装,点击图标打不开,提示很抱歉,程序出现异常,即将退出
  9. mysql并发_MySQL并发更新数据时的处理方法
  10. 设置windows网络连接别名和linux网络连接别名
  11. tensorflow图像数据处理
  12. 米思齐_米思齐公益培训之交互式图形设计与数据分析圆满落幕
  13. VS配置arduino环境
  14. Unity3D - 关于ASTC压缩格式的一些资料搜集
  15. 蓝桥杯算法训练VIP-调和数列问题
  16. 开源项目——小Q聊天机器人V1.3
  17. layui定时刷新页面
  18. 字节 找出最近时间(回溯) C++ 2021-07-17
  19. 2021年一次比较奇葩的 AWS 面试
  20. 注入(Injection)

热门文章

  1. 干货分享!CynosDB for PostgreSQL 架构浅析
  2. Centos7 Mysql Forgot Login Password
  3. caffe学习笔记20-BatchNorm层分析
  4. 【操作系统概念-作业1】Introduction
  5. 浅析 AGS REST API
  6. 你有什么道理后悔没早点知道
  7. [LCT刷题][树链信息维护] P4332 [SHOI2014]三叉神经树
  8. 地球,再一次完成了绝妙的自转 ......
  9. 400个可以发外链的网站
  10. 8090后苦于创业的我们