Dieser Artikel ist wirklich großartig, also nimm ihn nicht wirklich.
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.
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 "^>"
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.
Ich finde es seltsam, dass 1 ist, und ich habe den Eindruck, dass es viele 100er und 50.000er gibt.
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
chr2
chr3
chr4
chr5
chr6
chr7
chr8
chr9
chr10
chr11
chr12
chr13
chr14
chr 15
chr 16
chr 17
chr 18
chr 19
chr 20
chr 21
Streuung hinzufügen
chr 22
Streuung hinzufügen
chr X
chr Y
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