JMP 中的关键字共现网络?你好社区! 有谁知道如何在 JMP 中创建关键字共现网络图,该图可以作为脚本保存到数据表中,并与其他图进行交互? 我可以调用 R 来制作图表,但当我将其带回 JMP 时它是静态的。 我是标准 JMP 用户,我希望找到一种不涉及“仅在 JMP Pro 中可用”字样的解决方案,因为 JMP Pro 许可证远远超出了我的预算。 预先感谢任何人都可以提供的建议。自动化和脚本编写回复:JMP 中的关键字共现网络?嗨,克雷格,工作得很有魅力! 谢谢。 我在下面附上了我的图形。 由于我已将所有语料库管理步骤保存为列属性(重新编码、短语、停用词、词干异常),因此它们会在脚本运行时自动应用。 我将开始尝试一些参数,看看它们如何影响结果图。 我有很多应用程序,这种图形很有帮助,至少在数据探索阶段是这样,所以我会一遍又一遍地使用这个脚本。 再次感谢您的所有帮助!
凯西
回复:JMP 中的关键字共现网络?很不错!
Stemming might help combine some of the near-duplicatesStemming might help combine some of the near-duplicates词干提取可能有助于合并一些接近重复的内容
问题似乎是 JMP 15 与 16;您可以创建自己的标签列:
// load some documents that might separate into some categories
dt1 = Open( "z:/Fully Screened Subset With Abstracts and LatLongs.jmp" ); // 5000 is too many, subset 36...
originalnames = dt1 << getColumnNames();
te = dt1 << Text Explorer(
Text Columns( :AbstractProofed ), // the entire document is in one cell of the row
Add Stop Words(
{"agreement", "almost", "another", "company", "copyright holder", "electronic", "foundation", "gutenberg", "literary archive", "little",
"person or entity", "project", "public domain", "research", "without", "ebooks", "enough", "though", "rather", "better", "common", "possible",
"weight", "present", "series", "necessary", "placed", "therefore", "towards", "footnote", "something","slowly","around","behind","looking","seemed","nothing",
"probably","called","easily","distributing","paragraph"
}
),
Minimum Characters per Word( 6 ),
Stemming( "no stemming" ), //"Stem for Combining"
Language( "English" )
);
//te << savedocumenttermmatrix( Maximum Number of Terms( 300 ), Minimum Term Frequency( 25 ), Weighting( "TF IDF" ) );//BINARY would use ALL rather than !any, below
te << savedocumenttermmatrix( Maximum Number of Terms( 100 ), Minimum Term Frequency( 25 ), Weighting( "BINARY" ) ); // 0 or 1 if it occurs
te << closewindow;
// remove all-connected columns
allnames = dt1 << getColumnNames();
For( iname = N Items( allnames ), iname > N Items( originalnames ), iname -= 1,
// If( !Any( dt1[0, iname] ),
If( All( dt1[0, iname] ),
dt1 << deletecolumns( iname )
)
);
allnames = dt1 << getColumnNames();
cols = (N Items( originalnames ) + 1) :: N Items( allnames );
//
//dt1 << Hierarchical Cluster( Y( allnames[cols] ),
// Label( Transform Column( "Label", Character, Formula( Left( left(LoC Class,4)||:Subject||:Title, 20 ) ) ) ), // build your own identifier here
// Method( "Ward" ), Standardize Data( 1 ), Dendrogram Scale( "Distance Scale" ),
// Number of Clusters( 4 ), Constellation Plot( 1 ), Show Dendrogram( 0 ),
// SendToReport(Dispatch({"Constellation Plot"},"Clust Hier",FrameBox,{Frame Size( 1056, 716 )}))
//);
dt2 = dt1 << Data Table( "Fully Screened Subset With Abstracts and LatLongs" ) << Transpose(
columns( allnames[cols] ),
Label( :Title),
Label column name( "Title" ),
Output Table( "Transpose of Fully Screened Subset With Abstracts and LatLongs" )
);
dt2<<NEWCOLUMN></NEWCOLUMN>
由于我添加了标签列,因此我必须在列列表中说明它。
此显示与正常的聚类树状图显示没有真正的区别;该图中的圆圈节点是树状图的根,其他所有内容都以圆形图案呈扇形展开。 这是更容易阅读。 您可能需要告诉观众使用单词之间连接路径的长度(而不仅仅是邻近度)作为连通性的衡量标准。
您还需要使用文本浏览器部分;我使用的停用词特定于每本书中的古腾堡项目文档样板,并且字长为 6,并且词干选择可能不是您文档的最佳选择。
编辑:并结合一些词也许:北方、南方、西方、东方对于你的目的来说可能都意味着同样的事情?
回复:JMP 中的关键字共现网络?嗨克雷格,
就是这样! 我修改了您为我的数据表发送的脚本(请参阅附加的脚本和表文件)。 一切都很好,但我无法让标签功能工作。 我看了三遍,我发誓我完全复制了你的代码。 您是否看到任何可能阻碍其工作的因素? 我得到的情节图像如下。 正如您所看到的,术语标签仅显示为点。 再次感谢你。 对此,我真的非常感激!

