From 5fe1c0f776b8ed7c4cad0f288f127641ceb663cb Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 10:51:53 +0800 Subject: [PATCH 01/12] Updating examples --- examples/rest_queries.ipynb | 485 ++++++++---------------------------- 1 file changed, 97 insertions(+), 388 deletions(-) diff --git a/examples/rest_queries.ipynb b/examples/rest_queries.ipynb index 8304a3a..2611c15 100644 --- a/examples/rest_queries.ipynb +++ b/examples/rest_queries.ipynb @@ -2,43 +2,27 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'0.0.1+6.g32caee3.dirty'" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import earthchem\n", "earthchem.__version__" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Make a rest client" + ] + }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'http://ecp.iedadata.org/restsearchservice?outputtype=json&author=klump'" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "from earthchem.documentation import *\n", "from earthchem.query import RESTClientQuery\n", "\n", "q = RESTClientQuery(author='klump')\n", @@ -46,298 +30,111 @@ ] }, { - "cell_type": "code", - "execution_count": 17, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'RESTClientQuery(author=barnes)'" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "q.__repr__()" + "How many records have we found?" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "q.count()" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Didn't find any records, returning None\n" - ] - } - ], + "outputs": [], "source": [ "q.dataframe()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's try another author" + ] + }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
agal2o3asauauthorbbabebe10_bebi...typeuu235_pb207u238_pb206vwyybznzr
0BARNES, J. D.; STRAUB, S. M....volcanic
113.3BARNES, J. D.; STRAUB, S. M....volcanic
214.2BARNES, J. D.; STRAUB, S. M....volcanic
313.6BARNES, J. D.; STRAUB, S. M....volcanic
414.3BARNES, J. D.; STRAUB, S. M....volcanic
\n", - "

5 rows × 109 columns

\n", - "
" - ], - "text/plain": [ - " ag al2o3 as au author b ba be be10_be bi ... \\\n", - "0 BARNES, J. D.; STRAUB, S. M. ... \n", - "1 13.3 BARNES, J. D.; STRAUB, S. M. ... \n", - "2 14.2 BARNES, J. D.; STRAUB, S. M. ... \n", - "3 13.6 BARNES, J. D.; STRAUB, S. M. ... \n", - "4 14.3 BARNES, J. D.; STRAUB, S. M. ... \n", - "\n", - " type u u235_pb207 u238_pb206 v w y yb zn zr \n", - "0 volcanic \n", - "1 volcanic \n", - "2 volcanic \n", - "3 volcanic \n", - "4 volcanic \n", - "\n", - "[5 rows x 109 columns]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "q = RESTClientQuery(author='barnes')\n", + "q.count()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get the first 50 records" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ "df = q.dataframe()\n", "df.head()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can generate a plot of this data" + ] + }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "%matplotlib inline\n", "\n", "df.plot('longitude', 'latitude', 'scatter')" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas\n", + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df.al2o3 = pandas.to_numeric(df.al2o3)\n", + "df.sio2 = pandas.to_numeric(df.sio2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.scatter(df.al2o3, df.sio2)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -347,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 188, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -447,67 +244,34 @@ }, { "cell_type": "code", - "execution_count": 189, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "getting valid keys\n", - "getting valid values\n" - ] - } - ], + "outputs": [], "source": [ "self = QueryElement('Reference')" ] }, { "cell_type": "code", - "execution_count": 190, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'{http://www.w3.org/2001/XMLSchema}complexType': 'complex',\n", - " '{http://www.w3.org/2001/XMLSchema}simpleType': 'simple',\n", - " '{http://www.w3.org/2001/XMLSchema}string': 'string'}" - ] - }, - "execution_count": 190, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "type_mapping" ] }, { "cell_type": "code", - "execution_count": 191, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'complex'" - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "get_type(self.root)" ] }, { "cell_type": "code", - "execution_count": 285, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -588,7 +352,7 @@ }, { "cell_type": "code", - "execution_count": 286, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -597,71 +361,27 @@ }, { "cell_type": "code", - "execution_count": 287, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['author', 'title', 'journal', 'doi', 'minpubyear', 'maxpubyear', 'exactpubyear'])" - ] - }, - "execution_count": 287, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "validators.keys()" ] }, { "cell_type": "code", - "execution_count": 288, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "True\n", - "True\n" - ] - }, - { - "ename": "ValueError", - "evalue": "I expected a string for parameter doi - got a instead (['http://dx.doi.org/asdfho.sdfl'])", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mvalidate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'author'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'Barnes'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'title'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'doi'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'http://dx.doi.org/asdfho.sdfl'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidators\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mvalidate\u001b[0;34m(dict_like, validators)\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdict_like\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mvalidators\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 38\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36m_validator\u001b[0;34m(obj)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_validator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'I expected a string for parameter {} - got a {} instead ({})'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mValueError\u001b[0m: I expected a string for parameter doi - got a instead (['http://dx.doi.org/asdfho.sdfl'])" - ] - } - ], + "outputs": [], "source": [ "validate({'author': 'Barnes', 'title': 'foo', 'doi': ['http://dx.doi.org/asdfho.sdfl']}, validators)" ] }, { "cell_type": "code", - "execution_count": 289, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "list" - ] - }, - "execution_count": 289, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "a = ['foo']\n", "type(a)" @@ -669,20 +389,9 @@ }, { "cell_type": "code", - "execution_count": 276, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "str" - ] - }, - "execution_count": 276, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "a = 'foo'\n", "type(a)" From 619b0a0f363bf94242aca1a6f61dd26868a4e403 Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:18:09 +0800 Subject: [PATCH 02/12] Adding unit tests to test dtype conversion Also splitting out tests into seperate files --- tests/test_client_data.py | 32 ++++++++++++++++++++++++++++++++ tests/test_earthchem.py | 15 --------------- tests/test_integration.py | 26 ++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 15 deletions(-) create mode 100644 tests/test_client_data.py create mode 100644 tests/test_integration.py diff --git a/tests/test_client_data.py b/tests/test_client_data.py new file mode 100644 index 0000000..acd57fe --- /dev/null +++ b/tests/test_client_data.py @@ -0,0 +1,32 @@ +from earthchem.query import RESTClientQuery + +import unittest + +class TestRESTClientData(unittest.TestCase): + + def setUp(self): + self.query = RESTClientQuery(author='barnes') + self.count = self.query.count() + self.df = self.query.dataframe() + + def test_data_type(self): + "Check the right columns are numeric" + # Expected dtypes for columns here + expected = { + 'float64': [ + 'al2o3', 'cao', 'cl', 'feot', 'k', 'k2o', 'latitude', 'longitude', 'mgo', 'mno', 'na2o', 'p2o5', 'sio2', 'tio2' + ], + 'object': [ + 'author', 'composition', 'journal', 'material', 'method', 'rock_name', 'sample_id', 'source', 'title', 'type' + ] + } + + for dtype, keys in expected.items(): + for key in keys: + try: + self.assertEqual(str(self.df[key].dtype), dtype) + except KeyError: + pass + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tests/test_earthchem.py b/tests/test_earthchem.py index f65c56a..19bc6d5 100644 --- a/tests/test_earthchem.py +++ b/tests/test_earthchem.py @@ -1,5 +1,4 @@ from earthchem.query import RESTClientQuery -from matplotlib import pyplot import unittest @@ -45,19 +44,5 @@ def test_remove(self): with self.assertRaises(KeyError): _ = self.query['searchtype'] - -class IntegrationTestRESTClientQuery(unittest.TestCase): - - "Some integration tests to check that things are working" - - def setUp(self): - self.query = RESTClientQuery(author='barnes') - - def test_plot(self): - "Check that plotting works without any issues" - self.query.dataframe().plot('longitude', 'latitude', 'scatter') - pyplot.close() - - if __name__ == '__main__': unittest.main() \ No newline at end of file diff --git a/tests/test_integration.py b/tests/test_integration.py new file mode 100644 index 0000000..ed9c642 --- /dev/null +++ b/tests/test_integration.py @@ -0,0 +1,26 @@ +from earthchem.query import RESTClientQuery + +from matplotlib import pyplot + +import unittest + +class IntegrationTestRESTClientQuery(unittest.TestCase): + + "Some integration tests to check that things are working" + + def setUp(self): + self.query = RESTClientQuery(author='barnes') + self.df = self.query.dataframe() + + def test_plot_latlon(self): + "Check that plotting works without any issues" + self.df.plot('longitude', 'latitude', 'scatter') + pyplot.close() + + def test_plot_data(self): + "Check that plotting works with data inputs" + self.df.plot('al2o3', 'sio2', 'scatter') + pyplot.close() + +if __name__ == '__main__': + unittest.main() \ No newline at end of file From 0e9e9aaa8e263864a7693e156a421958d2eefa3e Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:18:26 +0800 Subject: [PATCH 03/12] Adding automatic dtype conversion --- earthchem/query.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/earthchem/query.py b/earthchem/query.py index 277d4c2..646dea2 100644 --- a/earthchem/query.py +++ b/earthchem/query.py @@ -83,10 +83,16 @@ def count(self): else: raise IOError("Couldn't get data from network") - def dataframe(self, standarditems=True): + def dataframe(self, standarditems=True, drop_empty=True): """ Get the actual data in a dataframe Note that this doesn't do pagination yet... + + Parameters: + standarditems - if True, returns the Earthchem + standard items in the table + drop_empty - if True, drops columns for which there + is no data """ # Add the proper search type keys to the query self['searchtype'] = 'rowdata' @@ -97,7 +103,23 @@ def dataframe(self, standarditems=True): # Return the result if resp.ok: try: - return pandas.read_json(StringIO(resp.text)) + # Create a dataframe + df = pandas.read_json(StringIO(resp.text)) + + # Convert numerical values + string_values = { # things to keep as strings + 'sample_id', 'source', 'url', 'title', 'author', 'journal', + 'method', 'material', 'type', 'composition', 'rock_name' + } + for key in df.keys(): + if key not in string_values: + df[key] = pandas.to_numeric(df[key]) + + # Drop empty columns + if drop_empty: + df.dropna(axis='columns', how='all', inplace=True) + return df + except ValueError: if resp.text == 'no results found': print("Didn't find any records, returning None") From 6a08c1938e90c3017556ac399c88f511f731f22d Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:18:35 +0800 Subject: [PATCH 04/12] Update examples --- examples/rest_queries.ipynb | 574 +++++++++++++++++++++++++++++++++--- 1 file changed, 529 insertions(+), 45 deletions(-) diff --git a/examples/rest_queries.ipynb b/examples/rest_queries.ipynb index 2611c15..0067c67 100644 --- a/examples/rest_queries.ipynb +++ b/examples/rest_queries.ipynb @@ -2,9 +2,20 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'0.0.2+2.g5fe1c0f.dirty'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import earthchem\n", "earthchem.__version__" @@ -19,9 +30,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'http://ecp.iedadata.org/restsearchservice?outputtype=json&author=klump'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "from earthchem.query import RESTClientQuery\n", "\n", @@ -38,18 +60,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "q.count()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Didn't find any records, returning None\n" + ] + } + ], "source": [ "q.dataframe()" ] @@ -63,9 +104,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "4902" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "q = RESTClientQuery(author='barnes')\n", "q.count()" @@ -80,59 +132,403 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
al2o3authorcaoclcompositionfeotjournalkk2olatitude...mnona2op2o5rock_namesample_idsio2sourcetio2titletype
0NaNBARNES, J. D.; STRAUB, S. M.NaN647.0unknownNaNCHEM. GEOL.NaNNaN18.0448...NaNNaNNaNnot-given64DSNaNGEOROCNaNCHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI...volcanic
113.3BARNES, J. D.; STRAUB, S. M.9.37560.0unknown12.63CHEM. GEOL.NaN0.3030.8610...0.312.200.10not-given125-782A-29X3-42-4648.47GEOROC1.02CHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI...volcanic
214.2BARNES, J. D.; STRAUB, S. M.8.84960.0unknown10.78CHEM. GEOL.NaN0.3330.8610...0.382.600.10not-given125-782A-29X3-42-4652.00GEOROC0.86CHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI...volcanic
313.6BARNES, J. D.; STRAUB, S. M.9.301170.0unknown12.43CHEM. GEOL.NaN0.2630.8610...0.222.270.11not-given125-782A-29X3-42-4649.72GEOROC0.98CHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI...volcanic
414.3BARNES, J. D.; STRAUB, S. M.6.391870.0unknown8.02CHEM. GEOL.NaN0.6430.8610...0.223.770.15not-given125-782A-29X3-42-4657.82GEOROC0.83CHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI...volcanic
\n", + "

5 rows × 24 columns

\n", + "
" + ], + "text/plain": [ + " al2o3 author cao cl composition feot \\\n", + "0 NaN BARNES, J. D.; STRAUB, S. M. NaN 647.0 unknown NaN \n", + "1 13.3 BARNES, J. D.; STRAUB, S. M. 9.37 560.0 unknown 12.63 \n", + "2 14.2 BARNES, J. D.; STRAUB, S. M. 8.84 960.0 unknown 10.78 \n", + "3 13.6 BARNES, J. D.; STRAUB, S. M. 9.30 1170.0 unknown 12.43 \n", + "4 14.3 BARNES, J. D.; STRAUB, S. M. 6.39 1870.0 unknown 8.02 \n", + "\n", + " journal k k2o latitude ... mno na2o p2o5 rock_name \\\n", + "0 CHEM. GEOL. NaN NaN 18.0448 ... NaN NaN NaN not-given \n", + "1 CHEM. GEOL. NaN 0.30 30.8610 ... 0.31 2.20 0.10 not-given \n", + "2 CHEM. GEOL. NaN 0.33 30.8610 ... 0.38 2.60 0.10 not-given \n", + "3 CHEM. GEOL. NaN 0.26 30.8610 ... 0.22 2.27 0.11 not-given \n", + "4 CHEM. GEOL. NaN 0.64 30.8610 ... 0.22 3.77 0.15 not-given \n", + "\n", + " sample_id sio2 source tio2 \\\n", + "0 64DS NaN GEOROC NaN \n", + "1 125-782A-29X3-42-46 48.47 GEOROC 1.02 \n", + "2 125-782A-29X3-42-46 52.00 GEOROC 0.86 \n", + "3 125-782A-29X3-42-46 49.72 GEOROC 0.98 \n", + "4 125-782A-29X3-42-46 57.82 GEOROC 0.83 \n", + "\n", + " title type \n", + "0 CHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI... volcanic \n", + "1 CHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI... volcanic \n", + "2 CHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI... volcanic \n", + "3 CHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI... volcanic \n", + "4 CHLORINE STABLE ISOTOPE VARIATIONS IN IZU BONI... volcanic \n", + "\n", + "[5 rows x 24 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df = q.dataframe()\n", "df.head()" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 18, "metadata": {}, + "outputs": [], "source": [ - "Now we can generate a plot of this data" + "from collections import defaultdict" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ - "%matplotlib inline\n", - "\n", - "df.plot('longitude', 'latitude', 'scatter')" + "stuff = defaultdict(list)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ - "import pandas\n", - "from matplotlib import pyplot as plt" + "for k, c in df.items():\n", + " stuff[str(c.dtype)].append(k)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "defaultdict(list,\n", + " {'float64': ['al2o3',\n", + " 'cao',\n", + " 'cl',\n", + " 'feot',\n", + " 'k',\n", + " 'k2o',\n", + " 'latitude',\n", + " 'longitude',\n", + " 'mgo',\n", + " 'mno',\n", + " 'na2o',\n", + " 'p2o5',\n", + " 'sio2',\n", + " 'tio2'],\n", + " 'object': ['author',\n", + " 'composition',\n", + " 'journal',\n", + " 'material',\n", + " 'method',\n", + " 'rock_name',\n", + " 'sample_id',\n", + " 'source',\n", + " 'title',\n", + " 'type']})" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "df.al2o3 = pandas.to_numeric(df.al2o3)\n", - "df.sio2 = pandas.to_numeric(df.sio2)" + "stuff" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[('al2o3', 'float64'),\n", + " ('author', 'object'),\n", + " ('cao', 'float64'),\n", + " ('cl', 'float64'),\n", + " ('composition', 'object'),\n", + " ('feot', 'float64'),\n", + " ('journal', 'object'),\n", + " ('k', 'float64'),\n", + " ('k2o', 'float64'),\n", + " ('latitude', 'float64'),\n", + " ('longitude', 'float64'),\n", + " ('material', 'object'),\n", + " ('method', 'object'),\n", + " ('mgo', 'float64'),\n", + " ('mno', 'float64'),\n", + " ('na2o', 'float64'),\n", + " ('p2o5', 'float64'),\n", + " ('rock_name', 'object'),\n", + " ('sample_id', 'object'),\n", + " ('sio2', 'float64'),\n", + " ('source', 'object'),\n", + " ('tio2', 'float64'),\n", + " ('title', 'object'),\n", + " ('type', 'object')]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[(k, str(c.dtype)) for k, c in df.items()]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can generate a plot of this data" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "df.plot('longitude', 'latitude', 'scatter')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "plt.scatter(df.al2o3, df.sio2)" + "df.plot('al2o3', 'mgo', 'scatter')" ] }, { @@ -144,7 +540,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 188, "metadata": {}, "outputs": [], "source": [ @@ -244,34 +640,67 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 189, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "getting valid keys\n", + "getting valid values\n" + ] + } + ], "source": [ "self = QueryElement('Reference')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 190, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'{http://www.w3.org/2001/XMLSchema}complexType': 'complex',\n", + " '{http://www.w3.org/2001/XMLSchema}simpleType': 'simple',\n", + " '{http://www.w3.org/2001/XMLSchema}string': 'string'}" + ] + }, + "execution_count": 190, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "type_mapping" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 191, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'complex'" + ] + }, + "execution_count": 191, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "get_type(self.root)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 285, "metadata": {}, "outputs": [], "source": [ @@ -352,7 +781,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 286, "metadata": {}, "outputs": [], "source": [ @@ -361,27 +790,71 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 287, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['author', 'title', 'journal', 'doi', 'minpubyear', 'maxpubyear', 'exactpubyear'])" + ] + }, + "execution_count": 287, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "validators.keys()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 288, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n", + "True\n" + ] + }, + { + "ename": "ValueError", + "evalue": "I expected a string for parameter doi - got a instead (['http://dx.doi.org/asdfho.sdfl'])", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mvalidate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'author'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'Barnes'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'title'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'foo'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'doi'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'http://dx.doi.org/asdfho.sdfl'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidators\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mvalidate\u001b[0;34m(dict_like, validators)\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdict_like\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mvalidators\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 38\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36m_validator\u001b[0;34m(obj)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_validator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'I expected a string for parameter {} - got a {} instead ({})'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: I expected a string for parameter doi - got a instead (['http://dx.doi.org/asdfho.sdfl'])" + ] + } + ], "source": [ "validate({'author': 'Barnes', 'title': 'foo', 'doi': ['http://dx.doi.org/asdfho.sdfl']}, validators)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 289, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 289, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "a = ['foo']\n", "type(a)" @@ -389,9 +862,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 276, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "str" + ] + }, + "execution_count": 276, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "a = 'foo'\n", "type(a)" From 03ff9503c723117328380ee2ca7231fac902155b Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:32:00 +0800 Subject: [PATCH 05/12] Add table output to file --- docs/resources/table_output.png | Bin 0 -> 69297 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/resources/table_output.png diff --git a/docs/resources/table_output.png b/docs/resources/table_output.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c484fe6f93041a66e12311ecd58d6872aae9ce GIT binary patch literal 69297 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
8mQT1jo{c_jFidzU>H2Gb|^`i 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%0D)U3M+S=R2LDa@`tC?&j#QD%ZzmB6*` zI7}94tE~70mG&(M1)19SCp$3?v-*tJ(jS9`wk@x=o?MDd`WpA1wDT-|fJdyl2GzdZ zZd{_Nysq&+1CqM-Pt*@@#S1D(=1rCjhHF!!hF}Ars5dar(#rekYh8*+$bk97BOkja zHn17L-?Oj8>^l~AG&Gw^1o?x1brQ4aK#pH68QQ?H?NC4oDO; zzdK1j>&*%xC}MBsGO?J;9&Bi-bkxP#n`IM+kXPB8)lh%z4wTf?;KM77SFt! z&#&f&i?`<+@Q{r3KgWZ$>TYAye~w%gA0~?b9JE*@vHv**LI@xI&lw6gu|NO+W&e*M zX(uG{rXTTiO(b<4Jab-YpD{0?!=Ey)b8{o*%2vo3;+&0$X>Y?WJ1$Bw!h$N1|B^DpCDBQ4ABdIYe&X zeuxQ(J>@U3uaT7a_wo8OVPHGURjW%{ZY%5}f@*Y7lgh`kv_FjLh=GoaGPisy z3@oP+uA^za+a@9$&;6E@@_7Dn+FM+afVh=AioSL3r~7=~KF~|3i?o87$&X`(lJM?H zBb>w*vIRwCg!^7qi8p~uH_X`}j#S+UZm%nS2{O7V5&5*&kw?it=7hXBttMO$I|}~$ zK_qsLJ+VlX<1m>FrB3|uwlS?yw#6m8zt8e|4J|2Sgf?y}xrD~{UtILZ1IvNb-NaJJoSAGg_1I?rLLoPHiY4qMis z>Dn#ZNj{G+&R1b2NC9q_c(r_VM?a#GyqG*%&9ASJ@WYXbbeeYDVhyXXr+o^K@U{x3 zS_;mSi(eh*RX?@8z@ww2O-rfnlk>u&-hUofWZuz7C{dv+eE3RcJi9Yy8JXX;Gf=wW z0NomD#0O6gB3R0RD7I}PNaC7?c|vf6YOra}dG{3JeuBqClFvDNj{5@zDc{*7E6X}I z{?x?T!9cX4TD}+#sTf7pa7!6w-b-9B-9Uv6`Fq`r>_jw~{Ks$c($(F=(^s)0csUUp zigXwsM_buVm0aQTBFjy=@GXzFS5Rpt=`nNaf+`sv*K^sZ-I%`*bE3AB+x~usLvztE zde|D1gJPO(!V_W%A2{elkQM5?(LXZM>d2Eo&SG~o`P6n~&-|anQ*g#3)M}m`RLD#r zv~AX%35;s!j5rl{L~($7^0Vr(H5=$Bnh~(>!1FdGp=A@X!atB&LV*^<#LNjVA~iib zv`+l~PU{nfz60jRZD}gs;gGN9dA%IxhyBB4e`7Tm57`h=dwALq$|wR z<{Z>wego+|^QCy|_^VYmehd5kYLNEs3{*StE&viH=WqhD;OhCwkTK9oKE6 zOwCDq8e5>!!(rJ}v^?iq<4xARR-;@)!k6!r~I znI(Q#KpvFXOl;4Oyfi2eGC2{HS{!Y9$JAY0w#l=T46!_!r6XI;-;8QhlCg_APH&}m z8I9vR-dK(>-6#(mONX$2XcwucFxS0I&Nzf1GibwSvk=JOV4e+!aR|qG`qAU6%{#ci z;8sdWV*Qp&Gsbzw!%_h)J@*vxKVhaY{m!J-^ zw7_F_ScGB{f~zPT_xQ6(GSEu<)Xt&>A!@ZqTyq+Tc_B}y=_SU z_W^+3gd{m=iOiA<915IsDk*!+TB&FTYPX#T(O<)9W^5v}dnE&0oHU{ zAg!TwB4|pbfx|3 zAX82BHe(k{{+}jz!})L1jfWX<{eQkfL19ez|HiCh>kVoasEOpl_Pz2Q Date: Wed, 16 May 2018 11:32:53 +0800 Subject: [PATCH 06/12] Working on readme --- README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 30adee9..e7ee1f4 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,27 @@ Maintainer: Jess Robertson (jesse.robertson _at_ csiro.au) ### So why would I want to use this? -Gonna come up with a good reason for this here.... +Say you wanted to know how many samples have been submitted to IEDA by your colleague named Dr Barnes: + +```python +>>> from earthchem.query import RESTClientQuery +>>> q = RESTClientQuery(author='barnes') +>>> q.count() + +4902 +``` + +That's a lot of samples. Can we see the compositions of the first 50 say? + +```python +>>> df = q.dataframe() +>>> df.head() +``` + +[!Table output](https://github.com/jesserobertson/earthchem-pyclient/raw/develop/docs/resources/table_output.png) + + + ### Great, I'm sold. How do I get it? From 6b543d66dda1e57ad9463660201d6459410372bf Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:36:25 +0800 Subject: [PATCH 07/12] Add example plot --- docs/resources/plot_output.png | Bin 0 -> 6852 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/resources/plot_output.png diff --git a/docs/resources/plot_output.png b/docs/resources/plot_output.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5e41f8a8f14d2171d3800630128a4726cc0a10 GIT binary patch literal 6852 zcmd5>2Q-}9xBmtqM4}~(8Z}CUaS@UbLiCbE^k9eV>O=)B|JSJqqa|H^u6y|vyfbNJ48%0Bz-^80NecXidy(y-A$5Oh{U{k9$i z!HU3_`!pr!84$YU0De(CQPR*q4L*LSZGyowwVS%h69_uPc=Cnyjt3lo&TD8DWAuGj zJG7_OV_V4C3hn0Pigt2%$oDE7w$jAB*gv@<$i=lyImI-|F;2Ru8-}-rO)hs zgCI5@joY{Mz1}U4``_&+jBl@XiT!kZPItN&Uew$FiTAXS)QE&ZpRRV&8(Ch??6ZlN z4e#%x4|_%^N2_B7y}~=xds)NFJEAgl9s6co#CzvcOtW+(=2PBflIQW{DVQ1h*|@xKz<$8tpAzji{qBVAuf5wiOi62T=TL(n<7QM9IM=1;5IJNV z^8dUM9zes2qhn(;Yii{BY$1$+si`TNv}Dp}d%Lj=78f5cSU2HXMGF;anwTUK8F`x- zc_F+e1^gd1W>}oy`>a714-!RK4VR)*WqCMPREBc+@`wc?UkYnfe^*^PR>jmPnyG?7 z9?WTH=~mF0iYX^Z=ZV96cNOdQp7R(Gq}AkNl9m=>jm$7gg5%`0Z* z^tumJtb(a8dn}nH45tbA5{1(U%UGM5S8>3E4bX+({{?_WLcNyQuo(gHb^?|r(mXqU6rd|z2q>E>uel73^L@!L;s;E z$vPt;E`Fyk`;L*OW~ko%`!n17I`I?`;#(3Flkrh4QsnaGb~G!5p}_y8r9p~>mg%06 zG89m1?#PH~-wXuN;_Rr`X5x{9TLdIl(!O&(?tx2By2_hU$AMgiu1^I8oHP{?5$Bj} z$)KsmB-SA?OkAU_v(r#TCCI{mYoI+9=dozGdl&$IIua!Xe+Ynq-$J2kx5?+7X$lIP zixbC3+ajW(Qf3z*Jpbi5`s2gZz`XQyrRe^N3G9v4n)?;wPm?Eefq|MZSjvpKy+}$* z(vF8g>fDB+JY*1p4MqtSG5)U`d;+-BB-84FVJ3t*ji^o2vOZMV^`ZHxGZtl-M98xg z%1CPC1s5S<&MewMORG2r%%${8p^1NeR43Km01NG>s=~xXcyka$PVeb#{zY>m;$Tl> z!)IV{0F}c#6nxVCnYHgcZIG%QGi}h@WCuT`cn| zn86YXGd7C;7<;Cqe{djgEX<)zdpmrHeX%c-)zrfrXDIef&#tP=tw~)97`62ueg1sU z9o$@<5H%Teq~_Czux2i}f zm3O(u*pvU&@?MjgF+Ijg6pRTEwqF+Z=P_c~n zhhOkTGFo-ZtIO0t6TC^%L1%0Qf6bHpTYhPM@ZkE>nhv}yU!o4TPZKi}qN3z5Uz#%( z4x^JqaMug$rFMI56IGFo9P<~W2#fcS-SX`j!E|J_MT)$u)H*h4E?z>&8v-gb`;p;0 z-sxg7yv0Q?Ph09;s=5=OxN?83#>DjZ2cn^94DT9(oE#x+be(|E3#ru(ZM=P&P6$sCIV~GOF;)r)|mjkL(! zq>_?9b`Ota4XGg#j#%9n$~r_&C-=U*{AyWg>HMec)ZXlyTc0k!VuA37`KJ*Oq>5V+ z`Xr4SeAJO7oz)IO@Mcw}o~$-zQr zJJZoI$q0lyV9-tP^(-Ghnu5&u+0McjH6NEgz7+@JWo)uU_;00#hm@3+x24z-z_>+H zWiBsFs`%ba4`GG>WPEWJ?!RYAhbn^c#o=-~Qx$LHq(?RwoGHM&OKb?)-Y6?pJnu z)$eV6%2*_lX&lMMZxI=eSOppzC5P%(?LUd`XM$HQm3bWp>S9%zfz}Mv*WrtEsX3lkOHsksNbvEXrgF32yfMH+O~~%I^%XrGyn1 z@~erv9={D(Yr3$fkY<7&?mFJD5LEkK=ro`Eay(4R-EZ;?vU`1|-QeCm9u1$_MEg?P zc4nqbNW&_BHfrr^7;PQ>?uf8(m7BZey#2=;XRXH#sNvK_&ZFfHz?rW3K#@ zRf;C+olN5!6NX!-gt?cI_CWk+b1ST+XkEJ(EWigNtyHgyfRyg-?X4Vn>cy?h%*;d~ zDs`{v&laeXRrXfzu<1l|cfa!wo76E^9+Ybr6cn_5`xZ4VyRfn{2;xs{N=kv+MSp!T z?@}8Xqh9{GowM7umsxC7{J5r#v)!PzhZ!N$<)bcrfAXoFz$%ZYPZvDv_EWC9jOAQB z-f7ueFsgG*=jY}Ls(y8utzh2z%j)9lJ9dJ1Sj!K&yaKAjy^$EK!^{e0;f9hKD>b5S z0{g)Ai^u!~q0l^!1?hM1vSI#RZnxcw-)n1cj(bgqi-?IC-n#Xy7G(VvoEbjBnDh6I z!F^5L#*`PuG)CNds$@>2rQwk;z7;L0fB>~M;uuKRF%0vj4ib1mXy zvP+f59r>-dl$4a4dC0?sk~v>FuFULgt*ZVd23pFQH7_w=uAf(n9aZXj_fraivp zvm-vtxGWt>^yedT{JJilV8@RKF0k3HO!uj%2(c7xB`Yi}?C9jA@99|~A|isGYNWov z%pBpR>+D?Mh(ZZyaB_0q!?Gg;z_DWdk%b%2HGpb5-(9Pkj<|7YbHoH^cVbMrSZtjr zzT9Ozx8OmAW^`Ly+a+^BOx`ru@gYBcrS3Rj{7IMm-e$JKm9*6t$7?c9L-eFwu(qa_ zRv*x6|LADmT&l0`XoYK}(Pw}RZTRu$IAq`7&(;-&)1JG+<0F?ULB6y}?5o;esg?#O zy(^Rv&MpIzs$8l7dExmyrkfZq1fwO04SS2oW45)8H=&`MBPeWB5ij>{LT)y0w@ z4{86HFRH@&6(8*n$1sf3s7&$N3`IiZw29hh_J3art1qfLK2FgGke&5|(J0~MZ5Vi) z;B>}!=u+7E$mfSkC?0RP!$+!U6DiZ7uhLeuFFE{=Bgl63U^{i)&)1G3%a4_@(6qs$Qhw? z9igVdVP)b^C#Uck+hdlm{|2xzv)WpAmY6p$lZOE=W851OBF(1rv95|KVqjvDdsDw| z-@GcqT8Fmg84Fr&Ez;J;z%;lSBEvNY#m9}+2dmG}TPjAYms)>}-qMm`j^0`!lX8a; zye43VRX!zG#jy&86%O$+db@V2hE!^Epib~-^qQ7T9HVoh>>$7>ssf|&V(G8t5fCO8 zJpK?Zx&onf60!26gUfliW9i60YrKrE~xq;D7j#q*61hyu=m-7CRXK+yOb7@@2Ao zM^}v@AY^-+^-lI~pIp$!v|@`Y>tm08p6qD&9dG*JfyYLN%w+`yJ%#%SctyD0XSy>CO6%IZekt*tlAl&TrLoo8&WyAH zNZP>Qpl0+5^fc$9mtewWccwx(>B>+*?OV_cf1aj%0rCZ*pyEd^NH^wNySBEr>-&f9 zIkf729H)ZRhd0L^ni$ikWk*VE->h$J@X?4v7k>%~RmNU`k=EPA7k}2jaD4RWu7*a4 zrluzP*Ea?L6Ak|!;A<%}j*byEAyP1Q##V6+v%KgyL8?qLLtDlGiYyH!+k?J=(+FDcqoC5Za-xQP2bhymhX|aE^Iloqu&cM=-3JGIG^UT&=V*`DgQKC6`db)NcXvk)UHBjbe6i zc7S@?m_3IzUW8HJhQ(V#Yb}ht^a3Y6ETHF}9BC9XYxqxXhYL7OpGu>Wp<&$m`nsyz zU{8<4htd2YO!06?@o;;=G|IuDXBcO%6VJdvpfr~K+n2K1gQ=VC1e@)|D_&1ZM*<&?nGHYmH;F#>J1e#Lq`N($PXcx&9jas|^~h@y3dhg#H_{9a?G2=SdebRDY zL(mz6yLaC&EI29;2*?;w4rS>i>m!j0Q^gGpO7e%BeWqoOu^)2N1;=(=KF=_x$hs?a zbadi=A7fao-sRX_vL7Bac{7q);6c=*K8Z~0Bmp9 zl`20~d~o1*#jLXXu1e1Z7e5rC(7A+4+)Ya;ckjvV?VWH&)!Nk~^}6 zX|*JscWfv_3%L%c`(T6?o3E1#y^E8=ZtI=RW!Jz5HzzV5%-Pu6CktI6e*Oa=J$@%} z@4o-6WSWGzs=ohr^~6Ap_r~V0m^-F7$j{9Ep8R^ELwEOLqTa)Y$47?%q4ffv9~c<0 zt$LTUyFYPU7;oXD(H<{OSQyCLno~F)MgxsQPZG_mp9)J$8-P!iR!A;*`czhS@-$Kx zSVw%EJ_WESfX3Bk7ruSFNF2^4V$<54eY|-OD9Lr(cqhF=D^!6a}h);W9sj zumqGdc|^x)M0^ewOIR7N_SpGtW&WfC)E`1}0}rMzD%aig+bIIpX;YLmZ&G3t0`Ta^ zxHx8jkA=WefxGQU^tcBhQS6F{ZrV+GQ0oInvZ@w$E(&1YW*u}`Qe z?A;TTks%0+i9HQ{^Cm^ypQx49{w~VRdK6Sz?%%!pQ`DrSQCM8ub7W*hJN_EaWb@Ur zgWZi3P_k4W(9x|d2I86PT3LO-*|ajwMci0%`{6yu*=MV(URivK43?dn+a@d|87O6Lr#Hoa4nP}FSNKnhATxxgiX6EMd-oID$-Cp^!fEs_i zcat7f+Cwf8^;fYPYl+AK6v7-*wigQMoCxg(N5e~%$Fc1zeF7OoETUd#ti_p9|jSvJ z0@E^0LEU%VVXTt+`uZ9E`y_|0g@L^v+qKzX9|z!)(PAmJ$GEgZZBP^L@A;@EZQsdp z|0_8ovn0YYnk!((>H-T3swwn>qq8%o`_t+7si|BBhK7z{W|D;Us~^6r@*bX^D6nXB zM)hj#1M%9OsqT$&FQ6Mx%t26}kg8PQm1~E@JAt5Z9Rn^Px3;#Hp^KXGMQ(n+zJWpP zRi`0D;kIWVI8-TvC7!5JR)DOtI6-KYZXW=qDz$DocapmU>X6yGDZPRU zyBb$aN^V=MX4Z)x{iIUpUapuZ1m5Zo41I8awGPYfQhAH&9LHT%)mNY>xYf+=3gWoq z(ZR0IuRqn^#>7~AWhhSZoRsPTeElz~cbUg@)RLOa9^3}a;6F2vhKla(LM6-R{{(o9 BxyAqh literal 0 HcmV?d00001 From 6c92ed4ead77ba613cf3bfb22b2c31f44d5fbe26 Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:36:33 +0800 Subject: [PATCH 08/12] More readme work --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e7ee1f4..64884be 100644 --- a/README.md +++ b/README.md @@ -31,10 +31,16 @@ That's a lot of samples. Can we see the compositions of the first 50 say? >>> df.head() ``` -[!Table output](https://github.com/jesserobertson/earthchem-pyclient/raw/develop/docs/resources/table_output.png) +![Table output](https://github.com/jesserobertson/earthchem-pyclient/raw/develop/docs/resources/table_output.png) +Great, so now I can make some little plots right? +```python +>>> df.plot('al2o3', 'sio2', 'scatter') +``` + +![Plot output](https://github.com/jesserobertson/earthchem-pyclient/raw/develop/docs/resources/plot_output.png) ### Great, I'm sold. How do I get it? From 81a079d5935c4f01bea73da2a3acaebb283358e5 Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:43:23 +0800 Subject: [PATCH 09/12] Changing API --- earthchem/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/earthchem/__init__.py b/earthchem/__init__.py index adece65..e03665c 100644 --- a/earthchem/__init__.py +++ b/earthchem/__init__.py @@ -1,5 +1,7 @@ from . import documentation, query +from .query import RESTClientQuery as Query + # Versioneer imports from ._version import get_versions __version__ = get_versions()['version'] From 80f4becca7bff15607e0e3be3c8bae3739804bfc Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:45:40 +0800 Subject: [PATCH 10/12] Changing API properly --- earthchem/__init__.py | 2 +- earthchem/query.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/earthchem/__init__.py b/earthchem/__init__.py index e03665c..0dce754 100644 --- a/earthchem/__init__.py +++ b/earthchem/__init__.py @@ -1,6 +1,6 @@ from . import documentation, query -from .query import RESTClientQuery as Query +from .query import Query # Versioneer imports from ._version import get_versions diff --git a/earthchem/query.py b/earthchem/query.py index 646dea2..7f10f87 100644 --- a/earthchem/query.py +++ b/earthchem/query.py @@ -33,7 +33,7 @@ def make_query_docstring(): docstr += '\n' + wrapper.fill('{0} - {1}'.format(*item)) return docstr -class RESTClientQuery(dict): +class Query(dict): __doc__ = make_query_docstring() docdict = get_documentation() @@ -48,7 +48,7 @@ def __init__(self, **kwargs): def __repr__(self): kwargs = ', '.join('{0}={1}'.format(*it) for it in self.items()) - return 'RESTClientQuery({})'.format(kwargs) + return 'Query({})'.format(kwargs) def __setitem__(self, key, value): """ Sets a particular query term, making sure that the values From 1409cf010255379e812755152e936a76930f7392 Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:45:48 +0800 Subject: [PATCH 11/12] Update test suite --- tests/test_client_data.py | 4 ++-- tests/test_earthchem.py | 6 +++--- tests/test_integration.py | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_client_data.py b/tests/test_client_data.py index acd57fe..919d017 100644 --- a/tests/test_client_data.py +++ b/tests/test_client_data.py @@ -1,11 +1,11 @@ -from earthchem.query import RESTClientQuery +from earthchem import Query import unittest class TestRESTClientData(unittest.TestCase): def setUp(self): - self.query = RESTClientQuery(author='barnes') + self.query = Query(author='barnes') self.count = self.query.count() self.df = self.query.dataframe() diff --git a/tests/test_earthchem.py b/tests/test_earthchem.py index 19bc6d5..6b56924 100644 --- a/tests/test_earthchem.py +++ b/tests/test_earthchem.py @@ -1,4 +1,4 @@ -from earthchem.query import RESTClientQuery +from earthchem import Query import unittest @@ -7,7 +7,7 @@ class TestRESTClientQuery(unittest.TestCase): "Tests for RESTClient" def setUp(self): - self.query = RESTClientQuery() + self.query = Query() def test_set_author(self): "Check that author setting works ok" @@ -17,7 +17,7 @@ def test_set_author(self): self.assertEqual(self.query.url, 'http://ecp.iedadata.org/restsearchservice?outputtype=json&author={}'.format(auth)) self.assertEqual(repr(self.query), - 'RESTClientQuery(author={})'.format(auth)) + 'Query(author={})'.format(auth)) def test_author_count(self): "Check that we handle author counts when things are 0" diff --git a/tests/test_integration.py b/tests/test_integration.py index ed9c642..bc53561 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -1,4 +1,4 @@ -from earthchem.query import RESTClientQuery +from earthchem import Query from matplotlib import pyplot @@ -9,7 +9,7 @@ class IntegrationTestRESTClientQuery(unittest.TestCase): "Some integration tests to check that things are working" def setUp(self): - self.query = RESTClientQuery(author='barnes') + self.query = Query(author='barnes') self.df = self.query.dataframe() def test_plot_latlon(self): From 2f75ae85a371fff569c27f0ea72eab9ffb1810d7 Mon Sep 17 00:00:00 2001 From: "Robertson, Jess (Mineral Resources, Kensington)" Date: Wed, 16 May 2018 11:45:56 +0800 Subject: [PATCH 12/12] Update notebooks --- examples/rest_queries.ipynb | 48 ++++++++++++++++++------------------- examples/scratch.ipynb | 2 +- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/examples/rest_queries.ipynb b/examples/rest_queries.ipynb index 0067c67..7595e55 100644 --- a/examples/rest_queries.ipynb +++ b/examples/rest_queries.ipynb @@ -8,7 +8,7 @@ { "data": { "text/plain": [ - "'0.0.2+2.g5fe1c0f.dirty'" + "'0.0.2+10.g6c92ed4.dirty'" ] }, "execution_count": 1, @@ -45,9 +45,7 @@ } ], "source": [ - "from earthchem.query import RESTClientQuery\n", - "\n", - "q = RESTClientQuery(author='klump')\n", + "q = earthchem.Query(author='klump')\n", "q.url" ] }, @@ -119,7 +117,7 @@ } ], "source": [ - "q = RESTClientQuery(author='barnes')\n", + "q = earthchem.Query(author='barnes')\n", "q.count()" ] }, @@ -349,7 +347,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -358,7 +356,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -367,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -377,7 +375,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -410,7 +408,7 @@ " 'type']})" ] }, - "execution_count": 22, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -421,7 +419,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -453,7 +451,7 @@ " ('type', 'object')]" ] }, - "execution_count": 20, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -503,24 +501,23 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 24, "metadata": {}, "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, { "data": { "image/png": "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\nQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -528,7 +525,8 @@ } ], "source": [ - "df.plot('al2o3', 'mgo', 'scatter')" + "df.plot('al2o3', 'mgo', 'scatter')\n", + "plt.savefig('plot_output.png')" ] }, { diff --git a/examples/scratch.ipynb b/examples/scratch.ipynb index 8ad5cc9..d0d2be7 100644 --- a/examples/scratch.ipynb +++ b/examples/scratch.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [