Кортеж к столу от подсчета последовательностей ДНК - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу подсчитать количество оснований в последовательности ДНК, вернуть счетчики каждого типа оснований в последовательности, а также распечатать таблицу из двух столбцов, где первый столбец является основанием, а второй столбец - связаннымбазовый счетЯ могу заставить функцию возвращать базовый счет, но я не уверен, как распечатать таблицу.Я хотел бы сделать этот анализ с базовыми функциями Python, хотя я предполагаю, что было бы легче сделать с некоторым модулем Python.

Код:

 def base_counter(DNA):
    A = 0
    T = 0
    G = 0
    C = 0
    for base in DNA:
        if base == "A":
            A = A + 1
        elif base == "T":
            T = T + 1
        elif base == "G":
            G = G + 1
        elif base == "C":
            C = C + 1
        else:
            pass
    return A,T,G,C

Ввод параметров:

dna="AAGCTACGTGGGTGACTTT"

Вызов функции:

counts=base_counter(dna)
print(counts)

Выход:

(4, 6, 6, 3)

Желаемый выход:

print(counts)
  A   4
  T   6
  G   6
  C   3

и

counts
(4, 6, 6, 3)

Ответы [ 4 ]

0 голосов
/ 24 ноября 2018

Вы можете сделать еще одну функцию для печати результатов:

def print_bases(bases):
print("A    "+str(bases[0])+"\n"
  "T    "+str(bases[1])+"\n"
  "G    "+str(bases[2])+"\n"
  "C    "+str(bases[3]))
print_bases(counts)
0 голосов
/ 24 ноября 2018

из функции:

out_str="A    "+str(A)+"\n"+\
      "T    "+str(T)+"\n"+\
      "G    "+str(G)+"\n"+\
      "C    "+str(C)
return out_str

теперь вы можете позвонить и распечатать его, и он будет напечатан в желаемом формате:

result=base_counter(DNA)
print(result)

для полного кода запроса ОП:

def base_counter(DNA):
    A = 0
    T = 0
    G = 0
    C = 0
    for base in DNA:
        if base == "A":
            A = A + 1
        elif base == "T":
            T = T + 1
        elif base == "G":
            G = G + 1
        elif base == "C":
            C = C + 1
    out_str = "A    " + str(A) + "\n"+\
    "T    " + str(T) + "\n"+\
    "G    " + str(G) + "\n"+\
    "C    " + str(C)
    return out_str

base=base_counter("AAGCTACGTGGGTGACTTT")
print(base)

выход:

A    4
T    6
G    6
C    3
0 голосов
/ 24 ноября 2018

Вы можете использовать collections.Counter для подсчета оснований и pandas для установки данных по столбцам.Вот пример

from collections import Counter
import pandas as pd

# Count the bases
dna="AAGCTACGTGGGTGACTTT"
count = Counter(dna)
tup = ()
for _, value in sorted(count.items()):
  tup += (value,)
print(tup  # Outputs (4, 3, 6, 6)

# Set it in a pandas dataframe
df = pd.DataFrame(list(dict(count).items()), columns=['Base', 'Count'])
print(df.to_string(index=False))
# Output
# Base  Count
#   A      4
#   G      6
#   C      3
#   T      6
0 голосов
/ 24 ноября 2018

1) у вас ошибка - ваш return имеет отступ на одну дополнительную вкладку вправо

2) используйте dict:

def base_counter(DNA):
    dna_dict = {
        "A": 0,
        "T": 0,
        "G": 0,
        "C": 0,
    }
    for base in DNA:
        if base == "A":
            dna_dict["A"] += 1
        elif base == "T":
            dna_dict["T"] += 1
        elif base == "G":
            dna_dict["G"] += 1
        elif base == "C":
            dna_dict["C"] += 1
    return dna_dict


dna = "AAGCTACGTGGGTGACTTT"

counts = base_counter(dna)
for base, count in counts.items():
    print(base, count)

, но если вам нужносохранить функцию как есть:

def base_counter(DNA):
    A = 0
    T = 0
    G = 0
    C = 0
    for base in DNA:
        if base == "A":
            A = A + 1
        elif base == "T":
            T = T + 1
        elif base == "G":
            G = G + 1
        elif base == "C":
            C = C + 1
    return A,T,G,C


dna = "AAGCTACGTGGGTGACTTT"

counts = base_counter(dna)
for base, count in zip("ATGC", counts):
    print(base, count)
...