diff --git a/images/plot1.png b/images/figure0.png similarity index 100% rename from images/plot1.png rename to images/figure0.png diff --git a/images/figure1.png b/images/figure1.png new file mode 100644 index 0000000..d763d45 Binary files /dev/null and b/images/figure1.png differ diff --git a/images/tagexample.png b/images/figure2.png similarity index 100% rename from images/tagexample.png rename to images/figure2.png diff --git a/images/plot3.png b/images/figure3.png similarity index 92% rename from images/plot3.png rename to images/figure3.png index 2705250..4220c66 100644 Binary files a/images/plot3.png and b/images/figure3.png differ diff --git a/images/figure4a.png b/images/figure4a.png new file mode 100644 index 0000000..01af931 Binary files /dev/null and b/images/figure4a.png differ diff --git a/images/figure4b.png b/images/figure4b.png new file mode 100644 index 0000000..2c2a231 Binary files /dev/null and b/images/figure4b.png differ diff --git a/images/plot4b.png b/images/figure5.png similarity index 100% rename from images/plot4b.png rename to images/figure5.png diff --git a/images/plot0.png b/images/plot0.png deleted file mode 100644 index 7528f74..0000000 Binary files a/images/plot0.png and /dev/null differ diff --git a/images/plot2.png b/images/plot2.png deleted file mode 100644 index a35476d..0000000 Binary files a/images/plot2.png and /dev/null differ diff --git a/images/plot2b.png b/images/plot2b.png deleted file mode 100644 index 5d870dd..0000000 Binary files a/images/plot2b.png and /dev/null differ diff --git a/images/plot4.png b/images/plot4.png deleted file mode 100644 index a405260..0000000 Binary files a/images/plot4.png and /dev/null differ diff --git a/notebooks/Assessment.ipynb b/notebooks/Assessment.ipynb index 4cc20e0..34cee4c 100644 --- a/notebooks/Assessment.ipynb +++ b/notebooks/Assessment.ipynb @@ -1,3048 +1,3050 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Overlap and assessment" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from matplotlib_venn import venn3, venn3_circles, venn2, venn2_circles\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Deterministic: 2052\n", - "Probabilistic: 7530\n" - ] - } - ], - "source": [ - "data_d = pd.read_csv('../data/tech.csv')\n", - "data_p = pd.read_csv('../data/tech2.csv')\n", - "print('Deterministic: {}\\nProbabilistic: {}'.format(len(data_d), len(data_p)))" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#print(len(table['link'].unique())) #all the unique links found in all the methods\n", - "plt.figure(figsize=(16, 12))\n", - "v = venn2([set(data_d.id), \n", - " set(data_p.id)], \n", - " set_labels = (\"Deterministic\", 'Probabilistic'),\n", - " set_colors=('#44b023', '#e8784f'), alpha=0.5)#\n", - "for text in v.set_labels:\n", - " text.set_fontsize(10)\n", - "for text in v.subset_labels:\n", - " text.set_fontsize(10)\n", - "c = venn2_circles([set(data_d.id), \n", - " set(data_p.id)], linestyle='solid', linewidth=0.6)\n", - "plt.title(\"Ovelap of Methods\")\n", - "#plt.savefig('../plots/venn-methods.png')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": {}, - "outputs": [], - "source": [ - "data_inner = pd.merge(data_p,data_d,\n", - " how='inner',on='id',suffixes=('_prob', '_det'))" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1534\n", - "518\n", - "5996\n" - ] - } - ], - "source": [ - "print(len(data_inner))\n", - "print(len(list(set(list(data_d.id)) - set(list(data_p.id)))))\n", - "print(len(list(set(list(data_p.id)) - set(list(data_d.id)))))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "How does it look the ones that match on deterministic but not probabilistic? \n", - "How does it look all the way around?" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "category\n", - "Building design nanomaterial 1\n", - "heat pump Vehicle design 1\n", - "heat pump energy storage 1\n", - "heat pump energy tower 1\n", - "heat pump renewable energy 1\n", - "Name: id, dtype: int64" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#data_inner.columns\n", - "inner_table = data_inner[['id','category']]\n", - "inner_table.groupby('category').count()['id'].sort_values().head()#.plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": {}, - "outputs": [], - "source": [ - "#random choice\n", - "#sample_list = list(np.random.choice(list(inner_table.id), 91, replace=False))" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": {}, - "outputs": [], - "source": [ - "cordish2020 = pd.read_excel('../data/cordis-h2020projects.xlsx')" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "metadata": {}, - "outputs": [], - "source": [ - "#create a sample set to assess\n", - "#cordish2020[cordish2020.id.isin(sample_list)][['title','objective','coordinator']].to_csv('../data/sample.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "metadata": {}, - "outputs": [], - "source": [ - "#inner_table.to_csv('../data/inner_table.csv') #only once is need\n", - "inner_table = cordish2020[cordish2020.id.isin(list(inner_table.id))]" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "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", - "
rcnidacronymstatusprogrammetopicsframeworkProgrammetitlestartDateendDate...objectivetotalCostecMaxContributioncallfundingSchemecoordinatorcoordinatorCountryparticipantsparticipantCountriessubjects
52216738353983D-FOGRODSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020Understanding forest growth dynamics using nov...2019-10-012021-09-30...Forest ecosystems are an essential terrestrial...178320.00178320.00H2020-MSCA-IF-2018MSCA-IF-EF-STUNIVERSITEIT GENTBENaNNaNNaN
16221633835541MOVESSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020MOnitoring VEgetation status and functioning a...2019-10-012021-09-30...Leaf Area Index (LAI), Fraction of green Veget...172932.48172932.48H2020-MSCA-IF-2018MSCA-IF-EF-STCENTRO DE INVESTIGACION ECOLOGICA Y APLICACION...ESNaNNaNNaN
33217649812602POLIPOCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020The first non-fermentative production process ...2018-06-012018-11-30...POLìPO S.r.l. has developed the first chemica...71429.0050000.00H2020-SMEInst-2018-2020-1SME-1POLIPO SRLITNaNNaNNaN
43217808811592NUTRI-NEEDSIGNEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Final development, clinical validation and lau...2018-06-012020-05-31...People want to live a long and healthy life an...3567000.002496900.00H2020-SMEInst-2018-2020-2SME-2NUTRILEADS BVNLNaNNaNNaN
45223666847641MICADOSIGNEDH2020-Euratom-1.7.;H2020-Euratom-1.1.NFRP-2018-10H2020Measurement and Instrumentation for Cleaning A...2019-06-012022-05-31...The goal of the MICADO project is to propose a...4986643.754442162.50NFRP-2018IACOSTRUZIONI APPARECCHIATURE ELETTRONICHE NUCLE...ITCOMMISSARIAT A L ENERGIE ATOMIQUE ET AUX ENERG...FR;DE;IT;BE;CZNaN
\n", - "

5 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " rcn id acronym status \\\n", - "5 221673 835398 3D-FOGROD SIGNED \n", - "16 221633 835541 MOVES SIGNED \n", - "33 217649 812602 POLIPO CLOSED \n", - "43 217808 811592 NUTRI-NEED SIGNED \n", - "45 223666 847641 MICADO SIGNED \n", - "\n", - " programme topics \\\n", - "5 H2020-EU.1.3.2. MSCA-IF-2018 \n", - "16 H2020-EU.1.3.2. MSCA-IF-2018 \n", - "33 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "43 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "45 H2020-Euratom-1.7.;H2020-Euratom-1.1. NFRP-2018-10 \n", - "\n", - " frameworkProgramme title \\\n", - "5 H2020 Understanding forest growth dynamics using nov... \n", - "16 H2020 MOnitoring VEgetation status and functioning a... \n", - "33 H2020 The first non-fermentative production process ... \n", - "43 H2020 Final development, clinical validation and lau... \n", - "45 H2020 Measurement and Instrumentation for Cleaning A... \n", - "\n", - " startDate endDate ... \\\n", - "5 2019-10-01 2021-09-30 ... \n", - "16 2019-10-01 2021-09-30 ... \n", - "33 2018-06-01 2018-11-30 ... \n", - "43 2018-06-01 2020-05-31 ... \n", - "45 2019-06-01 2022-05-31 ... \n", - "\n", - " objective totalCost \\\n", - "5 Forest ecosystems are an essential terrestrial... 178320.00 \n", - "16 Leaf Area Index (LAI), Fraction of green Veget... 172932.48 \n", - "33 POLìPO S.r.l. has developed the first chemica... 71429.00 \n", - "43 People want to live a long and healthy life an... 3567000.00 \n", - "45 The goal of the MICADO project is to propose a... 4986643.75 \n", - "\n", - " ecMaxContribution call fundingScheme \\\n", - "5 178320.00 H2020-MSCA-IF-2018 MSCA-IF-EF-ST \n", - "16 172932.48 H2020-MSCA-IF-2018 MSCA-IF-EF-ST \n", - "33 50000.00 H2020-SMEInst-2018-2020-1 SME-1 \n", - "43 2496900.00 H2020-SMEInst-2018-2020-2 SME-2 \n", - "45 4442162.50 NFRP-2018 IA \n", - "\n", - " coordinator coordinatorCountry \\\n", - "5 UNIVERSITEIT GENT BE \n", - "16 CENTRO DE INVESTIGACION ECOLOGICA Y APLICACION... ES \n", - "33 POLIPO SRL IT \n", - "43 NUTRILEADS BV NL \n", - "45 COSTRUZIONI APPARECCHIATURE ELETTRONICHE NUCLE... IT \n", - "\n", - " participants participantCountries \\\n", - "5 NaN NaN \n", - "16 NaN NaN \n", - "33 NaN NaN \n", - "43 NaN NaN \n", - "45 COMMISSARIAT A L ENERGIE ATOMIQUE ET AUX ENERG... FR;DE;IT;BE;CZ \n", - "\n", - " subjects \n", - "5 NaN \n", - "16 NaN \n", - "33 NaN \n", - "43 NaN \n", - "45 NaN \n", - "\n", - "[5 rows x 21 columns]" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "inner_table.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### After assessment" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": {}, - "outputs": [], - "source": [ - "sample_lab = pd.read_csv('../data/sample4tag.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "93.4065934065934" - ] - }, - "execution_count": 91, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sample_lab.label.sum()*100/len(sample_lab)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "### Demanded technologies" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "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", - "
sectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0EnergySolar energy sourcessolar PVAlso “solar photovoltaic”; technology of using...photovoltaic, PV, “solar cell”https://www.ctc-n.org/technologies/solar-pv1
1EnergySolar energy sourcesconcentrated solar power (CSP)Technology of producing electricity by concent...“concentrated solar power”, CSP, “concentrated...https://setis.ec.europa.eu/technologies/concen...1
2EnergySolar energy sourcessolar heatingTechnology of capturing the sun's radiation an...“solar heating”https://www.ctc-n.org/technologies/solar-heating1
3EnergySolar energy sourcessolar dryerTechnology of drying substances, especially fo...“solar dryer”https://www.ctc-n.org/technologies/solar-dryer0
4EnergySolar energy sourcessolar water pumpTechnology of powering electrical water pumps ...“solar water pump”https://www.ctc-n.org/technologies/solar-water...0
\n", - "
" - ], - "text/plain": [ - " sector technology_group technology \\\n", - "0 Energy Solar energy sources solar PV \n", - "1 Energy Solar energy sources concentrated solar power (CSP) \n", - "2 Energy Solar energy sources solar heating \n", - "3 Energy Solar energy sources solar dryer \n", - "4 Energy Solar energy sources solar water pump \n", - "\n", - " description \\\n", - "0 Also “solar photovoltaic”; technology of using... \n", - "1 Technology of producing electricity by concent... \n", - "2 Technology of capturing the sun's radiation an... \n", - "3 Technology of drying substances, especially fo... \n", - "4 Technology of powering electrical water pumps ... \n", - "\n", - " technology_term \\\n", - "0 photovoltaic, PV, “solar cell”  \n", - "1 “concentrated solar power”, CSP, “concentrated... \n", - "2 “solar heating” \n", - "3 “solar dryer” \n", - "4 “solar water pump” \n", - "\n", - " source priority \n", - "0 https://www.ctc-n.org/technologies/solar-pv 1 \n", - "1 https://setis.ec.europa.eu/technologies/concen... 1 \n", - "2 https://www.ctc-n.org/technologies/solar-heating 1 \n", - "3 https://www.ctc-n.org/technologies/solar-dryer 0 \n", - "4 https://www.ctc-n.org/technologies/solar-water... 0 " - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "categories = pd.read_excel('../data/categories_v2.xls')\n", - "categories = categories.fillna(method='ffill')\n", - "categories.columns = ['sector','technology_group','technology','description','technology_term','source','priority']\n", - "categories.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "97" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(categories.technology)" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "76" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "categories.priority.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "78.35051546391753" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#Percentage of priority from the catalogue\n", - "100*categories.priority.sum()/len(categories.technology)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "### Supplied technologies" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "metadata": {}, - "outputs": [], - "source": [ - "technology_table = pd.DataFrame()\n", - "# unnest the messy matches\n", - "list_technologies = data_inner['matches_technology_det']\n", - "number_matches, cleaned_lists = [], []\n", - "for l in list_technologies:\n", - " new_l = l.replace(\"[\",\"\").replace(\"]\",\"\").replace(\" '\",\"\").replace(\"'\",\"\").replace(\"'\",\"\").split(',')\n", - " cleaned_lists.append(new_l)\n", - " number_matches.append(len(new_l))\n", - "technology_table['technology_terms'] = [y for x in cleaned_lists for y in x] \n", - "#len(number_matches) == len(data_inner.id)\n", - "#create a list with project id that equals the terms\n", - "ids = [[i]*j for i,j in zip(inner_table.id, number_matches)] \n", - "technology_table['id'] = [y for x in ids for y in x]" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "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", - "
technology_termsid
0forest management835398
1forest management835541
2bioplastic812602
3DSM811592
4waste management847641
\n", - "
" - ], - "text/plain": [ - " technology_terms id\n", - "0 forest management 835398\n", - "1 forest management 835541\n", - "2 bioplastic 812602\n", - "3 DSM 811592\n", - "4 waste management 847641" - ] - }, - "execution_count": 101, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "technology_table.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "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", - "
sectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0EnergySolar energy sourcessolar PVAlso “solar photovoltaic”; technology of using...photovoltaic, PV, “solar cell”https://www.ctc-n.org/technologies/solar-pv1
1EnergySolar energy sourcesconcentrated solar power (CSP)Technology of producing electricity by concent...“concentrated solar power”, CSP, “concentrated...https://setis.ec.europa.eu/technologies/concen...1
2EnergySolar energy sourcessolar heatingTechnology of capturing the sun's radiation an...“solar heating”https://www.ctc-n.org/technologies/solar-heating1
3EnergySolar energy sourcessolar dryerTechnology of drying substances, especially fo...“solar dryer”https://www.ctc-n.org/technologies/solar-dryer0
4EnergySolar energy sourcessolar water pumpTechnology of powering electrical water pumps ...“solar water pump”https://www.ctc-n.org/technologies/solar-water...0
\n", - "
" - ], - "text/plain": [ - " sector technology_group technology \\\n", - "0 Energy Solar energy sources solar PV \n", - "1 Energy Solar energy sources concentrated solar power (CSP) \n", - "2 Energy Solar energy sources solar heating \n", - "3 Energy Solar energy sources solar dryer \n", - "4 Energy Solar energy sources solar water pump \n", - "\n", - " description \\\n", - "0 Also “solar photovoltaic”; technology of using... \n", - "1 Technology of producing electricity by concent... \n", - "2 Technology of capturing the sun's radiation an... \n", - "3 Technology of drying substances, especially fo... \n", - "4 Technology of powering electrical water pumps ... \n", - "\n", - " technology_term \\\n", - "0 photovoltaic, PV, “solar cell”  \n", - "1 “concentrated solar power”, CSP, “concentrated... \n", - "2 “solar heating” \n", - "3 “solar dryer” \n", - "4 “solar water pump” \n", - "\n", - " source priority \n", - "0 https://www.ctc-n.org/technologies/solar-pv 1 \n", - "1 https://setis.ec.europa.eu/technologies/concen... 1 \n", - "2 https://www.ctc-n.org/technologies/solar-heating 1 \n", - "3 https://www.ctc-n.org/technologies/solar-dryer 0 \n", - "4 https://www.ctc-n.org/technologies/solar-water... 0 " - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "categories.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "metadata": {}, - "outputs": [], - "source": [ - "matrix = []\n", - "for term in categories['technology_term']:\n", - " row = [x.strip() for x in term.split(',')]\n", - " row = [i.replace('“', '').replace('”', '') for i in row]\n", - " matrix.append(row)" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "metadata": {}, - "outputs": [], - "source": [ - "tech_dict = {key: value for (key, value) in zip(categories.technology, matrix)}" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "metadata": {}, - "outputs": [], - "source": [ - "technology_table['category'] = None" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "metadata": {}, - "outputs": [], - "source": [ - "for i in technology_table.index:\n", - " for k,v in tech_dict.items():\n", - " for j in v:\n", - " if technology_table.loc[i,'technology_terms'] == j:\n", - " technology_table.loc[i, 'category'] = k" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "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", - "
technology_termsidcategory
1405recycling633192recycling
1404efficient lighting633192low GHG lighting
845recycling633962recycling
844bioplastic633962bioplastics
935soil management635201soil management
\n", - "
" - ], - "text/plain": [ - " technology_terms id category\n", - "1405 recycling 633192 recycling\n", - "1404 efficient lighting 633192 low GHG lighting\n", - "845 recycling 633962 recycling\n", - "844 bioplastic 633962 bioplastics\n", - "935 soil management 635201 soil management" - ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "technology_table.sort_values('id').head() #repeated ids" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "category\n", - "low GHG steel 385\n", - "solar PV 302\n", - "recycling 211\n", - "energy storage 190\n", - "fuel cell 79\n", - "waste management 77\n", - "geothermal 70\n", - "carbon capture and storage 69\n", - "concentrated solar power (CSP) 68\n", - "grid management 67\n", - "combined heat and power (CHP) 58\n", - "electric vehicle design 43\n", - "biofuel 42\n", - "district heating and/or cooling 40\n", - "traffic management 39\n", - "heat pumps 37\n", - "offshore wind 37\n", - "wave energy 29\n", - "nanomaterial 28\n", - "forest management 27\n", - "biorefinery design 25\n", - "thermal storage 25\n", - "demand-side energy management 24\n", - "low GHG data centers 24\n", - "tidal energy 20\n", - "biopolymer 17\n", - "bioplastics 14\n", - "micro-grids 13\n", - "liquefied natural gas (LNG) 12\n", - "soil management 10\n", - " ... \n", - "afforestation 8\n", - "solar heating 8\n", - "combined cycle power plant 6\n", - "biochar 6\n", - "osmotic 5\n", - "energy-from-waste 5\n", - "nutrient management 5\n", - "compressed/converted natural gas 4\n", - "onshore wind 4\n", - "regenerative braking 4\n", - "ocean thermal energy conversion (OTEC) 4\n", - "compressed air energy storage (CAES) 3\n", - "off-grid systems 3\n", - "livestock management 3\n", - "nuclear fusion 3\n", - "agroforestry 3\n", - "updraft 2\n", - "non-motorised transport design 2\n", - "passive house 2\n", - "electron acceptor 2\n", - "reduced need for travel 1\n", - "waste heat reuse 1\n", - "inert anode 1\n", - "improved durability 1\n", - "downdraft 1\n", - "nuclear fission 1\n", - "new sources of protein 1\n", - "manure management 1\n", - "low GHG public transport / rapid transit design 1\n", - "direct seeding 1\n", - "Name: id, Length: 62, dtype: int64" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "technology_table.groupby('category').count()['id'].sort_values(ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "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", - "
idecMaxContribution
083775019630411.18
18181846004252.50
28151474991323.75
38176425995904.00
48257314017817.50
\n", - "
" - ], - "text/plain": [ - " id ecMaxContribution\n", - "0 837750 19630411.18\n", - "1 818184 6004252.50\n", - "2 815147 4991323.75\n", - "3 817642 5995904.00\n", - "4 825731 4017817.50" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#put the money and the rest of features\n", - "cordish2020[['id','ecMaxContribution']].head() #'acronym','title','startDate','objective'," - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "metadata": {}, - "outputs": [], - "source": [ - "cost_per_category = pd.merge(technology_table, cordish2020[['id','ecMaxContribution']], how='left', on='id')\n", - "cost_per_category = cost_per_category.groupby('category').agg(\n", - " ['mean','sum'])['ecMaxContribution'].sort_values(['sum','mean'], ascending=False).reset_index()\n", - "cost_per_category = pd.merge(cost_per_category, \n", - " categories[['sector','technology','priority']], how='left',\n", - " left_on='category', right_on='technology')\n", - "cost_per_category = cost_per_category[['sector','technology','priority','mean','sum']]" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "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", - "
sectortechnologyprioritymeansum
0Industrylow GHG steel12.351494e+069.053252e+08
1Energysolar PV11.950508e+065.890533e+08
2Human settlementsrecycling12.518069e+065.313126e+08
3Energyenergy storage12.533548e+064.813741e+08
4Energygeothermal14.934920e+063.454444e+08
5Transportfuel cell13.971767e+063.137696e+08
6Energygrid management14.049332e+062.713052e+08
7Energyconcentrated solar power (CSP)13.295332e+062.240826e+08
8Industrycarbon capture and storage13.016954e+062.081698e+08
9Human settlementswaste management12.354403e+061.812890e+08
\n", - "
" - ], - "text/plain": [ - " sector technology priority mean \\\n", - "0 Industry low GHG steel 1 2.351494e+06 \n", - "1 Energy solar PV 1 1.950508e+06 \n", - "2 Human settlements recycling 1 2.518069e+06 \n", - "3 Energy energy storage 1 2.533548e+06 \n", - "4 Energy geothermal 1 4.934920e+06 \n", - "5 Transport fuel cell 1 3.971767e+06 \n", - "6 Energy grid management 1 4.049332e+06 \n", - "7 Energy concentrated solar power (CSP) 1 3.295332e+06 \n", - "8 Industry carbon capture and storage 1 3.016954e+06 \n", - "9 Human settlements waste management 1 2.354403e+06 \n", - "\n", - " sum \n", - "0 9.053252e+08 \n", - "1 5.890533e+08 \n", - "2 5.313126e+08 \n", - "3 4.813741e+08 \n", - "4 3.454444e+08 \n", - "5 3.137696e+08 \n", - "6 2.713052e+08 \n", - "7 2.240826e+08 \n", - "8 2.081698e+08 \n", - "9 1.812890e+08 " - ] - }, - "execution_count": 111, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cost_per_category.head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "metadata": {}, - "outputs": [], - "source": [ - "def grouping(cost_per_category, category, agg):\n", - " agg_df = cost_per_category.groupby(category).sum()[str(agg)].reset_index()\n", - " agg_df['percentage'] = agg_df[str(agg)]*100/agg_df[str(agg)].sum()\n", - " agg_df = agg_df.sort_values('percentage', ascending=False)\n", - " return agg_df " - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": {}, - "outputs": [], - "source": [ - "tech_sum = grouping(cost_per_category, ['priority','technology'], 'sum') \n", - "sector_sum = grouping(cost_per_category, 'sector', 'sum') \n", - "priority_sum = grouping(cost_per_category, 'priority', 'sum') " - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
prioritytechnologysumpercentage
361low GHG steel9.053252e+0814.955627
531solar PV5.890533e+089.730936
501recycling5.313126e+088.777082
221energy storage4.813741e+087.952116
271geothermal3.454444e+085.706610
251fuel cell3.137696e+085.183354
281grid management2.713052e+084.481859
181concentrated solar power (CSP)2.240826e+083.701759
131carbon capture and storage2.081698e+083.438886
601waste management1.812890e+082.994826
201district heating and/or cooling1.796751e+082.968163
571traffic management1.739252e+082.873178
151combined heat and power (CHP)1.710958e+082.826438
121biorefinery design1.488818e+082.459471
471offshore wind1.397011e+082.307808
551thermal storage1.042644e+081.722408
291heat pumps1.022275e+081.688759
91biofuel1.016568e+081.679331
191demand-side energy management8.734684e+071.442936
561tidal energy8.708085e+071.438542
211electric vehicle design8.568994e+071.415565
391nanomaterial6.605166e+071.091148
611wave energy5.983902e+070.988518
30low GHG data centers5.005764e+070.826933
381micro-grids4.002983e+070.661278
81biochar3.684225e+070.608620
241forest management3.622698e+070.598456
321liquefied natural gas (LNG)2.576755e+070.425670
261gas turbine2.552590e+070.421678
50soil management2.518647e+070.416071
...............
341low GHG lighting2.268657e+070.374773
141combined cycle power plant2.117825e+070.349857
481osmotic2.104861e+070.347715
441nutrient management2.047841e+070.338296
541solar heating1.541945e+070.254723
451ocean thermal energy conversion (OTEC)1.103012e+070.182213
581updraft1.097947e+070.181377
231energy-from-waste9.231716e+060.152504
161compressed air energy storage (CAES)9.101826e+060.150359
521regenerative braking8.978962e+060.148329
331livestock management8.962547e+060.148058
351low GHG public transport / rapid transit design7.996591e+060.132101
71agroforestry6.371010e+060.105247
311inert anode5.232146e+060.086433
61afforestation5.114686e+060.084493
431nuclear fusion3.960661e+060.065429
411non-motorised transport design3.831696e+060.063298
491passive house3.770893e+060.062294
461off-grid systems2.843348e+060.046971
591waste heat reuse2.299104e+060.037980
401new sources of protein2.005463e+060.033129
171compressed/converted natural gas1.886744e+060.031168
511reduced need for travel1.217982e+060.020121
421nuclear fission5.000000e+050.008260
20electron acceptor4.111080e+050.006791
40onshore wind2.000000e+050.003304
371manure management5.000000e+040.000826
10downdraft5.000000e+040.000826
301improved durability5.000000e+040.000826
00direct seeding5.000000e+040.000826
\n", - "

62 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " priority technology sum \\\n", - "36 1 low GHG steel 9.053252e+08 \n", - "53 1 solar PV 5.890533e+08 \n", - "50 1 recycling 5.313126e+08 \n", - "22 1 energy storage 4.813741e+08 \n", - "27 1 geothermal 3.454444e+08 \n", - "25 1 fuel cell 3.137696e+08 \n", - "28 1 grid management 2.713052e+08 \n", - "18 1 concentrated solar power (CSP) 2.240826e+08 \n", - "13 1 carbon capture and storage 2.081698e+08 \n", - "60 1 waste management 1.812890e+08 \n", - "20 1 district heating and/or cooling 1.796751e+08 \n", - "57 1 traffic management 1.739252e+08 \n", - "15 1 combined heat and power (CHP) 1.710958e+08 \n", - "12 1 biorefinery design 1.488818e+08 \n", - "47 1 offshore wind 1.397011e+08 \n", - "55 1 thermal storage 1.042644e+08 \n", - "29 1 heat pumps 1.022275e+08 \n", - "9 1 biofuel 1.016568e+08 \n", - "19 1 demand-side energy management 8.734684e+07 \n", - "56 1 tidal energy 8.708085e+07 \n", - "21 1 electric vehicle design 8.568994e+07 \n", - "39 1 nanomaterial 6.605166e+07 \n", - "61 1 wave energy 5.983902e+07 \n", - "3 0 low GHG data centers 5.005764e+07 \n", - "38 1 micro-grids 4.002983e+07 \n", - "8 1 biochar 3.684225e+07 \n", - "24 1 forest management 3.622698e+07 \n", - "32 1 liquefied natural gas (LNG) 2.576755e+07 \n", - "26 1 gas turbine 2.552590e+07 \n", - "5 0 soil management 2.518647e+07 \n", - ".. ... ... ... \n", - "34 1 low GHG lighting 2.268657e+07 \n", - "14 1 combined cycle power plant 2.117825e+07 \n", - "48 1 osmotic 2.104861e+07 \n", - "44 1 nutrient management 2.047841e+07 \n", - "54 1 solar heating 1.541945e+07 \n", - "45 1 ocean thermal energy conversion (OTEC) 1.103012e+07 \n", - "58 1 updraft 1.097947e+07 \n", - "23 1 energy-from-waste 9.231716e+06 \n", - "16 1 compressed air energy storage (CAES) 9.101826e+06 \n", - "52 1 regenerative braking 8.978962e+06 \n", - "33 1 livestock management 8.962547e+06 \n", - "35 1 low GHG public transport / rapid transit design 7.996591e+06 \n", - "7 1 agroforestry 6.371010e+06 \n", - "31 1 inert anode 5.232146e+06 \n", - "6 1 afforestation 5.114686e+06 \n", - "43 1 nuclear fusion 3.960661e+06 \n", - "41 1 non-motorised transport design 3.831696e+06 \n", - "49 1 passive house 3.770893e+06 \n", - "46 1 off-grid systems 2.843348e+06 \n", - "59 1 waste heat reuse 2.299104e+06 \n", - "40 1 new sources of protein 2.005463e+06 \n", - "17 1 compressed/converted natural gas 1.886744e+06 \n", - "51 1 reduced need for travel 1.217982e+06 \n", - "42 1 nuclear fission 5.000000e+05 \n", - "2 0 electron acceptor 4.111080e+05 \n", - "4 0 onshore wind 2.000000e+05 \n", - "37 1 manure management 5.000000e+04 \n", - "1 0 downdraft 5.000000e+04 \n", - "30 1 improved durability 5.000000e+04 \n", - "0 0 direct seeding 5.000000e+04 \n", - "\n", - " percentage \n", - "36 14.955627 \n", - "53 9.730936 \n", - "50 8.777082 \n", - "22 7.952116 \n", - "27 5.706610 \n", - "25 5.183354 \n", - "28 4.481859 \n", - "18 3.701759 \n", - "13 3.438886 \n", - "60 2.994826 \n", - "20 2.968163 \n", - "57 2.873178 \n", - "15 2.826438 \n", - "12 2.459471 \n", - "47 2.307808 \n", - "55 1.722408 \n", - "29 1.688759 \n", - "9 1.679331 \n", - "19 1.442936 \n", - "56 1.438542 \n", - "21 1.415565 \n", - "39 1.091148 \n", - "61 0.988518 \n", - "3 0.826933 \n", - "38 0.661278 \n", - "8 0.608620 \n", - "24 0.598456 \n", - "32 0.425670 \n", - "26 0.421678 \n", - "5 0.416071 \n", - ".. ... \n", - "34 0.374773 \n", - "14 0.349857 \n", - "48 0.347715 \n", - "44 0.338296 \n", - "54 0.254723 \n", - "45 0.182213 \n", - "58 0.181377 \n", - "23 0.152504 \n", - "16 0.150359 \n", - "52 0.148329 \n", - "33 0.148058 \n", - "35 0.132101 \n", - "7 0.105247 \n", - "31 0.086433 \n", - "6 0.084493 \n", - "43 0.065429 \n", - "41 0.063298 \n", - "49 0.062294 \n", - "46 0.046971 \n", - "59 0.037980 \n", - "40 0.033129 \n", - "17 0.031168 \n", - "51 0.020121 \n", - "42 0.008260 \n", - "2 0.006791 \n", - "4 0.003304 \n", - "37 0.000826 \n", - "1 0.000826 \n", - "30 0.000826 \n", - "0 0.000826 \n", - "\n", - "[62 rows x 4 columns]" - ] - }, - "execution_count": 114, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tech_sum#.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "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", - "
sectorsumpercentage
2Energy2.395613e+0939.574619
4Industry1.469098e+0924.268933
3Human settlements1.037377e+0917.137079
5Transport7.247211e+0811.972115
1Buildings2.849001e+084.706441
\n", - "
" - ], - "text/plain": [ - " sector sum percentage\n", - "2 Energy 2.395613e+09 39.574619\n", - "4 Industry 1.469098e+09 24.268933\n", - "3 Human settlements 1.037377e+09 17.137079\n", - "5 Transport 7.247211e+08 11.972115\n", - "1 Buildings 2.849001e+08 4.706441" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sector_sum.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "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", - "
prioritysumpercentage
115.977453e+0998.745249
007.595522e+071.254751
\n", - "
" - ], - "text/plain": [ - " priority sum percentage\n", - "1 1 5.977453e+09 98.745249\n", - "0 0 7.595522e+07 1.254751" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "priority_sum.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "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", - "
sectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0EnergySolar energy sourcessolar PVAlso “solar photovoltaic”; technology of using...photovoltaic, PV, “solar cell”https://www.ctc-n.org/technologies/solar-pv1
1EnergySolar energy sourcesconcentrated solar power (CSP)Technology of producing electricity by concent...“concentrated solar power”, CSP, “concentrated...https://setis.ec.europa.eu/technologies/concen...1
2EnergySolar energy sourcessolar heatingTechnology of capturing the sun's radiation an...“solar heating”https://www.ctc-n.org/technologies/solar-heating1
3EnergySolar energy sourcessolar dryerTechnology of drying substances, especially fo...“solar dryer”https://www.ctc-n.org/technologies/solar-dryer0
4EnergySolar energy sourcessolar water pumpTechnology of powering electrical water pumps ...“solar water pump”https://www.ctc-n.org/technologies/solar-water...0
\n", - "
" - ], - "text/plain": [ - " sector technology_group technology \\\n", - "0 Energy Solar energy sources solar PV \n", - "1 Energy Solar energy sources concentrated solar power (CSP) \n", - "2 Energy Solar energy sources solar heating \n", - "3 Energy Solar energy sources solar dryer \n", - "4 Energy Solar energy sources solar water pump \n", - "\n", - " description \\\n", - "0 Also “solar photovoltaic”; technology of using... \n", - "1 Technology of producing electricity by concent... \n", - "2 Technology of capturing the sun's radiation an... \n", - "3 Technology of drying substances, especially fo... \n", - "4 Technology of powering electrical water pumps ... \n", - "\n", - " technology_term \\\n", - "0 photovoltaic, PV, “solar cell”  \n", - "1 “concentrated solar power”, CSP, “concentrated... \n", - "2 “solar heating” \n", - "3 “solar dryer” \n", - "4 “solar water pump” \n", - "\n", - " source priority \n", - "0 https://www.ctc-n.org/technologies/solar-pv 1 \n", - "1 https://setis.ec.europa.eu/technologies/concen... 1 \n", - "2 https://www.ctc-n.org/technologies/solar-heating 1 \n", - "3 https://www.ctc-n.org/technologies/solar-dryer 0 \n", - "4 https://www.ctc-n.org/technologies/solar-water... 0 " - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "categories.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [], - "source": [ - "extended_categories = pd.merge(technology_table, categories, \n", - " how = 'left', left_on = 'category', right_on = 'technology')" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "priority\n", - "0.0 42\n", - "1.0 2150\n", - "Name: id, dtype: int64" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "extended_categories.groupby('priority').count()['id']" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.506593906321055" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#categories v1\n", - "1114/(1085+1114)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9808394160583942" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#categories v2\n", - "2150/(42+2150)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "what about the money" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [], - "source": [ - "#extended_categories.to_csv('../data/extended_categories_v2.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 67, - "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", - "
technology_termsidcategorysectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0forest management835398forest managementAgricultureForest protectionforest managementTechnology of increasing carbon stocks of stan...“forest management”, “management of forest”https://www.ctc-n.org/technologies/forest-mana...1.0
1forest management835541forest managementAgricultureForest protectionforest managementTechnology of increasing carbon stocks of stan...“forest management”, “management of forest”https://www.ctc-n.org/technologies/forest-mana...1.0
2bioplastic812602bioplasticsIndustryUse of innovative materialsbioplasticsTechnology of using renewable biomass material...bioplastichttps://www.ctc-n.org/technologies/bioplastics1.0
3DSM811592demand-side energy managementBuildingsDecreased energy consumption design or practicesdemand-side energy managementTechnology inside buildings that help ensure t...“demand-side energy management”, “demand-side ...https://www.ctc-n.org/technologies/energy-mana...1.0
4waste management847641waste managementHuman settlementsWaste managementwaste managementTechnology of maximising efficiency of resourc...“waste management”, “management of waste”https://www.ctc-n.org/technologies/integrated-...1.0
\n", - "
" - ], - "text/plain": [ - " technology_terms id category \\\n", - "0 forest management 835398 forest management \n", - "1 forest management 835541 forest management \n", - "2 bioplastic 812602 bioplastics \n", - "3 DSM 811592 demand-side energy management \n", - "4 waste management 847641 waste management \n", - "\n", - " sector technology_group \\\n", - "0 Agriculture Forest protection \n", - "1 Agriculture Forest protection \n", - "2 Industry Use of innovative materials \n", - "3 Buildings Decreased energy consumption design or practices \n", - "4 Human settlements Waste management \n", - "\n", - " technology \\\n", - "0 forest management \n", - "1 forest management \n", - "2 bioplastics \n", - "3 demand-side energy management \n", - "4 waste management \n", - "\n", - " description \\\n", - "0 Technology of increasing carbon stocks of stan... \n", - "1 Technology of increasing carbon stocks of stan... \n", - "2 Technology of using renewable biomass material... \n", - "3 Technology inside buildings that help ensure t... \n", - "4 Technology of maximising efficiency of resourc... \n", - "\n", - " technology_term \\\n", - "0 “forest management”, “management of forest” \n", - "1 “forest management”, “management of forest” \n", - "2 bioplastic \n", - "3 “demand-side energy management”, “demand-side ... \n", - "4 “waste management”, “management of waste” \n", - "\n", - " source priority \n", - "0 https://www.ctc-n.org/technologies/forest-mana... 1.0 \n", - "1 https://www.ctc-n.org/technologies/forest-mana... 1.0 \n", - "2 https://www.ctc-n.org/technologies/bioplastics 1.0 \n", - "3 https://www.ctc-n.org/technologies/energy-mana... 1.0 \n", - "4 https://www.ctc-n.org/technologies/integrated-... 1.0 " - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "extended_categories.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [], - "source": [ - "categories_raw_minus_categories_extended = pd.merge(categories[['sector','technology_group','technology']], extended_categories, how='left', on='technology')" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2227" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(categories_raw_minus_categories_extended)" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "metadata": {}, - "outputs": [], - "source": [ - "not_invested = categories_raw_minus_categories_extended[categories_raw_minus_categories_extended.id.isnull()]\\\n", - " [['sector_x','technology_group_x','technology']]\\\n", - " .reset_index(drop=True)\\\n", - " .rename(columns={'sector_x':'sector','technology_group_x':'technology_group'})\\\n", - " .merge(categories[['technology','priority']], how='left',on='technology')\\\n", - " .drop_duplicates()" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "metadata": {}, - "outputs": [], - "source": [ - "not_invested.to_csv('../data/not_invested.csv',index=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "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", - "
sectortechnology_grouptechnologypriority
0EnergySolar energy sourcessolar dryer0
1EnergySolar energy sourcessolar water pump0
2EnergySystem innovationlow GHG transmission1
11TransportFuelelectric battery1
12TransportVehicle designlow GHG aircraft design1
\n", - "
" - ], - "text/plain": [ - " sector technology_group technology priority\n", - "0 Energy Solar energy sources solar dryer 0\n", - "1 Energy Solar energy sources solar water pump 0\n", - "2 Energy System innovation low GHG transmission 1\n", - "11 Transport Fuel electric battery 1\n", - "12 Transport Vehicle design low GHG aircraft design 1" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "not_invested.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "----\n", - "## Join calculation (parelell to tableau)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [], - "source": [ - "cordis_data = pd.merge(extended_categories, inner_table, how='inner', on='id')" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['technology_terms', 'id', 'category', 'sector', 'technology_group',\n", - " 'technology', 'description', 'technology_term', 'source', 'priority',\n", - " 'rcn', 'acronym', 'status', 'programme', 'topics', 'frameworkProgramme',\n", - " 'title', 'startDate', 'endDate', 'projectUrl', 'objective', 'totalCost',\n", - " 'ecMaxContribution', 'call', 'fundingScheme', 'coordinator',\n", - " 'coordinatorCountry', 'participants', 'participantCountries',\n", - " 'subjects'],\n", - " dtype='object')" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cordis_data.columns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "#### CleanTech Projects" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1534" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(cordis_data.id.unique())" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [], - "source": [ - "priority_table = cordis_data.groupby('id').mean()['priority'].reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "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", - "
priorityid
00.00000036
10.5000004
20.6666671
31.0000001487
\n", - "
" - ], - "text/plain": [ - " priority id\n", - "0 0.000000 36\n", - "1 0.500000 4\n", - "2 0.666667 1\n", - "3 1.000000 1487" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "priority_summary = priority_table.groupby('priority').count().reset_index()\n", - "priority_summary" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is because you might have a project with more than one technology and those technologies might be priority or not, so we take all the 1 as priority 0 otherwise" - ] - }, - { - "cell_type": "code", - "execution_count": 146, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Priority projects: 1487, 96.9361147327249\n", - "Non-priority projects: 47, 3.0638852672751016\n" - ] - } - ], - "source": [ - "priority = priority_summary.loc[3,'id']\n", - "total = len(cordis_data.id.unique())\n", - "\n", - "print('Priority projects: {}, {}'.format(priority, priority/total*100))\n", - "print('Non-priority projects: {}, {}'.format(total-priority, (1-(priority/total))*100))" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1528" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "priority_summary.id.sum()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "#### EU contribution" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "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", - "
priorityecMaxContribution
00.0000007.570522e+07
10.5000004.000000e+05
20.6666671.500000e+05
31.0000005.978837e+09
\n", - "
" - ], - "text/plain": [ - " priority ecMaxContribution\n", - "0 0.000000 7.570522e+07\n", - "1 0.500000 4.000000e+05\n", - "2 0.666667 1.500000e+05\n", - "3 1.000000 5.978837e+09" - ] - }, - "execution_count": 168, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "priority_conrtibution_summary = pd.merge(priority_table, cordis_data[['id','ecMaxContribution']], how='left', on='id')\n", - "priority_conrtibution_summary = priority_conrtibution_summary.groupby('priority').sum()['ecMaxContribution'].reset_index()\n", - "priority_conrtibution_summary" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is because you might have a project with more than one technology and those technologies might be priority or not, so we take all the 1 as priority 0 otherwise" - ] - }, - { - "cell_type": "code", - "execution_count": 171, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Priority contribution: 5978.83690700002, 98.21835140837607\n", - "Non-priority contribution: 108.45413511998082, 1.78164859162393\n" - ] + "cells": [ + { + "cell_type": "markdown", + "source": [ + "### Overlap and assessment" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from matplotlib_venn import venn3, venn3_circles, venn2, venn2_circles\n", + "import matplotlib.pyplot as plt" + ], + "outputs": [], + "execution_count": 79, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "data_d = pd.read_csv('../data/tech.csv')\n", + "data_p = pd.read_csv('../data/tech2.csv')\n", + "print('Deterministic: {}\\nProbabilistic: {}'.format(len(data_d), len(data_p)))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Deterministic: 2052\n", + "Probabilistic: 7530\n" + ] + } + ], + "execution_count": 80, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#print(len(table['link'].unique())) #all the unique links found in all the methods\n", + "plt.figure(figsize=(16, 12))\n", + "v = venn2([set(data_d.id), \n", + " set(data_p.id)], \n", + " set_labels = (\"Deterministic\", 'Probabilistic'),\n", + " set_colors=('#44b023', '#e8784f'), alpha=0.5)#\n", + "for text in v.set_labels:\n", + " text.set_fontsize(10)\n", + "for text in v.subset_labels:\n", + " text.set_fontsize(10)\n", + "c = venn2_circles([set(data_d.id), \n", + " set(data_p.id)], linestyle='solid', linewidth=0.6)\n", + "plt.title(\"Ovelap of Methods\")\n", + "#plt.savefig('../plots/venn-methods.png')\n", + "plt.show()" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": [ + "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\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {} + } + ], + "execution_count": 81, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "data_inner = pd.merge(data_p,data_d,\n", + " how='inner',on='id',suffixes=('_prob', '_det'))" + ], + "outputs": [], + "execution_count": 82, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "print(len(data_inner))\n", + "print(len(list(set(list(data_d.id)) - set(list(data_p.id)))))\n", + "print(len(list(set(list(data_p.id)) - set(list(data_d.id)))))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "1534\n", + "518\n", + "5996\n" + ] + } + ], + "execution_count": 83, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "How does it look the ones that match on deterministic but not probabilistic? \n", + "How does it look all the way around?" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#data_inner.columns\n", + "inner_table = data_inner[['id','category']]\n", + "inner_table.groupby('category').count()['id'].sort_values().head()#.plot()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 84, + "data": { + "text/plain": [ + "category\n", + "Building design nanomaterial 1\n", + "heat pump Vehicle design 1\n", + "heat pump energy storage 1\n", + "heat pump energy tower 1\n", + "heat pump renewable energy 1\n", + "Name: id, dtype: int64" + ] + }, + "metadata": {} + } + ], + "execution_count": 84, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#random choice\n", + "#sample_list = list(np.random.choice(list(inner_table.id), 91, replace=False))" + ], + "outputs": [], + "execution_count": 86, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cordish2020 = pd.read_excel('../data/cordis-h2020projects.xlsx')" + ], + "outputs": [], + "execution_count": 87, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#create a sample set to assess\n", + "#cordish2020[cordish2020.id.isin(sample_list)][['title','objective','coordinator']].to_csv('../data/sample.csv')" + ], + "outputs": [], + "execution_count": 88, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#inner_table.to_csv('../data/inner_table.csv') #only once is need\n", + "inner_table = cordish2020[cordish2020.id.isin(list(inner_table.id))]" + ], + "outputs": [], + "execution_count": 89, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "inner_table.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 96, + "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", + "
rcnidacronymstatusprogrammetopicsframeworkProgrammetitlestartDateendDate...objectivetotalCostecMaxContributioncallfundingSchemecoordinatorcoordinatorCountryparticipantsparticipantCountriessubjects
52216738353983D-FOGRODSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020Understanding forest growth dynamics using nov...2019-10-012021-09-30...Forest ecosystems are an essential terrestrial...178320.00178320.00H2020-MSCA-IF-2018MSCA-IF-EF-STUNIVERSITEIT GENTBENaNNaNNaN
16221633835541MOVESSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020MOnitoring VEgetation status and functioning a...2019-10-012021-09-30...Leaf Area Index (LAI), Fraction of green Veget...172932.48172932.48H2020-MSCA-IF-2018MSCA-IF-EF-STCENTRO DE INVESTIGACION ECOLOGICA Y APLICACION...ESNaNNaNNaN
33217649812602POLIPOCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020The first non-fermentative production process ...2018-06-012018-11-30...POLìPO S.r.l. has developed the first chemica...71429.0050000.00H2020-SMEInst-2018-2020-1SME-1POLIPO SRLITNaNNaNNaN
43217808811592NUTRI-NEEDSIGNEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Final development, clinical validation and lau...2018-06-012020-05-31...People want to live a long and healthy life an...3567000.002496900.00H2020-SMEInst-2018-2020-2SME-2NUTRILEADS BVNLNaNNaNNaN
45223666847641MICADOSIGNEDH2020-Euratom-1.7.;H2020-Euratom-1.1.NFRP-2018-10H2020Measurement and Instrumentation for Cleaning A...2019-06-012022-05-31...The goal of the MICADO project is to propose a...4986643.754442162.50NFRP-2018IACOSTRUZIONI APPARECCHIATURE ELETTRONICHE NUCLE...ITCOMMISSARIAT A L ENERGIE ATOMIQUE ET AUX ENERG...FR;DE;IT;BE;CZNaN
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " rcn id acronym status \\\n", + "5 221673 835398 3D-FOGROD SIGNED \n", + "16 221633 835541 MOVES SIGNED \n", + "33 217649 812602 POLIPO CLOSED \n", + "43 217808 811592 NUTRI-NEED SIGNED \n", + "45 223666 847641 MICADO SIGNED \n", + "\n", + " programme topics \\\n", + "5 H2020-EU.1.3.2. MSCA-IF-2018 \n", + "16 H2020-EU.1.3.2. MSCA-IF-2018 \n", + "33 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "43 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "45 H2020-Euratom-1.7.;H2020-Euratom-1.1. NFRP-2018-10 \n", + "\n", + " frameworkProgramme title \\\n", + "5 H2020 Understanding forest growth dynamics using nov... \n", + "16 H2020 MOnitoring VEgetation status and functioning a... \n", + "33 H2020 The first non-fermentative production process ... \n", + "43 H2020 Final development, clinical validation and lau... \n", + "45 H2020 Measurement and Instrumentation for Cleaning A... \n", + "\n", + " startDate endDate ... \\\n", + "5 2019-10-01 2021-09-30 ... \n", + "16 2019-10-01 2021-09-30 ... \n", + "33 2018-06-01 2018-11-30 ... \n", + "43 2018-06-01 2020-05-31 ... \n", + "45 2019-06-01 2022-05-31 ... \n", + "\n", + " objective totalCost \\\n", + "5 Forest ecosystems are an essential terrestrial... 178320.00 \n", + "16 Leaf Area Index (LAI), Fraction of green Veget... 172932.48 \n", + "33 POLìPO S.r.l. has developed the first chemica... 71429.00 \n", + "43 People want to live a long and healthy life an... 3567000.00 \n", + "45 The goal of the MICADO project is to propose a... 4986643.75 \n", + "\n", + " ecMaxContribution call fundingScheme \\\n", + "5 178320.00 H2020-MSCA-IF-2018 MSCA-IF-EF-ST \n", + "16 172932.48 H2020-MSCA-IF-2018 MSCA-IF-EF-ST \n", + "33 50000.00 H2020-SMEInst-2018-2020-1 SME-1 \n", + "43 2496900.00 H2020-SMEInst-2018-2020-2 SME-2 \n", + "45 4442162.50 NFRP-2018 IA \n", + "\n", + " coordinator coordinatorCountry \\\n", + "5 UNIVERSITEIT GENT BE \n", + "16 CENTRO DE INVESTIGACION ECOLOGICA Y APLICACION... ES \n", + "33 POLIPO SRL IT \n", + "43 NUTRILEADS BV NL \n", + "45 COSTRUZIONI APPARECCHIATURE ELETTRONICHE NUCLE... IT \n", + "\n", + " participants participantCountries \\\n", + "5 NaN NaN \n", + "16 NaN NaN \n", + "33 NaN NaN \n", + "43 NaN NaN \n", + "45 COMMISSARIAT A L ENERGIE ATOMIQUE ET AUX ENERG... FR;DE;IT;BE;CZ \n", + "\n", + " subjects \n", + "5 NaN \n", + "16 NaN \n", + "33 NaN \n", + "43 NaN \n", + "45 NaN \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "metadata": {} + } + ], + "execution_count": 96, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### After assessment" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "sample_lab = pd.read_csv('../data/sample4tag.csv')" + ], + "outputs": [], + "execution_count": 90, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "sample_lab.label.sum()*100/len(sample_lab)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 91, + "data": { + "text/plain": [ + "93.4065934065934" + ] + }, + "metadata": {} + } + ], + "execution_count": 91, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "### Demanded technologies" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "categories = pd.read_excel('../data/categories_v2.xls')\n", + "categories = categories.fillna(method='ffill')\n", + "categories.columns = ['sector','technology_group','technology','description','technology_term','source','priority']\n", + "categories.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 92, + "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", + "
sectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0EnergySolar energy sourcessolar PVAlso “solar photovoltaic”; technology of using...photovoltaic, PV, “solar cell”https://www.ctc-n.org/technologies/solar-pv1
1EnergySolar energy sourcesconcentrated solar power (CSP)Technology of producing electricity by concent...“concentrated solar power”, CSP, “concentrated...https://setis.ec.europa.eu/technologies/concen...1
2EnergySolar energy sourcessolar heatingTechnology of capturing the sun's radiation an...“solar heating”https://www.ctc-n.org/technologies/solar-heating1
3EnergySolar energy sourcessolar dryerTechnology of drying substances, especially fo...“solar dryer”https://www.ctc-n.org/technologies/solar-dryer0
4EnergySolar energy sourcessolar water pumpTechnology of powering electrical water pumps ...“solar water pump”https://www.ctc-n.org/technologies/solar-water...0
\n", + "
" + ], + "text/plain": [ + " sector technology_group technology \\\n", + "0 Energy Solar energy sources solar PV \n", + "1 Energy Solar energy sources concentrated solar power (CSP) \n", + "2 Energy Solar energy sources solar heating \n", + "3 Energy Solar energy sources solar dryer \n", + "4 Energy Solar energy sources solar water pump \n", + "\n", + " description \\\n", + "0 Also “solar photovoltaic”; technology of using... \n", + "1 Technology of producing electricity by concent... \n", + "2 Technology of capturing the sun's radiation an... \n", + "3 Technology of drying substances, especially fo... \n", + "4 Technology of powering electrical water pumps ... \n", + "\n", + " technology_term \\\n", + "0 photovoltaic, PV, “solar cell”  \n", + "1 “concentrated solar power”, CSP, “concentrated... \n", + "2 “solar heating” \n", + "3 “solar dryer” \n", + "4 “solar water pump” \n", + "\n", + " source priority \n", + "0 https://www.ctc-n.org/technologies/solar-pv 1 \n", + "1 https://setis.ec.europa.eu/technologies/concen... 1 \n", + "2 https://www.ctc-n.org/technologies/solar-heating 1 \n", + "3 https://www.ctc-n.org/technologies/solar-dryer 0 \n", + "4 https://www.ctc-n.org/technologies/solar-water... 0 " + ] + }, + "metadata": {} + } + ], + "execution_count": 92, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "len(categories.technology)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 93, + "data": { + "text/plain": [ + "97" + ] + }, + "metadata": {} + } + ], + "execution_count": 93, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "categories.priority.sum()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 94, + "data": { + "text/plain": [ + "76" + ] + }, + "metadata": {} + } + ], + "execution_count": 94, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#Percentage of priority from the catalogue\n", + "100*categories.priority.sum()/len(categories.technology)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 95, + "data": { + "text/plain": [ + "78.35051546391753" + ] + }, + "metadata": {} + } + ], + "execution_count": 95, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "### Supplied technologies" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "technology_table = pd.DataFrame()\n", + "# unnest the messy matches\n", + "list_technologies = data_inner['matches_technology_det']\n", + "number_matches, cleaned_lists = [], []\n", + "for l in list_technologies:\n", + " new_l = l.replace(\"[\",\"\").replace(\"]\",\"\").replace(\" '\",\"\").replace(\"'\",\"\").replace(\"'\",\"\").split(',')\n", + " cleaned_lists.append(new_l)\n", + " number_matches.append(len(new_l))\n", + "technology_table['technology_terms'] = [y for x in cleaned_lists for y in x] \n", + "#len(number_matches) == len(data_inner.id)\n", + "#create a list with project id that equals the terms\n", + "ids = [[i]*j for i,j in zip(inner_table.id, number_matches)] \n", + "technology_table['id'] = [y for x in ids for y in x]" + ], + "outputs": [], + "execution_count": 99, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "technology_table.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 101, + "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", + "
technology_termsid
0forest management835398
1forest management835541
2bioplastic812602
3DSM811592
4waste management847641
\n", + "
" + ], + "text/plain": [ + " technology_terms id\n", + "0 forest management 835398\n", + "1 forest management 835541\n", + "2 bioplastic 812602\n", + "3 DSM 811592\n", + "4 waste management 847641" + ] + }, + "metadata": {} + } + ], + "execution_count": 101, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "categories.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 102, + "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", + "
sectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0EnergySolar energy sourcessolar PVAlso “solar photovoltaic”; technology of using...photovoltaic, PV, “solar cell”https://www.ctc-n.org/technologies/solar-pv1
1EnergySolar energy sourcesconcentrated solar power (CSP)Technology of producing electricity by concent...“concentrated solar power”, CSP, “concentrated...https://setis.ec.europa.eu/technologies/concen...1
2EnergySolar energy sourcessolar heatingTechnology of capturing the sun's radiation an...“solar heating”https://www.ctc-n.org/technologies/solar-heating1
3EnergySolar energy sourcessolar dryerTechnology of drying substances, especially fo...“solar dryer”https://www.ctc-n.org/technologies/solar-dryer0
4EnergySolar energy sourcessolar water pumpTechnology of powering electrical water pumps ...“solar water pump”https://www.ctc-n.org/technologies/solar-water...0
\n", + "
" + ], + "text/plain": [ + " sector technology_group technology \\\n", + "0 Energy Solar energy sources solar PV \n", + "1 Energy Solar energy sources concentrated solar power (CSP) \n", + "2 Energy Solar energy sources solar heating \n", + "3 Energy Solar energy sources solar dryer \n", + "4 Energy Solar energy sources solar water pump \n", + "\n", + " description \\\n", + "0 Also “solar photovoltaic”; technology of using... \n", + "1 Technology of producing electricity by concent... \n", + "2 Technology of capturing the sun's radiation an... \n", + "3 Technology of drying substances, especially fo... \n", + "4 Technology of powering electrical water pumps ... \n", + "\n", + " technology_term \\\n", + "0 photovoltaic, PV, “solar cell”  \n", + "1 “concentrated solar power”, CSP, “concentrated... \n", + "2 “solar heating” \n", + "3 “solar dryer” \n", + "4 “solar water pump” \n", + "\n", + " source priority \n", + "0 https://www.ctc-n.org/technologies/solar-pv 1 \n", + "1 https://setis.ec.europa.eu/technologies/concen... 1 \n", + "2 https://www.ctc-n.org/technologies/solar-heating 1 \n", + "3 https://www.ctc-n.org/technologies/solar-dryer 0 \n", + "4 https://www.ctc-n.org/technologies/solar-water... 0 " + ] + }, + "metadata": {} + } + ], + "execution_count": 102, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "matrix = []\n", + "for term in categories['technology_term']:\n", + " row = [x.strip() for x in term.split(',')]\n", + " row = [i.replace('“', '').replace('”', '') for i in row]\n", + " matrix.append(row)" + ], + "outputs": [], + "execution_count": 103, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "tech_dict = {key: value for (key, value) in zip(categories.technology, matrix)}" + ], + "outputs": [], + "execution_count": 104, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "technology_table['category'] = None" + ], + "outputs": [], + "execution_count": 105, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "for i in technology_table.index:\n", + " for k,v in tech_dict.items():\n", + " for j in v:\n", + " if technology_table.loc[i,'technology_terms'] == j:\n", + " technology_table.loc[i, 'category'] = k" + ], + "outputs": [], + "execution_count": 106, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "technology_table.sort_values('id').head() #repeated ids" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 107, + "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", + "
technology_termsidcategory
1405recycling633192recycling
1404efficient lighting633192low GHG lighting
845recycling633962recycling
844bioplastic633962bioplastics
935soil management635201soil management
\n", + "
" + ], + "text/plain": [ + " technology_terms id category\n", + "1405 recycling 633192 recycling\n", + "1404 efficient lighting 633192 low GHG lighting\n", + "845 recycling 633962 recycling\n", + "844 bioplastic 633962 bioplastics\n", + "935 soil management 635201 soil management" + ] + }, + "metadata": {} + } + ], + "execution_count": 107, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "technology_table.groupby('category').count()['id'].sort_values(ascending=False)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 108, + "data": { + "text/plain": [ + "category\n", + "low GHG steel 385\n", + "solar PV 302\n", + "recycling 211\n", + "energy storage 190\n", + "fuel cell 79\n", + "waste management 77\n", + "geothermal 70\n", + "carbon capture and storage 69\n", + "concentrated solar power (CSP) 68\n", + "grid management 67\n", + "combined heat and power (CHP) 58\n", + "electric vehicle design 43\n", + "biofuel 42\n", + "district heating and/or cooling 40\n", + "traffic management 39\n", + "heat pumps 37\n", + "offshore wind 37\n", + "wave energy 29\n", + "nanomaterial 28\n", + "forest management 27\n", + "biorefinery design 25\n", + "thermal storage 25\n", + "demand-side energy management 24\n", + "low GHG data centers 24\n", + "tidal energy 20\n", + "biopolymer 17\n", + "bioplastics 14\n", + "micro-grids 13\n", + "liquefied natural gas (LNG) 12\n", + "soil management 10\n", + " ... \n", + "afforestation 8\n", + "solar heating 8\n", + "combined cycle power plant 6\n", + "biochar 6\n", + "osmotic 5\n", + "energy-from-waste 5\n", + "nutrient management 5\n", + "compressed/converted natural gas 4\n", + "onshore wind 4\n", + "regenerative braking 4\n", + "ocean thermal energy conversion (OTEC) 4\n", + "compressed air energy storage (CAES) 3\n", + "off-grid systems 3\n", + "livestock management 3\n", + "nuclear fusion 3\n", + "agroforestry 3\n", + "updraft 2\n", + "non-motorised transport design 2\n", + "passive house 2\n", + "electron acceptor 2\n", + "reduced need for travel 1\n", + "waste heat reuse 1\n", + "inert anode 1\n", + "improved durability 1\n", + "downdraft 1\n", + "nuclear fission 1\n", + "new sources of protein 1\n", + "manure management 1\n", + "low GHG public transport / rapid transit design 1\n", + "direct seeding 1\n", + "Name: id, Length: 62, dtype: int64" + ] + }, + "metadata": {} + } + ], + "execution_count": 108, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#put the money and the rest of features\n", + "cordish2020[['id','ecMaxContribution']].head() #'acronym','title','startDate','objective'," + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 109, + "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", + "
idecMaxContribution
083775019630411.18
18181846004252.50
28151474991323.75
38176425995904.00
48257314017817.50
\n", + "
" + ], + "text/plain": [ + " id ecMaxContribution\n", + "0 837750 19630411.18\n", + "1 818184 6004252.50\n", + "2 815147 4991323.75\n", + "3 817642 5995904.00\n", + "4 825731 4017817.50" + ] + }, + "metadata": {} + } + ], + "execution_count": 109, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cost_per_category = pd.merge(technology_table, cordish2020[['id','ecMaxContribution']], how='left', on='id')\n", + "cost_per_category = cost_per_category.groupby('category').agg(\n", + " ['mean','sum'])['ecMaxContribution'].sort_values(['sum','mean'], ascending=False).reset_index()\n", + "cost_per_category = pd.merge(cost_per_category, \n", + " categories[['sector','technology','priority']], how='left',\n", + " left_on='category', right_on='technology')\n", + "cost_per_category = cost_per_category[['sector','technology','priority','mean','sum']]" + ], + "outputs": [], + "execution_count": 110, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cost_per_category.head(10)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 111, + "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", + "
sectortechnologyprioritymeansum
0Industrylow GHG steel12.351494e+069.053252e+08
1Energysolar PV11.950508e+065.890533e+08
2Human settlementsrecycling12.518069e+065.313126e+08
3Energyenergy storage12.533548e+064.813741e+08
4Energygeothermal14.934920e+063.454444e+08
5Transportfuel cell13.971767e+063.137696e+08
6Energygrid management14.049332e+062.713052e+08
7Energyconcentrated solar power (CSP)13.295332e+062.240826e+08
8Industrycarbon capture and storage13.016954e+062.081698e+08
9Human settlementswaste management12.354403e+061.812890e+08
\n", + "
" + ], + "text/plain": [ + " sector technology priority mean \\\n", + "0 Industry low GHG steel 1 2.351494e+06 \n", + "1 Energy solar PV 1 1.950508e+06 \n", + "2 Human settlements recycling 1 2.518069e+06 \n", + "3 Energy energy storage 1 2.533548e+06 \n", + "4 Energy geothermal 1 4.934920e+06 \n", + "5 Transport fuel cell 1 3.971767e+06 \n", + "6 Energy grid management 1 4.049332e+06 \n", + "7 Energy concentrated solar power (CSP) 1 3.295332e+06 \n", + "8 Industry carbon capture and storage 1 3.016954e+06 \n", + "9 Human settlements waste management 1 2.354403e+06 \n", + "\n", + " sum \n", + "0 9.053252e+08 \n", + "1 5.890533e+08 \n", + "2 5.313126e+08 \n", + "3 4.813741e+08 \n", + "4 3.454444e+08 \n", + "5 3.137696e+08 \n", + "6 2.713052e+08 \n", + "7 2.240826e+08 \n", + "8 2.081698e+08 \n", + "9 1.812890e+08 " + ] + }, + "metadata": {} + } + ], + "execution_count": 111, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "def grouping(cost_per_category, category, agg):\n", + " agg_df = cost_per_category.groupby(category).sum()[str(agg)].reset_index()\n", + " agg_df['percentage'] = agg_df[str(agg)]*100/agg_df[str(agg)].sum()\n", + " agg_df = agg_df.sort_values('percentage', ascending=False)\n", + " return agg_df " + ], + "outputs": [], + "execution_count": 112, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "tech_sum = grouping(cost_per_category, ['priority','technology'], 'sum') \n", + "sector_sum = grouping(cost_per_category, 'sector', 'sum') \n", + "priority_sum = grouping(cost_per_category, 'priority', 'sum') " + ], + "outputs": [], + "execution_count": 113, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "tech_sum#.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 114, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
prioritytechnologysumpercentage
361low GHG steel9.053252e+0814.955627
531solar PV5.890533e+089.730936
501recycling5.313126e+088.777082
221energy storage4.813741e+087.952116
271geothermal3.454444e+085.706610
251fuel cell3.137696e+085.183354
281grid management2.713052e+084.481859
181concentrated solar power (CSP)2.240826e+083.701759
131carbon capture and storage2.081698e+083.438886
601waste management1.812890e+082.994826
201district heating and/or cooling1.796751e+082.968163
571traffic management1.739252e+082.873178
151combined heat and power (CHP)1.710958e+082.826438
121biorefinery design1.488818e+082.459471
471offshore wind1.397011e+082.307808
551thermal storage1.042644e+081.722408
291heat pumps1.022275e+081.688759
91biofuel1.016568e+081.679331
191demand-side energy management8.734684e+071.442936
561tidal energy8.708085e+071.438542
211electric vehicle design8.568994e+071.415565
391nanomaterial6.605166e+071.091148
611wave energy5.983902e+070.988518
30low GHG data centers5.005764e+070.826933
381micro-grids4.002983e+070.661278
81biochar3.684225e+070.608620
241forest management3.622698e+070.598456
321liquefied natural gas (LNG)2.576755e+070.425670
261gas turbine2.552590e+070.421678
50soil management2.518647e+070.416071
...............
341low GHG lighting2.268657e+070.374773
141combined cycle power plant2.117825e+070.349857
481osmotic2.104861e+070.347715
441nutrient management2.047841e+070.338296
541solar heating1.541945e+070.254723
451ocean thermal energy conversion (OTEC)1.103012e+070.182213
581updraft1.097947e+070.181377
231energy-from-waste9.231716e+060.152504
161compressed air energy storage (CAES)9.101826e+060.150359
521regenerative braking8.978962e+060.148329
331livestock management8.962547e+060.148058
351low GHG public transport / rapid transit design7.996591e+060.132101
71agroforestry6.371010e+060.105247
311inert anode5.232146e+060.086433
61afforestation5.114686e+060.084493
431nuclear fusion3.960661e+060.065429
411non-motorised transport design3.831696e+060.063298
491passive house3.770893e+060.062294
461off-grid systems2.843348e+060.046971
591waste heat reuse2.299104e+060.037980
401new sources of protein2.005463e+060.033129
171compressed/converted natural gas1.886744e+060.031168
511reduced need for travel1.217982e+060.020121
421nuclear fission5.000000e+050.008260
20electron acceptor4.111080e+050.006791
40onshore wind2.000000e+050.003304
371manure management5.000000e+040.000826
10downdraft5.000000e+040.000826
301improved durability5.000000e+040.000826
00direct seeding5.000000e+040.000826
\n", + "

