Excel e gli applicativi Microsoft Office Eliminazione duplicati

Login Registrati
Stai vedendo 9 articoli - dal 51 a 59 (di 59 totali)
  • Autore
    Articoli
  • #44571 Score: 0 | Risposta

    Aldo Ercolini
    Partecipante
      19 pts

      Ciao, ho cercato di migliorare il codice per i tempi, ma non riesco ad arrivare ai risultati di scossa, io modello base lui Sport    

      Io per eliminare e trascrivere i dati del tuo primo file di prova (2570 righe mi sembra) sono arrivato a 19,23 secondi.

      Quindi sul totale sono nettamente piu' lento.

      In ogni caso allego il file.

      Allegati:
      You must be logged in to view attached files.
      #44578 Score: 0 | Risposta

      scossa
      Partecipante
        37 pts

        planera63 ha scritto:

        Secondo te è possibile correggere le problematiche per i punti 2 e 3 ?

        Per il punto 2: nella parte del codice sottoindicata aggiugi le righe segnalate:

          On Error Resume Next
          For Each rRow In rngFr.Rows
            aRow = rRow.Value
            With Application
              aRow = .Transpose(.Transpose(aRow))
            End With
            aRow(6) = "" '<------- aggiungere
            aRow(7) = "" '<------- aggiungere
            aRow(8) = "" '<------- aggiungere
            sKey = Join(aRow, "§")
            sItem = rRow.Offset(0, -7).Cells(1, 1).Value
            cValid.Add sItem, sKey
            If Err.Number Then cDup.Add rRow.Row
            Err.Clear
          Next rRow
          On Error GoTo 0
        

        per il punto 3, nel file che hai allegato, il codice, corretto come sopra, elimina solo le 42 righe della stazione 0129-MS00730_TR12 e nessuna delle altre indicate. 

        #44586 Score: 0 | Risposta

        planera63
        Partecipante

          Aldo Ercolini ha scritto:

          Ciao, ho cercato di migliorare il codice per i tempi, ma non riesco ad arrivare ai risultati di scossa, io modello base lui Sport    

          Meglio di quanto pensassi   . Per processare gli oltre 536000 dati ha impiegato circa 14 minuti. Il tuo programma ha in parte risolto alcune problematiche già emerse con la versione ultima di Scossa.

          Vado al dunque.

          Per il gruppo di stazioni (es.: IT_m1lt01_12) con duplicati non effettivi eliminati da Scossa, la routine di Aldo ha individuato molti meno duplicati che però, andando ad analizzare sono reali. Per la stazione IT_m1lt01_12 nella campagna 2/19 e 4/19 il disco secchi è un parametro duplicato sia per il valore che per la quota, invece nella campagna 6/19 avviene quanto già emerso per la stazione 0129-MS00730_TR12, cioè alle due quote (SampleDepth) di 0,5m e 25m, per alcuni di questi 8 parametri (Secchi disk depth, Ammonium, Nitrate, Nitrite, Orthophosphate, Orthosilicate, Total nitrogen e Total phosphorus) sono stati trovati duplicati. Andando a vedere i dati originali si osserva che per la quota 0,5 gli 8 parametri sono presenti due volte, però per alcuni di essi (Secchi disk depth, Ammonium, Nitrite e Orthosilicate) i valori del campo “Concentration” sono uguali, e quindi vengono considerati dalla routine duplicati, eliminati da Foglio1 e copiati in DatiDuplicati, mentre per altri (Nitrate, Orthophosphate, Total nitrogen e Total phosphorus) i valori del campo “Concentration” sono diversi e quindi non vengono considerati dalla routine duplicati. Ai fini delle elaborazioni successive dei dati, per ciascuna stazione e per ciascuna campagna o data di monitoraggio ad una determinata quota non può essere associato lo stesso parametro due o più volte, anche se il valore del campo “Concentration” è diverso. Quindi per far in modo che la routine elimini tutti i duplicati reali per le due stazioni, IT_m1lt01_12 e 0129-MS00730_TR12, bisogna eliminare il campo  “Concentration” (colonna O) quale criterio per la ricerca dei duplicati e mantenere SampleDeath (colonna P). Cioè sole se esistono due record o righe con lo stesso valore dei campi MRU, Region, NationalStationID, SeaDepth, Year, Month, Day, Determin_Nutrients, SampleDepth vanno considerati duplicati; quindi escludiamo il campo Concentration per definire la condizione di righe duplicate. Quindi nel caso per una stazione (es.: IT_m1lt01_12) in una determinata data di monitoraggio (es.: 4/6/2019) esistono alla stessa quota di 0,5 m due valori di Concentration diversi per il parametro Nitrate, una delle due righe o record, a caso, dovrà essere considerata un duplicato, e quindi eliminata e copiata.

          Nel file allegato ho messo in Foglio1 i dati completi delle due stazioni, IT_m1lt01_12 e 0129-MS00730_TR12, e in DuplicatiAllData i duplicati copiati dal tuo programma che trovi anche nel file. 

            Scusami, per la perdita di tempo, ma se puoi fare la correzione per la problematica emersa per queste stazioni, te ne sono grato. Altrimenti non ti preoccupare, posso risolvere anche manualmente. Il grosso dei duplicati è stato individuato ed eliminato. Purtroppo questi problemi sono dovuti alla non corretta gestione dei dati dalle diverse ARPA regionali che mi inviano i dati. Potrebbe accadere che nei dataset degli altri anni che sto esaminando potrebbero comparire altre piccole problematiche, ma credo che grazie a te, scossa e agli amici del forum, la stragrande maggioranza dei duplicati viene individuata ed eliminata.

                        

          Allegati:
          You must be logged in to view attached files.
          #44589 Score: 0 | Risposta

          Aldo Ercolini
          Partecipante
            19 pts

            Se non ho capito male ho estratto meno righe di quelle dovute, ma corrette. Qundi non conviene fare una seconda passata sulle righe rimaste con il codice variato nelle condizioni?

            #44590 Score: 0 | Risposta

            planera63
            Partecipante

              Aldo Ercolini ha scritto:

              Se non ho capito male ho estratto meno righe di quelle dovute, ma corrette. Qundi non conviene fare una seconda passata sulle righe rimaste con il codice variato nelle condizioni?

              Esatto. Purtroppo la struttura dei dati è abbastanza complessa.  Non ti preoccupare fai le modifiche al codice e io lo faccio girare sui dati orinali.

              C'è una cosa che volevo chiederti. E' possibile migliorare le prestazioni di Excel in termini di velocità, modificando qualcosa sia nella configurazione del programma che nella configurazione del mio portatile (memoria, chip, ...) ? 

              Grazie mille.

              #44595 Score: 0 | Risposta

              planera63
              Partecipante

                scossa ha scritto:

                planera63 ha scritto:

                Secondo te è possibile correggere le problematiche per i punti 2 e 3 ?

                Ciao.

                Purtroppo Scossa l'aggiunta delle 3 linee di codice ha creato il doppio dei duplicati (oltre 50000) e prolungato enormemente i tempi di esecuzione (circa 4 ore). Inoltre vengo segnalati dei duplicati che duplicati non sono. Ci deve essere qualche problema.

                 

                #44600 Score: 0 | Risposta

                scossa
                Partecipante
                  37 pts

                  planera63 ha scritto:

                  Purtroppo Scossa l'aggiunta delle 3 linee di codice ha creato il doppio dei duplicati (oltre 50000) e prolungato enormemente i tempi di esecuzione (circa 4 ore). Inoltre vengo segnalati dei duplicati che duplicati non sono. Ci deve essere qualche problema.

                  Quelle 3 righe di codice non fanno altro che escludere le tre colonne M N O (NutrientsSeawater_unit
                  LOD_LOQ_Flag Concentration), prova a togliere le prime due e lascire solo l'ultima ( aRow(8) = "" ).

                  Purtroppo senza il file originale completo si fa poco, mi spiace.

                  #44601 Score: 0 | Risposta

                  Aldo Ercolini
                  Partecipante
                    19 pts

                    Ti allego il file cn la macro corretta. Non controlla più i dati in colonna 15 (O). Il resto rimane invariato.

                    Allegati:
                    You must be logged in to view attached files.
                    #44677 Score: 0 | Risposta

                    planera63
                    Partecipante

                      Aldo Ercolini ha scritto:

                      Ti allego il file cn la macro corretta. Non controlla più i dati in colonna 15 (O). Il resto rimane invariato.

                      Ciao Aldo.

                      Allora il tuo codice ora funziona anche se ho dovuto fare una piccola modica al codice 

                      For i = 4 To 16
                      
                                      'If i <> 15 Then 'codice di Aldo
                                       If i <> 15 And i <> 14 Then 'codice di Pask 14=colonna del campo "LOD_LOQ_Flag" 

                      Ho verificato che alcuni duplicati tipo:

                      Col     13             14    15
                      Total Nitrogen         0,40
                      Total Nitrogen   <    0,25

                      differenziavano non soltanto per la colonna 15 (Concentration) ma anche per la colonna 14 (LOD_LOQ_Flag), per cui bisognava escludere oltre alla colonna 15 anche la colonna 14. Io ho fatto la modifica sulla base delle mie poche reminescenze di VBA e di un po' di intuito. Comunque il tuo codice credo sia molto veloce: impiega circa 14 minuti per processare tutti i dati.

                      La sai una cosa strana. Venerdì ho eseguito il tuo codice su circa 20000 righe. Il PC fisso, una workstation con Xeon e 64 Gb di Ram ha impiegato qualche secondo in più del mio portatile Lenovo i7vPro 32 Gb di Ram !!!       

                       

                      Grazie mille Aldo per la disponibilità data fino alla soluzione del problema, ma anche agli altri come Scossa e tutti gli altri che hanno dato comunque un loro contribuito.

                      Un ultima domanda. E' possibile ottimizzare le prestazioni di EXCEL, impostando più RAM per il programma ? Oppure attraverso altre modifiche  ?

                      Un ultim

                    Login Registrati
                    Stai vedendo 9 articoli - dal 51 a 59 (di 59 totali)
                    Rispondi a: Eliminazione duplicati
                    Gli allegati sono permessi solo ad utenti REGISTRATI
                    Le tue informazioni: