{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Class 1: Introduction and setting up a simple LCA calculation\n",
    "\n",
    "Note: this notebook is based on [Brightway2 tutorial 4 - meta-analysis](http://nbviewer.ipython.org/urls/bitbucket.org/cmutel/brightway2/raw/default/notebooks/Tutorial%204%20-%20Meta-analysis.ipynb).\n",
    "\n",
    "# Setup\n",
    "\n",
    "Import the necessary libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from brightway2 import *\n",
    "import numpy as np\n",
    "import pyprind\n",
    "from scipy import stats\n",
    "import random"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set a new project for this class session"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "projects.current = \"Class 1\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Import the basic biosphere and LCIA methods (requires internet connection)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Creating default biosphere\n",
      "\n",
      "Applying strategy: normalize_units"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Writing activities to SQLite3 database:\n",
      "0%                          100%\n",
      "[##############################] | ETA[sec]: 0.000 \n",
      "Total time elapsed: 0.337 sec\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Applying strategy: drop_unspecified_subcategories\n",
      "Applied 2 strategies in 0.01 seconds\n",
      "Title: Writing activities to SQLite3 database:\n",
      "  Started: 10/19/2015 09:46:40\n",
      "  Finished: 10/19/2015 09:46:40\n",
      "  Total time elapsed: 0.337 sec\n",
      "  CPU %: 96.100000\n",
      "  Memory %: 0.325644\n",
      "Created database: biosphere3\n",
      "Creating default LCIA methods\n",
      "\n",
      "Applying strategy: normalize_units\n",
      "Applying strategy: set_biosphere_type\n",
      "Applying strategy: drop_unspecified_subcategories\n",
      "Applying strategy: link_iterable_by_fields\n",
      "Applied 4 strategies in 1.00 seconds\n",
      "Wrote 692 LCIA methods with 170915 characterization factors\n",
      "Creating core data migrations\n",
      "\n"
     ]
    }
   ],
   "source": [
    "bw2setup()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Import ecoinvent 2.2\n",
    "\n",
    "We are using version 2.2 to make the calculations a bit quicker, as this is intended to be run during the class.\n",
    "\n",
    "First, extract the data from the XML files."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Extracting ecospold1 files:\n",
      "0%                          100%\n",
      "[##############################] | ETA[sec]: 0.000 | Item ID: /Users/cmutel/D\n",
      "Total time elapsed: 8.460 sec\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Title: Extracting ecospold1 files:\n",
      "  Started: 10/19/2015 09:48:02\n",
      "  Finished: 10/19/2015 09:48:10\n",
      "  Total time elapsed: 8.460 sec\n",
      "  CPU %: 78.700000\n",
      "  Memory %: 0.845587\n",
      "Extracted 4087 datasets in 8.51 seconds\n"
     ]
    }
   ],
   "source": [
    "ei = SingleOutputEcospold1Importer(\"/Users/cmutel/Documents/LCA Documents/Ecoinvent/2.2/processes\", \"ecoinvent 2.2\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On windows, you will need to escape your backslashes by repeating them twice, e.g."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "ei = SingleOutputEcospold1Importer(\"c:\\\\Users\\\\cmutel\\\\Process_infra_roh\", \"ecoinvent 2.2\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we normalize some values, and link the different datasets to each other and the basic biosphere"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Applying strategy: normalize_units\n",
      "Applying strategy: assign_only_product_as_production\n",
      "Applying strategy: clean_integer_codes\n",
      "Applying strategy: drop_unspecified_subcategories\n",
      "Applying strategy: normalize_biosphere_categories\n",
      "Applying strategy: normalize_biosphere_names\n",
      "Applying strategy: strip_biosphere_exc_locations\n",
      "Applying strategy: set_code_by_activity_hash\n",
      "Applying strategy: link_iterable_by_fields\n",
      "Applying strategy: link_technosphere_by_activity_hash\n",
      "Applied 10 strategies in 2.35 seconds\n"
     ]
    }
   ],
   "source": [
    "ei.apply_strategies()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Check to make sure everything is linked"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4087 datasets\n",
      "135892 exchanges\n",
      "0 unlinked exchanges\n",
      "  \n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(4087, 135892, 0)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ei.statistics()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, write the database"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Writing activities to SQLite3 database:\n",
      "0%                          100%\n",
      "[##############################] | ETA[sec]: 0.000 \n",
      "Total time elapsed: 10.019 sec\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Title: Writing activities to SQLite3 database:\n",
      "  Started: 10/19/2015 10:36:24\n",
      "  Finished: 10/19/2015 10:36:34\n",
      "  Total time elapsed: 10.019 sec\n",
      "  CPU %: 91.900000\n",
      "  Memory %: 0.883520\n",
      "Created database: ecoinvent 2.2\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Brightway2 SQLiteBackend: ecoinvent 2.2"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ei.write_database()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['biosphere3', 'ecoinvent 2.2']"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(databases)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('CML 2001', 'photochemical oxidation (summer smog)', 'MIR'),\n",
       " ('ReCiPe Endpoint (H,A)', 'human health', 'ionising radiation'),\n",
       " ('eco-indicator 99, (H,A) w/o LT',\n",
       "  'ecosystem quality w/o LT',\n",
       "  'total w/o LT'),\n",
       " ('EDIP', 'resource consumption', 'non-renewable resources, mercury'),\n",
       " ('IMPACT 2002+ (Endpoint)', 'human health', 'human toxicity'),\n",
       " ('ReCiPe Endpoint (H,A) w/o LT',\n",
       "  'resources w/o LT',\n",
       "  'fossil depletion w/o LT'),\n",
       " ('EDIP2003', 'global warming', 'GWP 20a'),\n",
       " ('EDIP', 'resource consumption', 'non-renewable resources, natural gas'),\n",
       " ('IMPACT 2002+ (Endpoint)',\n",
       "  'ecosystem quality',\n",
       "  'terrestrial acidification & nutrification'),\n",
       " ('EDIP2003', 'ecotoxicity', 'acute, in water')]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(methods)[:10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Do some calculations\n",
    "\n",
    "We select the new database we just created, and then use a bit of trickiness to get random ordering. All datasets have the ``type`` ``\"process\"``, so this is equivalent to random ordering."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "db = Database(\"ecoinvent 2.2\")\n",
    "db.order_by = \"type\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Many of the built-in LCIA methods are too narrowly focused - we pre-select a set of candidates to use for our meta-calculations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "There are 52 methods to test\n"
     ]
    }
   ],
   "source": [
    "CANDIDATES = sorted([\n",
    " (u'CML 2001', u'acidification potential', u'average European'),\n",
    " (u'CML 2001', u'climate change', u'GWP 100a'),\n",
    " (u'CML 2001', u'eutrophication potential', u'average European'),\n",
    " (u'CML 2001', u'freshwater aquatic ecotoxicity', u'FAETP 100a'),\n",
    " (u'CML 2001', u'human toxicity', u'HTP 100a'),\n",
    " (u'CML 2001', u'land use', u'competition'),\n",
    " (u'CML 2001', u'marine aquatic ecotoxicity', u'MAETP infinite'),\n",
    " (u'CML 2001', u'resources', u'depletion of abiotic resources'),\n",
    " (u'CML 2001', u'stratospheric ozone depletion', u'ODP 25a'),\n",
    " (u'EDIP2003', u'ecotoxicity', u'in sewage treatment plants'),\n",
    " (u'EDIP2003', u'eutrophication', u'terrestrial eutrophication'),\n",
    " (u'EDIP2003', u'renewable resources', u'wood'),\n",
    " (u'EDIP2003', u'stratospheric ozone depletion', u'ODP total'),\n",
    " (u'EPS 2000', u'total', u'abiotic stock resources'),\n",
    " (u'EPS 2000', u'total', u'emissions into soil'),\n",
    " (u'EPS 2000', u'total', u'emissions into water'),\n",
    " (u'EPS 2000', u'total', u'land occupation'),\n",
    " (u'IMPACT 2002+ (Endpoint)', u'ecosystem quality', u'land occupation'),\n",
    " (u'IMPACT 2002+ (Endpoint)', u'human health', u'ozone layer depletion'),\n",
    " (u'IMPACT 2002+ (Endpoint)', u'resources', u'mineral extraction'),\n",
    " (u'IMPACT 2002+ (Endpoint)', u'resources', u'non-renewable energy'),\n",
    " (u'IMPACT 2002+ (Midpoint)', u'ecosystem quality', u'aquatic acidification'),\n",
    " (u'IPCC 2001', u'climate change', u'GWP 100a'),\n",
    " (u'ReCiPe Endpoint (H,A)',\n",
    "  u'ecosystem quality',\n",
    "  u'agricultural land occupation'),\n",
    " (u'ReCiPe Endpoint (H,A)',\n",
    "  u'ecosystem quality',\n",
    "  u'freshwater eutrophication'),\n",
    " (u'ReCiPe Endpoint (H,A)',\n",
    "  u'ecosystem quality',\n",
    "  u'natural land transformation'),\n",
    " (u'ReCiPe Endpoint (H,A)',\n",
    "  u'ecosystem quality',\n",
    "  u'terrestrial acidification'),\n",
    " (u'ReCiPe Endpoint (H,A)', u'ecosystem quality', u'urban land occupation'),\n",
    " (u'ReCiPe Endpoint (H,A)', u'human health', u'particulate matter formation'),\n",
    " (u'ReCiPe Endpoint (H,A)', u'resources', u'fossil depletion'),\n",
    " (u'TRACI', u'environmental impact', u'acidification'),\n",
    " (u'TRACI', u'environmental impact', u'eutrophication'),\n",
    " (u'TRACI', u'environmental impact', u'global warming'),\n",
    " (u'TRACI', u'environmental impact', u'ozone depletion'),\n",
    " (u'TRACI', u'human health', u'respiratory effects, average'),\n",
    " (u'eco-indicator 99, (H,A)',\n",
    "  u'ecosystem quality',\n",
    "  u'acidification & eutrophication'),\n",
    " (u'eco-indicator 99, (H,A)', u'ecosystem quality', u'ecotoxicity'),\n",
    " (u'eco-indicator 99, (H,A)', u'ecosystem quality', u'land occupation'),\n",
    " (u'eco-indicator 99, (H,A)', u'human health', u'carcinogenics'),\n",
    " (u'eco-indicator 99, (H,A)', u'human health', u'climate change'),\n",
    " (u'eco-indicator 99, (H,A)', u'human health', u'ozone layer depletion'),\n",
    " (u'eco-indicator 99, (H,A)', u'resources', u'fossil fuels'),\n",
    " (u'eco-indicator 99, (H,A)', u'resources', u'mineral extraction'),\n",
    " (u'ecological footprint', u'total', u'CO2'),\n",
    " (u'ecological footprint', u'total', u'land occupation'),\n",
    " (u'ecological footprint', u'total', u'nuclear'),\n",
    " (u'ecological scarcity 2006', u'total', u'deposited waste'),\n",
    " (u'ecological scarcity 2006', u'total', u'emission into groundwater'),\n",
    " (u'ecological scarcity 2006', u'total', u'energy resources'),\n",
    " (u'ecological scarcity 2006', u'total', u'natural resources'),\n",
    " (u'ecosystem damage potential', u'total', u'linear, land occupation'),\n",
    " (u'ecosystem damage potential', u'total', u'linear, land transformation'),\n",
    "])\n",
    "\n",
    "assert all(x in methods for x in CANDIDATES)\n",
    "\n",
    "print(\"There are %s methods to test\" % len(CANDIDATES))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Choose ten LCIA methods and 500 datasets from ecoinvent 2.2 at random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "chosen_methods = random.sample(CANDIDATES, 10)\n",
    "chosen_processes = []\n",
    "for index, obj in enumerate(db):\n",
    "    if index >= 500:\n",
    "        break\n",
    "    else:\n",
    "        chosen_processes.append(obj)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set up the LCA object, optimized to do many calculations.\n",
    "\n",
    "See [making LCA calculations faster](http://chris.mutel.org/fast-dont-lie.html) blog post for more details on factorization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "lca = LCA({chosen_processes[0]: 1}, method=chosen_methods[0])\n",
    "lca.lci(factorize=True)\n",
    "lca.lcia()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create an array to store our LCA results - processes on rows, methods on columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "results = np.zeros((500, 10))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Do 5000 LCA calculations in a single thread. Store the results in ``results``."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "0%                          100%\n",
      "[##############################] | ETA[sec]: 0.000 \n",
      "Total time elapsed: 22.971 sec\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Title: \n",
      "  Started: 09/29/2015 23:22:36\n",
      "  Finished: 09/29/2015 23:22:59\n",
      "  Total time elapsed: 22.971 sec\n",
      "  CPU %: 98.000000\n",
      "  Memory %: 5.591297\n"
     ]
    }
   ],
   "source": [
    "bar = pyprind.ProgBar(5000, monitor=True)\n",
    "\n",
    "for col, method in enumerate(chosen_methods):\n",
    "    lca.method = method\n",
    "    lca.load_lcia_data()\n",
    "    for row, process in enumerate(chosen_processes):\n",
    "        lca.redo_lcia({process: 1})\n",
    "        results[row, col] = lca.score\n",
    "        bar.update()\n",
    "\n",
    "print(bar)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We only care about processes which have non-zero LCA scores - there are a few processes in ecoinvent 2.2 which we want to filter automatically (if they are selected in our earlier random sample)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ignoring 8 processes\n"
     ]
    }
   ],
   "source": [
    "mask = (results.sum(axis=1) != 0)\n",
    "print(\"Ignoring {} processes\".format((~mask).sum()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the rank-order correlation for all processes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def create_correlation_matrix(scores_array):\n",
    "    num_methods = scores_array.shape[1]\n",
    "    correlations = np.zeros((num_methods, num_methods))\n",
    "\n",
    "    for row in range(num_methods):\n",
    "        for col in range(num_methods):\n",
    "            if col <= row:\n",
    "                continue                               # Only need to compute correlation once\n",
    "            dataset_1 = scores_array[:, row]\n",
    "            dataset_2 = scores_array[:, col]\n",
    "            mask = (dataset_1 != 0) * (dataset_2 != 0) # Ignore activities that have zero score\n",
    "            correlations[row, col] = stats.kendalltau( # Get tau value, drop p-statistic\n",
    "                dataset_1[mask], \n",
    "                dataset_2[mask]\n",
    "            )[0]  \n",
    "\n",
    "    return correlations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "correlation_matrix = create_correlation_matrix(results[mask, :])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Visualize the results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.0, 10.0, 0.0, 10.0)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\ncH+pAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11e6379b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig = plt.gcf()\n",
    "fig.set_size_inches(12, 12)\n",
    "\n",
    "masked_correlation = np.ma.array(correlation_matrix, mask=correlation_matrix == 0).T\n",
    "plt.pcolor(masked_correlation, cmap=plt.cm.cubehelix_r)\n",
    "plt.colorbar(label=r\"Kendall $\\tau$ rank-order correlation coefficient\")\n",
    "plt.ylim(None, 10)\n",
    "plt.xlim(None, 10)\n",
    "plt.axis('off')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.4.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