62 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " priority technology sum \\\n", + "36 1 low GHG steel 9.053252e+08 \n", + "53 1 solar PV 5.890533e+08 \n", + "50 1 recycling 5.313126e+08 \n", + "22 1 energy storage 4.813741e+08 \n", + "27 1 geothermal 3.454444e+08 \n", + "25 1 fuel cell 3.137696e+08 \n", + "28 1 grid management 2.713052e+08 \n", + "18 1 concentrated solar power (CSP) 2.240826e+08 \n", + "13 1 carbon capture and storage 2.081698e+08 \n", + "60 1 waste management 1.812890e+08 \n", + "20 1 district heating and/or cooling 1.796751e+08 \n", + "57 1 traffic management 1.739252e+08 \n", + "15 1 combined heat and power (CHP) 1.710958e+08 \n", + "12 1 biorefinery design 1.488818e+08 \n", + "47 1 offshore wind 1.397011e+08 \n", + "55 1 thermal storage 1.042644e+08 \n", + "29 1 heat pumps 1.022275e+08 \n", + "9 1 biofuel 1.016568e+08 \n", + "19 1 demand-side energy management 8.734684e+07 \n", + "56 1 tidal energy 8.708085e+07 \n", + "21 1 electric vehicle design 8.568994e+07 \n", + "39 1 nanomaterial 6.605166e+07 \n", + "61 1 wave energy 5.983902e+07 \n", + "3 0 low GHG data centers 5.005764e+07 \n", + "38 1 micro-grids 4.002983e+07 \n", + "8 1 biochar 3.684225e+07 \n", + "24 1 forest management 3.622698e+07 \n", + "32 1 liquefied natural gas (LNG) 2.576755e+07 \n", + "26 1 gas turbine 2.552590e+07 \n", + "5 0 soil management 2.518647e+07 \n", + ".. ... ... ... \n", + "34 1 low GHG lighting 2.268657e+07 \n", + "14 1 combined cycle power plant 2.117825e+07 \n", + "48 1 osmotic 2.104861e+07 \n", + "44 1 nutrient management 2.047841e+07 \n", + "54 1 solar heating 1.541945e+07 \n", + "45 1 ocean thermal energy conversion (OTEC) 1.103012e+07 \n", + "58 1 updraft 1.097947e+07 \n", + "23 1 energy-from-waste 9.231716e+06 \n", + "16 1 compressed air energy storage (CAES) 9.101826e+06 \n", + "52 1 regenerative braking 8.978962e+06 \n", + "33 1 livestock management 8.962547e+06 \n", + "35 1 low GHG public transport / rapid transit design 7.996591e+06 \n", + "7 1 agroforestry 6.371010e+06 \n", + "31 1 inert anode 5.232146e+06 \n", + "6 1 afforestation 5.114686e+06 \n", + "43 1 nuclear fusion 3.960661e+06 \n", + "41 1 non-motorised transport design 3.831696e+06 \n", + "49 1 passive house 3.770893e+06 \n", + "46 1 off-grid systems 2.843348e+06 \n", + "59 1 waste heat reuse 2.299104e+06 \n", + "40 1 new sources of protein 2.005463e+06 \n", + "17 1 compressed/converted natural gas 1.886744e+06 \n", + "51 1 reduced need for travel 1.217982e+06 \n", + "42 1 nuclear fission 5.000000e+05 \n", + "2 0 electron acceptor 4.111080e+05 \n", + "4 0 onshore wind 2.000000e+05 \n", + "37 1 manure management 5.000000e+04 \n", + "1 0 downdraft 5.000000e+04 \n", + "30 1 improved durability 5.000000e+04 \n", + "0 0 direct seeding 5.000000e+04 \n", + "\n", + " percentage \n", + "36 14.955627 \n", + "53 9.730936 \n", + "50 8.777082 \n", + "22 7.952116 \n", + "27 5.706610 \n", + "25 5.183354 \n", + "28 4.481859 \n", + "18 3.701759 \n", + "13 3.438886 \n", + "60 2.994826 \n", + "20 2.968163 \n", + "57 2.873178 \n", + "15 2.826438 \n", + "12 2.459471 \n", + "47 2.307808 \n", + "55 1.722408 \n", + "29 1.688759 \n", + "9 1.679331 \n", + "19 1.442936 \n", + "56 1.438542 \n", + "21 1.415565 \n", + "39 1.091148 \n", + "61 0.988518 \n", + "3 0.826933 \n", + "38 0.661278 \n", + "8 0.608620 \n", + "24 0.598456 \n", + "32 0.425670 \n", + "26 0.421678 \n", + "5 0.416071 \n", + ".. ... \n", + "34 0.374773 \n", + "14 0.349857 \n", + "48 0.347715 \n", + "44 0.338296 \n", + "54 0.254723 \n", + "45 0.182213 \n", + "58 0.181377 \n", + "23 0.152504 \n", + "16 0.150359 \n", + "52 0.148329 \n", + "33 0.148058 \n", + "35 0.132101 \n", + "7 0.105247 \n", + "31 0.086433 \n", + "6 0.084493 \n", + "43 0.065429 \n", + "41 0.063298 \n", + "49 0.062294 \n", + "46 0.046971 \n", + "59 0.037980 \n", + "40 0.033129 \n", + "17 0.031168 \n", + "51 0.020121 \n", + "42 0.008260 \n", + "2 0.006791 \n", + "4 0.003304 \n", + "37 0.000826 \n", + "1 0.000826 \n", + "30 0.000826 \n", + "0 0.000826 \n", + "\n", + "[62 rows x 4 columns]" + ] + }, + "metadata": {} + } + ], + "execution_count": 114, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "sector_sum.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 32, + "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", + "
sectorsumpercentage
2Energy2.395613e+0939.574619
4Industry1.469098e+0924.268933
3Human settlements1.037377e+0917.137079
5Transport7.247211e+0811.972115
1Buildings2.849001e+084.706441
\n", + "
" + ], + "text/plain": [ + " sector sum percentage\n", + "2 Energy 2.395613e+09 39.574619\n", + "4 Industry 1.469098e+09 24.268933\n", + "3 Human settlements 1.037377e+09 17.137079\n", + "5 Transport 7.247211e+08 11.972115\n", + "1 Buildings 2.849001e+08 4.706441" + ] + }, + "metadata": {} + } + ], + "execution_count": 32, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "priority_sum.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 33, + "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", + "
prioritysumpercentage
115.977453e+0998.745249
007.595522e+071.254751
\n", + "
" + ], + "text/plain": [ + " priority sum percentage\n", + "1 1 5.977453e+09 98.745249\n", + "0 0 7.595522e+07 1.254751" + ] + }, + "metadata": {} + } + ], + "execution_count": 33, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "categories.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 34, + "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", + "
sectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0EnergySolar energy sourcessolar PVAlso “solar photovoltaic”; technology of using...photovoltaic, PV, “solar cell”https://www.ctc-n.org/technologies/solar-pv1
1EnergySolar energy sourcesconcentrated solar power (CSP)Technology of producing electricity by concent...“concentrated solar power”, CSP, “concentrated...https://setis.ec.europa.eu/technologies/concen...1
2EnergySolar energy sourcessolar heatingTechnology of capturing the sun's radiation an...“solar heating”https://www.ctc-n.org/technologies/solar-heating1
3EnergySolar energy sourcessolar dryerTechnology of drying substances, especially fo...“solar dryer”https://www.ctc-n.org/technologies/solar-dryer0
4EnergySolar energy sourcessolar water pumpTechnology of powering electrical water pumps ...“solar water pump”https://www.ctc-n.org/technologies/solar-water...0
\n", + "
" + ], + "text/plain": [ + " sector technology_group technology \\\n", + "0 Energy Solar energy sources solar PV \n", + "1 Energy Solar energy sources concentrated solar power (CSP) \n", + "2 Energy Solar energy sources solar heating \n", + "3 Energy Solar energy sources solar dryer \n", + "4 Energy Solar energy sources solar water pump \n", + "\n", + " description \\\n", + "0 Also “solar photovoltaic”; technology of using... \n", + "1 Technology of producing electricity by concent... \n", + "2 Technology of capturing the sun's radiation an... \n", + "3 Technology of drying substances, especially fo... \n", + "4 Technology of powering electrical water pumps ... \n", + "\n", + " technology_term \\\n", + "0 photovoltaic, PV, “solar cell”  \n", + "1 “concentrated solar power”, CSP, “concentrated... \n", + "2 “solar heating” \n", + "3 “solar dryer” \n", + "4 “solar water pump” \n", + "\n", + " source priority \n", + "0 https://www.ctc-n.org/technologies/solar-pv 1 \n", + "1 https://setis.ec.europa.eu/technologies/concen... 1 \n", + "2 https://www.ctc-n.org/technologies/solar-heating 1 \n", + "3 https://www.ctc-n.org/technologies/solar-dryer 0 \n", + "4 https://www.ctc-n.org/technologies/solar-water... 0 " + ] + }, + "metadata": {} + } + ], + "execution_count": 34, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "extended_categories = pd.merge(technology_table, categories, \n", + " how = 'left', left_on = 'category', right_on = 'technology')" + ], + "outputs": [], + "execution_count": 35, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "extended_categories.groupby('priority').count()['id']" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 36, + "data": { + "text/plain": [ + "priority\n", + "0.0 42\n", + "1.0 2150\n", + "Name: id, dtype: int64" + ] + }, + "metadata": {} + } + ], + "execution_count": 36, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#categories v1\n", + "1114/(1085+1114)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 37, + "data": { + "text/plain": [ + "0.506593906321055" + ] + }, + "metadata": {} + } + ], + "execution_count": 37, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#categories v2\n", + "2150/(42+2150)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 38, + "data": { + "text/plain": [ + "0.9808394160583942" + ] + }, + "metadata": {} + } + ], + "execution_count": 38, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "what about the money" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#extended_categories.to_csv('../data/extended_categories_v2.csv')" + ], + "outputs": [], + "execution_count": 64, + "metadata": {} + }, + { + "cell_type": "code", + "source": [], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "extended_categories.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 67, + "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", + "
technology_termsidcategorysectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0forest management835398forest managementAgricultureForest protectionforest managementTechnology of increasing carbon stocks of stan...“forest management”, “management of forest”https://www.ctc-n.org/technologies/forest-mana...1.0
1forest management835541forest managementAgricultureForest protectionforest managementTechnology of increasing carbon stocks of stan...“forest management”, “management of forest”https://www.ctc-n.org/technologies/forest-mana...1.0
2bioplastic812602bioplasticsIndustryUse of innovative materialsbioplasticsTechnology of using renewable biomass material...bioplastichttps://www.ctc-n.org/technologies/bioplastics1.0
3DSM811592demand-side energy managementBuildingsDecreased energy consumption design or practicesdemand-side energy managementTechnology inside buildings that help ensure t...“demand-side energy management”, “demand-side ...https://www.ctc-n.org/technologies/energy-mana...1.0
4waste management847641waste managementHuman settlementsWaste managementwaste managementTechnology of maximising efficiency of resourc...“waste management”, “management of waste”https://www.ctc-n.org/technologies/integrated-...1.0
\n", + "
" + ], + "text/plain": [ + " technology_terms id category \\\n", + "0 forest management 835398 forest management \n", + "1 forest management 835541 forest management \n", + "2 bioplastic 812602 bioplastics \n", + "3 DSM 811592 demand-side energy management \n", + "4 waste management 847641 waste management \n", + "\n", + " sector technology_group \\\n", + "0 Agriculture Forest protection \n", + "1 Agriculture Forest protection \n", + "2 Industry Use of innovative materials \n", + "3 Buildings Decreased energy consumption design or practices \n", + "4 Human settlements Waste management \n", + "\n", + " technology \\\n", + "0 forest management \n", + "1 forest management \n", + "2 bioplastics \n", + "3 demand-side energy management \n", + "4 waste management \n", + "\n", + " description \\\n", + "0 Technology of increasing carbon stocks of stan... \n", + "1 Technology of increasing carbon stocks of stan... \n", + "2 Technology of using renewable biomass material... \n", + "3 Technology inside buildings that help ensure t... \n", + "4 Technology of maximising efficiency of resourc... \n", + "\n", + " technology_term \\\n", + "0 “forest management”, “management of forest” \n", + "1 “forest management”, “management of forest” \n", + "2 bioplastic \n", + "3 “demand-side energy management”, “demand-side ... \n", + "4 “waste management”, “management of waste” \n", + "\n", + " source priority \n", + "0 https://www.ctc-n.org/technologies/forest-mana... 1.0 \n", + "1 https://www.ctc-n.org/technologies/forest-mana... 1.0 \n", + "2 https://www.ctc-n.org/technologies/bioplastics 1.0 \n", + "3 https://www.ctc-n.org/technologies/energy-mana... 1.0 \n", + "4 https://www.ctc-n.org/technologies/integrated-... 1.0 " + ] + }, + "metadata": {} + } + ], + "execution_count": 67, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "categories_raw_minus_categories_extended = pd.merge(categories[['sector','technology_group','technology']], extended_categories, how='left', on='technology')" + ], + "outputs": [], + "execution_count": 70, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "len(categories_raw_minus_categories_extended)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 76, + "data": { + "text/plain": [ + "2227" + ] + }, + "metadata": {} + } + ], + "execution_count": 76, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "not_invested = categories_raw_minus_categories_extended[categories_raw_minus_categories_extended.id.isnull()]\\\n", + " [['sector_x','technology_group_x','technology']]\\\n", + " .reset_index(drop=True)\\\n", + " .rename(columns={'sector_x':'sector','technology_group_x':'technology_group'})\\\n", + " .merge(categories[['technology','priority']], how='left',on='technology')\\\n", + " .drop_duplicates()" + ], + "outputs": [], + "execution_count": 133, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "not_invested.to_csv('../data/not_invested.csv',index=False)" + ], + "outputs": [], + "execution_count": 141, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "not_invested.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 140, + "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", + "
sectortechnology_grouptechnologypriority
0EnergySolar energy sourcessolar dryer0
1EnergySolar energy sourcessolar water pump0
2EnergySystem innovationlow GHG transmission1
11TransportFuelelectric battery1
12TransportVehicle designlow GHG aircraft design1
\n", + "
" + ], + "text/plain": [ + " sector technology_group technology priority\n", + "0 Energy Solar energy sources solar dryer 0\n", + "1 Energy Solar energy sources solar water pump 0\n", + "2 Energy System innovation low GHG transmission 1\n", + "11 Transport Fuel electric battery 1\n", + "12 Transport Vehicle design low GHG aircraft design 1" + ] + }, + "metadata": {} + } + ], + "execution_count": 140, + "metadata": {} + }, + { + "cell_type": "code", + "source": [], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "----\n", + "## Join calculation (parelell to tableau)" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cordis_data = pd.merge(extended_categories, inner_table, how='inner', on='id')" + ], + "outputs": [], + "execution_count": 40, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cordis_data.columns" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 41, + "data": { + "text/plain": [ + "Index(['technology_terms', 'id', 'category', 'sector', 'technology_group',\n", + " 'technology', 'description', 'technology_term', 'source', 'priority',\n", + " 'rcn', 'acronym', 'status', 'programme', 'topics', 'frameworkProgramme',\n", + " 'title', 'startDate', 'endDate', 'projectUrl', 'objective', 'totalCost',\n", + " 'ecMaxContribution', 'call', 'fundingScheme', 'coordinator',\n", + " 'coordinatorCountry', 'participants', 'participantCountries',\n", + " 'subjects'],\n", + " dtype='object')" + ] + }, + "metadata": {} + } + ], + "execution_count": 41, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "#### CleanTech Projects" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "len(cordis_data.id.unique())" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 42, + "data": { + "text/plain": [ + "1534" + ] + }, + "metadata": {} + } + ], + "execution_count": 42, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "priority_table = cordis_data.groupby('id').mean()['priority'].reset_index()" + ], + "outputs": [], + "execution_count": 45, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "priority_summary = priority_table.groupby('priority').count().reset_index()\n", + "priority_summary" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 52, + "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", + "
priorityid
00.00000036
10.5000004
20.6666671
31.0000001487
\n", + "
" + ], + "text/plain": [ + " priority id\n", + "0 0.000000 36\n", + "1 0.500000 4\n", + "2 0.666667 1\n", + "3 1.000000 1487" + ] + }, + "metadata": {} + } + ], + "execution_count": 52, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This is because you might have a project with more than one technology and those technologies might be priority or not, so we take all the 1 as priority 0 otherwise" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "priority = priority_summary.loc[3,'id']\n", + "total = len(cordis_data.id.unique())\n", + "\n", + "print('Priority projects: {}, {}'.format(priority, priority/total*100))\n", + "print('Non-priority projects: {}, {}'.format(total-priority, (1-(priority/total))*100))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Priority projects: 1487, 96.9361147327249\n", + "Non-priority projects: 47, 3.0638852672751016\n" + ] + } + ], + "execution_count": 146, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "priority_summary.id.sum()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 59, + "data": { + "text/plain": [ + "1528" + ] + }, + "metadata": {} + } + ], + "execution_count": 59, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "#### EU contribution" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "priority_conrtibution_summary = pd.merge(priority_table, cordis_data[['id','ecMaxContribution']], how='left', on='id')\n", + "priority_conrtibution_summary = priority_conrtibution_summary.groupby('priority').sum()['ecMaxContribution'].reset_index()\n", + "priority_conrtibution_summary" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 168, + "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", + "
priorityecMaxContribution
00.0000007.570522e+07
10.5000004.000000e+05
20.6666671.500000e+05
31.0000005.978837e+09
\n", + "
" + ], + "text/plain": [ + " priority ecMaxContribution\n", + "0 0.000000 7.570522e+07\n", + "1 0.500000 4.000000e+05\n", + "2 0.666667 1.500000e+05\n", + "3 1.000000 5.978837e+09" + ] + }, + "metadata": {} + } + ], + "execution_count": 168, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This is because you might have a project with more than one technology and those technologies might be priority or not, so we take all the 1 as priority 0 otherwise" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "priorityM = priority_conrtibution_summary.loc[3,'ecMaxContribution']\n", + "totalM = cordis_data.ecMaxContribution.sum()\n", + "\n", + "print('Priority contribution: {}, {}'.format(priorityM/1000000, priorityM/totalM*100))\n", + "print('Non-priority contribution: {}, {}'.format((totalM-priorityM)/1000000, (1-(priorityM/totalM))*100))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Priority contribution: 5978.83690700002, 98.21835140837607\n", + "Non-priority contribution: 108.45413511998082, 1.78164859162393\n" + ] + } + ], + "execution_count": 171, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "totalM" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 170, + "data": { + "text/plain": [ + "6087291042.120001" + ] + }, + "metadata": {} + } + ], + "execution_count": 170, + "metadata": {} } - ], - "source": [ - "priorityM = priority_conrtibution_summary.loc[3,'ecMaxContribution']\n", - "totalM = cordis_data.ecMaxContribution.sum()\n", - "\n", - "print('Priority contribution: {}, {}'.format(priorityM/1000000, priorityM/totalM*100))\n", - "print('Non-priority contribution: {}, {}'.format((totalM-priorityM)/1000000, (1-(priorityM/totalM))*100))" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "6087291042.120001" - ] - }, - "execution_count": 170, - "metadata": {}, - "output_type": "execute_result" + ], + "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.7.3" + }, + "nteract": { + "version": "0.15.0" } - ], - "source": [ - "totalM" - ] - } - ], - "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.7.3" }, - "nteract": { - "version": "0.15.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/notebooks/Clean-tech-probabilistic.ipynb b/notebooks/Clean-tech-probabilistic.ipynb index 8747f39..150eab8 100644 --- a/notebooks/Clean-tech-probabilistic.ipynb +++ b/notebooks/Clean-tech-probabilistic.ipynb @@ -1,1451 +1,1454 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Clean Technologies - Probabilistic" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import warnings\n", - "warnings.filterwarnings(\"ignore\")\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ + "cells": [ { - "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", - "
sectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0EnergySolar energy sourcessolar PVAlso “solar photovoltaic”; technology of using...photovoltaic, PV, “solar cell”https://www.ctc-n.org/technologies/solar-pv1
1EnergySolar energy sourcesconcentrated solar power (CSP)Technology of producing electricity by concent...“concentrated solar power”, CSP, “concentrated...https://setis.ec.europa.eu/technologies/concen...1
2EnergySolar energy sourcessolar heatingTechnology of capturing the sun's radiation an...“solar heating”https://www.ctc-n.org/technologies/solar-heating0
3EnergySolar energy sourcessolar dryerTechnology of drying substances, especially fo...“solar dryer”https://www.ctc-n.org/technologies/solar-dryer0
4EnergySolar energy sourcessolar water pumpTechnology of powering electrical water pumps ...“solar water pump”https://www.ctc-n.org/technologies/solar-water...0
\n", - "
" + "cell_type": "markdown", + "source": [ + "## Clean Technologies - Probabilistic" ], - "text/plain": [ - " sector technology_group technology \\\n", - "0 Energy Solar energy sources solar PV \n", - "1 Energy Solar energy sources concentrated solar power (CSP) \n", - "2 Energy Solar energy sources solar heating \n", - "3 Energy Solar energy sources solar dryer \n", - "4 Energy Solar energy sources solar water pump \n", - "\n", - " description \\\n", - "0 Also “solar photovoltaic”; technology of using... \n", - "1 Technology of producing electricity by concent... \n", - "2 Technology of capturing the sun's radiation an... \n", - "3 Technology of drying substances, especially fo... \n", - "4 Technology of powering electrical water pumps ... \n", - "\n", - " technology_term \\\n", - "0 photovoltaic, PV, “solar cell”  \n", - "1 “concentrated solar power”, CSP, “concentrated... \n", - "2 “solar heating” \n", - "3 “solar dryer” \n", - "4 “solar water pump” \n", - "\n", - " source priority \n", - "0 https://www.ctc-n.org/technologies/solar-pv 1 \n", - "1 https://setis.ec.europa.eu/technologies/concen... 1 \n", - "2 https://www.ctc-n.org/technologies/solar-heating 0 \n", - "3 https://www.ctc-n.org/technologies/solar-dryer 0 \n", - "4 https://www.ctc-n.org/technologies/solar-water... 0 " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "categories = pd.read_excel('../data/categories.xls')\n", - "categories = categories.fillna(method='ffill')\n", - "categories.columns = ['sector','technology_group','technology','description','technology_term','source','priority']\n", - "categories.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "matrix = []\n", - "for term in categories['technology_term']:\n", - " row = [x.strip() for x in term.split(',')]\n", - " row = [i.replace('“', '').replace('”', '') for i in row]\n", - " matrix.append(row)\n", - "categories['technology_term'] = matrix" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "#https://data.europa.eu/euodp/en/data/dataset/cordisH2020projects" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "cordish2020 = pd.read_excel('../data/cordis-h2020projects.xlsx')\n", - "#cordish2020 = pd.read_csv('../data/cordis-h2020projects.csv', sep=\";\")" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "cordish2020['totalCost'] = [float(str(i).replace(',', '.')) for i in cordish2020['totalCost']]\n", - "cordish2020['ecMaxContribution'] = [float(str(i).replace(',', '.')) for i in cordish2020['ecMaxContribution']]\n", - "cordish2020['startDate'] = cordish2020['startDate'].map(pd.Timestamp)\n", - "cordish2020['endDate'] = cordish2020['endDate'].map(pd.Timestamp)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ + "metadata": {} + }, { - "data": { - "text/plain": [ - "Index(['rcn', 'id', 'acronym', 'status', 'programme', 'topics',\n", - " 'frameworkProgramme', 'title', 'startDate', 'endDate', 'projectUrl',\n", - " 'objective', 'totalCost', 'ecMaxContribution', 'call', 'fundingScheme',\n", - " 'coordinator', 'coordinatorCountry', 'participants',\n", - " 'participantCountries', 'subjects'],\n", - " dtype='object')" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cordish2020.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\")\n", + "%matplotlib inline" + ], + "outputs": [], + "execution_count": 1, + "metadata": {} + }, { - "data": { - "text/plain": [ - "24554" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Total of proyects\n", - "len(cordish2020)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "categories = pd.read_excel('../data/categories.xls')\n", + "categories = categories.fillna(method='ffill')\n", + "categories.columns = ['sector','technology_group','technology','description','technology_term','source','priority']\n", + "categories.head()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 4, + "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", + "
sectortechnology_grouptechnologydescriptiontechnology_termsourcepriority
0EnergySolar energy sourcessolar PVAlso “solar photovoltaic”; technology of using...photovoltaic, PV, “solar cell”https://www.ctc-n.org/technologies/solar-pv1
1EnergySolar energy sourcesconcentrated solar power (CSP)Technology of producing electricity by concent...“concentrated solar power”, CSP, “concentrated...https://setis.ec.europa.eu/technologies/concen...1
2EnergySolar energy sourcessolar heatingTechnology of capturing the sun's radiation an...“solar heating”https://www.ctc-n.org/technologies/solar-heating0
3EnergySolar energy sourcessolar dryerTechnology of drying substances, especially fo...“solar dryer”https://www.ctc-n.org/technologies/solar-dryer0
4EnergySolar energy sourcessolar water pumpTechnology of powering electrical water pumps ...“solar water pump”https://www.ctc-n.org/technologies/solar-water...0
\n", + "
" + ], + "text/plain": [ + " sector technology_group technology \\\n", + "0 Energy Solar energy sources solar PV \n", + "1 Energy Solar energy sources concentrated solar power (CSP) \n", + "2 Energy Solar energy sources solar heating \n", + "3 Energy Solar energy sources solar dryer \n", + "4 Energy Solar energy sources solar water pump \n", + "\n", + " description \\\n", + "0 Also “solar photovoltaic”; technology of using... \n", + "1 Technology of producing electricity by concent... \n", + "2 Technology of capturing the sun's radiation an... \n", + "3 Technology of drying substances, especially fo... \n", + "4 Technology of powering electrical water pumps ... \n", + "\n", + " technology_term \\\n", + "0 photovoltaic, PV, “solar cell”  \n", + "1 “concentrated solar power”, CSP, “concentrated... \n", + "2 “solar heating” \n", + "3 “solar dryer” \n", + "4 “solar water pump” \n", + "\n", + " source priority \n", + "0 https://www.ctc-n.org/technologies/solar-pv 1 \n", + "1 https://setis.ec.europa.eu/technologies/concen... 1 \n", + "2 https://www.ctc-n.org/technologies/solar-heating 0 \n", + "3 https://www.ctc-n.org/technologies/solar-dryer 0 \n", + "4 https://www.ctc-n.org/technologies/solar-water... 0 " + ] + }, + "metadata": {} + } + ], + "execution_count": 4, + "metadata": {} + }, { - "data": { - "text/plain": [ - "223" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# unique list of technology term\n", - "technology_term = [y for x in categories['technology_term'] for y in x if y != '']\n", - "len(technology_term)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "all_technology_terms = [i for i in set([*list(categories['technology_group']),*list(technology_term)])]" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "matrix = []\n", + "for term in categories['technology_term']:\n", + " row = [x.strip() for x in term.split(',')]\n", + " row = [i.replace('“', '').replace('”', '') for i in row]\n", + " matrix.append(row)\n", + "categories['technology_term'] = matrix" + ], + "outputs": [], + "execution_count": 5, + "metadata": {} + }, { - "data": { - "text/plain": [ - "235" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(all_technology_terms)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "source": [ + "---" + ], + "metadata": {} + }, { - "data": { - "text/plain": [ - "['parabolic trough',\n", - " 'carbon capture and storage',\n", - " 'biorefinery design',\n", - " 'conservation tillage',\n", - " 'meat alternative',\n", - " 'solar water pump',\n", - " 'demand side management',\n", - " 'Improved durability',\n", - " 'renewable energy',\n", - " 'Storage']" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_technology_terms[:10]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "### Syntactic probabilistic classification using spacy and fuzzywuzzy" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "import spacy\n", - "import numpy as np\n", - "from spacy import displacy\n", - "from collections import Counter\n", - "import en_core_web_sm\n", - "from fuzzywuzzy import process, fuzz\n", - "import re\n", - "nlp = en_core_web_sm.load()\n", - "import textdistance as tx\n", - "import unicodedata\n", - "from textdistance.algorithms import vector_based" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "def clean(string):\n", - " return re.sub(r'[-\\s]+', '-',\n", - " str(\n", - " re.sub(r'[^\\w\\s-]', '',\n", - " unicodedata.normalize('NFKD', string)\n", - " .strip()\n", - " )))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Objective example\n", - "\n", - "---" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "#https://data.europa.eu/euodp/en/data/dataset/cordisH2020projects" + ], + "outputs": [], + "execution_count": 6, + "metadata": {} + }, { - "data": { - "text/plain": [ - "'Offshore wind has long been identified as one of the most promising energy forms to improve the penetration of renewables in the European energy mix. Since most of offshore wind resources is available over deep waters at a considerable distance from the shore, it is inevitable that the campaign of the offshore wind exploitation would move from shallow waters to deep waters. As the conventional bottom-fixed offshore wind turbine is no longer economically viable over deep waters (>50m), the floating offshore wind turbine (FOWT) seems to be an appealing alternative to harvest the ampler deep-water wind. FOWTs are, however, threaten by the hostile deep offshore environment, which would induce unacceptable tilt motions and drastic vibrations of the floating system. The undesirable loadings on the blades, tower, floating foundations and other components, results in mechanical failures and electrical faults of FOWTs, both of which could lead to operation interruptions and cause disastrous economic losses. Overcoming the difficulties of effectiveness, robustness, integration and multi-scalability of optimal control and fault diagnosis system of the FOWTs is precisely the topic of the proposal, which would actively contribute to the implementation of the Economical Deep Offshore Wind Exploitation (EDOWE) by introducing the concept of an innovative distributed multi-scale control and monitoring system. Delft University of Technology owns top-level expertise in wind turbine/farm control and distributed multi-scale applications. Its world-leading experimental facilities provide a solid foundation for hosting a systematic study on the control and monitoring strategies of the FOWTs. Moreover, secondment at Politecnico di Milano and collaborating with our industrial partner 2B Energy on the action help developing an advanced solution to economically harvest deep offshore wind, and thus contributing to achieve the renewables consumption goal set by European Union.'" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#cordish2020.loc[13]['objective']\n", - "cordish2020.loc[9631]['objective'][]" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "cordish2020 = pd.read_excel('../data/cordis-h2020projects.xlsx')\n", + "#cordish2020 = pd.read_csv('../data/cordis-h2020projects.csv', sep=\";\")" + ], + "outputs": [], + "execution_count": 7, + "metadata": {} + }, { - "data": { - "text/plain": [ - "['Offshore wind',\n", - " 'the most promising energy forms',\n", - " 'the penetration',\n", - " 'renewables',\n", - " 'the European energy mix',\n", - " 'offshore wind resources',\n", - " 'deep waters',\n", - " 'a considerable distance',\n", - " 'the shore',\n", - " 'it',\n", - " 'the campaign',\n", - " 'the offshore wind exploitation',\n", - " 'shallow waters',\n", - " 'deep waters',\n", - " 'the conventional bottom-fixed offshore wind turbine',\n", - " 'deep waters',\n", - " 'the floating offshore wind turbine',\n", - " 'FOWT',\n", - " 'an appealing alternative',\n", - " 'the ampler deep-water wind']" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "text = cordish2020['objective'][9631]\n", - "doc = nlp(text)\n", - "docs = list(map(str, doc.noun_chunks))\n", - "docs[:20]" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], - "source": [ - "#find_best_matching_tech(technologies, docs)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [], - "source": [ - "#technologies" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Get all the synonyms from the short descriptions**" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "technologies = all_technology_terms" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "cordish2020['totalCost'] = [float(str(i).replace(',', '.')) for i in cordish2020['totalCost']]\n", + "cordish2020['ecMaxContribution'] = [float(str(i).replace(',', '.')) for i in cordish2020['ecMaxContribution']]\n", + "cordish2020['startDate'] = cordish2020['startDate'].map(pd.Timestamp)\n", + "cordish2020['endDate'] = cordish2020['endDate'].map(pd.Timestamp)" + ], + "outputs": [], + "execution_count": 8, + "metadata": {} + }, { - "data": { - "text/plain": [ - "235" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(technologies)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "def find_best_matching_tech(techs, doc):\n", - " best_matches = []\n", - " best1 = [(\"\", 0)]\n", - " best2 = [(\"\", 0)]\n", - " val2=\"\"\n", - " best_tech = []\n", - " for val in techs:\n", - " best_curs = process.extract(val, doc, limit=1, scorer=fuzz.ratio)\n", - " terms = \"\"\n", - " for cat in best_curs:\n", - " terms = terms + cat[0] + \",\" \n", - " terms = terms[:-1]\n", - " if len(best_curs)==0:\n", - " avg = 0\n", - " else:\n", - " avg = sum(i for _, i in best_curs)/float(len(best_curs))\n", - " best_cur = [(terms, avg)]\n", - " best_matches.extend(best_cur)\n", - " if best_cur[0][1] > best1[0][1]:\n", - " best1 = best_cur\n", - " best_tech = [val]\n", - " elif best_cur[0][1] == best1[0][1]:\n", - " best1.extend(best_cur)\n", - " best_tech.append(val)\n", - " else:\n", - " if best_cur[0][1] > best2[0][1] and len(best1)<3:\n", - " best2 = best_cur\n", - " val2 = val\n", - " if len(best1)<3: \n", - " best1.extend(best2)\n", - " best_tech.append(val2)\n", - " return best_matches, best_tech, best1" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [], - "source": [ - "#process.extract(each tech term, each noun chunk in each objective)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [], - "source": [ - "cordish2020['category'] = pd.Series(np.random.randn(len(cordish2020)), index=cordish2020.index)\n", - "for idx in range(len(cordish2020['objective'])):\n", - " text = cordish2020['objective'][idx]\n", - " doc = nlp(text)\n", - " # doc = \" \".join([token.lemma_ for token in doc])\n", - " #doc = nlp(doc)\n", - " docs = list(map(str, doc.noun_chunks))\n", - " #docs = [clean(str(txt)) for txt in docs]\n", - " _, best_tech, best_match = find_best_matching_tech(technologies, docs)\n", - " #print(best_tech, best_match)\n", - " if round(best_match[0][1]) > 77:\n", - " cordish2020['category'][idx] = \" \".join(best_tech)\n", - " else:\n", - " cordish2020['category'][idx] = 'None'" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": {}, - "outputs": [], - "source": [ - "#category is the column to store the best matches with technology" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "cordish2020.columns" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 9, + "data": { + "text/plain": [ + "Index(['rcn', 'id', 'acronym', 'status', 'programme', 'topics',\n", + " 'frameworkProgramme', 'title', 'startDate', 'endDate', 'projectUrl',\n", + " 'objective', 'totalCost', 'ecMaxContribution', 'call', 'fundingScheme',\n", + " 'coordinator', 'coordinatorCountry', 'participants',\n", + " 'participantCountries', 'subjects'],\n", + " dtype='object')" + ] + }, + "metadata": {} + } + ], + "execution_count": 9, + "metadata": {} + }, { - "data": { - "text/plain": [ - "17024" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cordish2020['category'].value_counts()['None']" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": {}, - "outputs": [], - "source": [ - "cordish2020matches2 = cordish2020[cordish2020['category'] != \"None\" ]" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "# Total of proyects\n", + "len(cordish2020)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 10, + "data": { + "text/plain": [ + "24554" + ] + }, + "metadata": {} + } + ], + "execution_count": 10, + "metadata": {} + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.3066710108332655\n" - ] - } - ], - "source": [ - "print(len(cordish2020matches2)/len(cordish2020))" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "# unique list of technology term\n", + "technology_term = [y for x in categories['technology_term'] for y in x if y != '']\n", + "len(technology_term)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 11, + "data": { + "text/plain": [ + "223" + ] + }, + "metadata": {} + } + ], + "execution_count": 11, + "metadata": {} + }, { - "data": { - "text/plain": [ - "0 837750\n", - "5 835398\n", - "6 838845\n", - "9 827561\n", - "10 823782\n", - "12 825435\n", - "16 835541\n", - "17 833088\n", - "22 835051\n", - "27 815279\n", - "29 810812\n", - "32 827826\n", - "33 812602\n", - "37 822897\n", - "40 828666\n", - "41 827565\n", - "43 811592\n", - "45 847641\n", - "48 817240\n", - "49 826588\n", - "Name: id, dtype: int64" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cordish2020matches2.id[:20]" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "all_technology_terms = [i for i in set([*list(categories['technology_group']),*list(technology_term)])]" + ], + "outputs": [], + "execution_count": 12, + "metadata": {} + }, { - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
rcnidacronymstatusprogrammetopicsframeworkProgrammetitlestartDateendDate...participantCountriessubjectsmatches_groupcount_matches_groupcount_unique_matches_groupmatches_technologycount_matches_technologycount_unique_matches_technologycount_matchescategory
0222681837750FARMYNGSIGNEDH2020-EU.2.1.4.;H2020-EU.3.2.6.BBI.2018.SO3.F2H2020FlAgship demonstration of industrial scale pro...2019-06-012022-06-30...FR;NO;BE;ES;PL;CH;DE;NLNaN00000agrosylviculture agro-sylviculture
52216738353983D-FOGRODSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020Understanding forest growth dynamics using nov...2019-10-012021-09-30...NaNNaN00[forest management]111reforestation distributed production
6222088838845SPIRSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020Spasers in the infrared range2020-03-012022-02-28...NaNNaN00000nanomaterial reforestation
9217264827561UFineCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020An innovative ultra-fine bubble engineered noz...2018-09-012018-12-31...NaNNaN00000smelt reduction electric battery
10220938823782SSHOCSIGNEDH2020-EU.1.4.1.1.INFRAEOSC-04-2018H2020Social Sciences & Humanities Open Cloud2019-01-012022-04-30...UK;NL;FR;EL;AT;IT;DENaN00000System innovation Energy use innovation
12221878825435DECOMPACTSIGNEDH2020-EU.1.1.ERC-2018-PoCH2020Development of Collagenase Polymeric nanocapsu...2019-05-012020-10-31...NaNNaN00000soil treatment pump system
16221633835541MOVESSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020MOnitoring VEgetation status and functioning a...2019-10-012021-09-30...NaNNaN00[forest management]111forest management Waste management
17222602833088InfraStressSIGNEDH2020-EU.3.7.4.;H2020-EU.3.7.2.SU-INFRA01-2018-2019-2020H2020Improving resilience of sensitive industrial p...2019-06-012021-05-31...SI;CY;PT;EL;DE;IE;IT;FR;IL;PL;BENaN00000SPS Wind
22221963835051NucSatSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020Satellites and nuclear information. Production...2019-07-012021-06-30...NaNNaN00000soil management grid management waste management
272185298152795G-VINNISIGNEDH2020-EU.2.1.1.ICT-17-2018H20205G Verticals INNovation Infrastructure2018-07-012021-06-30...LU;DE;NO;EL;PT;IE;ES;DK;FI;UK;ITNaN00000soil management grid management waste management
29216990810812FASTERSIGNEDH2020-EU.4.b.WIDESPREAD-05-2017H2020Farmers’ Adaptation Sustainability in Tunis...2018-11-012021-10-31...UK;SE;ES;TNNaN00000Waste management waste management straw manage...
32217204827826CreamOliveSIGNEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Industrial scale-up of the first all-natural s...2018-07-012018-12-31...NaNNaN00000meat alternative alternatives to meat
33217649812602POLIPOCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020The first non-fermentative production process ...2018-06-012018-11-30...NaNNaN00[bioplastic]414bioplastic protection of soil
37217413822897BEATIKSIGNEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Beatik- Collaborative Digital Scores Platform ...2018-09-012020-03-31...NaNNaN[Storage]11001Storage conservation tillage
40217195828666KERMACLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020A NEW VERIFICATION SYSTEM FOR COMPLEX RADIOTHE...2018-09-012018-12-31...NaNNaN[Storage]11001Storage soil treatment
41217265827565PTCCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Machine-Learning Technology for Digital Marketing2018-09-012019-01-31...NaNNaN00000grid management soil management
43217808811592NUTRI-NEEDSIGNEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Final development, clinical validation and lau...2018-06-012020-05-31...NaNNaN00[DSM]111DSM Cleaner product
45223666847641MICADOSIGNEDH2020-Euratom-1.7.;H2020-Euratom-1.1.NFRP-2018-10H2020Measurement and Instrumentation for Cleaning A...2019-06-012022-05-31...FR;DE;IT;BE;CZNaN[Waste management]21[waste management]214Waste management waste management nutrient man...
48216834817240POCCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020PieceOfCake: an AI-driven chatbot to manage co...2018-06-012018-11-30...NaNNaN00000RAPS Cleaner product
49223648826588APPLAUSESIGNEDH2020-EU.2.1.1.7.ECSEL-2018-1-IAH2020Advanced packaging for photonics, optics and e...2019-05-012022-04-30...DE;NO;NL;CH;AT;HU;FI;BE;FR;LV;ILNaN00000local manufacturing distributed manufacturing
\n", - "

20 rows × 29 columns

\n", - "
" + "cell_type": "code", + "source": [ + "len(all_technology_terms)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 13, + "data": { + "text/plain": [ + "235" + ] + }, + "metadata": {} + } ], - "text/plain": [ - " rcn id acronym status \\\n", - "0 222681 837750 FARMYNG SIGNED \n", - "5 221673 835398 3D-FOGROD SIGNED \n", - "6 222088 838845 SPIR SIGNED \n", - "9 217264 827561 UFine CLOSED \n", - "10 220938 823782 SSHOC SIGNED \n", - "12 221878 825435 DECOMPACT SIGNED \n", - "16 221633 835541 MOVES SIGNED \n", - "17 222602 833088 InfraStress SIGNED \n", - "22 221963 835051 NucSat SIGNED \n", - "27 218529 815279 5G-VINNI SIGNED \n", - "29 216990 810812 FASTER SIGNED \n", - "32 217204 827826 CreamOlive SIGNED \n", - "33 217649 812602 POLIPO CLOSED \n", - "37 217413 822897 BEATIK SIGNED \n", - "40 217195 828666 KERMA CLOSED \n", - "41 217265 827565 PTC CLOSED \n", - "43 217808 811592 NUTRI-NEED SIGNED \n", - "45 223666 847641 MICADO SIGNED \n", - "48 216834 817240 POC CLOSED \n", - "49 223648 826588 APPLAUSE SIGNED \n", - "\n", - " programme topics \\\n", - "0 H2020-EU.2.1.4.;H2020-EU.3.2.6. BBI.2018.SO3.F2 \n", - "5 H2020-EU.1.3.2. MSCA-IF-2018 \n", - "6 H2020-EU.1.3.2. MSCA-IF-2018 \n", - "9 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "10 H2020-EU.1.4.1.1. INFRAEOSC-04-2018 \n", - "12 H2020-EU.1.1. ERC-2018-PoC \n", - "16 H2020-EU.1.3.2. MSCA-IF-2018 \n", - "17 H2020-EU.3.7.4.;H2020-EU.3.7.2. SU-INFRA01-2018-2019-2020 \n", - "22 H2020-EU.1.3.2. MSCA-IF-2018 \n", - "27 H2020-EU.2.1.1. ICT-17-2018 \n", - "29 H2020-EU.4.b. WIDESPREAD-05-2017 \n", - "32 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "33 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "37 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "40 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "41 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "43 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "45 H2020-Euratom-1.7.;H2020-Euratom-1.1. NFRP-2018-10 \n", - "48 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", - "49 H2020-EU.2.1.1.7. ECSEL-2018-1-IA \n", - "\n", - " frameworkProgramme title \\\n", - "0 H2020 FlAgship demonstration of industrial scale pro... \n", - "5 H2020 Understanding forest growth dynamics using nov... \n", - "6 H2020 Spasers in the infrared range \n", - "9 H2020 An innovative ultra-fine bubble engineered noz... \n", - "10 H2020 Social Sciences & Humanities Open Cloud \n", - "12 H2020 Development of Collagenase Polymeric nanocapsu... \n", - "16 H2020 MOnitoring VEgetation status and functioning a... \n", - "17 H2020 Improving resilience of sensitive industrial p... \n", - "22 H2020 Satellites and nuclear information. Production... \n", - "27 H2020 5G Verticals INNovation Infrastructure \n", - "29 H2020 Farmers’ Adaptation Sustainability in Tunis... \n", - "32 H2020 Industrial scale-up of the first all-natural s... \n", - "33 H2020 The first non-fermentative production process ... \n", - "37 H2020 Beatik- Collaborative Digital Scores Platform ... \n", - "40 H2020 A NEW VERIFICATION SYSTEM FOR COMPLEX RADIOTHE... \n", - "41 H2020 Machine-Learning Technology for Digital Marketing \n", - "43 H2020 Final development, clinical validation and lau... \n", - "45 H2020 Measurement and Instrumentation for Cleaning A... \n", - "48 H2020 PieceOfCake: an AI-driven chatbot to manage co... \n", - "49 H2020 Advanced packaging for photonics, optics and e... \n", - "\n", - " startDate endDate ... participantCountries subjects \\\n", - "0 2019-06-01 2022-06-30 ... FR;NO;BE;ES;PL;CH;DE;NL NaN \n", - "5 2019-10-01 2021-09-30 ... NaN NaN \n", - "6 2020-03-01 2022-02-28 ... NaN NaN \n", - "9 2018-09-01 2018-12-31 ... NaN NaN \n", - "10 2019-01-01 2022-04-30 ... UK;NL;FR;EL;AT;IT;DE NaN \n", - "12 2019-05-01 2020-10-31 ... NaN NaN \n", - "16 2019-10-01 2021-09-30 ... NaN NaN \n", - "17 2019-06-01 2021-05-31 ... SI;CY;PT;EL;DE;IE;IT;FR;IL;PL;BE NaN \n", - "22 2019-07-01 2021-06-30 ... NaN NaN \n", - "27 2018-07-01 2021-06-30 ... LU;DE;NO;EL;PT;IE;ES;DK;FI;UK;IT NaN \n", - "29 2018-11-01 2021-10-31 ... UK;SE;ES;TN NaN \n", - "32 2018-07-01 2018-12-31 ... NaN NaN \n", - "33 2018-06-01 2018-11-30 ... NaN NaN \n", - "37 2018-09-01 2020-03-31 ... NaN NaN \n", - "40 2018-09-01 2018-12-31 ... NaN NaN \n", - "41 2018-09-01 2019-01-31 ... NaN NaN \n", - "43 2018-06-01 2020-05-31 ... NaN NaN \n", - "45 2019-06-01 2022-05-31 ... FR;DE;IT;BE;CZ NaN \n", - "48 2018-06-01 2018-11-30 ... NaN NaN \n", - "49 2019-05-01 2022-04-30 ... DE;NO;NL;CH;AT;HU;FI;BE;FR;LV;IL NaN \n", - "\n", - " matches_group count_matches_group count_unique_matches_group \\\n", - "0 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "12 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "22 0 0 \n", - "27 0 0 \n", - "29 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "37 [Storage] 1 1 \n", - "40 [Storage] 1 1 \n", - "41 0 0 \n", - "43 0 0 \n", - "45 [Waste management] 2 1 \n", - "48 0 0 \n", - "49 0 0 \n", - "\n", - " matches_technology count_matches_technology \\\n", - "0 0 \n", - "5 [forest management] 1 \n", - "6 0 \n", - "9 0 \n", - "10 0 \n", - "12 0 \n", - "16 [forest management] 1 \n", - "17 0 \n", - "22 0 \n", - "27 0 \n", - "29 0 \n", - "32 0 \n", - "33 [bioplastic] 4 \n", - "37 0 \n", - "40 0 \n", - "41 0 \n", - "43 [DSM] 1 \n", - "45 [waste management] 2 \n", - "48 0 \n", - "49 0 \n", - "\n", - " count_unique_matches_technology count_matches \\\n", - "0 0 0 \n", - "5 1 1 \n", - "6 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "12 0 0 \n", - "16 1 1 \n", - "17 0 0 \n", - "22 0 0 \n", - "27 0 0 \n", - "29 0 0 \n", - "32 0 0 \n", - "33 1 4 \n", - "37 0 1 \n", - "40 0 1 \n", - "41 0 0 \n", - "43 1 1 \n", - "45 1 4 \n", - "48 0 0 \n", - "49 0 0 \n", - "\n", - " category \n", - "0 agrosylviculture agro-sylviculture \n", - "5 reforestation distributed production \n", - "6 nanomaterial reforestation \n", - "9 smelt reduction electric battery \n", - "10 System innovation Energy use innovation \n", - "12 soil treatment pump system \n", - "16 forest management Waste management \n", - "17 SPS Wind \n", - "22 soil management grid management waste management \n", - "27 soil management grid management waste management \n", - "29 Waste management waste management straw manage... \n", - "32 meat alternative alternatives to meat \n", - "33 bioplastic protection of soil \n", - "37 Storage conservation tillage \n", - "40 Storage soil treatment \n", - "41 grid management soil management \n", - "43 DSM Cleaner product \n", - "45 Waste management waste management nutrient man... \n", - "48 RAPS Cleaner product \n", - "49 local manufacturing distributed manufacturing \n", - "\n", - "[20 rows x 29 columns]" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" + "execution_count": 13, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "all_technology_terms[:10]" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 14, + "data": { + "text/plain": [ + "['parabolic trough',\n", + " 'carbon capture and storage',\n", + " 'biorefinery design',\n", + " 'conservation tillage',\n", + " 'meat alternative',\n", + " 'solar water pump',\n", + " 'demand side management',\n", + " 'Improved durability',\n", + " 'renewable energy',\n", + " 'Storage']" + ] + }, + "metadata": {} + } + ], + "execution_count": 14, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---\n", + "### Syntactic probabilistic classification using spacy and fuzzywuzzy" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "import spacy\n", + "import numpy as np\n", + "from spacy import displacy\n", + "from collections import Counter\n", + "import en_core_web_sm\n", + "from fuzzywuzzy import process, fuzz\n", + "import re\n", + "nlp = en_core_web_sm.load()\n", + "import textdistance as tx\n", + "import unicodedata\n", + "from textdistance.algorithms import vector_based" + ], + "outputs": [], + "execution_count": 15, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "def clean(string):\n", + " return re.sub(r'[-\\s]+', '-',\n", + " str(\n", + " re.sub(r'[^\\w\\s-]', '',\n", + " unicodedata.normalize('NFKD', string)\n", + " .strip()\n", + " )))" + ], + "outputs": [], + "execution_count": 16, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Objective example\n", + "\n", + "---" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#cordish2020.loc[13]['objective']\n", + "cordish2020.loc[9631]['objective'][]" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 22, + "data": { + "text/plain": [ + "'Offshore wind has long been identified as one of the most promising energy forms to improve the penetration of renewables in the European energy mix. Since most of offshore wind resources is available over deep waters at a considerable distance from the shore, it is inevitable that the campaign of the offshore wind exploitation would move from shallow waters to deep waters. As the conventional bottom-fixed offshore wind turbine is no longer economically viable over deep waters (>50m), the floating offshore wind turbine (FOWT) seems to be an appealing alternative to harvest the ampler deep-water wind. FOWTs are, however, threaten by the hostile deep offshore environment, which would induce unacceptable tilt motions and drastic vibrations of the floating system. The undesirable loadings on the blades, tower, floating foundations and other components, results in mechanical failures and electrical faults of FOWTs, both of which could lead to operation interruptions and cause disastrous economic losses. Overcoming the difficulties of effectiveness, robustness, integration and multi-scalability of optimal control and fault diagnosis system of the FOWTs is precisely the topic of the proposal, which would actively contribute to the implementation of the Economical Deep Offshore Wind Exploitation (EDOWE) by introducing the concept of an innovative distributed multi-scale control and monitoring system. Delft University of Technology owns top-level expertise in wind turbine/farm control and distributed multi-scale applications. Its world-leading experimental facilities provide a solid foundation for hosting a systematic study on the control and monitoring strategies of the FOWTs. Moreover, secondment at Politecnico di Milano and collaborating with our industrial partner 2B Energy on the action help developing an advanced solution to economically harvest deep offshore wind, and thus contributing to achieve the renewables consumption goal set by European Union.'" + ] + }, + "metadata": {} + } + ], + "execution_count": 22, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "text = cordish2020['objective'][9631]\n", + "doc = nlp(text)\n", + "docs = list(map(str, doc.noun_chunks))\n", + "docs[:20]" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 30, + "data": { + "text/plain": [ + "['Offshore wind',\n", + " 'the most promising energy forms',\n", + " 'the penetration',\n", + " 'renewables',\n", + " 'the European energy mix',\n", + " 'offshore wind resources',\n", + " 'deep waters',\n", + " 'a considerable distance',\n", + " 'the shore',\n", + " 'it',\n", + " 'the campaign',\n", + " 'the offshore wind exploitation',\n", + " 'shallow waters',\n", + " 'deep waters',\n", + " 'the conventional bottom-fixed offshore wind turbine',\n", + " 'deep waters',\n", + " 'the floating offshore wind turbine',\n", + " 'FOWT',\n", + " 'an appealing alternative',\n", + " 'the ampler deep-water wind']" + ] + }, + "metadata": {} + } + ], + "execution_count": 30, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#find_best_matching_tech(technologies, docs)" + ], + "outputs": [], + "execution_count": 33, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#technologies" + ], + "outputs": [], + "execution_count": 34, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "---" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Get all the synonyms from the short descriptions**" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "technologies = all_technology_terms" + ], + "outputs": [], + "execution_count": 27, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "len(technologies)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 61, + "data": { + "text/plain": [ + "235" + ] + }, + "metadata": {} + } + ], + "execution_count": 61, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "def find_best_matching_tech(techs, doc):\n", + " best_matches = []\n", + " best1 = [(\"\", 0)]\n", + " best2 = [(\"\", 0)]\n", + " val2=\"\"\n", + " best_tech = []\n", + " for val in techs:\n", + " best_curs = process.extract(val, doc, limit=1, scorer=fuzz.ratio)\n", + " terms = \"\"\n", + " for cat in best_curs:\n", + " terms = terms + cat[0] + \",\" \n", + " terms = terms[:-1]\n", + " if len(best_curs)==0:\n", + " avg = 0\n", + " else:\n", + " avg = sum(i for _, i in best_curs)/float(len(best_curs))\n", + " best_cur = [(terms, avg)]\n", + " best_matches.extend(best_cur)\n", + " if best_cur[0][1] > best1[0][1]:\n", + " best1 = best_cur\n", + " best_tech = [val]\n", + " elif best_cur[0][1] == best1[0][1]:\n", + " best1.extend(best_cur)\n", + " best_tech.append(val)\n", + " else:\n", + " if best_cur[0][1] > best2[0][1] and len(best1)<3:\n", + " best2 = best_cur\n", + " val2 = val\n", + " if len(best1)<3: \n", + " best1.extend(best2)\n", + " best_tech.append(val2)\n", + " return best_matches, best_tech, best1" + ], + "outputs": [], + "execution_count": 26, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#process.extract(each tech term, each noun chunk in each objective)" + ], + "outputs": [], + "execution_count": 63, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cordish2020['category'] = pd.Series(np.random.randn(len(cordish2020)), index=cordish2020.index)\n", + "for idx in range(len(cordish2020['objective'])):\n", + " text = cordish2020['objective'][idx]\n", + " doc = nlp(text)\n", + " # doc = \" \".join([token.lemma_ for token in doc])\n", + " #doc = nlp(doc)\n", + " docs = list(map(str, doc.noun_chunks))\n", + " #docs = [clean(str(txt)) for txt in docs]\n", + " _, best_tech, best_match = find_best_matching_tech(technologies, docs)\n", + " #print(best_tech, best_match)\n", + " if round(best_match[0][1]) > 77:\n", + " cordish2020['category'][idx] = \" \".join(best_tech)\n", + " else:\n", + " cordish2020['category'][idx] = 'None'" + ], + "outputs": [], + "execution_count": 64, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#category is the column to store the best matches with technology" + ], + "outputs": [], + "execution_count": 65, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cordish2020['category'].value_counts()['None']" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 66, + "data": { + "text/plain": [ + "17024" + ] + }, + "metadata": {} + } + ], + "execution_count": 66, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cordish2020matches2 = cordish2020[cordish2020['category'] != \"None\" ]" + ], + "outputs": [], + "execution_count": 67, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "print(len(cordish2020matches2)/len(cordish2020))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0.3066710108332655\n" + ] + } + ], + "execution_count": 68, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cordish2020matches2.id[:20]" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 69, + "data": { + "text/plain": [ + "0 837750\n", + "5 835398\n", + "6 838845\n", + "9 827561\n", + "10 823782\n", + "12 825435\n", + "16 835541\n", + "17 833088\n", + "22 835051\n", + "27 815279\n", + "29 810812\n", + "32 827826\n", + "33 812602\n", + "37 822897\n", + "40 828666\n", + "41 827565\n", + "43 811592\n", + "45 847641\n", + "48 817240\n", + "49 826588\n", + "Name: id, dtype: int64" + ] + }, + "metadata": {} + } + ], + "execution_count": 69, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cordish2020matches2.head(20)" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 70, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rcnidacronymstatusprogrammetopicsframeworkProgrammetitlestartDateendDate...participantCountriessubjectsmatches_groupcount_matches_groupcount_unique_matches_groupmatches_technologycount_matches_technologycount_unique_matches_technologycount_matchescategory
0222681837750FARMYNGSIGNEDH2020-EU.2.1.4.;H2020-EU.3.2.6.BBI.2018.SO3.F2H2020FlAgship demonstration of industrial scale pro...2019-06-012022-06-30...FR;NO;BE;ES;PL;CH;DE;NLNaN00000agrosylviculture agro-sylviculture
52216738353983D-FOGRODSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020Understanding forest growth dynamics using nov...2019-10-012021-09-30...NaNNaN00[forest management]111reforestation distributed production
6222088838845SPIRSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020Spasers in the infrared range2020-03-012022-02-28...NaNNaN00000nanomaterial reforestation
9217264827561UFineCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020An innovative ultra-fine bubble engineered noz...2018-09-012018-12-31...NaNNaN00000smelt reduction electric battery
10220938823782SSHOCSIGNEDH2020-EU.1.4.1.1.INFRAEOSC-04-2018H2020Social Sciences & Humanities Open Cloud2019-01-012022-04-30...UK;NL;FR;EL;AT;IT;DENaN00000System innovation Energy use innovation
12221878825435DECOMPACTSIGNEDH2020-EU.1.1.ERC-2018-PoCH2020Development of Collagenase Polymeric nanocapsu...2019-05-012020-10-31...NaNNaN00000soil treatment pump system
16221633835541MOVESSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020MOnitoring VEgetation status and functioning a...2019-10-012021-09-30...NaNNaN00[forest management]111forest management Waste management
17222602833088InfraStressSIGNEDH2020-EU.3.7.4.;H2020-EU.3.7.2.SU-INFRA01-2018-2019-2020H2020Improving resilience of sensitive industrial p...2019-06-012021-05-31...SI;CY;PT;EL;DE;IE;IT;FR;IL;PL;BENaN00000SPS Wind
22221963835051NucSatSIGNEDH2020-EU.1.3.2.MSCA-IF-2018H2020Satellites and nuclear information. Production...2019-07-012021-06-30...NaNNaN00000soil management grid management waste management
272185298152795G-VINNISIGNEDH2020-EU.2.1.1.ICT-17-2018H20205G Verticals INNovation Infrastructure2018-07-012021-06-30...LU;DE;NO;EL;PT;IE;ES;DK;FI;UK;ITNaN00000soil management grid management waste management
29216990810812FASTERSIGNEDH2020-EU.4.b.WIDESPREAD-05-2017H2020Farmers’ Adaptation Sustainability in Tunis...2018-11-012021-10-31...UK;SE;ES;TNNaN00000Waste management waste management straw manage...
32217204827826CreamOliveSIGNEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Industrial scale-up of the first all-natural s...2018-07-012018-12-31...NaNNaN00000meat alternative alternatives to meat
33217649812602POLIPOCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020The first non-fermentative production process ...2018-06-012018-11-30...NaNNaN00[bioplastic]414bioplastic protection of soil
37217413822897BEATIKSIGNEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Beatik- Collaborative Digital Scores Platform ...2018-09-012020-03-31...NaNNaN[Storage]11001Storage conservation tillage
40217195828666KERMACLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020A NEW VERIFICATION SYSTEM FOR COMPLEX RADIOTHE...2018-09-012018-12-31...NaNNaN[Storage]11001Storage soil treatment
41217265827565PTCCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Machine-Learning Technology for Digital Marketing2018-09-012019-01-31...NaNNaN00000grid management soil management
43217808811592NUTRI-NEEDSIGNEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020Final development, clinical validation and lau...2018-06-012020-05-31...NaNNaN00[DSM]111DSM Cleaner product
45223666847641MICADOSIGNEDH2020-Euratom-1.7.;H2020-Euratom-1.1.NFRP-2018-10H2020Measurement and Instrumentation for Cleaning A...2019-06-012022-05-31...FR;DE;IT;BE;CZNaN[Waste management]21[waste management]214Waste management waste management nutrient man...
48216834817240POCCLOSEDH2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1.EIC-SMEInst-2018-2020H2020PieceOfCake: an AI-driven chatbot to manage co...2018-06-012018-11-30...NaNNaN00000RAPS Cleaner product
49223648826588APPLAUSESIGNEDH2020-EU.2.1.1.7.ECSEL-2018-1-IAH2020Advanced packaging for photonics, optics and e...2019-05-012022-04-30...DE;NO;NL;CH;AT;HU;FI;BE;FR;LV;ILNaN00000local manufacturing distributed manufacturing
\n", + "

