парсинг 4-х датафреймов и файла фаста - PullRequest
0 голосов
/ 11 мая 2018

На самом деле у меня есть 4 разных кадра данных, соответствующих информации из гена, предсказанного с помощью augustus для 2 разных видов, и внутри этих видов я обучил базу данных параметрами обучения sp1 для sp2 и параметрами тренировки sp2 для sp1.

Вот пример имени синтаксиса, чтобы лучше понять.

0035: Lepidoptera
0042: WASP

g1.t1_0035_0035 : этот ген был предсказан с базой данных вида 0035 и его собственными обучающими параметрами.

g1.t1_0035_0042 : этот ген был предсказан с помощью базы данных вида 0035 и с обучающими параметрами вида 0042.

g1.t1_0042_0042 : этот ген был предсказан с помощью базы данных видавид 0042 и его собственные параметры обучения.

g1.t1_0042_0035 : этот ген был предсказан с помощью базы данных вида 0042 и с параметрами обучения вида 0035.

А теперь у меня 4фрейм данных такой:

gene_name   scaf_name       scaf_length cov_depth       GC
g3.t1       scaffold 6      56786         79            0.39
g4.t1       scaffold 6      56786         79            0.39
g1.t1       scaffold 256    789765        86            0.42
g2.t1       scaffold 890    3456          85            0.40
g5.t1       scaffold 1234   590           90            0.41

как видите, имена генов не имеют имени с _number1_number2, но каждый файл соответствует определенной ситуации: вот имя файла:

ggf_0042_0042.csv for all the genex_0042_0042
ggf_0042_0035.csv for all the genex_0042_0035
ggf_0035_0035.csv for all the genex_0035_0035
ggf_0042_0035.csv for all the genex_0042_0035

и что я на самом деле хотел бы - это просто проанализировать файл fasta для примера:

>g13600.t1_0042_0042
MERVINTQLLRYLEDHQLISDRQYGFR...
>g34744.t1_0042_0035
MSVPAHVAQIFEAIRRSGQQIDED...
>g28436.t1_0035_0042
WKKAKAENALDSYHHNHLMSEE...
>g14327.t1_0042_0042
MTYGAETWSLTVGLVRKLRVTQR...
>g30148.t1_0035_0042
MLRPVLSSKLPTNTKLRVYKTYIRSRLTY...
>g24481.t1_0035_0035
PCAGSNIKLKGTECFEKSFEVCLRNY...

и сказать:

, если в имени гена есть число _0035_0035, то перейдите вфайл ggf_0035_0035.csv, возьмите строку, соответствующую этому же имени гена, и заполните новую строку данных этой строкой.

Вот гипотетический пример вывода:

gene_name               scaf_name       scaf_length   cov_depth       GC
g345.t1_0035_0035       scaffold 567      56778         78            0.39
g23.t1_0042_0035        scaffold 43       434           79            0.43
g46.t1_0042_0042        scaffold 276      785660        87            0.41
g2.t1_0042_0035         scaffold 845      345656        87            0.40

и так далее ...

1 Ответ

0 голосов
/ 12 мая 2018

Использование Biopython ,

from Bio import SeqIO

сначала создайте словарь

ggf = {}

Теперь перебираем записи

for record in SeqIO.parse("example.fasta", "fasta"):
    id_ = record.id

Попробуйте соответствовать форме

    parts = id.split('_')
    if len(parts) != 3:
        continue

Посмотрите, проанализировали ли вы его, и обновите, если нет

    if (parts[1], parts[2]) not in ggf:
        f_name = '_'.join('ggf', parts[1], parts[2]) + '.csv'
        ggf[(parts[1], parts[2])] = pd.read_csv(f_name)

Теперь просто используйте

    df = ggf[(parts[1], parts[2])]
    df[df.gene_name == parts[0]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...