좋은 아침이에요,
누군가 나를 도울 수 있습니까? ...
숫자 열의 빈 값을 평균 열 값입니다.
나는 이것을 시도했다
dt = 현재 데이터 테이블 ();
채우기 = dt << 열 이름 가져오기 ( 숫자 );
을 위한 ( 나는 = 1 , 나는 <= N개 항목 ( 채우기 ), i++,
채우기[i][dt << 행 가져오기 ( 누락 ( 채우기[i][] ) )] = 열 평균 (채우기[i]);
);
미리 감사드립니다
잔파올로
나는 당신의 코드를 자세히 연구하지는 않았지만 당신이 필요한 것보다 더 많은 일을 하고 있다는 느낌을 받았습니다. 가독성을 높이려면 아래와 같이 함수를 사용하는 것이 좋습니다.
NamesDefaultToHere(1);
// Only impute if more than n cells are missing
imputeContinuousCol =
Function({col, n}, {Default Local},
values = col << getValues;
missingValuePos = Loc(IsMissing(values));
if(NRow(missingValuePos) > n,
values[Loc(IsMissing(values))] = Mean(values);
col << setValues(values);
);
);
// Only impute if more than n cells are missing
imputeCharacterCol =
Function({col, n}, {Default Local},
values = col << getValues;
missingValuePos = Loc(values, "");
if(NRow(missingValuePos) > n,
values[Loc(values, "")] = "NA";
col << setValues(values);
);
);
// Data table . . .
dt = DataTable("Big Class.jmp");
// List of column names that satidfy your imputation criteria . . .
imputeList = {"name", "sex", "height"};
// Loop over this list, and impute if necessary
for (c=1, c<=NItems(imputeList), c++,
col = Column(dt, imputeList[c]);
if(
(col << getModelingType) == "Continuous",
imputeContinuousCol(col, 1),
(col << getDataType) == "Character",
imputeCharacterCol(col, 1),
);
);
'Big Class'를 열고 나열된 열에서 누락된 일부 셀을 만든 다음 사용해 보십시오.
안녕 이안
먼저 귀하의 도움과 제안에 감사드립니다. 당신의 스크립트는 아주 잘 작동
그래서.... DB를 줄이고 간단하게 하기 위해 스크립트를 더 큰 스크립트로 통합하려고 했습니다.
여기서 전체 작업
여기에 기본 이름( 1 );
clear globals();
// 열려 있는 모든 테이블 중에서 분석을 위해 선택할 테이블을 선택하는 코드
OpenDT = 목록();
For( i = 1, i <= N Table(), i++,
Insert Into( OpenDT, 데이터 테이블( i ) )
);
dlgDT = Dialog( "분석할 데이터 테이블 선택", VList( selectDT = 목록 상자( OpenDT ) ), HList( Button( "확인" ), Button( "취소" ) ) );
표시(dlgDT);
If( dlgDT["버튼"] == 1,
에서 제거( dlgDT, N 항목( dlgDT ) );
평가 목록(dlgDT);
);
현재 데이터 테이블( selectDT[1] );
// -------------------------- GUI ------ --------------------//
cd = 열 대화상자(
Title( " 데이터 전처리 " ),
List= ColList( " 열 선택 >> ", MinCol( 1 ) ),
HList( " 열의 빈 요소 % -> (0-100) ", mypercent1 = EditNumber( 50 ) ),
HList( " 열의 정체 요소 % -> (0-100) ", mypercent = EditNumber( 80 ) ),
VList(
숫자 = 확인란( "열 숫자 - 누락된 셀을 다른 셀의 평균으로 대체", 1 ),
문자 = 확인란( "열 문자 - N/A로 누락된 셀 대치", 1 ),
),
);
//변수 선언
impute_num_col = cd["숫자"]; // 숫자 대치
impute_char = cd["문자"]; // 대치 문자
퍼센트 = cd["mypercent"];
퍼센트1 = cd["mypercent1"];
mylist = cd["목록"];
dt= 선택DT[1];
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=Nitems(mylist), i<=maxi, i++,
if(nrows(loc(aslist(column(dt,mylist[i])<= numRows * 퍼센트/100,
insert into(delcols, myList[i]);
,
if(Col N Missing(column(dt,mylist[i])) >= numRows * percent1/100,
insert into(delcols, myList[i]);
);
);
);
nitems = N 항목( delcols );
colname = {};
colnamelist = {};
For( p = 1, p <= nitems, p++,
colname = Column( delcols[p] ) << Get Name;
Insert Into( colnamelist, colname(p) );
);
dt << 열 삭제(colnamelist);
//좋아요! 열 숫자 - 누락된 셀을 다른 셀의 평균으로 대체
If( impute_num_col == 1,
cc = dt << 열 이름 가져오기( 연속 );
ncols = N 항목( cc );
For( i = 1, i <= ncols, i++,
values = Column( dt, cc[i] ) << get values( 1 );
values[Loc( Is Missing( values ) )] = Mean( values );
Column( dt, cc[i] ) << setvalues( values, cc[i] );
);
);
// 열 문자 - 누락된 셀을 NA로 대체
If( impute_char == 1,
FILL = dt << 열 이름 가져오기( Character );
For( i = 1, i <= N 항목( FILL ), i++,
FILL[i][dt << get rows where( Is Missing( FILL[i][] ) )] = "NA";
);
);
하지만 문제는 스크립트의 마지막 부분(#Columns 문자 - NA#으로 누락된 셀 대체)
이유를 모르겠습니다 ... 작동하지 않습니다 ....
위의 작업에 통합되지 않으면 동일한 코드가 작동하기 때문에 매우 이상합니다.
dt = 현재 데이터 테이블();
FILL = dt << 열 이름 가져오기( Character );
For( i = 1, i <= N 항목( FILL ), i++,
FILL[i][dt << get rows where( Is Missing( FILL[i][] ) )] = "NA";
);
왜 그런 일이 일어나는지 아십니까... ?
협력해 주셔서 감사합니다Re: 숫자 열의 빈 값을 평균 열 값으로 바꾸는 방법이를 수행하는 한 가지 방법을 찾으십시오.
NamesDefaultToHere(1);
// Make some test data
dt = NewTable("Test", NewColumn("Data", Numeric, Continuous, Formula(if(Mod(Row(), 2) == 0, RandomNormal()))));
dt << addRows(20);
dt << runFormulas;
Column(dt, "Data") << deleteFormula;
// Impute missing cells with the mean of the others
Wait(3);
col = Column(dt, "Data");
values = col << getValues;
values[Loc(IsMissing(values))] = Mean(values);
col << setValues(values);
아마도 셀을 색칠하여 귀속된 값을 묘사하는 것이 좋습니다.