[RUBY] Es ist ein Bildertagebuch der Sommerferien, in dem Sie die nicht spezifizierte Sequenz des menschlichen Genoms sehen können.

Einführung

Dieser Artikel ist wirklich großartig, also nimm ihn nicht wirklich.

Zweck

Es wird gesagt, dass das menschliche Genomprogramm die gesamte Sequenz menschlicher DNA enthüllt hat, aber es muss viele unbekannte Teile geben. Zeichnen Sie ein Diagramm, um zu sehen, wo Sie es nicht wissen.

Laden Sie das menschliche Genom fasta herunter

Sie können die Sequenz des menschlichen Genoms von Gencode herunterladen. https://www.gencodegenes.org/human/

Hier können Sie ALLES luxuriös herunterladen.

wget ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_35/GRCh38.p13.genome.fa.gz

Sie können es entpacken, aber Sie können es bis zu einem gewissen Grad mit dem Befehl zcat sehen.

Lassen Sie uns zuerst head anzeigen.

zcat GRCh38.p13.genome.fa.gz | head
>chr1 1
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

Ja, es kam sofort heraus. Es ist ein Berg von N. Mit anderen Worten, der Teil, in dem die Sequenz nicht angegeben werden kann, kommt von Anfang an. Als nächstes überprüfen wir vorerst die Chromosomen.

zcat GRCh38.p13.genome.fa.gz | grep "^>"

hoge.png

Nun, es kommt in großen Mengen wie diesen heraus.

Als nächstes überprüfen wir, ob das Array wirklich aus 5 Arten von Zeichenfolgen besteht, die nur TCGAN sind. Ich bin mir sicher, dass es eine Möglichkeit gibt, Befehlszeilentools zu verwenden, aber hier werde ich ein kleines Programm in der Crystal-Sprache schreiben. Der Grund für die Kristallsprache ist, dass sie explosiv ist.

count.cr


counter = Hash(Char, Int32).new(0)

while l = gets
    l.chomp.each_char do |c|
        counter[c] += 1
    end
end

p counter

Ja, es ist nur einfacher Code für jeden, der Ruby versteht. Der einzige Punkt ist, dass Sie den Typ angegeben haben, als Sie Hash generiert haben. Alles andere ist das gleiche wie Ruby. Das ist Kristall. Bauen.

crystal build counter.cr --release

Wenn Sie diese Erstellungszeit einbeziehen, unterscheidet sich die Ausführungsgeschwindigkeit möglicherweise nicht wesentlich von Julia usw., aber ich werde mir darüber keine Sorgen machen. Zählen wir die Anzahl der TCGAN

zcat GRCh38.p13.genome.fa.gz | grep -v "^>" | ./count

Die Linie, die das Chromosom am Anfang der Linie definiert, wird mit "grep -v" ^> "" weggelassen. Ergebnis ist

{'N' => 161331703, 'T' => 916993511, 'A' => 914265135, 'C' => 635937481, 'G' => 638590158}

ist geworden. Sicher wurde bestätigt, dass es keine anderen Zeichenfolgen als TCGA und N gibt. Als nächstes zählen wir die kontinuierliche Verteilung von N. Mit anderen Worten, lassen Sie uns herausfinden, wie viele aufeinanderfolgende N Zeichen sind.

nseq.cr



temp = 0 

while l = gets
    l.chomp.each_char do |c|
        if c == 'N'
             temp += 1
        elsif temp != 0
            puts temp
            temp = 0
        end
    end
end
puts temp if temp != 0

Bauen.

crystal build nseq.cr --release

Lassen Sie uns zunächst herausfinden, wie viele aufeinanderfolgende N Punkte es gibt.

zcat GRCh38.p13.genome.fa.gz | grep -v "^>" | ./nseq | wc -l

1234

Sie können sehen, dass es nicht so viele gibt. Wenn Sie sie in der längsten Reihenfolge nebeneinander anzeigen, sieht dies folgendermaßen aus.

fuga.png

Ich finde es seltsam, dass 1 ist, und ich habe den Eindruck, dass es viele 100er und 50.000er gibt.

Hauptthema

Schreiben Sie nun ein Programm, das das Verhältnis von N, AT und CG für jeweils 10000 Zeichen berechnet.

n2


tcgan = Hash(Char, Int32).new(0)

target = ARGV[0]
chr = ""
loc = 1
flag = false

while l = gets
  if l.starts_with?(">")
    exit if flag
    if l == target
      puts "loc\tN\tAT\tCG"
      flag = true
    end
    next
  end
  if flag
    l.chomp.each_char do |c|
      tcgan[c] += 1
      loc += 1
      if loc % 10000 == 0
        total = tcgan.values.sum.to_f
        ta = (tcgan['A'] + tcgan['T']) / total
        cg = (tcgan['G'] + tcgan['C']) / total
        n  = tcgan['N'] / total
        puts "#{loc}\t#{n}\t#{ta}\t#{cg}"
        tcgan = Hash(Char, Int32).new(0)
      end
    end
  end
end

Führen Sie es als Testversion aus.

zcat GRCh38.p13.genome.fa.gz | ./n2 ">chr1 1" | head
loc	N	AT	CG
10000	1.0	0.0	0.0
20000	0.0001	0.4076	0.5923
30000	0.0	0.4826	0.5174
40000	0.0	0.5288	0.4712
50000	0.0	0.6439	0.3561
60000	0.0	0.6346	0.3654
70000	0.0	0.6669	0.3331
80000	0.0	0.6199	0.3801
90000	0.0	0.6294	0.3706

Es scheint, dass es gut funktioniert. Das Erstellen eines Programms mit dem gleichen Verhalten in Ruby nimmt viel Zeit in Anspruch, aber Crystal ist superschnell. Wirf dies, um es in der Kommandozeile zu verbessern.

uplot ist ein von mir persönlich erstelltes Ruby-Tool, mit dem Sie mithilfe von UnicodePlots.rb Diagramme auf Ihrem Terminal anzeigen können.

Von hier aus mache ich etwas ziemlich Verwirrendes, um ein Diagramm auf dem Terminal zu zeichnen, einen Screenshot zu machen und es in Qiita einzufügen.

chr1

image.png

chr2

image.png

chr3

image.png

chr4

image.png

chr5

image.png

chr6

image.png

chr7

image.png

chr8

image.png

chr9

image.png

chr10

image.png

chr11

image.png

chr12

image.png

chr13

image.png

chr14

image.png

chr 15

image.png

chr 16

image.png

chr 17

image.png

chr 18

image.png

chr 19

image.png

chr 20

image.png

chr 21

image.png

Streuung hinzufügen image.png

chr 22

image.png

Streuung hinzufügen image.png

chr X

image.png

chr Y

image.png

Laut Wikipedia Es scheint, dass die Heterochromatin-Region hauptsächlich nicht entschlüsselt ist und diese Region inaktiv ist. Ich denke, es bedeutet, dass es selten übertragen wird. Mit anderen Worten, es ist möglicherweise nicht biologisch bedeutsam.

Wenn ich dies jedoch versuche, scheint es viele Teile zu geben, in denen die Anordnung unbekannt ist.

Wenn Sie damit vertraut sind, können Sie gerne vorbeischauen.

Das ist alles für diesen Artikel.

Recommended Posts

Es ist ein Bildertagebuch der Sommerferien, in dem Sie die nicht spezifizierte Sequenz des menschlichen Genoms sehen können.
Seite, auf der Sie die Versionsrelation von spring (?) Sehen können
Eine Welt, in der Sie ein Produkt veröffentlichen können, ohne den Befehl javac zu kennen