JMP의 키워드 동시 발생 네트워크?안녕하세요 커뮤니티! JMP에서 다른 그래프와의 상호작용을 통해 데이터 테이블에 스크립트로 저장할 수 있는 키워드 동시발생 네트워크 그래프를 만드는 방법을 알아낸 사람이 있습니까? 그래프를 만들기 위해 R을 호출할 수 있지만 JMP로 다시 가져오면 그래프가 정적입니다. 저는 표준 JMP 사용자인데 "JMP Pro에서만 사용 가능"이라는 문구가 포함되지 않은 솔루션을 찾고 싶습니다. JMP Pro 라이센스가 제 예산을 훨씬 초과하기 때문입니다. 누구나 제공할 수 있는 조언에 미리 감사드립니다.자동화 및 스크립팅Re: JMP의 키워드 동시 발생 네트워크는 무엇입니까?안녕하세요 Craige, 정말 매력적이었습니다! 감사합니다. 아래에 그래픽을 첨부했습니다. 모든 코퍼스 큐레이션 단계를 열 속성(리코딩, 문구, 중지 단어, 어간 예외)으로 저장했으므로 스크립트가 실행될 때 자동으로 적용됩니다. 일부 매개변수를 실험하여 결과 그래프에 어떤 영향을 미치는지 살펴보겠습니다. 적어도 데이터 탐색 단계에서는 이러한 종류의 그래픽이 도움이 되는 응용 프로그램이 많이 있으므로 이 스크립트를 계속해서 사용할 것입니다. 모든 도움에 다시 한번 감사드립니다!
케이시
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를 좋아하는 이유 중 하나입니다). 저는 항상 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 사용자 커뮤니티의 두 가지 놀라운 특성)이 필요한 작업을 수행해야 한다는 원래의 수수께끼는 여전히 남아 있습니다. 나는 스스로 소유합니다.
JMP와 JMP의 기술 지원 직원(훌륭한), 그리고 이 사용자 커뮤니티에 감사드립니다. 예산이 그 어느 때보다 훨씬 커질 때까지 표준 JMP 라이센스를 사용하여 작업을 수행하는 창의적인 방법에 대해 여기에서 계속 질문할 것입니다(때때로 한계를 뛰어 넘을 수도 있음). 저는 먼저 JMP를 배워야 한다는 Mark의 의견에 동의합니다(저는 25년 넘게 JMP를 즐겼습니다). 하지만 표준 JMP 라이센스를 사용하여 점점 늘어나는 분석 및 시각화 요구 사항을 충족하는 방법을 이해하려고 애쓰는 경우가 있습니다. 나는 여전히 표준 JMP를 사용하여 완전한 상호 작용이 가능하고 JMP 테이블 스크립트로 저장할 수 있는 그룹 용어에 대한 키워드 동시 발생 네트워크 다이어그램을 생성할 수 있는 합법적인 방법이 있기를 바라고 있습니다. 이 작업을 수행하는 방법을 모르겠습니다. JMP 문서를 읽고, JMP 커뮤니티 게시물을 검색하고, 스스로 실험하는 일반적인 프로세스를 고려할 때 이 작업을 수행하는 방법을 알 수 없었습니다. JMP Pro 라이센스 없이는 수행할 수 없는 경우 표류하도록 두고 이 그래프 유형을 시각화에서 제외하겠습니다.
답변이 길어서 죄송합니다. JMP Pro를 구입할 여유가 없을 때 표준 JMP를 사용하는 방법에 대한 몇 가지 전략에 대해 JMP 관계자가 의견을 제시하고 싶다면 몇 가지 조언을 듣고 싶습니다(좋은 블로그 주제인 것 같습니다). 어쩌면 이 토론 게시판의 주제가 아닐 수도 있습니다. 그렇지 않다면 사과드립니다. 이에 대한 제안 사항이 있는 경우 오프라인으로(caseylott@ymail.com) 저에게 연락해 주시기 바랍니다.
Re: JMP의 키워드 동시 발생 네트워크는 무엇입니까?그냥 추가하는 중 @Craige_Hales ' 잠재 클래스 분석을 사용하여 행(문서)을 그룹화하고 잠재 의미 분석을 사용하여 열(용어)을 그룹화할 수 있도록 도와줍니다. 이러한 플랫폼은 분석 > 다변량 방법에서 사용할 수 있습니다. (또한 JMP Pro의 텍스트 탐색기에 내장되어 있으며 이에 특화되어 있습니다.) JMP 문서를 참조하세요...
JMP에는 함께 작동하는 강력한 플랫폼이 많이 있다는 것이 아이디어입니다. 내 비유는 그래프 계산기입니다. 많은 버튼이 있으며 작업을 완료하려면 두 개 이상의 버튼이 필요한 경우가 많습니다. 즉, '모든 것을 수행'하는 버튼은 없지만 거기에 도달할 수는 있습니다. 맞춤형 애플리케이션을 다시 만들려고 하기보다는 첫 번째 접근 방식으로 JMP를 배워야 합니다. 왜 바퀴를 다시 발명해야 할까요?
Re: JMP의 키워드 동시 발생 네트워크는 무엇입니까?안녕하세요 크레이지,
방금 귀하가 보낸 스크립트가 DTM의 값을 사용하여 문서 간에 유사한 용어 사용을 기반으로 문서 클러스터를 생성한다는 것을 깨달았습니다. 이 경우 각 노드는 문서를 나타내며 각 링크는 클러스터 분석의 거리 값을 기반으로 합니다. 나는 약간 다른 것을하려고 노력하고 있습니다.
각 노드가 DTM의 TERM을 나타내고 각 링크가 키워드 동시 발생을 설명하는 일종의 통계를 기반으로 하는 이와 같은 성좌 그래프를 만들고 싶습니다. 이건 내 전문 지식을 벗어나는 일이다. 나는 그러한 플롯의 아이디어를 좋아하지만 용어가 노드로 끝나는 곳에서 클러스터 분석을 수행할 수 있도록 DTM을 어떻게든 다시 포맷하는 것이 적절한지 확실하지 않습니다(또는 이를 수행하는 방법). 이렇게 하면 대화형 데이터 시각화에서 전역 필터로 사용할 수 있는 용어 관련성에 기반한 그래픽을 JMP에 포함시키려는 제 목표를 달성할 수 있습니다. 그러나 이러한 종류의 최종 처리가 텍스트 분석의 모범 사례를 기반으로 하지 않은 그래픽을 생성하게 됩니까? 이 분야를 이해하는 분들이라면 클러스터 분석을 사용하여 키워드 동시 발생을 설명하는 것이 부적절할까요? 그렇다면 JMP에서 키워드 동시 발생 분석(이러한 유형의 분석에 적합한 통계 방법을 사용하여)을 수행할 수 있는 기능을 구축한 사람이 있습니까?이에 대한 커뮤니티의 피드백을 듣고 싶습니다. 원래 게시물이 더 명확하지 않은 점 사과드립니다. Craige, 문서를 클러스터링해야 할 때 첫 번째 응답으로 보내주신 스크립트를 꼭 사용하겠습니다! 감사합니다.
Re: JMP의 키워드 동시 발생 네트워크는 무엇입니까?한 번에 하나의 행을 사용하는 것이 정답이 아닐 수도 있습니다. 이는 다이어그램의 이웃과 공통된 단어일 필요는 없습니다. 두 공간적 이웃이 어떤 단어를 공유하지 않는 한.
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 )}))
);