20 rows × 29 columns

\n", + "
" + ], + "text/plain": [ + " rcn id acronym status \\\n", + "0 222681 837750 FARMYNG SIGNED \n", + "5 221673 835398 3D-FOGROD SIGNED \n", + "6 222088 838845 SPIR SIGNED \n", + "9 217264 827561 UFine CLOSED \n", + "10 220938 823782 SSHOC SIGNED \n", + "12 221878 825435 DECOMPACT SIGNED \n", + "16 221633 835541 MOVES SIGNED \n", + "17 222602 833088 InfraStress SIGNED \n", + "22 221963 835051 NucSat SIGNED \n", + "27 218529 815279 5G-VINNI SIGNED \n", + "29 216990 810812 FASTER SIGNED \n", + "32 217204 827826 CreamOlive SIGNED \n", + "33 217649 812602 POLIPO CLOSED \n", + "37 217413 822897 BEATIK SIGNED \n", + "40 217195 828666 KERMA CLOSED \n", + "41 217265 827565 PTC CLOSED \n", + "43 217808 811592 NUTRI-NEED SIGNED \n", + "45 223666 847641 MICADO SIGNED \n", + "48 216834 817240 POC CLOSED \n", + "49 223648 826588 APPLAUSE SIGNED \n", + "\n", + " programme topics \\\n", + "0 H2020-EU.2.1.4.;H2020-EU.3.2.6. BBI.2018.SO3.F2 \n", + "5 H2020-EU.1.3.2. MSCA-IF-2018 \n", + "6 H2020-EU.1.3.2. MSCA-IF-2018 \n", + "9 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "10 H2020-EU.1.4.1.1. INFRAEOSC-04-2018 \n", + "12 H2020-EU.1.1. ERC-2018-PoC \n", + "16 H2020-EU.1.3.2. MSCA-IF-2018 \n", + "17 H2020-EU.3.7.4.;H2020-EU.3.7.2. SU-INFRA01-2018-2019-2020 \n", + "22 H2020-EU.1.3.2. MSCA-IF-2018 \n", + "27 H2020-EU.2.1.1. ICT-17-2018 \n", + "29 H2020-EU.4.b. WIDESPREAD-05-2017 \n", + "32 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "33 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "37 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "40 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "41 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "43 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "45 H2020-Euratom-1.7.;H2020-Euratom-1.1. NFRP-2018-10 \n", + "48 H2020-EU.3.;H2020-EU.2.3.;H2020-EU.2.1. EIC-SMEInst-2018-2020 \n", + "49 H2020-EU.2.1.1.7. ECSEL-2018-1-IA \n", + "\n", + " frameworkProgramme title \\\n", + "0 H2020 FlAgship demonstration of industrial scale pro... \n", + "5 H2020 Understanding forest growth dynamics using nov... \n", + "6 H2020 Spasers in the infrared range \n", + "9 H2020 An innovative ultra-fine bubble engineered noz... \n", + "10 H2020 Social Sciences & Humanities Open Cloud \n", + "12 H2020 Development of Collagenase Polymeric nanocapsu... \n", + "16 H2020 MOnitoring VEgetation status and functioning a... \n", + "17 H2020 Improving resilience of sensitive industrial p... \n", + "22 H2020 Satellites and nuclear information. Production... \n", + "27 H2020 5G Verticals INNovation Infrastructure \n", + "29 H2020 Farmers’ Adaptation Sustainability in Tunis... \n", + "32 H2020 Industrial scale-up of the first all-natural s... \n", + "33 H2020 The first non-fermentative production process ... \n", + "37 H2020 Beatik- Collaborative Digital Scores Platform ... \n", + "40 H2020 A NEW VERIFICATION SYSTEM FOR COMPLEX RADIOTHE... \n", + "41 H2020 Machine-Learning Technology for Digital Marketing \n", + "43 H2020 Final development, clinical validation and lau... \n", + "45 H2020 Measurement and Instrumentation for Cleaning A... \n", + "48 H2020 PieceOfCake: an AI-driven chatbot to manage co... \n", + "49 H2020 Advanced packaging for photonics, optics and e... \n", + "\n", + " startDate endDate ... participantCountries subjects \\\n", + "0 2019-06-01 2022-06-30 ... FR;NO;BE;ES;PL;CH;DE;NL NaN \n", + "5 2019-10-01 2021-09-30 ... NaN NaN \n", + "6 2020-03-01 2022-02-28 ... NaN NaN \n", + "9 2018-09-01 2018-12-31 ... NaN NaN \n", + "10 2019-01-01 2022-04-30 ... UK;NL;FR;EL;AT;IT;DE NaN \n", + "12 2019-05-01 2020-10-31 ... NaN NaN \n", + "16 2019-10-01 2021-09-30 ... NaN NaN \n", + "17 2019-06-01 2021-05-31 ... SI;CY;PT;EL;DE;IE;IT;FR;IL;PL;BE NaN \n", + "22 2019-07-01 2021-06-30 ... NaN NaN \n", + "27 2018-07-01 2021-06-30 ... LU;DE;NO;EL;PT;IE;ES;DK;FI;UK;IT NaN \n", + "29 2018-11-01 2021-10-31 ... UK;SE;ES;TN NaN \n", + "32 2018-07-01 2018-12-31 ... NaN NaN \n", + "33 2018-06-01 2018-11-30 ... NaN NaN \n", + "37 2018-09-01 2020-03-31 ... NaN NaN \n", + "40 2018-09-01 2018-12-31 ... NaN NaN \n", + "41 2018-09-01 2019-01-31 ... NaN NaN \n", + "43 2018-06-01 2020-05-31 ... NaN NaN \n", + "45 2019-06-01 2022-05-31 ... FR;DE;IT;BE;CZ NaN \n", + "48 2018-06-01 2018-11-30 ... NaN NaN \n", + "49 2019-05-01 2022-04-30 ... DE;NO;NL;CH;AT;HU;FI;BE;FR;LV;IL NaN \n", + "\n", + " matches_group count_matches_group count_unique_matches_group \\\n", + "0 0 0 \n", + "5 0 0 \n", + "6 0 0 \n", + "9 0 0 \n", + "10 0 0 \n", + "12 0 0 \n", + "16 0 0 \n", + "17 0 0 \n", + "22 0 0 \n", + "27 0 0 \n", + "29 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "37 [Storage] 1 1 \n", + "40 [Storage] 1 1 \n", + "41 0 0 \n", + "43 0 0 \n", + "45 [Waste management] 2 1 \n", + "48 0 0 \n", + "49 0 0 \n", + "\n", + " matches_technology count_matches_technology \\\n", + "0 0 \n", + "5 [forest management] 1 \n", + "6 0 \n", + "9 0 \n", + "10 0 \n", + "12 0 \n", + "16 [forest management] 1 \n", + "17 0 \n", + "22 0 \n", + "27 0 \n", + "29 0 \n", + "32 0 \n", + "33 [bioplastic] 4 \n", + "37 0 \n", + "40 0 \n", + "41 0 \n", + "43 [DSM] 1 \n", + "45 [waste management] 2 \n", + "48 0 \n", + "49 0 \n", + "\n", + " count_unique_matches_technology count_matches \\\n", + "0 0 0 \n", + "5 1 1 \n", + "6 0 0 \n", + "9 0 0 \n", + "10 0 0 \n", + "12 0 0 \n", + "16 1 1 \n", + "17 0 0 \n", + "22 0 0 \n", + "27 0 0 \n", + "29 0 0 \n", + "32 0 0 \n", + "33 1 4 \n", + "37 0 1 \n", + "40 0 1 \n", + "41 0 0 \n", + "43 1 1 \n", + "45 1 4 \n", + "48 0 0 \n", + "49 0 0 \n", + "\n", + " category \n", + "0 agrosylviculture agro-sylviculture \n", + "5 reforestation distributed production \n", + "6 nanomaterial reforestation \n", + "9 smelt reduction electric battery \n", + "10 System innovation Energy use innovation \n", + "12 soil treatment pump system \n", + "16 forest management Waste management \n", + "17 SPS Wind \n", + "22 soil management grid management waste management \n", + "27 soil management grid management waste management \n", + "29 Waste management waste management straw manage... \n", + "32 meat alternative alternatives to meat \n", + "33 bioplastic protection of soil \n", + "37 Storage conservation tillage \n", + "40 Storage soil treatment \n", + "41 grid management soil management \n", + "43 DSM Cleaner product \n", + "45 Waste management waste management nutrient man... \n", + "48 RAPS Cleaner product \n", + "49 local manufacturing distributed manufacturing \n", + "\n", + "[20 rows x 29 columns]" + ] + }, + "metadata": {} + } + ], + "execution_count": 70, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "text = cordish2020['objective'][13]\n", + "doc = nlp(text)\n", + "#doc = \" \".join([token.lemma_ for token in doc])\n", + "#doc = nlp(doc)\n", + "docs = list(map(str, doc.noun_chunks))\n", + "_, best_tech, best_match = find_best_matching_tech(technologies, docs)\n", + "print(best_tech,best_match)" + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "cordish2020matches2[['id','acronym','title','objective','startDate','endDate','ecMaxContribution','matches_group','matches_technology','count_matches','category']].to_csv('../data/tech2.csv')" + ], + "outputs": [], + "execution_count": 72, + "metadata": {} + }, + { + "cell_type": "code", + "source": [], + "outputs": [], + "execution_count": null, + "metadata": {} + } + ], + "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.7.3" + }, + "nteract": { + "version": "0.15.0" } - ], - "source": [ - "cordish2020matches2.head(20)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "text = cordish2020['objective'][13]\n", - "doc = nlp(text)\n", - "#doc = \" \".join([token.lemma_ for token in doc])\n", - "#doc = nlp(doc)\n", - "docs = list(map(str, doc.noun_chunks))\n", - "_, best_tech, best_match = find_best_matching_tech(technologies, docs)\n", - "print(best_tech,best_match)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [], - "source": [ - "cordish2020matches2[['id','acronym','title','objective','startDate','endDate','ecMaxContribution','matches_group','matches_technology','count_matches','category']].to_csv('../data/tech2.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file