{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Transportation and Distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Table of contents**\n", "- Overview\n", "- Setup\n", " - Authentication Token\n", "- Query\n", " - Output Description\n", "- Related Links" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scope 3 Emissions are greenhouse gas emissions from upstream or downstream in the value chain of a company, for example, business travel or the transportation of goods.\n", "\n", "Use the Transport API to calculate emissions from business-related employee travel, employee commuting, and freight transport. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ensure that Python 3+ is installed on your system.\n", "\n", "\n", "Note: To run this notebook, you must first add your credentials to `'../../../auth/secrets.ini'` in the following format:\n", "\n", "```\n", "[EAPI]\n", "api.api_key = \n", "api.tenant_id = \n", "api.org_id = \n", "\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Install the prerequisite Python packages.\n", "%pip install pandas configparser IPython requests" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import configparser\n", "import requests\n", "import json\n", "from IPython.display import display as display_summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Authentication Token" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run the following code snippet to generate a Bearer Token by using your api_key configured in secrets.ini." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Authentication Success\n" ] } ], "source": [ "config = configparser.RawConfigParser()\n", "config.read(['../../../auth/secrets.ini','../../../auth/config.ini'])\n", "\n", "EAPI_API_KEY = config.get('EAPI', 'api.api_key')\n", "EAPI_TENANT_ID = config.get('EAPI', 'api.tenant_id')\n", "EAPI_CLIENT_ID = 'ghgemissions-' + EAPI_TENANT_ID\n", "EAPI_ORG_ID = config.get('EAPI', 'api.org_id')\n", "\n", "EAPI_AUTH_CLIENT_ID = 'saascore-' + EAPI_TENANT_ID\n", "EAPI_AUTH_ENDPOINT = config.get('EAPI', 'api.auth_endpoint')\n", "\n", "EAPI_BASE_URL = config.get('EAPI', 'api.base_url')\n", "EAPI_ENDPOINT = f\"{EAPI_BASE_URL}/transportation-and-distribution\"\n", "\n", "auth_request_headers: dict = {}\n", "auth_request_headers[\"X-IBM-CLIENT-ID\"] = EAPI_AUTH_CLIENT_ID\n", "auth_request_headers[\"X-API-KEY\"] = EAPI_API_KEY\n", "\n", "verify = True\n", "\n", "auth_url = f\"{EAPI_AUTH_ENDPOINT}?orgId={EAPI_ORG_ID}\"\n", " \n", "response = requests.get(url = auth_url,\n", " headers = auth_request_headers,\n", " verify = verify\n", " )\n", "if response.status_code == 200:\n", " jwt_token = response.text\n", " print(\"Authentication Success\")\n", "else: \n", " print(\"Authentication Failed\")\n", " print(response.text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Query" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The example request payload (below) queries IBM Envizi - Emissions API for a short haul business flight taken from the United States of 1000 miles:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "payload = {\n", " \"activity\": {\n", " \"type\": \"Business flights:Short Haul\",\n", " \"value\": 1000,\n", " \"unit\": \"mi\"\n", " },\n", " \"location\": {\n", " \"country\": \"USA\"\n", " },\n", " \"time\": {\n", " \"date\": \"2025-01-01\"\n", " }\n", "}" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Create the query headers\n", "request_headers: dict = {}\n", "request_headers[\"Content-Type\"] = \"application/json\"\n", "request_headers[\"x-ibm-client-id\"] = EAPI_CLIENT_ID\n", "request_headers[\"Authorization\"] = \"Bearer \" + jwt_token\n", "\n", "# Submit the request\n", "response = requests.post(EAPI_ENDPOINT, \n", " headers = request_headers, \n", " data = json.dumps(payload))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more information about allowable parameters for the payload, please see [Emissions API Developer Guide]()." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n" ] }, { "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", "
transactionIdtotalCO2eCO2CH4N2Ounitdescription
0fed4e869-b31a-4ebc-9ee0-b7dd1cc9a905208.85354206.929260.180061.74421kgCO2eThe Business flights emissions factor used to calculate this result was obtained from the Managed - eGRID & US Climate Leaders factor set for the area Earth year 2024.
\n", "
" ], "text/plain": [ " transactionId totalCO2e CO2 CH4 \\\n", "0 fed4e869-b31a-4ebc-9ee0-b7dd1cc9a905 208.85354 206.92926 0.18006 \n", "\n", " N2O unit \\\n", "0 1.74421 kgCO2e \n", "\n", " description \n", "0 The Business flights emissions factor used to calculate this result was obtained from the Managed - eGRID & US Climate Leaders factor set for the area Earth year 2024. " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if response.text != \"\":\n", " # Get the response as json\n", " response_json = response.json()\n", " \n", " # Get json and convert to dataframe\n", " json_str = json.dumps(response_json)\n", " dict = json.loads(json_str)\n", " dataframe = pd.json_normalize(dict) \n", " \n", " # display\n", " print(\"\\n\\n\")\n", " pd.set_option('display.max_colwidth', None)\n", " display( dataframe) \n", "else:\n", " print(\"Empty Response\") " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Output Explanation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "transactionId - An Emissions API transaction id.\n", "\n", "totalCO2e - The total emissions as CO2 equivalent (CO2e)\n", "\n", "co2 - The amount of CO2 (Carbon Dioxide) in the CO2e value.\n", "\n", "ch4 - The amount of CH4 (Methane) in the CO2e value.\n", "\n", "n2O - The amount of N2O (Nitrous Oxide) in the CO2e value.\n", "\n", "hfc - The amount of HFCs (Hydrofluorocarbons) in the CO2e value.\n", "\n", "pfc - The amount of PFCs (Perfluorocarbons) in the CO2e value.\n", "\n", "sf6 - The amount of SF6 (Sulphur Hexafluoride) in the CO2e value.\n", "\n", "nf3 - The amount of NF3 (Nitrogen Trifluoride) in the CO2e value.\n", "\n", "bioCo2 - The amount of bio CO2 in the CO2 value.\n", "\n", "indirectCo2e - The amount of CO2e that is indirect in the CO2e value.\n", "\n", "unit - The unit of measure of the values.\n", "\n", "description - A description of the source factor set of the factor used in the calculation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Related Links" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "[Emissions API Developer Guide]()" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.12.1" } }, "nbformat": 4, "nbformat_minor": 4 }