JMPのキーワード共起ネットワーク?こんにちはコミュニティです! 他のグラフとの対話機能を備えたスクリプトとしてデータ テーブルに保存できる、JMP でキーワード共起ネットワーク グラフを作成する方法を誰かが考え出したことがありますか? R を呼び出してグラフを作成することはできますが、JMP に戻すとグラフは静的になります。 私は標準的な JMP ユーザーですが、JMP Pro ライセンスは予算を大幅に超えるため、「JMP Pro でのみ利用可能」という言葉を含まないソリューションを見つけたいと思っています。 誰でもできるアドバイスをよろしくお願いします。自動化とスクリプト作成Re: JMP のキーワード共起ネットワークについて教えてください。こんにちはクレイジ、魔法のように働きました! ありがとう。 私のグラフィックを以下に添付しました。 すべてのコーパス キュレーション ステップを列プロパティ (レコード、フレーズ、ストップ ワード、ステム例外) として保存したため、スクリプトの実行時に自動的に適用されます。 いくつかのパラメーターを試して、結果のグラフにどのような影響を与えるかを確認してみます。 少なくともデータ探索フェーズでは、この種のグラフィックが役立つアプリケーションがたくさんあるので、このスクリプトを何度も使用します。 ご協力いただきました皆様に改めて感謝申し上げます。
ケーシー
Re: 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 であり、ステミングの選択はドキュメントにとって最適ではない可能性があります。
編集: いくつかの単語を組み合わせてください。北部、南部、西部、東部は、目的に対してはすべて同じ意味になる可能性がありますか?
Re: JMP のキーワード共起ネットワークについて教えてください。こんにちは、クレイジさん
それでおしまい! データ テーブル用に送信されたスクリプトを変更しました (添付のスクリプトとテーブル ファイルを参照)。 すべてうまくいきましたが、ラベル機能を機能させることができませんでした。 3回見直しましたが、あなたのコードを正確にコピーしていると誓います。 動作を妨げている可能性のあるものはありますか? 私が得たプロット画像は以下です。 ご覧のとおり、用語ラベルはドットとしてのみ表示されます。 ありがとうございました。 ほんとうにありがとう!