回复:JMP 中的关键字共现网络?这也不是真的,但也许更接近。 我通过选择分支中的根节点然后为数据表中选定的行着色来对它们进行着色。 需要花一些时间手工策划停用词才能制作出漂亮的图片。
TransposedTransposed转置
// load some documents that might separate into some categories
dt1 = Open( "f:/gutenberg/books5000.jmp" ); // 5000 is too many, subset 36...
dt1 << selectwhere(
Starts With( Loc Class, "D501" ) | Starts With( Loc Class, "TX:" ) | Starts With( Loc Class, "Q" ) | Starts With( Loc Class, "P" )
);
dt2 = dt1 << subset( selected rows( 1 ) );
Close( dt1, nosave );
originalnames = dt2 << getColumnNames();
te = dt2 << Text Explorer(
Text Columns( :text ), // the entire document is in one cell of the row
Add Stop Words(
{"agreement", "almost", "another", "company", "copyright holder", "electronic", "foundation", "gutenberg", "literary archive", "little",
"person or entity", "project", "public domain", "research", "without", "ebooks", "enough", "though", "rather", "better", "common", "possible",
"weight", "present", "series", "necessary", "placed", "therefore", "towards", "footnote", "something","slowly","around","behind","looking","seemed","nothing",
"probably","called","easily","distributing","paragraph"
}
),
Minimum Characters per Word( 6 ),
Stemming( "no stemming" ), //"Stem for Combining"
Language( "English" )
);
//te << savedocumenttermmatrix( Maximum Number of Terms( 300 ), Minimum Term Frequency( 25 ), Weighting( "TF IDF" ) );//BINARY would use ALL rather than !any, below
te << savedocumenttermmatrix( Maximum Number of Terms( 100 ), Minimum Term Frequency( 25 ), Weighting( "BINARY" ) ); // 0 or 1 if it occurs
te << closewindow;
// remove all-connected columns
allnames = dt2 << getColumnNames();
For( iname = N Items( allnames ), iname > N Items( originalnames ), iname -= 1,
// If( !Any( dt2[0, iname] ),
If( All( dt2[0, iname] ),
dt2 << deletecolumns( iname )
)
);
allnames = dt2 << getColumnNames();
cols = (N Items( originalnames ) + 1) :: N Items( allnames );
//
//dt2 << Hierarchical Cluster( Y( allnames[cols] ),
// Label( Transform Column( "Label", Character, Formula( Left( left(LoC Class,4)||:Subject||:Title, 20 ) ) ) ), // build your own identifier here
// Method( "Ward" ), Standardize Data( 1 ), Dendrogram Scale( "Distance Scale" ),
// Number of Clusters( 4 ), Constellation Plot( 1 ), Show Dendrogram( 0 ),
// SendToReport(Dispatch({"Constellation Plot"},"Clust Hier",FrameBox,{Frame Size( 1056, 716 )}))
//);
dt3 = dt2 << Data Table( "Subset of books5000" ) << Transpose(
columns( allnames[cols] ),
Label( :Title ),
Label column name( "Title" ),
Output Table( "Transpose of Subset of books5000" )
);
dt3 << Hierarchical Cluster(
Y( (dt3 << getColumnNames)[2 :: N Cols( dt3 )] ),
Label( Transform Column( "Transform[Title]", Nominal, Formula( Left( :Title, Length( :Title ) - 7 ) ) ) ),
Method( "Ward" ),
Standardize Data( 1 ),
Show Dendrogram( 0 ),
Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 13 ),
Constellation Plot( 1 ),
SendToReport( Dispatch( {"Constellation Plot"}, "Clust Hier", FrameBox, {Frame Size( 948, 827 )} ) )
);回复:JMP 中的关键字共现网络?我自 1994 年以来一直是 JMP 的忠实拥护者,因此我知道它的许多优势以及如何通过不同的途径解决不同的问题(这只是我喜欢它的原因之一)。 我总是从 JMP 开始。 我的专业社区以 R 用户为主。 他们可以进行各种分析,但 R 创建交互式数据可视化(我的菜)的能力甚至无法与 JMP 相提并论。 所以,我坚持使用 JMP。 然而,随着统计方法的发展,大部分新分析只能通过 R 或 JMP Pro 实现,而不是使用标准 JMP 许可证(例如,各种文本分析平台、基本模型选择程序,这些是我所在领域的标准做法) )。 这使得我更难在 JMP 中进行全面、从头到尾的分析。 随着 JMP Pro 和标准 JMP 的差距越来越大,我发现自己正在向社区咨询,寻找可以使用标准 JMP 许可证来解决我的问题的可能解决方案。Craige 的帖子是社区帮助我找到一种在标准 JMP 中使用 DTM 对文档进行分组的方法的一个很好的例子。 我最近的帖子询问是否有类似的解决方案可以在标准 JMP 中使用 DTM 对术语进行分组。
在这种特定情况下,我尝试将关键字共现网络图形合并到我在标准 JMP 中创建的现有交互式可视化中。我不认为我是在尝试重新发明轮子。 我认为我要么遇到了标准 JMP 许可证中的功能障碍(也许),要么我缺乏如何实现这一目标的知识/创造力(更有可能)。我买不起 JMP Pro。 这就是我的现实,我认为它不会很快改变。 您提到的潜在类分析和潜在语义分析平台仅在 JMP Pro 中可用。 当我询问有关标准 JMP 许可证功能的问题并得到答复告诉我只能在 JMP Pro 中执行某些操作时,这并没有真正帮助我。 如果我的问题有助于解决 JMP Pro 用户的问题,我会很高兴,但我仍然面临着最初的难题,即尝试在标准 JMP 中做一些需要更多创造力和知识(JMP 用户社区的两个令人惊叹的品质)的事情我自己拥有。
我感谢 JMP、JMP 的技术支持人员(他们非常棒)以及这个用户社区。 在我的预算变得比以往任何时候都大之前,我可能会继续在这里提出有关使用标准 JMP 许可证完成工作的创造性方法的问题(有时可能会挑战极限)。 我同意 Mark 的观点,即需要首先学习 JMP(25 年来我一直很喜欢这样做)。 尽管如此,我有时还是很难理解如何使用标准 JMP 许可证来满足我不断扩展的分析和可视化需求。 我仍然希望有一种合法的方法可以使用标准 JMP 创建关键字共现网络图来对具有完全交互性并可以保存为 JMP 表脚本的术语进行分组。 我不知道该怎么做。 鉴于我阅读 JMP 文档、搜索 JMP 社区帖子以及自己进行试验的正常过程,我无法弄清楚如何做到这一点。 如果没有 JMP Pro 许可证就无法完成,我会让它随波逐流,并将此图形类型排除在我的可视化之外。
抱歉回复太长。 如果 JMP 中的任何人想要权衡一些关于如何在买不起 JMP Pro 时使用标准 JMP 的策略,我希望得到一些建议(似乎是一个很好的博客主题)。 也许这不是这个讨论区的主题。 如果不是的话我很抱歉。 如果有人对此有任何建议,请随时通过 caseylott@ymail.com 离线联系我。
回复:JMP 中的关键字共现网络?只需添加到@Craige_Hales ' 帮助您可以使用潜在类分析对行(文档)进行分组,并使用潜在语义分析对列(术语)进行分组。 这些平台可在“分析”>“多元方法”下找到。 (它们也是内置的,专门用于 JMP Pro 中的文本资源管理器。)请参阅 JMP 文档...
JMP 的想法是拥有许多可以协同工作的强大平台。 我的比喻是图形计算器。 按钮有很多,通常需要多个按钮才能完成工作。 也就是说,没有一个按钮可以“完成所有工作”,但您可以做到这一点。 您需要学习 JMP 作为第一种方法,而不是尝试重新创建自定义应用程序。 为什么要重新发明轮子?
回复:JMP 中的关键字共现网络?嗨克雷格,
我刚刚意识到您发送的脚本使用 DTM 中的值来根据文档之间术语的相似用法创建文档集群。 在这种情况下,每个节点代表一个文档,每个链接都基于聚类分析的距离值。 我正在尝试做一些稍微不同的事情。
我想创建一个像这样的星座图,其中每个节点代表 DTM 中的一个术语,每个链接都基于某种描述关键字共现的统计数据。 这远远超出了我的专业知识。 我喜欢这样一个图的想法,但我不确定以某种方式重新格式化 DTM 是否合适,以便可以在术语最终作为节点的情况下进行聚类分析(或者我将如何做到这一点)。 这将实现我的目标,即在 JMP 中根据术语相关性生成一个图形,我可以将其用作交互式数据可视化中的全局过滤器。 然而,这种结束方式会创建一个不基于文本分析最佳实践的图形吗? 对于那些了解这个领域的人来说,使用聚类分析来说明关键词共现是否不合适? 如果是这样,是否有人在 JMP 中构建了可以进行关键字共现分析(使用适当的统计方法进行此类分析)的任何东西?我有兴趣听取社区对此的反馈。 我很抱歉我原来的帖子不太清楚。 Craige,当我需要集群文档时,我一定会使用您在第一个回复中发送的脚本! 谢谢。
回复:JMP 中的关键字共现网络?一次使用一行可能不是正确的答案;这不一定是图中邻居的常用词。 除非两个空间邻居共享一些单词。
回复:JMP 中的关键字共现网络?我不知道;我认为对于每一行,您都需要该行的 3 或 4 个最重要的单词(列名称),并且它们可能是具有最大值的单词。 当您查看某些行时,这看起来正确吗? 如果是这样,创建该标签列就不需要太多的预处理步骤。
回复:JMP 中的关键字共现网络?嗨克雷格,
这太棒了! 我不是 JSL 专家,但我让它与我的数据一起工作。 我唯一不知道该怎么做的是创建一个标签标识符,该标签标识符使用文档术语矩阵中术语的列名称。 我的文档术语矩阵有 252 列。 每个列名称均使用术语词干值和后缀 TF IDF2 自动格式化。 例如,一列名为“distribut·TF IDF 2”,另一列名为“mountain·TF IDF 2”。 我希望星座点标签是词干术语,不带后缀(例如,distribut· 或 mountain·)。 有没有一种简单的方法可以使用文档术语矩阵的列名称中的值作为点标签?
非常感谢您提供这个脚本。
凯西
回复:JMP 中的关键字共现网络?你可以得到一些相关的东西,也许,像这样。 并且它与桌子相连。 而不是专业版。
Constellation Plot from ClusteringConstellation Plot from Clustering聚类星座图
// load some documents that might separate into some categories
dt1 = Open( "f:/gutenberg/books5000.jmp" ); // 5000 is too many, subset 36...
dt1 << selectwhere( Starts With( Loc Class, "D501" ) | Starts With( Loc Class, "TX:" ) | Starts With( Loc Class, "Q" ) | Starts With( Loc Class, "P" ) );
dt2 = dt1 << subset( selected rows( 1 ) );
Close( dt1, nosave );
originalnames = dt2 << getColumnNames();
te = dt2 << Text Explorer(
Text Columns( :text ), // the entire document is in one cell of the row
Add Stop Words(
{"agreement", "almost", "another", "company", "copyright holder", "electronic", "foundation", "gutenberg", "literary archive", "little",
"person or entity", "project", "public domain", "research", "without"}
),
Minimum Characters per Word( 6 ),
Stemming( "Stem for Combining" ),
Language( "English" )
);
te << savedocumenttermmatrix( Maximum Number of Terms( 300 ), Minimum Term Frequency( 25 ), Weighting( "TF IDF" ) );//BINARY would use ALL rather than !any, below
te << closewindow;
// remove all-connected columns
allnames = dt2 << getColumnNames();
For( iname = N Items( allnames ), iname > N Items( originalnames ), iname -= 1,
If( !Any( dt2[0, iname] ),
dt2 << deletecolumns( iname )
)
);
allnames = dt2 << getColumnNames();
cols = (N Items( originalnames ) + 1) :: N Items( allnames );
dt2 << Hierarchical Cluster( Y( allnames[cols] ),
Label( Transform Column( "Label", Character, Formula( Left( left(LoC Class,4)||:Subject||:Title, 20 ) ) ) ), // build your own identifier here
Method( "Ward" ), Standardize Data( 1 ), Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 4 ), Constellation Plot( 1 ), Show Dendrogram( 0 ),
SendToReport(Dispatch({"Constellation Plot"},"Clust Hier",FrameBox,{Frame Size( 1056, 716 )}))
);