<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Qualcuno conosce il modo migliore per determinare quante volte un segnale (ho 60 segnali di interesse) con posizioni di coordinate xy viene ripetuto su 10 misurazioni (quante volte appare oltre 10 misurazioni). Ho una lista di> 20.000 segnali che sono stati identificati (tutti con differenti posizioni xy) ma voglio solo vedere quante volte vengono ripetute ~ 60 di esse (ogni segnale NON può avere la stessa coordinata xy in modo che non si sovrappongano) . La posizione xy può variare di una piccola quantità per lo stesso segnale, quindi la loro necessità di essere una certa tolleranza nella posizione xy. Ho cercato nel forum di discussione senza trovare nulla di rilevante, ma per favore indirizzami ad una discussione appropriata se ne conosci uno. Grazie!
etucker0 ,
fammi vedere se ho capito se capisco correttamente c'è una misura e una posizione e vuoi sapere quante ripetizioni ci sono per una misurazione (con una certa tolleranza) in una posizione (con una certa distanza). prendi ad esempio i dati campione degli uragani con le posizioni e le misure della velocità del vento. se vuoi sapere per ogni riga quante volte ci sono misure del vento simili (in nodi) entro una certa distanza (raggio in KM) puoi usare il seguente script.
alla fine, avrai un numero di misure "Matching" per ogni riga nella tabella.
in alternativa, puoi confrontare i dati su due tabelle, se hai un elenco preselezionato con cui vuoi confrontarti.
fammi sapere se questo è quello che stai cercando.
Chiari Globali () ;
Nomi predefiniti qui ( 1 ) ;
// apri file di dati (punti) - questo include l'osservazione che vogliamo aggiornare
sdots = Aperto ( "C: \ Programmi (x86) \ SAS \ JMPSW \ 11 \ Samples \ Data \ Hurricanes.jmp" ) ;
puntini = Tabella dati ( sdots ) << sottoinsieme ( Misura di prova ( 2000 ) ) ; // crea un tavolo più piccolo per la velocità
Vicino ( sdots , nessun salvataggio ) ;
// aggiungi un po 'di rumore alla misurazione del vento
puntini << Nuova colonna ( "Vento" , formula ( : Nome ( "Vento (nodi)" ) + Casuale normale () ) ) ;
// introduce una colonna count
puntini << Nuova colonna ( "Ripetuto" ) ;
// estrae i valori di longitudine e latitudine dalla tabella - come radianti
X = ( Colonna ( puntini , "Longitudine" ) << getValues ) * Pi () / 180 ;
y = ( Colonna ( puntini , "Latitudine" ) << getValues ) * Pi () / 180 ;
// dichiara la funzione di calcolo in KM
haversine = Funzione ( { long1 , LAT1 , long2 , Lat2 , R = 6371 } ,
{ Locale predefinito } ,
un = Peccato ( ( LAT1 - Lat2 ) / 2 ) ^ 2 + cos ( LAT1 ) * cos ( Lat2 ) * Peccato ( ( long1 - long2 ) / 2 ) ^ 2 ;
c = 2 * Un'abbronzatura ( un ^ 0.5 , ( 1 - un ) ^ 0.5 ) ;
d = R * c ;
) ;
// definisce la tolleranza in termini di distanza e velocità del vento
distanza = 100 ; // in Km
differenza = 10 ; // in Knots
Aspettare ( 0.01 ) ;
// esegue la funzione lungo le righe della tabella
Per ( io = 1 , io <= N Row ( puntini ) - 1 , io ++,
z = 0 ;
Per ( esso = 1 , esso <= N Row ( puntini ) - 1 , esso ++,
Se (
haversine ( X [ io ] , y [ io ] , X [ esso ] , y [ esso ] ) < distanza // condizione per la distanza
& Addominali ( : Vento [ io ] - : Vento [ esso ] ) < differenza
, // condizione per la differenza nella misurazione del vento
z ++; // conta le partite
)
) ;
z -; // rimuovi uno che corrisponde a se stesso.
: ripetuto [ io ] = z ; // aggiorna la tabella
) ;
// mappa i risultati
Costruttore di grafici (
Mostra il pannello di controllo ( 0 ) ,
variabili ( X ( : Longitudine ) , Y ( : Latitudine ) , Taglia ( : ripetuto ) ) ,
Elementi ( Punti ( X , Y , Leggenda ( 1 ) , jitter ( 1 ) ) ) ,
SendToReport (
Spedizione ( {} , "Costruttore di grafici" , framebox , { Mappa di sfondo ( immagini ( "Terra semplice" ) ) , Grid Line Order ( 2 ) , Ordine della linea di riferimento ( 3 )} )
)
)
Ciao Ron,
Scusa, avrei dovuto essere più chiaro. Questi dati falsi sono per due segnali SOLO dalla prima misurazione. Quindi, ci sono altre 9 misure ripetute dove per questi due segnali, ci saranno valori x e y leggermente spostati (e numeri ID decisamente diversi). Inoltre, l'Ampiezza SD1 e SD2 varieranno leggermente. Spero che sia d'aiuto.
Una ripetizione potrebbe essere simile a questa:
ID | X | y | Ampiezza SD1 | Ampiezza SD2 | | | | | | |
|---|
21775 | -22285,12 | -6664,55 | 2950 | 0 |
21799 | -17723,33 | 7.946,01 | 0 | 5050 |
-Eric
Ciao Ron,
Ecco alcuni dati di esempio, ciascuna delle due righe sono due "segnali". Una cosa da tenere a mente è che l'ID cambia in realtà per ogni risultato di misurazione della ripetizione (lo strumento rinumera tutti i segnali per ogni misurazione, quindi non posso usare l'ID per rilevare lo stesso segnale in ogni misurazione ripetuta). SD1 e SD2 sono canali di misurazione diversi che forniscono dati per ciascun segnale. La posizione xey per lo stesso segnale può variare leggermente come menzionato nel mio post originale.
ID | X | y | Ampiezza SD1 | Ampiezza SD2 | | | | | | |
|---|
21770 | -22281,78 | -6669,19 | 3000 | 0 |
21792 | -17728,65 | 7.949,11 | 0 | 5000 |
La coppia X, Y, arrotondata a, diciamo, 2 cifre decimali, determina il "nome" del segnale? In tal caso, utilizzare i valori arrotondati come chiave per un array associativo potrebbe essere un approccio per il conteggio delle occorrenze di coppie simili.
conteggi = array associativo ();
conta << SetDefaultValue (0);
conta [char (round (pi (), 2)) || "," || char (round (e (), 2))] + = 1;
Show (conta);
counts = ["3.14,2.72" => 1, => 0];