Kysymys:
Kuinka muuntaa FASTA BEDiksi
SmallChess
2017-05-18 05:14:58 UTC
view on stackexchange narkive permalink

Minulla on FASTA-tiedosto:

  > Sequence_1GCAATGCAAGGAAGTGATGGCGGAAATAGCGTTAGATGTATGTGTAGCGGTCCC ... > Sequence_2GCAATGCAAGGGGGGGGGGGGGGGGG BED-tiedosto jokaiselle sekvenssille, kuten:  
  Sequence_1 0 1500Sequence_2 0 1700  

BED-alueet ovat yksinkertaisesti sekvenssien kokoisia.

K: Tein sen aiemmin yksirivisellä komennolla. En muista mitä se on, se oli Biostarsissa. En löydä viestiä nyt. Mikä on yksinkertaisin tapa tehdä muunnos?

Tarkoitatko tätä biostars-postia? https://www.biostars.org/p/15476/
@Greg Viesti ei anna minulle yhden rivin komentoa tehdä mitä haluan. Olen 100% varma, että näin sen jossain biostarsissa jonkin aikaa sitten, mutta en muista sen ohjelman nimeä, joka voi tehdä sen.
Entä tämä? https://www.biostars.org/p/15476/#189089
@Greg Se oli Python-ohjelma. En muista nimeä, joten ei ole aavistustakaan kuinka etsiä.
Pitäisikö meidän luoda uusi tunniste, ehkä jotain esimerkiksi "format-conversion", "file-conversion"? Odotan, että "X-muoto Y-muotoon" -tyyppisiä kysymyksiä muunnetaan paljon enemmän.
Seitsemän vastused:
#1
+13
bli
2017-05-18 16:33:24 UTC
view on stackexchange narkive permalink

Voit tehdä tämän helposti bioawk -sovelluksella, joka on awk-versio, johon on lisätty bioinformatiikkaa helpottavia ominaisuuksia:

  bioawk -c fastx '{print $ name " \ t0 \ t "length ($ seq)} 'test.fa  

-c fastx kertoo ohjelmalle, että tiedot tulisi jäsentää fasta- tai fastq-muodossa . Tämä tekee muuttujat $ name ja $ seq käytettävissä awk-komennoissa.

#2
+10
Sam Nicholls
2017-05-18 13:40:08 UTC
view on stackexchange narkive permalink

On hyvä käytäntö, että FASTA indeksoidaan, joten voit hyödyntää todennäköisesti .fai -tunnusta. Jos ei, voit vain luoda hakemiston samtools -toiminnolla ja tehdä jonkin awk -toiminnolla BED:

  samtools faidx $ fastaawk 'ALKU {FS = "\ t"}; {print $ 1 FS "0" FS $ 2} '$ fasta.fai > $ fasta.bed  

Tämä ylläpitää välilehtien erottelua, mutta voit pudottaa BEGIN -käskyn käyttää välilyöntejä. BED spec vaatii vain välilyönnin yksinkertaiselle BED -muodolle.

#3
+6
neilfws
2017-05-18 06:01:14 UTC
view on stackexchange narkive permalink

Voisit mukauttaa tämän awk yhden linjan. Huomaa, että siinä oletetaan, että sekvenssitunnukset eivät ole yli 100 merkkiä ja että otsikkorivillä ei ole sekvenssitunnusta seuraavaa kuvausta.

  cat myseqs.fasta | awk '$ 0 ~ ">" {tulosta c; c = 0; printf-substraatti (0,2 100 dollaria) "\ t0 \ t"; } $ 0! ~ ">" {c + = pituus ($ 0);} END {tulosta c; } ' 

Muussa tapauksessa mikä tahansa Bio * -kirjasto (Perl, Python, Ruby) tarjoaa FASTA-muotoisia jäsentimiä, jotka purkavat sekvenssitunnukset ja pituudet.

Huomautan vaikka tämä muistuttaa BED: ää, se ei tarkkaan ottaen ole, koska BED kartoittaa koordinaatteja kromosomissa tai jossakin pidemmän sekvenssin objektissa.

#4
+4
Scott Gigante
2017-05-18 06:08:32 UTC
view on stackexchange narkive permalink

tämän vastauksen innoittamana aiheeseen liittyvään lukupituuden jakaumaa koskevaan kysymykseen voit tehdä tämän Biopythonilla:

  Bio.SeqIO-tuontitiedostosta avoimen kanssa ("alueet .bed "," w ") sängynä: jäsennettäväksi tietueeksi (" region.fasta "," fasta "): print (record.id, 0, len (record.seq), sep =" \ t ", tiedosto = vuode)  
