Repo for analysis of biosamples in INSDC
Questions to explore
- which attributes/properties are used
- are these conformant to standards?
- E.g. are MIxS fields used
- Does the range constraint apply?
- Can we mine ontology terms, e.g. ENVO from text descriptions
- can we auto-populate metadata fields
See Makefile for details
In addition to the data in the target directory, sample data that is too large for GitHub is stored our Google drive here.
Files include:
-
biosample_set.xml.gz
This is the full raw biosample dataset formatted as XML. -
harmonized-values-eav.tsv.gz
A tab-delimited file containing data extracted frombiosample_set.xml.gz
that contains the biosample's primary id and only the biosample attributes that haveharmonized_name
property. The data is in entity-attribute-value (EAV) format. The columns in the file areaccession|attribute|value
(accession
is the accession number of the biosample).
If necessary, usemake target/harmonized-table.tsv
to create the (non-zipped) file locally. -
harmonized-table.tsv.gz
A tab-delimited file in the data fromharmonized-table.tsv.gz
has been "pivoted" into a standard tabular format (i.e., the attributes are column headers). If necessary, usemake harmonized-table.tsv
to create the (non-zipped) file locally. -
harmonized-attribute-value.ttl.gz
A tab-delimited file in which the data fromharmonized-values-eav.tsv.gz
have been transformed into sets of turtle triples.
If necessary, usemake harmonized-attribute-value.ttl
to create the (non-zipped) file locally. -
harmonized-table.parquet.gz
A parquet file containing the same contents asharmonized-table.tsv.gz
. In pandas, you load like this:df = pds.read_parquet('harmonized-table.parquet.gz')
You will need to havepyarrow
installed (i.e.,pip install pyarrow
).
If necessary, usemake target/harmonized-table.parquet.gz
to create the parquet file locally.
Details of how to save the harmonized dataframe in parquet are found in save-harmonized-table-to-parquet.py. -
harmonized_table.db.gz
An sqlite database in which thebiosample
table contains the contents ofharmonized-table.tsv.gz
. Data is loaded into a pandas dataframe like this:con = sqlite3.connect('harmonized_table.db') # connect to database df = pds.read_sql('select * from biosample limit 10', con) # test loading 10 records
NB: Loading all records (i.e,
df = pds.read_sql('select * from biosample', con)
) is a VERY time consuming and memory intensive. I gave up after letting the process run for 4 hours. If necessary, usemake target/harmonized_table.db
to create the (non-zipped) sqlite database locally.
Details of how to save the harmonized dataframe in sqlite are found in save-harmonized-table-to-sqlite.py
https://github.com/cmungall/metadata_converter
https://academic.oup.com/database/article/doi/10.1093/database/bav126/2630130
MIxS specifies this should be {number} {unit}
Some example values that do not conform:
- N40.1164_W88.2543
- 25 santimeters
- 0 – 20 cm
- 3.149
- 30-60cm replicate6
- 1800, 1800
- 30ft
- 5m, 32m, 70m, 110m, 200m, 320m, 1000m
- Surface soil from deep water
- 0 m water depth
- Metamorph4 (19dpf) biological replicate 3
- pH 7.9
- 6.0-9.5
- 8,156
- NA1
- 2.75 (orig)
- 5.11±0.10
- Missing: Not reported
- Not collected
- 7.0-7.5 um
- Moderately alkaline
Note that missing values do not correspond to:
https://gensc.org/uncategorized/reporting-missing-values/
Should be {float} {unit}
- 0.71 micro molar
- 14.941
- -0.024
- 1.9 g NH4-N L-1
- Below the deteciton limit (2 microM)
- 3.09µg/L
Units vary from 'micro molar' through uM through mg/L
MIxS:
The geographical origin of the sample as defined by the country or sea name followed by specific region name. Country or sea names should be chosen from the INSDC country list (http://insdc.org/country.html), or the GAZ ontology (v 1.512) (http://purl.bioontology.org/ontology/GAZ)
{term};{term};{text}
- USA: WA
- USA:MO
- USA: Boston, MA
- USA:CA:Davis
- United Kingdom: Midlands and East of England
- Malawi: GAZ