Pagina 2 di 3

Re: caricamento dati da excel con python

MessaggioInviato: 16/06/2019, 05:09
da mic_1
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?

Re: caricamento dati da excel con python

MessaggioInviato: 16/06/2019, 15:18
da apatriarca
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..).

Re: caricamento dati da excel con python

MessaggioInviato: 17/06/2019, 09:36
da mic_1
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

Re: caricamento dati da excel con python

MessaggioInviato: 17/06/2019, 12:28
da apatriarca
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.

Re: caricamento dati da excel con python

MessaggioInviato: 17/06/2019, 16:35
da mic_1
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...

Re: caricamento dati da excel con python

MessaggioInviato: 17/06/2019, 18:49
da mic_1
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

Re: caricamento dati da excel con python

MessaggioInviato: 17/06/2019, 23:39
da apatriarca
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.

Re: caricamento dati da excel con python

MessaggioInviato: 18/06/2019, 11:12
da mic_1
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!

Re: caricamento dati da excel con python

MessaggioInviato: 18/06/2019, 11:19
da apatriarca
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.

Re: caricamento dati da excel con python

MessaggioInviato: 24/06/2019, 10:15
da mic_1
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.