Rakastan Pythonia. Pidän tästä vastauksesta yksinkertaisesti siksi, että se on Pythonissa ja sitä meidän pitäisi käyttää vuonna 2017. Mutta miksi tämä näyttää niin paljon Perliltä? Luettavuus laskee. Halusin ehdottaa puhtaampaa katkelmaa, mutta näyttää siltä, ​​että kommentit eivät salli koodia. Pitäisikö hyvänä sävynä muokata vastaustasi?
Piste otettu! Olen antanut sen mennä, mutta olet tervetullut parantamaan sitä. Tällä hetkellä sivustolla ei ole ketään, jolla olisi tarpeeksi mainetta hyväksyä muokkaus. Olen iloinen, että ehdotat muokkausta kommenttien kautta tai muokkaat viestiä ja odotat, kunnes joku osuu 350 edustajaan. Voimme poistaa metakommentit muokkauksen jälkeen.
OK! Muokkain vastausta; näyttää loppujen lopuksi StackExchange-y -tavalta tehdä asioita.
Rakastan myös Pythonia, mutta minusta tuntuu siltä, ​​että sinun ei tarvitse kirjoittaa komentosarjaa tekemällä jotain niin triviaalia kuin tämä - on paljon komentorivityökaluja, jotka voivat saavuttaa tämän nopeammin.
@SamStudio8 Pintatasolla olen samaa mieltä. Samaan aikaan, jos henkilöllä on jatkuvasti avoinna oleva Python REPL (joka on paljon ihmisiä), tällä on vain vähän yleiskustannuksia, ja nöyrästä mielestäni nopeaa algoritmista ajattelua tulisi aina edistää tässä ammatissa. Lisäksi, jos tämä muunnos on osa Snakemake-putkistoa, se voi olla jopa luonnollisempaa kuin shellin () kutsuminen tai shell-lohkon kirjoittaminen.
@KirillG Minulla on yleensä REPL avoin, mutta mielestäni suosisin silti `awk` (tai vastaavan) käyttöä. Vuosia sitten oli erilainen tarina, mutta oppia käyttämään `` awk``: n perusteita on ollut yksi tuottavuutta parantavista asioista, joita olen tehnyt sen jälkeen kun vaihdoin käyttämään Linuxia. Mutta varmasti, olen ehdottomasti samaa mieltä, jos tämä on osa suurempaa komentosarjaa tai putkistoa, en uskaltaisi kutsua `shelliä '. Vaikka luultavasti käyttäisin `pysam` bi` `biopythoniin '', mutta se on vain henkilökohtainen mieltymys :)
@KirillG Kirjoitin BioPython-ratkaisun, joka on luultavasti luettavampi / pythoninen eikä aseta koko syötetiedostoa muistiin https://bioinformatics.stackexchange.com/a/106/104
@Chris_Rands': n vastaus on paljon parempi kuin minun, kiitos siitä!
Kiitos Scott, vaikka @KirillG's: n kanssa muokkaus, vastauksesi on myös pythonic! Kuitenkin vain uudemmat BioPython-versiot sallivat merkkijonon syötteenä SeqIO.parse-tiedostolle (tiedostokahvan sijasta), enkö usko, että BioPython sulkisi koskaan nimenomaisesti syötetiedoston kahvaa tässä tapauksessa?
Hmm. Hyvä huomio Biopython-versiosta - olen testannut uusimman version vain Python 2.7.11: lla ja 3.5.1: llä. Olin hieman hermostunut myös tiedostokahvojen sulkemisesta, mutta SeqIO.parse palauttaa generaattorin, ei tiedostoa, joten eikö se sulje kahvaa automaattisesti, kun saavutamme StopIterationin? (vastuuvapauslauseke - minulla ei ole todisteita tästä!)
#5
+4
Chris_Rands
2017-05-18 13:04:25 UTC
view on stackexchange narkive permalink

Tässä on lähestymistapa BioPython -ohjelmalla. with -lauseke varmistaa, että sekä syöttö- että ulostulotiedostojen kahvat on suljettu ja laiska -tapa lähestytään siten, että vain yksi fasta-tietue pidetään muistia kerrallaan, sen sijaan että lukisit koko tiedostoa muistiin, mikä on huono idea suurille syötetiedostoille. Ratkaisu ei tee oletuksia sekvenssitunnusten pituuksista tai rivien lukumäärästä, jolle sekvenssit ovat jakautuneet:

  Bio import SeqIO: sta, kun open ('sekvenssit.fasta') muodossa sekvenssit.bed ',' w ') muodossa out_f: tallentamiseen SeqIO.parse-tiedostoon (in_f,' fasta '): out_f.write (' {} \ t0 \ t {} \ n'.format (record.id, len (tallenna)))  
#6
+4
SmallChess
2017-05-19 10:14:21 UTC
view on stackexchange narkive permalink

Meillä on monia erinomaisia ​​vastauksia! Tämä on erinomainen viite tuleville käyttäjille.

Löysin mitä kysyin kysymyksestäni:

https: //www.biostars. org / p / 191052 /

  $ pip install pyfaidx $ faidx --transform bed test.fasta > test.bed  

Tämä on yhden rivin komento, jota pyysin. Myös muut vastaukset toimivat, mutta haluan hyväksyä oman vastaukseni.

Pyfaidxin kehittäjä täällä. Olin juuri kirjoittamassa tämän vastauksen ja valitan, että en valinnut selkeämpää tai mieleenpainuvampaa paketin nimeä.
#7
  0
gringer
2017-05-18 06:04:49 UTC
view on stackexchange narkive permalink

Jos FASTA-sekvenssit ovat kaikki yhdellä rivillä, seuraavan perlin yhden linjan tulisi toimia:

  cat myseqs.fasta | perl -ne 'if (/ ^ > ([^] +) /) {print $ 1} else {tulosta "0", pituus, "\ n"}'  

Selitys:

  • Jos rivi alkaa merkillä '>', tulosta kaikki ensimmäiseen väliin asti (mutta älä laita rivinvaihtoa loppuun)
  • Muussa tapauksessa tulosta "0", jota seuraa viivan pituus, jota seuraa rivinvaihto


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...