노트 : JMP 11 지난주에 시작되었습니다. 오늘, 화요일에 시리즈를 시작합니다. 큰 통계 블로그 게시물 존 살 심사에 중점을 두어 빅 데이터가있을 때 변경해야 할 사항에 대해 설명합니다.
데이터 준비는 분석가의 직무 중 중요한 부분이며 큰 데이터를 보유하고있는 경우 종종 작업의 큰 부분이됩니다.
3 년간의 출생 기록 데이터를 CDC 웹 사이트 , 1280 만 행이 있었음에도 불구하고 어머니의 나이까지 아기의 출생 체중 그래프를 만드는 것은 상당히 빠르다.

1,280 만 명 중 8kg (17.6 파운드)와 같이 무거운 아기도 있습니다. 그러나 격차가 있은 후 맨 위에 10 킬로그램짜리 아기가 생겼습니다. 아기들은 그렇게 크게 오지 않습니다. 이 중 하나를 클릭하고 툴팁을 사용하여 세부 사항을 확인하면 9999 값이 표시됩니다. 그것은 분명히 진정한 무게가 아니라 가치없는 코드입니다.
어떤 것을 맞추기 전에이 값을 누락 된 코드로 다시 코딩하거나 누락 된 값 코드로 누락 값 코드 속성을 추가하여 플랫폼에서이를 누락 된 값 코드로 인식해야합니다.
수정해야 할 코드가 몇 개 이상있는 경우 몇 가지 단계가 더 있습니다. 일반적인 방법은 점을 그래픽으로 선택하고 선택한 열과 행이있는 데이터 테이블로 돌아가서 편집 메뉴에서 삭제 명령을 수행하여 누락 된 값으로 바꾸는 것입니다. 수정해야 할 열이 몇 개 밖에없는 경우 효과적입니다. 그러나 많은 컬럼을 고쳐야 할 때, 그렇게하는 것은 너무 지루합니다.
반도체 산업은 수백 또는 수천 개의 컬럼을 가진 데이터를 가지고 있습니다. 값은 모두 테스트 기계로 수집됩니다. 기계가 나쁜 가치를 부여하지 않을 것입니까? 이 기계로 얻은 컬럼의 분포를보십시오. 대부분의 값은 0.5 미만이지만 값 코드는 9999입니다. 누락 된 가치 코드를 처리하는 경우 실제 배포를 배웁니다.


다음은 기계로 수집 한 또 다른 측정입니다. 거의 모든 값은 0.5 미만이지만 훨씬 큰 값이 있습니다. 측정 시스템의 오류 코드입니다. 이 코드는 실제 데이터보다 11 배 이상 크기 때문에 강력한 방법을 사용하더라도 분석으로 혼란을 야기 할 수 있으므로 누락 된 코드를 설정하십시오.


큰 코드를 제거하면 이전에 분명하지 않은 음수 코드가 표시됩니다. 이것들은 실제 데이터와 다른 세 자리수이므로 다른 이상 치를 제거 할 때까지 숨겨졌습니다. 이것들을 제거하면 배포본을보기 시작합니다. 여전히 아웃 라이어가 있지만 오류 코드가 아닌 실제 값처럼 보입니다. 그러므로 혼자 남겨두고 나중에 강력한 방법을 생각해보십시오.


이런 종류의 데이터를 정기적으로 분석 할 경우 청소가 자동으로 이루어지기를 원할 것입니다. 여기서 주요 특징은 오류 코드가 실제 값과 아주 멀리 떨어져 있다는 것입니다. 사 분위수 범위 (IQR)의 20 배를 사용할 수 있으며 여전히 모든 것을 찾을 수 있습니다.
그래서 저는 상위 사 분위수의 20 IQR과 낮은 사 분위수의 모든 고유 값을 모은 대본을 썼습니다. 그것은 불량한 가치의 대부분을 점령했지만 또 다른 문제가 발생했습니다. 여러 경우에있어 데이터의 대부분은 같은 값이었고 IQR은 0이었습니다 (아래 그림 참조). 도적이 데이터의 절반 이상과 다를 경우 신고 할 수 없습니다.

따라서 비어 있지 않은 quantile 범위를 찾을 때까지 바깥쪽으로 나가야합니다. 그런 다음에 측정 할 척도가 있습니다. 이제는 상위 사 분위수보다 큰 가장 작은 값과 하위 사 분위수보다 작은 최대 값을 사용합니다.이 경우 데이터가 가운데에있는 상수로 묶입니다.
여기에 대한 필요성은 오토메이션 : 불량 값을 자동으로 찾아보고하고, 묻는다면이를 복구하는 스크립트가 있어야합니다. 자동화가 없다면, 각 테이블의 모든 열에 대한 모든 단계를 반복해야합니다.
여기에 제 스크립트가 있습니다.
먼저 대화 상자에서 선택한 변수를 반복하기 위해 호출 할 코드를 작성합니다. 열을 찾아 모든 값을 벡터로 가져옵니다. 그런 다음 확장 quantile 범위를 찾습니다. 그런 다음 quantile 범위 밖의 20 quantile 범위 인 모든 값을 찾고 정수입니다. 모든 오류 코드가 정수라는 것을 알고 있습니다. 그런 다음 "우스운"가치에 관한 정보를 축적합니다. 수정 옵션이 켜지면 누락 된 열 값을 바꿉니다.
okAction = expr(
text1 = "Quantile Tail=" || Char(tail,5) || " Reach=" || Char(reach,5);
dt<
For( icol = 1, icol <= nCheckCol, icol++,
col = Column( checkCols[icol] );
data = col<
// Guarantee a non-degenerate IQR by going just outside it
QUpper = Minimum(data[Loc(data >Quantile(1-tail,vec))]);
QLower = Maximum(data[Loc(data
LimitUpper = QUpper+reach*(QUpper-QLower);
LimitLower = QLower-reach*(QUpper-QLower);
funnyRows = Loc(((vec>LimitUpper)|(vec
nFix = nrow(funnyRows);
if (nFix==0,continue());
text1 ||= "\!n\!nColumn: "||(col<
||"\!n Lower Quantile="||char(QLower,7) || " Lower Threshold=" || char(LimitLower)
||"\!n Upper Quantile="||char(QUpper,7) || " Upper Threshold=" || char(LimitUpper)
||"\!n Outlier Values= ";
text1 ||= char(data[funnyRows]);
if (isFix,for(i=1,i<=nfix,i++,col[funnyRows]=.;));
);
dt<
NewWindow("Cleanup Items",ScriptBox(text1,"TEXT",600,600));
);
나머지 코드는 설정 및 대화 코드입니다.
cleanupDlg = NewWindow("Outlier Cleanup",
BorderBox(left(3),top(2),
VListBox(
BorderBox(Left(60),Top(10),Bottom(10),
TextBox("Look for outliers to clean up.", Set Font Size(15),Set Wrap(400))
),
HlistBox(
VListBox(
PanelBox("Select Columns",
colListData=ColListBox(All,width(lbWidth),nLines(min(nc,25))))
),
PanelBox("Cast Selected Columns into Roles",VListBox(
chkbox1=CheckBox("Replace with missing"),
chkbox2=CheckBox("Look for non-integer outliers too"),
HListBox(TextBox("Quantile tail: "),edtbox1=TextEditBox(Char(tail))),
HListBox(TextBox("Number of quantiles ranges beyond quantile:"),
edtbox2=TextEditBox(Char(reach))),
LineupBox(NCol(2),Spacing(8),
ButtonBox("Columns to Check", colListCheck<
colListCheck = ColListBox(width(lbWidth),nLines(30))
)
)),
PanelBox("Action",LineupBox(NCol(1),
ButtonBox("OK",
checkCols = colListCheck<
nCheckCol = nItems(checkCols);
isFix = chkbox1<
isNonInt = chkbox2<
tail = Num(edtbox1<
reach = Num(edtbox2<
if (nCheckCol>=0, okAction; cleanupDlg << CloseWindow;);
),
ButtonBox("Cancel",cleanupDlg<
ButtonBox("Remove", colListCheck<
)))
)));
colListData << Set Data Type( "Numeric" );
스크립트를 테스트 한 후에 새로운 배치를 얻을 때마다 사용할 추가 기능으로 만듭니다. 각 변수에 대해 확장 quantile 값이 무엇이고 값이 20 범위 밖에 있는지 출력 창을 표시합니다.
Column: DELW_SICR
Lower Quantile=-0.0321 Lower Threshold=-1.98795621097088
Upper Quantile=0.06569 Upper Threshold=2.02154020965099
Outlier Values= [9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999]
Column: PS_RPNBR
Lower Quantile=5462.67 Lower Threshold=-10461.529296875
Upper Quantile=6258.88 Upper Threshold=22183.0791015625
Outlier Values= [421034, 422334, 423613, 423085, 425256, 420978, 422327, 423525, 423021, 425233]
Column: RCON_PEM
Lower Quantile=0.162 Lower Threshold=-1.39799988269806
Upper Quantile=0.24 Upper Threshold=1.79999987781048
Outlier Values= [22539399168, 22751399936, 27257200640, 26248300544, 28104099840, 565313024]
대용량 데이터는 대개 더러운 데이터이므로 조사해야 할 부분이 많으면 데이터 정리를 훨씬 쉽게 해주고 분석 준비를 할 수있는 도구를 찾아야합니다. 내가이 블로그 게시물에서 사용하는 스크립트 - 오류 코드 정리 추가 기능 - 이제 JMP 파일 교환에 들어가서 데이터 정리를 쉽게해야하는 경우 다운로드 할 준비가되었습니다.
마이크 클레이튼 쓴 :
오류 코드는 종종 정수이기 때문에 지속적인 데이터와 우수한 게이지 기능을 위해 정수를 필터링하여 테스트 엔지니어링 또는 다른 팀에서 설명 할 수 있습니다. 나쁜 게이지 기능은 특정 값 범위에서 가짜 "정수"를 제공 할 수 있습니다.
그러나 때로는 모든 정수가 테스트 파일 생성 프로세스 또는 파일 변환 프로세스에 의해 잘못된 추가 숫자가 주어지기 때문에 모든 이진 - 아날로그 변환 및 파일 파싱 방법을 견딜 수 있도록 탐지 가능한 오류 코드를 작성해야합니다. 정수.
다음으로, 물론 부품 유통의 나머지 부분에도 많은 IQR 배수가되는 한계 장치가 있으며 공차 한계가 너무 느슨하면 [파일럿 생산 및 고객 피드백 후 통계적으로 설정하지 않고 설계자가 설정 한 한계로 인해] 독립 장치 "가 식별되고 포함되어야하며 이는 데이터"정리 "또는 분석의 다음 단계의 일부가 될 수 있습니다.
데이터 시트에 모든 이상 치를 유지하는 것이 좋습니다. 즉, 이상 치가 많은 일괄 처리에 대해서는 팀 유효성 확인을 위해 일시적으로 "제외"됩니다.
스크립트가 이상한 정수를 잡아 주셔서 감사합니다.