Skip to main content

Tools for geochemical data analysis.

Project description



pip install pyrolite

Build Status


License: CSIRO Modified BSD/MIT License

Maintainer: Morgan Williams (morgan.williams at

master develop
Build Status Build Status
Coverage Status Coverage Status

Usage Examples

Note: Examples for compositional data yet to come.

Elements and Oxides

Index Generators

All Elements up to U

>>> import pyrolite.common_elements as ce
>>> ce()  # periodictable.core.Element return
[H, He, Li, Be, ...,  Th, Pa, U]
>>> ce(output='str')  # string return
['H', 'He', 'Li', 'Be', ...,  'Th', 'Pa', 'U']

Oxides for Elements with Positive Charges (up to U)

>>> import pyrolite.common_oxides as co
>>> co()  # periodictable.formulas.Formula return
[H, He, Li, Be, ...,  Th, Pa, U]
>>> co(output='str')  # string return
['H2O', 'He2O', 'HeO', 'Li2O', 'Be2O', 'BeO', 'B2O', 'BO', 'B2O3', ...,
'U2O', 'UO', 'U2O3', 'UO2', 'U2O5', 'UO3']

REE Elements

>>> from pyrolite.geochem import REE
>>> REE(output='str')
['La', 'Ce', 'Pr', 'Nd', 'Pm', ..., 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu']

Data Cleaning

Some simple utilities for cleaning up data tables are included. Assuming you're importing data into pd.DataFrame:

import pandas as pd
df = pd.DataFrame({'label':'basalt', 'ID': 19076,
                   'mgo':20.0, 'SIO2':30.0, 'cs':5.0, 'TiO2':2.0},
>>> df.columns
Index(['label', 'ID', 'mgo', 'SIO2', 'cs', 'TiO2'], dtype='object')
from pyrolite.textutil import titlecase, tochem

>>> df.columns = [titlecase(h, abbrv=['ID']) for h in df.columns]
Index(['Label', 'ID', 'Mgo', 'Sio2', 'Cs', 'Tio2'], dtype='object')
>>> df.columns = tochem(df.columns)
Index(['Label', 'ID', 'MgO', 'SiO2', 'Cs', 'TiO2'], dtype='object')


A selection of reference compositions are included:

>>> from pyrolite.normalisation import ReferenceCompositions
>>> refcomp = ReferenceCompositions()
'Chondrite_PON': Model of Chondrite (Palme2014),
'D-DMM_WH': Model of DepletedDepletedMORBMantle (Workman2005),
'DMM_WH': Model of DepletedMORBMantle (Workman2005),
'DM_SS': Model of DepletedMantle (Salters2004),
'E-DMM_WH': Model of EnrichedDepletedMORBMantle (Workman2005),
'PM_PON': Model of PrimitiveMantle (Palme2014)
>>> CH = refcomp['Chondrite_PON']
>>> PM = refcomp['PM_PON']
>>> reels = ree(output='str')
>>> CH[reels]
      value  unc_2sigma units
La    0.2414    0.014484   ppm
Ce    0.6194    0.037164   ppm
Tm   0.02609    0.001565   ppm
Yb    0.1687    0.010122   ppm
Lu   0.02503    0.001502   ppm

The normalize method can be used to normalise dataframes to a given reference (e.g. for spiderplots):

>>> from pyrolite.plot import spiderplot
>>> refcomp = ReferenceCompositions()
>>> CH = refcomp['Chondrite_PON']
>>> DMM = refcomp['DMM_WH']
>>> reels = ree(output='str')
>>> df =[reels, ['value']]
>>> spiderplot(CH.normalize(df), label=f'{DMM.Reference}')


Some simple discrimination methods are implemented, including the Total Alkali-Silica (TAS) classification:

>>> from pyrolite.classification import Geochemistry
>>> cm = Geochemistry.TAS()
>>> df.TotalAlkali = df.Na2O + df.K2O
>>> df['TAS'] = cm.classify(df)

This classifier can be quickly added to a bivariate plot, assuming you have data in a pandas DataFrame:

>>> import pandas as pd
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, figsize=(6, 4))
>>> cm.add_to_axes(ax, facecolor='0.9', edgecolor='k',
>>>                linewidth=0.5, zorder=-1)
>>> classnames = cm.clsf.fclasses + ['none']
>>> df['TAScolors'] = df['TAS'].map(lambda x: classnames.index(x))
>>> ax.scatter(df.SiO2, df.TotalAlkali, c=df.TAScolors,
>>>            alpha=0.5, marker='D', s=8, cmap='tab20c')

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pyrolite, version 0.0.5
Filename, size File type Python version Upload date Hashes
Filename, size pyrolite-0.0.5.tar.gz (55.3 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page