Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: prevod tabulky do matice v Pythonu nebo do .cvs souboru oddelenho stredniky  (Přečteno 4062 krát)

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
Zdravim

Resim ted takovy problem : Mam v textovem souboru ulozenou tabulku a potreboval bych ji nejak dostat do Pythonu ve forme matice. K tomuto ucelu jsem si nastudoval praci s numpy jenze problem je ten import. Nasel jsem nekolik popsanych reseni prevedeni .cvs souboru, kde jsou ale jednotlive hodnoty oddelene strednikem. V moji tabulce jsou ale hodnoty oddelene mezerami, snad to ani neni tabulator ale proste jen nejaky pocet mezer. Krome toho mam v prvnim sloupci cisla radku coz je zbytecnost a pak oznaceni dat oddelene pomoci | . Cele to vypada nejak takhle :
Kód: [Vybrat]
1: sp|Q8GBW6|12S_PROFR        100       8       5       6       7       9       6       5
2: sp|P93343|1433C_TOBAC        8     100       5       9       7       4       6       8
3: sp|P18485|1A12_SOLLC         5       5     100       5       5       8       5       8
4: sp|P37821|1A1C_MALDO         6       9       5     100       6       9       7       6
5: sp|Q00740|1A1D_PSEUD         7       7       5       6     100       6      25      10
6: sp|O57809|1A1D_PYRHO         9       4       8       9       6     100       8       6
7: sp|Q7M523|1A1D_CYBSA         6       6       5       7      25       8     100       7
8: sp|Q96QU6|1A1L1_HUMAN        5       8       8       6      10       6       7     100

Rad bych abych mel v prvnich trech sloupcich jen oznaceni sp ... P93343 ... 12S_PROFR a pak nasledovala vlastni matice. Cislovani radku vypustit. Ted resim jaka je nejlepsi cetsa k uspechu.
1. Cele to nejak nacist do Pythonu a pak pripadne rozdelit sloupce.
- zatim se mi ani nepodaril krok jedna, protoze vetsina popsanych navodu pojednava o importu .csv oddelenych strednikem nebo jinymy znaky.

2. Udelat nejaky preproccesing pomoci bashe aby vznikla kyzena tabulka oddelena srtedniky, kterou bych pak jen jednoduse importoval do Pythonu.
- ???

Priznam se ze s tim zatim neprilis uspesne bojuju, tak kdyby nekdo poradil, budu moc rad. Mimojine ta tabulka je velikosti cca. 7000x7000 zaznamu, takze prave proto hledam pokud mozno co nejvic optimalni reseni, jelikoz kazdy vypocet docela slusne zaseka pocitac.


diky moc  K
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

mka

  • Závislák
  • ***
  • Příspěvků: 1907
  • Chybovat je moje.
    • Příložany Cé Zet
A co ti brání si ten soubor upravit pomocí office a vyplivnout ten kýžený .csv?

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
To sem zapomnel napsat - prave velikost te tabulky : cca. 7000 x 7000 zaznamu. I kdyz ji muzu krasne importovat do Calcu - nastavim oddeleni pomoci pauzy a zaskrtnu "merge delimeters" - tak tolik radku a sloupcu Calc proste nepojme a po urcite dobe napise ze byl prekrocen maximalni povoleny pocet radku/sloupcu.
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341

2. Udelat nejaky preproccesing pomoci bashe aby vznikla kyzena tabulka oddelena srtedniky, kterou bych pak jen jednoduse importoval do Pythonu.
- ???

Edit nejak jsem to blbe pochopil. Tohle by melo fungovat, ale urcite by to slo jednoduseji.
A co treba
Kód: [Vybrat]
sed 's#|#;#g' | sed 's#^[0-9][0-9]*: ##g' | sed 's#  *#;#g'
« Poslední změna: 15 Srpna 2011, 11:19:00 od Uran »
"Pouze text v MS Wordu je opravdu čistý, příteli."

mka

  • Závislák
  • ***
  • Příspěvků: 1907
  • Chybovat je moje.
    • Příložany Cé Zet
To sem zapomnel napsat - prave velikost te tabulky : cca. 7000 x 7000 zaznamu. I kdyz ji muzu krasne importovat do Calcu - nastavim oddeleni pomoci pauzy a zaskrtnu "merge delimeters" - tak tolik radku a sloupcu Calc proste nepojme a po urcite dobe napise ze byl prekrocen maximalni povoleny pocet radku/sloupcu.

Co to znamená 7000 x 7000 záznamů? Myslíš 7000 řádků o 7000 sloupcích nebo co? A nebo je těch 7000 x 7000 výsledkem nějakého "výpočtu"? Protože, obávám se, 49.000.000 záznamů je na normální mašinky docela dost, ať to děláš čím chceš...
« Poslední změna: 15 Srpna 2011, 12:02:14 od mka »

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
Ta tabulka je vysledkem analyzy cca. 7000 proteinovych sekvenci - sequence similarity - viz. treba Needleman-Wunsch algorithmus. Tedy kazdy s kazdym a dela to tech 49Mio zazanamu priblizne.

Ja sem se doclea dobre pohnul v Pythonu po objeveni povelu split :

Kód: [Vybrat]
file=open("/home/karlitos/work/sandbox/example.pim", 'r')
CurrentLine = file.readline()
 
while CurrentLine:
    TempList =  (''.join((CurrentLine.split(': ')[1:]))).split('|')
 
   CurrentLine = file.readline()
 
file.close()

Problem ktery momentalne resim je jak rozsekat ten zbytek - od posledniho oznaceni po numericke hodnoty. Program co mi tuhle tabulku vyplivnul totiz pocita s urcitym poctem mist pro kazdy zaznam - a zaznamy jsou v procentech od 0 do 100. Tedy treba 7 a 8  jsou oddeleny sedmi nulama ale 7 a 10 budou oddeleny sesti a 7 a 100 peti ...

Tak se obavam ze se bez nejake smycky po jednotlivych znacich bohuzel dal neobejdu
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
Ahoj, radim pouzit generatory, pokud je ten soubor fakt tak mega. Zkus tohle (jak open() tak ta moje fce je generator, takze by to nemelo tolik zrat)

https://gist.github.com/1147379

Vystup je (s tema listama uz si poradis, ne?):
Kód: [Vybrat]
starenka@kosmik1:/prac/python/nomnom$ ./nomnom.py
['sp', 'Q8GBW6', '12S_PROFR', '100', '8', '5', '6', '7', '9', '6', '5']
['sp', 'P93343', '1433C_TOBAC', '8', '100', '5', '9', '7', '4', '6', '8']
['sp', 'P18485', '1A12_SOLLC', '5', '5', '100', '5', '5', '8', '5', '8']
['sp', 'P37821', '1A1C_MALDO', '6', '9', '5', '100', '6', '9', '7', '6']
['sp', 'Q00740', '1A1D_PSEUD', '7', '7', '5', '6', '100', '6', '25', '10']
['sp', 'O57809', '1A1D_PYRHO', '9', '4', '8', '9', '6', '100', '8', '6']
['sp', 'Q7M523', '1A1D_CYBSA', '6', '6', '5', '7', '25', '8', '100', '7']
['sp', 'Q96QU6', '1A1L1_HUMAN', '5', '8', '8', '6', '10', '6', '7']

Kdyztak dej vedet. s

PS. Moc nechapu, co s tim pak chces provadet, ale pokud to chces zapsat do csv, koukni na modul csv - zapisuje se to stejne po radkach, takze to staci nakrmit z ty fce

PPS. Ne, ten kod neni hezkej, ale mel by bezet rychle a nezrat ;)
« Poslední změna: 15 Srpna 2011, 20:42:07 od starenka »
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

jmp

  • Host
koukam, ze by tam melo byt mozno pouzit retezec.strip() a to by melo odpreparovat nadbytecne mezery z obou stran retezce

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
Sacrebleu ... diky vsem, ja jsem to nakonec zvladnul prave s pomoci modulu re ale koukam ze starenka to ma jeste elegantnejsi, tak jdu zjistovat jak to funguje. Ja jsem pouzil jeste hloupejsi variantu, nejdriv jsem kazdy radek rozdelil pomoci znaku | a pak pomoci libovolneho poctu mezer ... ale koukam lze to udelat i mnohem jednoduseji. Tak jdu koukat co ma znamenat to r'\W+' a tak...

Diky jeste jednou K
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Blbe se zeptam. Proc nejde pouzit sed? Nema omezeni na velikost vstupni radky, nahrada mezer ap je s pomoci regex jednoducha ....

Je to dano tim, ze vstupni soubor je prilis datove objemny?
"Pouze text v MS Wordu je opravdu čistý, příteli."

starenka

  • Stálý člen
  • **
  • Příspěvků: 1276
  • Karma: plynová [zapalovač] [hasičák]
    • /home/starenka
..
V pohode, dej vedet, kdyby neco.
mojenka | blozinek v2 | starej blozinek | krotim hady za penize | UJ! Kalužátor

Debian testing vrní v Thinkpadu X200/bedně/EEE 900a, MasoX Tiger v lampe

 

Provoz zaštiťuje spolek OpenAlt.