From cf8ffc4c80232e3cfafffd1b4291c4ba058c492c Mon Sep 17 00:00:00 2001 From: Pieter van der Hijden <pvdh@sofos.nl> Date: Fri, 21 May 2021 11:25:42 +0200 Subject: [PATCH] In icon-translator file code column renamed to SDG-code --- .../sdg-profiles-statistics.ipynb | 257 +++++++++++++++--- .../sdg-icon-translator.xlsx | Bin 17197 -> 17247 bytes 2 files changed, 226 insertions(+), 31 deletions(-) diff --git a/aggregated-results/sdg-profiles-statistics.ipynb b/aggregated-results/sdg-profiles-statistics.ipynb index 009395f..83e6aad 100644 --- a/aggregated-results/sdg-profiles-statistics.ipynb +++ b/aggregated-results/sdg-profiles-statistics.ipynb @@ -397,7 +397,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 51, "metadata": {}, "outputs": [ { @@ -421,123 +421,147 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>0</th>\n", + " <th>SDG-count</th>\n", + " <th>SDG-code</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>SDG-01</th>\n", " <td>8</td>\n", + " <td>SDG-01</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-02</th>\n", " <td>12</td>\n", + " <td>SDG-02</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-03</th>\n", " <td>23</td>\n", + " <td>SDG-03</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-04</th>\n", " <td>172</td>\n", + " <td>SDG-04</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-05</th>\n", " <td>70</td>\n", + " <td>SDG-05</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-06</th>\n", " <td>12</td>\n", + " <td>SDG-06</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-07</th>\n", " <td>30</td>\n", + " <td>SDG-07</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-08</th>\n", " <td>63</td>\n", + " <td>SDG-08</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-09</th>\n", " <td>148</td>\n", + " <td>SDG-09</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-10</th>\n", " <td>22</td>\n", + " <td>SDG-10</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-11</th>\n", " <td>79</td>\n", + " <td>SDG-11</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-12</th>\n", " <td>96</td>\n", + " <td>SDG-12</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-13</th>\n", " <td>24</td>\n", + " <td>SDG-13</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-14</th>\n", " <td>5</td>\n", + " <td>SDG-14</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-15</th>\n", " <td>16</td>\n", + " <td>SDG-15</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-16</th>\n", " <td>2</td>\n", + " <td>SDG-16</td>\n", " </tr>\n", " <tr>\n", " <th>SDG-17</th>\n", " <td>35</td>\n", + " <td>SDG-17</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - " 0\n", - "SDG-01 8\n", - "SDG-02 12\n", - "SDG-03 23\n", - "SDG-04 172\n", - "SDG-05 70\n", - "SDG-06 12\n", - "SDG-07 30\n", - "SDG-08 63\n", - "SDG-09 148\n", - "SDG-10 22\n", - "SDG-11 79\n", - "SDG-12 96\n", - "SDG-13 24\n", - "SDG-14 5\n", - "SDG-15 16\n", - "SDG-16 2\n", - "SDG-17 35" + " SDG-count SDG-code\n", + "SDG-01 8 SDG-01\n", + "SDG-02 12 SDG-02\n", + "SDG-03 23 SDG-03\n", + "SDG-04 172 SDG-04\n", + "SDG-05 70 SDG-05\n", + "SDG-06 12 SDG-06\n", + "SDG-07 30 SDG-07\n", + "SDG-08 63 SDG-08\n", + "SDG-09 148 SDG-09\n", + "SDG-10 22 SDG-10\n", + "SDG-11 79 SDG-11\n", + "SDG-12 96 SDG-12\n", + "SDG-13 24 SDG-13\n", + "SDG-14 5 SDG-14\n", + "SDG-15 16 SDG-15\n", + "SDG-16 2 SDG-16\n", + "SDG-17 35 SDG-17" ] }, - "execution_count": 20, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# select rows with status = 'green' and columns sdg1-17\n", - "# create list of sdg column names\n", + "\n", "sdgs = []\n", "for s in range(17):\n", " sdgs = sdgs + [\"SDG-\" + f'{(s+1):02d}']\n", "selprofiles = profiles[profiles['status'] == 'green'][sdgs] # select rows flagged 'green' and columns SDG1-17\n", + "\n", + "# count SDG 1-17 occurences (to series)\n", "selseries = selprofiles.count() # create series with sdg counts 1-17\n", + "\n", + "# convert series to dataframe\n", "mytable = selseries.to_frame() # convert series to frame\n", + "mytable = mytable.rename(columns={0:'SDG-count'}) # rename column to 'SDG-count'\n", + "mytable['SDG-code'] = mytable.index\n", "mytable.head(20)" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 55, "metadata": {}, "outputs": [ { @@ -546,18 +570,189 @@ "text": [ "<class 'pandas.core.frame.DataFrame'>\n", "Index: 17 entries, SDG-01 to SDG-17\n", - "Data columns (total 1 columns):\n", - " # Column Non-Null Count Dtype\n", - "--- ------ -------------- -----\n", - " 0 0 17 non-null int64\n", - "dtypes: int64(1)\n", - "memory usage: 204.0+ bytes\n" + "Data columns (total 2 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 SDG-count 17 non-null int64 \n", + " 1 SDG-code 17 non-null object\n", + "dtypes: int64(1), object(1)\n", + "memory usage: 272.0+ bytes\n" ] } ], "source": [ - "seltable = selseries.to_frame()\n", - "seltable.info()\n" + "mytable.info()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'SDG-code'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-56-09d567263d0a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mmytable\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0mmytable\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmerge\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmytable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msdgicons\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhow\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"left\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mon\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"SDG-code\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0mmytable\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36mmerge\u001b[0;34m(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0mindicator\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mindicator\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 87\u001b[0;31m \u001b[0mvalidate\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidate\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 88\u001b[0m )\n\u001b[1;32m 89\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mop\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001b[0m\n\u001b[1;32m 666\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mright_join_keys\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 667\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin_names\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 668\u001b[0;31m ) = self._get_merge_keys()\n\u001b[0m\u001b[1;32m 669\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 670\u001b[0m \u001b[0;31m# validate the merge keys dtypes. We may need to coerce\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/reshape/merge.py\u001b[0m in \u001b[0;36m_get_merge_keys\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1031\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_rkey\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1032\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrk\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1033\u001b[0;31m \u001b[0mright_keys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mright\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_label_or_level_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1034\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1035\u001b[0m \u001b[0;31m# work-around for merge_asof(right_index=True)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_get_label_or_level_values\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1682\u001b[0m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_level_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_values\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1683\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1684\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1685\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1686\u001b[0m \u001b[0;31m# Check for duplicates\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'SDG-code'" + ] + } + ], + "source": [ + "# Get data from gitlab.fabcloud.org\n", + "# Read XLSX sheet with sdg icon codes \n", + "url = 'https://gitlab.fabcloud.org/fl-management/fl-sdgs/sdg-workshop/-/raw/master/'\n", + "url = url + 'local-workshop-sources/sdg-icon-translator.xlsx' \n", + "timestamp = datetime.datetime.utcnow()\n", + "sdgicons = pd.read_excel(url, 'en', index_col=0)\n", + "\n", + "mytable.shape\n", + "mytable = pd.merge(mytable, sdgicons, how=\"left\", on=\"SDG-code\")\n", + "mytable.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>icon-text</th>\n", + " </tr>\n", + " <tr>\n", + " <th>code</th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>SDG-01</th>\n", + " <td>No poverty</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-02</th>\n", + " <td>Zero hunger</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-03</th>\n", + " <td>Good health and well-being</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-04</th>\n", + " <td>Quality education</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-05</th>\n", + " <td>Gender equality</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-06</th>\n", + " <td>Clean water and sanitation</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-07</th>\n", + " <td>Affordable and clean energy</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-08</th>\n", + " <td>Decent work and economic growth</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-09</th>\n", + " <td>Industry, innovation and infrastructure</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-10</th>\n", + " <td>Reduced inequalities</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-11</th>\n", + " <td>Sustainable cities and communities</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-12</th>\n", + " <td>Responsible consumption and production</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-13</th>\n", + " <td>Climate action</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-14</th>\n", + " <td>Life below water</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-15</th>\n", + " <td>Life on land</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-16</th>\n", + " <td>Peace, justice and strong institutions</td>\n", + " </tr>\n", + " <tr>\n", + " <th>SDG-17</th>\n", + " <td>Partnerships for the goals</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " icon-text\n", + "code \n", + "SDG-01 No poverty\n", + "SDG-02 Zero hunger\n", + "SDG-03 Good health and well-being\n", + "SDG-04 Quality education\n", + "SDG-05 Gender equality\n", + "SDG-06 Clean water and sanitation\n", + "SDG-07 Affordable and clean energy\n", + "SDG-08 Decent work and economic growth\n", + "SDG-09 Industry, innovation and infrastructure\n", + "SDG-10 Reduced inequalities\n", + "SDG-11 Sustainable cities and communities\n", + "SDG-12 Responsible consumption and production\n", + "SDG-13 Climate action\n", + "SDG-14 Life below water\n", + "SDG-15 Life on land\n", + "SDG-16 Peace, justice and strong institutions\n", + "SDG-17 Partnerships for the goals" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sdgicons.head(20)" ] }, { diff --git a/local-workshop-sources/sdg-icon-translator.xlsx b/local-workshop-sources/sdg-icon-translator.xlsx index 6f807e745107e9e6cc616ea90e03c54e8efe6b0b..a49fb1332776b41fc405e45c625e84a4d38425ee 100644 GIT binary patch delta 8933 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 delta 8856 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 DN)-JE -- GitLab