rimuovere le colonne categoriche quasi vuoteQualcuno può aiutarmi?
Da un database ho la necessità di rimuovere le colonne categoriali con una certa percentuale di caratteri mancanti e allo stesso tempo vorrei rimuovere le colonne numeriche con una percentuale di valori stagnanti (non necessario al 100%).
Grazie. Felice
Ri: rimuovere le colonne categoriali quasi vuotePerfetto grazie.
Felice
Ri: rimuovere le colonne categoriali quasi vuoteSì, tutto dipende da come lo imposti. Il primo controllo consiste nel trovare il valore più comune in ciascuna colonna e determinare se è superiore o inferiore alla percentuale di soglia. Sfortunatamente, un valore mancante non è un valore, quindi non può essere il più comune. Ecco perché non funziona sulle colonne numeriche. Funziona sulle colonne Carattere b/c "" è mancante e presenta un valore di stringa vuoto.
Spero che questo aiuti a spiegare le cose.
Se desideri maggiore granularità, esegui semplicemente più cicli con percentuali diverse utilizzando strategie diverse.Ri: rimuovere le colonne categoriali quasi vuoteCiao msharp, grazie per la tua risposta. Facciamo un'altra domanda. La variabile percentuale funziona sia per le colonne categoriche che per quelle numeriche? Se sì, posso avere due valori diversi per i casi mancanti e stagnanti?
Scusate la domanda forse stupida ma non sono esperto del linguaggio jsl.
Felice
Ri: rimuovere le colonne categoriali quasi vuoteBasta combinare le strategie. Qualcosa di simile a:
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
if(nrows(loc(aslist(column(dt,i)<<GETASMATRIX> numRighe * percentuale/100, insert into(delcols, i); , if(Col N Missing(column(dt,i)) > numRows * percent/100, insert into(delcols, i); ); ); ); if(nitems(delcols) > 0, dt << cancella colonne(delcols)); </GETASMATRIX>Ri: rimuovere le colonne categoriali quasi vuoteCIAO
Ho provato il tuo script nella seconda tabella qui sotto e il risultato è qui.
Come puoi vedere, è stato in grado di rimuovere quasi tutte le colonne desiderate, ma la seconda (col2) no. Come posso fare per rimuoverlo anch'io?
Grazie Felice


Ri: rimuovere le colonne categoriali quasi vuotepotresti riuscire a utilizzare il metodo che hai pubblicato prima ma con la modalità della colonna per qualcosa di meno del 100%
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
if(nrows(loc(aslist(column(dt,i)< numRighe * percentuale/100, insert into(delcols, i); ); ); if(nitems(delcols) > 0, dt << cancella colonne(delcols));
Ri: rimuovere le colonne categoriali quasi vuotePenso che anche tu cerchi qualcosa del genere:
Che eliminerà una colonna numerica se tutti i dati hanno un solo valore.
Names Default To Here( 1 );
dt = Current Data Table();
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
col = column(dt, i);
try(summarize(dt, max = max(col), min = min(col));
if((max == min) | (ismissing(max)),
insertinto(delcols, i);
)
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols));Ri: rimuovere le colonne categoriali quasi vuoteUn altro metodo, credo leggermente più robusto.
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
delcols = {};
numRows = nrows(dt);
for(i=1; maxi=NCols(dt), i<=maxi, i++,
col = column(dt, i);
nmissing = col N missing(col);
if(nmissing > numRows * percent/100,
insert into(delcols, i);
);
);
if(nitems(delcols) > 0, dt << delete columns(delcols));
Ri: rimuovere le colonne categoriali quasi vuoteEcco uno script veloce e sporco che elimina le colonne con meno di una percentuale specificata di dati
Names Default To Here( 1 );
dt = Current Data Table();
percent = 90;
colList = dt << get column names( character, string );
NumRows = N Rows( dt );
For( i = N Items( colList ), i >= 1, i--,
If( Col Number( Column( dt, i ) ) / NumRows * 100 < percent,
dt << delete columns( colList[i] )
)
);