오버레이 그래프<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕,
열을 쌓을 때 문제가 발생했습니다. 내가 보는 데이터는 수백 개의 데이터 열에 들어갈 수 있습니다. 종종 나는 한 열에 분포 그래프를 사용할 수 있도록 열을 함께 쌓습니다. 그러나 때때로 내 데이터 테이블이 수백만 행의 데이터에 들어가고 열을 쌓을 때 충돌이 발생하기 시작합니다. 모든 열을 함께 쌓지 않고도 여러 개의 분포 그래프를 오버레이하여 하나의 그래프를 만들 수 있는 방법이 있는지 궁금합니다. 엘 수많은 열을 그래프로 표시하고 모든 그래프를 하나로 오버레이합니까?
도움을 주셔서 감사합니다!
Re: 오버레이 그래프기계의 하드웨어 제약 내에서 일반적으로 JMP는 이런 작업에 능숙합니다. 나는 (어떤 이유로) 단일 열의 데이터를 가져오는 것이 불가능하다고 가정합니다.
아래 코드를 실험해 볼 수 있습니다. 내 컴퓨터에서는 이 작업에 8초가 걸리지만 그 시간의 절반 이상이 시작할 테이블을 작성하고 그 안의 공식을 평가하는 데 소요됩니다. nr = 1,000,0000으로 설정하면 실행 시간은 약 1분입니다.
NamesDefaultToHere(1);
// Number of columns and rows
nc = 130;
nr = 100000;
// Make a test table, dt1, to work with
dt1 = NewTable("Test", NewColumn("Column 1", Numeric, Continuous, Formula(RandomNormal())),AddRows(nr));
For(i=2, i<=nc, i++, dt1 << NewColumn("Column "||Char(i), Numeric, Continuous, Formula(RandomNormal())));
// Get the data from the table into a matrix
m = dt1 << getAsMatrix;
// Close dt1 to recover some memory
Close(dt1, NoSave);
// Reshape into a column vector
m = Shape(m, NRow(m)*NCol(m), 1);
// Make a new table
dt2 = NewTable("Test in a Single Column", NewColumn("All", Numeric, Continuous, Values(m)));
// Recover memory
m = [];
Re: 오버레이 그래프모든 제안에 감사드립니다!
불행히도, 그것은 실제로 내가 찾고 있는 것이 아닙니다. JMP로는 내가 원하는 대로 할 수 없는 것 같습니다. 모든 열을 함께 쌓고 싶지 않고 모든 데이터의 분포 그래프를 원하기 때문입니다.
DropAllOtherColumns는 제가 몰랐던 유용한 기능입니다. 열을 쌓고 해당 기능을 추가하면 효율성이 향상되는지 확인하기 위해 이를 가지고 놀아 봐야 할 것입니다.
또한 Peter, 저는 어떤 값이 분포의 어느 수준에 해당하는지 확인하는 데 관심이 없습니다. 이것이 바로 제가 스태킹과 동등한 것을 원하지만 메모리를 빨아들이는 측면이 없는 것을 원하는 이유입니다. 하지만 그 분포 그래프는 제가 추구하는 것과 매우 비슷해 보이지만 안타깝게도 JMP 버전 12가 없습니다. 또한 130개의 변수가 있습니다. ㅋ
감사합니다!
Re: 오버레이 그래프유통 플랫폼에서는 그런 오버레이가 가능하지 않다고 생각합니다. 내 경험상 스태킹은 꽤 빠릅니다. 아래 예제 코드는 내 노트북에서 몇 초 안에 실행됩니다. 데이터 수를 10^8로 늘리면 속도가 느려지지만 여기서 병목 현상이 발생하는 것은 스태킹이 아니라 배포 플랫폼입니다.
또 다른 메모에서는; 수백만 개의 데이터로 구성된 히스토그램은 데이터의 작은 무작위 하위 집합과 크게 다르지 않은 것처럼 보입니다. 따라서 성능이 문제인 경우 시각화 전에 데이터 세트의 크기를 줄일 수 있습니다(또는 단순히 더 많은 RAM이 필요할 수도 있습니다).
dt = New Table("big");
nr = 100000;
nc = 100;
dt << add rows(nr);
For(i = 1, i <= nc, i++,
dt << New Column("col" || Char(i), set each value(Random Normal()))
);
dt_stacked = dt << Stack(
columns(dt << get column names),
Source Label Column("Label"),
Stacked Data Column("Data"),
Drop All Other Columns(1)
);
dt_stacked << Distribution(Continuous Distribution(Column(:Data), Outlier Box Plot(0)));
Re: 오버레이 그래프JMP에 대해 제가 들은 경험 법칙은 데이터세트 크기보다 두 배 더 많은 메모리를 사용할 수 있다는 것입니다.그렇다면 더 많은 메모리가 필요할까요?
Re: 오버레이 그래프이렇게 하면 너무 많이 복제하지 않고 데이터를 쌓아야 합니다.값이 어떤 원래 열에서 왔는지 상관하지 않으므로 레이블 열을 삭제합니다.DropAllOtherColumns 당신이 찾고 있는 부분일지도 모릅니다.
newdt = Data Table( "Big Class" ) << Stack(
columns( :height, :weight, :age ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Drop All Other Columns( 1 ),
Output Table( "hw" )
);
newdt << deletecolumns( "label" );
newdt << Distribution( Continuous Distribution( Column( :Data ) ) );

Re: 오버레이 그래프sophiaw: JMP 버전 12에서는 (BigClass) 성별별 높이(오버레이) 아래의 시각화를 생성할 수 있습니다.

이것이 당신이 추구하는 시각화라고 생각합니까? 그런데 아쉽게도 Overlay 변수를 쌓아야 하는데, 데이터 테이블 관리 관점에서 문제가 있다고 하더군요. 당신은 RAM을 얼마나 갖고 있나요? RAM을 더 추가하면 충돌 문제를 해결하는 데 도움이 될 수 있을까요? 그 외에도 귀하가 제안한 만큼 다양한 수준의 오버레이 변수를 사용하면 귀하의 그래프가 시각적으로 얼마나 심미적으로 매력적일지 궁금합니다. 어느 레벨이 어느 레벨인지 실제로 알 수 있는 것은 말할 것도 없습니다. 히스토그램 오버레이 시각화는 오버레이 변수에 대한 수준 수가 상대적으로 적을 때 가장 효과적입니다.
Re: 오버레이 그래프도움이 되지만 제가 원하는 것은 아닙니다. 여러 열을 선택하고 분포를 생성할 수 있다는 점을 제외하면 기본적으로 분포 그래프(열을 선택하고 그래프로 표시하는 위치)와 정확히 똑같아 보이길 원합니다. 하단에 값이 있고 y축에 데이터 양이 표시된 하나의 그래프만 원합니다. 지금은 그래프로 표시하려는 모든 열을 쌓은 다음 새 열을 그래프로 표시해야 합니다(정확히 제가 원하는 것입니다). 유일한 문제는 함께 그래프로 표시하려는 약 130개의 열이 있고 이를 쌓는 것이 불합리하다는 것입니다. 특히 내 데이터 테이블이 일반적으로 수십만 개의 행에 있고 두 개의 열을 함께 쌓으면 행의 양이 중복되는 경우 특히 그렇습니다. 130개를 쌓으면 JMP가 중단되거나 엄청난 시간이 걸립니다. 이 경우 x축이 없기 때문에 그래프 빌더는 본질적으로 아무 것도 알려주지 않으므로 각 막대가 얼마나 많은 것을 나타내는지 등을 알 수 없습니다.
모든 열을 분리하는 대신 분포 그래프를 오버레이하여 모든 열의 하나의 그래프를 만드는 방법이 있습니까?
감사해요!
Re: 오버레이 그래프Graph Builder가 원하는 대로 작동하는지 확인하세요.모든 열을 선택하고 Y축에 놓습니다.포인트 클라우드가 보일 것입니다.나이, 키, 몸무게를 사용하는 Big Class는 다음과 같습니다.

그런 다음 마우스 오른쪽 버튼 클릭->추가->히스토그램을 수행합니다.

그런 다음 마우스 오른쪽 버튼 클릭->점->제거를 클릭하고 완료를 클릭하세요.

제목을 클릭하고 삭제를 누르세요(또는 더 나은 제목을 추가하세요).

그런 다음 빨간색 삼각형을 사용하여 스크립트를 복사할 수 있습니다.
Graph Builder(
Size( 534, 418 ),
Show Control Panel( 0 ),
Variables( Y( :age ), Y( :height, Position( 1 ) ), Y( :weight, Position( 1 ) ) ),
Elements( Histogram( Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Students" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Wrap( 2 )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "" )} ),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg(
Hist Seg( "Histogram (age)" ),
Histogram Color( -4222943 )
), DispatchSeg(
Hist Seg( "Histogram (height)" ),
Histogram Color( -13977687 )
), DispatchSeg(
Hist Seg( "Histogram (weight)" ),
Histogram Color( -3780931 )
)}
)
)
)