Zaehler einbauen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
silky vanilla
User
Beiträge: 51
Registriert: Donnerstag 3. Mai 2007, 09:46

Ich habe 7 Dateien aus denen ich jeweils die 4.Spalte summiere und in einer neuen Datei, die in der 4.Spalte dann nur noch die Summe enthaelt, ausgebe.

Code: Alles auswählen

inp0 = open('STRING_textmining.tab')header0 = inp0.readline()
inp1 = open('Ewing_Score nicht log trans1.LLS')
header1 = inp1.readline()
inp2 = open('Rhodes_Score1.LLS')
header2 = inp2.readline()
inp3 = open('STRING_coexpression1.LLS')
 header3 = inp3.readline()
inp4 = open('STRING_cooccurence1.LLS')
header4 = inp4.readline()
inp5 = open('STRING_fusion1.LLS')
header5 = inp5.readline()
inp6 = open('STRING_neighborhood1.LLS')
header6 = inp6.readline()
inp7 = open('STRING_textmining1.LLS')
header7 = inp7.readline()

out = open('max_of_all_LLS','w')


for line0, line1, line2, line3, line4, line5, line6,line7 in zip(inp0, inp1, inp2, inp3, inp4, inp5, inp6, inp7):
    cols0 = line0.split()
    cols1 = line1.split()
    cols2 = line2.split()
    cols3 = line3.split()
    cols4 = line4.split()
    cols5 = line5.split()
    cols6 = line6.split()
    cols7 = line7.split()
        sum=float(cols1[3])+float(cols2[3])+float(cols3[3])+float(cols4[3])+float(cols5[3])+float(cols6[3])+float(cols7[3])
    newline = '%s\t%s\t%s\t%f\n' % (cols0[0], cols0[1], cols0[2], sum)
    out.write(newline)
   
inp0.close()
inp1.close()
inp2.close()
inp3.close()
inp4.close()
inp5.close()
inp6.close()
inp7.close()
out.close()
Nun zu meiner Frage. Ich moechte gern wissen wieviele der Werte in Spalte 4 der Eingabedateien (aus denen ich dann die Summe bilde) > 0 sind (also durch wieviele Werte vergroessert sich die Summe?)
Ich muesste also einen Zaehler einbauen...aber wo genau und wie?
Kann mir jemand weiter helfen?
Zuletzt geändert von silky vanilla am Dienstag 17. Juli 2007, 11:05, insgesamt 1-mal geändert.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Das Ding kenne ich doch ;)
Nicht mal getraut meine Version auszuprobieren?!
(Würde zudem gerne mal wissen ob das geht)

Naja egal, zu deiner Frage mit ".count(0)" kannst du die Nullen in einer Liste zählen.
Bei deiner lösung würd das dann so aussehen .....

Code: Alles auswählen

null_count = cols1[3].count(0) + cols2[3].count(0) + cols3[3].count(0) + cols4[3].count(0) + cols5[3].count(0) + cols6[3].count(0) + cols7[3].count(0)
Nicht schön, also mal lieber Schleifen angucken ;)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

silky vanilla hat geschrieben:

Code: Alles auswählen

    s = cols1[3],cols2[3],cols3[3],cols4[3],cols5[3],cols6[3],cols7[3]
    a = max(s)
    newline = '%s\t%s\t%s\t%s\n' % (cols0[0], cols0[1], cols0[2], a)
Hallo silky vanilla!

Unabhängig von deiner Frage:

Vorsicht bei "max"!

Code: Alles auswählen

>>> s = ["100", "2000", "200", "50"]
>>> max(s)
'50'
>>> max( int(item) for item in s )
2000
>>> 
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
silky vanilla
User
Beiträge: 51
Registriert: Donnerstag 3. Mai 2007, 09:46

Nicht schön, also mal lieber Schleifen angucken :wink:
Werd ich machen.


Zaehlt es aber in deinem Beispiel nicht alle Nullen die vorkommen, also auch die, fall ein Gleitkommazahl in der Spalte steht, die eine Null enthaelt?

Ich moechte aber nur wissen aus wieviel Werten, die >0 sind, die Summe besteht.
D.h. maximal koennen es 7 Werte sein.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo silky vanilla!

Ich habe keine Ahnung, ob es so funktioniert. Ich war zu faul, mir Testdateien anzulegen. Musst du also selber testen.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-


mining_file = open('STRING_textmining.tab')

# Input-Dateien in einer Liste
inp_files = [
    open('Ewing_Score nicht log trans1.LLS'),
    open('Rhodes_Score1.LLS'),
    open('STRING_coexpression1.LLS'),
    open('STRING_cooccurence1.LLS'),
    open('STRING_fusion1.LLS'),
    open('STRING_neighborhood1.LLS'),
    open('STRING_textmining1.LLS'),
]

out_file = open('max_of_all_LLS','w')

# Erste Zeile überspringen
mining_file.readline()
for inp in inp_files:
    inp.readline()

# Berechnen
for inp_lines in zip(*inp):
    max_val = 0
    count_val = 0
    for inp_line in inp_lines:
        val = int(inp_line.split()[3])
        if val > 0:
            count_val += 1
        max_val = max(val, max_val)
    mining_cols = mining_file.readline().split()
    newline = '%s\t%s\t%s\t%i\n' % (mining_cols[0], mining_cols[1], mining_cols[2], max_val)
    out_file.write(newline)
    print max_val

# Dateien schließen
mining_file.close()
for inp in inp_files:
    inp.close()
out_file.close()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Achso, also sowas

Code: Alles auswählen

non_zero_values = ( len(cols1[3]) - cols1[3].count(0) ) + ( len(cols1[3]) - cols1[3].count(0) )  + ( len(cols1[3]) - cols1[3].count(0) )  ....
Float 0.xxxx Werte werden nicht gefunden.

Edit: sone ähnliche (ungetestete) Lösung hatte ich auch schon beim letzten mal in den Raum geworfen ;)
http://www.python-forum.de/post-73092.html#73092
silky vanilla
User
Beiträge: 51
Registriert: Donnerstag 3. Mai 2007, 09:46

@Gerold: Beim Testen kam folgende Fehlermeldung
Traceback (most recent call last):
File "/home/cellnet/claudiak/bei/18.561.296 random interactions/100 50 1000/sum and count evidence.py", line 26, in <module>
val = int(inp_line.split()[3])
IndexError: list index out of range
silky vanilla
User
Beiträge: 51
Registriert: Donnerstag 3. Mai 2007, 09:46

Das Problem ist geloest, Danke
Antworten