Skip to content

Instantly share code, notes, and snippets.

@dkerkow
Last active August 29, 2015 14:18
Show Gist options
  • Save dkerkow/2222f110197373e9f183 to your computer and use it in GitHub Desktop.
Save dkerkow/2222f110197373e9f183 to your computer and use it in GitHub Desktop.
Parsing and Plotting StratiJSON in Python
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Visualizing stratigraphic data from Stratigy in Python\n",
"\n",
"This is a short tutorial on what you can do with data from Stratigy\n",
"\n",
"At first, we get us some Python libraries. simplejson is for parsing JSON formatted data, pandas is for dataframes, urllib2 talks HTTP and matplotlib does the plotting."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"import simplejson as json\n",
"import pandas as pd\n",
"import urllib2\n",
"%pylab inline\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we define where to get the data from. We specify the side id and the API Endpoint. Use localhost with port number if you have Stratigy running locally in development mode or `http://stratigy.danielkerkow.de/data/` if you want to get data from the demo server."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"site_id = '44'\n",
"api_endpoint = 'http://localhost:5000/data/'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we construct the URL with the site id and API endpoint and get the data from the server. We also load the JSON response into a native python dictionary:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"url = api_endpoint + site_id\n",
"response_json = urllib2.urlopen(url)\n",
"site_data = json.load(response_json)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's have a look inside:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'geometry': {'coordinates': [13, 43], 'type': 'Point'},\n",
" 'properties': {'description': 'Description Placeholder',\n",
" 'marker-size': 'large',\n",
" 'strat_units': {'78': {'depth': 1,\n",
" 'loi': 0.8925787,\n",
" 'lower_boundary': 1,\n",
" 'upper_boundary': 1},\n",
" '79': {'depth': 2,\n",
" 'loi': 0.10485864,\n",
" 'lower_boundary': 2,\n",
" 'upper_boundary': 2},\n",
" '80': {'depth': 3,\n",
" 'loi': 0.05788331,\n",
" 'lower_boundary': 3,\n",
" 'upper_boundary': 3},\n",
" '81': {'depth': 4,\n",
" 'loi': 0.72363725,\n",
" 'lower_boundary': 4,\n",
" 'upper_boundary': 4},\n",
" '82': {'depth': 5,\n",
" 'loi': 0.87343967,\n",
" 'lower_boundary': 5,\n",
" 'upper_boundary': 5},\n",
" '83': {'depth': 6,\n",
" 'loi': 0.02176066,\n",
" 'lower_boundary': 6,\n",
" 'upper_boundary': 6},\n",
" '84': {'depth': 7,\n",
" 'loi': 0.39986422,\n",
" 'lower_boundary': 7,\n",
" 'upper_boundary': 7},\n",
" '85': {'depth': 8,\n",
" 'loi': 0.34846959,\n",
" 'lower_boundary': 8,\n",
" 'upper_boundary': 8},\n",
" '86': {'depth': 9,\n",
" 'loi': 0.90826686,\n",
" 'lower_boundary': 9,\n",
" 'upper_boundary': 9},\n",
" '87': {'depth': 10,\n",
" 'loi': 0.80576194,\n",
" 'lower_boundary': 10,\n",
" 'upper_boundary': 10}},\n",
" 'title': 'Site Name'},\n",
" 'type': 'Feature'}"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"site_data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can see that the response is a valid geojson. But for the moment, we are interested in the stratigraphic data nested inside the geojson. We can simply strip it out of the dictionary by selecting the `strat_units` key inside the `properties` dictionary:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'78': {'depth': 1,\n",
" 'loi': 0.8925787,\n",
" 'lower_boundary': 1,\n",
" 'upper_boundary': 1},\n",
" '79': {'depth': 2,\n",
" 'loi': 0.10485864,\n",
" 'lower_boundary': 2,\n",
" 'upper_boundary': 2},\n",
" '80': {'depth': 3,\n",
" 'loi': 0.05788331,\n",
" 'lower_boundary': 3,\n",
" 'upper_boundary': 3},\n",
" '81': {'depth': 4,\n",
" 'loi': 0.72363725,\n",
" 'lower_boundary': 4,\n",
" 'upper_boundary': 4},\n",
" '82': {'depth': 5,\n",
" 'loi': 0.87343967,\n",
" 'lower_boundary': 5,\n",
" 'upper_boundary': 5},\n",
" '83': {'depth': 6,\n",
" 'loi': 0.02176066,\n",
" 'lower_boundary': 6,\n",
" 'upper_boundary': 6},\n",
" '84': {'depth': 7,\n",
" 'loi': 0.39986422,\n",
" 'lower_boundary': 7,\n",
" 'upper_boundary': 7},\n",
" '85': {'depth': 8,\n",
" 'loi': 0.34846959,\n",
" 'lower_boundary': 8,\n",
" 'upper_boundary': 8},\n",
" '86': {'depth': 9,\n",
" 'loi': 0.90826686,\n",
" 'lower_boundary': 9,\n",
" 'upper_boundary': 9},\n",
" '87': {'depth': 10,\n",
" 'loi': 0.80576194,\n",
" 'lower_boundary': 10,\n",
" 'upper_boundary': 10}}"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"strat_data = site_data['properties']['strat_units']\n",
"strat_data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As you can see, we now have a dictionary containing only records and its properties. We can get a list of the record ids by taking the dictionaries keys:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['86', '84', '82', '83', '80', '81', '85', '87', '79', '78']"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"strat_data.keys()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we want to get an overview of the stratigraphic data itself. For further analysis and plotting it is better to have that in a table. So we construct a DataFrame from it:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>depth</th>\n",
" <th>loi</th>\n",
" <th>lower_boundary</th>\n",
" <th>upper_boundary</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>78</th>\n",
" <td> 1</td>\n",
" <td> 0.892579</td>\n",
" <td> 1</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>79</th>\n",
" <td> 2</td>\n",
" <td> 0.104859</td>\n",
" <td> 2</td>\n",
" <td> 2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>80</th>\n",
" <td> 3</td>\n",
" <td> 0.057883</td>\n",
" <td> 3</td>\n",
" <td> 3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>81</th>\n",
" <td> 4</td>\n",
" <td> 0.723637</td>\n",
" <td> 4</td>\n",
" <td> 4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td> 5</td>\n",
" <td> 0.873440</td>\n",
" <td> 5</td>\n",
" <td> 5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td> 6</td>\n",
" <td> 0.021761</td>\n",
" <td> 6</td>\n",
" <td> 6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td> 7</td>\n",
" <td> 0.399864</td>\n",
" <td> 7</td>\n",
" <td> 7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>85</th>\n",
" <td> 8</td>\n",
" <td> 0.348470</td>\n",
" <td> 8</td>\n",
" <td> 8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>86</th>\n",
" <td> 9</td>\n",
" <td> 0.908267</td>\n",
" <td> 9</td>\n",
" <td> 9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td> 10</td>\n",
" <td> 0.805762</td>\n",
" <td> 10</td>\n",
" <td> 10</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" depth loi lower_boundary upper_boundary\n",
"78 1 0.892579 1 1\n",
"79 2 0.104859 2 2\n",
"80 3 0.057883 3 3\n",
"81 4 0.723637 4 4\n",
"82 5 0.873440 5 5\n",
"83 6 0.021761 6 6\n",
"84 7 0.399864 7 7\n",
"85 8 0.348470 8 8\n",
"86 9 0.908267 9 9\n",
"87 10 0.805762 10 10"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame.from_dict(strat_data, orient='index')\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We could now go further with analysis of the table data, but I won't cover this here for now. Let's go ahead and plot the data."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting\n",
"\n",
"When working with stratigraphic data, it is very common to plot measured data against the depth on the inverted y-axis, so you look on the plot like you would look on an outcrop, measuring depth from the top to the bottom. With this kind of plot you can visualize measurement curves, categorial layer segments or parallel comparisons. \n",
"\n",
"For now, I just want to plot the loss on ignition measurement agains the depth. Therefore we create a figure with a size of (2,6) and select the data. Here we just select `df['loi']` for the x-axis and `df['depth']` for the y-axis. The y-axis is inverted with `plt.gca().invert_yaxis()` and the rest is just a little bit of cosmetics.\n",
"\n",
"Now we have a nice little plot for data retrieved from the Stratigy database!"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": [
"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\n"
],
"text/plain": [
"<matplotlib.figure.Figure at 0x7fca99c346d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(2, 6))\n",
"plt.plot(df['loi'], df['depth'], 'ro-')\n",
"plt.gca().invert_yaxis()\n",
"plt.title('TOC (LOI)')\n",
"plt.xlabel('%')\n",
"plt.ylabel('Depth [m]')\n",
"plt.grid(True)\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment