Re: caricamento dati da excel con python

Messaggioda mic_1 » 16/06/2019, 05:09

Non è da molto che uso python, sono ancora alle prime armi.

Ho notato che finchè non salvo il file non lo vedo in cartella.
-prima effettuo una scrittura in fase di importazione (uso la libreria xlwt)
-poi lettura dei dati da manipolare (uso la libreria xlrd)
-infine scrittura dei risultati sulla 2a scheda (uso la libreria xlwt)

Ho cercato e provato più volte anche con altre librerie sperando di trovarne una che mi permettesse di leggere e scrivere senza dover richiamare ogni volta il workbook e la worksheet che serve al momento.

dopo il wb.save(...)
ho caricato il file in lettura con

wb2 = xlrd.open_workbook(join(mypath,'generated_xls.xls'))
sheet_r = wb2.sheet_by_name("Sheet1")

ciclo per le righe e nel punto in cui devo scrivere ho richiamato xlwt e la sheet2 precedentemente creata.

Mi potresti spiegare come procedere in maniera più rapida? Te ne sarei grata.

PS: LE INFORMAZIONI CHE STO ELABORANDO non sono numeriche ma INTERAZIONI TRA PROTEINE che consistono in nome di PROTEINE/NODI e tipi di INTERAZIONE/LINKS. Ho pensato che la cosa più naturale fosse portare tutto su excel e rielaborare le informazioni finchè non trovo il numero dei nodi e per ciascun nodo il numero di interazioni suddividendole se riesco per tipologia di interazione. Solo a questo punto potrei procedere con i calcoli statistici richiesti.
Che ne pensi?
mic_1
Junior Member
Junior Member
 
Messaggio: 129 di 386
Iscritto il: 11/01/2011, 18:11

Re: caricamento dati da excel con python

Messaggioda apatriarca » 16/06/2019, 15:18

In quale ambiente/linguaggio hai l'intenzione di procedere con i calcoli statistici? Mi sembra infatti che quello che stai cercando di fare in Python possa essere fatto anche direttamente all'interno di Excel. Se l'analisi statistica deve avvenire in Excel allora non vedo la ragione di usare Python.

Se al contrario l'idea è di usare Python per tutto, allora cercare di esportare in Excel è solo una inutile complicazione. Ma se proprio vuoi scrivere dei file Excel, allora puoi forse dare una occhiata a Panda (può in effetti esserti utile in ogni caso..).
apatriarca
Moderatore
Moderatore
 
Messaggio: 5236 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: caricamento dati da excel con python

Messaggioda mic_1 » 17/06/2019, 09:36

beh se ci fosse modo di riordinare le informazioni da un file, memorizzarle, elaborarle per il conteggio e salvarle in delle variabili di appoggio per me va bene. L'unica cosa è che non so come si fa :-D :lol:

Devo poi effettuare dei calcoli e applicare la teoria dei grafi :roll: :-D
mic_1
Junior Member
Junior Member
 
Messaggio: 130 di 386
Iscritto il: 11/01/2011, 18:11

Re: caricamento dati da excel con python

Messaggioda apatriarca » 17/06/2019, 12:28

Perché non inizi a descrivere che cosa vuoi fare con questi dati? Se ho capito bene il tuo input sono diversi file di testo, con ogni riga formata da tre parole separate da spazi. Ogni riga è una interazione tra due proteine di un qualche tipo? Il primo passaggio è quello di memorizzare questi dati in un qualche tipo di struttura dati (per iniziare possiamo supporre una lista probabilmente). Che cosa vuoi fare poi con questi dati esattamente? Posso provare a guidarti a scrivere il codice che ti serve.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5237 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: caricamento dati da excel con python

Messaggioda mic_1 » 17/06/2019, 16:35

