mkdir 1_data
cd 1_data
datasets \
'562' \
summary genome taxon \
--assembly-level complete\
--assembly-source refseq > Escherichia_coli_562.json --as-json-lines
Análisis Genomas: E. coli
Introducción
Vamos a trabajar con ensambles de distintas cepas de E. coli hospedero Bovino.
NOTA ⚠️👁️🗨️: Para las figuras del curso se utilizaron todos los 110 genomas con hospedero Bovino. Para este tutorial generaremos un subconjunto de 15, ya incluidos genomas de referencia para patotipos EHEC y EPEC.
Para iniciar vamos a descargar los datos disponibles que existan usando datasets
de NCBI, lo puedes instalar aquí.
Con el siguiente código vamos a descargar los genomas depoitados en NCBI de E. coli
dataformat tsv genome \
> Escherichia_coli_562.tsv --inputfile Escherichia_coli_562.json
Este conjunto de metadatos Escherichia_coli_562.tsv
nos servirá para seleccionar los ensambles de genoma que necesitamos, este archivo cuenta con 58533
filas y 174
columnas.
Por ello es necesario utilizar la plataforma o método que más prefieras, y quedarnos con un conjunto más pequeño de genomas para descargar.
En este tutorial haremos un ejemplo de parseo de datos con R
.
subsetting.R
<- readr::read_tsv("0_data/Escherichia_coli_562.tsv")
raw_tsv dim(raw_tsv)
# Change colnames
colnames(raw_tsv) <- gsub(" ", ".", colnames(raw_tsv))
<- c("Assembly.BioSample.Accession", "Assembly.BioSample.Attribute.Name",
cols "Assembly.BioSample.Attribute.Value", "Assembly.BioSample.Collected.by",
"Assembly.BioSample.Collection.date", "Assembly.BioSample.Description.Comment",
"Assembly.BioSample.Description.Organism.Name", "Assembly.BioSample.Description.Organism.Taxonomic.ID",
"Assembly.BioSample.Description.Title", "Assembly.BioSample.Geographic.location",
"Assembly.BioSample.Host", "Assembly.BioSample.Host.disease",
"Assembly.BioSample.Isolation.source", "Assembly.BioSample.Last.updated",
"Assembly.BioSample.Latitude./.Longitude", "Assembly.BioSample.Serovar",
"Assembly.BioSample.Owner.Name", "Assembly.BioSample.Strain"
)
<- raw_tsv |>
Refseq_for_taxon::select('Assembly.Accession',"Assembly.Level",
dplyr'Organism.Name', starts_with('ANI'),starts_with('CheckM'),
cols,"Assembly.BioProject.Accession") |>
::filter(ANI.Best.ANI.match.Organism == "Escherichia coli") |>
dplyr::filter(grepl("GCF",Assembly.Accession)) |>
dplyr::distinct()
dplyr
colnames(Refseq_for_taxon) <- stringr::str_replace(colnames(Refseq_for_taxon),
pattern = "Assembly.BioSample.",
replacement = "")
library(dplyr)
# Create the column 'Assembly.Biosample.Attribute' by combining the values and eliminating duplicates.
<- Refseq_for_taxon |>
ecoli_df ::group_by(Assembly.Accession) %>%
dplyrsummarise(
Attribute = paste0(
" : ",
Attribute.Name,
Attribute.Value, collapse = "; "
),.groups = "drop"
%>%
) left_join(
%>%
Refseq_for_taxon select(-Attribute.Name, -Attribute.Value) %>%
distinct(Assembly.Accession, .keep_all = TRUE),
by = "Assembly.Accession"
)
<- ecoli_df %>%
ecoli_subset select(where(~ n_distinct(.) > 1)) %>%
select(where(~ !all(is.na(.)))) %>%
filter(
!is.na(CheckM.completeness),
!is.na(Collection.date),
!is.na(Host)
)
<- ecoli_subset %>%
ecoli_subset mutate(find = CheckM.completeness >= 90 & CheckM.contamination < 5 & ANI.Best.ANI.match.ANI >= 96)
<- ecoli_subset %>%
ecoli_subset select(where(~ n_distinct(.) > 1)) %>%
select(where(~ !all(is.na(.)))) %>%
filter(
!is.na(CheckM.completeness),
!is.na(Collection.date),
!is.na(Host)
)
$Host <- tolower(ecoli_subset$Host)
ecoli_subset
table(ecoli_subset$Host)
<- ecoli_subset[ecoli_subset$Host == "bovine",]
ecoli_subset2
$Geographic.location <- tolower(ecoli_subset2$Geographic.location)
ecoli_subset2
::str_detect(ecoli_subset2$Geographic.location, pattern = "china"),
ecoli_subset2[stringr"Geographic.location"] <- "china"
::str_detect(ecoli_subset2$Geographic.location, pattern = "usa"),
ecoli_subset2[stringr"Geographic.location"] <- "usa"
<- ecoli_subset2[ecoli_subset2$Geographic.location != "missing",]
ecoli_subset2
# Quiero quedarme al azar con 4 de china y 4 de usa, y conservar a francia y suiza
<- ecoli_subset2 %>%
ecoli_bovine group_by(Geographic.location) %>%
slice_sample(n = 4) %>%
ungroup() %>%
select(Assembly.Accession, Strain, Geographic.location,
Host, Owner.Name, Assembly.BioProject.Accession)
::write_tsv(ecoli_bovine, "0_data/Ecoli_bovineHost.tsv")
readr
table(ecoli_subset2$Geographic.location)
En este tutorial este será el archivo con el que trabajaremos Ecoli_bovineHost.tsv
:
Assembly.Accession | Strain | Geographic.location | Source | Owner.Name | Assembly.BioProject.Accession | Patotype | Phylogroup |
---|---|---|---|---|---|---|---|
GCF_029625135.1 | E47 | china | bovine | Chinese Academy of Agricultural Sciences | PRJNA949005 | NA | NA |
GCF_025908275.1 | TL-14 | china | bovine | Inner Mongolia Minzu University | PRJNA890057 | NA | NA |
GCF_029319035.1 | E94 | china | bovine | Chinese Academy of Agricultural Sciences | PRJNA942474 | NA | NA |
GCF_029227895.1 | ZYB62 | china | bovine | Lanzhou Institute of Husbandry and Pharmaceutical Sciences, Chinese Academy of Agricultural Science | PRJNA727665 | NA | NA |
GCF_009931435.1 | EC42405 | france | bovine | Anses | PRJNA556131 | NA | NA |
GCF_004771235.1 | PF9285 | switzerland | bovine | University of Bern | PRJNA530748 | NA | NA |
GCF_049267065.1 | F3_13_1_3 | usa | bovine | United State Department of Agriculture | PRJNA728709 | NA | NA |
GCF_013168215.1 | 7409 | usa | bovine | United State Department of Agriculture | PRJNA528413 | NA | NA |
GCF_013167395.1 | NE122 | usa | bovine | United State Department of Agriculture | PRJNA528413 | NA | NA |
GCF_048571305.1 | 7_12_30A | usa | bovine | United State Department of Agriculture | PRJNA728709 | NA | NA |
GCF_000025165.1 | CB9615 | Germany | reference | Nankai University | PRJNA224116 | EPEC | E |
GCF_000026545.1 | E2348/69 | UK | reference | The Wellcome Trust Sanger Institute | PRJNA224116 | EPEC | B2 |
GCF_000026265.1 | IAI1 | - | reference | EBI | PRJNA33373 | Comensal | B1 |
GCF_000005845.2 | K-12 MG1655 | usa | reference | Univ. Wisconsin | PRJNA225 | Comensal | A |
GCF_000010745.1 | 12009 | japan | reference | University of Tokyo | PRJDA32511 | EHEC | B1 |
GCF_029962285.1 | EDL933 | china | reference | East China University of Science and Technology | PRJNA963085 | EHEC | E |
Descarga de archivos
Para descargar los archivos vamos a utilizar el siguiente código:
for g in $(cut -f1 Ecoli_bovineHost.tsv | awk 'NR > 1'); do
if [ -f $g.zip ]; then
echo $g'.zip exists';
else
datasets download genome accession $g \
--include genome --filename $g'.zip';
sleep 2;
fi
done
Descomprimir los archivos
for g in $(cut -f1 Ecoli_bovineHost.tsv | awk 'NR > 1'); do
unzip $g.zip -d $g;
mv $g/ncbi_dataset/data/$g/*.fna $g.fna;
rm -r $g/;
done
rm *.zip
Con esto ya contamos con un sub conjunto de datos listo para trabajar.
Anotación de genomas
Prokka
Prokka
es un anotador de genomas para organismos procariontes, lo puedes descargar de aquí.
genomes=$( ls $HOME/1_data/*.fna )
for g in $genomes; do
prokka \
$g \
--cpus 6 \
--outdir prokka/${id%.fna} \
--genus Escherichia
done
Bakta
Bakta es uno de los anotadores de genomas “más” completos ya que usa distintas bases, utiliza a DIAMOND
de alineador. Lo puedes descargar aquí. Es necesario descargar la base de datos para poder ejecutarlo, para este ejemplo se guardó en el directorio $HOME/db
Precaución ⚠️: Necesitas 8GB de RAM, disponibilidad de tiempo y memoria en tu máquina, con más de 10 genomas podría demorar según la capacidad de nucleos que tengas. Para este tutorial solo te mostraremos como es el código pero no se utilizará este paso para los siguientes análisis.
source $HOME/bin/bakta-env/bin/activate
Muestra el código
genomes=$(ls $HOME/1_data)
experiment_file="$HOME/Experiment_Design.tsv"
for g in $genomes; do
id=$(basename "$g" | awk -F'/' '{print $NF}' | sed 's/.fna$//')
strain=$(awk -F'\t' -v id="$id" '$1 == id {print $3}' "$experiment_file")
bakta \
--db $HOME/db \
--output $HOME/2_annotation/bakta/${id} \
--genus Escherichia \
--strain "$strain" \
--threads 6 \
--force $HOME/1_data/${g}
done
AMRfinder
workdir=$HOME/2_annotation/prokka
output_dir=$HOME/2_annotation/AMR
for dir in $workdir/*; do
if [ -d "$dir" ]; then
sample=$(basename "$dir")
protein=$dir/$sample.faa
dna=$dir/$sample.fna
gff=$dir/$sample.gff3
temp_gff="${output_dir}/amrfinder_${sample}.gff"
perl -pe '/^##FASTA/ && exit; s/(\W)Name=/$1OldName=/i; s/ID=([^;]+)/ID=$1;Name=$1/' $gff > $temp_gff
amrfinder \
-p $protein \
-n $dna \
-g $temp_gff \
--plus --organism Escherichia \
-o $output_dir/${sample}_amrfinder.tsv \
--threads 6
done