{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Physical Property Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read data from Google Spreadsheet [CBE20255_Physical_Property_Data](https://docs.google.com/spreadsheets/d/1fqSoo-uQKdTtBxe9jvJF-ScqJjoyfQHk4ovtE_bKPSQ/edit#gid=0)" ] }, { "cell_type": "code", "execution_count": 440, "metadata": { "collapsed": false }, "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", "
ElementAtomic NumberAtomic Mass
Symbol
QCharge00.000000
eElectron00.000000
HHydrogen11.007940
DDeuterium12.014102
TTritium13.016049
\n", "
" ], "text/plain": [ " Element Atomic Number Atomic Mass\n", "Symbol \n", "Q Charge 0 0.000000\n", "e Electron 0 0.000000\n", "H Hydrogen 1 1.007940\n", "D Deuterium 1 2.014102\n", "T Tritium 1 3.016049" ] }, "execution_count": 440, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "from StringIO import StringIO\n", "import requests\n", "\n", "url = 'https://docs.google.com/spreadsheet/ccc?key=' \\\n", " + '1fqSoo-uQKdTtBxe9jvJF-ScqJjoyfQHk4ovtE_bKPSQ' \\\n", " + '&output=csv'\n", "\n", "Elements = pd.read_csv(StringIO(requests.get(url).content), index_col=1)\n", "Elements.head()" ] }, { "cell_type": "code", "execution_count": 437, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 437, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "plt.plot(Elements['Atomic Number'],Elements['Atomic Mass'],'.')\n", "plt.title('Atomic Mass')\n", "plt.ylabel('Mass')\n", "plt.xlabel('Atomic Number')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parsing Chemical Formula\n", "\n", "The standard conventions for writing chemical formulas, such as H2O and CH2(CH3)6CH2, can be parsed in python and the results used for various calculations.\n" ] }, { "cell_type": "code", "execution_count": 557, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import re\n", "\n", "srex = r\"\"\"\n", " (\\([\\w\\(\\)]+\\)) # match recursive group within parentheses\n", " |(A[cglmrstu]|B[aehikr]?|C[adeflmnorsu]?\n", " |D[bsy]?|E[rsu]|F[elmr]?|G[ade]|H[efgos]?|I[nr]?|Kr?\n", " |L[airuv]|M[dgnot]|N[abdeiop]?|Os?|P[abdmortu]?|R[abefghnu]\n", " |S[bcegimnr]?|T[abcehilm]?|U|Uuo|Uup|Uut|V|W|Xe|Yb|Z[nr]?|e)\n", " |(\\d*\\.\\d+|\\d+) # number of atoms or groups\n", " |([+-]) # charge group integer charge in format +n\n", "\"\"\"\n", "\n", "def parsetokens(tokens, dictstack):\n", " # recursion is finished if there are no more tokens\n", " if len(tokens) == 0:\n", " # consolidate the stack of dictionaries\n", " dsummary = {'Q': 0}\n", " for d in dictstack:\n", " for key in d.keys():\n", " if key in dsummary:\n", " dsummary[key] += d[key]\n", " else:\n", " dsummary[key] = d[key]\n", " return dsummary\n", " \n", " # unpack first token\n", " group,symbol,digits,charge = tokens[0]\n", " \n", " # store atomic dictionary for this token on the stack\n", " if group:\n", " dictstack.append(parseformula(group[1:-1]))\n", " \n", " elif symbol:\n", " dictstack.append({symbol: 1})\n", " \n", " elif digits:\n", " for key in dictstack[-1].keys():\n", " dictstack[-1][key] *= float(digits)\n", " \n", " elif charge:\n", " if charge == '+':\n", " dictstack.append({'Q': 1})\n", " elif charge == '-':\n", " dictstack.append({'Q': -1})\n", " \n", " # recursively process remaining tokens\n", " return parsetokens(tokens[1:], dictstack)\n", "\n", "def parseformula(str):\n", " return parsetokens(re.findall(srex, str, re.VERBOSE),[])\n", " \n", "def chemformula(str):\n", " return parseformula(str)\n", "\n", "def mw(str):\n", " return sum([n*Elements.ix[key]['Atomic Mass'] for (key,n) in parseformula(str).items()])\n", "\n", "def charge(str):\n", " return parseformula(str)['Q']\n" ] }, { "cell_type": "code", "execution_count": 562, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Al(OH)2C18H35O2 | 344.471 | 0.0 | {'Q': 0.0, 'H': 37.0, 'C': 18.0, 'Al': 1, 'O': 4.0}\n", "D2O | 20.028 | 0.0 | {'Q': 0, 'D': 2.0, 'O': 1}\n", "C8H18 | 114.231 | 0.0 | {'Q': 0, 'H': 18.0, 'C': 8.0}\n", "C6H5NH(COCH3) | 135.166 | 0.0 | {'Q': 0, 'H': 9.0, 'C': 8.0, 'O': 1, 'N': 1}\n", "C20H30O2 | 302.457 | 0.0 | {'Q': 0, 'H': 30.0, 'C': 20.0, 'O': 2.0}\n", "C2H4 | 28.054 | 0.0 | {'Q': 0, 'H': 4.0, 'C': 2.0}\n", "CH(CH3(CH2)18CH3)3 | 860.679 | 0.0 | {'Q': 0.0, 'H': 127.0, 'C': 61.0}\n", "HNO3 | 63.013 | 0.0 | {'Q': 0, 'H': 1, 'O': 3.0, 'N': 1}\n", "H+ | 1.008 | 1.0 | {'Q': 1, 'H': 1}\n", "Ca+2 | 40.078 | 2.0 | {'Q': 2.0, 'Ca': 1}\n", "OH- | 17.007 | -1.0 | {'Q': -1, 'H': 1, 'O': 1}\n", "H2 | 2.016 | 0.0 | {'Q': 0, 'H': 2.0}\n", "NO3- | 62.005 | -1.0 | {'Q': -1, 'O': 3.0, 'N': 1}\n", "SO4-2 | 96.064 | -2.0 | {'Q': -2.0, 'S': 1, 'O': 4.0}\n", "H2O | 18.015 | 0.0 | {'Q': 0, 'H': 2.0, 'O': 1}\n", "CH4 | 16.043 | 0.0 | {'Q': 0, 'H': 4.0, 'C': 1}\n", "CH3(CH2)18(CH3) | 78.366 | 0.0 | {'Q': 0, 'H': 42.0, 'C': 3}\n", "H2SO4 | 98.079 | 0.0 | {'Q': 0, 'H': 2.0, 'S': 1, 'O': 4.0}\n", "BaCl2 | 208.232 | 0.0 | {'Q': 0, 'Ba': 1, 'Cl': 2.0}\n", "NaCl | 58.442 | 0.0 | {'Q': 0, 'Na': 1, 'Cl': 1}\n", "Ca(NO3-)2 | 102.083 | -2.0 | {'Q': -2.0, 'Ca': 1, 'O': 3.0, 'N': 1}\n", "C6H5OH | 94.113 | 0.0 | {'Q': 0, 'H': 6.0, 'C': 6.0, 'O': 1}\n" ] } ], "source": [ "test = [\\\n", " 'Al(OH)2C18H35O2',\\\n", " 'D2O',\\\n", " 'C8H18',\\\n", " 'C6H5NH(COCH3)',\\\n", " 'C20H30O2',\\\n", " 'C2H4',\\\n", " 'CH(CH3(CH2)18CH3)3',\\\n", " 'HNO3',\\\n", " 'H+',\\\n", " 'Ca+2',\\\n", " 'OH-',\\\n", " 'H2',\\\n", " 'NO3-',\\\n", " 'SO4-2',\\\n", " 'H2O',\\\n", " 'CH4',\\\n", " 'CH3(CH2)18(CH3)',\\\n", " 'H2SO4',\\\n", " 'BaCl2',\\\n", " 'NaCl',\\\n", " 'Ca(NO3-)2',\\\n", " 'C6H5OH']\n", "\n", "for t in test:\n", " print \"{0:<20s}| \".format(t),\n", " print \"{0:7.3f} |\".format(mw(t)),\n", " print \"{0:4.1f} |\".format(charge(t)),\n", " print parseformula(t)" ] }, { "cell_type": "code", "execution_count": 595, "metadata": { "collapsed": true }, "outputs": [], "source": [ "test = ['C8H18','O2','CO2','H2O']\n", "\n", "stoich = {}\n", "for t in test:\n", " p = parseformula(t)\n", " for key in p.keys():\n", " stoich[t,key] = p[key]\n", " \n", " " ] }, { "cell_type": "code", "execution_count": 596, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "\n", "atoms = sorted(set([a for s,a in stoich.keys()]))\n", "species = sorted(set([s for s,a in stoich.keys()]))" ] }, { "cell_type": "code", "execution_count": 597, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " C H O Q\n", "C8H18 8 18 0 0\n", "CO2 1 0 2 0\n", "H2O 0 2 1 0\n", "O2 0 0 2 0\n" ] } ], "source": [ "print \"{0:<18s}\".format(''),\n", "for a in atoms:\n", " print \"{0:>5s}\".format(a),\n", "print\n", "for s in species:\n", " print \"{0:<18s}\".format(s),\n", " for a in atoms:\n", " if (s,a) in stoich:\n", " print \"{0:5.0f}\".format(stoich[s,a]),\n", " else:\n", " print \"{0:5.0f}\".format(0),\n", " print" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "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.9" } }, "nbformat": 4, "nbformat_minor": 0 }