Ti ringrazio! Ti spiego: ho bisogno di risalire a quale siano i nodi, i links per ogni nodo (e se possibile anche le diverse tipologie di interazioni (in totale ne sono 4 in questo caso ma ne potrebbero essere anche di più) uesta è la mia idea tramite excel ma se ci fosse un modo più rapido ne sarei felice :D
Ho scaricato la libreria Networkx per i calcoli successivi.
Ho notato che alcune link sono diretti altri indiretti, ma per il caso in esame credo si debba ricorrere al SCALE-FREE NETWORK e calcolare le proprietà dei network come coeff di clustering, betweenees, centralità etc...

volevo poi realizzare grafici con matplotlib o pyplot... poi vedo...

Sto provando ora a studiarmi pandas per vedere come manipola le informazioni. Pare sia ottimo per i data science.
Non so però quanto possa essere utile per dati non numerici. Ora cmq provo...
mic_1
Junior Member
Junior Member
 
Messaggio: 131 di 386
Iscritto il: 11/01/2011, 18:11

Re: caricamento dati da excel con python

Messaggioda mic_1 » 17/06/2019, 18:49

Io avevo scritto una parte di codice in cui caricava da .txt in questo modo, usando variabili di appoggio:

for textfile in textfiles:
f = open(textfile, 'r+', encoding='utf-8')
row_list = []
for string in f:
s = string.split()
t = s[0]
q = s[1]
r = s[2]
str = [t,q,r]

str corrisponde alla mia Tupla:
t contiene la prima colonna
q la 2a colonna
r la 3a colonna

A questo punto individuare i nodi e contarli mi risultava difficile, per questo ho pensato di scriverli su excel.

NOTA:
Ho riadattato il codice con numpy creando degli array[] .
C'è modo di confrontare gli elementi di uno stesso array tra loro???

for textfile in textfiles:
f = open(textfile, 'r+', encoding='utf-8')
col0 = []
col1 = []
col2 = []
for string in f:
s = string.split()
col0 = numpy.array(s[0])
col1 = numpy.array(s[1])
col2 = numpy.array(s[2])

se faccio un ciclo for
for i in range(0, len(s)):
c'è modo di confrontare gli elementi di uno stesso array????

GRAZIE
mic_1
Junior Member
Junior Member
 
Messaggio: 132 di 386
Iscritto il: 11/01/2011, 18:11

Re: caricamento dati da excel con python

Messaggioda apatriarca » 17/06/2019, 23:39

Entrambi i codici hanno lo stesso difetto che aveva il tuo codice originario quando scrivevi i valori nel file excel. Continui infatti a sovrascrivere gli stessi valori. Il seguente codice memorizza tutti i dati in una lista di tuple di 3 elementi:
Codice:
values = []
for textfile in textfiles:
    with open(textfile, 'r') as f:
        for line in f:
            t, q, r = line.split()
            values.append((t, q, r))

A questo punto values[0] sarà ad esempio la prima riga, values[1] la seconda e così via.. A seconda di quello che devi fare, altre strutture dati potrebbero essere migliori ovviamente. Per esempio, se volessi raggruppare le righe in base al primo valore puoi salvare tutto in un defaultdict come segue:
Codice:
values = defaultdict(list)
for textfile in textfiles:
    with open(textfile, 'r') as f:
        for line in f:
            t, q, r = line.split()
            values[t].append((q, r))

In questa versione avresti che values.keys() è la lista di tutti i possibili primi valori (non duplicati) e values[key] è la lista di tutte le coppie di valori che seguono key nei files.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5238 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: caricamento dati da excel con python

Messaggioda mic_1 » 18/06/2019, 11:12

Ti ringrazio! Ho provato ma mi restituisce errore qui: t, q, r = line.split() (Ho provato ad inserire *r ma nulla)
Ora provo a vedere in giro nel web se ci sono soluzioni in merito.
Alla fine per non perdere tempo mi sono intanto contata manualmente tutti i link entranti per ogni singolo nodo, perchè avevo solo quelli entranti.
per il primo nodo devo contare la prima colonna e così so quanti links uscenti ho. mentre dalla 3a fila risalgo al numero dei nodi entranti.
Dovendo poi ricercare ogni nodo della 1a colonna, nella 3a colonna, non è meglio ricorrere ad excel? o c'è modo di ricorrere a variabili temporanee. Devo ricercare per ogni riga, e non sono poche, per poi contarle.

Secondo te è fattibile senza ricorrere ad excel? e usando quali librerie? così vedo di studiarmele.

Grazie!
mic_1
Junior Member
Junior Member
 
Messaggio: 133 di 386
Iscritto il: 11/01/2011, 18:11

Re: caricamento dati da excel con python

Messaggioda apatriarca » 18/06/2019, 11:19

Che eccezione viene lanciata? Ci sono delle righe vuote/con solo spazi? Per esempio alla fine del file? Se fosse così devi catturare l'eccezione o aggiungere un test per eliminare quelle righe.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5239 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: caricamento dati da excel con python

Messaggioda mic_1 » 24/06/2019, 10:15

Ciao e scusami per il ritardo ma ho fatto alcune prove e ho trovato la soluzione.
Evitando di scrivere su excel ho risolto usando questa istruzione:

node1, edges, node2 = line.strip().split()

Cosa ne pensi???
per ogni singola variabile ottengo l'elenco completo o almeno spero :D

excel mi serviva anche per fare delle verifiche e pensavo di usarlo per archiviare i risultati ma credo sia meglio aprire una finestra per mostrare il grafico e i risultati.
mic_1
Junior Member
Junior Member
 
Messaggio: 134 di 386
Iscritto il: 11/01/2011, 18:11

PrecedenteProssimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite