进入Taxonomy数据库: https://www.ncbi.nlm.nih.gov/taxonomy

生信小木屋

生信小木屋

生信小木屋

library(tidyverse)
# tax_id					-- the id of node associated with this name
# name_txt				-- name itself
# unique name				-- the unique variant of this name if name not unique
# name class				-- (synonym, common name, ...)

names.0 <- read_delim("names.dmp",delim = "\t|\t",col_names=F) |>
  mutate(X4=str_replace(X4,"\\t\\|","")) |>
  select(tax_id=X1, name_txt=X2, unique_name=X3, name_class=X4)

head(names.0)

# nodes.dmp file consists of taxonomy nodes. The description for each node includes the following
# fields:
#   tax_id					-- node id in GenBank taxonomy database
# parent tax_id				-- parent node id in GenBank taxonomy database
# rank					-- rank of this node (superkingdom, kingdom, ...) 
# embl code				-- locus-name prefix; not unique
# division id				-- see division.dmp file
# inherited div flag  (1 or 0)		-- 1 if node inherits division from parent
# genetic code id				-- see gencode.dmp file
# inherited GC  flag  (1 or 0)		-- 1 if node inherits genetic code from parent
# mitochondrial genetic code id		-- see gencode.dmp file
# inherited MGC flag  (1 or 0)		-- 1 if node inherits mitochondrial gencode from parent
# GenBank hidden flag (1 or 0)            -- 1 if name is suppressed in GenBank entry lineage
# hidden subtree root flag (1 or 0)       -- 1 if this subtree has no sequence data yet
# comments				-- free-text comments and citations
nodes.0 <- read_delim("nodes.dmp",delim = "\t|\t",col_names=F) |>
  mutate(X13=str_replace(X13,"\\t\\|","")) |>
  select(tax_id=X1, parent_tax_id=X2, rank=X3, embl_code=X4, division_id=X5,
         inherited_div_flag=X6,	genetic_code_id=X7,inherited_GC_flag=X8,
         mitochondrial_genetic_code_id=X9,inherited_MGC_flag=X10,
         GenBank_hidden_flag=X11,hidden_subtree_root_flag=X12,
         comments=X13)
head(nodes.0)
unique(nodes.0$rank)
table(nodes.0$rank)

name_node <- nodes.0 |>
  inner_join(names.0,by = "tax_id") |>
  filter(name_class=="scientific name") |>
  select(tax_id,rank_= rank,name=name_txt,name_txt,parent_tax_id)

library(RMySQL)
con <- dbConnect(RMySQL::MySQL(), dbname = "test", host = "192.168.10.177", 
                 user = "root", password = "rootroot",port=23306)
# dbListTables(con)
# dbListFields(con, "taxonomy")
dbWriteTable(con, "taxonomy", name_node, overwrite=TRUE, row.names = FALSE)
superkingdom <- name_node |>
  filter(rank_=='superkingdom')
kingdom <- name_node |>
  filter(rank_=='kingdom')
phylum <- name_node |>
  filter(parent_tax_id==2 & rank_=='phylum')
class <- name_node |>
  filter(parent_tax_id %in% phylum$tax_id &  rank_=='class')
order <- name_node |>
  filter(parent_tax_id %in% class$tax_id &  rank_=='order')
family <- name_node |>
  filter(parent_tax_id %in% order$tax_id &  rank_=='family')
genus <- name_node |>
  filter(parent_tax_id %in% family$tax_id &  rank_=='genus')
species <- name_node |>
  filter(parent_tax_id %in% genus$tax_id &  rank_=='species')
subspecies <- name_node |>
  filter(parent_tax_id %in% species$tax_id &  rank_=='subspecies')
bacteria <- Reduce(function(x,y){rbind(x,y)},list(superkingdom,kingdom,phylum,
                                      class,order,family,genus,
                                      species,subspecies),accumulate = F)
CREATE  INDEX name_txt_index  ON taxonomy (name_txt);
SHOW INDEX FROM taxonomy;
ALTER TABLE taxonomy DROP INDEX name_txt_index;

SELECT * FROM taxonomy where name_txt like  '%Saccharomyces boulardii%'

SELECT * FROM taxonomy where name_txt like  '%Weizmannia coagulans%'

生信小木屋