Re: 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 )} ) )
);Re: JMP のキーワード共起ネットワークについて教えてください。私は 1994 年以来 JMP の支持者なので、JMP の多くの利点と、さまざまな問題がさまざまな方法でどのように解決されるかを知っています (それは私が JMP の気に入っている点の 1 つにすぎません)。 私はいつも JMP から始めます。 私の専門コミュニティは R ユーザーによって占められています。 彼らはあらゆる種類の分析を行うことができますが、インタラクティブなデータ視覚化 (私の得意分野) を作成する R の能力は JMP と同じレベルにありません。 したがって、私はJMPを使い続けます。 ただし、統計手法が進化するにつれて、新しい分析の大部分は、標準の JMP ライセンス (たとえば、さまざまなテキスト分析プラットフォーム、私の分野で標準的な手法である基本的なモデル選択手順など) を使用せずに、R または JMP Pro を介してのみ可能になります。 )。 このため、JMP での全体的な分析の開始から終了までを行うことが困難になります。 JMP Pro と標準 JMP の乖離が大きくなるにつれて、私は標準 JMP ライセンスで実現できる問題の解決策をコミュニティに相談していることに気づきました。Craige の投稿は、標準 JMP の DTM を使用してドキュメントをグループ化する方法を見つけるのに役立つコミュニティの好例でした。 私の最新の投稿では、標準 JMP で DTM を使用して用語をグループ化できる同様のソリューションがあるかどうかを尋ねました。
この特定のケースでは、標準 JMP で作成した既存のインタラクティブなビジュアライゼーションにキーワード共起ネットワーク グラフィックを組み込もうとしています。車輪を再発明しようとしているわけではないと思います。 標準の JMP ライセンスの機能の壁にぶつかっている (おそらく) か、これを実現する方法に関する知識/創造性が不足している (可能性が高い) のどちらかだと思います。JMP Pro を買う余裕はありません。 これが私の現実であり、すぐに変わるとは思えません。 あなたが言及した潜在クラス分析プラットフォームと潜在セマンティック分析プラットフォームはどちらも、JMP Pro でのみ利用できます。 標準の JMP ライセンスの機能について質問したときに、JMP Pro でしかできないことがあるという返答を得ても、あまり役に立ちません。 私の質問が JMP Pro ユーザーの問題解決に役立つのであれば幸いですが、標準の JMP で何かをしようとするとき、より多くの創造性と知識 (JMP ユーザー コミュニティの 2 つの素晴らしい特質) が必要になるという最初の難題がまだ残っています。私は自分で所有しています。
JMP、JMP のテクニカル サポート スタッフ (彼らは素晴らしい)、そしてこのユーザー コミュニティに感謝しています。 予算がこれまでよりもはるかに大きくなるまでは、標準の JMP ライセンス (時には限界を超えることになるかもしれません) を使用して物事を成し遂げるための創造的な方法について、おそらくここで質問し続けるでしょう。 最初に JMP を学ぶ必要があるという Mark の意見に私も同意します (私は 25 年以上楽しく学習してきました)。 それでも、標準の JMP ライセンスを使用して拡大する分析と視覚化のニーズを満たす方法を理解するのに苦労することがあります。 私は、標準の JMP を使用して、完全な対話性を備え、JMP テーブル スクリプトとして保存できる、用語をグループ化するためのキーワード共起ネットワーク図を作成する正当な方法があることをまだ望んでいます。 やり方が分かりません。 JMP ドキュメントを読み、JMP コミュニティの投稿を検索し、自分で実験するという私の通常のプロセスを考えると、これを行う方法を理解できませんでした。 JMP Pro ライセンスがないと実行できない場合は、そのままにしておき、このグラフ タイプを視覚化から除外します。
長くなってごめんなさい。 JMP Pro を購入する余裕がない場合に、標準の JMP でどうやってやっていくかについて、いくつかの戦略を検討したい JMP の誰かがいたら、ぜひアドバイスをいただきたいと思います (ブログのトピックとして適していると思われます)。 おそらくこの掲示板の話題ではないでしょう。 そうでない場合は申し訳ありません。 これについて提案がある場合は、オフラインで caseylott@ymail.com までお気軽にご連絡ください。
Re: JMP のキーワード共起ネットワークについて教えてください。追加するだけです@Craige_Hales ' 潜在クラス分析を使用して行 (ドキュメント) をグループ化し、潜在セマンティック分析を使用して列 (用語) をグループ化できることがわかります。 これらのプラットフォームは、[分析] > [多変量メソッド] から利用できます。 (これらは、JMP Pro の Text Explorer に組み込まれ、特化されています。) JMP ドキュメントを参照してください...
JMP には、連携して動作する強力なプラットフォームが多数あるという考えです。 私の例えはグラフ電卓です。 ボタンがたくさんあり、作業を完了するには複数のボタンが必要になることがよくあります。 つまり、「すべてを実行する」ボタンは 1 つありませんが、そこに到達することはできます。 カスタム アプリケーションを再作成しようとするのではなく、最初のアプローチとして JMP を学ぶ必要があります。 なぜ車輪を再発明するのでしょうか?
Re: JMP のキーワード共起ネットワークについて教えてください。こんにちは、クレイジさん
あなたが送ったスクリプトは、DTM の値を使用して、ドキュメント間での類似した用語の使用に基づいてドキュメントのクラスターを作成していることに気づきました。 この場合、各ノードはドキュメントを表し、各リンクはクラスター分析からの距離値に基づいています。 少し違うことをしようとしています。
各ノードが DTM 内の TERM を表し、各リンクがキーワードの共起を説明するある種の統計に基づいている、このようなコンスタレーション グラフを作成したいと考えています。 これは私の専門外です。 このようなプロットのアイデアは気に入っていますが、項がノードになるクラスター分析を実行できるように、何らかの方法で DTM を再フォーマットするのが適切かどうか (または、どのように行うか) はわかりません。 これにより、対話型のデータ視覚化でグローバル フィルターとして使用できる、用語の関連性に基づいたグラフィックを JMP で作成するという私の目標が達成されます。 しかし、この種の最終手段では、テキスト分析のベスト プラクティスに基づいていないグラフィックが作成されるでしょうか? この分野を理解している方にとって、このクラスター分析の使用はキーワードの共起を説明するのに不適切でしょうか? もしそうなら、JMP でキーワード共起分析 (この種の分析に適切な統計手法を使用) を実行できるものを構築した人はいますか?これについてコミュニティからのフィードバックを聞くことに興味があります。 元の投稿が明確ではなかったことをお詫びします。 Craige さん、最初の返信で送っていただいたスクリプトは、ドキュメントをクラスタリングする必要があるときに必ず使用します。 ありがとう。
Re: JMP のキーワード共起ネットワークについて教えてください。一度に 1 行を使用することが正しい答えではない可能性があります。それは、図内の近隣の単語と共通する単語である必要はありません。 空間的に隣接する 2 人が何らかの言葉を共有しない限り。
Re: JMP のキーワード共起ネットワークについて教えてください。よくわからない;各行について、その行で最も重要な 3 つまたは 4 つの単語 (列名) が必要になると思います。おそらく、それらが最大の値を持つものになるでしょう。 いくつかの行を見ると、それは正しいように見えますか? そうであれば、そのラベル列を作成するための前処理ステップはそれほど必要ありません。
Re: JMP のキーワード共起ネットワークについて教えてください。こんにちは、クレイジさん
これは素晴らしいですね! 私は JSL の専門家ではありませんが、自分のデータを使用して動作させることができました。 唯一方法がわからないのは、ドキュメント用語マトリックスの用語の列名を使用するラベル識別子を作成することです。 私の文書用語マトリックスには 252 列があります。 各列名は、語幹値とサフィックス TF IDF2 を使用して自動フォーマットされます。 たとえば、ある列には「distribut・TF IDF 2」という名前が付けられ、別の列には「mountain・TF IDF 2」という名前が付けられます。 星座点のラベルを、接尾辞のない語幹用語 (例: distribut· または Mountain·) にしたいと考えています。 文書用語マトリックスの列名の値をポイントラベルとして使用する簡単な方法はありますか?
このスクリプトを提供していただき、誠にありがとうございます。
ケーシー
Re: 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 )}))
);