From 239090dccf67a3c8f0c704b958fe05c6637bcbf7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 27 Aug 2021 03:15:17 +0800 Subject: [PATCH 0001/2002] Committed 2021/08/27 --- The attainments and realizations of my dreams/data_gov.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 The attainments and realizations of my dreams/data_gov.py diff --git a/The attainments and realizations of my dreams/data_gov.py b/The attainments and realizations of my dreams/data_gov.py new file mode 100644 index 00000000..e472e033 --- /dev/null +++ b/The attainments and realizations of my dreams/data_gov.py @@ -0,0 +1 @@ +# https://data.gov.tw/ \ No newline at end of file From 5e59edacbcf25588cc73b2e03e7bea933a23eea1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 02:21:55 +0800 Subject: [PATCH 0002/2002] Committed 2021/08/29 --- .../Visualization and preparation in pandas2.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas2.py diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas2.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas2.py new file mode 100644 index 00000000..a4415d3c --- /dev/null +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas2.py @@ -0,0 +1,4 @@ +import pandas as pd + +train = pd.read_csv('train_1.csv').fillna(0) +print(train.head()) From fbb166a15cc475b542083018561e159af779ce00 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 02:28:20 +0800 Subject: [PATCH 0003/2002] Committed 2021/08/29 --- .../Visualization and preparation in pandas2.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas2.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas2.py index a4415d3c..8b08a5ad 100644 --- a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas2.py +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas2.py @@ -2,3 +2,10 @@ train = pd.read_csv('train_1.csv').fillna(0) print(train.head()) + +def parse_page(page): + x = page.split('_') # split the string by underscore. + return ''.join(x[:-3]), x[-3], x[-2], x[-1] + + +print(parse_page(train.Page[0])) From ef8de0cfd7a765d8f90556b896e0a932ac6e1026 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 02:37:09 +0800 Subject: [PATCH 0004/2002] Committed 2021/08/29 --- .../Visualization and preparation pandas3.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation pandas3.py diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation pandas3.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation pandas3.py new file mode 100644 index 00000000..8b08a5ad --- /dev/null +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation pandas3.py @@ -0,0 +1,11 @@ +import pandas as pd + +train = pd.read_csv('train_1.csv').fillna(0) +print(train.head()) + +def parse_page(page): + x = page.split('_') # split the string by underscore. + return ''.join(x[:-3]), x[-3], x[-2], x[-1] + + +print(parse_page(train.Page[0])) From 2d52da5acc3e493f84e1265f20c03051c80349f7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 02:39:40 +0800 Subject: [PATCH 0005/2002] Committed 2021/08/29 --- .../Visualization and preparation pandas3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation pandas3.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation pandas3.py index 8b08a5ad..3be93828 100644 --- a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation pandas3.py +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation pandas3.py @@ -8,4 +8,4 @@ def parse_page(page): return ''.join(x[:-3]), x[-3], x[-2], x[-1] -print(parse_page(train.Page[0])) +print(parse_page(train.loc['Page', 0])) From bdee9e26e46c7e3339398f5ce094667d28a23687 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 02:41:00 +0800 Subject: [PATCH 0006/2002] Committed 2021/08/29 --- .../Visualization and preparation in pandas 4.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 4.py diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 4.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 4.py new file mode 100644 index 00000000..0adfc58a --- /dev/null +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 4.py @@ -0,0 +1,11 @@ +import pandas as pd + +train = pd.read_csv('train_1.csv').fillna(0) +print(train.head()) + +def parse_page(page): + x = page.split('_') # split the string by underscore. + return ''.join(x[:-3]), x[-3], x[-2], x[-1] + + +print(parse_page(train.Page)) From fe0769ceb517f4acf7f42084157a8434baa2c5e9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 02:42:34 +0800 Subject: [PATCH 0007/2002] Committed 2021/08/29 --- .../Visualization and preparation in pandas 5.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 5.py diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 5.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 5.py new file mode 100644 index 00000000..d9717386 --- /dev/null +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 5.py @@ -0,0 +1,11 @@ +import pandas as pd + +train = pd.read_csv('train_1.csv').fillna(0) +print(train.head()) + +def parse_page(page): + x = page.split('_') # split the string by underscore. + return ''.join(x[:-3]), x[-3], x[-2], x[-1] + + +print(parse_page(train.Page[1])) From c0c7ad47a81617d092b94339e9a1c9c3e7ca1db1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 02:43:13 +0800 Subject: [PATCH 0008/2002] Committed 2021/08/29 --- .../Visualization and preparation in pandas 6.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 6.py diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 6.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 6.py new file mode 100644 index 00000000..9b92003e --- /dev/null +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 6.py @@ -0,0 +1,11 @@ +import pandas as pd + +train = pd.read_csv('train_1.csv').fillna(0) +print(train.head()) + +def parse_page(page): + x = page.split('_') # split the string by underscore. + return ''.join(x[:-3]), x[-3], x[-2], x[-1] + + +print(parse_page(train.Page[3])) From 496acc6b995455de35fae7202a0f27aeb1da6c73 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 02:44:10 +0800 Subject: [PATCH 0009/2002] Committed 2021/08/29 --- .../Visualization and preparation in pandas 6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 6.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 6.py index 9b92003e..a97955d0 100644 --- a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 6.py +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 6.py @@ -8,4 +8,4 @@ def parse_page(page): return ''.join(x[:-3]), x[-3], x[-2], x[-1] -print(parse_page(train.Page[3])) +print(parse_page(train.Page[2])) From ec0d646bb83894992e0a4e8899d13dcf32e38eeb Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 14:56:16 +0800 Subject: [PATCH 0010/2002] Committed 2021/08/29 --- .../Visualization and preparation in pandas 7.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 7.py diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 7.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 7.py new file mode 100644 index 00000000..ecd530fc --- /dev/null +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 7.py @@ -0,0 +1,15 @@ +import pandas as pd + +train = pd.read_csv('train_1.csv').fillna(0) +print(train.head()) + +def parse_page(page): + x = page.split('_') # split the string by underscore. + return ''.join(x[:-3]), x[-3], x[-2], x[-1] + + +print(parse_page(train.Page[0])) + +trimmed_train = parse_page(train) + +print(trimmed_train.head()) From 17ed7b9d202e272af46a6fb4752001826c5a408f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 22:25:05 +0800 Subject: [PATCH 0011/2002] Committed 2021/08/29 --- .../Visualization and preparation in pandas 8.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py new file mode 100644 index 00000000..a97955d0 --- /dev/null +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py @@ -0,0 +1,11 @@ +import pandas as pd + +train = pd.read_csv('train_1.csv').fillna(0) +print(train.head()) + +def parse_page(page): + x = page.split('_') # split the string by underscore. + return ''.join(x[:-3]), x[-3], x[-2], x[-1] + + +print(parse_page(train.Page[2])) From baf85cccb2536645e3f2ab3cabe06ca29e84ac50 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 23:12:24 +0800 Subject: [PATCH 0012/2002] Committed 2021/08/29 --- .../Visualization and preparation in pandas 8.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py index a97955d0..182a5f67 100644 --- a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py @@ -8,4 +8,12 @@ def parse_page(page): return ''.join(x[:-3]), x[-3], x[-2], x[-1] -print(parse_page(train.Page[2])) +print(parse_page(train.Page[0])) + + +l = list(train.Page.apply(parse_page)) +df = pd.DataFrame(l) +df.columns = ['Subject', 'Sub_Page', 'Access', 'Agent'] + +train = pd.concat([train, df], axis=1) +del train['Page'] From c714ceb662c1921e94c221212988e7047095811d Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 23:15:40 +0800 Subject: [PATCH 0013/2002] Committed 2021/08/29 --- ...lization and preparation in pandas 8.ipynb | 56 +++++++++++++++++++ ...sualization and preparation in pandas 8.py | 2 + 2 files changed, 58 insertions(+) create mode 100644 Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.ipynb diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.ipynb b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.ipynb new file mode 100644 index 00000000..98ab8d5e --- /dev/null +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.ipynb @@ -0,0 +1,56 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "train = pd.read_csv('train_1.csv').fillna(0)\n", + "print(train.head())\n", + "\n", + "def parse_page(page):\n", + " x = page.split('_') # split the string by underscore.\n", + " return ''.join(x[:-3]), x[-3], x[-2], x[-1]\n", + "\n", + "\n", + "print(parse_page(train.Page[0]))\n", + "\n", + "\n", + "l = list(train.Page.apply(parse_page))\n", + "df = pd.DataFrame(l)\n", + "df.columns = ['Subject', 'Sub_Page', 'Access', 'Agent']\n", + "\n", + "train = pd.concat([train, df], axis=1)\n", + "del train['Page']\n", + "\n", + "train.Sub_Page.value_counts().plot(kind='bar')\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py index 182a5f67..1499c8ff 100644 --- a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.py @@ -17,3 +17,5 @@ def parse_page(page): train = pd.concat([train, df], axis=1) del train['Page'] + +train.Sub_Page.value_counts().plot(kind='bar') From 0a11007f10f64a1baa7fdef82c0f8ab676e46c8f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 29 Aug 2021 23:24:22 +0800 Subject: [PATCH 0014/2002] Committed 2021/08/29 --- ...lization and preparation in pandas 8.ipynb | 65 ++++++++++++++++++- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.ipynb b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.ipynb index 98ab8d5e..209d6b78 100644 --- a/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.ipynb +++ b/Machine Learning for Finance/Chapter4 - Time Series/Visualization and preparation in pandas 8.ipynb @@ -2,11 +2,66 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "collapsed": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Page 2015-07-01 2015-07-02 \\\n", + "0 2NE1_zh.wikipedia.org_all-access_spider 18.0 11.0 \n", + "1 2PM_zh.wikipedia.org_all-access_spider 11.0 14.0 \n", + "2 3C_zh.wikipedia.org_all-access_spider 1.0 0.0 \n", + "3 4minute_zh.wikipedia.org_all-access_spider 35.0 13.0 \n", + "4 52_Hz_I_Love_You_zh.wikipedia.org_all-access_s... 0.0 0.0 \n", + "\n", + " 2015-07-03 2015-07-04 2015-07-05 2015-07-06 2015-07-07 2015-07-08 \\\n", + "0 5.0 13.0 14.0 9.0 9.0 22.0 \n", + "1 15.0 18.0 11.0 13.0 22.0 11.0 \n", + "2 1.0 1.0 0.0 4.0 0.0 3.0 \n", + "3 10.0 94.0 4.0 26.0 14.0 9.0 \n", + "4 0.0 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " 2015-07-09 ... 2016-12-22 2016-12-23 2016-12-24 2016-12-25 \\\n", + "0 26.0 ... 32.0 63.0 15.0 26.0 \n", + "1 10.0 ... 17.0 42.0 28.0 15.0 \n", + "2 4.0 ... 3.0 1.0 1.0 7.0 \n", + "3 11.0 ... 32.0 10.0 26.0 27.0 \n", + "4 0.0 ... 48.0 9.0 25.0 13.0 \n", + "\n", + " 2016-12-26 2016-12-27 2016-12-28 2016-12-29 2016-12-30 2016-12-31 \n", + "0 14.0 20.0 22.0 19.0 18.0 20.0 \n", + "1 9.0 30.0 52.0 45.0 26.0 20.0 \n", + "2 4.0 4.0 6.0 3.0 4.0 17.0 \n", + "3 16.0 11.0 17.0 19.0 10.0 11.0 \n", + "4 3.0 11.0 27.0 13.0 36.0 10.0 \n", + "\n", + "[5 rows x 551 columns]\n", + "('2NE1', 'zh.wikipedia.org', 'all-access', 'spider')\n" + ] + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEgCAYAAABBzo+bAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAThElEQVR4nO3dfbCedZ3f8ffHRBRpgSApYxPWZMeMW7RrxSxka6cPpAsB3Q3TuhTrLhlLyR/i1tqdVdzZDlMfpjrTWVdaZZaRrMG6sizuLKmGpSm63ba7IEEUBGQ4w8OSlIesiUDXUUS//eP+HbzP4fwSc25yrnDO+zVzz31d3+t33df3ZDLnc67HO1WFJElzecnQDUiSjl6GhCSpy5CQJHUZEpKkLkNCktRlSEiSupYP3cAL7eSTT641a9YM3YYkvajcfvvtf1VVK2fXF11IrFmzht27dw/dhiS9qCR5eK66h5skSV2GhCSpy5CQJHUZEpKkLkNCktRlSEiSugwJSVKXISFJ6lp0N9O9WKy57EtDt7BoPPTRtwzdgrRouSchSeoyJCRJXYaEJKnLkJAkdRkSkqQuQ0KS1GVISJK6DAlJUpchIUnqMiQkSV2GhCSpy5CQJHUZEpKkLkNCktRlSEiSug4ZEkm2JXkiyTfHaicl2ZXk/va+otWT5IokU0nuTHL62Dpb2vj7k2wZq78pyV1tnSuS5GDbkCQtnJ9kT+IzwKZZtcuAm6tqHXBzmwc4F1jXXluBK2H0Cx+4HDgTOAO4fOyX/pXAJWPrbTrENiRJC+SQIVFVfwbsn1XeDGxv09uB88fq19TILcCJSV4FnAPsqqr9VXUA2AVsasuOr6pbqqqAa2Z91lzbkCQtkPmekzilqh5t048Bp7TpVcAjY+P2tNrB6nvmqB9sG8+TZGuS3Ul279u3bx4/jiRpLhOfuG57APUC9DLvbVTVVVW1vqrWr1y58ki2IklLynxD4vF2qIj2/kSr7wVOHRu3utUOVl89R/1g25AkLZD5hsQOYPoKpS3ADWP1i9pVThuAJ9sho5uAs5OsaCeszwZuasueSrKhXdV00azPmmsbkqQFsvxQA5J8HvjHwMlJ9jC6SumjwHVJLgYeBi5ow3cC5wFTwHeBdwJU1f4kHwJua+M+WFXTJ8PfxegKqmOBG9uLg2xDkrRADhkSVfX2zqKNc4wt4NLO52wDts1R3w28fo76t+fahiRp4XjHtSSpy5CQJHUZEpKkLkNCktRlSEiSugwJSVKXISFJ6jIkJEldhoQkqcuQkCR1GRKSpC5DQpLUZUhIkroMCUlSlyEhSeoyJCRJXYaEJKnLkJAkdRkSkqQuQ0KS1GVISJK6DAlJUpchIUnqMiQkSV2GhCSpy5CQJHUZEpKkLkNCktQ1UUgkeW+Su5N8M8nnk7w8ydoktyaZSvIHSY5pY1/W5qfa8jVjn/OBVr8vyTlj9U2tNpXkskl6lSQdvnmHRJJVwL8B1lfV64FlwIXAx4CPV9VrgAPAxW2Vi4EDrf7xNo4kp7X1XgdsAj6VZFmSZcAngXOB04C3t7GSpAUy6eGm5cCxSZYDrwAeBc4Crm/LtwPnt+nNbZ62fGOStPq1VfX9qnoQmALOaK+pqnqgqp4Brm1jJUkLZN4hUVV7gf8E/CWjcHgSuB34TlU924btAVa16VXAI23dZ9v4V47XZ63Tq0uSFsgkh5tWMPrLfi3wt4HjGB0uWnBJtibZnWT3vn37hmhBkhalSQ43/VPgwaraV1U/AP4IeDNwYjv8BLAa2Num9wKnArTlJwDfHq/PWqdXf56quqqq1lfV+pUrV07wI0mSxk0SEn8JbEjyinZuYSNwD/AV4G1tzBbghja9o83Tln+5qqrVL2xXP60F1gFfBW4D1rWrpY5hdHJ7xwT9SpIO0/JDD5lbVd2a5Hrga8CzwB3AVcCXgGuTfLjVrm6rXA18NskUsJ/RL32q6u4k1zEKmGeBS6vqhwBJ3g3cxOjKqW1Vdfd8+5UkHb55hwRAVV0OXD6r/ACjK5Nmj/0e8Mudz/kI8JE56juBnZP0KEmaP++4liR1GRKSpC5DQpLUZUhIkroMCUlSlyEhSeoyJCRJXYaEJKnLkJAkdRkSkqQuQ0KS1GVISJK6DAlJUpchIUnqMiQkSV2GhCSpy5CQJHUZEpKkLkNCktRlSEiSugwJSVKXISFJ6jIkJEldhoQkqcuQkCR1GRKSpC5DQpLUZUhIkroMCUlS10QhkeTEJNcn+VaSe5P8fJKTkuxKcn97X9HGJskVSaaS3Jnk9LHP2dLG359ky1j9TUnuautckSST9CtJOjyT7kl8AviTqvoZ4A3AvcBlwM1VtQ64uc0DnAusa6+twJUASU4CLgfOBM4ALp8OljbmkrH1Nk3YryTpMMw7JJKcAPxD4GqAqnqmqr4DbAa2t2HbgfPb9Gbgmhq5BTgxyauAc4BdVbW/qg4Au4BNbdnxVXVLVRVwzdhnSZIWwCR7EmuBfcDvJbkjyaeTHAecUlWPtjGPAae06VXAI2Pr72m1g9X3zFF/niRbk+xOsnvfvn0T/EiSpHGThMRy4HTgyqp6I/DX/PjQEgBtD6Am2MZPpKquqqr1VbV+5cqVR3pzkrRkTBISe4A9VXVrm7+eUWg83g4V0d6faMv3AqeOrb+61Q5WXz1HXZK0QOYdElX1GPBIkte20kbgHmAHMH2F0hbghja9A7ioXeW0AXiyHZa6CTg7yYp2wvps4Ka27KkkG9pVTReNfZYkaQEsn3D9XwM+l+QY4AHgnYyC57okFwMPAxe0sTuB84Ap4LttLFW1P8mHgNvauA9W1f42/S7gM8CxwI3tJUlaIBOFRFV9HVg/x6KNc4wt4NLO52wDts1R3w28fpIeJUnz5x3XkqQuQ0KS1GVISJK6DAlJUpchIUnqMiQkSV2GhCSpy5CQJHUZEpKkLkNCktRlSEiSugwJSVKXISFJ6jIkJEldhoQkqcuQkCR1GRKSpC5DQpLUZUhIkroMCUlSlyEhSeoyJCRJXYaEJKnLkJAkdRkSkqQuQ0KS1GVISJK6DAlJUtfEIZFkWZI7knyxza9NcmuSqSR/kOSYVn9Zm59qy9eMfcYHWv2+JOeM1Te12lSSyybtVZJ0eF6IPYn3APeOzX8M+HhVvQY4AFzc6hcDB1r9420cSU4DLgReB2wCPtWCZxnwSeBc4DTg7W2sJGmBTBQSSVYDbwE+3eYDnAVc34ZsB85v05vbPG35xjZ+M3BtVX2/qh4EpoAz2muqqh6oqmeAa9tYSdICmXRP4neA9wE/avOvBL5TVc+2+T3Aqja9CngEoC1/so1/rj5rnV5dkrRA5h0SSd4KPFFVt7+A/cy3l61JdifZvW/fvqHbkaRFY5I9iTcDv5TkIUaHgs4CPgGcmGR5G7Ma2Num9wKnArTlJwDfHq/PWqdXf56quqqq1lfV+pUrV07wI0mSxs07JKrqA1W1uqrWMDrx/OWqegfwFeBtbdgW4IY2vaPN05Z/uaqq1S9sVz+tBdYBXwVuA9a1q6WOadvYMd9+JUmHb/mhhxy29wPXJvkwcAdwdatfDXw2yRSwn9Evfarq7iTXAfcAzwKXVtUPAZK8G7gJWAZsq6q7j0C/kqSOFyQkqupPgT9t0w8wujJp9pjvAb/cWf8jwEfmqO8Edr4QPUqSDp93XEuSugwJSVKXISFJ6joSJ64lvYituexLQ7ewqDz00bcM3cJE3JOQJHUZEpKkLkNCktRlSEiSugwJSVKXISFJ6jIkJEldhoQkqcuQkCR1GRKSpC5DQpLUZUhIkroMCUlSlyEhSeoyJCRJXYaEJKnLkJAkdRkSkqQuQ0KS1GVISJK6DAlJUpchIUnqMiQkSV2GhCSpy5CQJHXNOySSnJrkK0nuSXJ3kve0+klJdiW5v72vaPUkuSLJVJI7k5w+9llb2vj7k2wZq78pyV1tnSuSZJIfVpJ0eCbZk3gW+PWqOg3YAFya5DTgMuDmqloH3NzmAc4F1rXXVuBKGIUKcDlwJnAGcPl0sLQxl4ytt2mCfiVJh2neIVFVj1bV19r008C9wCpgM7C9DdsOnN+mNwPX1MgtwIlJXgWcA+yqqv1VdQDYBWxqy46vqluqqoBrxj5LkrQAXpBzEknWAG8EbgVOqapH26LHgFPa9CrgkbHV9rTawep75qhLkhbIxCGR5G8AXwD+bVU9Nb6s7QHUpNv4CXrYmmR3kt379u070puTpCVjopBI8lJGAfG5qvqjVn68HSqivT/R6nuBU8dWX91qB6uvnqP+PFV1VVWtr6r1K1eunORHkiSNmeTqpgBXA/dW1W+PLdoBTF+htAW4Yax+UbvKaQPwZDssdRNwdpIV7YT12cBNbdlTSTa0bV009lmSpAWwfIJ13wz8KnBXkq+32m8CHwWuS3Ix8DBwQVu2EzgPmAK+C7wToKr2J/kQcFsb98Gq2t+m3wV8BjgWuLG9JEkLZN4hUVX/G+jdt7BxjvEFXNr5rG3Atjnqu4HXz7dHSdJkvONaktRlSEiSugwJSVKXISFJ6jIkJEldhoQkqcuQkCR1GRKSpC5DQpLUZUhIkroMCUlSlyEhSeoyJCRJXYaEJKnLkJAkdRkSkqQuQ0KS1GVISJK6DAlJUpchIUnqMiQkSV2GhCSpy5CQJHUZEpKkLkNCktRlSEiSugwJSVKXISFJ6jIkJEldR31IJNmU5L4kU0kuG7ofSVpKjuqQSLIM+CRwLnAa8PYkpw3blSQtHUd1SABnAFNV9UBVPQNcC2weuCdJWjKWD93AIawCHhmb3wOcOXtQkq3A1jb7/5LctwC9LRUnA381dBMHk48N3YEGctT/34QX1f/PV89VPNpD4idSVVcBVw3dx2KUZHdVrR+6D2k2/28ujKP9cNNe4NSx+dWtJklaAEd7SNwGrEuyNskxwIXAjoF7kqQl46g+3FRVzyZ5N3ATsAzYVlV3D9zWUuNhPB2t/L+5AFJVQ/cgSTpKHe2HmyRJAzIkJEldhoQkqcuQUFeSlyQ5fug+JA3HkNAMSX4/yfFJjgO+CdyT5DeG7ktKsizJt4buY6kxJDTbaVX1FHA+cCOwFvjVQTuSgKr6IXBfkp8aupel5Ki+T0KDeGmSlzIKif9SVT9IMnBL0nNWAHcn+Srw19PFqvql4Vpa3AwJzfa7wEPAN4A/S/Jq4MlBO5J+7N8P3cBS4810miHJ2qp6cGw+wGuq6v4B25Ke0/5wWVdV/yPJK4BlVfX00H0tVp6T0GxfGJ+p0V8R1w7UizRDkkuA6xnt8cLo6wT+eLCGlgAPNwmAJD8DvA44Ick/G1t0PPDyYbqSnudSRl9GditAVd2f5G8N29LiZkho2muBtwInAr84Vn8auGSIhqQ5fL+qnpm+mCLJcsBj5keQISEAquoG4IYkP19VfzF0P1LH/0zym8CxSX4BeBfw3wbuaVHzxLVmSLKS0Z7DGsb+iKiqfzVUT9K0JC8BLgbOBsLoawQ+Xf4iO2IMCc2Q5M+B/wXcDvxwul5VX+iuJGnRMiQ0Q5KvV9XfG7oPaVySuzjIuYeq+tkFbGdJ8ZyEZvtikvOqaufQjUhj3treL23vn23vv4Inro8o9yQ0Q5KngeOAZ9orjG6X8GmwGlySO6rqjbNqX6uq04fqabFzT0IzVNXfHLoH6SCS5M1V9X/azN/Hm4KPKENCM7THcLwDWFtVH0pyKvCqqvrqwK1JMLqyaVuSExjt5R4AvPLuCPJwk2ZIciXwI+Csqvo7SVYA/72qfm7g1qTntJCgqnz45BHmnoRmO7OqTk9yB0BVHUhyzNBNaWlL8itV9V+T/LtZdQCq6rcHaWwJMCQ02w+SLKNdMdJurvvRsC1JHNfePWe2wDzcpBmSvAP4F8DpwHbgbcBvVdUfDtqYpEEYEnqe9kTYjYxODN5cVfcO3JIEQJKfBj4BbGC0t/sXwHur6oFBG1vEDAnNkOSkOcpPV9UPFrwZaZYktwCfBD7fShcCv1ZVZw7X1eJmSGiGJA8BpzK6tDCMHh3+GPA4cElV3T5Yc1ryktw5+xEcSb5RVW8YqqfFzptQNNsu4LyqOrmqXgmcC3yR0SOZPzVoZxLcmOSyJGuSvDrJ+4CdSU7q7AVrQu5JaIYkd1XV351Vu7OqftaH/2loSR4cm53+5ZXp+ar66QVuadFzT0KzPZrk/e2vtOm/1B5vl8V6KayG9n7gDVW1Fvg94BvAP6+qtQbEkWFIaLZ/Caxm9OXyfwz8VKstAy4YrCtp5Leq6qkk/wA4C/g0cOXAPS1qHm6S9KIx/RTYJP8RuKuqfn+uJ8PqheMd15qh3WH9PuB1wMun61V11mBNST+2N8nvAr8AfCzJy/CIyBHlP65m+xzwLWAt8B+Ah4DbhmxIGnMBo++1PqeqvgOcBPzGoB0tch5u0gxJbq+qN41fj57kNp8CKy1NHm7SbNN3Vj+a5C3A/2X015qkJciQ0Gwfbs/q/3XgPwPHA+8dtiVJQ/FwkySpyxPX6krytaF7kDQsQ0IHk0MPkbSYGRI6mC8N3YCkYXlOQpLU5dVNAiDJ0/z4qZozFjF6uubxC9ySpKOAexKSpC73JAR0v7b0OVW1f6F6kXT0cE9CwHNf5lLMvKJpet4vc5GWKPckBED7Ehfgub2KdYw9BVbS0mRIaIYk/xp4D6MvHvo6sAH4c2DjgG1JGoj3SWi29wA/BzxcVf8EeCPw5LAtSRqKIaHZvldV3wNI8rKq+hbw2oF7kjQQDzdptj1JTmT0/da7khwAHh60I0mD8eomdSX5R8AJwJ9U1TND9yNp4RkSkqQuz0lIkroMCUlSlyEhSeoyJCRJXYaEJKnr/wPZPW/0e1qE1wAAAABJRU5ErkJggg==\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "import pandas as pd\n", "\n", @@ -28,7 +83,11 @@ "train = pd.concat([train, df], axis=1)\n", "del train['Page']\n", "\n", - "train.Sub_Page.value_counts().plot(kind='bar')\n" + "train.Sub_Page.value_counts().plot(kind='bar')\n", + "\n", + "train.Access.value_counts().plot(kind='bar')\n", + "\n", + "train.Agent.value_counts().plot(kind='bar')" ] } ], From 7be0d3b6f22bfa435e56a75a4bb60cf328953250 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 02:33:39 +0800 Subject: [PATCH 0015/2002] Committed 2021/08/31 --- ...November_daily_mobile_user_by_township.csv | 370 ++++++++++++++++++ ...ily_mobile_user_distribution_by_county.csv | 24 ++ 2 files changed, 394 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_November_daily_mobile_user_by_township.csv create mode 100644 The attainments and realizations of my dreams/2020_November_daily_mobile_user_distribution_by_county.csv diff --git a/The attainments and realizations of my dreams/2020_November_daily_mobile_user_by_township.csv b/The attainments and realizations of my dreams/2020_November_daily_mobile_user_by_township.csv new file mode 100644 index 00000000..194d41ac --- /dev/null +++ b/The attainments and realizations of my dreams/2020_November_daily_mobile_user_by_township.csv @@ -0,0 +1,370 @@ +COUNTY_ID,COUNTY,TOWN_ID,TOWN,NIGHT_WORK,DAY_WORK(7:00~13:00),DAY_WORK(13:00~19:00),DAY_WORK,NIGHT_WEEKEND,DAY_WEEKEND(7:00~13:00),DAY_WEEKEND(13:00~19:00),DAY_WEEKEND,MORNING_WORK,MIDDAY_WORK,AFTERNOON_WORK,EVENING_WORK,MORNING_WEEKEND,MIDDAY_WEEKEND,AFTERNOON_WEEKEND,EVENING_WEEKEND,INFO_TIME +縣市代碼,縣市名稱,鄉鎮市區代碼,鄉鎮市區名稱,平日夜間停留人數,平日上午活動人數,平日下午活動人數,平日日間活動人數,假日夜間停留人數,假日上午活動人數,假日下午活動人數,假日日間活動人數,平日早晨旅次,平日中午旅次,平日午後旅次,平日晚上旅次,假日早晨旅次,假日中午旅次,假日午後旅次,假日晚上旅次,資料時間 +65000,新北市,65000010,板橋區,577007,468604,459821,461811,574620,553665,547852,552865,1370756.45,1199378.12,1217279.46,1417770.61,1181447.57,1447237.98,1452579.49,1427165.52,"109Y11M" +65000,新北市,65000020,三重區,426580,353762,336820,343466,424259,402368,379533,395318,1047368.37,873343.72,880980.15,1000009.8,887589.65,1004799.36,975547.52,939548.09,"109Y11M" +65000,新北市,65000030,中和區,470287,414013,398795,408358,466276,439917,417541,433865,1142144.94,995924.74,991048.66,1074345.45,966434.32,1062291.77,1036495.62,972990.59,"109Y11M" +65000,新北市,65000040,永和區,232342,169268,157426,161573,230134,215493,199485,210496,513518.18,415321.92,414020.3,495365.41,461549.08,526167.13,495412.61,485350.57,"109Y11M" +65000,新北市,65000050,新莊區,446481,381702,374563,377239,443620,426704,419179,426607,1093803.05,925342.9,929744.79,1077273.18,925176.4,1086124.76,1056036.59,1001453.5,"109Y11M" +65000,新北市,65000060,新店區,346150,316147,303348,309344,343603,332771,315198,328460,780546.29,694581.09,693588.67,718829.75,650811.86,746315.92,729628.39,657317.14,"109Y11M" +65000,新北市,65000070,樹林區,202270,190785,187977,189656,202721,195384,190928,195311,489739.83,420652.53,426735.44,451024.04,397929.01,447903.69,441277.45,430214.61,"109Y11M" +65000,新北市,65000080,鶯歌區,90900,81480,80218,80939,91143,87876,86757,87625,207558.07,171225.54,179422.75,188227.64,175110.32,203134.32,207767.99,192814.35,"109Y11M" +65000,新北市,65000090,三峽區,120827,105834,104205,104524,121910,123685,120884,122589,258058.78,234151.71,238437.49,244033.42,238756.25,304760.89,301355.44,253190.16,"109Y11M" +65000,新北市,65000100,淡水區,235166,200804,192902,196262,234006,227406,220763,225959,468611.45,453055.6,460827.05,450049.09,409227.35,533757.47,562575.43,471627.85,"109Y11M" +65000,新北市,65000110,汐止區,259462,234013,223014,227807,259805,247347,232960,243506,588586.26,480129.77,475233.5,526224.59,485203.33,534883.69,516922.47,471051.97,"109Y11M" +65000,新北市,65000120,瑞芳區,33298,33380,33374,33374,34345,36259,36704,35860,56586.45,62319.98,64715.77,49256.86,57645.72,90116.07,95374.24,61092.11,"109Y11M" +65000,新北市,65000130,土城區,242008,211738,205000,207403,240563,229233,218697,225948,619026.69,507068.99,514722.42,575021,518413.11,577338.38,561179.73,532459.03,"109Y11M" +65000,新北市,65000140,蘆洲區,210422,150543,142963,145716,210220,193690,182361,190832,461029.82,363415.54,366123.96,445831.58,425043.55,467603.69,446583,436861.52,"109Y11M" +65000,新北市,65000150,五股區,112579,131500,128237,130717,109709,107895,103437,106893,312190.18,269293.75,280567.65,271897.19,221087.58,251046.33,261185.71,232732.31,"109Y11M" +65000,新北市,65000160,泰山區,101023,97232,95286,96175,98966,95327,91470,94406,273883.86,236042.73,246053.9,265467.5,204326.81,239841.43,238979.54,235378.79,"109Y11M" +65000,新北市,65000170,林口區,138129,127658,126810,127409,138265,139516,143771,141132,286107.83,273126.57,276164.83,270630.54,239715.4,308481.96,309984.44,261116.77,"109Y11M" +65000,新北市,65000180,深坑區,30628,29127,27933,28657,30581,28912,28076,28824,60695.94,57122.88,55999.24,52397.97,51217.66,61684.93,63213.94,51022.48,"109Y11M" +65000,新北市,65000190,石碇區,6719,7084,7040,6973,6984,8816,9356,8749,20558.41,26989.57,26370.66,22270.14,32238.45,42521.06,45916,38472.39,"109Y11M" +65000,新北市,65000200,坪林區,3071,3707,3698,3635,3786,5788,6234,5777,13534.88,18995.16,20640.25,17210.58,22234.57,31291.11,33931.2,28502.84,"109Y11M" +65000,新北市,65000210,三芝區,21841,18875,18717,18639,21534,20638,20673,20507,31984.16,32812.82,32779.48,27818.28,31436.41,43331.02,43626.92,31059.73,"109Y11M" +65000,新北市,65000220,石門區,5102,5620,5531,5601,5172,5757,5900,5643,8107.19,10294.14,11030.19,6487.64,8290.13,16703.47,19568.91,9496.23,"109Y11M" +65000,新北市,65000230,八里區,47451,48517,47251,47821,47345,47979,46819,47437,105559.31,99663.65,105821.11,92549.96,86148.55,118936.81,137913.41,100045.49,"109Y11M" +65000,新北市,65000240,平溪區,2439,2633,2666,2604,2828,4067,4447,4022,3705.67,5783.48,5943.02,3061.05,5267.21,12517.56,13428.14,5573.23,"109Y11M" +65000,新北市,65000250,雙溪區,4538,4741,4631,4660,5162,6157,6482,6243,6829.37,7772.16,7717.28,5768.58,8622.31,13214.38,13504.75,8860.25,"109Y11M" +65000,新北市,65000260,貢寮區,6502,7079,6999,7022,7553,9801,9671,9330,11007.03,15825.27,15079.86,8925.23,15539.41,30327.41,30397.38,15856.29,"109Y11M" +65000,新北市,65000270,金山區,15678,15714,15535,15509,17104,19647,20098,19171,25439.61,31966.18,32292.06,22814.81,28516.66,51838.25,54055.61,30540.66,"109Y11M" +65000,新北市,65000280,萬里區,12752,13460,13227,13256,13950,15561,15670,15017,22704.77,28568.71,29142.71,19513.19,25108.9,49230.37,53013.56,28411.33,"109Y11M" +65000,新北市,65000290,烏來區,3229,3936,4048,3876,3834,5837,6222,5384,4868.58,8118.39,8000.62,4617.71,6414.05,14859.23,15543.34,8010.01,"109Y11M" +63000,臺北市,63000010,松山區,201847,278577,294479,288682,198307,207148,218976,211526,521066.66,703588.87,688431.01,634827.78,361013.08,511214.65,515887.31,464836.35,"109Y11M" +63000,臺北市,63000020,信義區,236301,312330,338883,328477,234946,244931,301650,266716,549680.14,699285.47,703489.59,668899.81,410262.42,638423.7,701300.63,597514.4,"109Y11M" +63000,臺北市,63000030,大安區,334939,448353,496305,476810,327922,356418,394107,371353,841288.88,1180592.25,1193389.78,1124240.4,596488.2,996480.53,1038302.46,891852.58,"109Y11M" +63000,臺北市,63000040,中山區,314134,453504,484182,471923,308580,331447,359996,340438,882921.14,1227946.97,1219019.04,1120933.64,616316.14,962611.85,991624.89,855812.84,"109Y11M" +63000,臺北市,63000050,中正區,183571,318569,345815,333549,178225,223195,267469,237208,657854.5,902223.4,895413.81,861093.63,419579.2,801455.08,851999.89,703209.61,"109Y11M" +63000,臺北市,63000060,大同區,125418,143388,149558,146631,125027,130048,143113,134317,400459.23,447197.46,460690.17,470477.6,284903.89,452753.33,492620.61,431231.93,"109Y11M" +63000,臺北市,63000070,萬華區,183951,161837,162279,160601,186390,183850,185284,183265,482640.39,463662.07,490861.04,529077.34,424306.76,560541.22,607057.01,560228.11,"109Y11M" +63000,臺北市,63000080,文山區,260906,221079,210668,215166,256102,252317,240318,249444,535979.1,461829.39,458132.66,484333.34,454376.23,544622.79,512993.29,446438.7,"109Y11M" +63000,臺北市,63000090,南港區,123953,168901,170643,170328,122662,135421,149331,141019,335857.03,353446.44,347861.3,342036.21,239274.99,317771.44,323709.46,274099.54,"109Y11M" +63000,臺北市,63000100,內湖區,294476,385468,388762,390671,286916,292090,286475,292574,697747.58,781412.78,754385.72,721408.5,502062.5,628229.13,610269.61,523692.17,"109Y11M" +63000,臺北市,63000110,士林區,286684,283476,280044,281141,283098,286366,285187,286371,669196.93,670775.71,688329.13,661448.7,534595.29,719896.18,726237.04,636598.56,"109Y11M" +63000,臺北市,63000120,北投區,243777,249467,242226,244263,239494,243647,235543,239692,534436.23,540547.56,532752.46,499448.25,437599.62,564035.14,548401.9,455205.34,"109Y11M" +68000,桃園市,68000010,桃園區,443150,401364,403195,401918,447526,440559,440225,442199,975584.11,936458.1,958419.34,1018892.55,854713.41,1075423.17,1078825.09,990814.61,"109Y11M" +68000,桃園市,68000020,中壢區,468601,450257,454518,451317,468876,469583,490444,474835,1022260.83,1025793.97,1047029.78,1090579.96,879879.24,1158826.39,1192282.39,1102812.77,"109Y11M" +68000,桃園市,68000030,大溪區,89265,82238,82166,81939,91840,91237,93323,91201,190073.2,176870.76,186668.93,173807.05,178478,257834.99,277379.54,211307.21,"109Y11M" +68000,桃園市,68000040,楊梅區,181003,179617,177855,179200,181317,180029,177513,179862,377626.2,330755.21,342821.18,333692.2,320569.81,364456.41,368409.79,327624.94,"109Y11M" +68000,桃園市,68000050,蘆竹區,262574,278499,277114,274994,199968,199107,199704,199396,471499.94,446325.78,454313.53,452915.82,373538.05,454463.71,463861.53,412904.15,"109Y11M" +68000,桃園市,68000060,大園區,125738,153151,158623,159865,121831,132083,138154,137933,259620.28,253518.59,265439.21,225976.75,203438.78,250794.79,270636.03,214348.51,"109Y11M" +68000,桃園市,68000070,龜山區,259439,315950,311267,313829,246122,249477,242195,247414,632987.93,615649.88,610995.12,564611.42,450704.88,516299.61,510651.82,463861.57,"109Y11M" +68000,桃園市,68000080,八德區,199330,175644,174803,175218,200933,191971,191512,192913,425749.19,365606.48,375910.55,404978.41,360551.01,422893.19,420089.31,395916.69,"109Y11M" +68000,桃園市,68000090,龍潭區,130786,139799,138189,138984,130755,133724,133926,133390,260770.6,252951.49,254291.51,228705.29,226551.82,292809.47,293579.23,255318.47,"109Y11M" +68000,桃園市,68000100,平鎮區,225189,202060,199263,200448,225231,215780,210499,214451,485127.31,412198.01,426919.23,452305.9,411198.26,458979.63,461635.02,433509.62,"109Y11M" +68000,桃園市,68000110,新屋區,52784,54826,54511,54690,53746,55759,56423,55912,99520.92,95759.22,96976.75,84400.69,87738.45,109092.55,113091.58,87746.78,"109Y11M" +68000,桃園市,68000120,觀音區,81982,97650,95668,96689,81389,84893,82625,84045,167085.46,155152.29,155771.63,129904.21,130880.18,139557.32,140448.5,114432.04,"109Y11M" +68000,桃園市,68000130,復興區,6855,7763,7687,7763,9511,13550,13132,13149,10709.62,14466.05,14148.37,8174.72,16701.17,31479.56,29840.54,13448.34,"109Y11M" +66000,臺中市,66000010,中區,19009,21887,23711,22578,20498,22347,25530,22872,57423.51,77803.84,80122.38,75824.52,60249.5,109638.77,116809.51,97285.2,"109Y11M" +66000,臺中市,66000020,東區,81226,76757,75410,75833,81823,85360,85909,84697,196414.15,184680.94,189863.3,206267.72,182332.93,234962.03,236747.55,220746.64,"109Y11M" +66000,臺中市,66000030,南區,151530,136222,133158,134292,147685,143053,136538,141618,303741.85,279728.06,282217.33,316935.49,254292.79,297508.81,293489.22,286107.51,"109Y11M" +66000,臺中市,66000040,西區,133233,151193,157865,155399,130641,131778,139848,135049,294583.9,369484.02,371355.56,356275.81,243246.23,375638.33,394331.17,344704.73,"109Y11M" +66000,臺中市,66000050,北區,193464,196233,200128,198527,190248,194863,202097,196526,415990.57,475001.82,484018.99,488547.36,361667.58,514736.36,535916.36,480598.54,"109Y11M" +66000,臺中市,66000060,西屯區,349055,412924,422489,418835,335409,338557,350657,343107,814599.67,885859.66,902772.95,894326.03,634526.14,836673.2,876907.93,829646.31,"109Y11M" +66000,臺中市,66000070,南屯區,202124,219890,222323,221575,198828,204275,208360,205568,454271.13,487248.61,494826.99,503944.39,362981.05,500126.01,507134.61,462756.31,"109Y11M" +66000,臺中市,66000080,北屯區,294667,256613,250342,253377,297223,292777,288201,290829,609859.07,574157.34,590768.41,634196.57,559159.18,696541.84,702371.26,637937.79,"109Y11M" +66000,臺中市,66000090,豐原區,146189,134123,133388,133984,147625,146518,144765,146542,303893.11,288763.04,291393.17,305314.05,279703.7,345073.39,343884.76,312132.42,"109Y11M" +66000,臺中市,66000100,東勢區,36554,32255,32317,32290,39307,39915,39826,39855,63796.22,58982.96,61479.37,57032.19,66972.35,82861.03,82694.84,63405.54,"109Y11M" +66000,臺中市,66000110,大甲區,70767,78200,77942,77940,72278,73740,72150,72832,148900.71,146779.12,148391.56,136695.7,138909.35,170323.36,174562.09,144120.28,"109Y11M" +66000,臺中市,66000120,清水區,79074,71135,70331,70796,79961,78671,77441,78637,144355.79,132218.64,138608.31,131020.69,141269.62,163570.54,179633.02,147194.27,"109Y11M" +66000,臺中市,66000130,沙鹿區,112834,102105,100877,101765,107342,102025,98366,101455,232925.01,222704.86,226540.52,236483.67,199201.25,237235.26,235677.46,223533.6,"109Y11M" +66000,臺中市,66000140,梧棲區,65644,75594,74767,75369,63685,64275,64137,64301,133591.62,132172.14,133956.47,121105.31,109492.92,127301.22,132481.97,112949.02,"109Y11M" +66000,臺中市,66000150,后里區,56870,67298,67072,67228,55406,58320,60880,59235,145881.58,147611.02,148162,132212.53,133662.73,168719.56,183862.72,149461.9,"109Y11M" +66000,臺中市,66000160,神岡區,68693,75663,74789,75173,66966,63653,62138,63523,168384.76,152107.2,157449.98,148186.56,129966.21,139809.44,154017.7,140340.27,"109Y11M" +66000,臺中市,66000170,潭子區,112942,116992,114705,115902,113350,113243,107964,112078,264293.03,230029.75,237456.86,241850.14,221352.9,235040.56,237395.99,219778.91,"109Y11M" +66000,臺中市,66000180,大雅區,107351,116252,116384,116641,103995,98996,96637,98892,253594.01,226502.14,230268.7,235885.23,195180.69,203844.39,208314.47,206414.99,"109Y11M" +66000,臺中市,66000190,新社區,22407,22978,22489,22560,22432,25353,25222,24678,40468.64,49816.16,48612.73,33575.84,43052.38,81076.83,79378.81,38082.59,"109Y11M" +66000,臺中市,66000200,石岡區,11220,9795,9609,9697,12052,12617,12474,12510,23762.93,21709.01,22669.17,20358.83,23990.23,36846.79,39106.23,24342.33,"109Y11M" +66000,臺中市,66000210,外埔區,26969,22887,22605,22752,27648,25736,25295,25692,53071.66,46433.16,48392.1,47052.92,55256.9,59464.68,67049.21,59252.29,"109Y11M" +66000,臺中市,66000220,大安區,14584,12618,12696,12661,14973,14592,14689,14718,23015.32,20581.51,20719.01,19229.84,22481.69,24661.43,25714.45,20992.14,"109Y11M" +66000,臺中市,66000230,烏日區,92898,103156,102146,102761,90152,90705,89143,90332,231358.92,216979.74,226329.99,219547.27,188296.15,217362.41,229950.22,217647.02,"109Y11M" +66000,臺中市,66000240,大肚區,52840,45615,44950,45261,53330,50591,48493,50127,102826.66,86295.65,88122.73,89846.95,98012.23,99197.66,100786.56,95773.17,"109Y11M" +66000,臺中市,66000250,龍井區,89218,78735,76305,77790,88029,83424,80107,82941,185326.3,152704.55,157673.95,166517.38,159120.56,168607.59,175908.62,164676.75,"109Y11M" +66000,臺中市,66000260,霧峰區,81867,89972,89907,90023,78930,78683,77657,78490,184454.09,184038.64,186779.55,174866.39,147346.81,179654.24,180953.83,169650.39,"109Y11M" +66000,臺中市,66000270,太平區,191780,168567,164998,167068,191518,182069,175235,180904,410085.51,356181.18,360111.59,387659.14,358191.06,377040.21,373997.48,357145.93,"109Y11M" +66000,臺中市,66000280,大里區,202540,183927,180985,182106,200622,188289,182899,187144,479710.06,410899.62,424060.64,471580.98,394591.58,439385.01,437051.39,426534.83,"109Y11M" +66000,臺中市,66000290,和平區,16421,17796,17921,17603,20908,30445,29393,28798,23470.55,30516.67,28822.73,18239.4,34625.53,58334.76,50534.02,26299.91,"109Y11M" +67000,臺南市,67000010,新營區,67253,69997,69938,70101,68412,68879,68236,68748,140938.28,144055.62,148290.49,139805.7,130331.14,162444.91,164476.62,147163.47,"109Y11M" +67000,臺南市,67000020,鹽水區,19690,18702,18577,18630,20512,21033,21072,20932,36983.24,34685.9,35350.99,33134.89,37342.8,44002.26,44539.65,34700.75,"109Y11M" +67000,臺南市,67000030,白河區,22117,22094,21813,21783,23742,25951,26211,25339,37983.74,40595.77,42220.46,33091.88,43429.76,60804.71,61877.32,46051.99,"109Y11M" +67000,臺南市,67000040,柳營區,20929,25538,25020,25114,20818,22390,22369,22174,44962.91,47461.58,50543.4,37792.72,39578.29,50102.16,54507.78,44689.46,"109Y11M" +67000,臺南市,67000050,後壁區,24538,24554,24552,24424,25528,26306,26567,26278,44713.61,45815.27,48966.76,40287.25,48198.65,57048.17,64228.8,52349.64,"109Y11M" +67000,臺南市,67000060,東山區,12960,11727,12019,11789,13858,15200,15378,14939,21174.64,22056.89,23521.04,18401.26,27815.37,35480.76,37991.88,26286.72,"109Y11M" +67000,臺南市,67000070,麻豆區,39434,39572,39510,39334,40531,41480,41291,41267,82776.22,82317.55,86052.47,78399.43,81134.46,101326.93,105676.49,89692.98,"109Y11M" +67000,臺南市,67000080,下營區,15750,12333,12625,12502,16747,16322,16724,16410,28510.66,26492.97,28303.8,26939.81,32284.01,38444.63,41776.25,38478.21,"109Y11M" +67000,臺南市,67000090,六甲區,15615,12773,12870,12694,16502,16511,16427,16372,28661.62,26114.01,27823.05,27454.8,32029.46,37334.24,39515.59,31706.83,"109Y11M" +67000,臺南市,67000100,官田區,24512,28596,29018,29006,22935,23951,24002,23870,53241.12,51679.28,54820.01,44945.14,47171.2,55657.34,61607.23,53030.35,"109Y11M" +67000,臺南市,67000110,大內區,7436,6519,6706,6677,7339,8445,8573,8373,10872.8,10813.64,11018.28,9452.61,12483.45,16627.42,16550.5,11427.11,"109Y11M" +67000,臺南市,67000120,佳里區,48073,44317,44651,44339,49682,48956,49162,49283,82112.58,78008.48,80007.8,80368.59,76115.13,91917.2,91871.3,78652.09,"109Y11M" +67000,臺南市,67000130,學甲區,18238,17206,16917,17001,19313,19795,20137,19891,30532.59,29932.53,30316.17,26738.54,31182.35,38087.94,38225.8,28811.27,"109Y11M" +67000,臺南市,67000140,西港區,20172,20489,20632,20556,20692,20908,20626,20797,43740.01,37919.64,39469.32,38578.35,36373.95,41803.62,42505.79,35092.34,"109Y11M" +67000,臺南市,67000150,七股區,13635,13293,12956,13042,14017,15750,15862,15425,21569.23,21879.29,22584.34,17821.79,22506.61,35669.65,37525.72,22580.42,"109Y11M" +67000,臺南市,67000160,將軍區,11967,10732,10680,10772,12464,12942,13095,12977,16402.43,16028.11,16120.56,14163.66,17610.13,22986.59,23372.35,16176.9,"109Y11M" +67000,臺南市,67000170,北門區,8007,8485,8349,8379,8712,11205,10870,10576,12733.73,14748.94,14886.41,10154.39,15669.27,27173.56,27907.39,13811.82,"109Y11M" +67000,臺南市,67000180,新化區,37109,34837,34347,34344,37132,38443,36914,37518,82737.46,70921.22,74028.44,70959.82,76115.77,85298.09,85979.03,72317.32,"109Y11M" +67000,臺南市,67000190,善化區,67629,80119,79408,79957,64937,67566,65493,67334,137815.21,128287.05,129557.66,127785.79,113259.32,128350.94,127612.16,117743.32,"109Y11M" +67000,臺南市,67000200,新市區,66502,96960,96416,96842,63092,65676,64778,65432,185509.77,164114.07,167291.37,162709.59,132925.49,135160.59,140035.18,139998.53,"109Y11M" +67000,臺南市,67000210,安定區,31829,38956,38878,39074,30825,31413,31187,31632,79384.78,71301.94,74402.73,69271.87,59724.27,64505.93,68518.38,61597.63,"109Y11M" +67000,臺南市,67000220,山上區,5916,7593,7493,7510,6236,6965,6971,6891,10745.85,10694.34,10577.59,8382.02,9517.5,11339.56,11685.83,8069.93,"109Y11M" +67000,臺南市,67000230,玉井區,9536,9837,9761,9802,10262,11306,11628,11341,16070.01,16631.25,16962.24,13025.35,18099.47,26029.14,26006.94,16106.81,"109Y11M" +67000,臺南市,67000240,楠西區,6163,6102,6128,6065,6861,7823,8175,7757,8601.01,9474.12,9466.04,6847.69,10268.58,16116.44,15390.92,8640.27,"109Y11M" +67000,臺南市,67000250,南化區,4214,4354,4286,4290,4731,5995,5822,5813,6377.31,6745.15,6920.6,4855.41,9214.51,13452.98,12845.67,6734.48,"109Y11M" +67000,臺南市,67000260,左鎮區,2638,2501,2594,2512,2937,3752,3911,3705,4724.21,4578.42,4817.64,3711.04,5973.05,9575.35,9623.82,5024.15,"109Y11M" +67000,臺南市,67000270,仁德區,94357,109454,107678,108963,92051,93003,92603,92992,229097.33,225956.01,232553.37,211688.81,174036.13,212784.42,224624.94,204669.66,"109Y11M" +67000,臺南市,67000280,歸仁區,66030,65664,66096,65994,64078,63563,63295,63810,140746.05,131098.4,136931.09,134940.2,116980.61,134926.13,141775.74,131869.07,"109Y11M" +67000,臺南市,67000290,關廟區,29618,28036,27871,27924,30305,31068,30389,30829,61920.75,53472.98,56346.28,54999.95,61915.16,70165.99,75030.61,66034.67,"109Y11M" +67000,臺南市,67000300,龍崎區,1664,1916,1813,1837,1755,2651,2780,2519,4529.85,4621.23,5265.89,3660.11,7097.33,9303.53,11091.5,6804.42,"109Y11M" +67000,臺南市,67000310,永康區,280816,275527,271962,273869,274486,265738,257139,263650,636283.22,590206.79,598802.14,630218.01,508797.7,577598.77,572023.81,559259.52,"109Y11M" +67000,臺南市,67000320,東區,177707,161167,163570,161978,177038,172730,174324,173192,384099.63,413803.3,417839.04,447005.15,341258.83,460262.87,452589.03,428706.77,"109Y11M" +67000,臺南市,67000330,南區,110565,103789,101229,102349,111202,107665,103259,106093,248135.18,238962.51,243598.38,249512.49,215756.41,261542.62,269510.43,244445.52,"109Y11M" +67000,臺南市,67000340,北區,132392,115413,114756,114545,132863,127561,122345,125293,273339.15,275860.89,281327.39,300028.61,247269.16,316458.95,312263.06,308521.46,"109Y11M" +67000,臺南市,67000350,安南區,177012,166484,163859,165154,178012,171204,164888,169946,380166.17,337230.68,343067.18,351619.21,318584.81,356752.82,354753.87,320620.13,"109Y11M" +67000,臺南市,67000360,安平區,64930,60808,60142,60384,66256,65350,64038,64551,135908.27,147511.19,151178.65,146852.09,125285.14,184177.65,194204.77,161912.1,"109Y11M" +67000,臺南市,67000370,中西區,78975,92870,101485,97349,82160,88186,106295,93612,198963.95,278892.02,286834.84,280637.24,181232.74,353751.64,389737.46,341423.45,"109Y11M" +64000,高雄市,64000010,鹽埕區,21320,21222,20912,21051,21893,22075,22838,21926,51139.24,60706.39,62369.55,58962.59,49735.94,79101.49,97064.03,82965.68,"109Y11M" +64000,高雄市,64000020,鼓山區,133197,121867,120709,121339,133224,130200,127033,129743,240106.76,245742.62,257161.33,255241.68,216318.25,272061.1,287562.22,254416.41,"109Y11M" +64000,高雄市,64000030,左營區,189101,183697,190281,187038,188083,188652,201976,193214,403168.23,428914.49,444756.2,457172.29,341758.28,472008.83,487534.04,462328.02,"109Y11M" +64000,高雄市,64000040,楠梓區,187386,171808,169998,170692,185341,178423,171643,176877,407128.73,377443.81,379359.7,406053.87,348225.49,380366.17,374574.79,369780.09,"109Y11M" +64000,高雄市,64000050,三民區,315169,291645,287570,288857,311897,307107,294144,302573,675731.64,698208.77,705570.53,721266.38,583982.88,704894.45,685764.05,648365.38,"109Y11M" +64000,高雄市,64000060,新興區,53511,64063,68104,66014,54543,54705,58193,55770,132973.67,177585.18,184425.51,177445.64,111646.91,167791.25,178145.05,171191.18,"109Y11M" +64000,高雄市,64000070,前金區,32269,44519,47879,46296,33056,36817,41670,38389,84367.73,116748.31,119386.52,107229.27,70157.12,111590.09,118578.22,111766.33,"109Y11M" +64000,高雄市,64000080,苓雅區,150111,160641,160836,160381,150830,150753,149166,149401,357201.99,399207.32,410782.91,394230.93,301234.83,393095.74,401065.77,371640.46,"109Y11M" +64000,高雄市,64000090,前鎮區,173373,184341,189379,187131,174738,176819,198168,183597,397228.19,403097.07,419538.69,415898.31,325271.92,443302.73,467375.11,414920.8,"109Y11M" +64000,高雄市,64000100,旗津區,16331,14878,14785,14822,16649,16710,17060,16617,32688.62,35158.11,36645.22,30066.28,31256.3,48430.87,56351.01,38818.8,"109Y11M" +64000,高雄市,64000110,小港區,132172,147378,144897,146665,130848,131773,126510,130094,325544.1,294945.94,309615.2,276411.04,250322.45,265277.03,267271.12,239039.47,"109Y11M" +64000,高雄市,64000120,鳳山區,309643,245791,244284,244857,307589,291186,283322,289693,662473.25,580889.69,608687.66,686077.98,599362.2,691268.56,684910.42,663396.79,"109Y11M" +64000,高雄市,64000130,林園區,49572,45093,44477,44769,50407,49552,48622,49367,103415.11,89958.24,94376.14,95362.9,94900.28,103205.32,103716.54,95179.12,"109Y11M" +64000,高雄市,64000140,大寮區,117164,137597,135906,137400,116115,114837,112370,114528,311235.69,276650.05,298062.25,268313.82,227475.19,246202.51,256652.02,234104.55,"109Y11M" +64000,高雄市,64000150,大樹區,41802,45125,47154,46406,40592,43402,49332,44969,80069.58,82413.25,85521.9,72612.65,69446.55,91880.06,99731.01,77549.06,"109Y11M" +64000,高雄市,64000160,大社區,42449,42401,41029,41679,42145,42715,40692,41993,93637.24,86134.94,87333.21,87003.91,84252.16,90564.29,89136.24,81356.75,"109Y11M" +64000,高雄市,64000170,仁武區,100102,107032,104986,106313,100529,99051,95379,98257,249760.37,223307.19,240852,230020.4,191132.33,209976.68,222022.27,205715.63,"109Y11M" +64000,高雄市,64000180,鳥松區,55856,69528,67775,68488,55308,59861,57678,58854,133303.99,136426.71,139877.83,119341.66,102555.74,118735.99,118517.98,97777.45,"109Y11M" +64000,高雄市,64000190,岡山區,98634,112144,110865,111424,97509,96437,95434,96258,251642.51,242085.58,243996.44,239460.98,199022.24,231863.8,228571.9,224879.14,"109Y11M" +64000,高雄市,64000200,橋頭區,40164,35328,33993,34595,40611,39829,39629,39826,91810.53,78800.83,83965.64,85252.19,78210.53,91715.28,97867.92,86387.31,"109Y11M" +64000,高雄市,64000210,燕巢區,44153,61804,62709,62278,41171,44242,44416,44482,107886.69,121258.49,121901.77,92352.73,82326.46,100600.18,104761.82,92708.34,"109Y11M" +64000,高雄市,64000220,田寮區,4152,4188,4133,4147,4486,5938,6216,5792,11824.3,13236.28,14252.69,11066.8,16481.57,25442.92,28210,22442.16,"109Y11M" +64000,高雄市,64000230,阿蓮區,24453,21698,21501,21545,24826,25309,24902,25001,49807.17,45416.18,46406.46,46195.65,49912.21,57998.05,57148.14,50715.38,"109Y11M" +64000,高雄市,64000240,路竹區,51149,62835,61592,62356,50630,50620,50235,50692,138073.56,130624.42,133771.28,123723.16,103787.16,116641.96,120281.03,120908.72,"109Y11M" +64000,高雄市,64000250,湖內區,30824,25495,25458,25420,30967,29315,28750,29171,65822.89,57663.36,58663.52,60257.18,55010.33,60510.95,63598.21,58871.84,"109Y11M" +64000,高雄市,64000260,茄萣區,22673,19680,19326,19401,23384,23407,23630,23421,41299.93,35624.71,37027.96,38203.34,41132.92,47627.39,53305.27,43995.28,"109Y11M" +64000,高雄市,64000270,永安區,11197,14254,13957,14110,11085,11921,11740,11865,25681,23437.88,24071.9,19571.15,20011.7,22161.92,23108.07,18082.52,"109Y11M" +64000,高雄市,64000280,彌陀區,13399,10827,10794,10827,13777,13449,13382,13497,24016.86,19143.21,19675.69,21452.76,22823.02,23742.83,24585.53,21238.56,"109Y11M" +64000,高雄市,64000290,梓官區,29012,23070,23048,22998,29759,27912,27862,28109,62061.69,52207.52,54205.15,58439.88,57586.83,63508.21,68867.26,60062.45,"109Y11M" +64000,高雄市,64000300,旗山區,30530,30982,30320,30587,31190,30885,31742,31072,57869.06,59817.94,62392.69,52716.43,56550.65,79789.89,88470.27,65121.12,"109Y11M" +64000,高雄市,64000310,美濃區,23519,22067,21996,22017,26246,28267,29372,28484,36626.99,38018.5,38700.52,31393.5,42068.18,66547.74,65198.03,38662.52,"109Y11M" +64000,高雄市,64000320,六龜區,8807,8712,8678,8661,10852,11787,12318,11778,12947.9,13804.88,14588.01,10230.02,17187.65,24183.55,25463.54,14706.79,"109Y11M" +64000,高雄市,64000330,甲仙區,3295,3309,3359,3330,3591,4104,4366,4107,4434.86,5077.64,5152.68,3587.48,5533.79,9687.85,9489.01,4670.45,"109Y11M" +64000,高雄市,64000340,杉林區,6057,5391,5504,5448,6601,6915,7083,6976,8043.4,8009.39,8254.28,6617.11,9309.61,11520.3,11768.23,8159.03,"109Y11M" +64000,高雄市,64000350,內門區,9633,9357,9850,9517,9716,9659,10167,9875,14118.02,15195.95,15443.41,12244.37,14506.25,19389.82,20415.65,13792.49,"109Y11M" +64000,高雄市,64000360,茂林區,930,1039,1047,1039,1209,1730,1860,1709,1150.68,1558.02,1430.56,870.48,1684.46,3857.15,3282.77,1258.36,"109Y11M" +64000,高雄市,64000370,桃源區,2129,2479,2383,2422,2626,3587,3468,3520,3069.29,3520.33,3381.22,1963.46,4248.95,5697.69,5522.86,2577,"109Y11M" +64000,高雄市,64000380,那瑪夏區,1453,1612,1521,1561,1625,1885,1878,1865,1680.37,1843.85,1767.25,1217.28,2040.5,2472.63,2326.22,1421.36,"109Y11M" +10002,宜蘭縣,10002010,宜蘭市,96473,98784,100197,99481,99018,101500,103998,101965,188561.42,210577.17,213745.67,197307.47,176872.7,246628.38,239875.79,204162.71,"109Y11M" +10002,宜蘭縣,10002020,羅東鎮,65083,66138,67073,66553,68452,69656,69156,68973,132401.79,147596.3,149882.19,143229.34,129245.04,170501.94,163772.62,150590.63,"109Y11M" +10002,宜蘭縣,10002030,蘇澳鎮,36296,38586,38457,38469,37905,39443,39124,38860,65982.91,73613.05,76517.49,57178.41,68799.06,89225.68,90629.98,64730.55,"109Y11M" +10002,宜蘭縣,10002040,頭城鎮,23099,22444,22378,22323,25414,25904,25863,25313,50174.67,60300.82,65154.15,49013.46,60153.91,89217.86,97557.26,67700.68,"109Y11M" +10002,宜蘭縣,10002050,礁溪鄉,40592,38400,38525,38060,47454,46271,45734,44365,79592.28,89050.61,96091.65,81472.85,97463.81,128049.97,142388.25,113640.93,"109Y11M" +10002,宜蘭縣,10002060,壯圍鄉,19645,15227,15267,15184,20766,19604,19048,19177,34797.71,31167.29,33256.27,31326.43,37012.12,45720.74,47082.3,36698.16,"109Y11M" +10002,宜蘭縣,10002070,員山鄉,30487,25968,26119,26004,31834,30176,29390,29544,49033.22,46903.98,49186.8,42410.9,50340.23,62076.67,61725.96,45448.64,"109Y11M" +10002,宜蘭縣,10002080,冬山鄉,50045,44931,44348,44511,52986,50186,48706,49495,88165.88,83026.06,85136.39,75168.47,86546.21,99402.25,98727.33,78422.47,"109Y11M" +10002,宜蘭縣,10002090,五結鄉,48227,47711,47609,47523,50506,51949,51983,51534,81760.68,82681.73,85299.62,73996.11,80546.06,104520.92,104939.28,80242.92,"109Y11M" +10002,宜蘭縣,10002100,三星鄉,21033,19837,19370,19639,21310,19261,18670,18906,32305.85,33453.29,34753.4,25373.19,32687.31,41954.93,43216.37,28368.04,"109Y11M" +10002,宜蘭縣,10002110,大同鄉,5691,6710,7252,6937,7332,11325,12042,11396,9191.5,13632.38,15228.94,7172.94,15133.27,24011.78,26413.04,11269.34,"109Y11M" +10002,宜蘭縣,10002120,南澳鄉,4532,5065,4973,5020,5100,5690,5547,5591,8644.62,12591.94,13871.44,8636.24,12075.94,16608.16,18306.24,12519.61,"109Y11M" +10004,新竹縣,10004010,竹北市,227031,214369,215633,215030,226079,225193,221899,225857,398215.04,389820.78,391210.39,388452.77,343495.34,419885.4,415924.31,385877.12,"109Y11M" +10004,新竹縣,10004020,竹東鎮,100364,81123,79960,79977,101361,94863,91704,94086,163571.65,140943.05,144621.4,145685.12,161133.49,176856.28,180940.4,159398.03,"109Y11M" +10004,新竹縣,10004030,新埔鎮,35252,31740,31002,31251,35838,35973,35688,35539,62450.64,57266.94,58956.32,52833.12,58664.59,77620.41,78123.81,59126.2,"109Y11M" +10004,新竹縣,10004040,關西鎮,25604,25545,24059,24722,26056,29202,31444,29366,48967.56,52547.22,53403.04,44249.25,71006.85,89961.67,99995.45,78928.19,"109Y11M" +10004,新竹縣,10004050,湖口鄉,117065,137881,136365,136958,113412,114877,112521,113686,259290.58,247183.8,250891.35,222597.55,218171.07,227164.83,231978.04,225836.76,"109Y11M" +10004,新竹縣,10004060,新豐鄉,67050,61609,60688,61198,67019,66336,64418,65607,110994.39,101812.75,101535.46,101522.38,102342.12,112680.03,110097.79,96614.55,"109Y11M" +10004,新竹縣,10004070,芎林鄉,19716,16317,16002,16113,20138,19454,18830,19094,35046.97,29808.37,31913.01,29829.43,36568.85,42760.68,47795.95,38489.54,"109Y11M" +10004,新竹縣,10004080,橫山鄉,11230,9997,10078,9950,12224,13412,13888,13223,16891.9,18419.29,19092.83,14580.43,21877.85,40154.76,44115.23,22679.37,"109Y11M" +10004,新竹縣,10004090,北埔鄉,7040,5893,5972,5928,8022,8989,9436,8989,8098.85,10109.91,9670.38,6791.34,11497.7,26158.19,27504.3,10857.23,"109Y11M" +10004,新竹縣,10004100,寶山鄉,33049,75386,75225,75662,29931,35113,35581,35435,93124.29,105465.25,109826.67,88003.74,69211.56,73545.73,87605.95,80195.75,"109Y11M" +10004,新竹縣,10004110,峨眉鄉,3774,3483,3484,3487,4211,5387,5440,5277,4881.17,5898.66,5925.3,3829.14,6827.26,13158.83,13925.23,5808.42,"109Y11M" +10004,新竹縣,10004120,尖石鄉,5756,5981,6096,5955,9202,11846,12302,11548,7072.74,9078.52,9126.65,5945.78,14710.26,21779.68,21133.68,11663.41,"109Y11M" +10004,新竹縣,10004130,五峰鄉,3077,3182,3410,3240,5029,7046,6734,6597,4040.07,5302.81,5254.64,3211.18,8899.76,13807.59,12362.08,6201.47,"109Y11M" +10005,苗栗縣,10005010,苗栗市,86555,85857,85564,85707,86534,84014,82690,83899,154831.28,157587.36,161760.58,150846.24,141152.71,165997.23,166766.16,147933.88,"109Y11M" +10005,苗栗縣,10005020,苑裡鎮,38449,34354,34681,34481,39894,39643,39830,39941,61380.41,57017.67,59335.47,55473.33,64269.02,75325.18,78574.04,66425.63,"109Y11M" +10005,苗栗縣,10005030,通霄鎮,23771,21783,21857,21922,25448,27280,27497,26964,44523.38,44872.56,48071.09,40562.85,54060.71,71906.79,82161.8,60030.22,"109Y11M" +10005,苗栗縣,10005040,竹南鎮,101747,109524,108279,109049,100265,98104,94606,97190,206217.23,190452.15,194871.09,190860.05,183648.38,197978.37,211554.86,203689.46,"109Y11M" +10005,苗栗縣,10005050,頭份市,101710,81198,81905,81123,101685,95391,95872,95713,174809.81,156022.05,163690.65,173582.04,174148.24,201406.52,206830.64,192815.41,"109Y11M" +10005,苗栗縣,10005060,後龍鎮,30538,30113,29762,29898,30541,30175,30504,30030,62612.54,60632.56,64338.71,54306.52,62321.61,74969.85,85978.46,76432.07,"109Y11M" +10005,苗栗縣,10005070,卓蘭鎮,11458,11412,11491,11454,12615,13885,13816,13649,20673.35,20704.94,21295.85,16876.14,22464.96,29544.77,29326.68,19508.38,"109Y11M" +10005,苗栗縣,10005080,大湖鄉,9862,10473,10368,10383,11293,13167,12821,12817,15348.2,16448.2,16752.82,11989.12,18618.7,28815.9,27793.67,15593.32,"109Y11M" +10005,苗栗縣,10005090,公館鄉,26499,21282,21320,21262,28060,27786,27057,27380,40098.99,36548.51,38210.15,36927.69,46043.69,56968.79,56877.21,48991.87,"109Y11M" +10005,苗栗縣,10005100,銅鑼鄉,17627,21657,21457,21475,18388,20480,20053,19844,41316.91,46761.97,49371.65,39382.78,48962.94,68011.08,74153.31,58111.17,"109Y11M" +10005,苗栗縣,10005110,南庄鄉,6734,6543,6589,6490,9399,12168,11734,11670,9119.58,12517.16,12283.2,7619.13,16514.65,35509.22,33901.97,13863.39,"109Y11M" +10005,苗栗縣,10005120,頭屋鄉,7774,7016,7021,7049,8280,8829,8727,8645,16391.13,15761.16,17654.23,14974.68,19615.26,23586.91,28913.64,24059.17,"109Y11M" +10005,苗栗縣,10005130,三義鄉,14455,16420,16280,16228,15381,18442,17933,17636,31533.5,38739.11,40448.15,29210.41,41803.67,63998.3,69364.89,44831.66,"109Y11M" +10005,苗栗縣,10005140,西湖鄉,4277,4416,4362,4367,4474,5077,5084,5032,9160.39,9541.64,10891.21,8277.86,14126.09,14330.07,18240.97,14374.39,"109Y11M" +10005,苗栗縣,10005150,造橋鄉,12480,13323,12871,13057,12600,14109,13542,13821,28039.87,28169.67,30632.04,27151.94,32657.8,37405.34,46313.96,47026.18,"109Y11M" +10005,苗栗縣,10005160,三灣鄉,5137,4833,4739,4763,5661,6589,6288,6318,8536.33,9160.7,9730.97,6978.87,11236.57,18410.45,19115.65,9643.59,"109Y11M" +10005,苗栗縣,10005170,獅潭鄉,2709,2974,2970,2968,3449,4980,4807,4651,4615.22,6150.97,6189.04,3672.11,7518.94,16092.99,15700.29,6193.87,"109Y11M" +10005,苗栗縣,10005180,泰安鄉,3682,3952,3917,3893,5964,8330,7688,7749,4904.7,5784.03,5729.55,3814.26,9735.26,14480.24,12857.12,7410.31,"109Y11M" +10007,彰化縣,10007010,彰化市,214161,213783,213554,213419,213353,213275,210409,212870,485620.62,491612.23,495118.49,502452.32,432250.01,542050.15,544698.76,503726.06,"109Y11M" +10007,彰化縣,10007020,鹿港鎮,80583,88520,87984,88051,81125,84576,83820,84109,182654.58,181639.66,179563.31,168171.77,161426.2,214526.49,219923.06,167437.77,"109Y11M" +10007,彰化縣,10007030,和美鎮,83456,77159,77005,77081,84381,82104,81467,82751,164883.98,145448.27,149312.74,155618.88,149920.77,164556.71,167966.05,155830.67,"109Y11M" +10007,彰化縣,10007040,線西鄉,14662,18626,18280,18506,14527,15268,15035,15337,31770.31,31035.24,30591.63,25219.39,25256.56,27713.8,28542.51,22260.94,"109Y11M" +10007,彰化縣,10007050,伸港鄉,31027,30266,29974,30033,31428,30442,29963,30382,65476.06,56875.02,57321.02,56519.39,59011.43,61624.16,62166.15,54281.01,"109Y11M" +10007,彰化縣,10007060,福興鄉,38756,40254,40250,40370,39152,37370,37592,37797,80723.19,72362.01,74148.59,70016.58,66790.88,76689.65,80835.61,67431.23,"109Y11M" +10007,彰化縣,10007070,秀水鄉,32134,32497,32646,32709,32549,32126,31899,32241,64674.46,59136.89,62697.29,59204.78,57340.01,65900.58,68145.76,60689.08,"109Y11M" +10007,彰化縣,10007080,花壇鄉,42269,39314,39696,39612,43161,42919,43009,43370,86931.98,79001.85,82389.36,82980.1,78026.51,94437.89,99406.03,90094.01,"109Y11M" +10007,彰化縣,10007090,芬園鄉,16521,14027,14207,14155,17126,17115,17170,17221,28832.48,24914.41,27170.67,25645.98,29733.24,34047.97,37851.11,30031.83,"109Y11M" +10007,彰化縣,10007100,員林市,104870,101505,102558,101837,108214,110531,111651,110812,218695.63,222027.74,228707.05,235798.1,200867.27,270201.85,270038.48,244654.03,"109Y11M" +10007,彰化縣,10007110,溪湖鎮,44624,41118,41520,41305,45986,46005,45917,46013,94972,93335.3,96565.13,97108.59,91328.02,117355.63,126738.63,110689.77,"109Y11M" +10007,彰化縣,10007120,田中鎮,29351,30973,30246,30766,30952,31499,30957,31144,62035.8,55318.13,60726.66,54244.07,60149.42,66481.53,68300.64,59921.51,"109Y11M" +10007,彰化縣,10007130,大村鄉,40503,42163,42238,42255,39600,38972,39047,39326,75826.5,70478.03,71802.25,68066.84,62716.98,69552.04,71989.41,63715.3,"109Y11M" +10007,彰化縣,10007140,埔鹽鄉,23642,22194,22189,22130,24902,24922,24709,24948,44990.4,40488,41915.55,38889.46,41460.19,46814.89,48655.01,40311.65,"109Y11M" +10007,彰化縣,10007150,埔心鄉,30359,30553,30674,30672,31291,31715,31599,31790,63281.75,58483.08,61634.55,58284.7,53882.28,65694.52,68965.86,58455.47,"109Y11M" +10007,彰化縣,10007160,永靖鄉,26003,23001,22971,23007,27331,26752,26737,26953,49199,43762.78,45611.37,45867.94,46320.28,54539.19,55885.43,46999.68,"109Y11M" +10007,彰化縣,10007170,社頭鄉,30885,26173,26090,26154,32537,32107,31719,32136,55538.5,48391.1,50494.08,50470.6,56180.83,62489.07,64178.56,54758.06,"109Y11M" +10007,彰化縣,10007180,二水鄉,9776,8767,8666,8682,10683,11485,11448,11418,15721.96,14579.51,15348.15,13615,18486.02,21450.48,22638.05,16852.52,"109Y11M" +10007,彰化縣,10007190,北斗鎮,27294,28391,28159,28370,28270,28874,28674,28803,56545.83,57425.62,58085.53,56714.55,51638.13,66003.25,64087.86,57345.82,"109Y11M" +10007,彰化縣,10007200,二林鎮,36425,34787,34917,34838,37965,38900,38516,38699,70714.23,66636.55,68750.83,64949.46,67944.89,77128.37,75600.31,63847.67,"109Y11M" +10007,彰化縣,10007210,田尾鄉,21203,18157,18447,18230,22630,22397,23123,22774,37729.94,35738.31,38699.57,35340.13,38683.91,50136.63,58945.58,42495.93,"109Y11M" +10007,彰化縣,10007220,埤頭鄉,23338,22047,22180,22095,24427,24494,24307,24446,46963.79,44371.05,47625.36,43428.47,47469.68,53788.14,60988.34,50984.22,"109Y11M" +10007,彰化縣,10007230,芳苑鄉,25156,26731,26691,26616,26393,28296,28440,28022,45511.5,45434.06,46397.51,36402.04,43864.65,54889.17,57333.41,40370.15,"109Y11M" +10007,彰化縣,10007240,大城鄉,10510,10171,10242,10312,10846,11519,11596,11570,17370.15,16214.31,16655.39,14012.58,17313.07,20213.25,20964.48,15544.75,"109Y11M" +10007,彰化縣,10007250,竹塘鄉,9106,8069,8126,8050,9734,9943,10010,9842,15777.1,14503.11,15033.44,13287.26,16162.49,18334.67,19062.11,14649.77,"109Y11M" +10007,彰化縣,10007260,溪州鄉,21689,20355,20494,20352,22623,23270,23336,23116,41501.79,41357.37,44395.64,38176.16,43973.26,52248.49,58866.05,47677.22,"109Y11M" +10008,南投縣,10008010,南投市,90184,98575,97748,98193,90208,90290,88682,89482,187138.75,186881.78,190908.12,172625.16,166875.83,200985.1,209842.77,183621.87,"109Y11M" +10008,南投縣,10008020,埔里鎮,78911,77119,77472,77168,82353,81434,81710,80927,133699.07,150828.54,150399.35,133624.52,144792.43,202651.76,197166.78,156035.12,"109Y11M" +10008,南投縣,10008030,草屯鎮,90186,84953,85397,85092,92294,91839,91543,92037,173744.74,172537.53,178059.3,174086.94,166469.41,212762.37,218625.39,195336.97,"109Y11M" +10008,南投縣,10008040,竹山鎮,44375,43383,43704,43438,46618,48913,48883,48305,77768.85,87275.01,91459.8,71578.72,86197.28,125360.95,127366.69,88659.36,"109Y11M" +10008,南投縣,10008050,集集鎮,8323,8630,8650,8606,8224,8524,8707,8474,14963.7,16977.1,16887.11,12243.65,14747.57,25048.61,25857.01,14963.42,"109Y11M" +10008,南投縣,10008060,名間鄉,28162,25609,25868,25719,29790,30402,30760,30590,49405.31,48382.17,52475.5,43296.44,54586.03,70152.53,81512.64,63324.25,"109Y11M" +10008,南投縣,10008070,鹿谷鄉,12975,18022,15499,16330,16069,19908,18999,18597,22119.71,33991.94,30079.61,14272.34,28334.62,46102.65,43726.96,21348.1,"109Y11M" +10008,南投縣,10008080,中寮鄉,7987,7420,7378,7350,8881,10627,10711,10537,12139.73,11789.71,12628.44,9646.17,16044.43,21155.43,22778.08,15387.86,"109Y11M" +10008,南投縣,10008090,魚池鄉,14252,15429,15397,15227,18494,21662,22727,20810,22681,33112.06,33691.15,19629.85,33946.59,68401.59,73004.56,38028.85,"109Y11M" +10008,南投縣,10008100,國姓鄉,12030,11351,11441,11386,14585,17582,17241,17206,18600.28,20458.39,21495.02,16262.24,27684.06,40476.78,44838.6,28364.87,"109Y11M" +10008,南投縣,10008110,水里鄉,12356,12994,12927,12839,12759,13495,13572,13224,21444.69,25565.41,25255.74,17761.59,22431.12,36814.56,36744.34,21336.96,"109Y11M" +10008,南投縣,10008120,信義鄉,10411,11029,10779,10834,12267,14582,14389,14218,15014.36,16804.15,16363.37,10805.98,19741,26075.1,25078.21,14123.66,"109Y11M" +10008,南投縣,10008130,仁愛鄉,16582,18165,18171,17882,21855,28475,28249,26797,27684.98,36283.72,35339.06,21526.91,46880.66,69676.83,66480.84,37152.46,"109Y11M" +10009,雲林縣,10009010,斗六市,129778,140559,140995,140701,127676,127299,127534,127750,247980.98,262268.04,267874.75,251178.19,214677.12,272454.02,279195.14,249517.38,"109Y11M" +10009,雲林縣,10009020,斗南鎮,38831,37321,37234,37370,40015,39722,39145,39645,79659.83,79370.95,83358.27,79098.72,78376.52,95478.78,100556.97,90869.14,"109Y11M" +10009,雲林縣,10009030,虎尾鎮,75513,73583,73741,73641,73536,72134,72067,72273,153476.33,164907.54,169089.82,164114.48,137576.79,176586.14,180963.85,158171.82,"109Y11M" +10009,雲林縣,10009040,西螺鎮,36913,37857,38299,37899,38014,38742,38754,38541,77428.74,83779.24,87524.1,77355.04,81110.76,94758.55,102901.66,96416.64,"109Y11M" +10009,雲林縣,10009050,土庫鎮,19080,17728,17793,17834,19621,19533,19270,19442,38650.7,35759.18,37297.13,35062.65,36901,43501.72,44123.55,36030.27,"109Y11M" +10009,雲林縣,10009060,北港鎮,29483,29985,29783,29892,30353,30801,30138,30433,52827.07,57288.25,57586.3,50297.56,53033.13,72757.71,70317.17,56297.09,"109Y11M" +10009,雲林縣,10009070,古坑鄉,22912,22114,21794,21914,23981,26985,27437,26613,42476.74,45945.09,49994.84,37959,54148.31,77361.46,89654.84,56724.79,"109Y11M" +10009,雲林縣,10009080,大埤鄉,12830,11281,11373,11299,13267,12834,12841,12936,22706.14,21862.41,23426.18,20550.19,24396.7,27949.71,30180.86,25597.2,"109Y11M" +10009,雲林縣,10009090,莿桐鄉,22733,19663,19718,19680,23571,23229,22843,23234,42543.88,37418.42,39341.77,38440.62,41981.06,44910.28,46995.9,40285.02,"109Y11M" +10009,雲林縣,10009100,林內鄉,12165,11388,11156,11264,12734,12648,12409,12559,24874.31,23498.38,26729.07,22623.43,27341.22,33005.42,37917.41,30373.24,"109Y11M" +10009,雲林縣,10009110,二崙鄉,17441,15777,15615,15681,18086,17907,17507,17866,31174.79,28354.02,29428.51,26809.99,30615.56,31709.37,32841.06,27225.19,"109Y11M" +10009,雲林縣,10009120,崙背鄉,19631,16940,17403,17200,20174,20067,20149,20196,37205.81,32063.36,33794.78,32566.35,35774.04,40149.23,41293.9,31838.19,"109Y11M" +10009,雲林縣,10009130,麥寮鄉,41041,55678,54058,55120,37549,38441,37843,38542,108156.69,93232.34,98883.5,80113.12,67969.02,71350.19,72671.58,59546.63,"109Y11M" +10009,雲林縣,10009140,東勢鄉,9125,8258,8310,8292,9563,9584,9544,9584,14800.13,13589.61,14311.89,12952.26,15154.94,18008.15,18278.72,13751,"109Y11M" +10009,雲林縣,10009150,褒忠鄉,8772,8808,8731,8776,9171,9329,9061,9207,19564.63,18024.56,18892.06,17035.64,18984.24,22850.21,23357.11,17359.04,"109Y11M" +10009,雲林縣,10009160,臺西鄉,13845,11951,12264,12022,14706,14823,15174,14873,22800.3,21441.29,22284.99,19663.13,25172.49,32335.84,33070.55,25031.7,"109Y11M" +10009,雲林縣,10009170,元長鄉,15723,14653,14852,14747,16487,16456,16330,16420,30296.38,28503.2,29902.64,26086.26,30297.93,35475.24,37063.17,28559.22,"109Y11M" +10009,雲林縣,10009180,四湖鄉,12208,11753,11677,11743,12976,13367,13136,13174,18912.96,18572.86,18976.61,15524.1,20807.09,26565.89,26067.76,18058.64,"109Y11M" +10009,雲林縣,10009190,口湖鄉,14030,13128,13351,13208,14934,15580,15746,15477,21575.32,22274.67,22922.14,18787.48,24503.09,31723.79,33076.08,22623.88,"109Y11M" +10009,雲林縣,10009200,水林鄉,13238,11975,12189,12077,13868,13668,13900,13775,18368.24,18106.27,18608.89,15914.28,18989.91,22082.52,22274.91,17301.48,"109Y11M" +10010,嘉義縣,10010010,太保市,38110,38942,38587,38858,39244,38864,38123,38394,73610.37,73125.58,76033.64,66885.87,69919.88,82525.25,88775.14,73051.16,"109Y11M" +10010,嘉義縣,10010020,朴子市,38836,41493,41657,41343,39468,40667,40285,40439,64522.98,68939.39,68929.75,59184.59,59550.42,73009.51,71524.06,61162.27,"109Y11M" +10010,嘉義縣,10010030,布袋鎮,14488,13586,13687,13569,15735,16682,16800,16399,22193.47,24217.42,24733.41,19079.4,25703.18,38377.96,40615.95,24600.67,"109Y11M" +10010,嘉義縣,10010040,大林鎮,36020,40120,40086,40188,33494,33118,33098,33159,65942.86,70678.01,71582.1,59942.35,59215.93,68092.53,72230.98,62073.55,"109Y11M" +10010,嘉義縣,10010050,民雄鄉,85278,88037,86861,87730,84076,83149,81774,82990,152774.09,158171.18,162159.99,145458.49,136210.94,168725,177423.9,150938.76,"109Y11M" +10010,嘉義縣,10010060,溪口鄉,9580,8326,8360,8321,9988,9856,9830,9779,15115.46,14543.79,15372.47,13913.61,16341.98,18498.12,19529.61,16499.65,"109Y11M" +10010,嘉義縣,10010070,新港鄉,23844,24804,24310,24500,24925,25532,25399,25478,44232.13,43207.07,45294.72,36704.98,43064.31,50922.21,52717.41,39396.27,"109Y11M" +10010,嘉義縣,10010080,六腳鄉,14456,12740,12723,12764,15387,15349,15756,15474,21816.88,20601.21,21494.35,18672.76,23164.97,28059.49,29563.15,21725.68,"109Y11M" +10010,嘉義縣,10010090,東石鄉,13970,13589,13956,13754,15210,16270,16931,16305,22042.02,24778.93,25660.19,19410.11,25595.1,42507.49,43474.49,25880.43,"109Y11M" +10010,嘉義縣,10010100,義竹鄉,12960,12945,12860,12872,13595,14077,14116,14059,19468.67,18900.36,19535.41,15528.25,19655.62,22197.91,22409.09,16586.41,"109Y11M" +10010,嘉義縣,10010110,鹿草鄉,8739,9341,9318,9329,9217,9543,9582,9509,15518.06,16078.49,17021.49,13639.89,15822,19258.35,21109.44,16427.26,"109Y11M" +10010,嘉義縣,10010120,水上鄉,47081,42072,41945,42051,48022,46367,45842,46461,82140.52,76893.12,82212.27,73379.18,81134.81,93079.14,101304.66,86213.68,"109Y11M" +10010,嘉義縣,10010130,中埔鄉,37868,32114,32149,32165,39660,38599,38801,38688,53006.7,50157.98,52510.2,47414.29,59751.7,74399.37,76652.2,60238.27,"109Y11M" +10010,嘉義縣,10010140,竹崎鄉,26388,23900,24101,23951,28572,29639,29829,29379,33812.74,34125.92,35250.47,27872.1,38738.3,52281.71,52640.5,33808.98,"109Y11M" +10010,嘉義縣,10010150,梅山鄉,14676,14429,14335,14230,16392,18507,18671,17867,20660.02,23644.83,23083.98,16704.42,26009.28,42627.8,40461.83,22866.51,"109Y11M" +10010,嘉義縣,10010160,番路鄉,9796,9888,9971,9885,11637,13805,14254,13262,15572.59,18394.09,20285.83,13010.68,23882.48,38215.02,44080.38,21862.35,"109Y11M" +10010,嘉義縣,10010170,大埔鄉,1831,2058,2129,2092,2083,2550,2606,2533,2381.35,3142.23,3222.14,1813.57,3055.16,5889.2,5595.84,2342.25,"109Y11M" +10010,嘉義縣,10010180,阿里山鄉,6594,6917,6983,6842,8514,11981,11707,11043,9704.39,13983.83,13094.29,7104.86,16113.14,32191.42,28818.7,11925.76,"109Y11M" +10013,屏東縣,10013010,屏東市,184073,187795,189072,188171,184400,184521,184690,184995,393193.73,414674.08,423734.62,422535.34,339150.66,439074.56,437667.04,410462.65,"109Y11M" +10013,屏東縣,10013020,潮州鎮,46420,42370,42794,42442,47508,46892,46815,46942,91969.93,94172.26,97666.51,98004.97,87195.68,112561.91,115925.31,101295.4,"109Y11M" +10013,屏東縣,10013030,東港鎮,37331,37832,38394,38059,39229,39290,39505,39082,77089.9,85759.97,88243.14,81238.87,73103.03,101191.68,103842.71,92241.75,"109Y11M" +10013,屏東縣,10013040,恆春鎮,34586,33750,33253,33514,38266,37417,36080,35766,62436.19,70532.61,71528.43,60721.85,70588.64,102108.13,101623.31,80873.95,"109Y11M" +10013,屏東縣,10013050,萬丹鄉,40743,34058,34673,34240,42103,41144,40765,41013,86121.47,73829.58,80402.59,83260.78,77805.33,88051.38,92291.22,83654.98,"109Y11M" +10013,屏東縣,10013060,長治鄉,31228,29054,29040,29110,31789,31314,30772,31312,59399.94,53341.09,56865.96,53543.79,53204.93,59688.67,62088.27,53086.88,"109Y11M" +10013,屏東縣,10013070,麟洛鄉,9330,8782,8608,8702,9665,10284,10048,10205,19074.57,18027.96,19639.52,17679.75,17589.7,21144.13,22143.88,18061.19,"109Y11M" +10013,屏東縣,10013080,九如鄉,17914,15960,16053,15902,18591,18306,18127,18184,39833.99,35711.99,39328.77,37613.5,37519.94,42889.47,46667.97,42459.92,"109Y11M" +10013,屏東縣,10013090,里港鄉,19581,19307,19220,19144,20571,21484,21304,21356,42745.01,41556.72,42804.63,37626.9,41060.64,50103.52,51556.98,42485.08,"109Y11M" +10013,屏東縣,10013100,鹽埔鄉,23304,22495,22459,22514,23452,23655,23996,23949,42600.24,39470.36,41911.91,36734.68,37886.68,41266.44,43554.04,35829.41,"109Y11M" +10013,屏東縣,10013110,高樹鄉,16245,15760,15714,15625,17391,18405,18556,18315,29373.18,28356.36,30047.96,24006.1,30238.03,35869.57,36924.61,26333.19,"109Y11M" +10013,屏東縣,10013120,萬巒鄉,16607,15294,15452,15344,16390,16629,16836,16721,26963.32,25716.57,26622.16,23679.13,25992.56,33963.78,34547.5,25306.19,"109Y11M" +10013,屏東縣,10013130,內埔鄉,60923,61096,60955,61204,61114,61552,62208,61797,108359.91,111669.07,114169.91,102378.63,95765.07,118521.74,121806.48,100784.29,"109Y11M" +10013,屏東縣,10013140,竹田鄉,13077,12004,12024,11994,13694,13836,13854,13810,29887.19,26852.21,30037.55,27824.14,28003.72,34202.84,37745.36,32032.43,"109Y11M" +10013,屏東縣,10013150,新埤鄉,7974,7620,7757,7675,8465,8777,8811,8795,16346.84,15720.81,16981.71,13268.3,15907.8,19267.3,20997.19,15491.9,"109Y11M" +10013,屏東縣,10013160,枋寮鄉,19311,21181,21151,21076,19714,20237,20345,20126,40041.78,44409.06,45561.08,37538.43,39623.27,51448.13,55289.41,45794.52,"109Y11M" +10013,屏東縣,10013170,新園鄉,27957,23963,24300,23992,29274,28551,28610,28716,49970.36,44570.67,48046.97,46604.36,47462.27,54271.92,57346.2,49305.98,"109Y11M" +10013,屏東縣,10013180,崁頂鄉,8193,7452,7560,7547,8516,8476,8622,8503,15802.61,14289,15422.78,14206.86,14574.39,17301.05,18444.78,15293.46,"109Y11M" +10013,屏東縣,10013190,林邊鄉,9401,7982,8018,7861,9749,9593,9625,9492,15461.26,15089.12,15825.76,15135.81,16035.28,19158.05,20327.25,17232.82,"109Y11M" +10013,屏東縣,10013200,南州鄉,7676,6925,6799,6865,7973,8224,8193,8166,17555.42,16759.85,18192.46,16315.72,17718.41,21971.14,24506,19630.8,"109Y11M" +10013,屏東縣,10013210,佳冬鄉,12671,12466,12296,12379,13398,13638,13747,13587,25039.64,25489.02,27748.22,21480.67,24421.41,29309.45,31662.62,25166.82,"109Y11M" +10013,屏東縣,10013220,琉球鄉,7828,7554,7629,7597,9391,9511,9786,9310,10204.31,13878.32,12934.07,9392.26,15363.47,25885.55,23215.77,14666.09,"109Y11M" +10013,屏東縣,10013230,車城鄉,6322,6407,6432,6328,6935,7605,8628,7504,12433.3,17151.34,17659.5,12193.79,13955.11,30519.29,32794.69,19541.33,"109Y11M" +10013,屏東縣,10013240,滿州鄉,4866,4098,4094,4212,4957,4813,4792,4914,6178.32,5712.78,5969.71,4854.54,6504.07,8251.31,8088.11,5378.06,"109Y11M" +10013,屏東縣,10013250,枋山鄉,4309,4432,4422,4391,4211,4409,4529,4313,11105.38,17570.18,18166.23,11997.47,14688.3,29270.77,33802.81,21828.34,"109Y11M" +10013,屏東縣,10013260,三地門鄉,4208,4114,4083,4114,4719,5455,5581,5403,6294.03,6924.01,7153.44,5057.96,7176.45,12259.25,12221.35,6965.85,"109Y11M" +10013,屏東縣,10013270,霧臺鄉,501,645,633,635,578,957,982,941,623.38,944.53,888.04,457.58,906.89,2077.21,1896.73,690.3,"109Y11M" +10013,屏東縣,10013280,瑪家鄉,2438,2243,2322,2322,2737,3468,3308,3248,3202.95,3362.74,3393.17,2550.75,3856.62,6677.44,6366.09,3420.66,"109Y11M" +10013,屏東縣,10013290,泰武鄉,2287,1989,2040,2009,2709,2957,3099,3001,2867.66,2825.02,2909.18,2346.72,3825.84,5192.84,5213.22,3157.02,"109Y11M" +10013,屏東縣,10013300,來義鄉,3373,3201,3270,3225,3610,3819,3811,3780,4766.18,4610.43,4737.82,3752.15,5003.78,5915.12,6063.33,4151.99,"109Y11M" +10013,屏東縣,10013310,春日鄉,2488,2278,2323,2278,2762,2976,2871,2923,4514.1,4584.1,4852.93,3930.02,5345.45,6542.14,6943.91,5061.42,"109Y11M" +10013,屏東縣,10013320,獅子鄉,2838,3255,3111,3155,3378,4052,3852,3829,6333.03,10684.16,11079.08,6765.01,9378.25,17721.1,20497.59,12610.26,"109Y11M" +10013,屏東縣,10013330,牡丹鄉,3387,3324,3291,3380,3245,3320,3353,3371,3660.97,4125.73,4193.01,2840.38,3681.04,5239.05,5833.08,3101.54,"109Y11M" +10014,臺東縣,10014010,臺東市,111730,110684,110409,110320,113607,111807,110415,110758,178862.57,194299.39,196993.52,176926.97,176713.44,212768.03,211633.46,184815.52,"109Y11M" +10014,臺東縣,10014020,成功鎮,8209,8215,8297,8212,8619,8845,8891,8784,11160.62,14857.79,14781.02,9410.56,12061.54,19453.46,18756.31,10629.46,"109Y11M" +10014,臺東縣,10014030,關山鎮,6590,6993,6947,6983,6945,6967,6908,6898,9171.87,10961.5,11056.03,7900.94,9547.29,12660.18,12468.37,8526.28,"109Y11M" +10014,臺東縣,10014040,卑南鄉,16481,15281,15297,15273,17638,16688,16601,16346,25949.05,26698.68,27562.77,22185.86,27408.07,32686.96,33710.48,25690.34,"109Y11M" +10014,臺東縣,10014050,鹿野鄉,5720,5572,5683,5580,6297,6232,6293,6197,9244.27,11242.81,11430.41,7871.16,10613.27,14747.63,14981.38,9548.38,"109Y11M" +10014,臺東縣,10014060,池上鄉,6569,6454,6502,6398,7247,7299,7364,7183,9713.85,12737.83,13008.97,8617.66,11191.06,16317.02,17104.05,10162.5,"109Y11M" +10014,臺東縣,10014070,東河鄉,5726,5897,5843,5887,6100,6405,6478,6353,7962.45,9962.88,10386.14,6643.14,8881.58,13752.25,13807.41,7868.28,"109Y11M" +10014,臺東縣,10014080,長濱鄉,3975,4036,4053,4041,4233,4276,4311,4293,4899.63,7074.34,7333.21,4185.28,5958.49,8893.28,9324.55,4903.3,"109Y11M" +10014,臺東縣,10014090,太麻里鄉,8218,8501,8372,8397,8624,9367,9388,9220,12805.45,19269.96,19473.98,12563.74,14625.64,27009.6,27748.62,16114.34,"109Y11M" +10014,臺東縣,10014100,大武鄉,3056,3169,3139,3163,3196,3350,3308,3297,5045.78,7777.69,7816.53,5072.13,6106.7,10703.49,11343.31,6996.16,"109Y11M" +10014,臺東縣,10014110,綠島鄉,4303,4233,4288,4277,3919,3802,3937,3882,2873.99,3252.85,3192.11,2404.32,3295.88,3797.92,3665.65,2720.35,"109Y11M" +10014,臺東縣,10014120,海端鄉,2047,1942,1954,1958,2160,2349,2336,2318,2292.61,2379.59,2322.17,1702.9,2620.28,2982.48,2895.43,1964.99,"109Y11M" +10014,臺東縣,10014130,延平鄉,1912,1958,1961,1979,1993,2311,2089,2132,2512.47,3199.87,2902.52,1968.02,2833.34,4561.89,3545.9,2280.86,"109Y11M" +10014,臺東縣,10014140,金峰鄉,1597,1475,1491,1468,1808,1895,1868,1895,1965.33,2224.49,2177.04,1588.43,2496.28,3099.81,2975.23,2008.3,"109Y11M" +10014,臺東縣,10014150,達仁鄉,1994,1993,2067,2035,2123,2285,2249,2268,2970.48,4733.64,4873.05,3086.54,4013.21,6732.18,7456.42,4535.63,"109Y11M" +10014,臺東縣,10014160,蘭嶼鄉,3961,3791,3762,4033,3405,3411,3345,3511,2103.49,2181.87,2152.9,1631.86,2204.41,2324.19,2329.67,1694.03,"109Y11M" +10015,花蓮縣,10015010,花蓮市,111406,122253,122652,122074,115642,116485,117211,115574,209532.77,236082.34,238423.82,221785.33,197806.27,250350.96,244553.27,230928.98,"109Y11M" +10015,花蓮縣,10015020,鳳林鎮,8426,8676,8502,8498,8950,8976,9025,8824,13426.73,16440.56,16674.65,11233.07,13869.52,20425.86,20613.94,13587.01,"109Y11M" +10015,花蓮縣,10015030,玉里鎮,18418,18680,18568,18640,18625,18480,18500,18387,26635.07,29793.09,30410.09,23065.03,25956.03,31350.1,31955.52,24280.48,"109Y11M" +10015,花蓮縣,10015040,新城鄉,24747,24747,24550,24630,24599,24531,24169,24346,42311.51,47710.44,47970.66,37614.28,41224.4,56801.11,55226.47,38097.66,"109Y11M" +10015,花蓮縣,10015050,吉安鄉,88054,71777,71470,71447,90679,82503,81715,82289,136641.2,128228.26,133008.63,126646.45,138000.99,148507.96,154352.73,132381.72,"109Y11M" +10015,花蓮縣,10015060,壽豐鄉,25630,26568,26690,26606,26997,28306,28639,28145,39246.08,48079.78,48467.44,35899.07,41237.07,60052.85,60335.56,40150.73,"109Y11M" +10015,花蓮縣,10015070,光復鄉,8367,8410,8527,8461,8850,9140,9153,9064,13697.85,16385.2,16850.65,11356.92,14307.67,20245.02,20217.67,13400.22,"109Y11M" +10015,花蓮縣,10015080,豐濱鄉,2814,2977,2982,2961,2905,3241,3277,3207,3649.26,7224.87,8158.67,3502.75,4928.2,10514.53,11459.07,4576.6,"109Y11M" +10015,花蓮縣,10015090,瑞穗鄉,9190,8941,9100,8945,9839,10048,10150,9987,14333.57,17358.42,17804.13,12834.45,15792.38,21315.37,21742.32,15552.93,"109Y11M" +10015,花蓮縣,10015100,富里鄉,6196,6232,6264,6215,6608,6734,6859,6725,9154.63,11185.94,11852.45,7839.52,9786.66,13544.79,14400.34,9199.57,"109Y11M" +10015,花蓮縣,10015110,秀林鄉,13005,14885,15090,14843,13859,18171,17691,17156,22846.22,36303.87,36184.02,20257.64,30359.59,50755.48,50527.22,26560.35,"109Y11M" +10015,花蓮縣,10015120,萬榮鄉,1651,1549,1548,1551,1808,1909,1898,1846,2057.29,1979.37,2062.5,1599.85,2358.1,2547.77,2593.55,1903.86,"109Y11M" +10015,花蓮縣,10015130,卓溪鄉,2745,2546,2619,2541,2894,3049,3049,3016,3161.69,3517.9,3669.41,2607.2,3400.19,4213.44,4378.72,3032.68,"109Y11M" +10016,澎湖縣,10016010,馬公市,49763,48927,49392,49128,50227,49251,49791,49250,83957.77,91106.73,92671.08,82398.56,77456.78,91034.32,89488.37,78524.2,"109Y11M" +10016,澎湖縣,10016020,湖西鄉,9795,9359,9429,9623,9605,9592,9624,9741,14320.45,14265.48,14772.76,12014.59,13312.7,14869.1,15225.08,11726.56,"109Y11M" +10016,澎湖縣,10016030,白沙鄉,3835,3491,3596,3595,3913,3897,3885,3893,4884.31,5171.92,5269.55,3980.58,4822.85,6128.58,5939.71,4057.72,"109Y11M" +10016,澎湖縣,10016040,西嶼鄉,3252,3005,3068,3053,3272,3223,3235,3185,4394.52,5251.88,5218.26,3572.19,4652.95,6135.3,6030.1,3595.98,"109Y11M" +10016,澎湖縣,10016050,望安鄉,1835,1740,1752,1769,1216,1185,1180,1196,1146.89,1268.58,1268.18,895.73,1003.22,1120.67,1126.66,814.37,"109Y11M" +10016,澎湖縣,10016060,七美鄉,2068,1723,1843,1980,1776,1656,1709,1778,1598.57,1723.6,1656.7,1305.47,1523.91,1714.41,1672.74,1278.43,"109Y11M" +10017,基隆市,10017010,中正區,54134,52005,51290,51669,54414,54369,54843,54207,91101.55,96170.51,97134.89,86208.56,82550.82,112066.6,113976.11,88764.48,"109Y11M" +10017,基隆市,10017020,七堵區,56104,48233,46926,47464,56202,53746,51809,53290,125681.05,94789.72,98222.61,104277.58,99216.01,113033.21,116723.34,105173.75,"109Y11M" +10017,基隆市,10017030,暖暖區,35297,25534,24654,24994,36300,34087,32500,33690,58530.04,43642.85,45532.94,49309.26,55513.5,59961.25,61766.47,54080.79,"109Y11M" +10017,基隆市,10017040,仁愛區,33694,31974,34879,33091,34605,35108,38330,35980,77266.9,94754.01,98408.75,103492.71,69349.36,114085.87,121690.18,111424.36,"109Y11M" +10017,基隆市,10017050,中山區,41269,34193,32750,33381,41233,40179,39004,39854,71050.84,61246,61286.73,60064.28,63842.09,71917.65,71066.88,60882.49,"109Y11M" +10017,基隆市,10017060,安樂區,82099,62445,59225,60714,83616,78478,74001,77373,130843.19,104046.03,103909.85,109188.08,122626.84,136866.56,132954.41,113239.98,"109Y11M" +10017,基隆市,10017070,信義區,53224,43518,41668,42422,54234,52536,50379,51870,83089.93,73922.31,73921.62,73634.23,77218.06,88656.8,84947.09,73564.02,"109Y11M" +10018,新竹市,10018010,東區,308608,369928,377445,374143,297685,310079,329342,316100,604051.78,657105.03,651126.76,608995.97,466055.48,634632.84,647499.56,557136.05,"109Y11M" +10018,新竹市,10018020,北區,150170,120704,118922,119171,152068,146393,143872,145621,242644.24,227203.55,231204.31,244984.18,230890.68,284053.71,287488.35,255588.9,"109Y11M" +10018,新竹市,10018030,香山區,90823,79836,78815,79102,90625,87262,84676,86431,150591.72,129483.27,134927.47,131967.11,137191.25,149644.48,161913.41,143192.8,"109Y11M" +10020,嘉義市,10020010,東區,117321,124303,122848,123976,117859,116698,113382,115092,225197.52,239615.93,245012.65,225507.12,197021.04,255401.5,257149.43,225957.31,"109Y11M" +10020,嘉義市,10020020,西區,140209,132013,134448,133084,144279,138856,138053,138793,252401.77,273624.38,282889.83,287659.78,245627.89,313428.08,321310.62,308923.17,"109Y11M" +09020,金門縣,09020010,金城鎮,28733,29458,29494,29406,29249,28731,29131,28718,38198.82,41576.23,41164.96,35049.38,37983.76,43143.34,42654.83,35716.79,"109Y11M" +09020,金門縣,09020020,金沙鎮,12972,11472,11415,11515,13229,12591,12311,12438,14137.68,13679.89,13749.99,11080.9,15182.21,15457.37,15262.19,11618.12,"109Y11M" +09020,金門縣,09020030,金湖鎮,25459,26831,26914,26901,25522,25941,25899,25786,32754.02,34292.13,35732.14,26673.87,31365.14,34645.96,35700.89,27049.44,"109Y11M" +09020,金門縣,09020040,金寧鄉,27600,25413,25512,25424,28005,26771,26735,26762,31643.44,31848.13,31775.4,26878.52,31828,33536.99,33729.3,26967.36,"109Y11M" +09020,金門縣,09020050,烈嶼鄉,3366,3221,3206,3231,3447,3227,3284,3279,3776.55,4425.14,4144.29,2974.16,3916.72,5026.33,4671.12,3188.47,"109Y11M" +09020,金門縣,09020060,烏坵鄉,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"109Y11M" +09007,連江縣,09007010,南竿鄉,7040,6853,6839,6834,7246,6784,6945,6825,7588.81,7801.12,7821.19,5932.6,7791.09,7943.34,8015.98,6079.16,"109Y11M" +09007,連江縣,09007020,北竿鄉,2056,1700,1722,1718,2202,1769,1796,1746,1955.72,2085.21,2061.54,1565.71,2016.06,2266.35,2254.97,1680.78,"109Y11M" +09007,連江縣,09007030,莒光鄉,1128,1038,1069,1052,1113,990,1062,1032,993.21,1051.25,1058.46,864.78,979.91,1032.73,1056.97,897.53,"109Y11M" +09007,連江縣,09007040,東引鄉,2287,2151,2216,2158,2259,2166,2254,2220,2213.03,2214.72,2171.47,1708.31,2196.96,2228.56,2230.7,1732.31,"109Y11M" diff --git a/The attainments and realizations of my dreams/2020_November_daily_mobile_user_distribution_by_county.csv b/The attainments and realizations of my dreams/2020_November_daily_mobile_user_distribution_by_county.csv new file mode 100644 index 00000000..64026b7a --- /dev/null +++ b/The attainments and realizations of my dreams/2020_November_daily_mobile_user_distribution_by_county.csv @@ -0,0 +1,24 @@ +COUNTY_ID,COUNTY,NIGHT_WORK,DAY_WORK(7:00~13:00),DAY_WORK(13:00~19:00),DAY_WORK,NIGHT_WEEKEND,DAY_WEEKEND(7:00~13:00),DAY_WEEKEND(13:00~19:00),DAY_WEEKEND,MORNING_WORK,MIDDAY_WORK,AFTERNOON_WORK,EVENING_WORK,MORNING_WEEKEND,MIDDAY_WEEKEND,AFTERNOON_WEEKEND,EVENING_WEEKEND,INFO_TIME +縣市代碼,縣市名稱,平日夜間停留人數,平日上午活動人數,平日下午活動人數,平日日間活動人數,假日夜間停留人數,假日上午活動人數,假日下午活動人數,假日日間活動人數,平日早晨旅次,平日中午旅次,平日午後旅次,平日晚上旅次,假日早晨旅次,假日中午旅次,假日午後旅次,假日晚上旅次,資料時間 +65000,新北市,4404882,3828955,3708033,3760027,4389998,4233496,4087167,4193773,10284511.41,8918287.6,9006483.28,9804692.81,8766501.62,10318260.43,10212998.84,9418215.79,"109Y11M" +63000,臺北市,2789958,3424948,3563844,3508241,2747668,2886879,3067448,2953925,7109127.81,8432508.36,8432755.71,8118225.21,5280778.32,7698035.05,7920404.09,6840720.14,"109Y11M" +68000,桃園市,2526697,2538817,2534858,2536854,2459045,2457750,2469675,2466701,5378615.6,5081505.82,5189705.13,5168944.95,4494943.06,5532910.8,5620730.37,5024045.69,"109Y11M" +66000,臺中市,3083970,3097381,3092610,3097786,3052863,3034869,3022051,3033950,6764050.31,6647991.06,6781947.04,6870578.9,5799132.24,7181235.71,7356663.43,6679511.57,"109Y11M" +67000,臺南市,1835928,1849314,1846605,1846887,1839022,1843679,1832836,1837561,3963064.59,3910969.02,4008063.88,3956241.29,3464568,4344466.5,4449459.65,3981201.53,"109Y11M" +64000,高雄市,2576693,2574896,2572996,2573879,2575650,2561834,2564244,2563361,5751041.86,5679883.06,5873371.46,5775527.53,4878469.83,5954713.26,6098213.63,5570972.78,"109Y11M" +10002,宜蘭縣,441203,429801,431568,429706,468078,470963,469260,465119,820612.54,884594.62,918124.02,792285.82,846875.65,1117919.27,1134634.42,893794.67,"109Y11M" +10004,新竹縣,656007,672505,667973,669470,658522,667690,659887,664304,1212645.85,1173657.34,1191427.45,1107531.23,1124406.72,1335534.07,1371502.21,1181676.04,"109Y11M" +10005,苗栗縣,505463,487130,485434,485570,519930,528448,520549,522946,934112.83,912872.42,951256.49,872506.02,968899.18,1194737.98,1264425.33,1056933.96,"109Y11M" +10007,彰化縣,1068303,1049600,1050004,1049606,1091186,1096873,1092149,1097891,2203943.54,2110569.6,2166761.19,2110485.15,2018196.98,2448868.57,2522773.25,2181056.12,"109Y11M" +10008,南投縣,426734,432678,430430,430064,454395,477733,476173,471206,776405.17,840887.51,855041.58,717360.5,828731.05,1145664.25,1173022.88,877683.77,"109Y11M" +10009,雲林縣,565293,570400,570334,570360,570283,573148,570827,572544,1105479.99,1106259.66,1150228.23,1042132.5,1037810.92,1271014.2,1322802.2,1101577.55,"109Y11M" +10010,嘉義縣,440515,435301,434018,434444,455221,464554,463403,461220,734515.31,753583.43,777476.7,655719.38,742929.19,950857.48,988927.35,747599.91,"109Y11M" +10013,屏東縣,689391,666686,669243,667004,710484,715567,716100,713366,1361450.11,1388371.68,1444718.81,1337537.22,1280532.7,1648915.92,1699894.79,1433396.47,"109Y11M" +10014,臺東縣,192086,190194,190066,190005,197914,197291,195779,195333,289533.92,332855.19,337462.37,273759.51,300570.48,392490.39,393746.24,300458.73,"109Y11M" +10015,花蓮縣,320650,318241,318562,317411,332256,331573,331336,328566,536693.87,600290.03,611537.14,516241.56,539027.08,690625.25,692356.39,553652.8,"109Y11M" +10016,澎湖縣,70549,68245,69080,69149,70009,68804,69423,69043,110302.5,118788.19,120856.52,104167.11,102772.41,121002.38,119482.67,99997.27,"109Y11M" +10017,基隆市,355821,297902,291392,293735,360605,348503,340866,346262,637563.49,568571.44,578417.38,586174.69,570316.67,696587.93,703124.49,607129.88,"109Y11M" +10018,新竹市,549601,570467,575181,572417,540378,543734,557890,548152,997287.73,1013791.85,1017258.54,985947.27,834137.4,1068331.03,1096901.32,955917.76,"109Y11M" +10020,嘉義市,257530,256316,257297,257060,262138,255554,251435,253886,477599.29,513240.31,527902.47,513166.9,442648.94,568829.58,578460.05,534880.48,"109Y11M" +09020,金門縣,98129,96394,96541,96478,99452,97261,97359,96983,120510.5,125821.51,126566.79,102614.41,120275.83,131809.99,132018.33,104540.19,"109Y11M" +09007,連江縣,12511,11742,11846,11762,12821,11708,12057,11823,12750.77,13152.3,13112.66,10067.09,12984.01,13470.99,13558.62,10389.78,"109Y11M" From 877c6381ea375c08bdc0f10978298d88ae1bf764 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 02:43:44 +0800 Subject: [PATCH 0016/2002] Committed 2021/08/31 --- .idea/encodings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.idea/encodings.xml b/.idea/encodings.xml index b1722402..5485132d 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -2,6 +2,8 @@ + + From 3d523cd708593de7ea75787679be9567cde6b302 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 12:17:30 +0800 Subject: [PATCH 0017/2002] Committed 2021/08/31 --- .../2020_Nov_daily_mobile_user_distribution_by_county.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.py diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.py b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.py new file mode 100644 index 00000000..6e7eedcc --- /dev/null +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.py @@ -0,0 +1,6 @@ +import pandas as pd + +df = pd.read_csv("2020_November_daily_mobile_user_distribution_by_county.csv" + , header=0, skiprows=1) + +print(df) From 364cafa12808a15edb170848479a88a1418eca74 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 12:30:41 +0800 Subject: [PATCH 0018/2002] Committed 2021/09/01 --- .../2020_Nov_daily_mobile_user_distribution_by_county.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.py b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.py index 6e7eedcc..f06698b9 100644 --- a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.py +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.py @@ -1,6 +1,10 @@ import pandas as pd +# Skip one or more rows by giving the row indices (the first row that's not skipped is the header):[1] df = pd.read_csv("2020_November_daily_mobile_user_distribution_by_county.csv" - , header=0, skiprows=1) + , header=0, skiprows=[1], encoding="big5") print(df) + +# References: +# 1. https://stackoverflow.com/a/27325729/14900011 From 99799dad0fc0a492be5d6da8e7d301faa1a2e5b5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 12:32:24 +0800 Subject: [PATCH 0019/2002] Committed 2021/09/01 --- ...Nov_daily_mobile_user_distribution_by_county2.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county2.py diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county2.py b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county2.py new file mode 100644 index 00000000..b166fb9d --- /dev/null +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county2.py @@ -0,0 +1,13 @@ +import pandas as pd + +# Skip one or more rows by giving the row indices (the first row that's not skipped is the header):[1] +df = pd.read_csv("2020_November_daily_mobile_user_distribution_by_county.csv" + , header=0, skiprows=[1], encoding="big5") + +print(df) + +new = df.drop(labels=["COUNTY_ID"], axis=1) +print(new) + +# References: +# 1. https://stackoverflow.com/a/27325729/14900011 From 9c6124ba6d5d7ea9bad71351979c155ef0712f66 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 12:37:33 +0800 Subject: [PATCH 0020/2002] Committed 2021/09/01 --- ..._daily_mobile_user_distribution_by_county_3.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county_3.py diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county_3.py b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county_3.py new file mode 100644 index 00000000..4e6e611f --- /dev/null +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county_3.py @@ -0,0 +1,15 @@ +import pandas as pd + +# Skip one or more rows by giving the row indices (the first row that's not skipped is the header):[1] +df = pd.read_csv("2020_November_daily_mobile_user_distribution_by_county.csv" + , header=0, skiprows=[1], encoding="big5") + +print(df) + +new = df.drop(labels=["COUNTY_ID"], axis=1) +print(new) + +new.to_csv('2020_Nov_daily_mobile_user_distribution_by_county.csv') + +# References: +# 1. https://stackoverflow.com/a/27325729/14900011 From 46650e847d8de77559417d59b4855919f0df8ac2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 12:39:50 +0800 Subject: [PATCH 0021/2002] Committed 2021/09/01 --- ...ily_mobile_user_distribution_by_county.csv | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.csv diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.csv b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.csv new file mode 100644 index 00000000..5db884ce --- /dev/null +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county.csv @@ -0,0 +1,23 @@ +,COUNTY,NIGHT_WORK,DAY_WORK(7:00~13:00),DAY_WORK(13:00~19:00),DAY_WORK,NIGHT_WEEKEND,DAY_WEEKEND(7:00~13:00),DAY_WEEKEND(13:00~19:00),DAY_WEEKEND,MORNING_WORK,MIDDAY_WORK,AFTERNOON_WORK,EVENING_WORK,MORNING_WEEKEND,MIDDAY_WEEKEND,AFTERNOON_WEEKEND,EVENING_WEEKEND,INFO_TIME +0,啣撣,4404882,3828955,3708033,3760027,4389998,4233496,4087167,4193773,10284511.41,8918287.6,9006483.28,9804692.81,8766501.62,10318260.43,10212998.84,9418215.79,109Y11M +1,箏撣,2789958,3424948,3563844,3508241,2747668,2886879,3067448,2953925,7109127.81,8432508.36,8432755.71,8118225.21,5280778.32,7698035.05,7920404.09,6840720.14,109Y11M +2,獢撣,2526697,2538817,2534858,2536854,2459045,2457750,2469675,2466701,5378615.6,5081505.82,5189705.13,5168944.95,4494943.06,5532910.8,5620730.37,5024045.69,109Y11M +3,箔葉撣,3083970,3097381,3092610,3097786,3052863,3034869,3022051,3033950,6764050.31,6647991.06,6781947.04,6870578.9,5799132.24,7181235.71,7356663.43,6679511.57,109Y11M +4,箏撣,1835928,1849314,1846605,1846887,1839022,1843679,1832836,1837561,3963064.59,3910969.02,4008063.88,3956241.29,3464568.0,4344466.5,4449459.65,3981201.53,109Y11M +5,擃撣,2576693,2574896,2572996,2573879,2575650,2561834,2564244,2563361,5751041.86,5679883.06,5873371.46,5775527.53,4878469.83,5954713.26,6098213.63,5570972.78,109Y11M +6,摰剔腦,441203,429801,431568,429706,468078,470963,469260,465119,820612.54,884594.62,918124.02,792285.82,846875.65,1117919.27,1134634.42,893794.67,109Y11M +7,啁姘蝮,656007,672505,667973,669470,658522,667690,659887,664304,1212645.85,1173657.34,1191427.45,1107531.23,1124406.72,1335534.07,1371502.21,1181676.04,109Y11M +8,蝮,505463,487130,485434,485570,519930,528448,520549,522946,934112.83,912872.42,951256.49,872506.02,968899.18,1194737.98,1264425.33,1056933.96,109Y11M +9,敶啣蝮,1068303,1049600,1050004,1049606,1091186,1096873,1092149,1097891,2203943.54,2110569.6,2166761.19,2110485.15,2018196.98,2448868.57,2522773.25,2181056.12,109Y11M +10,蝮,426734,432678,430430,430064,454395,477733,476173,471206,776405.17,840887.51,855041.58,717360.5,828731.05,1145664.25,1173022.88,877683.77,109Y11M +11,脫蝮,565293,570400,570334,570360,570283,573148,570827,572544,1105479.99,1106259.66,1150228.23,1042132.5,1037810.92,1271014.2,1322802.2,1101577.55,109Y11M +12,蝢拍腦,440515,435301,434018,434444,455221,464554,463403,461220,734515.31,753583.43,777476.7,655719.38,742929.19,950857.48,988927.35,747599.91,109Y11M +13,撅梁腦,689391,666686,669243,667004,710484,715567,716100,713366,1361450.11,1388371.68,1444718.81,1337537.22,1280532.7,1648915.92,1699894.79,1433396.47,109Y11M +14,箸梁腦,192086,190194,190066,190005,197914,197291,195779,195333,289533.92,332855.19,337462.37,273759.51,300570.48,392490.39,393746.24,300458.73,109Y11M +15,梯桃腦,320650,318241,318562,317411,332256,331573,331336,328566,536693.87,600290.03,611537.14,516241.56,539027.08,690625.25,692356.39,553652.8,109Y11M +16,瞉皝蝮,70549,68245,69080,69149,70009,68804,69423,69043,110302.5,118788.19,120856.52,104167.11,102772.41,121002.38,119482.67,99997.27,109Y11M +17,粹撣,355821,297902,291392,293735,360605,348503,340866,346262,637563.49,568571.44,578417.38,586174.69,570316.67,696587.93,703124.49,607129.88,109Y11M +18,啁姘撣,549601,570467,575181,572417,540378,543734,557890,548152,997287.73,1013791.85,1017258.54,985947.27,834137.4,1068331.03,1096901.32,955917.76,109Y11M +19,蝢拙,257530,256316,257297,257060,262138,255554,251435,253886,477599.29,513240.31,527902.47,513166.9,442648.94,568829.58,578460.05,534880.48,109Y11M +20,蝮,98129,96394,96541,96478,99452,97261,97359,96983,120510.5,125821.51,126566.79,102614.41,120275.83,131809.99,132018.33,104540.19,109Y11M +21,瘙蝮,12511,11742,11846,11762,12821,11708,12057,11823,12750.77,13152.3,13112.66,10067.09,12984.01,13470.99,13558.62,10389.78,109Y11M From 241740f817d2086c2474848c0d78ebd1d4365ed3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 12:46:48 +0800 Subject: [PATCH 0022/2002] Committed 2021/09/01 --- ...v_daily_mobile_user_distribution_by_county4.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county4.py diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county4.py b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county4.py new file mode 100644 index 00000000..4e6e611f --- /dev/null +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county4.py @@ -0,0 +1,15 @@ +import pandas as pd + +# Skip one or more rows by giving the row indices (the first row that's not skipped is the header):[1] +df = pd.read_csv("2020_November_daily_mobile_user_distribution_by_county.csv" + , header=0, skiprows=[1], encoding="big5") + +print(df) + +new = df.drop(labels=["COUNTY_ID"], axis=1) +print(new) + +new.to_csv('2020_Nov_daily_mobile_user_distribution_by_county.csv') + +# References: +# 1. https://stackoverflow.com/a/27325729/14900011 From 3ce1b8f09182eeacadd087dc51a9f2da4d034fd7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 12:55:57 +0800 Subject: [PATCH 0023/2002] Committed 2021/09/01 --- ...ov_daily_mobile_user_distribution_by_county4.py | 3 ++- ...ov_daily_mobile_user_distribution_by_county5.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county5.py diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county4.py b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county4.py index 4e6e611f..34f46c56 100644 --- a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county4.py +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county4.py @@ -9,7 +9,8 @@ new = df.drop(labels=["COUNTY_ID"], axis=1) print(new) -new.to_csv('2020_Nov_daily_mobile_user_distribution_by_county.csv') +branding = new.reset_index().set_index('COUNTY') +print(branding) # References: # 1. https://stackoverflow.com/a/27325729/14900011 diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county5.py b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county5.py new file mode 100644 index 00000000..33a5cd7b --- /dev/null +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county5.py @@ -0,0 +1,14 @@ +import pandas as pd + +# Column(s) to use as the row labels of the DataFrame, either given as string name or column index. +# If a sequence of int / str is given, a MultiIndex is used.[1] +df = pd.read_csv("2020_November_daily_mobile_user_distribution_by_county.csv" + , header=0, skiprows=[1], encoding="big5", index_col=["COUNTY"]) + +print(df) + +new = df.drop(labels=["COUNTY_ID"], axis=1) +print(new) + +# References: +# 1. https://pandas.pydata.org/pandas-docs/dev/reference/api/pandas.read_csv.html From a7fb5828ab7fda515ceb547617b282bde273230e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 12:58:42 +0800 Subject: [PATCH 0024/2002] Committed 2021/09/01 --- ..._daily_mobile_user_distribution_by_county6.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county6.py diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county6.py b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county6.py new file mode 100644 index 00000000..29d84ee0 --- /dev/null +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county6.py @@ -0,0 +1,16 @@ +import pandas as pd + +# Column(s) to use as the row labels of the DataFrame, either given as string name or column index. +# If a sequence of int / str is given, a MultiIndex is used.[1] +df = pd.read_csv("2020_November_daily_mobile_user_distribution_by_county.csv" + , header=0, skiprows=[1], encoding="big5", index_col=["COUNTY"]) + +print(df) + +new = df.drop(labels=["COUNTY_ID"], axis=1) +print(new) + +new.to_csv('2020_Nov_daily_mobile_user_distribution_by_county_.csv') + +# References: +# 1. https://pandas.pydata.org/pandas-docs/dev/reference/api/pandas.read_csv.html From 7dbdddb6717dc92c222023b51e2e3d08086bf1bc Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 12:59:37 +0800 Subject: [PATCH 0025/2002] Committed 2021/09/01 --- ...ly_mobile_user_distribution_by_county_.csv | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county_.csv diff --git a/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county_.csv b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county_.csv new file mode 100644 index 00000000..71ec4a7c --- /dev/null +++ b/The attainments and realizations of my dreams/2020_Nov_daily_mobile_user_distribution_by_county_.csv @@ -0,0 +1,23 @@ +COUNTY,NIGHT_WORK,DAY_WORK(7:00~13:00),DAY_WORK(13:00~19:00),DAY_WORK,NIGHT_WEEKEND,DAY_WEEKEND(7:00~13:00),DAY_WEEKEND(13:00~19:00),DAY_WEEKEND,MORNING_WORK,MIDDAY_WORK,AFTERNOON_WORK,EVENING_WORK,MORNING_WEEKEND,MIDDAY_WEEKEND,AFTERNOON_WEEKEND,EVENING_WEEKEND,INFO_TIME +啣撣,4404882,3828955,3708033,3760027,4389998,4233496,4087167,4193773,10284511.41,8918287.6,9006483.28,9804692.81,8766501.62,10318260.43,10212998.84,9418215.79,109Y11M +箏撣,2789958,3424948,3563844,3508241,2747668,2886879,3067448,2953925,7109127.81,8432508.36,8432755.71,8118225.21,5280778.32,7698035.05,7920404.09,6840720.14,109Y11M +獢撣,2526697,2538817,2534858,2536854,2459045,2457750,2469675,2466701,5378615.6,5081505.82,5189705.13,5168944.95,4494943.06,5532910.8,5620730.37,5024045.69,109Y11M +箔葉撣,3083970,3097381,3092610,3097786,3052863,3034869,3022051,3033950,6764050.31,6647991.06,6781947.04,6870578.9,5799132.24,7181235.71,7356663.43,6679511.57,109Y11M +箏撣,1835928,1849314,1846605,1846887,1839022,1843679,1832836,1837561,3963064.59,3910969.02,4008063.88,3956241.29,3464568.0,4344466.5,4449459.65,3981201.53,109Y11M +擃撣,2576693,2574896,2572996,2573879,2575650,2561834,2564244,2563361,5751041.86,5679883.06,5873371.46,5775527.53,4878469.83,5954713.26,6098213.63,5570972.78,109Y11M +摰剔腦,441203,429801,431568,429706,468078,470963,469260,465119,820612.54,884594.62,918124.02,792285.82,846875.65,1117919.27,1134634.42,893794.67,109Y11M +啁姘蝮,656007,672505,667973,669470,658522,667690,659887,664304,1212645.85,1173657.34,1191427.45,1107531.23,1124406.72,1335534.07,1371502.21,1181676.04,109Y11M +蝮,505463,487130,485434,485570,519930,528448,520549,522946,934112.83,912872.42,951256.49,872506.02,968899.18,1194737.98,1264425.33,1056933.96,109Y11M +敶啣蝮,1068303,1049600,1050004,1049606,1091186,1096873,1092149,1097891,2203943.54,2110569.6,2166761.19,2110485.15,2018196.98,2448868.57,2522773.25,2181056.12,109Y11M +蝮,426734,432678,430430,430064,454395,477733,476173,471206,776405.17,840887.51,855041.58,717360.5,828731.05,1145664.25,1173022.88,877683.77,109Y11M +脫蝮,565293,570400,570334,570360,570283,573148,570827,572544,1105479.99,1106259.66,1150228.23,1042132.5,1037810.92,1271014.2,1322802.2,1101577.55,109Y11M +蝢拍腦,440515,435301,434018,434444,455221,464554,463403,461220,734515.31,753583.43,777476.7,655719.38,742929.19,950857.48,988927.35,747599.91,109Y11M +撅梁腦,689391,666686,669243,667004,710484,715567,716100,713366,1361450.11,1388371.68,1444718.81,1337537.22,1280532.7,1648915.92,1699894.79,1433396.47,109Y11M +箸梁腦,192086,190194,190066,190005,197914,197291,195779,195333,289533.92,332855.19,337462.37,273759.51,300570.48,392490.39,393746.24,300458.73,109Y11M +梯桃腦,320650,318241,318562,317411,332256,331573,331336,328566,536693.87,600290.03,611537.14,516241.56,539027.08,690625.25,692356.39,553652.8,109Y11M +瞉皝蝮,70549,68245,69080,69149,70009,68804,69423,69043,110302.5,118788.19,120856.52,104167.11,102772.41,121002.38,119482.67,99997.27,109Y11M +粹撣,355821,297902,291392,293735,360605,348503,340866,346262,637563.49,568571.44,578417.38,586174.69,570316.67,696587.93,703124.49,607129.88,109Y11M +啁姘撣,549601,570467,575181,572417,540378,543734,557890,548152,997287.73,1013791.85,1017258.54,985947.27,834137.4,1068331.03,1096901.32,955917.76,109Y11M +蝢拙,257530,256316,257297,257060,262138,255554,251435,253886,477599.29,513240.31,527902.47,513166.9,442648.94,568829.58,578460.05,534880.48,109Y11M +蝮,98129,96394,96541,96478,99452,97261,97359,96983,120510.5,125821.51,126566.79,102614.41,120275.83,131809.99,132018.33,104540.19,109Y11M +瘙蝮,12511,11742,11846,11762,12821,11708,12057,11823,12750.77,13152.3,13112.66,10067.09,12984.01,13470.99,13558.62,10389.78,109Y11M From 55c47a7e81d766ae2a46391960d9967bf9dd1bb1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 1 Sep 2021 13:08:20 +0800 Subject: [PATCH 0026/2002] Committed 2021/09/01 --- .../2020_regional_daily_mobile_user_basic_statistics.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_regional_daily_mobile_user_basic_statistics.py diff --git a/The attainments and realizations of my dreams/2020_regional_daily_mobile_user_basic_statistics.py b/The attainments and realizations of my dreams/2020_regional_daily_mobile_user_basic_statistics.py new file mode 100644 index 00000000..58023f1b --- /dev/null +++ b/The attainments and realizations of my dreams/2020_regional_daily_mobile_user_basic_statistics.py @@ -0,0 +1,8 @@ +import pandas as pd + +dataframe = pd.read_csv('2020_Nov_daily_mobile_user_distribution_by_county_.csv', header=0, + index_col=["COUNTY"]) +print(dataframe) + +total = dataframe["NIGHT_WORK"].sum() +print(total) From 17ba49ec7fb77a0c43c7a9672b7b0e533aa20047 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 12 Sep 2021 19:12:36 +0800 Subject: [PATCH 0027/2002] Committed 2021/09/12 --- ...ly_mobile_user_distribution_by_county_.csv | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_translated_Nov_daily_mobile_user_distribution_by_county_.csv diff --git a/The attainments and realizations of my dreams/2020_translated_Nov_daily_mobile_user_distribution_by_county_.csv b/The attainments and realizations of my dreams/2020_translated_Nov_daily_mobile_user_distribution_by_county_.csv new file mode 100644 index 00000000..9a506f57 --- /dev/null +++ b/The attainments and realizations of my dreams/2020_translated_Nov_daily_mobile_user_distribution_by_county_.csv @@ -0,0 +1,23 @@ +,COUNTY,NIGHT_WORK,DAY_WORK(7:00~13:00),DAY_WORK(13:00~19:00),DAY_WORK,NIGHT_WEEKEND,DAY_WEEKEND(7:00~13:00),DAY_WEEKEND(13:00~19:00),DAY_WEEKEND,MORNING_WORK,MIDDAY_WORK,AFTERNOON_WORK,EVENING_WORK,MORNING_WEEKEND,MIDDAY_WEEKEND,AFTERNOON_WEEKEND,EVENING_WEEKEND,INFO_TIME +0,New Taipei City,4404882,3828955,3708033,3760027,4389998,4233496,4087167,4193773,10284511.41,8918287.6,9006483.28,9804692.81,8766501.62,10318260.43,10212998.84,9418215.79,109Y11M +1,Taipei City,2789958,3424948,3563844,3508241,2747668,2886879,3067448,2953925,7109127.81,8432508.36,8432755.71,8118225.21,5280778.32,7698035.05,7920404.09,6840720.14,109Y11M +2,Taoyuan City,2526697,2538817,2534858,2536854,2459045,2457750,2469675,2466701,5378615.6,5081505.82,5189705.13,5168944.95,4494943.06,5532910.8,5620730.37,5024045.69,109Y11M +3,Taichung City,3083970,3097381,3092610,3097786,3052863,3034869,3022051,3033950,6764050.31,6647991.06,6781947.04,6870578.9,5799132.24,7181235.71,7356663.43,6679511.57,109Y11M +4,Tainan City,1835928,1849314,1846605,1846887,1839022,1843679,1832836,1837561,3963064.59,3910969.02,4008063.88,3956241.29,3464568.0,4344466.5,4449459.65,3981201.53,109Y11M +5,Kaohsiung City,2576693,2574896,2572996,2573879,2575650,2561834,2564244,2563361,5751041.86,5679883.06,5873371.46,5775527.53,4878469.83,5954713.26,6098213.63,5570972.78,109Y11M +6,Yilan County,441203,429801,431568,429706,468078,470963,469260,465119,820612.54,884594.62,918124.02,792285.82,846875.65,1117919.27,1134634.42,893794.67,109Y11M +7,Hsinchu County,656007,672505,667973,669470,658522,667690,659887,664304,1212645.85,1173657.34,1191427.45,1107531.23,1124406.72,1335534.07,1371502.21,1181676.04,109Y11M +8,Miaoli County,505463,487130,485434,485570,519930,528448,520549,522946,934112.83,912872.42,951256.49,872506.02,968899.18,1194737.98,1264425.33,1056933.96,109Y11M +9,Changhua County,1068303,1049600,1050004,1049606,1091186,1096873,1092149,1097891,2203943.54,2110569.6,2166761.19,2110485.15,2018196.98,2448868.57,2522773.25,2181056.12,109Y11M +10,Nantou County,426734,432678,430430,430064,454395,477733,476173,471206,776405.17,840887.51,855041.58,717360.5,828731.05,1145664.25,1173022.88,877683.77,109Y11M +11,Yunlin County,565293,570400,570334,570360,570283,573148,570827,572544,1105479.99,1106259.66,1150228.23,1042132.5,1037810.92,1271014.2,1322802.2,1101577.55,109Y11M +12,Chiayi County,440515,435301,434018,434444,455221,464554,463403,461220,734515.31,753583.43,777476.7,655719.38,742929.19,950857.48,988927.35,747599.91,109Y11M +13,Pingtung County,689391,666686,669243,667004,710484,715567,716100,713366,1361450.11,1388371.68,1444718.81,1337537.22,1280532.7,1648915.92,1699894.79,1433396.47,109Y11M +14,Taitung County,192086,190194,190066,190005,197914,197291,195779,195333,289533.92,332855.19,337462.37,273759.51,300570.48,392490.39,393746.24,300458.73,109Y11M +15,Hualien County,320650,318241,318562,317411,332256,331573,331336,328566,536693.87,600290.03,611537.14,516241.56,539027.08,690625.25,692356.39,553652.8,109Y11M +16,Penhu County,70549,68245,69080,69149,70009,68804,69423,69043,110302.5,118788.19,120856.52,104167.11,102772.41,121002.38,119482.67,99997.27,109Y11M +17,Keelung City,355821,297902,291392,293735,360605,348503,340866,346262,637563.49,568571.44,578417.38,586174.69,570316.67,696587.93,703124.49,607129.88,109Y11M +18,Hsinchu City,549601,570467,575181,572417,540378,543734,557890,548152,997287.73,1013791.85,1017258.54,985947.27,834137.4,1068331.03,1096901.32,955917.76,109Y11M +19,Chiayi City,257530,256316,257297,257060,262138,255554,251435,253886,477599.29,513240.31,527902.47,513166.9,442648.94,568829.58,578460.05,534880.48,109Y11M +20,Kinmen County,98129,96394,96541,96478,99452,97261,97359,96983,120510.5,125821.51,126566.79,102614.41,120275.83,131809.99,132018.33,104540.19,109Y11M +21,Lienjian County,12511,11742,11846,11762,12821,11708,12057,11823,12750.77,13152.3,13112.66,10067.09,12984.01,13470.99,13558.62,10389.78,109Y11M \ No newline at end of file From e167d1e80744728b89a813f24292992e4f5b28a3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 12 Sep 2021 19:14:44 +0800 Subject: [PATCH 0028/2002] Committed 2021/09/12 --- .../2020_translated.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_translated.py diff --git a/The attainments and realizations of my dreams/2020_translated.py b/The attainments and realizations of my dreams/2020_translated.py new file mode 100644 index 00000000..3129bc39 --- /dev/null +++ b/The attainments and realizations of my dreams/2020_translated.py @@ -0,0 +1,5 @@ +import pandas as pd + +distribution = pd.read_csv('2020_translated_Nov_daily_mobile_user_distribution_by_county_.csv') + +print(distribution) From 7a37254a899e3607f7e7d0a239309d0510bc7ca0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 12 Sep 2021 19:19:52 +0800 Subject: [PATCH 0029/2002] Committed 2021/09/12 --- .../2020_translated.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/2020_translated.py b/The attainments and realizations of my dreams/2020_translated.py index 3129bc39..952d587c 100644 --- a/The attainments and realizations of my dreams/2020_translated.py +++ b/The attainments and realizations of my dreams/2020_translated.py @@ -1,5 +1,6 @@ import pandas as pd -distribution = pd.read_csv('2020_translated_Nov_daily_mobile_user_distribution_by_county_.csv') +distribution = pd.read_csv('2020_translated_Nov_daily_mobile_user_distribution_by_county_.csv', + index_col=0) -print(distribution) +print(distribution.head()) From b77be60401f06a33292c1ed6d75c9052628eb579 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:10:16 +0800 Subject: [PATCH 0030/2002] Committed 2021/09/13 --- The attainments and realizations of my dreams/2020_translated.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/2020_translated.py b/The attainments and realizations of my dreams/2020_translated.py index 952d587c..9222a2e8 100644 --- a/The attainments and realizations of my dreams/2020_translated.py +++ b/The attainments and realizations of my dreams/2020_translated.py @@ -4,3 +4,4 @@ index_col=0) print(distribution.head()) +print(distribution.info()) From 46fae420b325da31a74c6932d29d3dbef2db4359 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:23:55 +0800 Subject: [PATCH 0031/2002] Committed 2021/09/13 --- .../2020_translated.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/2020_translated.py b/The attainments and realizations of my dreams/2020_translated.py index 9222a2e8..31719fa2 100644 --- a/The attainments and realizations of my dreams/2020_translated.py +++ b/The attainments and realizations of my dreams/2020_translated.py @@ -4,4 +4,9 @@ index_col=0) print(distribution.head()) +print(30*'=') print(distribution.info()) +print(30*'=') +print(distribution["INFO_TIME"].value_counts()) +print(30*'=') +print(distribution.describe()) From d06685281ebd044c8556faeb337dfa22c67926c7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:49:27 +0800 Subject: [PATCH 0032/2002] Committed 2021/09/13 --- .../2020_translated.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/2020_translated.py b/The attainments and realizations of my dreams/2020_translated.py index 31719fa2..df08c281 100644 --- a/The attainments and realizations of my dreams/2020_translated.py +++ b/The attainments and realizations of my dreams/2020_translated.py @@ -1,4 +1,5 @@ import pandas as pd +import matplotlib.pyplot as plt distribution = pd.read_csv('2020_translated_Nov_daily_mobile_user_distribution_by_county_.csv', index_col=0) @@ -10,3 +11,6 @@ print(distribution["INFO_TIME"].value_counts()) print(30*'=') print(distribution.describe()) +print(30*'=') +print(distribution.hist(bins=50, figsize=(20, 15))) +plt.show() From f8630636161aa6d2c8009e0776d2a136ab528246 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:52:47 +0800 Subject: [PATCH 0033/2002] Committed 2021/09/13 --- The attainments and realizations of my dreams/2020_translated.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/2020_translated.py b/The attainments and realizations of my dreams/2020_translated.py index df08c281..ac5feb2d 100644 --- a/The attainments and realizations of my dreams/2020_translated.py +++ b/The attainments and realizations of my dreams/2020_translated.py @@ -13,4 +13,5 @@ print(distribution.describe()) print(30*'=') print(distribution.hist(bins=50, figsize=(20, 15))) +plt.savefig('2020_translated_histogram') plt.show() From c1369389dcbf83d9ef8b4a97b127479c8adc72d7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:59:04 +0800 Subject: [PATCH 0034/2002] Committed 2021/09/13 --- Pandas User Guide/Transpose().py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Pandas User Guide/Transpose().py diff --git a/Pandas User Guide/Transpose().py b/Pandas User Guide/Transpose().py new file mode 100644 index 00000000..cd56acb6 --- /dev/null +++ b/Pandas User Guide/Transpose().py @@ -0,0 +1,5 @@ +import pandas as pd + +d1 = {'col1': [1, 2], 'col2': [3, 4]} +df1 = pd.DataFrame(data=d1) +print(df1) From 955acd8959e20ed06eba76150bbee81d3df339aa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 16:14:52 +0800 Subject: [PATCH 0035/2002] Committed 2021/09/13 --- Pandas User Guide/Transpose().py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Pandas User Guide/Transpose().py b/Pandas User Guide/Transpose().py index cd56acb6..ad2a4494 100644 --- a/Pandas User Guide/Transpose().py +++ b/Pandas User Guide/Transpose().py @@ -3,3 +3,9 @@ d1 = {'col1': [1, 2], 'col2': [3, 4]} df1 = pd.DataFrame(data=d1) print(df1) + +df1_transposed = df1.transpose() # or df1.T +print(df1_transposed) + +# Reference: +# https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.transpose.html From d508467fad020efacefc961b3fcf196955d47e24 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 16:36:16 +0800 Subject: [PATCH 0036/2002] Committed 2021/09/13 --- .../2020_translated_2.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/2020_translated_2.py diff --git a/The attainments and realizations of my dreams/2020_translated_2.py b/The attainments and realizations of my dreams/2020_translated_2.py new file mode 100644 index 00000000..e69de29b From 0de9bbc2d6e92ebd7135a67fd573bae322bba655 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:14:42 +0800 Subject: [PATCH 0037/2002] Committed 2021/09/13 --- .../2020_translated_2.py | 9 +++++++++ ...ted_mobile_user_distribution_by_county.csv | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_transposed_translated_mobile_user_distribution_by_county.csv diff --git a/The attainments and realizations of my dreams/2020_translated_2.py b/The attainments and realizations of my dreams/2020_translated_2.py index e69de29b..eaaaf4e2 100644 --- a/The attainments and realizations of my dreams/2020_translated_2.py +++ b/The attainments and realizations of my dreams/2020_translated_2.py @@ -0,0 +1,9 @@ +import pandas as pd +import matplotlib.pyplot as plt + +distribution = pd.read_csv('2020_translated_Nov_daily_mobile_user_distribution_by_county_.csv', + index_col=0) + +transposed_distribution = distribution.transpose() +print(transposed_distribution) +transposed_distribution.to_csv("2020_transposed_translated_mobile_user_distribution_by_county.csv") diff --git a/The attainments and realizations of my dreams/2020_transposed_translated_mobile_user_distribution_by_county.csv b/The attainments and realizations of my dreams/2020_transposed_translated_mobile_user_distribution_by_county.csv new file mode 100644 index 00000000..ce1fc1be --- /dev/null +++ b/The attainments and realizations of my dreams/2020_transposed_translated_mobile_user_distribution_by_county.csv @@ -0,0 +1,19 @@ +,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +COUNTY,New Taipei City,Taipei City,Taoyuan City,Taichung City,Tainan City,Kaohsiung City,Yilan County,Hsinchu County,Miaoli County,Changhua County,Nantou County,Yunlin County,Chiayi County,Pingtung County,Taitung County,Hualien County,Penhu County,Keelung City,Hsinchu City,Chiayi City,Kinmen County,Lienjian County +NIGHT_WORK,4404882,2789958,2526697,3083970,1835928,2576693,441203,656007,505463,1068303,426734,565293,440515,689391,192086,320650,70549,355821,549601,257530,98129,12511 +DAY_WORK(7:00~13:00),3828955,3424948,2538817,3097381,1849314,2574896,429801,672505,487130,1049600,432678,570400,435301,666686,190194,318241,68245,297902,570467,256316,96394,11742 +DAY_WORK(13:00~19:00),3708033,3563844,2534858,3092610,1846605,2572996,431568,667973,485434,1050004,430430,570334,434018,669243,190066,318562,69080,291392,575181,257297,96541,11846 +DAY_WORK,3760027,3508241,2536854,3097786,1846887,2573879,429706,669470,485570,1049606,430064,570360,434444,667004,190005,317411,69149,293735,572417,257060,96478,11762 +NIGHT_WEEKEND,4389998,2747668,2459045,3052863,1839022,2575650,468078,658522,519930,1091186,454395,570283,455221,710484,197914,332256,70009,360605,540378,262138,99452,12821 +DAY_WEEKEND(7:00~13:00),4233496,2886879,2457750,3034869,1843679,2561834,470963,667690,528448,1096873,477733,573148,464554,715567,197291,331573,68804,348503,543734,255554,97261,11708 +DAY_WEEKEND(13:00~19:00),4087167,3067448,2469675,3022051,1832836,2564244,469260,659887,520549,1092149,476173,570827,463403,716100,195779,331336,69423,340866,557890,251435,97359,12057 +DAY_WEEKEND,4193773,2953925,2466701,3033950,1837561,2563361,465119,664304,522946,1097891,471206,572544,461220,713366,195333,328566,69043,346262,548152,253886,96983,11823 +MORNING_WORK,10284511.41,7109127.81,5378615.6,6764050.31,3963064.59,5751041.86,820612.54,1212645.85,934112.83,2203943.54,776405.17,1105479.99,734515.31,1361450.11,289533.92,536693.87,110302.5,637563.49,997287.73,477599.29,120510.5,12750.77 +MIDDAY_WORK,8918287.6,8432508.36,5081505.82,6647991.06,3910969.02,5679883.06,884594.62,1173657.34,912872.42,2110569.6,840887.51,1106259.66,753583.43,1388371.68,332855.19,600290.03,118788.19,568571.44,1013791.85,513240.31,125821.51,13152.3 +AFTERNOON_WORK,9006483.28,8432755.71,5189705.13,6781947.04,4008063.88,5873371.46,918124.02,1191427.45,951256.49,2166761.19,855041.58,1150228.23,777476.7,1444718.81,337462.37,611537.14,120856.52,578417.38,1017258.54,527902.47,126566.79,13112.66 +EVENING_WORK,9804692.81,8118225.21,5168944.95,6870578.9,3956241.29,5775527.53,792285.82,1107531.23,872506.02,2110485.15,717360.5,1042132.5,655719.38,1337537.22,273759.51,516241.56,104167.11,586174.69,985947.27,513166.9,102614.41,10067.09 +MORNING_WEEKEND,8766501.62,5280778.32,4494943.06,5799132.24,3464568.0,4878469.83,846875.65,1124406.72,968899.18,2018196.98,828731.05,1037810.92,742929.19,1280532.7,300570.48,539027.08,102772.41,570316.67,834137.4,442648.94,120275.83,12984.01 +MIDDAY_WEEKEND,10318260.43,7698035.05,5532910.8,7181235.71,4344466.5,5954713.26,1117919.27,1335534.07,1194737.98,2448868.57,1145664.25,1271014.2,950857.48,1648915.92,392490.39,690625.25,121002.38,696587.93,1068331.03,568829.58,131809.99,13470.99 +AFTERNOON_WEEKEND,10212998.84,7920404.09,5620730.37,7356663.43,4449459.65,6098213.63,1134634.42,1371502.21,1264425.33,2522773.25,1173022.88,1322802.2,988927.35,1699894.79,393746.24,692356.39,119482.67,703124.49,1096901.32,578460.05,132018.33,13558.62 +EVENING_WEEKEND,9418215.79,6840720.14,5024045.69,6679511.57,3981201.53,5570972.78,893794.67,1181676.04,1056933.96,2181056.12,877683.77,1101577.55,747599.91,1433396.47,300458.73,553652.8,99997.27,607129.88,955917.76,534880.48,104540.19,10389.78 +INFO_TIME,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M,109Y11M From 4473536432bc52048e17ebabb8f68ccbece996f6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:17:57 +0800 Subject: [PATCH 0038/2002] Committed 2021/09/13 --- .../2020_transposed_translated.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_transposed_translated.py diff --git a/The attainments and realizations of my dreams/2020_transposed_translated.py b/The attainments and realizations of my dreams/2020_transposed_translated.py new file mode 100644 index 00000000..5636a953 --- /dev/null +++ b/The attainments and realizations of my dreams/2020_transposed_translated.py @@ -0,0 +1,5 @@ +import pandas as pd +import matplotlib.pyplot as plt + +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv') +print(distribution) From 5e094445a83974b3fa3e915ca9e6d2d5928adecf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:22:25 +0800 Subject: [PATCH 0039/2002] Committed 2021/09/13 --- .../2020_transposed_translated.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/2020_transposed_translated.py b/The attainments and realizations of my dreams/2020_transposed_translated.py index 5636a953..7ba5e5c2 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated.py @@ -3,3 +3,7 @@ distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv') print(distribution) + +distribution2 = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0) +print(distribution2) From 58d9b9a85862db81bc03c430d38a73193f0f0d07 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:27:31 +0800 Subject: [PATCH 0040/2002] Committed 2021/09/13 --- .../2020_transposed_translated.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/2020_transposed_translated.py b/The attainments and realizations of my dreams/2020_transposed_translated.py index 7ba5e5c2..094497fa 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated.py @@ -7,3 +7,5 @@ distribution2 = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', index_col=0) print(distribution2) + + From 9a7814e9f4bec9f720a8823c113d89b57b3293d3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:32:35 +0800 Subject: [PATCH 0041/2002] Committed 2021/09/13 --- .../2020_translated_histogram.png | Bin 0 -> 100528 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/2020_translated_histogram.png diff --git a/The attainments and realizations of my dreams/2020_translated_histogram.png b/The attainments and realizations of my dreams/2020_translated_histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..35d6c5f7a98566f4cf13d4ba6e5affb5c2644917 GIT binary patch literal 100528 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

}| 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 literal 0 HcmV?d00001 From 51dc8053e8f4d95b7ab3c9fd4026de3402ef91e6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:35:38 +0800 Subject: [PATCH 0042/2002] Committed 2021/09/13 --- .../2020_transposed_translated2.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_transposed_translated2.py diff --git a/The attainments and realizations of my dreams/2020_transposed_translated2.py b/The attainments and realizations of my dreams/2020_transposed_translated2.py new file mode 100644 index 00000000..4b9c8981 --- /dev/null +++ b/The attainments and realizations of my dreams/2020_transposed_translated2.py @@ -0,0 +1,3 @@ +import pandas as pd +import matplotlib.pyplot as plt + From 289953983bb4a3b0af9e85febbcbf4cb114341de Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:38:37 +0800 Subject: [PATCH 0043/2002] Committed 2021/09/13 --- .../2020_transposed_translated2.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/2020_transposed_translated2.py b/The attainments and realizations of my dreams/2020_transposed_translated2.py index 4b9c8981..6d51adae 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated2.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated2.py @@ -1,3 +1,8 @@ import pandas as pd import matplotlib.pyplot as plt +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0) +print(distribution) + +print(distribution.info()) From f30a78d74f8022548b1b3fa4d00f5bff5633c2d8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:40:40 +0800 Subject: [PATCH 0044/2002] Committed 2021/09/13 --- .../2020_transposed_translated2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/2020_transposed_translated2.py b/The attainments and realizations of my dreams/2020_transposed_translated2.py index 6d51adae..9715b7d2 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated2.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated2.py @@ -2,7 +2,7 @@ import matplotlib.pyplot as plt distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', - index_col=0) + index_col=0) print(distribution) print(distribution.info()) From 41ca501b391e62fba55971aa9a73bb08e98302b0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:43:53 +0800 Subject: [PATCH 0045/2002] Committed 2021/09/13 --- .../2020_transposed_translated3.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_transposed_translated3.py diff --git a/The attainments and realizations of my dreams/2020_transposed_translated3.py b/The attainments and realizations of my dreams/2020_transposed_translated3.py new file mode 100644 index 00000000..9715b7d2 --- /dev/null +++ b/The attainments and realizations of my dreams/2020_transposed_translated3.py @@ -0,0 +1,8 @@ +import pandas as pd +import matplotlib.pyplot as plt + +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0) +print(distribution) + +print(distribution.info()) From dd72cfea26e45e75cdc6e06796dbae3a5bb13f4f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:44:21 +0800 Subject: [PATCH 0046/2002] Committed 2021/09/13 --- .../2020_transposed_translated3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/2020_transposed_translated3.py b/The attainments and realizations of my dreams/2020_transposed_translated3.py index 9715b7d2..45e346e1 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated3.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated3.py @@ -2,7 +2,7 @@ import matplotlib.pyplot as plt distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', - index_col=0) + index_col=0, header=0) print(distribution) print(distribution.info()) From bbd7c53e50adbaee0468c27629b335184b2d17a7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:57:08 +0800 Subject: [PATCH 0047/2002] Committed 2021/09/13 --- .../2020_transposed_translated3.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/2020_transposed_translated3.py b/The attainments and realizations of my dreams/2020_transposed_translated3.py index 45e346e1..05877773 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated3.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated3.py @@ -2,7 +2,21 @@ import matplotlib.pyplot as plt distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', - index_col=0, header=0) + index_col=0, header=0, skiprows=0) print(distribution) -print(distribution.info()) +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0, skiprows=0, header=0) +print(distribution) + +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0, skiprows=[0], header=0) +print(distribution) + +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0, header=0, skiprows=[0]) +print(distribution) + +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0, header=0, skiprows=1) +print(distribution) From 639bc0455373cd0342841bcbad595a58de94ad34 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:58:28 +0800 Subject: [PATCH 0048/2002] Committed 2021/09/13 --- .../2020_transposed_translated4.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_transposed_translated4.py diff --git a/The attainments and realizations of my dreams/2020_transposed_translated4.py b/The attainments and realizations of my dreams/2020_transposed_translated4.py new file mode 100644 index 00000000..d4d2c32a --- /dev/null +++ b/The attainments and realizations of my dreams/2020_transposed_translated4.py @@ -0,0 +1,8 @@ +import pandas as pd +import matplotlib.pyplot as plt + +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0, header=0, skiprows=1) + +print(distribution) + From 333bc6cec489e7013ffad009d5e78a6aab40eefd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:59:34 +0800 Subject: [PATCH 0049/2002] Committed 2021/09/13 --- .../2020_transposed_translated4.py | 1 - 1 file changed, 1 deletion(-) diff --git a/The attainments and realizations of my dreams/2020_transposed_translated4.py b/The attainments and realizations of my dreams/2020_transposed_translated4.py index d4d2c32a..36c62007 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated4.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated4.py @@ -5,4 +5,3 @@ index_col=0, header=0, skiprows=1) print(distribution) - From c5d721a8f5c522943768ae5eb11c13d746c47fa4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 18:04:18 +0800 Subject: [PATCH 0050/2002] Committed 2021/09/13 --- .../2020_transposed_translated4.py | 4 ++++ .../2020_transposed_translated5.py | 8 ++++++++ 2 files changed, 12 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_transposed_translated5.py diff --git a/The attainments and realizations of my dreams/2020_transposed_translated4.py b/The attainments and realizations of my dreams/2020_transposed_translated4.py index 36c62007..040f2ab5 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated4.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated4.py @@ -5,3 +5,7 @@ index_col=0, header=0, skiprows=1) print(distribution) + +distribution.hist(bins=50, figsize=(20, 15)) +plt.show() + diff --git a/The attainments and realizations of my dreams/2020_transposed_translated5.py b/The attainments and realizations of my dreams/2020_transposed_translated5.py new file mode 100644 index 00000000..d4d2c32a --- /dev/null +++ b/The attainments and realizations of my dreams/2020_transposed_translated5.py @@ -0,0 +1,8 @@ +import pandas as pd +import matplotlib.pyplot as plt + +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0, header=0, skiprows=1) + +print(distribution) + From 0d6cd714d2d26731c88912633e5a7609e2a2a52c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 18:09:29 +0800 Subject: [PATCH 0051/2002] Committed 2021/09/13 --- .../2020_transposed_translated5.py | 1 + .../2020_transposed_translated6.py | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_transposed_translated6.py diff --git a/The attainments and realizations of my dreams/2020_transposed_translated5.py b/The attainments and realizations of my dreams/2020_transposed_translated5.py index d4d2c32a..5ab07df5 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated5.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated5.py @@ -6,3 +6,4 @@ print(distribution) +distribution.plot() diff --git a/The attainments and realizations of my dreams/2020_transposed_translated6.py b/The attainments and realizations of my dreams/2020_transposed_translated6.py new file mode 100644 index 00000000..5ab07df5 --- /dev/null +++ b/The attainments and realizations of my dreams/2020_transposed_translated6.py @@ -0,0 +1,9 @@ +import pandas as pd +import matplotlib.pyplot as plt + +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0, header=0, skiprows=1) + +print(distribution) + +distribution.plot() From 5ee47923e532162675481489dca2ebf84bad7ecd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 18:13:24 +0800 Subject: [PATCH 0052/2002] Committed 2021/09/13 --- .../2020_transposed_translated6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/2020_transposed_translated6.py b/The attainments and realizations of my dreams/2020_transposed_translated6.py index 5ab07df5..54d971fb 100644 --- a/The attainments and realizations of my dreams/2020_transposed_translated6.py +++ b/The attainments and realizations of my dreams/2020_transposed_translated6.py @@ -2,7 +2,7 @@ import matplotlib.pyplot as plt distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', - index_col=0, header=0, skiprows=1) + index_col=0, header=0, skiprows=1, skipinitialspace=True, skip_blank_lines=True) print(distribution) From 5780d9eed80337ce854e34c2d99a9d8031aa52d6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Sep 2021 19:46:57 +0800 Subject: [PATCH 0053/2002] Committed 2021/09/13 --- .../2020_transposed_translated7.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 The attainments and realizations of my dreams/2020_transposed_translated7.py diff --git a/The attainments and realizations of my dreams/2020_transposed_translated7.py b/The attainments and realizations of my dreams/2020_transposed_translated7.py new file mode 100644 index 00000000..cc49d564 --- /dev/null +++ b/The attainments and realizations of my dreams/2020_transposed_translated7.py @@ -0,0 +1,7 @@ +import pandas as pd +import matplotlib.pyplot as plt + +distribution = pd.read_csv('2020_transposed_translated_mobile_user_distribution_by_county.csv', + index_col=0, header=0, skiprows=1, skipinitialspace=True, skip_blank_lines=True) + +print(distribution) From f226ee7c1c2c1a1680ffb8cc50798e3e63918b05 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 09:32:24 +0800 Subject: [PATCH 0054/2002] Committed 2021/09/22 --- Matplotlib for Python Developers/Embed your Matplotlib.py | 6 ++++++ Matplotlib for Python Developers/__init__.py | 0 2 files changed, 6 insertions(+) create mode 100644 Matplotlib for Python Developers/Embed your Matplotlib.py create mode 100644 Matplotlib for Python Developers/__init__.py diff --git a/Matplotlib for Python Developers/Embed your Matplotlib.py b/Matplotlib for Python Developers/Embed your Matplotlib.py new file mode 100644 index 00000000..e9868cc5 --- /dev/null +++ b/Matplotlib for Python Developers/Embed your Matplotlib.py @@ -0,0 +1,6 @@ +import matplotlib.pyplot as plt + +x = list(range(10)) +y = [i**2 for i in x] +plt.plot(x, y) +plt.show() diff --git a/Matplotlib for Python Developers/__init__.py b/Matplotlib for Python Developers/__init__.py new file mode 100644 index 00000000..e69de29b From f4cf227a162d39303b6265d3a34921ba13037855 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 10:51:45 +0800 Subject: [PATCH 0055/2002] Committed 2021/09/22 --- Matplotlib for Python Developers/Line plot.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Matplotlib for Python Developers/Line plot.py diff --git a/Matplotlib for Python Developers/Line plot.py b/Matplotlib for Python Developers/Line plot.py new file mode 100644 index 00000000..35963f3b --- /dev/null +++ b/Matplotlib for Python Developers/Line plot.py @@ -0,0 +1,9 @@ +import matplotlib.pyplot as plt + +# daily temperature +temperatures = [22.2, 22.3, 22.5, 21.8, 22.5, 23.4, 22.8] + +# plot the daily temperature as a line plot +plt.plot(temperatures) + +plt.show() From bddc92b943b2166cc1fb41065033b30b2c5de065 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 11:04:09 +0800 Subject: [PATCH 0056/2002] Committed 2021/09/22 --- .../Line plot - customizing x-axis.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Matplotlib for Python Developers/Line plot - customizing x-axis.py diff --git a/Matplotlib for Python Developers/Line plot - customizing x-axis.py b/Matplotlib for Python Developers/Line plot - customizing x-axis.py new file mode 100644 index 00000000..e69de29b From 46bec40df3a8ef036b1fe1b2da935cffb7360b6d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 11:06:40 +0800 Subject: [PATCH 0057/2002] Committed 2021/09/22 --- .../Line plot - customizing x-axis.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Matplotlib for Python Developers/Line plot - customizing x-axis.py b/Matplotlib for Python Developers/Line plot - customizing x-axis.py index e69de29b..acdd5aed 100644 --- a/Matplotlib for Python Developers/Line plot - customizing x-axis.py +++ b/Matplotlib for Python Developers/Line plot - customizing x-axis.py @@ -0,0 +1,8 @@ +import matplotlib.pyplot as plt + +temperature = [22.2, 22.3, 22.5, 21.8, 22.5, 23.4, 22.8] + +date = [11, 12, 13, 14, 15, 16, 17] + +plt.plot(date, temperature) +plt.show() From d8979bc1eb6608a86400c2808e861b8e06ccdef8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 11:20:21 +0800 Subject: [PATCH 0058/2002] Committed 2021/09/22 --- Matplotlib for Python Developers/Scatter plot.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Matplotlib for Python Developers/Scatter plot.py diff --git a/Matplotlib for Python Developers/Scatter plot.py b/Matplotlib for Python Developers/Scatter plot.py new file mode 100644 index 00000000..e8fdf854 --- /dev/null +++ b/Matplotlib for Python Developers/Scatter plot.py @@ -0,0 +1,8 @@ +import matplotlib.pyplot as plt +import numpy as np + +np.random.seed(42) + +r = np.random.rand(2, 100) + +plt.scatter(r[0], r[1]) From d544c8ad7c942622fd23ebfcee91ad00ea90a322 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 11:20:46 +0800 Subject: [PATCH 0059/2002] Committed 2021/09/22 --- Matplotlib for Python Developers/Scatter plot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Matplotlib for Python Developers/Scatter plot.py b/Matplotlib for Python Developers/Scatter plot.py index e8fdf854..936ee38a 100644 --- a/Matplotlib for Python Developers/Scatter plot.py +++ b/Matplotlib for Python Developers/Scatter plot.py @@ -6,3 +6,5 @@ r = np.random.rand(2, 100) plt.scatter(r[0], r[1]) + +plt.show() From b7ab6c62b55e3a52a54ec2ffdd87045ca6d29e78 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 11:23:11 +0800 Subject: [PATCH 0060/2002] Committed 2021/09/22 --- Matplotlib for Python Developers/Scatter plot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Matplotlib for Python Developers/Scatter plot.py b/Matplotlib for Python Developers/Scatter plot.py index 936ee38a..8e4d11e2 100644 --- a/Matplotlib for Python Developers/Scatter plot.py +++ b/Matplotlib for Python Developers/Scatter plot.py @@ -5,6 +5,7 @@ r = np.random.rand(2, 100) +# Plot the x and y coordinates of the random dots on a scatter plot plt.scatter(r[0], r[1]) plt.show() From ad9e885d961f6a69caa21c403a011664afed06f2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 11:50:27 +0800 Subject: [PATCH 0061/2002] Committed 2021/09/22 --- .../Multiline plots.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Matplotlib for Python Developers/Multiline plots.py diff --git a/Matplotlib for Python Developers/Multiline plots.py b/Matplotlib for Python Developers/Multiline plots.py new file mode 100644 index 00000000..6f8292ed --- /dev/null +++ b/Matplotlib for Python Developers/Multiline plots.py @@ -0,0 +1,14 @@ +import matplotlib.pyplot as plt + +date = [11, 12, 13, 14, 15, 16, 17] + +temperature0 = [15.3, 15.4, 12.6, 12.7, 13.2, 12.3, 11.4] +temperature1 = [26.1, 26.2, 24.3, 25.1, 26.7, 27.8, 26.9] +temperature2 = [22.3, 20.6, 19.8, 21.6, 21.3, 19.4, 21.4] + +# plot the lines for each data series +plt.plot(date, temperature0) +plt.plot(date, temperature1) +plt.plot(date, temperature2) + +plt.show() From f16fb5ba71eabfbc398b74f7baa8bf532d2add1a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 12:33:51 +0800 Subject: [PATCH 0062/2002] Committed 2021/09/22 --- .../Annual_household_income.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual_household_income.py diff --git a/The attainments and realizations of my dreams/Annual_household_income.py b/The attainments and realizations of my dreams/Annual_household_income.py new file mode 100644 index 00000000..576036e9 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual_household_income.py @@ -0,0 +1,3 @@ +import matplotlib.pyplot as plt + +year = [2015, 2016, 2017, 2018, 2019, 2020] From 6975801a424e491823eef98f181c9f822dcb5b85 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 12:50:17 +0800 Subject: [PATCH 0063/2002] Committed 2021/09/22 --- .../Annual_household_income.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual_household_income.py b/The attainments and realizations of my dreams/Annual_household_income.py index 576036e9..d1d4e42d 100644 --- a/The attainments and realizations of my dreams/Annual_household_income.py +++ b/The attainments and realizations of my dreams/Annual_household_income.py @@ -1,3 +1,18 @@ import matplotlib.pyplot as plt year = [2015, 2016, 2017, 2018, 2019, 2020] +income_Kaohsiung = [1145895, 1166824, 1186204, 1219246, 1224268] +income_Tainan = [1007093, 1063495, 1079199, 1086077, 1079174, 1086475] +income_Taichung = [1169183, 1140325, 1245350, 1279865, 1298497, 1289700] +income_Taoyuan = [1307158, 1317790, 1337361, 1378732, 1392199, 1424027] +income_Taipei = [1581899, 1568945, 1648122, 1649348, 1723021, 1716591] +income_New_Taipei = [1171978, 1223867, 1265798, 1292753, 1319841, 1352548] + +plt.plot(year, income_Taipei) +plt.plot(year, income_New_Taipei) +plt.plot(year, income_Taoyuan) +plt.plot(year, income_Taichung) +plt.plot(year, income_Tainan) +plt.plot(year, income_Kaohsiung) + +plt.show() From 62836575f2232b3e63e8e473eeb4bb3a19746778 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 12:55:07 +0800 Subject: [PATCH 0064/2002] Committed 2021/09/22 --- .../Annual_household_income.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual_household_income.py b/The attainments and realizations of my dreams/Annual_household_income.py index d1d4e42d..6d24eb0f 100644 --- a/The attainments and realizations of my dreams/Annual_household_income.py +++ b/The attainments and realizations of my dreams/Annual_household_income.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt year = [2015, 2016, 2017, 2018, 2019, 2020] -income_Kaohsiung = [1145895, 1166824, 1186204, 1219246, 1224268] +income_Kaohsiung = [1145895, 1166824, 1186204, 1219246, 1224268, 1224100] income_Tainan = [1007093, 1063495, 1079199, 1086077, 1079174, 1086475] income_Taichung = [1169183, 1140325, 1245350, 1279865, 1298497, 1289700] income_Taoyuan = [1307158, 1317790, 1337361, 1378732, 1392199, 1424027] From 9d44628c4e0df17c0b4be438d8e1a18db3d14f79 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 13:40:02 +0800 Subject: [PATCH 0065/2002] Committed 2021/09/22 --- .../Annual_household_income.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual_household_income.py b/The attainments and realizations of my dreams/Annual_household_income.py index 6d24eb0f..0c9e364c 100644 --- a/The attainments and realizations of my dreams/Annual_household_income.py +++ b/The attainments and realizations of my dreams/Annual_household_income.py @@ -8,11 +8,16 @@ income_Taipei = [1581899, 1568945, 1648122, 1649348, 1723021, 1716591] income_New_Taipei = [1171978, 1223867, 1265798, 1292753, 1319841, 1352548] -plt.plot(year, income_Taipei) -plt.plot(year, income_New_Taipei) -plt.plot(year, income_Taoyuan) -plt.plot(year, income_Taichung) -plt.plot(year, income_Tainan) -plt.plot(year, income_Kaohsiung) +plt.plot(year, income_Taipei, label = "Taipei") +plt.plot(year, income_New_Taipei, label="New Taipei") +plt.plot(year, income_Taoyuan, label="Taoyuan") +plt.plot(year, income_Taichung, label="Taichung") +plt.plot(year, income_Tainan, label="Tainan") +plt.plot(year, income_Kaohsiung, label="Kaohsiung") + +plt.title("Annual household income by region in Taiwan") +plt.legend() +plt.grid(linewidth=0.7) +plt.ylabel("Income (1 million New Taiwan Dollar)") plt.show() From f5624dde579235bb871f59494365fee2ed5fa2a5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 14:04:09 +0800 Subject: [PATCH 0066/2002] Committed 2021/09/22 --- .../Annual_household_income.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual_household_income.py b/The attainments and realizations of my dreams/Annual_household_income.py index 0c9e364c..4fd7d1e6 100644 --- a/The attainments and realizations of my dreams/Annual_household_income.py +++ b/The attainments and realizations of my dreams/Annual_household_income.py @@ -7,13 +7,17 @@ income_Taoyuan = [1307158, 1317790, 1337361, 1378732, 1392199, 1424027] income_Taipei = [1581899, 1568945, 1648122, 1649348, 1723021, 1716591] income_New_Taipei = [1171978, 1223867, 1265798, 1292753, 1319841, 1352548] +income_Hsinchu_county = [1283995, 1365150, 1616327, 1519478, 1539555, 1619782] +income_Hsinchu_city = [1427572, 1537317, 1572296, 1426379, 1602826, 1618903] -plt.plot(year, income_Taipei, label = "Taipei") +plt.plot(year, income_Taipei, label="Taipei") plt.plot(year, income_New_Taipei, label="New Taipei") plt.plot(year, income_Taoyuan, label="Taoyuan") plt.plot(year, income_Taichung, label="Taichung") plt.plot(year, income_Tainan, label="Tainan") plt.plot(year, income_Kaohsiung, label="Kaohsiung") +plt.plot(year, income_Hsinchu_county, label="Hsinchu county") +plt.plot(year, income_Hsinchu_city, label="Hsinchu city") plt.title("Annual household income by region in Taiwan") plt.legend() From b5c0c17c04926be92d7855a025507a2c2c9e772f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 22 Sep 2021 14:29:51 +0800 Subject: [PATCH 0067/2002] Committed 2021/09/22 --- .../Annual_household_income.png | Bin 0 -> 64349 bytes .../Annual_household_income.py | 7 +++++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual_household_income.png diff --git a/The attainments and realizations of my dreams/Annual_household_income.png b/The attainments and realizations of my dreams/Annual_household_income.png new file mode 100644 index 0000000000000000000000000000000000000000..ac1fba56b71f1408a0a51e1ea7c8037b9a9ef58d GIT binary patch literal 64349 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 a+q=5j&vKYay9uM<&q;k#y?h<#oBsl_f Date: Wed, 22 Sep 2021 15:38:07 +0800 Subject: [PATCH 0068/2002] Committed 2021/09/22 --- .../Annual_household_income.png | Bin 64349 -> 72897 bytes .../Annual_household_income.py | 1 + 2 files changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/Annual_household_income.png b/The attainments and realizations of my dreams/Annual_household_income.png index ac1fba56b71f1408a0a51e1ea7c8037b9a9ef58d..7cec9635d783426e7dbe2d0c36ff3e245fcd5cfa 100644 GIT binary patch delta 38592 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 Q`x$`1)78&qol`;+0FmR5e*gdg delta 29977 zcmafabySpn)a}rXbk|Tyi_#?wje>wQL-W$o9S+?LASsb@>V<&KCuAH(U+t423m%tez?--P3ozds(ZvSm2{(HL{`_ z8vaV3a+m-^<-~aznO)_gyO{{a+v6G8!_l)JKbSpGxlBoD(qj(>E?hm zdlGD8M%&2kFg-0TQrzdtxG$2F4(T-`Bl7!X&Hx=wx$C24r_C5a)AQ}IKy*nTUCM*M ze?dY6IWGcinXtfJ#of^LDRceH_CXyD1aEbu&O`vkxCJx@x;gNbI2Vfw^im}wJX6%e z^!DuUt5>firKFJL;4~2x2CV|OQ15oS$2-_%PnmA*>(7gIa`f7UhH%Qa7RIBgystRR z?s@W!fBf35GVVftI31uLoR|n3vk029lCih9Zy&fkT$;PoDO8s#*UB#{x+DMfGTS%s z-_!Na!LhNBDXZWlMXkK*G~rP@5<%UZt_6cjqA^5ylnyVC*$sZ89iQWE?7AT+@+ z6eCRVlcqiUb?U3;J*SB3f^oBrL?=V#M%o@x2-m0k>MdqfU?SS(dT1aa=Pk^J&r6|r z)BV%86x!C1s;(9kgYFBBfjZsfhD)umz`j7dtT-8eja z-v1&av90*DpU8FJUnKe5?f$5C+LVKF>eXQaD-;UJ?JRFxSu`eg8@t{X!WTPE#jyca z%@g?E>59*>$cF$_+82bAoG=JXko^A#>oUDK*IIf|1R6|Q# zw?==h)vg7K;KeFImH$=#y_RFkZQ2!5RQ43$!`y_{D>LbLcM$-rW}hi6V931t?sESW zI2HnIAc287BUp?JVtl>zxT9yk^5@FhlSM71h0Em`jb3?!;_-kJG$GBjP<@wFaJeDT zpw)f7enG z@{doL;4$X~&xILReHj1QmEEmwVw%#v7^_;+4u6>8zzJMcv6wWFFEa<}1X$aF*>e4A z7lew2mR6q8&o2}bzCv`qCsI&gi6#7w%gQ*#{ym(}SDRrlf9+omZCvpl$)C_ms<)kk z6l-|fB`7e5$Hatam4*zN+qesljEtoF9VES`z%`C;UU|m?V?lfOc#&Z1IG*m%ft7_Y z5lA<B}&1Yoxzjnr#`Bdvs6FiHhexlFZc;PRIlesANeKrS7qB z+^lFl>MpJ9SS)x7Jx5Fow0WIFC+hXM78@O6v4~-;lI2$ipG@9-i_6T!tJjN(i;J^J zs%>kdSw}8^S*pR_<&?4iNX}yzty^nh@~6ou91ibynGnawpTca09xci<6G`Q&dM4@? zs(Xncgz%LLiPqQGJvSm=I-YGQKAdO&LmhBxIv*E3oi~d$Ib5u-Ff)HcS)g7#AiU)) z%uEDRj9O0b|6|!|_~Ly?e!q5FDoECRZOrArH{WtJ*m-S!7g_upy;b-27GYJ+W6AW5 zIjV&SyvoK(0xTe(<)B<*$J5%}8zVzi)#Ud(@AO}_bd&VtSQBz4{VA8)^L6{V_4g`=-7 z&1&PpQed1rxZ=BhdEu30SAg_=)fHX-XVEYZxky$t?1=6O?O%5{Z$Pt`x3rw7$0$uO zvjO~v`_+H_K&U=FpLmxKT&bI@C5Lz*Alp{9&%Qh^)+%k6i~j<|fg9lS=kGA_^Uu6I zey>O0Pr*sf6S!bUF!VQ$l^NCihAH^>#Q0Kf?Ot0TbjGY)7pGiy|FUJaEF@-Ts*tht zE;pPwS6U}*@Af>yh;5G~SOFP!{NfD+I5r&G6}|1(D^b9;rw+rXb;heIDk|y(?nDH? z?JVCNR3sDMay-LHd}4fDPEHP;k%?(4R~ln9`yG7>w?VhysxL~sLhwqvj}Hw!HFZ>6 z96{wFbJId(Was{+zXGat82;KHn;0zclV!cWLBN=J?+mVkUhOQ?AWTz_y=(FTo#&eZ zdJGf=c_a` z^5y=vEd7MNlZ&DH>uorr?XW%iO{c|`?d<%VI-?d&;BhsqG#?p-1e)%Z3E#RH$&5?x zqzD?aKf`q3N6Ccw;APyq2OSQJ9CNTJX~+E<fQcGvQj+n}XxWs{s!#~%%cjBi(5aj8$Av&ygy6BH*S z2Z8wUVx4wV1g(@*)(h7+eAl|x6Tw-1_>WuI5i=pg3zZL64?U#Z_+yk%Y*6{Wug>NL z*uN9$wS)v6u-Z~eN|6IsKyt`48-RC{M52oKpH~?+fh-!O3sfbE=y_b@F;Ce<9pnoO zYt;B1kB~mvPIZqTjD0b}dRbhLuEO=n$G7se$Pc`s4+Tcr%H zcT2{2860c6bwza=hEw;U;nGkk6|VD&h*FM0HWno+4cTx>V5279{S))d8c5|eGk#6+ zyl8`eoy8t6ex<&(gvZG;Neycm;_DZiv3{|JsT0W{)ezx;>)8ZIHWh{lX}BaJ^I7Db z%C=JTWB)jeiDoO6l(Z_=!w+q~rO7oDO=APuSQy?D#nTaPndOBJtW$u>59x_4aY8Dk zeR86Io64*@=Vu_$*Hj81Goo@6f@h)ym{gz=0r`FMw7HdAudpxB4DX%R#2|VGQm_h( zF=#3$t~%jmEEBU1ro;<|HJ!s;%ZV%qc@QeEMPrZiI&$YZL9s?$Z$GvHGf}T+KhqD! z0nJvAf-TIN;hMI)r3fKHkq{5a>Q2WF@iK;==^cZMJnQ!lS&XVfSm5#y1|-MXGF`l* z9w(ZPyFHF~iJ_Qa78bORVyCECp0JGw3)edc9i%tQW?{_4;9P*zyJPo z>#%5Cs%Wuhx3UhM3&Dl1a-bPCOw24 z!`}=$H@TBKCQb;E@r=M=W$N{VURX#p=UbU`S=U9&qMGj50xK@oy!bTg{Ka%8l`fu^ z3NlDj@52bD(b0Mz$XeYGyWQpt!dj17a0HiKiN`ZV!+;kU?wAsSfXQ+L*FWg*NJ?w> zDv+IHCH(Fr3)OS|?yo#ArsQ*f?TW$mo1Iy_FZa-zq42~+7)jgpijN^efC4v_-c4(*r8`)=?}D1V}UqdnSy6J0`>rMbEP zrqI^b7Rd1fDjgji{BnOTUp|%&6A!PiX}@yd_VFI+b$HKjK7reYqLur}86SC7usnqem<4GE?g(ApYMZ=KM5K$q)*7e#8E3c~3Ou z+bX+-HvoFU(q+yzjSfJ>#H_5^3wGQ8JhN7ificR~rp09W90~hAXBYr(@mh>hG@eJC z0GJy{G^B{}%%1#MiAc+AKeFsEcWj`w&H$9A$E&4k0GNNsmY{9*IPQP`LQ&DHKOU=o z73a?j>Umf{cLJc^HDG7@nPSBP37O<_fHk`TP*b({rA?VmH8QP;Yi9@yhum?!JA|X< z1%QmA$hdpwqR4}GT~jZAe@gv#wRCfwcg>(|6DGL&g&HVY#5ePciyJx$1XKYY%JLWu*~zMiuwIAjo_5rSDwMZh3a#_*m4rS1r76IMlQNZ`Q*M{trk6VjVQW%j0m76sUPR0hlh1yw)2* zdY%vYHV4i7`Lw36q( zB*0#NB+GF{1>Id8Mt%KC)OI$^(X>}mDzjEa7YCka?VpY_9abr&sK3NW@WUYH9)9-4LkT zjAn&dpD8aoJ`H9TBK@JG!0ne_osgFADF5n8^;ff3{7K%2KjLj^{I2ru^FDr{zlb;j z00fg{1Qxi!8ikv+8Q`M}W5Iksk<$<3S04fEYgM{+b?JzGdG+1{}~3)P|R^cng*S0m5R7N{}< z)E92j#4PadL8M*fBQqnGx6IW^(XuW5 zY*v~xkWs!eAidVH)ewT)s(&iev9osm_4&P$ib_9FnnJ;j%Pnp~j%y$w{rViYBd`rQ zw8~C|Du9SIUvHZ-&;a1eT-&*dip8J(s--ijFbO}A?;o?_`VQ@+n**`(*4Avm1jVnS zA|jAL(BbjWVPpUHHX00%V|0+CDKGQXR9x=>3L{~!TiKiZDJueU@-QH_n%tbMgJ?bx z(TaHzJlk z4US8e?-^BSf38Q$^&3rp7pYMQ+S5qfAG`%F1gBveMFOjGH$WMj+#<4lXwH9s`e<^p z*7Y1=Ui;m-9xT*i0Az*JC81sP^(u@W3kyr({reyV=I)R09)oXgJcGl+d=3UY>DZ>G z6qFP?InEJgU4NPfMPPLFuzM~TNOHECso?aKK#}T6E&Ht{{_~l4J^Dkr-0Cr~(HEtr zr6tENR-U?2G60-8x?fd^6z|)va1uguJzO0wVs@iCc>ShCTLc-U8Eu7`z`d3fD0M0R zc^~HH+;n~X&6y^z-E-g1ZL5Nq@syO5oI^UF*#R6f&Q5@l3A#OpAEx*On30162dG(sFkbYh@!LY{ z;UHrUp0L{s>rRWFe=A-Xu|Kbbk!?wHp<;d=4MWg<5x2lUor z)L)0QKj?)-xD#x%pTBtaE9SuXlGFExX!&_j{V!y=Sz`}GDuLXD22huy%ZS||5;tra zsN`s*tisX&MGgmYWNF|ER?ZHysxQ%NTXA9|pg*rVhJ}NwRcJ>^t zQgOq#-#!ciHG_=}I|Kqrb9(|R=}M|f<9-Shhu58kdNAx(t^FGoWd8&O26%L^5F>J) zMcIbhoZq$=9T1Z{4;xqEbA~>LN>RryT&Hgl?{{~1Q~9jbqcSU1jdrNwed=yr!Hp#F z^T&MB3Q;u!ZJqx5sP33 zE&LFM)O*$0aV~5z@mTt#?PzJSI1J+AdxXK zQ7+jn9l1S6RGajmM^o@31M~=R{-oU91&&(wD>x(so8O?9BE96!cAPn)WfKl$l#ZYK z!d{Hsp6}f%w{-=a7%SO25DP2wU}{|!60EYs{iC+d{Zj^J_yK0GD~72La`pIed?rZo z@}UuJcbALqDI5h&lBmiv3hip7uqq`bKr;ptAwv*m%McMAtT1&kHFilDA@f}FWPQ1_ ze%(LW>fvCwSjYBiy9k$AY}2XYAw&Lf<=ffYs<#umNHQ6inLVP~b4Rk*vL&pfFjGSQ z1>%jjWGJf6!}-~Ck#CR=`&weLj@K|fDyrsC!jF&@^shXGtke84{Q>?$R#w(9KShZ!~b*k)zQ<0uMy{Ri&zBg4iVTxhi#l@$!wcy7P1 zLI4Kvk3gsSTW~GkFMfqht5dbD-Sf7qPYNVElrz7WPWnnW&|dL^KW8k%&=a#R?OWP? z$&B56(K+%n{Vx8b*_*W>MPmL-&V&*Ibss>VVnoOU0`P+t2ri$`P_p{xf5!@b1Kt?| zght0%kP8qG2?+`0$`fDi2pFlb0`_d6y zuYHo@Ct2oAC;;!?zIo%g)`{eLykanDdLuK#P7b8yNV22S*+t&|PTTsbq~yRkZNbZk zE$8t3Jce1T&Z*xV$`-FFK%SLV(?p*A`G25Cqz5Hg%4Uq;%;`L>%k5e8* z#`IO4HiUk}lpKv9EDVQ~F_Q5PQ}nW%5$1%_U9i8* zsQ3QSwmt1aI6|vjuZdL2eqgqo5in5=Df z`b&wGDa&GZRDq-}W2@=KmViiI&b3SL6S>Bp60(fpiAn=4Z5D4;H3l@0zD#Nzxp;au z?OWnIe#qR=)VJh3E9&DAAen2y)iVGRgFyhd)-I-}W^8E(;}&5(yjOWbS>DvjGz!WA z155S!akrOzU&h!(VEe=ugJQnER0%}ytTr1!2K7f%ZdSLK<07vM;R9#z znb54KgsUjFnZnQ=8EHt;Jl35=G_Iiz(_ZhBT0pbJo2OB@k~QRJjVXvIx`(^Ig( zDizHaf70zg8lFPEgMZ6Sf|~vtAp@_jIP{u2)g}|yF4!S8=SlmO-QK>^e_|Sj-CQZuQrf?Wt}swc^R zHqgvD_bdyy{>5QNK;+2jE&r)pem=kXA{+*k`|{Bg;H{+uGJr@iIbMBr|Ky`#zj8n| z#t{)K-%IPk@X(+Sj)){`O6;yacTfB_viCWZ>kUcnZ;icr`_Bejre5V^Rs6Px8tO^0 zm2d*}A9{#sQKZC7jIly_STO627|!3ne{c3mE91U>!vgKhl#*MFrJ=>hF*yz?NPD)^ zk(O%bU)&#?2)oSI8wi_YG9Go{nB>df+f8pvc2Y=(G_HDM6+`BhFwcx^MwM4_~Mt>KiJdbGuk1+MyqJq zV+VCU*Q|moo+!_ZBmgFZIq8anghi?Ud&eo=SNSt=ZWjc~P{$fe913sS=N@czC2R`T z4&{9gtb_+PI3BX0j5@ddmxo)OU?sv33R&D|En}=o^YNGw!pN{;#YYE58Y)8>t_hfS z+4-7{{{U+n7PfXK16D$h7Kn8TA0;A&5?*e;`*-_-c|46VeJm6h5&bh)(crMkZGIX~ z4X{s*exk!2|B&u7MGcnz8yX64y0^Eo&%$=nN%dzb%gk()cK9W2IVEK|Bjw;GHmiR* zsp~eW>pE{cA4R+5;fX40W^n%B3?qbYopuLigWCE^mPFa^gMzJbiR16>=8l?D`c}OD z9emJH)chpWyC8|M4SiDl0m&bbTWTjHqNIY*v2@<3_W`WNS<=rOpt#lH5fOdmLIaVH zmh4^jkmf(2a+FAYH{8DjP&_kc*Pq?cM6MsHXt!$G1w#~j_R5M&ZIWZOWTaWYPr=-S z>)1opCyWtyA~+P>bFi{E*x?7^QRtLk(V-t*cH_0)PlAfHO5@Yh_v?uULvY9m$o%US zyLuD9MNA+6e7Q&?`>io$;-n-)fev&=*-Noc(*Z~3lTJrCpPHf zpS&IiN=<2hl{RNbDD%CP5PVt{CrKFUwmC-{D03%-fWL2|si*u6o#`xhY_MYf)1 zTY&^RSggmH5Ie^`YCBf}N0GUfwULVWp$!X^g?RNE3BW+C#zsfz!nUJa$aM8&Yj*{`~I~Ax&$fARUOixt86_sGU76L=HoB( zjJANqixy5ZZ?`$k7;A7V4^?B~%#|B-!SQh}@n`s)4Ge86Pj*cR{~2VoZ$W)9R!n zs2co9u@BTpDYSg!90IV8NXjgl;15*Wr)})1Aw%75$eH&~e5bF$QqhQjVc%nm#c8_% z?e>IB7k}0v!X2B?wr~ zDJgS`H;y-zJ@o>GTH*~SZqZ`4m}WcPSWRB>JLV+&uqySfYj60GU8fL zd#hv$)gu5}3pyoy;VlkGcVW-U%wnB2-chA`@oS$eyNkmma`q%_QIDfu=@;UtNlGCY z^u8yN!_I|QTgP39uy-C}!ZS@~Bt#*W=dhx(E4@Zl!_b>$-N}az>gl)S(1DS=YuPRF z>zsSM&DVUA$yQ9kb%gHJs`2~cB@Gues>z?ONq|rl5fEOueWThdJph_RDLU1#H_~M!B{aX@3^?|tgWpp5NvF0H^66Afc63FLNT5g z%t~GKVvpn|$^F2c>C&Y}6SA{#wds_K9^aWoW z?8d$a2Bs;1qnf3kUp#x;Bu2jW*^QnfS=i>l=Bh91V5ew3zk(sSPUt6wWQ^RVUKc~0 z*1eGH4uSjeN(`{M20MAiFpV%ZiW!qcGe?NtImXM^Sz%wU=@R|^iM#4Iiijwq0D5Iu zc1yLAXSAQiKc%^sksC`+eh%BRQ#FI%d?fd10 zzY*-wtvoj5Yhq&X#)j#`EG~YtBDN5ING1#)_IOF21$*-1)U7EPXR{&$lniYnzZu*6v%e$h{EmfSu?gwl!A7am z-4HAH!_d1mr0`L=1b-V8|8PyJh(d&9c7C3W$4r0n_x*>oFhHK;+m?trlq(vQRsDvO z^M(}ipSv&HSct05$e#EtJ9dBsGo7~=4epuHPH6{Z17@5Y+*qN>L&4DC6sISoP|m2p zMZ-)+SO7e;B?C0T&tBhOl~Dm*+~}UXC_JWXeJc}Qyv82l7HhKp%ZJsQ6cY%}@F&XK zz3b2}<4#(SKLLQwUNo~u_6}ydb`45RPM+QQ8IDgUHeYsar37-lzT2&>>_K@bhU3!MC6q-4Qx+~nrpT7 zXea8)=H19TS8ie@RoDX+xPpW}glEMssCWlVVMaj5ekjKId5 zp@7S5w7KA$<)_1X1U~5HHgf;;U91PU_4e(|(3Ed!^u+`}AE86FHiqzL&7xY7pv$}APLW#~zmT_>#}UlZNp!sVg{Ngz9q)+%wQ-SU zue*za%uIcf+lereF$VCyFn&M(|I|(ihZQkU=jgY$)vmkh zK*nMc6r8&hnK(~<2a~9&tp&#`OcsB7*#@ZZo;$f=4~AEvCuBJ6bLG;z*Q-6QH{rHE z3b5mq@Fs+P(aR71uOw|)vB1i`=aT;!9wJqC&2WQ)S-er(9v2EJTpteud93>naN9cM z5^TA0$17?<4Xgq^Eg>TEsR>$hE1DtVg>_>yVopSaLJ^o;l-iVLaH_tNDl7XO_vt;Y zQfsHmzZVkYnmD$bT}z&ls~5%#l(~}wYfv=WXXKN2dYKOoA-*r#!Fea^w^83T+p zYDOOYh3`|m#hz(7K-T%SbB-egHH7EAcqelknQiQ`f}_GNJ0E-+-iDxib$3PD6dW8U zSG`2@tDq@NbWUN(uG7$Cj(EU^T(SOo0OupRc^1m#*~qT|)YV6OV=W)I+R|BAyF=!= zljhs94(qY149K)GuyI2){PMrs3;P^t5ESK{gi-}|&9`LF^O3Dw+gT_(EXgd(*Q#wR zz+GS0=vv1Cf<670o7|tPH8Z?4V&T(;|D=Zj?srsFg!ui&27wcT7W3z&mO@@W8aEi+ z8#O00Xm9ivv7e2p%j^^kYhK(Q#5o2j_}(K8QlPwDu*GxZw>?fR#sY>@OR04@`*U1; zUi0&dq<{qU6%gvQFUO8e;-F^4AlGljeF{l%kiyJWnhBOQ$3xbuI=yn+K{sh)HjMqr10XY^ z*6KJG7%=u@wQ3BP}30MvNbeQAJ#Sqm$b^5*d8ZR$4K%Sx^Td0C#mCBb@-kwTyXz z8N8TFzv1To5U{xU^L9EmUwvPkJ_tn&ev+A$*kP>6H-n4O&wV*%O}CsJ@dy^TD1MAJ zRZAtA_9QL9V$Wzw45`~k_YvrcEN*}kYz!SEIrfGV)=L0XH>(M55oeL#G5}9I|8(jt z=fa#;9#0w7X=6zVFX@-mQ;aRE37Omrj*dEEBV#{=3g0m=49dqqZ2&5Npv8l5)XkRcJ=Nr*i5ke6>gFkC?2*gF zOtU|~flL3{n8?7)j0z0?@+RurrVzG&Fy@#lHdJH{*Z1B(3IpU4a{Xn`U2>X1e(gOK zF7w4XjLyF+^W@_IH0M zk$^%*mj|+X0y7saluNFk?k%>zzYiF(Y`ac)<=@NK*eN(zJ*o?;+Aq%vzK8b z%XFS)!=i@-pxIbV@aOa#q)F3iW1wgyd4gdQ1`1TROsw=h!oT)Wc)!akLQ z26jFV@;JJ(i+8RSMtY3wQ$#=98IRO#~D; zSv@@}&>CP>q^q1F!4Bs8T8s>9a-A#}_MkTg=K7Hor|##lT4@U3{8a43#7Hg@TutLKgEn+I+Q%t7|NBJV`3jF%a|@-Q^=pDv>bSv2BSXPx-c*&OT+`12b|L7! zlK41vaPrdcdc{-PA4%8?^~52VrzpU&L&Z+-o6?@pY;An;>fLdBHYbUdV5e|bO>HO- z-|WA?-yTZ8$}$Mj#Lr> zB#;zM67tZMcWua{t-aHp%{X1o<`I|wokwQ#-HBHTt+KF*jA_Ex{jZ8T23JF|Bx0rOsEJ16O4y72ucNf0?)1)5|H9r^^$+yW|neu zxn27ojxLIzTUSc<+3ijs7J$O}or?xoq!->LYb`MZ$7w<0Kt(e)`+n^;HPatizy(N) z4|{s;C6~_S=*N$FBBJTenE^bY*^$rI$?rupU}a;Ww;zN-{y2ov;w31MN=4u>5Vi*s zOs8QIfqHs+_A~dRc;#FI2>;cl+350I=Usn6YA~#*Tu@S;v>yxr_XyW$kAhvT7`x@_ z!*pgEAl%?!R2(T}V;vm|L*G+bT*@~EvvajIH7AqOFK(MPn0Iy}{SOXzGFxeGHvAAU z?`EwDzqZ*CT2vV~Lc4Y-Yy(frsuAjM?~!F@&I6MDM`2~J5WxIZ?&|Ao055t!=b9Ie z=L&X~Zl~u2LhQI92Kc4)+zrRm!p&!FZ&90lq`UZ6nAl2`G#4qkVG`xa{cmq*5aLuq z`w&rFT~3IwK1kj+(El~g6rUxds|({~WVD&UDYymv0)X}k0s)d<-s~JO@h+XuQGrCx zXq@N_9)gbUIF9xlsyjL`kr_XF%`(K9HF9|h2eZZB+@%DJ!))@-4+0?nwuFA(8bP)X zYt!+PeH6#o$}<6_a{eWkUYejWV+~(%y>2twTEmNSp;gz$7>1dDRc=eINqw-p2Y0iDBrQ4A`0f+X|TfK79PhysEL^KnGIc(U}C z@2Id*srQ%d4+1T&yBqEn6G~BwrLS%5%Iov;x4mqRK8^6=X{35)=daiB?NL;^@NKuJ zyNe4WCZuU+Ta##Q@J@yOX5Ii7G{6}YbAZPOSjstBCig!||9FSj zK7MPEjn--qOMvEhqS}Kv<&X96(?ol9ji?W+1m1{3j<{;Nqi8 zZR&l$m$QIbh={mhAFWb9#U&-dcXp;A!OW)K1yV|6mi~} zOebzse<{k}^Xqaaiy;PA%A7%tuLE> z6js4*HHev<4BtEHX%5NL>rRnhE5TOe?@rM!*BOIR)lvmSZJKMCeNgZ}_W?mWe1(si zHsNxIKI`3RTie^FfL%v|o79^BKwxb;U{9|j>K=6c{iVtQMbeUWBGUy6o{h_|>N-^Y zW~@aZ7z$}@Sp^WfV77}OndFO34jLlOAENJETDI9-jBW>tzzL*^KZGjHkmimqh4uCYKy=Q5nRk!_C{(kNCBn0m^-Xm zS@jo663vKcvsf#8t{?}2mrCU(tYB^aE#5I9gTw|%9}D*)CnqaZ*+r!|zsJu9$87`a z@u%T4wN|BJOkWha+0(b}x1E@)&zV{?3wc`?Z;f_xiPTLmOk;5I*WgNW ze=4oqCYt;^@x~m>*XBXI`sD)(g=(01hkGS6E@DT>5y4OY0Ka1vgCFSS$E;{TBgro) zKz*iI0V{wB9~B`jZA@JqUqNA^)bC!eSwJj-16sib;FSX!R|Wv%awK3Mo^AdIcq0QR zB<^u3DJfs4kL}FBO39xYH>b^hgY}ts*4l3Ye}0yr7(JPI{tgZQPx2l-6Tp*8&ye?I z9Rs9{&3IFdvWbB9QDFE)rNI^uY)Ff|`nz(DUW%XvbsdBBAEJ1fPb3$2Z`Zs&l@EmX z<#iF|3sT`33g)+IE)nL%KkD*JC3vXrSeT z&Y|O$74RvZUd|brO&2K6w|ekQPfzO=d?>(=Mv{G*aen$4$=MyLf$A4>-&Gl1Q@k%8 z!zZjyvs$CB4S#rRuD{}g7_bwhT%_M5qHJ_Vu-)({&FF2brT_RP+_7X=&-0m$Xed|R z?P~AG%M{p4)f3iW%!;vSLh_!{Ja)I)`(SFIQtFq9{pL+nT`1_oDxLf~Ysgcvh%o<#$${z4k8uBXWO z6Y05g+2`2ate?2{--(6<*InCmXtI3*6AeA;I72X-ok>8MWL$cvnJQrb|JXk6H)`<~ zHoCo+#9X(ynEoY@$N}T*ZApr5YZZBw{vY=>|K6vWdf&q^5YgSF9ah^==x{l?TJt%P z@g@=|QesLq_I&_fn%vb{8=jn5h4$oIDwjQIJA^gr(yGA?wS7EJp@;(+T=02KhZ^dd zve|@=5zutM9!7uCiSlBtarH|N07Um;e;m33(L66_wA&kaj5=tP3TvAC%84h=mFaLd zKVrM^n$`^v7vTXr$l*_mY;;0cyA zbxAb((Xg%_Nf=tysh>P@ef=$9bGR$w3{3P_ikaO%d<5eqJL05cVNg_6O$`YU6E+YIc*u+(Jx(%nOUwLEKUCrr zD%#X**pM879;s*JF3=zG@{i|c%;k~3KA!RY)uG=NO5(G9KLObaqHWe}M%Pi&;ai9h zGfF89_`MF7@XeG%iKo?v$=2F;E+f!i_Zy4p1xC6FSEY!^r74+`Ony+1Rfz4RU0C{h zyx~!5P(2L}s>P>p{^%g2TJh$EHolEq5 z-5}xulqFK9pPkJs$Fz2Zt!vI(XY};;pJ-l&C@oBJ?1Tg}*UwW`0l9C7mN9?JK(;E%f zODZ@%{oQhyg^07y{_RZM#gxeS5L~schzV=w#$xo^r?<9gOwSR_IMtz*24YyP@J~3C z&?}N5LzFj(ktE?Vb&0h9TSkGJY-ZS>Td$h#_DaRmOaLEuNUi0Bz%KOu`gj2FLO>@F zW9b;6RACoZK!=Kac<=>sXp7;$jVK=D+JzIK327a0q`Q2sTzqG>^PVOMCQyRzU}YQa zuOTCn?wXm))7B0O!8LR*r(BF_o;>Dpgdd=3XtM~(U4_X#D@um}$B8fEim^1eR{XkJRi_ zVtb1X_w3+KMuE{*RN(ub`XTM@9C$om@k8?5B`2)WJxn=pdtMG@HnR1HkrzTXSkb)m zc1f@Gu}yf%yX?3F7t~Q}7f!`w;seT;vXIPX^`|3$%GchXpv|T*k^-EK;Saecd*j1}psgt1q6jWvVZ6+$oFGQEo)nXci=7x$2!l*j z=*~$4wc~$S5|;7+_jHo|??HaYw2r%tc2HEqV8p|Or?XYrbtJ;Sw+_I81*IUxed^bf zv$|2Z@c8zZ+$bQSV$9s01OkCJTA8!Of7XkK7M3vvhssqJE`*%P5a9gO(-~1$3z0Z` z;hMj(Om(SjcY&dcHj9y&^19&xwPOS11cV6!EPk)p*^wuF;K&C{jg^ut*ph_^0Fzv~ zcWSKPdV4xw`uZ04Ajt;5{>zM4qpg>->`Hg%hXxO*q{*S6iHO@ztQz9ZFJSzoDUC4n zu@oThvM9AWc>tnj$lEr}naMt>Z7rXdDFafhQ2{bAqP^BA7T|ou0p|k)pXOQ3i2wF& zmp?FNQ)vD$pfMw9m0~1L^-3_VV}aK{|Dg@B52iwtP><_%48pq;6Mjb_%ByrDO@P-F zOvwL@;N0Oh?_p;PDu+>ey0IK!bCq4aS+m+42QUXXrB68B$gDKoXgM$|zn?qtZjlfM zRQgGPO#!eK?kv`GJU8g{_VrDLX(q)~f?D78GhAy5$`Hwavi~s!?@XD@)>Bd zPW~;j9FgBJJ~cO9Z5pyfFUSZQ;#b*z5DnWjAD1NG#B{M&uGXw~bM~TPCgOk82dE`y zSyW|$=XQ$WB#xy2!jEA@2#wq0VFGE}9(d|D9? zzQpLtdsrZ#oNoVvs~d|kl1yR3A<%7Tg8p{FxLFlz1noGE2|vXLRl4{sO=Qns zq}75^iWjBzB&;q0Z|5~<)|$lyNd19M85CctB*DOO7FR!hIe z{fV!n+%(x|?E)+>fFruZum1$47>A*dJ4}&E>x14u$+}h%zP{pyvcHGtt^!^_QmkIbedBbu9*qXt`oDIsl5P~3Dr{=jqvN-(?3M7B zVTTA<9)j&~0Y%9!1egX#TY6&QIO~5Zi;f9zCiF9iiCYDG$Xd`^eRVkdjLUfI+cIhu z8`uYhe?r8v=jxGVlYYStdlx^x^M{Su$;m)OKlok!C&StxZSjS$|Bo-ntlt%w+i0}! z1;mNl26oPJDo)2Vp=zOG?*F31A1889;%DwSg=gDzbnAjB-6dwL|Fy<6*ewLAWQt(vMhhsHeT4uIEUWBl{%EBDTDv`I zXpau;&``N6*T?N{Bq(a<2JTuuyNR}~iFR@iJ4Z+eX^)-L?`>hZA%RieIL2AREeH{m z-*cvm8wrT$GI`sT=G~rjtuVvTpISgRD7c{Zr>2LIflKzV;y&HI=#36}U$wqUzj^S~ zK7TisGB_^ee+r8g3z!@%+H>JW|75|&KKoyf)|Qn!nS7|^TW-oo30~l2s{l70m^@?MbjP^Rv{gVrPI;?nB;)=67A=HV4xIACYf)5Z_CXgIcX@b9bLVSIcg}}E!)?>?576`2z^C}wCDI1Lx%DATBC$N_3YxO zqxmlpyT|SK8Sk7i|M|G%+k0B!x8TxYkAx^CRtjUhZ`cf!Rl@3)^N`$`!Q!h)A%LX$ zpNhf8>29d+wJK#+c0UZr!KG8WqWpKOLdIdK%Yv8xjll3Y}4c~L+8eLUa( zgCoJ>z1Q2d6w5k10ZL8HO17Z^4YbsHfvoyCV!mHw8rm_@@jP6gf*w72qo$qy?7@cE zGu5+PVR{%n43a)J<3i4OIdI46#~s1;wnxT1wFAfO-)w&=+T;Mm=&pq#!4-LLTw8Ov z?lTXj1jT*gzNJ&T3-u>uuc(rJmZG!a9a2e8i9sW_#!@+qFJ()tkLIm(U)`s}aJ|sz z^k~3RmCxC$^7E6M*G+KGW*ObP_bJ+C++MUvRzRe^0O82iw@we3ie4L&(<1SamEK@ z38IF#Q+on%Yu826EJ`>c6%^iCcxxj+gzbEbSW-{f&@MDuM_lUB2`#i|Q?aAMB26A!cl zCl!u|;nH*S^k!l;dFdt{A8)eW_(Ao6{z|ucfjiGk$fO{Na(QnlY4|8F?T}_f)Gf!b zq&>qJ>SJ5 ztC+@YgPn~y&XidCH?dQ@D#dIPQZqTL{tOhS3NJtQL_jCU!=DUh{V@xZ)6{tuk@al- zb&jr{oD`8E4gPFdY0L4e(Py6%#)&>4=fG6Mt_fslv?eAd81@6gWUpT=BOuQrj6<}g zP;uboy z+u}mY9q>^s!z-@vXxqxwcG!NvDT*TOO9LNOk`HCMl`K8|Tm0@}v>I$Psvt-9U@jvL zEkLAV`-T1a0Yq|g`z!T=r%%^HrQ~V5RbpJx3*{X7h<6nHQL!=!mZQH)JdmjPJPI#y z6YW?55hm7VH`?G9F6!r(lG0WmL=FONhQCDDSpIorWu3l5tUGfbQRtP>Xw_h@Gm?zI zh%yRg?@%u|>f8IT+JWh^m#xpltvR-po)FwMz%RbunD${GE~hiAIwWL{;;g;U(b}|0 z)2`N^Q?S`~oCh)`{70>)k;OfyQ}4Ha6C?_Ihgx`BuRJsReyhg%_C<28$NWJMb)15d zV^lA)ns{&YGI}4i*KPKXQ@@m;XJ>HfL81ti zzEU0c#;bd}cSRqY_$gKg*!X9K(s7KAqBMUhJ^$|9(~OPpdp6^SLeP zy7xWn@%iV1U)u;UAr15!rT6$quO$U#r&HH4MfadnE%ce`>QQj|MyMJ7g>E>>E`xpiw?%N0eP(vJfTdLhhkJu zLz*@jiP^iE%)Of{HRck6B(=s=ylfO+RPIydm;H7&m)z_#onhgFO-_xi_~bw`Tj3Gj zAX^AIO$y4o6SK1S?hOW=x1iAMjw>s?Yk}}bH z%aw;tZG4+{7yntWQ#>$R*==g7BW=pRc3^+J!*y=j&1Zd)J)-PLZv!iZD0jZ6Q~vV& zjEGRp;W*N`D$Hi{LB?K#41cXAB_T7lKSV70%d6@e0(4Om^=hy|3jvM&)mhtUL-a)Z zpJwmQwrJAPvj$zcrhuoe+#|OT!bB19$Oq%qY)g`iKiJW&T}y6wg=gm3>-39wxhXo` zlG%}`0ZIEaa`#F143UC{x$1k5#F{lYPgg)G@&FMaOnG0** zIg@~}H0Ax$2`{RbQYTeh%7}Qx4tll8$b~9Kqq@ECqk~znMS&7Cp~~Y~Z7)r#^D1cI zSrj1>7yVJ<5|Oo`A=AUHjeN$ru}WE}WdISg2A3EcmGOrM-0devjzQdO-U%ypkYw1s z*qLueGqTriyZ;B?rfoCRez7}CJLkoaP>-Zb56mk%8(|A*+{Vv7Ue2<2v;(jK5)3BP zJWAn>OHEDa_0-TvhSGorBiKQ(Mv~4T?XOk-Vn%>Qpp=oOaJ@FSf{QbUsVe9jvj=xf zi)($o$M>nB7-i<1uhW{R_*?xbPTzV`_~+ZTnB=<@;|dp!y*XMHeMrrzqjMVM_1Lq; zUj|l=QRnFd7wJ=C$jGnbYId&7DlVxB*7Xp^Men?Vy>`p9(_3)) zMo|Z)OMybHbh=AL^%}^LaQuc$fSRgpOZSno&rH5D^FkPmSHj=rTQ#pvE&u5HI%T{) zckGM8M^4-_5|Me8D_|$`Qz_Z8L*qbRBtN*#krb1Sn-rbRd^;;YzpGa8`l_iSOl<(% zgo7acjraDFhNdPVf-$dnK-X_^|0G1_fqoK#!Q#+6_#|{d7%@XPUUoK9?mz^tgTmq? zQ)*Ob5U>cQFL^s7{yb73BrO}N%goVSoJL}a) zO)+f?7>s-YTi^m`V)w6KarB`LSoihcvz=L-eL|K2Yma?$cdD61?O;qiT(F?kB2Io8 zO53F-+T^<0ptopNNk7PP%zRjOV=1^c*5#7>xWs%AeFO2)N05(Q7;z%i z+i8e!9UPRnimhX7+^~NAzF3J{rU{3Q&pON4mV9S$jwZV#QBH#)mDTx5?LSmX-IlsT zG;Rubu99)*VLOK1?8mLpnMBc^2?kWc1VogFWjPqCpOTq;gHMBO( zq1f{|%4Z{d9=4;k`o}TXbVuf6V;}-fU+LDRE#`U@PnB@%w!_jKAs`m4X>c`1y}6mwsWqH_uGh!scv$0jE9E_A2mJccx@%^`N7gwl>w_W&!d8l;JmH z#G`{u+W2$#HdGQ1?+9SHoa*=@Dz^PtACWfa?mZD0e+<_C2fi^}_r-lW#p+dh(oxUz zK|0mU^lxv>^3W?2*8B`-E)?-SC4S$L#HEA)llD}`dS%+I(|3T3Ra=eqa%b{Wkd`5w zaQ8%(59cz@D)giHypNvdnwk^}yR*EQp8ig&kEa@8XS5*La*;B|__5fL53z4^#GRcQ zE{6W1^Gm)9Dvk$RTI_=#srR~(OH1GD}#DSrJG%@`IV<|S8uCX2g}H7OgXKjFHem=5V49Jrlj{$JX%#0R7ueeVvYS9D zr(u4_ zP$(fm#S%u_gU&@MliK_(*Ej;((8{HB@ta8bma1yWShS#l@L|%UR``y!=tPw4lG5eN zBt7#JiB69mhDp@|`vfiW?Dxns3IJE9sSZP*YF0UK!G+S=y zG+QEO_UF{j`=tOr`{erI&eT+3sgD?Q+@bjs0*0)Ka#@E@VT{*J+k6q{pD20{C;>3F zsq@ioTwl#1mEXG%4XQ+G65r;iV7V`ktr)Ei)I_&-I&)ibIuR({DKY*&>GvBHM4(6&ScedIJ&GIn*A?OZE;<$W1+vPV$p&d|(CHd;b z^5^vKIoDsUEdA??i;i}7c3k4(^e99JCBw{ho$>)XOujEvVy9vT@&q#FHVNC5mQ_x6lj52_hZh~LSGi z*Tna?#@N0n`qHxt)O~rm&Fi$!w|lk^FCC>aRGQFP<-nQy=K*(^hezT3=#k2i+XdSl z`43#r^{RU_C%mezJj!`XkoQX}X~t}y6?hz`i{?Br*@HidE)EZMk=f^b4R~XQNLe2( zSEs#C$6~mS>!mEmyJ1D$C?Ei$;O&w$bLY5W71`}7d(U$o>ZVL2N?neDGws&BY5l36 z%?Zmi17V5cIPKfbst~=S>bYk(via-SK$+ud>itzV@xG%+BRF-}sSyX$yNa!^IPHvB z>sV#tLSz65EZdmU7wyqj1iRlffcn8-;H3QiP0v_=?#1T{=I!*Q4_J`_EGR*og2HI z_{-+X{NFiM{dcN9L3R;}5F3{J>8S)UPwg+3dCT@8TXc?0=Xn@n5z)=TINF#_*wT>5 zhu#Q_InSY_S^WrgEd?t*2^1@&Y5K=5G7t$|UG-{q2jC(TB`^v$9#%GQS5(M34iu(- zt!;2F+56bK`If>i^0<}JnyFS`OhrY-*~6M?FOGYkN3$f8m++%Uoa=JSl5 zz)C#K3Y`QgFT@;wDXacxMR>N*SrQuRkXtn8^hmFS5HiJ(E#Q+HhUx|O-7ShOrk)cQ zHB~HyFA)NM>5PHv)kjlzpe{64G^rVNM6Ig#$uJtf6=^Rh96ENk>oI2Q?;fxDH{KiW zcJIh)VC%OL8t)~?D}+M0S1mbMj5PM^G~+Miw%>ik+^S8*&+m}Y!sxm}Zo!76RWEfh zDNoE71BMxzrQ!-7|}Z+A+D6AskXEG;d6iwG*qCmHH2>vum7$jfAB%T;Vn_k+uM zW1_7FJ{Cv&;vOYN^k$cY`Tc(F5Y?V5a0{0AF^OQbAFX6QTiSY1V3-c22-?eXPy@r1cuZtNz8A z!9>r)3pcGLcC~y z=k}1om+tOvxBBB3KK5iVbUDJv{K~MG;3@Nrc{(*$l=CM^#+Qq37-lUk42GMBuKai< zH7xjD@AihDPAC&ZOU%}VzA-*HG!r$roeDN)I?Gbkwtoq%ug-hKSV-r#vy;B!>Gr%W zfMf&^r7_UcaK|+gl4@5oKXFdf(D{?zhKs1x)mx%lYoS;>*+IEx zerKicG9z8+N-1$bvp|YQPIDf#zfQ1RPOoq2?fd8kCuUda4$q?M3b-`MEDYQ6rn z9eWMrl>T^HiYxC!(Jw5`E$i#LhVe60_uC8VFv)H!xVLRa?u*M1`TuO6BuEEbwGju!4advL5x)Z$b7{8|<8rcW{feT;MuRLDy0`hKHN}#G z^K*Mlp3HEpvHNZ~Zr+WYkj{RCGne#|RIwC2iqU#ZNuo5FI$h@l&e8d z?_RpYF9Tv{yrzHt{IN0D4GcDS9WCVP%a?<*9sn4WkZC>rT(epyJp@&`I zv5Zt7%Nji$-7=N8TU50Aw;S{@1WPY^TZ?QQ4uvDco;`b3di#&Nhll*`p7TBAKrFiq zY4aigk3c!v43U+wCsl(4BJ(=h{tY63sr|MXu6~Ad zYWiGrh3i3na){ox{J^|lk!hY`q9QWJxC;fRa+dh0C^Z1yc0#Vp6N+fsdMAsYrE^q@ zO^r7Gb;OIkW$)$fP+wH1wyncmyTrf-du0v(_a=GSf@fB+j(WY0Il|`%a~wpU8K2pl z#WVjvavLe}*OZJsB@R|Eh2THtU-RlpJENtwGF*27-Tm?uVc#rylO4Fk3wjo@>g4p6 z6ONa8%vj$wbG{nmn)v<8CCiF;Hs;0d)^`G#o;T$@O6n6X|w zz^64A^9G*dpbKfUb-Vg{GLg4HbX*b%)cog)7&b?C8mx)KdM@wmWj;Pb5YY)H7wGAb zt*Q}-YW#F~UFQ;R8C+FC#cgw2+i%V5<8rUjtZi@jjF)-2=U2vE3JMB2OBzZ_kKVP6 z%uK0UF92&gCB0GMd}8SC!XwG>aTQ3fp<{V4cnjC6$eCK4JS>DPdIqqyXgO42IoE&i) zyx5h}n#9Jjn-Y^yHv%)N4$9IhGHtH_X{~pyvAMZBSevrDp$WJ9xTI*ipK;)WJB#>z z=f;fd0-`p6gPI>hv}Pw`>R_TL1 z-gL%P3|95QSky_yeHz$p5@0-8Jtg_ulbCh8eMOse&CM6Z{GXKd%D`NHKsBNJHk-et zU)5GDXzZcD)4i?cSFlyqyAi@j`3v{ud1=|DB zouVbbOiNDRm}E#LyMFx(Z+c`32Fuq68zp+8IGn@L)9nfIi= z_r)upQlNvtgrWrlUdZJUq%ZPwDTwXV5cnBn0;y5+Ox%{|O~RmT z^g!ORzH?rj%;)ho=*D^^^`P|du$h*gHSx#eRXJ@^d58tHzbb#HWTa=IHN!NoUEac9 z9c;|=NST2;!;~mv{j+l3TfhA86E!ioc=x>x|M{UyWaM%uFvEgPSn52j=02Ay;wdja z&$*zl*D6Cg$&Pe_ZAGzi2&pS}l*wjBx*dm6H#cYR$csQRtwIcoD}1Gsq?5-{?EaIZw%zz`-hKV4Aqc-w6c4dXNazL_9Fxu9 zXQzlH)hy;60LSagi5AkM*X-5CNamWc;M-H@CrDL!*$KyqCrA`r3`>9you9PuS;he@>x!x74i7JW`k0uu_;$;u*gT z6nsA>v}VI)3pOM3+v5!xu>v)2JXFw|l16(=)WG?y_meaY=9z2!*> z$9IFSnLbhFzu#MPTC&~Rh;cU2io#(%hew+zRH9H>1mO zq!X9ap|==C$LrdXj*iCcmo#Y|vuvz)shhB^q?I3Dw0l?w@D6zO4Y8ap-n@F%oGr$9 zanJ?$)9X3vAMQw}b91+qorFTTPC?8kx~%P`x}j@h5XFY-6rN1Eb^5fSVwV_?VHnD# zuCaMm$EfolU8RTL*EBN^Frc(jfv_{AAtQVz z^fp*}OZ^NDgqRRY;78BAiY|NKjd?MDl{epa=IPNY z0Ur3pyw>lE7p%MEk{?5|Z=i#X{_!gI# zs7)jd$3}BO*y;Ji?|Y7WTW8tLKePJd(tqx#C+FS`qj-IFM$Et7F+Zu*kdNMrY67}5 zWD>9kKrM1~DrSHp-cx4(@Vl%uGEIw_cs0D#)LSz0gTh&^;|)AmgKziex{y=&sppy* zXIJimr^PK%zyjAw-y?`2E&awUV%=MJq~di+fzSOSzrxmua;h>?`wxR~gIBZGr2%FD zB%*e^I(KbAL|nWJPN}MV zBuftG=_-`!K359ybyS)Z8X5{vfE>fT+bi)XI~Iy}VOKE=0|jF7^Xu+XP1llr0yfP) zUFt7ZjQBdL+jK?O(2x{b6@dMZV7oy50deSP8Y%M-v#BEnUo*6h6TKDIytZ`GN=v-o z!7j?1jF)mUeX{4^;4lT;^akJ^M=Vz#aX@0D32@nXz=OjtwbPu+PmmU8{q)owwk|=zf9uv9xY04iaNPawdFdRgfiBu*H_F$y}S zP!?3}zU$xmw`U4~4_4*y8yg!;iXyA3+k=V_AUy`6jFi1a&Z_bb(kH2n9fL!}PM8Qh zUfsqfwfPg!ngO_Ddglm(ss!RMxFju<8RlGu>^b^elUqOkZKM#(U%cZLDp1}5Z8QG+ zM-h;EWHME7QTu}}X#}3F+$Xp}I{1*cjx95%h8`meX&}dinS3LG#U`bDE;=UWQA7k4 zChC?Y#5w_{O-W7cwcLC=MQFm4iyFAuHJrSh|K2Uj>p+r0u|qCFAz%wkMo8 zJlKnQ@gfNHS{S4T`k_R_2b2hoiB3*lrg(yhhUOa}CMROM;H+Bhcd!EecYb^msXpOD zfkm%`*6PlAof-&S5#w^(`|p_j#7%#R0j^Xujn-xKpXnbAX&>i82NKyWcF;nj=e-mJ za$@)!Ixivn4PUYo#Lz2~!TLkY@;|%&2w>6&y6e}nV(}W7j$C% z&nSXyz>|OPOBi7#{`*Mj?XpRu(Feu%1yIT8BO@0F1vq+JkEuY$4L=>tr9#lDj^dfA zIOMQE<_0zh%4c(%?>UY4)#hj5@Lm*Cy?mKlLgGZph&v?(C8hkR zyms{}wRF__EYLwrJOSPg?F*nuO+A}S#g7~Uj5cTz z1UbM?qc}!a(@6zRP}|%e^AZ5eHBF%MBY+!Efc{|(d06nj8?J?KcX|aeyI%n4{a3L9 z^1(VNg0LwzMPpD(1^u75yw<)7#DKmDko@FOl&E59$&sm(@at|qswD#P!e-Std`8Ff zE~~Vwb-2}auC*CoKj@^jiV8r0$|vo$#%EZ7SVrdLm$wM?Gv3_4n+(5p3!gj%s+o<& zL57midkG!+!qGbm3Sj(jkhaIlKa_w;SLk=}5H{*P50gH%SZzOq2Ufbb^m%oqo@NR( zWjh<)*H&wfaaw?LVM{MBf&w9tFzy6v~o-tcCoN4FVz~=ZaOe2v$i7 z&_w=i9CUQBje}|rzsfPgK)PzsBG_UE;89?45zph|&cD6Uf{MNR6@Wrdg&77**uPp( zu|@&7hUES&2nv$=LsI06(Pb9{m@U^5rE9@&ll59l?`Ro&wKK2K|12h^7E=ftq!Qyn zGlaovbOvra^a>w6G|sRX2C-?IbQF#$JmaTGI^#-jWfkC)2B9_Ae9>>{k!647%9V(j zKQAgn3@0>~J)Wy``aX+fm2BDE2ifdDl@B-91{~n=JA#oG_91aP){EJ_0;wzvnyc}j z5@Cg4H4t6Px6nEd8P8dN1QIk7fA(VquBkaX3guUBndVwnmj6RBO7Ul2AuB8E4OGvg zT^Z1RK+tqx1UWho6c%=!_BH(v7~nyp z&gyXTs)H@Fh?BBR`foq}Ba-$U?nx@4jf|Xpbs$q05p-RhybKYJDiY1H@{c{f`Ptd7 zuZb{Qi-S{c)EHosjxZh^-dcd+NYJs4z8+D>0nv@6Q8o<7Z!s^mgH~2t@xD`&lkl-~ z)+0D5XcGDe)uZrr)Pw@NTR8LTYu0DnopIZLV5OBt4&~7Ihi0pQS&f{ghKvvpSBg)G zq#CUJ^u6aG{u1r_H3jOIndeMp25Uckufl2xY!kGhgwnY zYC1|yL64+M@CFDlR=%5zU}{33q9qjwENDKnC2o6g6czurv}m>_UhK|VX2|yON~WZs zKt-6=Ajv||-dK7jCZXv111s@as0<;Cnljy&CweKeyh%hO=MVa}Nob$&xc7FTXkyxZK^$Gm1v&Vr&)5#fNRo?nYQDSOW`=FZLIU=x$2-4H@tQ$#I_qDKxEtT+lF zX5$^%c}_?uz%&nf;@un!zr_nDl!{0D3~%4Q{K10Rh7X zPv}zr{zAc?qbRoGb~03)Vbq=Oi>_>Ue1sN==x!kPE80Va>ZHsGF)=YCpOcUBGnUq& ziU|6X3Br5*&^K2SM167|Cd@#o+Y}>`^y!vzl+vwl9A49Oncr^?KnFV$KfkJlZ`Puv zTVBvK!~}Y54M5GvS7d8>yaSGH`Fng4bhEoR+sVBJtc)UPdGH?mpd$Dq_F=FUi*uao z%2{?f^ zZapaY)M~X|URoOOyEW*5o))ZYNZV`KxWIsb!b z|MplKxtMw5%;5PBxq9*Q=LbQ{Q3nqf=EiHQf)dG84Agiaw-3;@*kTVGskQ}B*7qSH zWau%_QLq&{c*(b)w`~Y9?TCH-x((|=Tm#FdXomjRp4*b2(Jm!H-6eNniH;Dv2l;O) zry&U@R@N5qdIx~n-h9rgYBB39;|s;*52MZwV7C_onJrhkdr7E~v6+9qy(j|zFB8#! zYYb&C336WI-&$KYx}Q^Y{Cl?+zMH+;8Tw*yHlT0UL$enVMa#E^FlwuzM@n%L@5PIQ zQ3X-_NH}V$3RjFt diff --git a/The attainments and realizations of my dreams/Annual_household_income.py b/The attainments and realizations of my dreams/Annual_household_income.py index 66a32515..70fc0fe0 100644 --- a/The attainments and realizations of my dreams/Annual_household_income.py +++ b/The attainments and realizations of my dreams/Annual_household_income.py @@ -25,6 +25,7 @@ plt.legend() plt.grid(linewidth=0.7) plt.ylabel("Income (1 million New Taiwan Dollar)") +plt.xlabel("Reference: https://statfy.mol.gov.tw/map02.aspx?cid=64&xFunc=138&xKey=1") plt.savefig("Annual_household_income") plt.show() From 7f2db8218b12323f8671b8af3d731e63b45fc436 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 09:23:47 +0800 Subject: [PATCH 0069/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Pie plot.py | 14 ++++++++++++++ Matplotlib 3 Cookbook/__init__.py | 0 2 files changed, 14 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Pie plot.py create mode 100644 Matplotlib 3 Cookbook/__init__.py diff --git a/Matplotlib 3 Cookbook/Pie plot.py b/Matplotlib 3 Cookbook/Pie plot.py new file mode 100644 index 00000000..2bc167af --- /dev/null +++ b/Matplotlib 3 Cookbook/Pie plot.py @@ -0,0 +1,14 @@ +import matplotlib.pyplot as plt + +labels = ['SciFi', 'Drama', 'Thriller', 'Comedy', 'Action', 'Romance'] +sizes = [5, 15, 10, 20, 40, 10] # Add upto 100% + +# Show one slice slightly outside the circle. +explode = (0, 0, 0, 0, 0.1, 0) # only "explode" the 5th slice (i.e. 'Action') + +plt.pie(x=sizes, explode=explode, labels=labels, autopct='%1.1%f%%', shadow=True, startangle=90) + +# The equal aspect ratio ensures that pie is drawn as a circle. The default is an ellipse. +plt.axis('equal') + +plt.show() diff --git a/Matplotlib 3 Cookbook/__init__.py b/Matplotlib 3 Cookbook/__init__.py new file mode 100644 index 00000000..e69de29b From 7181120918889fb780602b87712c3057e8af4e31 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 09:32:50 +0800 Subject: [PATCH 0070/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Pie plot.py | 2 +- Matplotlib 3 Cookbook/Pie plot2.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 Matplotlib 3 Cookbook/Pie plot2.py diff --git a/Matplotlib 3 Cookbook/Pie plot.py b/Matplotlib 3 Cookbook/Pie plot.py index 2bc167af..a6bf13a4 100644 --- a/Matplotlib 3 Cookbook/Pie plot.py +++ b/Matplotlib 3 Cookbook/Pie plot.py @@ -6,7 +6,7 @@ # Show one slice slightly outside the circle. explode = (0, 0, 0, 0, 0.1, 0) # only "explode" the 5th slice (i.e. 'Action') -plt.pie(x=sizes, explode=explode, labels=labels, autopct='%1.1%f%%', shadow=True, startangle=90) +plt.pie(x=sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90) # The equal aspect ratio ensures that pie is drawn as a circle. The default is an ellipse. plt.axis('equal') diff --git a/Matplotlib 3 Cookbook/Pie plot2.py b/Matplotlib 3 Cookbook/Pie plot2.py new file mode 100644 index 00000000..70d8f9fb --- /dev/null +++ b/Matplotlib 3 Cookbook/Pie plot2.py @@ -0,0 +1,14 @@ +import matplotlib.pyplot as plt + +labels = ['SciFi', 'Drama', 'Thriller', 'Comedy', 'Action', 'Romance'] +sizes = [5, 15, 10, 20, 40, 10] # Add upto 100% + +# Show one slice slightly outside the circle. +explode = (0, 0, 0, 0, 0.1, 0) # only "explode" the 5th slice (i.e. 'Action') + +plt.pie(x=sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90) + +# The equal aspect ratio ensures that pie is drawn as a circle. The default is an ellipse. +plt.axis('equal') + +plt.show() From 99d639441b7941b211f9a51a550691c541f9e4aa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 09:36:30 +0800 Subject: [PATCH 0071/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Pie plot3.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Pie plot3.py diff --git a/Matplotlib 3 Cookbook/Pie plot3.py b/Matplotlib 3 Cookbook/Pie plot3.py new file mode 100644 index 00000000..d01ce3c2 --- /dev/null +++ b/Matplotlib 3 Cookbook/Pie plot3.py @@ -0,0 +1,14 @@ +import matplotlib.pyplot as plt + +labels = ['SciFi', 'Drama', 'Thriller', 'Comedy', 'Action', 'Romance'] +sizes = [5, 15, 10, 20, 40, 10] # Add upto 100% + +# Show one slice slightly outside the circle. +explode = (0, 0, 0, 0, 0.1, 0) # only "explode" the 5th slice (i.e. 'Action') + +plt.pie(x=sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=90) + +# The equal aspect ratio ensures that pie is drawn as a circle. The default is an ellipse. +plt.axis('equal') + +plt.show() From 44874f62d5d1523830b124fee49709ff653dab6c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 09:42:58 +0800 Subject: [PATCH 0072/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Stacked plot.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Stacked plot.py diff --git a/Matplotlib 3 Cookbook/Stacked plot.py b/Matplotlib 3 Cookbook/Stacked plot.py new file mode 100644 index 00000000..51b4e608 --- /dev/null +++ b/Matplotlib 3 Cookbook/Stacked plot.py @@ -0,0 +1,19 @@ +import numpy as np +import matplotlib.pyplot as plt + +x = np.array([1, 2, 3, 4, 5, 6], dtype=np.int32) +April = [5, 6, 7, 8, 9] +May = [0, 4, 3, 7, 8, 9] +June = [6, 7, 4, 5, 6, 8] + +labels = ["April ", "May", "June"] + +fig, ax = plt.subplots() + +ax.stackplot(x, April, May, June, labels=labels) +ax.legend(loc=2) +plt.xlabel('defect reason code') +plt.ylabel('number of defects') +plt.title('Product Defects - Q1 FY2019') + +plt.show() From 616467d4336fd97d8f68e5ce6d9b0e6004c91dd9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 09:53:06 +0800 Subject: [PATCH 0073/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Stacked plot.py | 2 +- Matplotlib 3 Cookbook/Stacked plot2.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Matplotlib 3 Cookbook/Stacked plot2.py diff --git a/Matplotlib 3 Cookbook/Stacked plot.py b/Matplotlib 3 Cookbook/Stacked plot.py index 51b4e608..985fae99 100644 --- a/Matplotlib 3 Cookbook/Stacked plot.py +++ b/Matplotlib 3 Cookbook/Stacked plot.py @@ -2,7 +2,7 @@ import matplotlib.pyplot as plt x = np.array([1, 2, 3, 4, 5, 6], dtype=np.int32) -April = [5, 6, 7, 8, 9] +April = [5, 7, 6, 7, 8, 9] May = [0, 4, 3, 7, 8, 9] June = [6, 7, 4, 5, 6, 8] diff --git a/Matplotlib 3 Cookbook/Stacked plot2.py b/Matplotlib 3 Cookbook/Stacked plot2.py new file mode 100644 index 00000000..d9b11afa --- /dev/null +++ b/Matplotlib 3 Cookbook/Stacked plot2.py @@ -0,0 +1,19 @@ +import numpy as np +import matplotlib.pyplot as plt + +x = np.array([1, 2, 3, 4, 5, 6]) +April = [5, 7, 6, 7, 8, 9] +May = [0, 4, 3, 7, 8, 9] +June = [6, 7, 4, 5, 6, 8] + +labels = ["April ", "May", "June"] + +fig, ax = plt.subplots() + +ax.stackplot(x, April, May, June, labels=labels) +ax.legend(loc=2) +plt.xlabel('defect reason code') +plt.ylabel('number of defects') +plt.title('Product Defects - Q1 FY2019') + +plt.show() From 34ed943f4b700cbb4187c31df63665a686a5917e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 10:02:40 +0800 Subject: [PATCH 0074/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Bar plot.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Bar plot.py diff --git a/Matplotlib 3 Cookbook/Bar plot.py b/Matplotlib 3 Cookbook/Bar plot.py new file mode 100644 index 00000000..68840196 --- /dev/null +++ b/Matplotlib 3 Cookbook/Bar plot.py @@ -0,0 +1,6 @@ +import matplotlib.pyplot as plt +import numpy as np +import calendar + +month_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + From 05f0cfa2edcf238e3cff925ca433ff49fcee045e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 10:17:30 +0800 Subject: [PATCH 0075/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Bar plot.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Matplotlib 3 Cookbook/Bar plot.py b/Matplotlib 3 Cookbook/Bar plot.py index 68840196..8ff110d9 100644 --- a/Matplotlib 3 Cookbook/Bar plot.py +++ b/Matplotlib 3 Cookbook/Bar plot.py @@ -4,3 +4,17 @@ month_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +units_sold = [500, 600, 750, 900, 1100, 1050, 1000, 950, 800, 700, 550, 450] + +fig, ax = plt.subplots() + +plt.xticks(month_num, calendar.month_name[1:13], rotation=20) + +plot = ax.bar(month_num, units_sold) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002*height, + '%d'%int(height), ha='center', va='bottom') + +plt.show() From e90db4993bda04333fbf6a12cdad788b11e41a79 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 11:04:05 +0800 Subject: [PATCH 0076/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Bar plot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matplotlib 3 Cookbook/Bar plot.py b/Matplotlib 3 Cookbook/Bar plot.py index 8ff110d9..8177ebf3 100644 --- a/Matplotlib 3 Cookbook/Bar plot.py +++ b/Matplotlib 3 Cookbook/Bar plot.py @@ -8,7 +8,7 @@ fig, ax = plt.subplots() -plt.xticks(month_num, calendar.month_name[1:13], rotation=20) +plt.xticks(month_num, calendar.month_name[1:13], rotation=27) plot = ax.bar(month_num, units_sold) From 5219cd90a43d3fa070dc1a77a4b00c292791a72f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 11:06:16 +0800 Subject: [PATCH 0077/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Bar plot (horizontal).py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Bar plot (horizontal).py diff --git a/Matplotlib 3 Cookbook/Bar plot (horizontal).py b/Matplotlib 3 Cookbook/Bar plot (horizontal).py new file mode 100644 index 00000000..6bac7289 --- /dev/null +++ b/Matplotlib 3 Cookbook/Bar plot (horizontal).py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt + + + From f6f5ec04dfc767dfaf630501d02532567ebd38c2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 11:12:13 +0800 Subject: [PATCH 0078/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Bar plot (horizontal).py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Matplotlib 3 Cookbook/Bar plot (horizontal).py b/Matplotlib 3 Cookbook/Bar plot (horizontal).py index 6bac7289..bbb39e3b 100644 --- a/Matplotlib 3 Cookbook/Bar plot (horizontal).py +++ b/Matplotlib 3 Cookbook/Bar plot (horizontal).py @@ -1,4 +1,18 @@ import matplotlib.pyplot as plt +import calendar +# matplotlib accepts only floating point data types as its arguments for data. +# So months have to be represented in numerical format. +month_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +units_sold = [500, 600, 750, 900, 1100, 1050, 1000, 950, 800, 700, 550, 450] +fig, ax = plt.subplots() +# change the month number to month name on y axis +plt.yticks(month_num, calendar.month_name[1:13], rotation=20) + +# plot horizontal bar graph +plot = plt.barh(month_num, units_sold) + +# display the graph on the screen +plt.show() From 69f6fcc842d67f254a2a0e8667740b1cf7345181 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 11:38:38 +0800 Subject: [PATCH 0079/2002] Committed 2021/09/23 --- .../2020_std_death_rate.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 The attainments and realizations of my dreams/2020_std_death_rate.py diff --git a/The attainments and realizations of my dreams/2020_std_death_rate.py b/The attainments and realizations of my dreams/2020_std_death_rate.py new file mode 100644 index 00000000..6cd9cb09 --- /dev/null +++ b/The attainments and realizations of my dreams/2020_std_death_rate.py @@ -0,0 +1 @@ +import matplotlib.pyplot as plt \ No newline at end of file From d6a3d60cc3476f631c22d7c21c85fb635a35372d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 12:59:44 +0800 Subject: [PATCH 0080/2002] Committed 2021/09/23 --- .../2019_std_death_rate.py | 27 +++++++++++++++++++ .../2020_std_death_rate.py | 1 - 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/2019_std_death_rate.py delete mode 100644 The attainments and realizations of my dreams/2020_std_death_rate.py diff --git a/The attainments and realizations of my dreams/2019_std_death_rate.py b/The attainments and realizations of my dreams/2019_std_death_rate.py new file mode 100644 index 00000000..efc31b64 --- /dev/null +++ b/The attainments and realizations of my dreams/2019_std_death_rate.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] +death_rate = [289.6, 358.6, 361.5, 378.8, 387.4, 393.7, 402.4, 402.5, 406.4, 408.1, + 412.4, 413.1, 427.6, 437.3, 438.5, 439.3, 455.7, 493.5, 506.8, 545.2] + +label = ["Taipei", "Hsinchu City", "New Taipei", "Taoyuan", "Taichung", "Hsinchu", + "Penghu", "Changhua", "Chiayi City", "Yilan", "Keelung", "Tainan", "Kaohsiung", + "Chiayi", "Miaoli", "Nantou", "Yunlin", "Hualien", "Pingtung", "Taitung"] + +fig, ax = plt.subplots(figsize=(10, 7)) # [1] +plt.xticks(region_num, labels=label, rotation=47) + +plot = ax.bar(region_num, death_rate) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002*height, + '%d'%int(height), ha='center', va='bottom') + +plt.title("2019 Standardized Death Rate By Region In Taiwan") +plt.ylabel("Death per 10 thousands people") +plt.xlabel("Reference: https://www.moi.gov.tw/cl.aspx?n=14661") +plt.show() + +# Reference: +# 1. https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib \ No newline at end of file diff --git a/The attainments and realizations of my dreams/2020_std_death_rate.py b/The attainments and realizations of my dreams/2020_std_death_rate.py deleted file mode 100644 index 6cd9cb09..00000000 --- a/The attainments and realizations of my dreams/2020_std_death_rate.py +++ /dev/null @@ -1 +0,0 @@ -import matplotlib.pyplot as plt \ No newline at end of file From 81e0410f57aace2f9216a6d93009284beb98e9dc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 13:22:10 +0800 Subject: [PATCH 0081/2002] Committed 2021/09/23 --- .../2019_std_death_rate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/2019_std_death_rate.py b/The attainments and realizations of my dreams/2019_std_death_rate.py index efc31b64..e0990cc4 100644 --- a/The attainments and realizations of my dreams/2019_std_death_rate.py +++ b/The attainments and realizations of my dreams/2019_std_death_rate.py @@ -10,6 +10,7 @@ fig, ax = plt.subplots(figsize=(10, 7)) # [1] plt.xticks(region_num, labels=label, rotation=47) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plot = ax.bar(region_num, death_rate) From a2b9b938ccb7d889090491953e5ae4a4f622364d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 14:01:12 +0800 Subject: [PATCH 0082/2002] Committed 2021/09/23 --- .../2019_std_death_rate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/2019_std_death_rate.py b/The attainments and realizations of my dreams/2019_std_death_rate.py index e0990cc4..a4a605ac 100644 --- a/The attainments and realizations of my dreams/2019_std_death_rate.py +++ b/The attainments and realizations of my dreams/2019_std_death_rate.py @@ -8,7 +8,7 @@ "Penghu", "Changhua", "Chiayi City", "Yilan", "Keelung", "Tainan", "Kaohsiung", "Chiayi", "Miaoli", "Nantou", "Yunlin", "Hualien", "Pingtung", "Taitung"] -fig, ax = plt.subplots(figsize=(10, 7)) # [1] +fig, ax = plt.subplots(figsize=(10, 8)) # [1] plt.xticks(region_num, labels=label, rotation=47) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) From 16b096a6985626d233d4fe09501acce07d66aad7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 15:59:29 +0800 Subject: [PATCH 0083/2002] Committed 2021/09/23 --- Matplotlib for Python Developers/Data point markers.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Matplotlib for Python Developers/Data point markers.py diff --git a/Matplotlib for Python Developers/Data point markers.py b/Matplotlib for Python Developers/Data point markers.py new file mode 100644 index 00000000..1fed0815 --- /dev/null +++ b/Matplotlib for Python Developers/Data point markers.py @@ -0,0 +1,7 @@ +import matplotlib.pyplot as plt +from matplotlib.lines import Line2D + +for i, marker in enumerate(Line2D.markers): + plt.scatter(x=i%10, y=i, marker=marker, s=100) # plot each of the markers in size of 100. + plt.show() + From e89dd9e18d4c7773d74fbbf6de7580346fc72c34 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 16:07:53 +0800 Subject: [PATCH 0084/2002] Committed 2021/09/23 --- .../Customizing data point markers.py | 4 ++++ Matplotlib for Python Developers/Data point markers.py | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 Matplotlib for Python Developers/Customizing data point markers.py diff --git a/Matplotlib for Python Developers/Customizing data point markers.py b/Matplotlib for Python Developers/Customizing data point markers.py new file mode 100644 index 00000000..9dda1754 --- /dev/null +++ b/Matplotlib for Python Developers/Customizing data point markers.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +from matplotlib.lines import Line2D + +custom_markers = diff --git a/Matplotlib for Python Developers/Data point markers.py b/Matplotlib for Python Developers/Data point markers.py index 1fed0815..2cdc9cc9 100644 --- a/Matplotlib for Python Developers/Data point markers.py +++ b/Matplotlib for Python Developers/Data point markers.py @@ -3,5 +3,6 @@ for i, marker in enumerate(Line2D.markers): plt.scatter(x=i%10, y=i, marker=marker, s=100) # plot each of the markers in size of 100. - plt.show() + +plt.show() From bc1134b6fb4321a368344768098cadcca791299b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 16:16:10 +0800 Subject: [PATCH 0085/2002] Committed 2021/09/23 --- .../Adjusting marker sizes and colors.py | 5 +++++ .../Customizing data point markers.py | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 Matplotlib for Python Developers/Adjusting marker sizes and colors.py diff --git a/Matplotlib for Python Developers/Adjusting marker sizes and colors.py b/Matplotlib for Python Developers/Adjusting marker sizes and colors.py new file mode 100644 index 00000000..07f054dd --- /dev/null +++ b/Matplotlib for Python Developers/Adjusting marker sizes and colors.py @@ -0,0 +1,5 @@ +import matplotlib.pyplot as plt +import matplotlib.colors +import numpy as np + + diff --git a/Matplotlib for Python Developers/Customizing data point markers.py b/Matplotlib for Python Developers/Customizing data point markers.py index 9dda1754..a18a67c4 100644 --- a/Matplotlib for Python Developers/Customizing data point markers.py +++ b/Matplotlib for Python Developers/Customizing data point markers.py @@ -1,4 +1,9 @@ import matplotlib.pyplot as plt from matplotlib.lines import Line2D -custom_markers = +custom_markers = ['$'+x+'$' for x in ['\$', '\%', '\clubsuit', '\sigma', '']] + +for i, marker in enumerate(custom_markers): + plt.scatter(i%10, i, marker=marker, s=500) # plot each of the markers in size of 100 + +plt.show() From 63132761bda56fb66dedc1765eeee4def6106ad4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 16:31:38 +0800 Subject: [PATCH 0086/2002] Committed 2021/09/23 --- .../Adjusting marker sizes and colors.py | 16 ++++++++++++++++ .../Adjusting marker sizes and colors2.py | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 Matplotlib for Python Developers/Adjusting marker sizes and colors2.py diff --git a/Matplotlib for Python Developers/Adjusting marker sizes and colors.py b/Matplotlib for Python Developers/Adjusting marker sizes and colors.py index 07f054dd..35b2207c 100644 --- a/Matplotlib for Python Developers/Adjusting marker sizes and colors.py +++ b/Matplotlib for Python Developers/Adjusting marker sizes and colors.py @@ -2,4 +2,20 @@ import matplotlib.colors import numpy as np +# Prepare a list of integers +n = list(range(5)) +# Prepare a list of sizes that increases with values in n +s = [i**2 * 100 + 100 for i in n] + +# Prepare a list of colors +c = ['red', 'orange', 'yellow', 'green', 'blue'] + +# Draw a scatter plot of n points with black cross markers of size 12 +plt.plot(n, marker='x', color='black', ms=12) + +# Set axis limits to show the markers completely +plt.xlim(-0.5, 4.5) +plt.ylim(-1, 5) + +plt.show() diff --git a/Matplotlib for Python Developers/Adjusting marker sizes and colors2.py b/Matplotlib for Python Developers/Adjusting marker sizes and colors2.py new file mode 100644 index 00000000..81a549ee --- /dev/null +++ b/Matplotlib for Python Developers/Adjusting marker sizes and colors2.py @@ -0,0 +1,18 @@ +import matplotlib.pyplot as plt +import matplotlib.colors +import numpy as np + +n = [0, 1, 2, 3, 4] + +s = [i**2 * 100 + 100 for i in n] + +# Prepare a list of colors +c = ['red', 'orange', 'yellow', 'green', ' blue'] + +# Draw a scatter plot of n points, with sizes in s and colors in c +plt.scatter(n, size=s, color=c) + +# Draw a line plot, with n points of black cross markers of size 12 +plt.plot(n, marker='x', color='black', ms=12) + +plt.show() From 5b8edd925985c3271a0afd3f60c7350951b34fdb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 16:41:34 +0800 Subject: [PATCH 0087/2002] Committed 2021/09/23 --- .../Adjusting marker sizes and colors2.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Matplotlib for Python Developers/Adjusting marker sizes and colors2.py b/Matplotlib for Python Developers/Adjusting marker sizes and colors2.py index 81a549ee..5375a7d9 100644 --- a/Matplotlib for Python Developers/Adjusting marker sizes and colors2.py +++ b/Matplotlib for Python Developers/Adjusting marker sizes and colors2.py @@ -10,9 +10,13 @@ c = ['red', 'orange', 'yellow', 'green', ' blue'] # Draw a scatter plot of n points, with sizes in s and colors in c -plt.scatter(n, size=s, color=c) +plt.scatter(x=n, y=n, s=s, cmap=c) # Draw a line plot, with n points of black cross markers of size 12 plt.plot(n, marker='x', color='black', ms=12) +# Set axis limits to show the markers completely. +plt.xlim(-0.5, 4.5) +plt.ylim(-1, 5) + plt.show() From f8b0e6a7ae501ca9f59058d7cb5c9d627e8bc5fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 16:47:34 +0800 Subject: [PATCH 0088/2002] Committed 2021/09/23 --- .../2019_std_death_rate2.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 The attainments and realizations of my dreams/2019_std_death_rate2.py diff --git a/The attainments and realizations of my dreams/2019_std_death_rate2.py b/The attainments and realizations of my dreams/2019_std_death_rate2.py new file mode 100644 index 00000000..a4a605ac --- /dev/null +++ b/The attainments and realizations of my dreams/2019_std_death_rate2.py @@ -0,0 +1,28 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] +death_rate = [289.6, 358.6, 361.5, 378.8, 387.4, 393.7, 402.4, 402.5, 406.4, 408.1, + 412.4, 413.1, 427.6, 437.3, 438.5, 439.3, 455.7, 493.5, 506.8, 545.2] + +label = ["Taipei", "Hsinchu City", "New Taipei", "Taoyuan", "Taichung", "Hsinchu", + "Penghu", "Changhua", "Chiayi City", "Yilan", "Keelung", "Tainan", "Kaohsiung", + "Chiayi", "Miaoli", "Nantou", "Yunlin", "Hualien", "Pingtung", "Taitung"] + +fig, ax = plt.subplots(figsize=(10, 8)) # [1] +plt.xticks(region_num, labels=label, rotation=47) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, death_rate) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002*height, + '%d'%int(height), ha='center', va='bottom') + +plt.title("2019 Standardized Death Rate By Region In Taiwan") +plt.ylabel("Death per 10 thousands people") +plt.xlabel("Reference: https://www.moi.gov.tw/cl.aspx?n=14661") +plt.show() + +# Reference: +# 1. https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib \ No newline at end of file From a6be9acf58581d126493ec4ac2ef4db0e6dd9cb3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 16:53:10 +0800 Subject: [PATCH 0089/2002] Committed 2021/09/23 --- .../2019_std_death_rate2.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/2019_std_death_rate2.py b/The attainments and realizations of my dreams/2019_std_death_rate2.py index a4a605ac..ce3fa03c 100644 --- a/The attainments and realizations of my dreams/2019_std_death_rate2.py +++ b/The attainments and realizations of my dreams/2019_std_death_rate2.py @@ -20,8 +20,12 @@ '%d'%int(height), ha='center', va='bottom') plt.title("2019 Standardized Death Rate By Region In Taiwan") + plt.ylabel("Death per 10 thousands people") plt.xlabel("Reference: https://www.moi.gov.tw/cl.aspx?n=14661") + +plt.ylim(250, 550) + plt.show() # Reference: From e31bc0aa180ebd2de49bda2c6b55f2b5087445b0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 16:55:11 +0800 Subject: [PATCH 0090/2002] Committed 2021/09/23 --- .../Annual_house_hold_income_2020.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual_house_hold_income_2020.py diff --git a/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py b/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py new file mode 100644 index 00000000..70fc0fe0 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py @@ -0,0 +1,31 @@ +import matplotlib.pyplot as plt + +year = [2015, 2016, 2017, 2018, 2019, 2020] +income_Kaohsiung = [1145895, 1166824, 1186204, 1219246, 1224268, 1224100] +income_Tainan = [1007093, 1063495, 1079199, 1086077, 1079174, 1086475] +income_Taichung = [1169183, 1140325, 1245350, 1279865, 1298497, 1289700] +income_Taoyuan = [1307158, 1317790, 1337361, 1378732, 1392199, 1424027] +income_Taipei = [1581899, 1568945, 1648122, 1649348, 1723021, 1716591] +income_New_Taipei = [1171978, 1223867, 1265798, 1292753, 1319841, 1352548] +income_Hsinchu_county = [1283995, 1365150, 1616327, 1519478, 1539555, 1619782] +income_Hsinchu_city = [1427572, 1537317, 1572296, 1426379, 1602826, 1618903] +income_Miaoli_county = [1008241, 1166196, 1029485, 1045881, 1073028, 1161999] + +plt.plot(year, income_Taipei, label="Taipei") +plt.plot(year, income_New_Taipei, label="New Taipei") +plt.plot(year, income_Taoyuan, label="Taoyuan") +plt.plot(year, income_Hsinchu_county, label="Hsinchu county") +plt.plot(year, income_Hsinchu_city, label="Hsinchu city") +plt.plot(year, income_Miaoli_county, label="Miaoli") +plt.plot(year, income_Taichung, label="Taichung") +plt.plot(year, income_Tainan, label="Tainan") +plt.plot(year, income_Kaohsiung, label="Kaohsiung") + +plt.title("Annual household income by region in Taiwan") +plt.legend() +plt.grid(linewidth=0.7) +plt.ylabel("Income (1 million New Taiwan Dollar)") +plt.xlabel("Reference: https://statfy.mol.gov.tw/map02.aspx?cid=64&xFunc=138&xKey=1") + +plt.savefig("Annual_household_income") +plt.show() From c4f949db02f9270663d95700344cab442022cc9a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 16:55:49 +0800 Subject: [PATCH 0091/2002] Committed 2021/09/23 --- .../Annual_house_hold_income_2020.py | 1 - 1 file changed, 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py b/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py index 70fc0fe0..6a7b0d66 100644 --- a/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py +++ b/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py @@ -27,5 +27,4 @@ plt.ylabel("Income (1 million New Taiwan Dollar)") plt.xlabel("Reference: https://statfy.mol.gov.tw/map02.aspx?cid=64&xFunc=138&xKey=1") -plt.savefig("Annual_household_income") plt.show() From 5152ba20db605dd681e4784d71491c7f3782125b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 17:00:32 +0800 Subject: [PATCH 0092/2002] Committed 2021/09/23 --- .../Annual_house_hold_income_2020.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py b/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py index 6a7b0d66..92cf342e 100644 --- a/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py +++ b/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py @@ -19,7 +19,7 @@ plt.plot(year, income_Miaoli_county, label="Miaoli") plt.plot(year, income_Taichung, label="Taichung") plt.plot(year, income_Tainan, label="Tainan") -plt.plot(year, income_Kaohsiung, label="Kaohsiung") +plt.plot(year, income_Kaohsiung, label="Kaohsiung", marker='*', ms=12) plt.title("Annual household income by region in Taiwan") plt.legend() From 685398bc406c0175dcf1623152cbb981eae81379 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 18:34:00 +0800 Subject: [PATCH 0093/2002] Committed 2021/09/23 --- .../2019_std_death_rate3.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 The attainments and realizations of my dreams/2019_std_death_rate3.py diff --git a/The attainments and realizations of my dreams/2019_std_death_rate3.py b/The attainments and realizations of my dreams/2019_std_death_rate3.py new file mode 100644 index 00000000..5746b517 --- /dev/null +++ b/The attainments and realizations of my dreams/2019_std_death_rate3.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] +death_rate = [289.6, 358.6, 361.5, 378.8, 387.4, 393.7, 402.4, 402.5, 406.4, 408.1, + 412.4, 413.1, 427.6, 437.3, 438.5, 439.3, 455.7, 493.5, 506.8, 545.2] + +label = ["Taipei", "Hsinchu City", "New Taipei", "Taoyuan", "Taichung", "Hsinchu", + "Penghu", "Changhua", "Chiayi City", "Yilan", "Keelung", "Tainan", "Kaohsiung", + "Chiayi", "Miaoli", "Nantou", "Yunlin", "Hualien", "Pingtung", "Taitung"] + +fig, ax = plt.subplots(figsize=(10, 8)) # [1] +plt.xticks(region_num, labels=label, rotation=47) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, death_rate) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002*height, + '%d'%int(height), ha='center', va='bottom') + +plt.title("2019 Standardized Death Rate By Region In Taiwan") + +plt.ylabel("Death per 10 thousands people") +plt.xlabel("Reference: https://www.moi.gov.tw/cl.aspx?n=14661") + +plt.ylim(280, 580) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib \ No newline at end of file From f966b94851287fc06048e7a39cbbcbffb8004fb1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 18:44:10 +0800 Subject: [PATCH 0094/2002] Committed 2021/09/23 --- .../2019_std_death_rate3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/2019_std_death_rate3.py b/The attainments and realizations of my dreams/2019_std_death_rate3.py index 5746b517..4440a7a4 100644 --- a/The attainments and realizations of my dreams/2019_std_death_rate3.py +++ b/The attainments and realizations of my dreams/2019_std_death_rate3.py @@ -24,7 +24,7 @@ plt.ylabel("Death per 10 thousands people") plt.xlabel("Reference: https://www.moi.gov.tw/cl.aspx?n=14661") -plt.ylim(280, 580) +plt.ylim(280, 560) plt.show() From d1e362fedbbb9e098db39ece66153ec6baa24005 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 18:45:39 +0800 Subject: [PATCH 0095/2002] Committed 2021/09/23 --- .../Embedding Text and Expressions.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 The attainments and realizations of my dreams/Embedding Text and Expressions.py diff --git a/The attainments and realizations of my dreams/Embedding Text and Expressions.py b/The attainments and realizations of my dreams/Embedding Text and Expressions.py new file mode 100644 index 00000000..109f2e92 --- /dev/null +++ b/The attainments and realizations of my dreams/Embedding Text and Expressions.py @@ -0,0 +1,3 @@ +import numpy as np +import matplotlib.pyplot as plt + From afe3742549d1ba763a5762497d43d50a51662e44 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 18:47:42 +0800 Subject: [PATCH 0096/2002] Committed 2021/09/23 --- .../Embedding Text and Expressions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Embedding Text and Expressions.py b/The attainments and realizations of my dreams/Embedding Text and Expressions.py index 109f2e92..a3e15345 100644 --- a/The attainments and realizations of my dreams/Embedding Text and Expressions.py +++ b/The attainments and realizations of my dreams/Embedding Text and Expressions.py @@ -1,3 +1,5 @@ import numpy as np import matplotlib.pyplot as plt +font = {'family': 'DejaVu Sans', 'name': 'Times New Roman', 'style': 'italic', 'color': 'orange', + 'weight': 'bold', 'size': 16} From c0f366058200a99f4036fb38b509b87f1ffd17fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 18:59:26 +0800 Subject: [PATCH 0097/2002] Committed 2021/09/23 --- .../Embedding Text and Expressions.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/The attainments and realizations of my dreams/Embedding Text and Expressions.py b/The attainments and realizations of my dreams/Embedding Text and Expressions.py index a3e15345..68a34dc1 100644 --- a/The attainments and realizations of my dreams/Embedding Text and Expressions.py +++ b/The attainments and realizations of my dreams/Embedding Text and Expressions.py @@ -3,3 +3,18 @@ font = {'family': 'DejaVu Sans', 'name': 'Times New Roman', 'style': 'italic', 'color': 'orange', 'weight': 'bold', 'size': 16} + +t = np.linspace(0.0, 5.0, 100) +y = np.sin(2*np.pi*t) * np.exp(-t/2) +plt.plot(t, y, 'm') + +# Define the text, title, and labels, and print them on the plot: +plt.text(2, 0.65, r'$\sin(2 \pi t) \exp(-t/2)$', fontdict=font) +plt.title('Damped exponential decay', fontdict=font) +plt.xlabel('time (s)', fontdict=font) +plt.ylabel('voltage (mV)', fontdict=font) + +# Adjust the space to prevent clipping of ylabel. +plt.subplots_adjust(left=0.15) + +plt.show() From 752a614a3e19369a2943b6f510da33c75dd9c11b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 19:04:51 +0800 Subject: [PATCH 0098/2002] Committed 2021/09/23 --- .../Embedding Text and Expressions.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {The attainments and realizations of my dreams => Matplotlib 3 Cookbook}/Embedding Text and Expressions.py (100%) diff --git a/The attainments and realizations of my dreams/Embedding Text and Expressions.py b/Matplotlib 3 Cookbook/Embedding Text and Expressions.py similarity index 100% rename from The attainments and realizations of my dreams/Embedding Text and Expressions.py rename to Matplotlib 3 Cookbook/Embedding Text and Expressions.py From 0b1dd4e9b6546cfe0c12ed27582b89df325bc343 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 19:15:08 +0800 Subject: [PATCH 0099/2002] Committed 2021/09/23 --- .../Annotating a point on a polar plot.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Annotating a point on a polar plot.py diff --git a/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py b/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py new file mode 100644 index 00000000..70f00d5a --- /dev/null +++ b/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py @@ -0,0 +1,22 @@ +import numpy as np +import matplotlib.pyplot as plt + +fig = plt.figure() +ax = fig.add_subplot(111, projection='polar') +r = np.arange(0, 1, 0.001) +theta = 2 * 2*np.pi * r + +ax.plot(theta, r, color=[0.9, 0.4, 0.7], lw=3) + +# Plot a point with diamond marker at the 600 point on the polar curve. +ind = 600 +pointr, pointtheta = r[ind], theta[ind] + +ax.plot([pointtheta], [pointr], 'D', markersize=10) + +# Define the annotation for the diamond point +ax.annotate('a polar annotation', xy=(pointtheta, pointr), xytext=(1.0, 0.75), + textcoords='figure fraction', arrowprops=dict(facecolor='red', shrink=0.05), + horizontalalignment='right', verticalalignment='bottom') + +plt.show() From bd740eb50edc788ed4ed50e6ada65eaac0d72909 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 19:29:17 +0800 Subject: [PATCH 0100/2002] Committed 2021/09/23 --- .../2019_std_death_rate4.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 The attainments and realizations of my dreams/2019_std_death_rate4.py diff --git a/The attainments and realizations of my dreams/2019_std_death_rate4.py b/The attainments and realizations of my dreams/2019_std_death_rate4.py new file mode 100644 index 00000000..4440a7a4 --- /dev/null +++ b/The attainments and realizations of my dreams/2019_std_death_rate4.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] +death_rate = [289.6, 358.6, 361.5, 378.8, 387.4, 393.7, 402.4, 402.5, 406.4, 408.1, + 412.4, 413.1, 427.6, 437.3, 438.5, 439.3, 455.7, 493.5, 506.8, 545.2] + +label = ["Taipei", "Hsinchu City", "New Taipei", "Taoyuan", "Taichung", "Hsinchu", + "Penghu", "Changhua", "Chiayi City", "Yilan", "Keelung", "Tainan", "Kaohsiung", + "Chiayi", "Miaoli", "Nantou", "Yunlin", "Hualien", "Pingtung", "Taitung"] + +fig, ax = plt.subplots(figsize=(10, 8)) # [1] +plt.xticks(region_num, labels=label, rotation=47) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, death_rate) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002*height, + '%d'%int(height), ha='center', va='bottom') + +plt.title("2019 Standardized Death Rate By Region In Taiwan") + +plt.ylabel("Death per 10 thousands people") +plt.xlabel("Reference: https://www.moi.gov.tw/cl.aspx?n=14661") + +plt.ylim(280, 560) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib \ No newline at end of file From 8910505393df19d39a160dfd65278bccf493db76 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 19:30:06 +0800 Subject: [PATCH 0101/2002] Committed 2021/09/23 --- .../2019_std_death_rate4.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/2019_std_death_rate4.py b/The attainments and realizations of my dreams/2019_std_death_rate4.py index 4440a7a4..6a215501 100644 --- a/The attainments and realizations of my dreams/2019_std_death_rate4.py +++ b/The attainments and realizations of my dreams/2019_std_death_rate4.py @@ -8,7 +8,7 @@ "Penghu", "Changhua", "Chiayi City", "Yilan", "Keelung", "Tainan", "Kaohsiung", "Chiayi", "Miaoli", "Nantou", "Yunlin", "Hualien", "Pingtung", "Taitung"] -fig, ax = plt.subplots(figsize=(10, 8)) # [1] +fig, ax = plt.subplots(figsize=(10, 8)) # [1] plt.xticks(region_num, labels=label, rotation=47) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) @@ -16,8 +16,8 @@ for rect in plot: height = rect.get_height() - ax.text(rect.get_x() + rect.get_width() / 2., 1.002*height, - '%d'%int(height), ha='center', va='bottom') + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') plt.title("2019 Standardized Death Rate By Region In Taiwan") @@ -29,4 +29,4 @@ plt.show() # Reference: -# 1. https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib \ No newline at end of file +# 1. https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib From cfd9d81f32f6c3fd7d53717fe821149396ff4f0d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 19:44:26 +0800 Subject: [PATCH 0102/2002] Committed 2021/09/23 --- Matplotlib 3 Cookbook/Using annotation.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Using annotation.py diff --git a/Matplotlib 3 Cookbook/Using annotation.py b/Matplotlib 3 Cookbook/Using annotation.py new file mode 100644 index 00000000..5852aa34 --- /dev/null +++ b/Matplotlib 3 Cookbook/Using annotation.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + +plt.plot(theta, np.sin(theta)) \ No newline at end of file From f3d3e91d2d65afe9f7060b675785c3054b359127 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 21:41:12 +0800 Subject: [PATCH 0103/2002] Committed 2021/09/23 --- .../Exception Handling.py | 42 +++++++++++++++++++ .../__init__.py | 0 2 files changed, 42 insertions(+) create mode 100644 Chapter5 - Some More Python Essentials/Exception Handling.py create mode 100644 Chapter5 - Some More Python Essentials/__init__.py diff --git a/Chapter5 - Some More Python Essentials/Exception Handling.py b/Chapter5 - Some More Python Essentials/Exception Handling.py new file mode 100644 index 00000000..9546ab5b --- /dev/null +++ b/Chapter5 - Some More Python Essentials/Exception Handling.py @@ -0,0 +1,42 @@ +import numpy as np + +def ask_user(a, b): + """get answer from user: a*b = ?""" + question = "{:d} * {:d} = ".format(a, b) + answer = int(input(question)) + + return answer + + +def points(a, b, answer_given): + """Check answer. Correct: 1 point, else 0""" + true_answer = a*b + + if answer_given == true_answer: + print("Correct!") + return 1 + else: + print("Sorry! Correct answer was: {:d}".format(true_answer)) + return 0 + + +print("\n*** Welcome to the times tables test! ***\n (To stop: ctrl-c)") + + +N = 10 +NN = N*N +score = 0 +index = list(range(0, NN, 1)) +np.random.shuffle(index) + +for i in range(0, NN, 1): + a = index[i] // N + 1 + b = index[i] % N + 1 + + try: + user_answer = ask_user(a, b) + except: + print("You must give a valid number!") + continue # Jump to the next loop iteration + + score = score diff --git a/Chapter5 - Some More Python Essentials/__init__.py b/Chapter5 - Some More Python Essentials/__init__.py new file mode 100644 index 00000000..e69de29b From 568ae27696673ba5cb21d8065a744e4cd5b89bd4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 21:43:39 +0800 Subject: [PATCH 0104/2002] Committed 2021/09/23 --- .../Exception Handling.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Chapter5 - Some More Python Essentials/Exception Handling.py b/Chapter5 - Some More Python Essentials/Exception Handling.py index 9546ab5b..5c66704d 100644 --- a/Chapter5 - Some More Python Essentials/Exception Handling.py +++ b/Chapter5 - Some More Python Essentials/Exception Handling.py @@ -39,4 +39,8 @@ def points(a, b, answer_given): print("You must give a valid number!") continue # Jump to the next loop iteration - score = score + score = score + points(a, b, user_answer) + print("Your score is now: {:d}".format(score)) + + +print("\nFinished! \nYour final score: {:d} (max: {:d})".format(score, N*N)) From 52907b014d9ee578656cacb1c232c81d675757f9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 22:03:32 +0800 Subject: [PATCH 0105/2002] Committed 2021/09/23 --- .../Exception Handling Refined Version.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Chapter5 - Some More Python Essentials/Exception Handling Refined Version.py diff --git a/Chapter5 - Some More Python Essentials/Exception Handling Refined Version.py b/Chapter5 - Some More Python Essentials/Exception Handling Refined Version.py new file mode 100644 index 00000000..71a13a6b --- /dev/null +++ b/Chapter5 - Some More Python Essentials/Exception Handling Refined Version.py @@ -0,0 +1,50 @@ +import numpy as np + +def ask_user(a, b): + """Get answer from user: a*b = ?""" + + question = "{:d} * {:d} = ".format(a, b) + answer = int(input(question)) + return answer + + +def points(a, b, answer_given): + """Check answer. Correct answer gives 1 point, else zero""" + true_answer = a * b + + if answer_given == true_answer: + print("Correct!") + return 1 + else: + print("Sorry! Correct answer was: {:d}".format(true_answer)) + return 0 + + +print("\n*** Welcome to the times tables test! ***\n (To stop: ctrl-c)") + +N = 10 +NN = N*N +score = 0 + +index = list(range(0, NN, 1)) + +np.random.shuffle(index) + +for i in range(0, NN, 1): + a = index[i] // N + 1 + b = index[i] % N + 1 + + try: + user_answer = ask_user(a, b) + except KeyboardInterrupt: + print("\n Ok, you want to stop!") + break + except ValueError: + print("You must give a valid number!") + continue # Jump to next loop iteration + + score = score + points(a, b, user_answer) + print("Your score is now: {:d}".format(score)) + +print("\nFinished! \nYour final score:{:d} (max: {:d})".format(score, N*N)) + From 15c391e440bb2c8d0689dbf02707fef299514870 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 22:43:49 +0800 Subject: [PATCH 0106/2002] Committed 2021/09/23 --- .../Chapter9 - Plotting and Visualization/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/__init__.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/__init__.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/__init__.py new file mode 100644 index 00000000..e69de29b From d5a67fa6e7e107df4da7744ce6f76e9e8c617fd9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 23:12:53 +0800 Subject: [PATCH 0107/2002] Committed 2021/09/23 --- .../Chapter5/Script1.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Python Machine Learning For Beginners/Chapter5/Script1.py diff --git a/Python Machine Learning For Beginners/Chapter5/Script1.py b/Python Machine Learning For Beginners/Chapter5/Script1.py new file mode 100644 index 00000000..ab1048fa --- /dev/null +++ b/Python Machine Learning For Beginners/Chapter5/Script1.py @@ -0,0 +1,9 @@ +import matplotlib.pyplot as plt +import numpy as np +import math + +x_vals = np.linspace(0, 20, 20) +y_vals = [math.sqrt(i) for i in x_vals] + +plt.plot(x_vals, y_vals) +plt.show() From b68a8f612eb64f2a8a5e1b60b4c03f4217f7305c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 23:17:50 +0800 Subject: [PATCH 0108/2002] Committed 2021/09/23 --- .../Chapter5/Script2.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Python Machine Learning For Beginners/Chapter5/Script2.py diff --git a/Python Machine Learning For Beginners/Chapter5/Script2.py b/Python Machine Learning For Beginners/Chapter5/Script2.py new file mode 100644 index 00000000..95768594 --- /dev/null +++ b/Python Machine Learning For Beginners/Chapter5/Script2.py @@ -0,0 +1,9 @@ +import matplotlib.pyplot as plt +import numpy as np +import math + +x_vals = np.linspace(0, 20, 20) +y_vals = [math.sqrt(i) for i in x_vals] + + + From 7f9a9a47b313346a0da9caca9adb74042dbace57 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 23 Sep 2021 23:19:49 +0800 Subject: [PATCH 0109/2002] Committed 2021/09/23 --- Python Machine Learning For Beginners/Chapter5/Script2.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Python Machine Learning For Beginners/Chapter5/Script2.py b/Python Machine Learning For Beginners/Chapter5/Script2.py index 95768594..d7680b31 100644 --- a/Python Machine Learning For Beginners/Chapter5/Script2.py +++ b/Python Machine Learning For Beginners/Chapter5/Script2.py @@ -5,5 +5,8 @@ x_vals = np.linspace(0, 20, 20) y_vals = [math.sqrt(i) for i in x_vals] +fig = plt.figure() +ax = plt.axes() +ax.plot(x_vals, y_vals) - +plt.show() From 7c261cd4a55618d66f33ea7efa1a246bddf4223d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 00:13:10 +0800 Subject: [PATCH 0110/2002] Committed 2021/09/23 --- .../Chapter5/Script3.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Python Machine Learning For Beginners/Chapter5/Script3.py diff --git a/Python Machine Learning For Beginners/Chapter5/Script3.py b/Python Machine Learning For Beginners/Chapter5/Script3.py new file mode 100644 index 00000000..ca7f0999 --- /dev/null +++ b/Python Machine Learning For Beginners/Chapter5/Script3.py @@ -0,0 +1,13 @@ +import matplotlib.pyplot as plt +import numpy as np +import math + +# Set the plot size 8 inches wide and 6 inches tall. +plt.rcParams["figure.figsize"] = [8, 6] + +x_vals = np.linspace(0, 20, 20) +y_vals = [math.sqrt(i) for i in x_vals] + +plt.plot(x_vals, y_vals) + +plt.show() From cc14a5a5ce2fb8f8c7f17d3f986ec6cc2f099a0d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 02:31:01 +0800 Subject: [PATCH 0111/2002] Committed 2021/09/23 --- .../Monthly_total_job_openings_by_region/September2021.py | 0 .../Monthly_total_job_openings_by_region/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/__init__.py new file mode 100644 index 00000000..e69de29b From de7a8b0442aadade00743849ae1b59b46a0b4d0a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 13:11:44 +0800 Subject: [PATCH 0112/2002] Committed 2021/09/24 --- .../Color, Markers, and Line Styles.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Color, Markers, and Line Styles.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Color, Markers, and Line Styles.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Color, Markers, and Line Styles.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Color, Markers, and Line Styles.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 2a0f0c84823479508c6c455f7192032effd1ee18 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 13:16:40 +0800 Subject: [PATCH 0113/2002] Committed 2021/09/24 --- .../Color, Markers, and Line Styles.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Color, Markers, and Line Styles.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Color, Markers, and Line Styles.py index 5bb80735..7440bbd3 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Color, Markers, and Line Styles.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Color, Markers, and Line Styles.py @@ -1,4 +1,7 @@ import matplotlib.pyplot as plt import numpy as np +from numpy.random import randn +plt.plot(randn(30).cumsum(), linestyle='--', color='k', marker='o') +plt.show() From aec42a05d23669594eba4e9adab615d06675a39f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 13:18:51 +0800 Subject: [PATCH 0114/2002] Committed 2021/09/24 --- .../Chapter9 - Plotting and Visualization/Steps-post.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Steps-post.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Steps-post.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Steps-post.py new file mode 100644 index 00000000..0f091f45 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Steps-post.py @@ -0,0 +1,6 @@ +import matplotlib.pyplot as plt +import numpy as np +from numpy.random import randn + + + From a4380ca05b2453c7f2113470d06f7cbe33426bbe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 13:36:37 +0800 Subject: [PATCH 0115/2002] Committed 2021/09/24 --- .../Chapter9 - Plotting and Visualization/Steps-post.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Steps-post.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Steps-post.py index 0f091f45..1b5696fd 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Steps-post.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Steps-post.py @@ -2,5 +2,12 @@ import numpy as np from numpy.random import randn +data = np.random.randn(30).cumsum() +plt.plot(data, color='k', linestyle='--', label='default') +plt.plot(data, color='k', linestyle='--', drawstyle='steps-post', label='steps-post') + +plt.legend(loc='best') + +plt.show() From dc3c019f29bcf6fbd03ed72f36a8235b241eabf2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 14:01:03 +0800 Subject: [PATCH 0116/2002] Committed 2021/09/24 --- .../Setting the title, axis labels, ticks and ticklabels.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 88ed31615be91cda30caf4161f8c5e3fd82afc63 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 14:10:30 +0800 Subject: [PATCH 0117/2002] Committed 2021/09/24 --- .../Setting the title, axis labels, ticks and ticklabels.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py index 5bb80735..2a803c8d 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py @@ -1,4 +1,7 @@ import matplotlib.pyplot as plt import numpy as np +fig = plt.figure() + +ax = fig.add_subplot(1, 1, 1) From fdf34ce1c6589bc0b7482373022c7447d31044ee Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 15:16:36 +0800 Subject: [PATCH 0118/2002] Committed 2021/09/24 --- .../Setting the title, axis labels, ticks and ticklabels.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py index 2a803c8d..70b12e93 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Setting the title, axis labels, ticks and ticklabels.py @@ -5,3 +5,4 @@ ax = fig.add_subplot(1, 1, 1) +ax.plot(np.random.randn(1000).cumsum()) From 7a6b3f2d733e0e4ef86d2221cd5490577e302188 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 15:17:36 +0800 Subject: [PATCH 0119/2002] Committed 2021/09/24 --- .../Chapter9 - Plotting and Visualization/Primer.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Primer.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Primer.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Primer.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Primer.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 42ed6bfb0f0389ccfaf2d50a32ae88f38da31d92 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 15:20:41 +0800 Subject: [PATCH 0120/2002] Committed 2021/09/24 --- .../Figures and Subplots.py | 0 .../Chapter9 - Plotting and Visualization/Primer.py | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots.py new file mode 100644 index 00000000..e69de29b diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Primer.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Primer.py index 5bb80735..a6f9a366 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Primer.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Primer.py @@ -1,4 +1,9 @@ import matplotlib.pyplot as plt import numpy as np +data = np.arange(10) +print(data) +plt.plot(data) + +plt.show() From 00e4e40a76dc5be8cef495437977f68be3273ca2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 15:33:52 +0800 Subject: [PATCH 0121/2002] Committed 2021/09/24 --- .../Figures and Subplots.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots.py index e69de29b..ea425404 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots.py @@ -0,0 +1,11 @@ +import matplotlib.pyplot as plt +import numpy as np + +fig = plt.figure() + +ax1 = fig.add_subplot(2, 2, 1) +ax2 = fig.add_subplot(2, 2, 2) +ax3 = fig.add_subplot(2, 2, 3) + +plt.show() + From a0793e916b44ee3d1aba2ddeafd48bc614f3dc40 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 15:53:04 +0800 Subject: [PATCH 0122/2002] Committed 2021/09/24 --- .../Figures and Subplots2.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots2.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots2.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots2.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots2.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 836e799346df69007809cddb53d66491535c5c73 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 15:59:58 +0800 Subject: [PATCH 0123/2002] Committed 2021/09/24 --- .../Figures and Subplots2.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots2.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots2.py index 5bb80735..be3a6cc7 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots2.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots2.py @@ -1,4 +1,10 @@ import matplotlib.pyplot as plt import numpy as np +figure = plt.figure() +axes1 = figure.add_subplot(2, 2, 1) +axes2 = figure.add_subplot(2, 2, 2) +axes3 = figure.add_subplot(2, 2, 3) + +plt.show() From e3dde5f08e52f88838885579636d8dbeef27bd64 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:01:02 +0800 Subject: [PATCH 0124/2002] Committed 2021/09/24 --- .../Figures and Subplots3.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From bfa245cd563a64595d79f6dcc5dc42a3e1fd4d9f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:18:25 +0800 Subject: [PATCH 0125/2002] Committed 2021/09/24 --- .../Figures and Subplots3.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py index 5bb80735..be3a6cc7 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py @@ -1,4 +1,10 @@ import matplotlib.pyplot as plt import numpy as np +figure = plt.figure() +axes1 = figure.add_subplot(2, 2, 1) +axes2 = figure.add_subplot(2, 2, 2) +axes3 = figure.add_subplot(2, 2, 3) + +plt.show() From b9d20ec98e50ab8afd960e1a91c46e567b6b5ae6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:26:17 +0800 Subject: [PATCH 0126/2002] Committed 2021/09/24 --- .../Figures and Subplots3.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py index be3a6cc7..e7d10234 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots3.py @@ -7,4 +7,6 @@ axes2 = figure.add_subplot(2, 2, 2) axes3 = figure.add_subplot(2, 2, 3) +plt.plot(np.random.randn(50).cumsum(), 'k--') + plt.show() From 2efa6325bdab290cf661da877997f19c37b2a7d0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:33:36 +0800 Subject: [PATCH 0127/2002] Committed 2021/09/24 --- .../Figures and Subplots4.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py new file mode 100644 index 00000000..7fd5d50c --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py @@ -0,0 +1,8 @@ +import matplotlib.pyplot as plt + +# When you directly issue a plotting command like the following: +plt.plot([1.5, 3.5, -2, 1.6]) +# matplotlib draws on the last figure and subplot used (creating one if necessary), +# thus hiding the figure and subplot creation. + +plt.show() From c906a473dbce516891dcbd701c040d2bff211a66 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:34:45 +0800 Subject: [PATCH 0128/2002] Committed 2021/09/24 --- .../Figures and Subplots4.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py index 7fd5d50c..6cf302b8 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py @@ -2,7 +2,7 @@ # When you directly issue a plotting command like the following: plt.plot([1.5, 3.5, -2, 1.6]) -# matplotlib draws on the last figure and subplot used (creating one if necessary), -# thus hiding the figure and subplot creation. +# matplotlib draws on the last figure and subplot used (automatically creating one if necessary), +# thus hiding the figure and subplot creation by you. plt.show() From 7ffbcb34c35bfa855fbbdaa4e71c85d5338d8794 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:38:49 +0800 Subject: [PATCH 0129/2002] Committed 2021/09/24 --- .../Figures and Subplots4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py index 6cf302b8..c964af58 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots4.py @@ -3,6 +3,6 @@ # When you directly issue a plotting command like the following: plt.plot([1.5, 3.5, -2, 1.6]) # matplotlib draws on the last figure and subplot used (automatically creating one if necessary), -# thus hiding the figure and subplot creation by you. +# thus skipping the need for you to create the figure and subplot. plt.show() From 5f88b604e3666d9051b4464cfddda31fdb06c7bb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:41:27 +0800 Subject: [PATCH 0130/2002] Committed 2021/09/24 --- .../Figures and Subplots5.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 92bea49f34c7bb93bef966779f4c08e8f785235c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:47:58 +0800 Subject: [PATCH 0131/2002] Committed 2021/09/24 --- .../Figures and Subplots5.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py index 5bb80735..0bbc7cd3 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py @@ -1,4 +1,8 @@ import matplotlib.pyplot as plt import numpy as np +figure = plt.figure() +axes1 = figure.add_subplot(2, 2, 1) +axes2 = figure.add_subplot(2, 2, 2) +axes3 = figure.add_subplot(2, 2, 3) From eced8c298fafce53af8cd2542b28e7c807e916d0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:59:17 +0800 Subject: [PATCH 0132/2002] Committed 2021/09/24 --- .../Figures and Subplots5.py | 6 ++++++ .../Figures and Subplots6.py | 13 +++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots6.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py index 0bbc7cd3..40e88c52 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots5.py @@ -6,3 +6,9 @@ axes1 = figure.add_subplot(2, 2, 1) axes2 = figure.add_subplot(2, 2, 2) axes3 = figure.add_subplot(2, 2, 3) + +axes1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3) +axes2.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30)) +axes3.plot([1.5, 3.5, -2, 1.6]) + +plt.show() diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots6.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots6.py new file mode 100644 index 00000000..e1ec875a --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots6.py @@ -0,0 +1,13 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure = plt.figure() +axes1 = figure.add_subplot(2, 2, 1) +axes2 = figure.add_subplot(2, 2, 2) +axes3 = figure.add_subplot(2, 2, 3) + +axes3.plot(np.random.randn(50).cumsum(), linestyle='--', color='k') +axes2.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30)) +axes1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3) + +plt.show() From 8a53a4c96426aa325b712ee326173b4ae9080f98 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 17:10:13 +0800 Subject: [PATCH 0133/2002] Committed 2021/09/24 --- .../Figures and Subplots7.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots7.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots7.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots7.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots7.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 0e63348a9fc9f27ab381c0f2e2791b29cfeca325 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 17:33:55 +0800 Subject: [PATCH 0134/2002] Committed 2021/09/24 --- .../Figures and Subplots7.py | 7 +++++++ .../Figures and Subplots8.py | 11 +++++++++++ .../Figures and Subplots9.py | 11 +++++++++++ 3 files changed, 29 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots8.py create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots9.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots7.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots7.py index 5bb80735..4f1ca357 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots7.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots7.py @@ -1,4 +1,11 @@ import matplotlib.pyplot as plt import numpy as np +figure, axes = plt.subplots(nrows=2, ncols=3, figsize=(8, 6)) +axes[1, 1].hist(np.random.randn(100), bins=20, color='k', alpha=0.3) +axes[1, 2].scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30)) +axes[1, 3].plot(np.random.randn(50).cumsum(), linestyle='--', color='k') +axes[2, 1].plot([1.5, 3.5, -2, 1.6]) + +plt.show() diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots8.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots8.py new file mode 100644 index 00000000..ad0eb5aa --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots8.py @@ -0,0 +1,11 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure, axes = plt.subplots(nrows=2, ncols=3, figsize=(8, 6)) + +axes[1, 0].hist(np.random.randn(100), bins=20, color='k', alpha=0.3) +axes[1, 1].scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30)) +axes[1, 2].plot(np.random.randn(50).cumsum(), linestyle='--', color='k') +axes[2, 1].plot([1.5, 3.5, -2, 1.6]) + +plt.show() diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots9.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots9.py new file mode 100644 index 00000000..830d4246 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots9.py @@ -0,0 +1,11 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure, axes = plt.subplots(nrows=2, ncols=3, figsize=(8, 6)) + +axes[0, 0].hist(np.random.randn(100), bins=20, color='k', alpha=0.3) +axes[0, 1].scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30)) +axes[0, 2].plot(np.random.randn(50).cumsum(), linestyle='--', color='k') +axes[1, 0].plot([1.5, 3.5, -2, 1.6]) + +plt.show() From 3bd52c48d368aa976a368b57364d534f9ce6bff0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 17:36:05 +0800 Subject: [PATCH 0135/2002] Committed 2021/09/24 --- .../Figures and Subplots10.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots10.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots10.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots10.py new file mode 100644 index 00000000..8b2a7de5 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots10.py @@ -0,0 +1,11 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure, axes = plt.subplots(nrows=2, ncols=3, figsize=(10, 6)) + +axes[0, 0].hist(np.random.randn(100), bins=20, color='k', alpha=0.3) +axes[0, 1].scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30)) +axes[0, 2].plot(np.random.randn(50).cumsum(), linestyle='--', color='k') +axes[1, 0].plot([1.5, 3.5, -2, 1.6]) + +plt.show() From b51a4a9243d6a742243358e52f5ff1a1bb913f32 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 17:46:00 +0800 Subject: [PATCH 0136/2002] Committed 2021/09/24 --- .../Figures and Subplots11.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots11.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots11.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots11.py new file mode 100644 index 00000000..6e29fa59 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots11.py @@ -0,0 +1,11 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure, axes = plt.subplots(nrows=2, ncols=3, figsize=(10, 6), sharex=True, sharey=True) + +axes[0, 0].hist(np.random.randn(100), bins=20, color='k', alpha=0.3) +axes[0, 1].scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30)) +axes[0, 2].plot(np.random.randn(50).cumsum(), linestyle='--', color='k') +axes[1, 0].plot([1.5, 3.5, -2, 1.6]) + +plt.show() From f3432c9395ff4a06e112bcf9759b480ecb69c963 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 17:53:19 +0800 Subject: [PATCH 0137/2002] Committed 2021/09/24 --- .../Figures and Subplots12.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py new file mode 100644 index 00000000..1c68b85d --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py @@ -0,0 +1,2 @@ +import matplotlib.pyplot as plt + From 9e6dc2eff3b7c0082e816bb1e37b7217a95663ed Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 18:16:28 +0800 Subject: [PATCH 0138/2002] Committed 2021/09/24 --- .../Figures and Subplots12.py | 10 ++++++++++ .../Figures and Subplots13.py | 12 ++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots13.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py index 1c68b85d..e3325f8e 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py @@ -1,2 +1,12 @@ import matplotlib.pyplot as plt +import numpy as np +fig, axes = plt.subplots(nrows=2, ncols=1, sharex='True', sharey='True') + +for i in range(2): + for j in range(2): + axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5) + +plt.subplots_adjust(wspace=0, hspace=0) + +plt.show() diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots13.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots13.py new file mode 100644 index 00000000..b364d0a5 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots13.py @@ -0,0 +1,12 @@ +import matplotlib.pyplot as plt +import numpy as np + +fig, axes = plt.subplots(nrows=2, ncols=1, sharex=True, sharey=True) + +for i in range(2): + for j in range(2): + axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5) + +plt.subplots_adjust(wspace=0, hspace=0) + +plt.show() From ca3a560788fa20dad4d33d0cdfb7c62d0e631718 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 18:22:04 +0800 Subject: [PATCH 0139/2002] Committed 2021/09/24 --- .../Figures and Subplots12.py | 2 +- .../Figures and Subplots13.py | 2 +- .../Figures and Subplots14.py | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots14.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py index e3325f8e..280b0c96 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots12.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt import numpy as np -fig, axes = plt.subplots(nrows=2, ncols=1, sharex='True', sharey='True') +fig, axes = plt.subplots(nrows=2, ncols=2, sharex='True', sharey='True') for i in range(2): for j in range(2): diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots13.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots13.py index b364d0a5..4267ff5a 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots13.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots13.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt import numpy as np -fig, axes = plt.subplots(nrows=2, ncols=1, sharex=True, sharey=True) +fig, axes = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True) for i in range(2): for j in range(2): diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots14.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots14.py new file mode 100644 index 00000000..4267ff5a --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots14.py @@ -0,0 +1,12 @@ +import matplotlib.pyplot as plt +import numpy as np + +fig, axes = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True) + +for i in range(2): + for j in range(2): + axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5) + +plt.subplots_adjust(wspace=0, hspace=0) + +plt.show() From e0ebf997ad2b058addf4ee1cc6f928f1092e887c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 18:25:20 +0800 Subject: [PATCH 0140/2002] Committed 2021/09/24 --- .../Figures and Subplots14.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots14.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots14.py index 4267ff5a..9aa1019a 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots14.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Figures and Subplots14.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt import numpy as np -fig, axes = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True) +fig, axes = plt.subplots(nrows=2, ncols=2, sharex='row', sharey='col') for i in range(2): for j in range(2): From 0cffd2111cc65c308223ce0725e840f8b959f944 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 22:51:15 +0800 Subject: [PATCH 0141/2002] Committed 2021/09/24 --- .../Tick_and_tick_label.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 6b9b4e1dfbcc25e9c4876d2f93b50f93eddf9a7c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Sep 2021 23:19:44 +0800 Subject: [PATCH 0142/2002] Committed 2021/09/24 --- .../Tick_and_tick_label.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py index 5bb80735..d2a5c915 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py @@ -1,4 +1,8 @@ import matplotlib.pyplot as plt import numpy as np +figure, axes = plt.subplots(nrows=1, ncols=1, figsize=(8, 6)) +axes[1, 1].plot(np.random.randn(1000).cumsum()) + +plt.show() From 4b7df12d48c35352f7a11dcf02b650cad63ebd79 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 00:36:06 +0800 Subject: [PATCH 0143/2002] Committed 2021/09/24 --- .../Tick_and_tick_label.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py index d2a5c915..266cea75 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label.py @@ -3,6 +3,6 @@ figure, axes = plt.subplots(nrows=1, ncols=1, figsize=(8, 6)) -axes[1, 1].plot(np.random.randn(1000).cumsum()) +axes[0, 0].plot(np.random.randn(1000).cumsum()) plt.show() From 5535336dd7942cba2da08645ed242c7a079d22e4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 01:22:51 +0800 Subject: [PATCH 0144/2002] Committed 2021/09/24 --- .../Tick_and_tick_label_.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_.py new file mode 100644 index 00000000..c93aac46 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_.py @@ -0,0 +1,10 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure = plt.figure() + +ax = figure.add_subplot(1, 1, 1) + +ax.plot(np.random.randn(1000).cumsum()) + +plt.show() From 1ad18f92c45bc452f3642561ea079f4c362fef7e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 11:06:33 +0800 Subject: [PATCH 0145/2002] Committed 2021/09/25 --- .../Tick_and_tick_label_2.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_2.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_2.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_2.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_2.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 4e26b618436fec5e4f933486063d789466f2663a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 11:10:38 +0800 Subject: [PATCH 0146/2002] Committed 2021/09/25 --- .../Tick_and_tick_label_2.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_2.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_2.py index 5bb80735..672e0b34 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_2.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_2.py @@ -1,4 +1,10 @@ import matplotlib.pyplot as plt import numpy as np +figure = plt.figure() +axes1 = figure.add_subplot(1, 1, 1) + +axes1.plot(np.random.randn(1000).cumsum()) + +plt.show() From 3aeaecefb2d2b7e3845c6902be59e7abdbf2d7af Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 11:22:23 +0800 Subject: [PATCH 0147/2002] Committed 2021/09/25 --- .../Tick_and_tick_label2.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From c43208e5bf75ac8916bec24180c240a095a0179c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 11:46:32 +0800 Subject: [PATCH 0148/2002] Committed 2021/09/25 --- .../Tick_and_tick_label2.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py index 5bb80735..1d604328 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py @@ -1,4 +1,10 @@ import matplotlib.pyplot as plt import numpy as np +# There is no need to follow figure, axes = plt.subplots() if +plt.rcParams["figure.figsize"] = [8, 6] + +plt.plot(np.random.randn(1000).cumsum()) + +plt.show() From ca898d9976402dab55415dce6599d761e43f6c78 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 11:54:57 +0800 Subject: [PATCH 0149/2002] Committed 2021/09/25 --- .../Tick_and_tick_label2.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py index 1d604328..0f4c1cdc 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label2.py @@ -1,7 +1,8 @@ import matplotlib.pyplot as plt import numpy as np -# There is no need to follow figure, axes = plt.subplots() if +# There is no need to follow figure, axes = plt.subplots() +# if you are not planning to plot multiple subplots in the same figure. plt.rcParams["figure.figsize"] = [8, 6] From 60810bb0a9989f1880bf3e267b38b6264ece0e48 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 12:03:11 +0800 Subject: [PATCH 0150/2002] Committed 2021/09/25 --- .../Tick_and_tick_label_3.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_3.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_3.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_3.py new file mode 100644 index 00000000..1f667af2 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_3.py @@ -0,0 +1,6 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure = plt.figure() + + From caff6f33b3127427417c476dd24a68502ede11cc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 12:10:32 +0800 Subject: [PATCH 0151/2002] Committed 2021/09/25 --- .../Tick_and_tick_label_3.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_3.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_3.py index 1f667af2..3a01fffe 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_3.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_3.py @@ -1,6 +1,13 @@ import matplotlib.pyplot as plt import numpy as np +# Call the figure() method via the plt module, which draws an empty figure. figure = plt.figure() +# Next, call the axes() method, which returns an axes object. +axes = plt.axes() +# You can then call the plot() method from the axes object to create a plot. +axes.plot(np.random.randn(1000).cumsum()) + +plt.show() From d5cba8f5ae0fbfe69341f16af3ec16a1cb54cb6e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 12:14:00 +0800 Subject: [PATCH 0152/2002] Committed 2021/09/25 --- .../Tick_and_tick_label_4.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_4.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_4.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_4.py new file mode 100644 index 00000000..be550ce1 --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_4.py @@ -0,0 +1,9 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure = plt.figure(figsize=(8, 6)) +axes = plt.axes() + +axes.plot(np.random.randn(1000).cumsum()) + +plt.show() From a936f2f7c3943ea387bbf06529db890158e020cc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 12:45:02 +0800 Subject: [PATCH 0153/2002] Committed 2021/09/25 --- .../Tick_and_tick_label_5.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_5.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_5.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_5.py new file mode 100644 index 00000000..a1f5030e --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_5.py @@ -0,0 +1,6 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure = plt.figure(figsize=(8, 6)) +axes = plt.axes() +axes.plot(np.random.randn(1000).cumsum()) From 227ccfa1c715422d6b0ded6ebcfc478a821c8579 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 12:54:32 +0800 Subject: [PATCH 0154/2002] Committed 2021/09/25 --- .../Tick_and_tick_label_5.py | 8 ++++++++ .../Tick_and_tick_label_6.py | 6 ++++++ 2 files changed, 14 insertions(+) create mode 100644 Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_5.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_5.py index a1f5030e..6a10c6d0 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_5.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_5.py @@ -4,3 +4,11 @@ figure = plt.figure(figsize=(8, 6)) axes = plt.axes() axes.plot(np.random.randn(1000).cumsum()) + +ticks = axes.set_xticks([0, 250, 500, 750, 1000]) +labels = axes.set_xticklabels(['one', 'two', 'three', 'four', 'five'], rotation=30, fontsize='small') + +axes.set_title('My first matplotlib plot') +axes.set_xlabel('Stages') + +plt.show() diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py new file mode 100644 index 00000000..60e7f62b --- /dev/null +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py @@ -0,0 +1,6 @@ +import matplotlib.pyplot as plt +import numpy as np + +figure = plt.figure(num=1, figsize=(8, 6),) +axes = plt.axes() +axes.plot(np.random.randn(1000).cumsum()) From c6b8fe6d120296e5c1435ae4189cc44f9a716692 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 12:56:52 +0800 Subject: [PATCH 0155/2002] Committed 2021/09/25 --- .../Tick_and_tick_label_6.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py index 60e7f62b..dcd814e9 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py @@ -4,3 +4,9 @@ figure = plt.figure(num=1, figsize=(8, 6),) axes = plt.axes() axes.plot(np.random.randn(1000).cumsum()) + +axes.set_xticks([0, 250, 500, 750, 1000]) +axes.set_xticklabels(['one', 'two', 'three', 'four', 'five'], rotation=30, fontsize='small') + + +plt.show() From 23cf65903ee4c019f970ded065e02d03dc45dedd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:00:34 +0800 Subject: [PATCH 0156/2002] Committed 2021/09/25 --- .../Tick_and_tick_label_6.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py index dcd814e9..08763f9e 100644 --- a/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py +++ b/Python for Data Analysis/Chapter9 - Plotting and Visualization/Tick_and_tick_label_6.py @@ -8,5 +8,7 @@ axes.set_xticks([0, 250, 500, 750, 1000]) axes.set_xticklabels(['one', 'two', 'three', 'four', 'five'], rotation=30, fontsize='small') +axes.set_yticks([0, 10, 20, 30, 40, 50, 60]) +axes.set_yticklabels(['0.0', '10.0', '20.0', '30.0', '40.0', '50.0', '60.0']) plt.show() From 8fa80437d513a1d54e0386fd7c4083521194c9b1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:23:12 +0800 Subject: [PATCH 0157/2002] Committed 2021/09/25 --- .../Pyplot tutorial/Subplot.py | 16 ++++++++++++++++ .../Pyplot tutorial/__init__.py | 0 Matplotlib Official Primer/__init__.py | 0 3 files changed, 16 insertions(+) create mode 100644 Matplotlib Official Primer/Pyplot tutorial/Subplot.py create mode 100644 Matplotlib Official Primer/Pyplot tutorial/__init__.py create mode 100644 Matplotlib Official Primer/__init__.py diff --git a/Matplotlib Official Primer/Pyplot tutorial/Subplot.py b/Matplotlib Official Primer/Pyplot tutorial/Subplot.py new file mode 100644 index 00000000..495a44ab --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/Subplot.py @@ -0,0 +1,16 @@ +import matplotlib.pyplot as plt + +names = ['group_a', 'group_b', 'group_c'] +values = [1, 10, 100] + +plt.figure(figsize=(9, 3)) + +plt.subplot(131) +plt.bar(names, values) +plt.subplot(132) +plt.scatter(names, values) +plt.subplot(133) +plt.plot(names, values) +plt.suptitle('Categorical Plotting') + +plt.show() diff --git a/Matplotlib Official Primer/Pyplot tutorial/__init__.py b/Matplotlib Official Primer/Pyplot tutorial/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Matplotlib Official Primer/__init__.py b/Matplotlib Official Primer/__init__.py new file mode 100644 index 00000000..e69de29b From 8f15ea7026c860c9f7b484db2c240b9ad618758c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:27:36 +0800 Subject: [PATCH 0158/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Pyplot tutorial/Subplot.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Matplotlib Official Primer/Pyplot tutorial/Subplot.py b/Matplotlib Official Primer/Pyplot tutorial/Subplot.py index 495a44ab..0acdb303 100644 --- a/Matplotlib Official Primer/Pyplot tutorial/Subplot.py +++ b/Matplotlib Official Primer/Pyplot tutorial/Subplot.py @@ -7,10 +7,15 @@ plt.subplot(131) plt.bar(names, values) + plt.subplot(132) plt.scatter(names, values) + plt.subplot(133) plt.plot(names, values) + plt.suptitle('Categorical Plotting') plt.show() + +# Source: https://matplotlib.org/stable/tutorials/introductory/pyplot.html#plotting-with-categorical-variables From c30f4755675c618fc3d78bdeeca52a14a2eccf98 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:28:53 +0800 Subject: [PATCH 0159/2002] Committed 2021/09/25 --- .../Pyplot tutorial/Subplot_2.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Matplotlib Official Primer/Pyplot tutorial/Subplot_2.py diff --git a/Matplotlib Official Primer/Pyplot tutorial/Subplot_2.py b/Matplotlib Official Primer/Pyplot tutorial/Subplot_2.py new file mode 100644 index 00000000..f564543a --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/Subplot_2.py @@ -0,0 +1,18 @@ +import matplotlib.pyplot as plt +import numpy as np + +def f(t): + return np.exp(-t) * np.cos(2*np.pi*t) + +t1 = np.arange(0.0, 5.0, 0.1) +t2 = np.arange(0.0, 5.0, 0.02) + +plt.figure() +plt.subplot(211) + +plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k') + +plt.subplot(212) +plt.plot(t2, np.cos(2*np.pi*t2), 'r--') + +plt.show() From 903e76a3fa16803590f4f9f834dc84d0db8cf7cb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:30:14 +0800 Subject: [PATCH 0160/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Pyplot tutorial/Subplot_2.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Matplotlib Official Primer/Pyplot tutorial/Subplot_2.py b/Matplotlib Official Primer/Pyplot tutorial/Subplot_2.py index f564543a..2bc3253c 100644 --- a/Matplotlib Official Primer/Pyplot tutorial/Subplot_2.py +++ b/Matplotlib Official Primer/Pyplot tutorial/Subplot_2.py @@ -16,3 +16,5 @@ def f(t): plt.plot(t2, np.cos(2*np.pi*t2), 'r--') plt.show() + +# Source: https://matplotlib.org/stable/tutorials/introductory/pyplot.html#working-with-multiple-figures-and-axes From 90d3cc2c7ecbc7121737209458ef4ace534c7593 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:37:23 +0800 Subject: [PATCH 0161/2002] Committed 2021/09/25 --- .../Pyplot tutorial/Subplot_3.py | 23 +++++++++++++++++++ .../Pyplot tutorial/Working with texts.py | 17 ++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Matplotlib Official Primer/Pyplot tutorial/Subplot_3.py create mode 100644 Matplotlib Official Primer/Pyplot tutorial/Working with texts.py diff --git a/Matplotlib Official Primer/Pyplot tutorial/Subplot_3.py b/Matplotlib Official Primer/Pyplot tutorial/Subplot_3.py new file mode 100644 index 00000000..7a1617a1 --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/Subplot_3.py @@ -0,0 +1,23 @@ +import matplotlib.pyplot as plt +import numpy as np + +plt.figure(1) # the first figure +plt.subplot(211) # the first subplot in the first figure + +plt.plot([1, 2, 3]) + +plt.subplot(212) # the second subplot in the first figure + +plt.plot([4, 5, 6]) + + +plt.figure(2) # a second figure +plt.plot([4, 5, 6]) # creates a subplot() by default + +plt.figure(1) # figure 1 current; subplot(212) still current +plt.subplot(211) # make subplot(211) in figure1 current +plt.title('Easy as 1, 2, 3') # subplot 211 title + +plt.show() + +# Source: https://matplotlib.org/stable/tutorials/introductory/pyplot.html#working-with-multiple-figures-and-axes diff --git a/Matplotlib Official Primer/Pyplot tutorial/Working with texts.py b/Matplotlib Official Primer/Pyplot tutorial/Working with texts.py new file mode 100644 index 00000000..d50ce993 --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/Working with texts.py @@ -0,0 +1,17 @@ +import matplotlib.pyplot as plt +import numpy as np + +mu, sigma = 100, 15 +x = mu + sigma * np.random.randn(10000) + +# the histogram of the data +n, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75) + + +plt.xlabel('Smarts') +plt.ylabel('Probability') +plt.title('Histogram of IQ') +plt.text(60, .025, r'$\mu=100,\ \sigma=15$') +plt.axis([40, 160, 0, 0.03]) +plt.grid(True) +plt.show() From a75fdf0bca9065e1907255713822b0bd4134f908 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:38:42 +0800 Subject: [PATCH 0162/2002] Committed 2021/09/25 --- .../Pyplot tutorial/Working with texts.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Matplotlib Official Primer/Pyplot tutorial/Working with texts.py b/Matplotlib Official Primer/Pyplot tutorial/Working with texts.py index d50ce993..bf6d0416 100644 --- a/Matplotlib Official Primer/Pyplot tutorial/Working with texts.py +++ b/Matplotlib Official Primer/Pyplot tutorial/Working with texts.py @@ -15,3 +15,5 @@ plt.axis([40, 160, 0, 0.03]) plt.grid(True) plt.show() + +# Source: https://matplotlib.org/stable/tutorials/introductory/pyplot.html#working-with-text From 54c67a7e135491e6d76b3466da744123c1a82e43 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:40:57 +0800 Subject: [PATCH 0163/2002] Committed 2021/09/25 --- .../Pyplot tutorial/Annotating text.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Matplotlib Official Primer/Pyplot tutorial/Annotating text.py diff --git a/Matplotlib Official Primer/Pyplot tutorial/Annotating text.py b/Matplotlib Official Primer/Pyplot tutorial/Annotating text.py new file mode 100644 index 00000000..91b08404 --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/Annotating text.py @@ -0,0 +1,17 @@ +import matplotlib.pyplot as plt +import numpy as np + +ax = plt.subplot() + +t = np.arange(0.0, 5.0, 0.01) +s = np.cos(2*np.pi*t) +line, = plt.plot(t, s, lw=2) + +plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5), + arrowprops=dict(facecolor='black', shrink=0.05), + ) + +plt.ylim(-2, 2) +plt.show() + +# Source: https://matplotlib.org/stable/tutorials/introductory/pyplot.html#annotating-text From f6311fd5259423843370634ad599ce4137b02716 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:44:59 +0800 Subject: [PATCH 0164/2002] Committed 2021/09/25 --- .../Basic text commands.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Matplotlib Official Primer/Basic text commands.py diff --git a/Matplotlib Official Primer/Basic text commands.py b/Matplotlib Official Primer/Basic text commands.py new file mode 100644 index 00000000..0a40ca0a --- /dev/null +++ b/Matplotlib Official Primer/Basic text commands.py @@ -0,0 +1,36 @@ +import matplotlib +import matplotlib.pyplot as plt + +fig = plt.figure() +ax = fig.add_subplot() +fig.subplots_adjust(top=0.85) + +# Set titles for the figure and the subplot respectively +fig.suptitle('bold figure suptitle', fontsize=14, fontweight='bold') +ax.set_title('axes title') + +ax.set_xlabel('xlabel') +ax.set_ylabel('ylabel') + +# Set both x- and y-axis limits to [0, 10] instead of default [0, 1] +ax.axis([0, 10, 0, 10]) + +ax.text(3, 8, 'boxed italics text in data coords', style='italic', + bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10}) + +ax.text(2, 6, r'an equation: $E=mc^2$', fontsize=15) + +ax.text(3, 2, 'unicode: Institut f羹r Festk繹rperphysik') + +ax.text(0.95, 0.01, 'colored text in axes coords', + verticalalignment='bottom', horizontalalignment='right', + transform=ax.transAxes, + color='green', fontsize=15) + +ax.plot([2], [1], 'o') +ax.annotate('annotate', xy=(2, 1), xytext=(3, 4), + arrowprops=dict(facecolor='black', shrink=0.05)) + +plt.show() + +# Source: https://matplotlib.org/stable/tutorials/text/text_intro.html From 80ae36821db554d21423bd13c9b06685625d3e25 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:49:32 +0800 Subject: [PATCH 0165/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Annotations/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Matplotlib Official Primer/Annotations/__init__.py diff --git a/Matplotlib Official Primer/Annotations/__init__.py b/Matplotlib Official Primer/Annotations/__init__.py new file mode 100644 index 00000000..e69de29b From 4e94bd028a1d026026a514c6c863cb7793ffd0f4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:54:55 +0800 Subject: [PATCH 0166/2002] Committed 2021/09/25 --- .../Customizing_arrow_and_bubble_styles.py | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/Customizing_arrow_and_bubble_styles.py diff --git a/Matplotlib Official Primer/Annotations/Customizing_arrow_and_bubble_styles.py b/Matplotlib Official Primer/Annotations/Customizing_arrow_and_bubble_styles.py new file mode 100644 index 00000000..95d89e30 --- /dev/null +++ b/Matplotlib Official Primer/Annotations/Customizing_arrow_and_bubble_styles.py @@ -0,0 +1,149 @@ +import matplotlib.pyplot as plt +from matplotlib.patches import Ellipse +import numpy as np +from matplotlib.text import OffsetFrom + +fig, ax = plt.subplots(figsize=(8, 5)) + +t = np.arange(0.0, 5.0, 0.01) +s = np.cos(2*np.pi*t) +line, = ax.plot(t, s, lw=3) + +ax.annotate( + 'straight', + xy=(0, 1), xycoords='data', + xytext=(-50, 30), textcoords='offset points', + arrowprops=dict(arrowstyle="->")) +ax.annotate( + 'arc3,\nrad 0.2', + xy=(0.5, -1), xycoords='data', + xytext=(-80, -60), textcoords='offset points', + arrowprops=dict(arrowstyle="->", + connectionstyle="arc3,rad=.2")) +ax.annotate( + 'arc,\nangle 50', + xy=(1., 1), xycoords='data', + xytext=(-90, 50), textcoords='offset points', + arrowprops=dict(arrowstyle="->", + connectionstyle="arc,angleA=0,armA=50,rad=10")) +ax.annotate( + 'arc,\narms', + xy=(1.5, -1), xycoords='data', + xytext=(-80, -60), textcoords='offset points', + arrowprops=dict( + arrowstyle="->", + connectionstyle="arc,angleA=0,armA=40,angleB=-90,armB=30,rad=7")) +ax.annotate( + 'angle,\nangle 90', + xy=(2., 1), xycoords='data', + xytext=(-70, 30), textcoords='offset points', + arrowprops=dict(arrowstyle="->", + connectionstyle="angle,angleA=0,angleB=90,rad=10")) +ax.annotate( + 'angle3,\nangle -90', + xy=(2.5, -1), xycoords='data', + xytext=(-80, -60), textcoords='offset points', + arrowprops=dict(arrowstyle="->", + connectionstyle="angle3,angleA=0,angleB=-90")) +ax.annotate( + 'angle,\nround', + xy=(3., 1), xycoords='data', + xytext=(-60, 30), textcoords='offset points', + bbox=dict(boxstyle="round", fc="0.8"), + arrowprops=dict(arrowstyle="->", + connectionstyle="angle,angleA=0,angleB=90,rad=10")) +ax.annotate( + 'angle,\nround4', + xy=(3.5, -1), xycoords='data', + xytext=(-70, -80), textcoords='offset points', + size=20, + bbox=dict(boxstyle="round4,pad=.5", fc="0.8"), + arrowprops=dict(arrowstyle="->", + connectionstyle="angle,angleA=0,angleB=-90,rad=10")) +ax.annotate( + 'angle,\nshrink', + xy=(4., 1), xycoords='data', + xytext=(-60, 30), textcoords='offset points', + bbox=dict(boxstyle="round", fc="0.8"), + arrowprops=dict(arrowstyle="->", + shrinkA=0, shrinkB=10, + connectionstyle="angle,angleA=0,angleB=90,rad=10")) +# You can pass an empty string to get only annotation arrows rendered +ax.annotate('', xy=(4., 1.), xycoords='data', + xytext=(4.5, -1), textcoords='data', + arrowprops=dict(arrowstyle="<->", + connectionstyle="bar", + ec="k", + shrinkA=5, shrinkB=5)) + +ax.set(xlim=(-1, 5), ylim=(-4, 3)) + +# We'll create another figure so that it doesn't get too cluttered +fig, ax = plt.subplots() + +el = Ellipse((2, -1), 0.5, 0.5) +ax.add_patch(el) + +ax.annotate('$->$', + xy=(2., -1), xycoords='data', + xytext=(-150, -140), textcoords='offset points', + bbox=dict(boxstyle="round", fc="0.8"), + arrowprops=dict(arrowstyle="->", + patchB=el, + connectionstyle="angle,angleA=90,angleB=0,rad=10")) +ax.annotate('arrow\nfancy', + xy=(2., -1), xycoords='data', + xytext=(-100, 60), textcoords='offset points', + size=20, + # bbox=dict(boxstyle="round", fc="0.8"), + arrowprops=dict(arrowstyle="fancy", + fc="0.6", ec="none", + patchB=el, + connectionstyle="angle3,angleA=0,angleB=-90")) +ax.annotate('arrow\nsimple', + xy=(2., -1), xycoords='data', + xytext=(100, 60), textcoords='offset points', + size=20, + # bbox=dict(boxstyle="round", fc="0.8"), + arrowprops=dict(arrowstyle="simple", + fc="0.6", ec="none", + patchB=el, + connectionstyle="arc3,rad=0.3")) +ax.annotate('wedge', + xy=(2., -1), xycoords='data', + xytext=(-100, -100), textcoords='offset points', + size=20, + # bbox=dict(boxstyle="round", fc="0.8"), + arrowprops=dict(arrowstyle="wedge,tail_width=0.7", + fc="0.6", ec="none", + patchB=el, + connectionstyle="arc3,rad=-0.3")) +ax.annotate('bubble,\ncontours', + xy=(2., -1), xycoords='data', + xytext=(0, -70), textcoords='offset points', + size=20, + bbox=dict(boxstyle="round", + fc=(1.0, 0.7, 0.7), + ec=(1., .5, .5)), + arrowprops=dict(arrowstyle="wedge,tail_width=1.", + fc=(1.0, 0.7, 0.7), ec=(1., .5, .5), + patchA=None, + patchB=el, + relpos=(0.2, 0.8), + connectionstyle="arc3,rad=-0.1")) +ax.annotate('bubble', + xy=(2., -1), xycoords='data', + xytext=(55, 0), textcoords='offset points', + size=20, va="center", + bbox=dict(boxstyle="round", fc=(1.0, 0.7, 0.7), ec="none"), + arrowprops=dict(arrowstyle="wedge,tail_width=1.", + fc=(1.0, 0.7, 0.7), ec="none", + patchA=None, + patchB=el, + relpos=(0.2, 0.5))) + +ax.set(xlim=(-1, 5), ylim=(-5, 3)) + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/text_labels_and_annotations/annotation_demo.html#customizing-arrow-and-bubble-styles From 3da34ab2b90157cccaa0f3e70449390442ed18ef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 13:59:51 +0800 Subject: [PATCH 0167/2002] Committed 2021/09/25 --- .../More examples of coordinate systems.py | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/More examples of coordinate systems.py diff --git a/Matplotlib Official Primer/Annotations/More examples of coordinate systems.py b/Matplotlib Official Primer/Annotations/More examples of coordinate systems.py new file mode 100644 index 00000000..f81ea714 --- /dev/null +++ b/Matplotlib Official Primer/Annotations/More examples of coordinate systems.py @@ -0,0 +1,93 @@ +import matplotlib.pyplot as plt +from matplotlib.patches import Ellipse +import numpy as np +from matplotlib.text import OffsetFrom + +fig, (ax1, ax2) = plt.subplots(1, 2) + +bbox_args = dict(boxstyle="round", fc="0.8") +arrow_args = dict(arrowstyle="->") + +# Here we'll demonstrate the extents of the coordinate system and how +# we place annotating text. + +ax1.annotate('figure fraction : 0, 0', xy=(0, 0), xycoords='figure fraction', + xytext=(20, 20), textcoords='offset points', + ha="left", va="bottom", + bbox=bbox_args, + arrowprops=arrow_args) + +ax1.annotate('figure fraction : 1, 1', xy=(1, 1), xycoords='figure fraction', + xytext=(-20, -20), textcoords='offset points', + ha="right", va="top", + bbox=bbox_args, + arrowprops=arrow_args) + +ax1.annotate('axes fraction : 0, 0', xy=(0, 0), xycoords='axes fraction', + xytext=(20, 20), textcoords='offset points', + ha="left", va="bottom", + bbox=bbox_args, + arrowprops=arrow_args) + +ax1.annotate('axes fraction : 1, 1', xy=(1, 1), xycoords='axes fraction', + xytext=(-20, -20), textcoords='offset points', + ha="right", va="top", + bbox=bbox_args, + arrowprops=arrow_args) + +# It is also possible to generate draggable annotations + +an1 = ax1.annotate('Drag me 1', xy=(.5, .7), xycoords='data', + #xytext=(.5, .7), textcoords='data', + ha="center", va="center", + bbox=bbox_args, + #arrowprops=arrow_args + ) + +an2 = ax1.annotate('Drag me 2', xy=(.5, .5), xycoords=an1, + xytext=(.5, .3), textcoords='axes fraction', + ha="center", va="center", + bbox=bbox_args, + arrowprops=dict(patchB=an1.get_bbox_patch(), + connectionstyle="arc3,rad=0.2", + **arrow_args)) +an1.draggable() +an2.draggable() + +an3 = ax1.annotate('', xy=(.5, .5), xycoords=an2, + xytext=(.5, .5), textcoords=an1, + ha="center", va="center", + bbox=bbox_args, + arrowprops=dict(patchA=an1.get_bbox_patch(), + patchB=an2.get_bbox_patch(), + connectionstyle="arc3,rad=0.2", + **arrow_args)) + +# Finally we'll show off some more complex annotation and placement + +text = ax2.annotate('xy=(0, 1)\nxycoords=("data", "axes fraction")', + xy=(0, 1), xycoords=("data", 'axes fraction'), + xytext=(0, -20), textcoords='offset points', + ha="center", va="top", + bbox=bbox_args, + arrowprops=arrow_args) + +ax2.annotate('xy=(0.5, 0)\nxycoords=artist', + xy=(0.5, 0.), xycoords=text, + xytext=(0, -20), textcoords='offset points', + ha="center", va="top", + bbox=bbox_args, + arrowprops=arrow_args) + +ax2.annotate('xy=(0.8, 0.5)\nxycoords=ax1.transData', + xy=(0.8, 0.5), xycoords=ax1.transData, + xytext=(10, 10), + textcoords=OffsetFrom(ax2.bbox, (0, 0), "points"), + ha="left", va="bottom", + bbox=bbox_args, + arrowprops=arrow_args) + +ax2.set(xlim=[-2, 2], ylim=[-2, 2]) +plt.show() + +# Source: https://matplotlib.org/stable/gallery/text_labels_and_annotations/annotation_demo.html#more-examples-of-coordinate-systems From 06cc9e2e423bbc5e3ce2c8c3e9ae75d1b76c7296 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:00:08 +0800 Subject: [PATCH 0168/2002] Committed 2021/09/25 --- .../Stacked bar chart.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Matplotlib Official Primer/Stacked bar chart.py diff --git a/Matplotlib Official Primer/Stacked bar chart.py b/Matplotlib Official Primer/Stacked bar chart.py new file mode 100644 index 00000000..5ac53e15 --- /dev/null +++ b/Matplotlib Official Primer/Stacked bar chart.py @@ -0,0 +1,23 @@ +import matplotlib.pyplot as plt + + +labels = ['G1', 'G2', 'G3', 'G4', 'G5'] +men_means = [20, 35, 30, 35, 27] +women_means = [25, 32, 34, 20, 25] +men_std = [2, 3, 4, 1, 2] +women_std = [3, 5, 2, 3, 3] +width = 0.35 # the width of the bars: can also be len(x) sequence + +fig, ax = plt.subplots() + +ax.bar(labels, men_means, width, yerr=men_std, label='Men') +ax.bar(labels, women_means, width, yerr=women_std, bottom=men_means, + label='Women') + +ax.set_ylabel('Scores') +ax.set_title('Scores by group and gender') +ax.legend() + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_stacked.html?highlight=stack From 78dbc590888082b3e46c5ab70986eb8c5f902dff Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:01:48 +0800 Subject: [PATCH 0169/2002] Committed 2021/09/25 --- Matplotlib Official Primer/StackPlots.py | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Matplotlib Official Primer/StackPlots.py diff --git a/Matplotlib Official Primer/StackPlots.py b/Matplotlib Official Primer/StackPlots.py new file mode 100644 index 00000000..25237095 --- /dev/null +++ b/Matplotlib Official Primer/StackPlots.py @@ -0,0 +1,25 @@ +import numpy as np +import matplotlib.pyplot as plt + +# data from United Nations World Population Prospects (Revision 2019) +# https://population.un.org/wpp/, license: CC BY 3.0 IGO +year = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2018] +population_by_continent = { + 'africa': [228, 284, 365, 477, 631, 814, 1044, 1275], + 'americas': [340, 425, 519, 619, 727, 840, 943, 1006], + 'asia': [1394, 1686, 2120, 2625, 3202, 3714, 4169, 4560], + 'europe': [220, 253, 276, 295, 310, 303, 294, 293], + 'oceania': [12, 15, 19, 22, 26, 31, 36, 39], +} + +fig, ax = plt.subplots() +ax.stackplot(year, population_by_continent.values(), + labels=population_by_continent.keys()) +ax.legend(loc='upper left') +ax.set_title('World population') +ax.set_xlabel('Year') +ax.set_ylabel('Number of people (millions)') + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/stackplot_demo.html#stackplots From dc6014615f99e0e49884a5b528cd62f721fc4bb6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:03:59 +0800 Subject: [PATCH 0170/2002] Committed 2021/09/25 --- Matplotlib Official Primer/StreamGraph.py | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Matplotlib Official Primer/StreamGraph.py diff --git a/Matplotlib Official Primer/StreamGraph.py b/Matplotlib Official Primer/StreamGraph.py new file mode 100644 index 00000000..ccc6a712 --- /dev/null +++ b/Matplotlib Official Primer/StreamGraph.py @@ -0,0 +1,29 @@ +import numpy as np +import matplotlib.pyplot as plt + +# Fixing random state for reproducibility +np.random.seed(19680801) + + +def gaussian_mixture(x, n=5): + """Return a random mixture of *n* Gaussians, evaluated at positions *x*.""" + def add_random_gaussian(a): + amplitude = 1 / (.1 + np.random.random()) + dx = x[-1] - x[0] + x0 = (2 * np.random.random() - .5) * dx + z = 10 / (.1 + np.random.random()) / dx + a += amplitude * np.exp(-(z * (x - x0))**2) + a = np.zeros_like(x) + for j in range(n): + add_random_gaussian(a) + return a + + +x = np.linspace(0, 100, 101) +ys = [gaussian_mixture(x) for _ in range(3)] + +fig, ax = plt.subplots() +ax.stackplot(x, ys, baseline='wiggle') +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/stackplot_demo.html#streamgraphs From f37508e17c19cb0d8b19b40ab9c05c3b770f6656 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:06:10 +0800 Subject: [PATCH 0171/2002] Committed 2021/09/25 --- Matplotlib Official Primer/StackPlots.py | 2 ++ Matplotlib Official Primer/StreamGraph.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Matplotlib Official Primer/StackPlots.py b/Matplotlib Official Primer/StackPlots.py index 25237095..1e393cb4 100644 --- a/Matplotlib Official Primer/StackPlots.py +++ b/Matplotlib Official Primer/StackPlots.py @@ -23,3 +23,5 @@ plt.show() # Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/stackplot_demo.html#stackplots + +# Further reading: https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.stackplot.html?highlight=stack#matplotlib.axes.Axes.stackplot diff --git a/Matplotlib Official Primer/StreamGraph.py b/Matplotlib Official Primer/StreamGraph.py index ccc6a712..2bd7095b 100644 --- a/Matplotlib Official Primer/StreamGraph.py +++ b/Matplotlib Official Primer/StreamGraph.py @@ -27,3 +27,5 @@ def add_random_gaussian(a): plt.show() # Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/stackplot_demo.html#streamgraphs + +# Further reading: https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.stackplot.html?highlight=stack#matplotlib.axes.Axes.stackplot From 7eab9ee505c99a4dfc7910f9b1e05a56579769bc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:12:04 +0800 Subject: [PATCH 0172/2002] Committed 2021/09/25 --- ...te distribution as horizontal bar chart.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Matplotlib Official Primer/Discrete distribution as horizontal bar chart.py diff --git a/Matplotlib Official Primer/Discrete distribution as horizontal bar chart.py b/Matplotlib Official Primer/Discrete distribution as horizontal bar chart.py new file mode 100644 index 00000000..d871a69c --- /dev/null +++ b/Matplotlib Official Primer/Discrete distribution as horizontal bar chart.py @@ -0,0 +1,56 @@ +import numpy as np +import matplotlib.pyplot as plt + +category_names = ['Strongly disagree', 'Disagree', + 'Neither agree nor disagree', 'Agree', 'Strongly agree'] +results = { + 'Question 1': [10, 15, 17, 32, 26], + 'Question 2': [26, 22, 29, 10, 13], + 'Question 3': [35, 37, 7, 2, 19], + 'Question 4': [32, 11, 9, 15, 33], + 'Question 5': [21, 29, 5, 5, 40], + 'Question 6': [8, 19, 5, 30, 38] +} + + +def survey(results, category_names): + """ + Parameters + ---------- + results : dict + A mapping from question labels to a list of answers per category. + It is assumed all lists contain the same number of entries and that + it matches the length of *category_names*. + category_names : list of str + The category labels. + """ + labels = list(results.keys()) + data = np.array(list(results.values())) + data_cum = data.cumsum(axis=1) + category_colors = plt.get_cmap('RdYlGn')( + np.linspace(0.15, 0.85, data.shape[1])) + + fig, ax = plt.subplots(figsize=(9.2, 5)) + ax.invert_yaxis() + ax.xaxis.set_visible(False) + ax.set_xlim(0, np.sum(data, axis=1).max()) + + for i, (colname, color) in enumerate(zip(category_names, category_colors)): + widths = data[:, i] + starts = data_cum[:, i] - widths + rects = ax.barh(labels, widths, left=starts, height=0.5, + label=colname, color=color) + + r, g, b, _ = color + text_color = 'white' if r * g * b < 0.5 else 'darkgrey' + ax.bar_label(rects, label_type='center', color=text_color) + ax.legend(ncol=len(category_names), bbox_to_anchor=(0, 1), + loc='lower left', fontsize='small') + + return fig, ax + + +survey(results, category_names) +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/horizontal_barchart_distribution.html?highlight=stack#discrete-distribution-as-horizontal-bar-chart From 07a515db5a032499f41033eebe48b9783b23a4d2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:14:00 +0800 Subject: [PATCH 0173/2002] Committed 2021/09/25 --- ... function's different histtype settings.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py diff --git a/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py b/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py new file mode 100644 index 00000000..29009a5b --- /dev/null +++ b/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py @@ -0,0 +1,35 @@ +import numpy as np +import matplotlib.pyplot as plt + +np.random.seed(19680801) + +mu_x = 200 +sigma_x = 25 +x = np.random.normal(mu_x, sigma_x, size=100) + +mu_w = 200 +sigma_w = 10 +w = np.random.normal(mu_w, sigma_w, size=100) + +fig, axs = plt.subplots(nrows=2, ncols=2) + +axs[0, 0].hist(x, 20, density=True, histtype='stepfilled', facecolor='g', + alpha=0.75) +axs[0, 0].set_title('stepfilled') + +axs[0, 1].hist(x, 20, density=True, histtype='step', facecolor='g', + alpha=0.75) +axs[0, 1].set_title('step') + +axs[1, 0].hist(x, density=True, histtype='barstacked', rwidth=0.8) +axs[1, 0].hist(w, density=True, histtype='barstacked', rwidth=0.8) +axs[1, 0].set_title('barstacked') + +# Create a histogram by providing the bin edges (unequally spaced). +bins = [100, 150, 180, 195, 205, 220, 250, 300] +axs[1, 1].hist(x, bins, density=True, histtype='bar', rwidth=0.8) +axs[1, 1].set_title('bar, unequal bins') + +fig.tight_layout() +plt.show() + From 6ea193494def4c08aa2dcb1d0aa15a3536f76980 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:15:35 +0800 Subject: [PATCH 0174/2002] Committed 2021/09/25 --- ...mo of the histogram function's different histtype settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py b/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py index 29009a5b..b506b907 100644 --- a/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py +++ b/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py @@ -33,3 +33,4 @@ fig.tight_layout() plt.show() +# Source: https://matplotlib.org/stable/gallery/statistics/histogram_histtypes.html?highlight=stack From 668f35f84d66feeef81553be7195063cb0b5aff1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:20:11 +0800 Subject: [PATCH 0175/2002] Committed 2021/09/25 --- .../Percentiles as horizontal bar chart.py | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 Matplotlib Official Primer/Percentiles as horizontal bar chart.py diff --git a/Matplotlib Official Primer/Percentiles as horizontal bar chart.py b/Matplotlib Official Primer/Percentiles as horizontal bar chart.py new file mode 100644 index 00000000..fb678102 --- /dev/null +++ b/Matplotlib Official Primer/Percentiles as horizontal bar chart.py @@ -0,0 +1,143 @@ +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.ticker import MaxNLocator +from collections import namedtuple + +np.random.seed(42) + +Student = namedtuple('Student', ['name', 'grade', 'gender']) +Score = namedtuple('Score', ['score', 'percentile']) + +# GLOBAL CONSTANTS +test_names = ['Pacer Test', 'Flexed Arm\n Hang', 'Mile Run', 'Agility', + 'Push Ups'] +test_units = dict(zip(test_names, ['laps', 'sec', 'min:sec', 'sec', ''])) + + +def attach_ordinal(num): + """Convert an integer to an ordinal string, e.g. 2 -> '2nd'.""" + suffixes = {str(i): v + for i, v in enumerate(['th', 'st', 'nd', 'rd', 'th', + 'th', 'th', 'th', 'th', 'th'])} + v = str(num) + # special case early teens + if v in {'11', '12', '13'}: + return v + 'th' + return v + suffixes[v[-1]] + + +def format_score(score, test): + """ + Create score labels for the right y-axis as the test name followed by the + measurement unit (if any), split over two lines. + """ + unit = test_units[test] + if unit: + return f'{score}\n{unit}' + else: # If no unit, don't include a newline, so that label stays centered. + return score + + +def format_ycursor(y): + y = int(y) + if y < 0 or y >= len(test_names): + return '' + else: + return test_names[y] + + +def plot_student_results(student, scores, cohort_size): + fig, ax1 = plt.subplots(figsize=(9, 7)) # Create the figure + fig.subplots_adjust(left=0.115, right=0.88) + fig.canvas.manager.set_window_title('Eldorado K-8 Fitness Chart') + + pos = np.arange(len(test_names)) + + rects = ax1.barh(pos, [scores[k].percentile for k in test_names], + align='center', + height=0.5, + tick_label=test_names) + + ax1.set_title(student.name) + + ax1.set_xlim([0, 100]) + ax1.xaxis.set_major_locator(MaxNLocator(11)) + ax1.xaxis.grid(True, linestyle='--', which='major', + color='grey', alpha=.25) + + # Plot a solid vertical gridline to highlight the median position + ax1.axvline(50, color='grey', alpha=0.25) + + # Set the right-hand Y-axis ticks and labels + ax2 = ax1.twinx() + + # Set the tick locations + ax2.set_yticks(pos) + # Set equal limits on both yaxis so that the ticks line up + ax2.set_ylim(ax1.get_ylim()) + + # Set the tick labels + ax2.set_yticklabels([format_score(scores[k].score, k) for k in test_names]) + + ax2.set_ylabel('Test Scores') + + xlabel = ('Percentile Ranking Across {grade} Grade {gender}s\n' + 'Cohort Size: {cohort_size}') + ax1.set_xlabel(xlabel.format(grade=attach_ordinal(student.grade), + gender=student.gender.title(), + cohort_size=cohort_size)) + + rect_labels = [] + # Lastly, write in the ranking inside each bar to aid in interpretation + for rect in rects: + # Rectangle widths are already integer-valued but are floating + # type, so it helps to remove the trailing decimal point and 0 by + # converting width to int type + width = int(rect.get_width()) + + rank_str = attach_ordinal(width) + # The bars aren't wide enough to print the ranking inside + if width < 40: + # Shift the text to the right side of the right edge + xloc = 5 + # Black against white background + clr = 'black' + align = 'left' + else: + # Shift the text to the left side of the right edge + xloc = -5 + # White on magenta + clr = 'white' + align = 'right' + + # Center the text vertically in the bar + yloc = rect.get_y() + rect.get_height() / 2 + label = ax1.annotate( + rank_str, xy=(width, yloc), xytext=(xloc, 0), + textcoords="offset points", + horizontalalignment=align, verticalalignment='center', + color=clr, weight='bold', clip_on=True) + rect_labels.append(label) + + # Make the interactive mouse over give the bar title + ax2.fmt_ydata = format_ycursor + # Return all of the artists created + return {'fig': fig, + 'ax': ax1, + 'ax_right': ax2, + 'bars': rects, + 'perc_labels': rect_labels} + + +student = Student('Johnny Doe', 2, 'boy') +scores = dict(zip( + test_names, + (Score(v, p) for v, p in + zip(['7', '48', '12:52', '17', '14'], + np.round(np.random.uniform(0, 100, len(test_names)), 0))))) +cohort_size = 62 # The number of other 2nd grade boys + +arts = plot_student_results(student, scores, cohort_size) +plt.show() + +# Source: https://matplotlib.org/stable/gallery/statistics/barchart_demo.html \ No newline at end of file From 58b5ab5fa1b352ad83e81a59717246bd7528cdc7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:22:45 +0800 Subject: [PATCH 0176/2002] Committed 2021/09/25 --- .../Percentiles as horizontal bar chart.py | 4 ++- ...atures of the histogram (hist) function.py | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 Matplotlib Official Primer/Some features of the histogram (hist) function.py diff --git a/Matplotlib Official Primer/Percentiles as horizontal bar chart.py b/Matplotlib Official Primer/Percentiles as horizontal bar chart.py index fb678102..38698a64 100644 --- a/Matplotlib Official Primer/Percentiles as horizontal bar chart.py +++ b/Matplotlib Official Primer/Percentiles as horizontal bar chart.py @@ -140,4 +140,6 @@ def plot_student_results(student, scores, cohort_size): arts = plot_student_results(student, scores, cohort_size) plt.show() -# Source: https://matplotlib.org/stable/gallery/statistics/barchart_demo.html \ No newline at end of file +# Source: https://matplotlib.org/stable/gallery/statistics/barchart_demo.html + +# Further reading: https://matplotlib.org/stable/tutorials/introductory/sample_plots.html?highlight=stack \ No newline at end of file diff --git a/Matplotlib Official Primer/Some features of the histogram (hist) function.py b/Matplotlib Official Primer/Some features of the histogram (hist) function.py new file mode 100644 index 00000000..9777fe36 --- /dev/null +++ b/Matplotlib Official Primer/Some features of the histogram (hist) function.py @@ -0,0 +1,28 @@ +import numpy as np +import matplotlib.pyplot as plt + +np.random.seed(19680801) + +# example data +mu = 100 # mean of distribution +sigma = 15 # standard deviation of distribution +x = mu + sigma * np.random.randn(437) + +num_bins = 50 + +fig, ax = plt.subplots() + +# the histogram of the data +n, bins, patches = ax.hist(x, num_bins, density=True) + +# add a 'best fit' line +y = ((1 / (np.sqrt(2 * np.pi) * sigma)) * + np.exp(-0.5 * (1 / sigma * (bins - mu))**2)) +ax.plot(bins, y, '--') +ax.set_xlabel('Smarts') +ax.set_ylabel('Probability density') +ax.set_title(r'Histogram of IQ: $\mu=100$, $\sigma=15$') + +# Tweak spacing to prevent clipping of ylabel +fig.tight_layout() +plt.show() \ No newline at end of file From 7645239fa01e572613b1db5606c883293052b90f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:25:04 +0800 Subject: [PATCH 0177/2002] Committed 2021/09/25 --- .../Some features of the histogram (hist) function.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Matplotlib Official Primer/Some features of the histogram (hist) function.py b/Matplotlib Official Primer/Some features of the histogram (hist) function.py index 9777fe36..3b22869b 100644 --- a/Matplotlib Official Primer/Some features of the histogram (hist) function.py +++ b/Matplotlib Official Primer/Some features of the histogram (hist) function.py @@ -25,4 +25,6 @@ # Tweak spacing to prevent clipping of ylabel fig.tight_layout() -plt.show() \ No newline at end of file +plt.show() + +# Source: https://matplotlib.org/stable/gallery/statistics/histogram_features.html From c25964b17341746f2d8c1d3920665aad6c9ff921 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:25:55 +0800 Subject: [PATCH 0178/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Stairs Demo.py | 37 +++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Matplotlib Official Primer/Stairs Demo.py diff --git a/Matplotlib Official Primer/Stairs Demo.py b/Matplotlib Official Primer/Stairs Demo.py new file mode 100644 index 00000000..9bb8d668 --- /dev/null +++ b/Matplotlib Official Primer/Stairs Demo.py @@ -0,0 +1,37 @@ +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.patches import StepPatch + +np.random.seed(0) +h, edges = np.histogram(np.random.normal(5, 3, 5000), + bins=np.linspace(0, 10, 20)) + +fig, axs = plt.subplots(3, 1, figsize=(7, 15)) +axs[0].stairs(h, edges, label='Simple histogram') +axs[0].stairs(h, edges + 5, baseline=50, label='Modified baseline') +axs[0].stairs(h, edges + 10, baseline=None, label='No edges') +axs[0].set_title("Step Histograms") + +axs[1].stairs(np.arange(1, 6, 1), fill=True, + label='Filled histogram\nw/ automatic edges') +axs[1].stairs(np.arange(1, 6, 1)*0.3, np.arange(2, 8, 1), + orientation='horizontal', hatch='//', + label='Hatched histogram\nw/ horizontal orientation') +axs[1].set_title("Filled histogram") + +patch = StepPatch(values=[1, 2, 3, 2, 1], + edges=range(1, 7), + label=('Patch derived underlying object\n' + 'with default edge/facecolor behaviour')) + +axs[2].add_patch(patch) +axs[2].set_xlim(0, 7) +axs[2].set_ylim(-1, 5) +axs[2].set_title("StepPatch artist") + +for ax in axs: + ax.legend() + + +plt.show() + From 30a1b24a40fcb2cf74a73887ef0f5ab49cf7b77e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:30:38 +0800 Subject: [PATCH 0179/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Stairs Demo 2.py | 42 +++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Matplotlib Official Primer/Stairs Demo 2.py diff --git a/Matplotlib Official Primer/Stairs Demo 2.py b/Matplotlib Official Primer/Stairs Demo 2.py new file mode 100644 index 00000000..cfa8230f --- /dev/null +++ b/Matplotlib Official Primer/Stairs Demo 2.py @@ -0,0 +1,42 @@ +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.patches import StepPatch + +np.random.seed(0) +h, edges = np.histogram(np.random.normal(5, 3, 5000), + bins=np.linspace(0, 10, 20)) + +fig, axs = plt.subplots(3, 1, figsize=(7, 15)) +axs[0].stairs(h, edges, label='Simple histogram') +axs[0].stairs(h, edges + 5, baseline=50, label='Modified baseline') +axs[0].stairs(h, edges + 10, baseline=None, label='No edges') +axs[0].set_title("Step Histograms") + +axs[1].stairs(np.arange(1, 6, 1), fill=True, + label='Filled histogram\nw/ automatic edges') +axs[1].stairs(np.arange(1, 6, 1)*0.3, np.arange(2, 8, 1), + orientation='horizontal', hatch='//', + label='Hatched histogram\nw/ horizontal orientation') +axs[1].set_title("Filled histogram") + +patch = StepPatch(values=[1, 2, 3, 2, 1], + edges=range(1, 7), + label=('Patch derived underlying object\n' + 'with default edge/facecolor behaviour')) + +axs[2].add_patch(patch) +axs[2].set_xlim(0, 7) +axs[2].set_ylim(-1, 5) +axs[2].set_title("StepPatch artist") + +A = [[0, 0, 0], + [1, 2, 3], + [2, 4, 6], + [3, 6, 9]] + +for i in range(len(A) - 1): + plt.stairs(A[i+1], baseline=A[i], fill=True) + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/stairs_demo.html?highlight=stack From 81f783f435f0be0c2182f083ff12f7ec6c354c77 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:32:14 +0800 Subject: [PATCH 0180/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Stairs Demo 3.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Matplotlib Official Primer/Stairs Demo 3.py diff --git a/Matplotlib Official Primer/Stairs Demo 3.py b/Matplotlib Official Primer/Stairs Demo 3.py new file mode 100644 index 00000000..e3e685ad --- /dev/null +++ b/Matplotlib Official Primer/Stairs Demo 3.py @@ -0,0 +1,20 @@ +import numpy as np +import matplotlib.pyplot as plt + +bins = np.arange(14) +centers = bins[:-1] + np.diff(bins) / 2 +y = np.sin(centers / 2) + +plt.step(bins[:-1], y, where='post', label='step(where="post")') +plt.plot(bins[:-1], y, 'o--', color='grey', alpha=0.3) + +plt.stairs(y - 1, bins, baseline=None, label='stairs()') +plt.plot(centers, y - 1, 'o--', color='grey', alpha=0.3) +plt.plot(np.repeat(bins, 2), np.hstack([y[0], np.repeat(y, 2), y[-1]]) - 1, + 'o', color='red', alpha=0.2) + +plt.legend() +plt.title('step() vs. stairs()') +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/stairs_demo.html?highlight=stack#comparison-of-pyplot-step-and-pyplot-stairs From 9df10c915dd0505882b9dad6388fd2ccb7108236 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:34:28 +0800 Subject: [PATCH 0181/2002] Committed 2021/09/25 --- ...(hist) function with multiple data sets.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Matplotlib Official Primer/The histogram (hist) function with multiple data sets.py diff --git a/Matplotlib Official Primer/The histogram (hist) function with multiple data sets.py b/Matplotlib Official Primer/The histogram (hist) function with multiple data sets.py new file mode 100644 index 00000000..9455338d --- /dev/null +++ b/Matplotlib Official Primer/The histogram (hist) function with multiple data sets.py @@ -0,0 +1,28 @@ +import numpy as np +import matplotlib.pyplot as plt + +np.random.seed(19680801) + +n_bins = 10 +x = np.random.randn(1000, 3) + +fig, ((ax0, ax1), (ax2, ax3)) = plt.subplots(nrows=2, ncols=2) + +colors = ['red', 'tan', 'lime'] +ax0.hist(x, n_bins, density=True, histtype='bar', color=colors, label=colors) +ax0.legend(prop={'size': 10}) +ax0.set_title('bars with legend') + +ax1.hist(x, n_bins, density=True, histtype='bar', stacked=True) +ax1.set_title('stacked bar') + +ax2.hist(x, n_bins, histtype='step', stacked=True, fill=False) +ax2.set_title('stack step (unfilled)') + +# Make a multiple-histogram of data-sets with different length. +x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]] +ax3.hist(x_multi, n_bins, histtype='bar') +ax3.set_title('different sample sizes') + +fig.tight_layout() +plt.show() \ No newline at end of file From e67669e0ce10ed0965e0779b6babb5dfbfa0bb81 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:36:27 +0800 Subject: [PATCH 0182/2002] Committed 2021/09/25 --- .../The histogram (hist) function with multiple data sets.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Matplotlib Official Primer/The histogram (hist) function with multiple data sets.py b/Matplotlib Official Primer/The histogram (hist) function with multiple data sets.py index 9455338d..abfabf22 100644 --- a/Matplotlib Official Primer/The histogram (hist) function with multiple data sets.py +++ b/Matplotlib Official Primer/The histogram (hist) function with multiple data sets.py @@ -25,4 +25,6 @@ ax3.set_title('different sample sizes') fig.tight_layout() -plt.show() \ No newline at end of file +plt.show() + +# Source: https://matplotlib.org/stable/gallery/statistics/histogram_multihist.html?highlight=stack From 996dfa53eeb00f7e27b1922eba21ead6b37e220e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:38:00 +0800 Subject: [PATCH 0183/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Bar Label Demo.py | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Matplotlib Official Primer/Bar Label Demo.py diff --git a/Matplotlib Official Primer/Bar Label Demo.py b/Matplotlib Official Primer/Bar Label Demo.py new file mode 100644 index 00000000..35e67d51 --- /dev/null +++ b/Matplotlib Official Primer/Bar Label Demo.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt +import numpy as np + +N = 5 +menMeans = (20, 35, 30, 35, -27) +womenMeans = (25, 32, 34, 20, -25) +menStd = (2, 3, 4, 1, 2) +womenStd = (3, 5, 2, 3, 3) +ind = np.arange(N) # the x locations for the groups +width = 0.35 # the width of the bars: can also be len(x) sequence + +fig, ax = plt.subplots() + +p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men') +p2 = ax.bar(ind, womenMeans, width, + bottom=menMeans, yerr=womenStd, label='Women') + +ax.axhline(0, color='grey', linewidth=0.8) +ax.set_ylabel('Scores') +ax.set_title('Scores by group and gender') +ax.set_xticks(ind) +ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5')) +ax.legend() + +# Label with label_type 'center' instead of the default 'edge' +ax.bar_label(p1, label_type='center') +ax.bar_label(p2, label_type='center') +ax.bar_label(p2) + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html?highlight=stack#bar-label-demo From 47b0fe62f6a79d4b0603017fe67e0791db2278e9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:39:14 +0800 Subject: [PATCH 0184/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Bar Label Demo 2.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Matplotlib Official Primer/Bar Label Demo 2.py diff --git a/Matplotlib Official Primer/Bar Label Demo 2.py b/Matplotlib Official Primer/Bar Label Demo 2.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/Matplotlib Official Primer/Bar Label Demo 2.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 27a6338bf5d4e2c152904ff21fa1d6d2d3a43f9e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:41:13 +0800 Subject: [PATCH 0185/2002] Committed 2021/09/25 --- .../Bar Label Demo 2.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Matplotlib Official Primer/Bar Label Demo 2.py b/Matplotlib Official Primer/Bar Label Demo 2.py index 5bb80735..cef1eda6 100644 --- a/Matplotlib Official Primer/Bar Label Demo 2.py +++ b/Matplotlib Official Primer/Bar Label Demo 2.py @@ -1,4 +1,28 @@ import matplotlib.pyplot as plt import numpy as np +# Fixing random state for reproducibility +np.random.seed(19680801) +# Example data +people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') +y_pos = np.arange(len(people)) +performance = 3 + 10 * np.random.rand(len(people)) +error = np.random.rand(len(people)) + +fig, ax = plt.subplots() + +hbars = ax.barh(y_pos, performance, xerr=error, align='center') +ax.set_yticks(y_pos) +ax.set_yticklabels(people) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel('Performance') +ax.set_title('How fast do you want to go today?') + +# Label with specially formatted floats +ax.bar_label(hbars, fmt='%.2f') +ax.set_xlim(right=15) # adjust xlim to fit labels + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html?highlight=stack#bar-label-demo From 50d3b1e16ca68fe91fe639f3276f60260dd2f3de Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:43:00 +0800 Subject: [PATCH 0186/2002] Committed 2021/09/25 --- .../Bar Label Demo 3.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Matplotlib Official Primer/Bar Label Demo 3.py diff --git a/Matplotlib Official Primer/Bar Label Demo 3.py b/Matplotlib Official Primer/Bar Label Demo 3.py new file mode 100644 index 00000000..600bd718 --- /dev/null +++ b/Matplotlib Official Primer/Bar Label Demo 3.py @@ -0,0 +1,29 @@ +import matplotlib.pyplot as plt +import numpy as np + +# Fixing random state for reproducibility +np.random.seed(19680801) + +# Example data +people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') +y_pos = np.arange(len(people)) +performance = 3 + 10 * np.random.rand(len(people)) +error = np.random.rand(len(people)) + +fig, ax = plt.subplots() + +hbars = ax.barh(y_pos, performance, xerr=error, align='center') +ax.set_yticks(y_pos) +ax.set_yticklabels(people) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel('Performance') +ax.set_title('How fast do you want to go today?') + +# Label with given captions, custom padding and annotate options +ax.bar_label(hbars, labels=['簣%.2f' % e for e in error], + padding=8, color='b', fontsize=14) +ax.set_xlim(right=16) + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html?highlight=stack#bar-label-demo From 461021cb6f99de272e7d572616d0b626ba6063ca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:46:20 +0800 Subject: [PATCH 0187/2002] Committed 2021/09/25 --- Matplotlib Official Primer/stack.py | 1 + Matplotlib Official Primer/stackplot.py | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 Matplotlib Official Primer/stack.py create mode 100644 Matplotlib Official Primer/stackplot.py diff --git a/Matplotlib Official Primer/stack.py b/Matplotlib Official Primer/stack.py new file mode 100644 index 00000000..5e86fb42 --- /dev/null +++ b/Matplotlib Official Primer/stack.py @@ -0,0 +1 @@ +# https://matplotlib.org/stable/search.html?q=stack \ No newline at end of file diff --git a/Matplotlib Official Primer/stackplot.py b/Matplotlib Official Primer/stackplot.py new file mode 100644 index 00000000..1ca2269d --- /dev/null +++ b/Matplotlib Official Primer/stackplot.py @@ -0,0 +1,2 @@ +# pyplot.stackplot +# https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.stackplot.html?highlight=stack#matplotlib.pyplot.stackplot \ No newline at end of file From a8aafc2eff7ffde4ca44328f6e4eb487547edf23 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:48:31 +0800 Subject: [PATCH 0188/2002] Committed 2021/09/25 --- Matplotlib Official Primer/{ => Pyplot tutorial}/stackplot.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Matplotlib Official Primer/{ => Pyplot tutorial}/stackplot.py (100%) diff --git a/Matplotlib Official Primer/stackplot.py b/Matplotlib Official Primer/Pyplot tutorial/stackplot.py similarity index 100% rename from Matplotlib Official Primer/stackplot.py rename to Matplotlib Official Primer/Pyplot tutorial/stackplot.py From c9be08a5af8b325db5815e375cda4681f22ab877 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 15:53:37 +0800 Subject: [PATCH 0189/2002] Committed 2021/09/25 --- ... the histogram function's different histtype settings.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py b/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py index b506b907..34d03b7e 100644 --- a/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py +++ b/Matplotlib Official Primer/Demo of the histogram function's different histtype settings.py @@ -13,12 +13,10 @@ fig, axs = plt.subplots(nrows=2, ncols=2) -axs[0, 0].hist(x, 20, density=True, histtype='stepfilled', facecolor='g', - alpha=0.75) +axs[0, 0].hist(x, 20, density=True, histtype='stepfilled', facecolor='g', alpha=0.75) axs[0, 0].set_title('stepfilled') -axs[0, 1].hist(x, 20, density=True, histtype='step', facecolor='g', - alpha=0.75) +axs[0, 1].hist(x, 20, density=True, histtype='step', facecolor='g', alpha=0.75) axs[0, 1].set_title('step') axs[1, 0].hist(x, density=True, histtype='barstacked', rwidth=0.8) From f262e62165f6caadd638c8cd0c97ba8a47f6a5c9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 16:01:17 +0800 Subject: [PATCH 0190/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Stairs Demo.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Matplotlib Official Primer/Stairs Demo.py b/Matplotlib Official Primer/Stairs Demo.py index 9bb8d668..5a470d92 100644 --- a/Matplotlib Official Primer/Stairs Demo.py +++ b/Matplotlib Official Primer/Stairs Demo.py @@ -12,11 +12,10 @@ axs[0].stairs(h, edges + 10, baseline=None, label='No edges') axs[0].set_title("Step Histograms") -axs[1].stairs(np.arange(1, 6, 1), fill=True, - label='Filled histogram\nw/ automatic edges') -axs[1].stairs(np.arange(1, 6, 1)*0.3, np.arange(2, 8, 1), - orientation='horizontal', hatch='//', +axs[1].stairs(np.arange(1, 6, 1), fill=True, label='Filled histogram\nw/ automatic edges') +axs[1].stairs(np.arange(1, 6, 1)*0.3, np.arange(2, 8, 1), orientation='horizontal', hatch='//', label='Hatched histogram\nw/ horizontal orientation') + axs[1].set_title("Filled histogram") patch = StepPatch(values=[1, 2, 3, 2, 1], From 9430bf63498843a1809e44a2fcaaf9689056fc22 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 16:26:29 +0800 Subject: [PATCH 0191/2002] Committed 2021/09/25 --- .../Grouped bar chart with labels.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Matplotlib Official Primer/Grouped bar chart with labels.py diff --git a/Matplotlib Official Primer/Grouped bar chart with labels.py b/Matplotlib Official Primer/Grouped bar chart with labels.py new file mode 100644 index 00000000..6b4073fe --- /dev/null +++ b/Matplotlib Official Primer/Grouped bar chart with labels.py @@ -0,0 +1,30 @@ +import matplotlib.pyplot as plt +import numpy as np + + +labels = ['G1', 'G2', 'G3', 'G4', 'G5'] +men_means = [20, 34, 30, 35, 27] +women_means = [25, 32, 34, 20, 25] + +x = np.arange(len(labels)) # the label locations +width = 0.35 # the width of the bars + +fig, ax = plt.subplots() +rects1 = ax.bar(x - width/2, men_means, width, label='Men') +rects2 = ax.bar(x + width/2, women_means, width, label='Women') + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('Scores') +ax.set_title('Scores by group and gender') +ax.set_xticks(x) +ax.set_xticklabels(labels) +ax.legend() + +ax.bar_label(rects1, padding=3) +ax.bar_label(rects2, padding=3) + +fig.tight_layout() + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html From 4d75da1e1f4eee85c5c13a7234e6769a6dd95c6a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 16:26:51 +0800 Subject: [PATCH 0192/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Grouped bar chart with labels.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Matplotlib Official Primer/Grouped bar chart with labels.py b/Matplotlib Official Primer/Grouped bar chart with labels.py index 6b4073fe..9d7a3cb4 100644 --- a/Matplotlib Official Primer/Grouped bar chart with labels.py +++ b/Matplotlib Official Primer/Grouped bar chart with labels.py @@ -1,7 +1,6 @@ import matplotlib.pyplot as plt import numpy as np - labels = ['G1', 'G2', 'G3', 'G4', 'G5'] men_means = [20, 34, 30, 35, 27] women_means = [25, 32, 34, 20, 25] From 9ae071bf64852d7e7a42e2db2bf0cdf0505c8f49 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 16:37:39 +0800 Subject: [PATCH 0193/2002] Committed 2021/09/25 --- .../Display the value of bar on each bar.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Supplementary materials/Matplotlib/Display the value of bar on each bar.py diff --git a/Supplementary materials/Matplotlib/Display the value of bar on each bar.py b/Supplementary materials/Matplotlib/Display the value of bar on each bar.py new file mode 100644 index 00000000..70559d62 --- /dev/null +++ b/Supplementary materials/Matplotlib/Display the value of bar on each bar.py @@ -0,0 +1,18 @@ +import numpy as np +import matplotlib.pyplot as plt + +x = [u'INFO', u'CUISINE', u'TYPE_OF_PLACE', u'DRINK', u'PLACE', u'MEAL_TIME', u'DISH', u'NEIGHBOURHOOD'] +y = [160, 167, 137, 18, 120, 36, 155, 130] +ind = np.arange(len(y)) + +fig, ax = plt.subplots() +ax.barh(ind, y) +ax.set_yticks(ind) +ax.set_yticklabels(x) + +# new helper method to auto-label bars +ax.bar_label(ax.containers[0]) + +plt.show() + +# Source: https://stackoverflow.com/a/68107816/14900011 From cc3c1817ee4e674d8ae26556da578a42e34ccb82 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 16:40:12 +0800 Subject: [PATCH 0194/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Bar_label().py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Matplotlib Official Primer/Bar_label().py diff --git a/Matplotlib Official Primer/Bar_label().py b/Matplotlib Official Primer/Bar_label().py new file mode 100644 index 00000000..7c21629a --- /dev/null +++ b/Matplotlib Official Primer/Bar_label().py @@ -0,0 +1,2 @@ +# Reference: +# https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar_label.html#matplotlib.axes.Axes.bar_label \ No newline at end of file From 12e02944665a62157eea7e8e94cd08d47fad85a5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 17:50:56 +0800 Subject: [PATCH 0195/2002] Committed 2021/09/25 --- .../Annotations/Placing text boxes.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/Placing text boxes.py diff --git a/Matplotlib Official Primer/Annotations/Placing text boxes.py b/Matplotlib Official Primer/Annotations/Placing text boxes.py new file mode 100644 index 00000000..96acc692 --- /dev/null +++ b/Matplotlib Official Primer/Annotations/Placing text boxes.py @@ -0,0 +1,24 @@ +import numpy as np +import matplotlib.pyplot as plt + +np.random.seed(19680801) + +fig, ax = plt.subplots() +x = 30*np.random.randn(10000) +mu = x.mean() +median = np.median(x) +sigma = x.std() +textstr = '\n'.join(( + r'$\mu=%.2f$' % (mu, ), + r'$\mathrm{median}=%.2f$' % (median, ), + r'$\sigma=%.2f$' % (sigma, ))) + +ax.hist(x, 50) +# these are matplotlib.patch.Patch properties +props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) + +# place a text box in upper left in axes coords +ax.text(0.05, 0.95, textstr, transform=ax.transAxes, fontsize=14, + verticalalignment='top', bbox=props) + +plt.show() From ab100b4426c4a7a70e890dca233a3fae0998a074 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 17:51:34 +0800 Subject: [PATCH 0196/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Annotations/Placing text boxes.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Matplotlib Official Primer/Annotations/Placing text boxes.py b/Matplotlib Official Primer/Annotations/Placing text boxes.py index 96acc692..8ed9ad4a 100644 --- a/Matplotlib Official Primer/Annotations/Placing text boxes.py +++ b/Matplotlib Official Primer/Annotations/Placing text boxes.py @@ -22,3 +22,6 @@ verticalalignment='top', bbox=props) plt.show() + +# Reference: +# https://matplotlib.org/stable/gallery/text_labels_and_annotations/placing_text_boxes.html#sphx-glr-gallery-text-labels-and-annotations-placing-text-boxes-py From 3a5c63eb3b9a1636a07eca6da575179b5aad153b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 17:56:45 +0800 Subject: [PATCH 0197/2002] Committed 2021/09/25 --- .../Histogram with trendline.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Matplotlib Official Primer/Histogram with trendline.py diff --git a/Matplotlib Official Primer/Histogram with trendline.py b/Matplotlib Official Primer/Histogram with trendline.py new file mode 100644 index 00000000..12e06185 --- /dev/null +++ b/Matplotlib Official Primer/Histogram with trendline.py @@ -0,0 +1,14 @@ +import matplotlib.pyplot as plt +import numpy as np + +random_state = np.random.RandomState(19680801) +X = random_state.randn(10000) + +fig, ax = plt.subplots() +ax.hist(X, bins=25, density=True) +x = np.linspace(-5, 5, 1000) +ax.plot(x, 1 / np.sqrt(2*np.pi) * np.exp(-(x**2)/2), linewidth=4) +ax.set_xticks([]) +ax.set_yticks([]) + +plt.show() From 898a47f16024652e2f3e34bf78dd2432dabae4af Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 17:57:14 +0800 Subject: [PATCH 0198/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Histogram with trendline.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Matplotlib Official Primer/Histogram with trendline.py b/Matplotlib Official Primer/Histogram with trendline.py index 12e06185..3e997178 100644 --- a/Matplotlib Official Primer/Histogram with trendline.py +++ b/Matplotlib Official Primer/Histogram with trendline.py @@ -12,3 +12,6 @@ ax.set_yticks([]) plt.show() + +# Reference: +# https://matplotlib.org/stable/gallery/frontpage/histogram.html#sphx-glr-gallery-frontpage-histogram-py From 7d0ea5e8f755ca9c48576b24de40be3e74cf2384 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 18:11:28 +0800 Subject: [PATCH 0199/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Broken Barh.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Matplotlib Official Primer/Broken Barh.py diff --git a/Matplotlib Official Primer/Broken Barh.py b/Matplotlib Official Primer/Broken Barh.py new file mode 100644 index 00000000..d72be407 --- /dev/null +++ b/Matplotlib Official Primer/Broken Barh.py @@ -0,0 +1,22 @@ +import matplotlib.pyplot as plt + +fig, ax = plt.subplots() +ax.broken_barh([(110, 30), (150, 10)], (10, 9), facecolors='tab:blue') +ax.broken_barh([(10, 50), (100, 20), (130, 10)], (20, 9), + facecolors=('tab:orange', 'tab:green', 'tab:red')) +ax.set_ylim(5, 35) +ax.set_xlim(0, 200) +ax.set_xlabel('seconds since start') +ax.set_yticks([15, 25]) +ax.set_yticklabels(['Bill', 'Jim']) +ax.grid(True) +ax.annotate('race interrupted', (61, 25), + xytext=(0.8, 0.9), textcoords='axes fraction', + arrowprops=dict(facecolor='black', shrink=0.05), + fontsize=16, + horizontalalignment='right', verticalalignment='top') + +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/broken_barh.html#sphx-glr-gallery-lines-bars-and-markers-broken-barh-py From 1c2fd20ef94c01c8a792b717ce923a1b70eb71aa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 18:17:02 +0800 Subject: [PATCH 0200/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Hat graph.py | 66 +++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Matplotlib Official Primer/Hat graph.py diff --git a/Matplotlib Official Primer/Hat graph.py b/Matplotlib Official Primer/Hat graph.py new file mode 100644 index 00000000..ef0cabb3 --- /dev/null +++ b/Matplotlib Official Primer/Hat graph.py @@ -0,0 +1,66 @@ +import numpy as np +import matplotlib.pyplot as plt + + +def hat_graph(ax, xlabels, values, group_labels): + """ + Create a hat graph. + + Parameters + ---------- + ax : matplotlib.axes.Axes + The Axes to plot into. + xlabels : list of str + The category names to be displayed on the x-axis. + values : (M, N) array-like + The data values. + Rows are the groups (len(group_labels) == M). + Columns are the categories (len(xlabels) == N). + group_labels : list of str + The group labels displayed in the legend. + """ + + def label_bars(heights, rects): + """Attach a text label on top of each bar.""" + for height, rect in zip(heights, rects): + ax.annotate(f'{height}', + xy=(rect.get_x() + rect.get_width() / 2, height), + xytext=(0, 4), # 4 points vertical offset. + textcoords='offset points', + ha='center', va='bottom') + + values = np.asarray(values) + x = np.arange(values.shape[1]) + ax.set_xticks(x) + ax.set_xticklabels(xlabels) + spacing = 0.3 # spacing between hat groups + width = (1 - spacing) / values.shape[0] + heights0 = values[0] + for i, (heights, group_label) in enumerate(zip(values, group_labels)): + style = {'fill': False} if i == 0 else {'edgecolor': 'black'} + rects = ax.bar(x - spacing/2 + i * width, heights - heights0, + width, bottom=heights0, label=group_label, **style) + label_bars(heights, rects) + + +# initialise labels and a numpy array make sure you have +# N labels of N number of values in the array +xlabels = ['I', 'II', 'III', 'IV', 'V'] +playerA = np.array([5, 15, 22, 20, 25]) +playerB = np.array([25, 32, 34, 30, 27]) + +fig, ax = plt.subplots() +hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B']) + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_xlabel('Games') +ax.set_ylabel('Score') +ax.set_ylim(0, 60) +ax.set_title('Scores by number of game and players') +ax.legend() + +fig.tight_layout() +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/hat_graph.html#sphx-glr-gallery-lines-bars-and-markers-hat-graph-py From afb155dbb1081e448689f2759e4c683fdfb1d5d8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 18:21:34 +0800 Subject: [PATCH 0201/2002] Committed 2021/09/25 --- ... a timeline with lines, dates, and text.py | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Matplotlib Official Primer/Creating a timeline with lines, dates, and text.py diff --git a/Matplotlib Official Primer/Creating a timeline with lines, dates, and text.py b/Matplotlib Official Primer/Creating a timeline with lines, dates, and text.py new file mode 100644 index 00000000..257d3b39 --- /dev/null +++ b/Matplotlib Official Primer/Creating a timeline with lines, dates, and text.py @@ -0,0 +1,78 @@ +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.dates as mdates +from datetime import datetime + +try: + # Try to fetch a list of Matplotlib releases and their dates + # from https://api.github.com/repos/matplotlib/matplotlib/releases + import urllib.request + import json + + url = 'https://api.github.com/repos/matplotlib/matplotlib/releases' + url += '?per_page=100' + data = json.loads(urllib.request.urlopen(url, timeout=.4).read().decode()) + + dates = [] + names = [] + for item in data: + if 'rc' not in item['tag_name'] and 'b' not in item['tag_name']: + dates.append(item['published_at'].split("T")[0]) + names.append(item['tag_name']) + # Convert date strings (e.g. 2014-10-18) to datetime + dates = [datetime.strptime(d, "%Y-%m-%d") for d in dates] + +except Exception: + # In case the above fails, e.g. because of missing internet connection + # use the following lists as fallback. + names = ['v2.2.4', 'v3.0.3', 'v3.0.2', 'v3.0.1', 'v3.0.0', 'v2.2.3', + 'v2.2.2', 'v2.2.1', 'v2.2.0', 'v2.1.2', 'v2.1.1', 'v2.1.0', + 'v2.0.2', 'v2.0.1', 'v2.0.0', 'v1.5.3', 'v1.5.2', 'v1.5.1', + 'v1.5.0', 'v1.4.3', 'v1.4.2', 'v1.4.1', 'v1.4.0'] + + dates = ['2019-02-26', '2019-02-26', '2018-11-10', '2018-11-10', + '2018-09-18', '2018-08-10', '2018-03-17', '2018-03-16', + '2018-03-06', '2018-01-18', '2017-12-10', '2017-10-07', + '2017-05-10', '2017-05-02', '2017-01-17', '2016-09-09', + '2016-07-03', '2016-01-10', '2015-10-29', '2015-02-16', + '2014-10-26', '2014-10-18', '2014-08-26'] + + # Convert date strings (e.g. 2014-10-18) to datetime + dates = [datetime.strptime(d, "%Y-%m-%d") for d in dates] + + + +# Choose some nice levels +levels = np.tile([-5, 5, -3, 3, -1, 1], + int(np.ceil(len(dates)/6)))[:len(dates)] + +# Create figure and plot a stem plot with the date +fig, ax = plt.subplots(figsize=(8.8, 4), constrained_layout=True) +ax.set(title="Matplotlib release dates") + +ax.vlines(dates, 0, levels, color="tab:red") # The vertical stems. +ax.plot(dates, np.zeros_like(dates), "-o", + color="k", markerfacecolor="w") # Baseline and markers on it. + +# annotate lines +for d, l, r in zip(dates, levels, names): + ax.annotate(r, xy=(d, l), + xytext=(-3, np.sign(l)*3), textcoords="offset points", + horizontalalignment="right", + verticalalignment="bottom" if l > 0 else "top") + +# format xaxis with 4 month intervals +ax.xaxis.set_major_locator(mdates.MonthLocator(interval=4)) +ax.xaxis.set_major_formatter(mdates.DateFormatter("%b %Y")) +plt.setp(ax.get_xticklabels(), rotation=30, ha="right") + +# remove y axis and spines +ax.yaxis.set_visible(False) +ax.spines[["left", "top", "right"]].set_visible(False) + +ax.margins(y=0.1) +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/timeline.html#sphx-glr-gallery-lines-bars-and-markers-timeline-py + From 74b6545cd093bfeeb219e5ae1cea85fec7f6b140 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 18:24:51 +0800 Subject: [PATCH 0202/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Pie Bar.py | 66 +++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Matplotlib Official Primer/Pie Bar.py diff --git a/Matplotlib Official Primer/Pie Bar.py b/Matplotlib Official Primer/Pie Bar.py new file mode 100644 index 00000000..65e05516 --- /dev/null +++ b/Matplotlib Official Primer/Pie Bar.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +from matplotlib.patches import ConnectionPatch +import numpy as np + +# make figure and assign axis objects +fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9, 5)) +fig.subplots_adjust(wspace=0) + +# pie chart parameters +ratios = [.27, .56, .17] +labels = ['Approve', 'Disapprove', 'Undecided'] +explode = [0.1, 0, 0] +# rotate so that first wedge is split by the x-axis +angle = -180 * ratios[0] +ax1.pie(ratios, autopct='%1.1f%%', startangle=angle, + labels=labels, explode=explode) + +# bar chart parameters + +xpos = 0 +bottom = 0 +ratios = [.33, .54, .07, .06] +width = .2 +colors = [[.1, .3, .5], [.1, .3, .3], [.1, .3, .7], [.1, .3, .9]] + +for j in range(len(ratios)): + height = ratios[j] + ax2.bar(xpos, height, width, bottom=bottom, color=colors[j]) + ypos = bottom + ax2.patches[j].get_height() / 2 + bottom += height + ax2.text(xpos, ypos, "%d%%" % (ax2.patches[j].get_height() * 100), + ha='center') + +ax2.set_title('Age of approvers') +ax2.legend(('50-65', 'Over 65', '35-49', 'Under 35')) +ax2.axis('off') +ax2.set_xlim(- 2.5 * width, 2.5 * width) + +# use ConnectionPatch to draw lines between the two plots +# get the wedge data +theta1, theta2 = ax1.patches[0].theta1, ax1.patches[0].theta2 +center, r = ax1.patches[0].center, ax1.patches[0].r +bar_height = sum([item.get_height() for item in ax2.patches]) + +# draw top connecting line +x = r * np.cos(np.pi / 180 * theta2) + center[0] +y = r * np.sin(np.pi / 180 * theta2) + center[1] +con = ConnectionPatch(xyA=(-width / 2, bar_height), coordsA=ax2.transData, + xyB=(x, y), coordsB=ax1.transData) +con.set_color([0, 0, 0]) +con.set_linewidth(4) +ax2.add_artist(con) + +# draw bottom connecting line +x = r * np.cos(np.pi / 180 * theta1) + center[0] +y = r * np.sin(np.pi / 180 * theta1) + center[1] +con = ConnectionPatch(xyA=(-width / 2, 0), coordsA=ax2.transData, + xyB=(x, y), coordsB=ax1.transData) +con.set_color([0, 0, 0]) +ax2.add_artist(con) +con.set_linewidth(4) + +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/pie_and_polar_charts/bar_of_pie.html#sphx-glr-gallery-pie-and-polar-charts-bar-of-pie-py \ No newline at end of file From 0649a513e64d6ba57feb431f6e600e34e295fbe0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 18:26:41 +0800 Subject: [PATCH 0203/2002] Committed 2021/09/25 --- .../Labeling a pie and a donut.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Matplotlib Official Primer/Labeling a pie and a donut.py diff --git a/Matplotlib Official Primer/Labeling a pie and a donut.py b/Matplotlib Official Primer/Labeling a pie and a donut.py new file mode 100644 index 00000000..4ef4739d --- /dev/null +++ b/Matplotlib Official Primer/Labeling a pie and a donut.py @@ -0,0 +1,35 @@ +import numpy as np +import matplotlib.pyplot as plt + +fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) + +recipe = ["375 g flour", + "75 g sugar", + "250 g butter", + "300 g berries"] + +data = [float(x.split()[0]) for x in recipe] +ingredients = [x.split()[-1] for x in recipe] + + +def func(pct, allvals): + absolute = int(round(pct/100.*np.sum(allvals))) + return "{:.1f}%\n({:d} g)".format(pct, absolute) + + +wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), + textprops=dict(color="w")) + +ax.legend(wedges, ingredients, + title="Ingredients", + loc="center left", + bbox_to_anchor=(1, 0, 0.5, 1)) + +plt.setp(autotexts, size=8, weight="bold") + +ax.set_title("Matplotlib bakery: A pie") + +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py \ No newline at end of file From 357302a42c1126633f70492edbfda22201d03258 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 18:28:28 +0800 Subject: [PATCH 0204/2002] Committed 2021/09/25 --- .../Annotations/Labeling a pie and a donut.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/Labeling a pie and a donut.py diff --git a/Matplotlib Official Primer/Annotations/Labeling a pie and a donut.py b/Matplotlib Official Primer/Annotations/Labeling a pie and a donut.py new file mode 100644 index 00000000..bde31d4a --- /dev/null +++ b/Matplotlib Official Primer/Annotations/Labeling a pie and a donut.py @@ -0,0 +1,36 @@ +import numpy as np +import matplotlib.pyplot as plt + +fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) + +recipe = ["225 g flour", + "90 g sugar", + "1 egg", + "60 g butter", + "100 ml milk", + "1/2 package of yeast"] + +data = [225, 90, 50, 60, 100, 5] + +wedges, texts = ax.pie(data, wedgeprops=dict(width=0.5), startangle=-40) + +bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72) +kw = dict(arrowprops=dict(arrowstyle="-"), + bbox=bbox_props, zorder=0, va="center") + +for i, p in enumerate(wedges): + ang = (p.theta2 - p.theta1)/2. + p.theta1 + y = np.sin(np.deg2rad(ang)) + x = np.cos(np.deg2rad(ang)) + horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))] + connectionstyle = "angle,angleA=0,angleB={}".format(ang) + kw["arrowprops"].update({"connectionstyle": connectionstyle}) + ax.annotate(recipe[i], xy=(x, y), xytext=(1.35*np.sign(x), 1.4*y), + horizontalalignment=horizontalalignment, **kw) + +ax.set_title("Matplotlib bakery: A donut") + +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py From f51ddfb02857198dc564271024f5c1504eb7c837 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 18:37:22 +0800 Subject: [PATCH 0205/2002] Committed 2021/09/25 --- Matplotlib Official Primer/Catalogs.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Matplotlib Official Primer/Catalogs.py diff --git a/Matplotlib Official Primer/Catalogs.py b/Matplotlib Official Primer/Catalogs.py new file mode 100644 index 00000000..aad4d34e --- /dev/null +++ b/Matplotlib Official Primer/Catalogs.py @@ -0,0 +1,8 @@ +# This gallery contains examples of the many things you can do with Matplotlib. +# Click on any image to see the full image and source code.[1] + +# Most of the examples use the object-oriented approach (except for the pyplot section).[2] + +# References: +# 1. https://matplotlib.org/stable/gallery/index.html#examples-index +# 2. https://matplotlib.org/stable/api/index.html From b087e96663f69a17d42d50155d6700b9c33a2071 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 18:49:24 +0800 Subject: [PATCH 0206/2002] Committed 2021/09/25 --- .../Bachelor's degrees by gender.py | 106 ++++++++++++++++++ .../Annotations/annotate().py | 2 + 2 files changed, 108 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/Bachelor's degrees by gender.py create mode 100644 Matplotlib Official Primer/Annotations/annotate().py diff --git a/Matplotlib Official Primer/Annotations/Bachelor's degrees by gender.py b/Matplotlib Official Primer/Annotations/Bachelor's degrees by gender.py new file mode 100644 index 00000000..50c5c015 --- /dev/null +++ b/Matplotlib Official Primer/Annotations/Bachelor's degrees by gender.py @@ -0,0 +1,106 @@ +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.cbook import get_sample_data + + +fname = get_sample_data('percent_bachelors_degrees_women_usa.csv', + asfileobj=False) +gender_degree_data = np.genfromtxt(fname, delimiter=',', names=True) + +# You typically want your plot to be ~1.33x wider than tall. This plot +# is a rare exception because of the number of lines being plotted on it. +# Common sizes: (10, 7.5) and (12, 9) +fig, ax = plt.subplots(1, 1, figsize=(12, 14)) + +# These are the colors that will be used in the plot +ax.set_prop_cycle(color=[ + '#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', + '#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94', + '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', + '#17becf', '#9edae5']) + +# Remove the plot frame lines. They are unnecessary here. +ax.spines[:].set_visible(False) + +# Ensure that the axis ticks only show up on the bottom and left of the plot. +# Ticks on the right and top of the plot are generally unnecessary. +ax.xaxis.tick_bottom() +ax.yaxis.tick_left() + +fig.subplots_adjust(left=.06, right=.75, bottom=.02, top=.94) +# Limit the range of the plot to only where the data is. +# Avoid unnecessary whitespace. +ax.set_xlim(1969.5, 2011.1) +ax.set_ylim(-0.25, 90) + +# Set a fixed location and format for ticks. +ax.set_xticks(range(1970, 2011, 10)) +ax.set_yticks(range(0, 91, 10)) + +# Use automatic StrMethodFormatter creation +ax.xaxis.set_major_formatter('{x:.0f}') +ax.yaxis.set_major_formatter('{x:.0f}%') + +# Provide tick lines across the plot to help your viewers trace along +# the axis ticks. Make sure that the lines are light and small so they +# don't obscure the primary data lines. +ax.grid(True, 'major', 'y', ls='--', lw=.5, c='k', alpha=.3) + +# Remove the tick marks; they are unnecessary with the tick lines we just +# plotted. Make sure your axis ticks are large enough to be easily read. +# You don't want your viewers squinting to read your plot. +ax.tick_params(axis='both', which='both', labelsize=14, + bottom=False, top=False, labelbottom=True, + left=False, right=False, labelleft=True) + +# Now that the plot is prepared, it's time to actually plot the data! +# Note that I plotted the majors in order of the highest % in the final year. +majors = ['Health Professions', 'Public Administration', 'Education', + 'Psychology', 'Foreign Languages', 'English', + 'Communications\nand Journalism', 'Art and Performance', 'Biology', + 'Agriculture', 'Social Sciences and History', 'Business', + 'Math and Statistics', 'Architecture', 'Physical Sciences', + 'Computer Science', 'Engineering'] + +y_offsets = {'Foreign Languages': 0.5, 'English': -0.5, + 'Communications\nand Journalism': 0.75, + 'Art and Performance': -0.25, 'Agriculture': 1.25, + 'Social Sciences and History': 0.25, 'Business': -0.75, + 'Math and Statistics': 0.75, 'Architecture': -0.75, + 'Computer Science': 0.75, 'Engineering': -0.25} + +for column in majors: + + # Plot each line separately with its own color. + column_rec_name = column.replace('\n', '_').replace(' ', '_') + + line, = ax.plot('Year', column_rec_name, data=gender_degree_data, + lw=2.5) + + # Add a text label to the right end of every line. Most of the code below + # is adding specific offsets y position because some labels overlapped. + y_pos = gender_degree_data[column_rec_name][-1] - 0.5 + + if column in y_offsets: + y_pos += y_offsets[column] + + # Again, make sure that all labels are large enough to be easily read + # by the viewer. + ax.text(2011.5, y_pos, column, fontsize=14, color=line.get_color()) + +# Make the title big enough so it spans the entire plot, but don't make it +# so big that it requires two lines to show. + +# Note that if the title is descriptive enough, it is unnecessary to include +# axis labels; they are self-evident, in this plot's case. +fig.suptitle("Percentage of Bachelor's degrees conferred to women in " + "the U.S.A. by major (1970-2011)", fontsize=18, ha="center") + +# Finally, save the figure as a PNG. +# You can also save it as a PDF, JPEG, etc. +# Just change the file extension in this call. +# fig.savefig('percent-bachelors-degrees-women-usa.png', bbox_inches='tight') +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/showcase/bachelors_degrees_by_gender.html#sphx-glr-gallery-showcase-bachelors-degrees-by-gender-py diff --git a/Matplotlib Official Primer/Annotations/annotate().py b/Matplotlib Official Primer/Annotations/annotate().py new file mode 100644 index 00000000..0fdef487 --- /dev/null +++ b/Matplotlib Official Primer/Annotations/annotate().py @@ -0,0 +1,2 @@ +# Reference: +# https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.annotate.html#matplotlib.axes.Axes.annotate \ No newline at end of file From fe0fbdcac70c5bec0aa3bd5142e69ddca2c02fee Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 19:21:25 +0800 Subject: [PATCH 0207/2002] Committed 2021/09/25 --- ...Total_population_composition_and_housing_price_trendline.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py diff --git a/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py b/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py new file mode 100644 index 00000000..f652b92a --- /dev/null +++ b/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py @@ -0,0 +1,3 @@ +import matplotlib.pyplot as plt + + From a534dcd2c761386a513efa3159b498113ca4f7db Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 21:18:49 +0800 Subject: [PATCH 0208/2002] Committed 2021/09/25 --- ...composition_and_housing_price_trendline.py | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py b/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py index f652b92a..ddbb0c0a 100644 --- a/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py +++ b/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py @@ -1,3 +1,43 @@ import matplotlib.pyplot as plt +year = [2010, "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + ] From cd4f288589adb1361d8a0e76b96ca0a7ed7b86ee Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 22:27:29 +0800 Subject: [PATCH 0209/2002] Committed 2021/09/25 --- ...composition_and_housing_price_trendline.py | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py b/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py index ddbb0c0a..085f83c1 100644 --- a/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py +++ b/The attainments and realizations of my dreams/Total_population_composition_and_housing_price_trendline.py @@ -1,6 +1,6 @@ import matplotlib.pyplot as plt -year = [2010, "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 @@ -13,6 +13,7 @@ (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 ] centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 @@ -26,6 +27,7 @@ (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 ] southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 @@ -39,5 +41,49 @@ (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 ] +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +plt.ylim(23000000, 23700000) + +plt.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) + +plt.grid(linewidth=0.3) +plt.xlabel("Year") +plt.ylabel("Population") +plt.title("Taiwan's population change from 2010 - 2021/08 ") + +plt.show() From fded056ba6b9061e779e904e2699224e4c65d61b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 22:49:03 +0800 Subject: [PATCH 0210/2002] Committed 2021/09/25 --- .../Total_population_and_housing_price.py | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 The attainments and realizations of my dreams/Total_population_and_housing_price.py diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price.py b/The attainments and realizations of my dreams/Total_population_and_housing_price.py new file mode 100644 index 00000000..085f83c1 --- /dev/null +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price.py @@ -0,0 +1,89 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +plt.ylim(23000000, 23700000) + +plt.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) + +plt.grid(linewidth=0.3) +plt.xlabel("Year") +plt.ylabel("Population") +plt.title("Taiwan's population change from 2010 - 2021/08 ") + +plt.show() From a3c9af01020602fd4d4101605c105ccc733a4660 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 23:14:35 +0800 Subject: [PATCH 0211/2002] Committed 2021/09/25 --- .../Total_population_and_housing_price.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price.py b/The attainments and realizations of my dreams/Total_population_and_housing_price.py index 085f83c1..24fa7994 100644 --- a/The attainments and realizations of my dreams/Total_population_and_housing_price.py +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price.py @@ -74,6 +74,22 @@ x = range(10, 22) +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] + figure, axes = plt.subplots() axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) @@ -81,6 +97,8 @@ plt.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +plt.plot(housing_index) + plt.grid(linewidth=0.3) plt.xlabel("Year") plt.ylabel("Population") From 5bd520c83c590aeb759b8b524d29c91ed80f964c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 23:18:00 +0800 Subject: [PATCH 0212/2002] Committed 2021/09/25 --- .../Total_population_and_housing_price.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price.py b/The attainments and realizations of my dreams/Total_population_and_housing_price.py index 24fa7994..40712e30 100644 --- a/The attainments and realizations of my dreams/Total_population_and_housing_price.py +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price.py @@ -97,7 +97,7 @@ plt.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) -plt.plot(housing_index) +plt.plot(x, housing_index) plt.grid(linewidth=0.3) plt.xlabel("Year") From 0f96043ae0aaa379c2d2880e4b11188696bcc9ab Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Sep 2021 23:26:21 +0800 Subject: [PATCH 0213/2002] Committed 2021/09/25 --- .../Total_population_and_housing_price.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price.py b/The attainments and realizations of my dreams/Total_population_and_housing_price.py index 40712e30..7c8d5211 100644 --- a/The attainments and realizations of my dreams/Total_population_and_housing_price.py +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price.py @@ -105,3 +105,7 @@ plt.title("Taiwan's population change from 2010 - 2021/08 ") plt.show() + +# References: +# 1. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi +# 2. From 5c30cd15941048adc04965134277aeb50942eb04 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 00:20:34 +0800 Subject: [PATCH 0214/2002] Committed 2021/09/25 --- .../Total_population_and_housing_price2.py | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 The attainments and realizations of my dreams/Total_population_and_housing_price2.py diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price2.py b/The attainments and realizations of my dreams/Total_population_and_housing_price2.py new file mode 100644 index 00000000..7c8d5211 --- /dev/null +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price2.py @@ -0,0 +1,111 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +plt.ylim(23000000, 23700000) + +plt.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) + +plt.plot(x, housing_index) + +plt.grid(linewidth=0.3) +plt.xlabel("Year") +plt.ylabel("Population") +plt.title("Taiwan's population change from 2010 - 2021/08 ") + +plt.show() + +# References: +# 1. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi +# 2. From 26d98cef85cace03c4d36a5f3284df6cd0cfefa1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 00:45:58 +0800 Subject: [PATCH 0215/2002] Committed 2021/09/25 --- .../Total_population_and_housing_price2.py | 16 ++- .../Total_population_and_housing_price3.py | 119 ++++++++++++++++++ 2 files changed, 129 insertions(+), 6 deletions(-) create mode 100644 The attainments and realizations of my dreams/Total_population_and_housing_price3.py diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price2.py b/The attainments and realizations of my dreams/Total_population_and_housing_price2.py index 7c8d5211..936c5188 100644 --- a/The attainments and realizations of my dreams/Total_population_and_housing_price2.py +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price2.py @@ -93,17 +93,21 @@ figure, axes = plt.subplots() axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) -plt.ylim(23000000, 23700000) +axes.set_ylim(23000000, 23700000) +axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +axes.set_xlabel("Year") +axes.set_ylabel("Population") -plt.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) - -plt.plot(x, housing_index) +axes2 = axes.twinx() +axes2.set_ylabel("Housing Price Index (2010/4 - 2021/04)") +axes2.plot(x, housing_index, color='gold') +axes2.tick_params(axis='y', labelcolor='goldenrod') plt.grid(linewidth=0.3) -plt.xlabel("Year") -plt.ylabel("Population") plt.title("Taiwan's population change from 2010 - 2021/08 ") +figure.tight_layout() + plt.show() # References: diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price3.py b/The attainments and realizations of my dreams/Total_population_and_housing_price3.py new file mode 100644 index 00000000..90d8ee78 --- /dev/null +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price3.py @@ -0,0 +1,119 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +axes.set_ylim(23000000, 23700000) +axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +axes.set_xlabel("Year\n" + "References:\n" + "1. https://www.ris.gov.tw/app/portal/346 \n" + "2. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi") + +axes.set_ylabel("Population (Unit: 10 millions)") + +axes2 = axes.twinx() +axes2.set_ylabel("Housing Price Index (2010/4 - 2021/04)") +axes2.plot(x, housing_index, color='gold') +axes2.tick_params(axis='y', labelcolor='goldenrod') + +plt.grid(linewidth=0.3) +plt.title("Taiwan's population change from 2010 - 2021/08 ") + +figure.tight_layout() + +plt.show() + +# References: +# 1. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi +# 2. From 61d8cf9a5d93d37a14577adca8585af73c1732ef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 00:50:51 +0800 Subject: [PATCH 0216/2002] Committed 2021/09/25 --- .../Total_population_and_housing_price3.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price3.py b/The attainments and realizations of my dreams/Total_population_and_housing_price3.py index 90d8ee78..d75ee471 100644 --- a/The attainments and realizations of my dreams/Total_population_and_housing_price3.py +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price3.py @@ -103,7 +103,9 @@ axes.set_ylabel("Population (Unit: 10 millions)") axes2 = axes.twinx() -axes2.set_ylabel("Housing Price Index (2010/4 - 2021/04)") +axes2.set_ylabel("Yearly Housing Price Index (2010/4 - 2021/04) \n" + "Method: (Guotai + Xinyi) / 2", color='goldenrod') + axes2.plot(x, housing_index, color='gold') axes2.tick_params(axis='y', labelcolor='goldenrod') From eff2eaa13966812b60343af871a7bbaeac8cee74 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 01:01:28 +0800 Subject: [PATCH 0217/2002] Committed 2021/09/25 --- .../Total_population_and_housing_price3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price3.py b/The attainments and realizations of my dreams/Total_population_and_housing_price3.py index d75ee471..ef7a2f8a 100644 --- a/The attainments and realizations of my dreams/Total_population_and_housing_price3.py +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price3.py @@ -110,7 +110,7 @@ axes2.tick_params(axis='y', labelcolor='goldenrod') plt.grid(linewidth=0.3) -plt.title("Taiwan's population change from 2010 - 2021/08 ") +plt.title("Taiwan's population change from 2010 - 2021/08 \n in relation to Annual Housing Price Index") figure.tight_layout() From d8575eba68860b71f1baaff6938b6256767c94e5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 01:30:47 +0800 Subject: [PATCH 0218/2002] Committed 2021/09/25 --- .../Total_population_and_housing_price3.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Total_population_and_housing_price3.py b/The attainments and realizations of my dreams/Total_population_and_housing_price3.py index ef7a2f8a..2bc06bd4 100644 --- a/The attainments and realizations of my dreams/Total_population_and_housing_price3.py +++ b/The attainments and realizations of my dreams/Total_population_and_housing_price3.py @@ -98,7 +98,8 @@ axes.set_xlabel("Year\n" "References:\n" "1. https://www.ris.gov.tw/app/portal/346 \n" - "2. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi") + "2. https://www.macromicro.me/collections/15/\n" + "tw-housing-relative/124/tw-housing-price-sinyi") axes.set_ylabel("Population (Unit: 10 millions)") From 25d877e0e060a49422348053d2ced371e732dc84 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 11:49:23 +0800 Subject: [PATCH 0219/2002] Committed 2021/09/26 --- .../Population_composition.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition.py diff --git a/The attainments and realizations of my dreams/Population_composition.py b/The attainments and realizations of my dreams/Population_composition.py new file mode 100644 index 00000000..5bb80735 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt +import numpy as np + + From 6a94aef9d296a4af79d2655e15444edb94f9fd97 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 12:02:02 +0800 Subject: [PATCH 0220/2002] Committed 2021/09/26 --- .../Population_composition.py | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/The attainments and realizations of my dreams/Population_composition.py b/The attainments and realizations of my dreams/Population_composition.py index 5bb80735..1cb59342 100644 --- a/The attainments and realizations of my dreams/Population_composition.py +++ b/The attainments and realizations of my dreams/Population_composition.py @@ -1,4 +1,80 @@ import matplotlib.pyplot as plt import numpy as np +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + From 1c6411fcef0133380baa8225996ff66337362f07 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 12:24:25 +0800 Subject: [PATCH 0221/2002] Committed 2021/09/26 --- .../Population_composition.py | 17 ++++ .../Population_composition_2.py | 91 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition_2.py diff --git a/The attainments and realizations of my dreams/Population_composition.py b/The attainments and realizations of my dreams/Population_composition.py index 1cb59342..6b76ba58 100644 --- a/The attainments and realizations of my dreams/Population_composition.py +++ b/The attainments and realizations of my dreams/Population_composition.py @@ -77,4 +77,21 @@ date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +figure, axes = plt.subplots() +# Stacked bars can be achieved by passing individual bottom values per bar.[1] +axes.bar(year, southTW, label='South Taiwan', bottom=centralTW) +axes.bar(year, centralTW, label='Central Taiwan', bottom=northTW) +axes.bar(year, northTW, label='Northern Taiwan') + +axes.set_ylabel('Population') +axes.set_xlabel('Year') +axes.set_title("The composition of Taiwan's population \n" + "has changed dramatically over the past 20 years.") + +axes.legend() + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar.html diff --git a/The attainments and realizations of my dreams/Population_composition_2.py b/The attainments and realizations of my dreams/Population_composition_2.py new file mode 100644 index 00000000..2a9bbfe0 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_2.py @@ -0,0 +1,91 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +figure, axes = plt.subplots() + +axes.hist(x=[northTW, centralTW, southTW, eastTW, outlyingTW], bins=12, density=True, stacked=True, + histtype='bar') + +axes.set_ylabel('Population') +axes.set_xlabel('Year') +axes.set_title("The composition of Taiwan's population \n" + "has changed dramatically over the past 20 years.") + +axes.legend() + +plt.show() From bf9b2961b04721d05d35bb1b0b12fb572d818815 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 12:44:54 +0800 Subject: [PATCH 0222/2002] Committed 2021/09/26 --- .../Stacked Bar chart using dataframe plot.py | 17 ++++++++++++++ ...Stacked bar chart with more than 2 data.py | 23 +++++++++++++++++++ .../Population_composition.py | 6 ++--- .../Population_composition_2.py | 3 ++- 4 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.py create mode 100644 Supplementary materials/Matplotlib/Stacked bar chart with more than 2 data.py diff --git a/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.py b/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.py new file mode 100644 index 00000000..88a29916 --- /dev/null +++ b/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.py @@ -0,0 +1,17 @@ +# importing package +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +# create data +df = pd.DataFrame([['A', 10, 20, 10, 26], ['B', 20, 25, 15, 21], ['C', 12, 15, 19, 6], + ['D', 10, 18, 11, 19]], + columns=['Team', 'Round 1', 'Round 2', 'Round 3', 'Round 4']) +# view data +print(df) + +# plot data in stack manner of bar type +df.plot(x='Team', kind='bar', stacked=True, + title='Stacked Bar Graph by dataframe') + +# Source: https://www.geeksforgeeks.org/create-a-stacked-bar-plot-in-matplotlib/ diff --git a/Supplementary materials/Matplotlib/Stacked bar chart with more than 2 data.py b/Supplementary materials/Matplotlib/Stacked bar chart with more than 2 data.py new file mode 100644 index 00000000..8dc7e331 --- /dev/null +++ b/Supplementary materials/Matplotlib/Stacked bar chart with more than 2 data.py @@ -0,0 +1,23 @@ +# importing package +import matplotlib.pyplot as plt +import numpy as np + +# create data +x = ['A', 'B', 'C', 'D'] +y1 = np.array([10, 20, 10, 30]) +y2 = np.array([20, 25, 15, 25]) +y3 = np.array([12, 15, 19, 6]) +y4 = np.array([10, 29, 13, 19]) + +# plot bars in stack manner +plt.bar(x, y1, color='r') +plt.bar(x, y2, bottom=y1, color='b') +plt.bar(x, y3, bottom=y1+y2, color='y') +plt.bar(x, y4, bottom=y1+y2+y3, color='g') +plt.xlabel("Teams") +plt.ylabel("Score") +plt.legend(["Round 1", "Round 2", "Round 3", "Round 4"]) +plt.title("Scores by Teams in 4 Rounds") +plt.show() + +# Source: https://www.geeksforgeeks.org/create-a-stacked-bar-plot-in-matplotlib/ diff --git a/The attainments and realizations of my dreams/Population_composition.py b/The attainments and realizations of my dreams/Population_composition.py index 6b76ba58..621365aa 100644 --- a/The attainments and realizations of my dreams/Population_composition.py +++ b/The attainments and realizations of my dreams/Population_composition.py @@ -80,9 +80,9 @@ figure, axes = plt.subplots() # Stacked bars can be achieved by passing individual bottom values per bar.[1] -axes.bar(year, southTW, label='South Taiwan', bottom=centralTW) -axes.bar(year, centralTW, label='Central Taiwan', bottom=northTW) -axes.bar(year, northTW, label='Northern Taiwan') +axes.bar(year, southTW, label='South Taiwan', ) +axes.bar(year, centralTW, label='Central Taiwan', bottom=southTW) +axes.bar(year, northTW, label='Northern Taiwan', bottom=southTW+centralTW) axes.set_ylabel('Population') axes.set_xlabel('Year') diff --git a/The attainments and realizations of my dreams/Population_composition_2.py b/The attainments and realizations of my dreams/Population_composition_2.py index 2a9bbfe0..cb81e808 100644 --- a/The attainments and realizations of my dreams/Population_composition_2.py +++ b/The attainments and realizations of my dreams/Population_composition_2.py @@ -79,7 +79,7 @@ figure, axes = plt.subplots() axes.hist(x=[northTW, centralTW, southTW, eastTW, outlyingTW], bins=12, density=True, stacked=True, - histtype='bar') + histtype='barstacked') axes.set_ylabel('Population') axes.set_xlabel('Year') @@ -88,4 +88,5 @@ axes.legend() +figure.tight_layout() plt.show() From 16ad7d035f19921c7f94b395d938476230d4334f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 12:49:27 +0800 Subject: [PATCH 0223/2002] Committed 2021/09/26 --- ...acked Bar chart using dataframe plot.ipynb | 54 +++++++++++++++++++ .../Stacked Bar chart using dataframe plot.py | 2 + 2 files changed, 56 insertions(+) create mode 100644 Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.ipynb diff --git a/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.ipynb b/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.ipynb new file mode 100644 index 00000000..2e9bc16f --- /dev/null +++ b/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.ipynb @@ -0,0 +1,54 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# importing package\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "# create data\n", + "df = pd.DataFrame([['A', 10, 20, 10, 26], ['B', 20, 25, 15, 21], ['C', 12, 15, 19, 6],\n", + " ['D', 10, 18, 11, 19]],\n", + " columns=['Team', 'Round 1', 'Round 2', 'Round 3', 'Round 4'])\n", + "# view data\n", + "print(df)\n", + "\n", + "# plot data in stack manner of bar type\n", + "df.plot(x='Team', kind='bar', stacked=True,\n", + " title='Stacked Bar Graph by dataframe')\n", + "\n", + "\n", + "\n", + "# Source: https://www.geeksforgeeks.org/create-a-stacked-bar-plot-in-matplotlib/" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.py b/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.py index 88a29916..66a3edd3 100644 --- a/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.py +++ b/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.py @@ -14,4 +14,6 @@ df.plot(x='Team', kind='bar', stacked=True, title='Stacked Bar Graph by dataframe') +plt.show() + # Source: https://www.geeksforgeeks.org/create-a-stacked-bar-plot-in-matplotlib/ From 496a76cb4973f12ab2bb928b4deca88e7e732b5f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 12:50:42 +0800 Subject: [PATCH 0224/2002] Committed 2021/09/26 --- ...acked Bar chart using dataframe plot.ipynb | 86 ++++++++++++++++++- 1 file changed, 83 insertions(+), 3 deletions(-) diff --git a/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.ipynb b/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.ipynb index 2e9bc16f..89badd58 100644 --- a/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.ipynb +++ b/Supplementary materials/Matplotlib/Stacked Bar chart using dataframe plot.ipynb @@ -2,11 +2,91 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "collapsed": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Team Round 1 Round 2 Round 3 Round 4\n", + "0 A 10 20 10 26\n", + "1 B 20 25 15 21\n", + "2 C 12 15 19 6\n", + "3 D 10 18 11 19\n" + ] + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "

", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Team Round 1 Round 2 Round 3 Round 4\n", + "0 A 10 20 10 26\n", + "1 B 20 25 15 21\n", + "2 C 12 15 19 6\n", + "3 D 10 18 11 19\n" + ] + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Team Round 1 Round 2 Round 3 Round 4\n", + "0 A 10 20 10 26\n", + "1 B 20 25 15 21\n", + "2 C 12 15 19 6\n", + "3 D 10 18 11 19\n" + ] + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# importing package\n", "import matplotlib.pyplot as plt\n", @@ -24,7 +104,7 @@ "df.plot(x='Team', kind='bar', stacked=True,\n", " title='Stacked Bar Graph by dataframe')\n", "\n", - "\n", + "plt.show()\n", "\n", "# Source: https://www.geeksforgeeks.org/create-a-stacked-bar-plot-in-matplotlib/" ] From a04c454cd0c2ec77b3d015d2fb1b958a3d98ef1a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 12:53:40 +0800 Subject: [PATCH 0225/2002] Committed 2021/09/26 --- .../Population_composition_.py | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition_.py diff --git a/The attainments and realizations of my dreams/Population_composition_.py b/The attainments and realizations of my dreams/Population_composition_.py new file mode 100644 index 00000000..0c0cae1d --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_.py @@ -0,0 +1,83 @@ +import matplotlib.pyplot as plt +import numpy as np + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +figure, axes = plt.subplots() + + + From 410243a1da069c9e76a7717900b8ec88ac45de53 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 13:20:27 +0800 Subject: [PATCH 0226/2002] Committed 2021/09/26 --- .../Population_composition_.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Population_composition_.py b/The attainments and realizations of my dreams/Population_composition_.py index 0c0cae1d..48b8927a 100644 --- a/The attainments and realizations of my dreams/Population_composition_.py +++ b/The attainments and realizations of my dreams/Population_composition_.py @@ -77,7 +77,21 @@ date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] -figure, axes = plt.subplots() +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) +plt.bar(year, south, color='g', label="South Taiwan") +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") +plt.xlabel('Year') +plt.ylabel('Population') +plt.title("The composition of Taiwan's population") +plt.legend() +plt.show() From 02e063feefcbdc3233f4f3a226a105d166ebcbde Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 13:25:24 +0800 Subject: [PATCH 0227/2002] Committed 2021/09/26 --- Matplotlib 2 By Example/Ticker locator and formatter.py | 6 ++++++ Matplotlib 2 By Example/__init__.py | 0 2 files changed, 6 insertions(+) create mode 100644 Matplotlib 2 By Example/Ticker locator and formatter.py create mode 100644 Matplotlib 2 By Example/__init__.py diff --git a/Matplotlib 2 By Example/Ticker locator and formatter.py b/Matplotlib 2 By Example/Ticker locator and formatter.py new file mode 100644 index 00000000..c476011c --- /dev/null +++ b/Matplotlib 2 By Example/Ticker locator and formatter.py @@ -0,0 +1,6 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.ticker as plt + +x = range(2011, 2018) +y = [26.48, 27.56, 29.41, 33.27, 36.32, 37.55, 40.28, 44.35, 48.36, 50.05, 53.06, 57.39, ] diff --git a/Matplotlib 2 By Example/__init__.py b/Matplotlib 2 By Example/__init__.py new file mode 100644 index 00000000..e69de29b From 2e7c01ec68e504fad4907ab20c477c6561b51a7d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 13:34:36 +0800 Subject: [PATCH 0228/2002] Committed 2021/09/26 --- .../Ticker locator and formatter.py | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/Matplotlib 2 By Example/Ticker locator and formatter.py b/Matplotlib 2 By Example/Ticker locator and formatter.py index c476011c..c6de9702 100644 --- a/Matplotlib 2 By Example/Ticker locator and formatter.py +++ b/Matplotlib 2 By Example/Ticker locator and formatter.py @@ -1,6 +1,28 @@ import numpy as np import matplotlib.pyplot as plt -import matplotlib.ticker as plt +import matplotlib.ticker as ticker x = range(2011, 2018) -y = [26.48, 27.56, 29.41, 33.27, 36.32, 37.55, 40.28, 44.35, 48.36, 50.05, 53.06, 57.39, ] +y = [26.48, 27.56, 29.41, 33.27, 36.32, 37.55, 40.28, 44.35, 48.36, 50.05, + 53.06, 57.39, 62.27, 65.55, 69.17, 74.76, 81.5, 83.18, 86.74, 93.8, 98.75] + +plt.plot(y, '^', label="Netflix subscribers", linestyle='-') + +# get the current axes and store it to ax +ax = plt.gca() + +# set ticks in multiples for both labels +ax.xaxis.set_major_locator(ticker.MultipleLocator(4)) +# Set major marks every 4 quarters, i.e. once a year + +# set minor marks for each quarter +ax.xaxis.set_minor_locator(ticker.MultipleLocator(1)) + +ax.yaxis.set_major_locator(ticker.MultipleLocator(10)) +ax.yaxis.set_minor_locator(ticker.MultipleLocator(2)) + +# label the start of each year by Fixed Formatter +ax.get_xaxis().set_major_formatter(ticker.FixedFormatter(x)) + +plt.legend() +plt.show() From 3cd692feb19e21b1c6a91c4ab96249ddace9bfe9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 13:40:08 +0800 Subject: [PATCH 0229/2002] Committed 2021/09/26 --- Matplotlib 2 By Example/Ticker locator and formatter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matplotlib 2 By Example/Ticker locator and formatter.py b/Matplotlib 2 By Example/Ticker locator and formatter.py index c6de9702..3f34a1c8 100644 --- a/Matplotlib 2 By Example/Ticker locator and formatter.py +++ b/Matplotlib 2 By Example/Ticker locator and formatter.py @@ -6,7 +6,7 @@ y = [26.48, 27.56, 29.41, 33.27, 36.32, 37.55, 40.28, 44.35, 48.36, 50.05, 53.06, 57.39, 62.27, 65.55, 69.17, 74.76, 81.5, 83.18, 86.74, 93.8, 98.75] -plt.plot(y, '^', label="Netflix subscribers", linestyle='-') +plt.plot(y, marker='^', label="Netflix subscribers", linestyle='-') # get the current axes and store it to ax ax = plt.gca() From 6e9dd00ca4c49ac09ea2d04a0e400f155432f86a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 13:46:31 +0800 Subject: [PATCH 0230/2002] Committed 2021/09/26 --- .../Population_composition_1.py | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition_1.py diff --git a/The attainments and realizations of my dreams/Population_composition_1.py b/The attainments and realizations of my dreams/Population_composition_1.py new file mode 100644 index 00000000..48b8927a --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_1.py @@ -0,0 +1,97 @@ +import matplotlib.pyplot as plt +import numpy as np + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +plt.bar(year, south, color='g', label="South Taiwan") +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +plt.xlabel('Year') +plt.ylabel('Population') +plt.title("The composition of Taiwan's population") +plt.legend() +plt.show() + From 4039e853387698ab123f2f6b866ca3b204076c68 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 13:47:21 +0800 Subject: [PATCH 0231/2002] Committed 2021/09/26 --- .../Population_composition_1.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/Population_composition_1.py b/The attainments and realizations of my dreams/Population_composition_1.py index 48b8927a..80c26ddc 100644 --- a/The attainments and realizations of my dreams/Population_composition_1.py +++ b/The attainments and realizations of my dreams/Population_composition_1.py @@ -89,6 +89,11 @@ plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") +# get the current axes and store it to ax +ax = plt.gca() + + + plt.xlabel('Year') plt.ylabel('Population') plt.title("The composition of Taiwan's population") From 8d8ebd192b02c9be545672fab884efc388026315 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 13:57:55 +0800 Subject: [PATCH 0232/2002] Committed 2021/09/26 --- .../Population_composition_1.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_composition_1.py b/The attainments and realizations of my dreams/Population_composition_1.py index 80c26ddc..5a5aab5f 100644 --- a/The attainments and realizations of my dreams/Population_composition_1.py +++ b/The attainments and realizations of my dreams/Population_composition_1.py @@ -1,4 +1,5 @@ import matplotlib.pyplot as plt +import matplotlib.ticker as ticker import numpy as np year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] @@ -90,12 +91,13 @@ plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") # get the current axes and store it to ax -ax = plt.gca() - +axes = plt.gca() +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) plt.xlabel('Year') -plt.ylabel('Population') +plt.ylabel('Population (Unit: 10 millions)') plt.title("The composition of Taiwan's population") plt.legend() plt.show() From 6947f5f92ec2b3eca1de25205f71188024349701 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 14:02:19 +0800 Subject: [PATCH 0233/2002] Committed 2021/09/26 --- .../Population_composition_in_history.py | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history.py b/The attainments and realizations of my dreams/Population_composition_in_history.py new file mode 100644 index 00000000..5a5aab5f --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history.py @@ -0,0 +1,104 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +plt.bar(year, south, color='g', label="South Taiwan") +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population") +plt.legend() +plt.show() + From ff93d338b50a8e97dce1e6acbbae598092139790 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 14:56:51 +0800 Subject: [PATCH 0234/2002] Committed 2021/09/26 --- .../Population_composition_in_history.py | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history.py b/The attainments and realizations of my dreams/Population_composition_in_history.py index 5a5aab5f..92e266c0 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history.py @@ -4,7 +4,12 @@ year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] -northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 @@ -18,7 +23,12 @@ (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 ] -centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 @@ -32,7 +42,12 @@ (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 ] -southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 From 6116d17fa867b89375122e52abde66a3e0c6c86b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 15:34:16 +0800 Subject: [PATCH 0235/2002] Committed 2021/09/26 --- .../Population_composition_in_history.py | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history.py b/The attainments and realizations of my dreams/Population_composition_in_history.py index 92e266c0..a6fa55c3 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history.py @@ -2,7 +2,8 @@ import matplotlib.ticker as ticker import numpy as np -year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 @@ -61,7 +62,12 @@ (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 ] -eastTW = [(338805 + 230673), # 2010 +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 (336838 + 228290), # 2011 (335190 + 226252), # 2012 (333897 + 224821), # 2013 @@ -75,7 +81,12 @@ (322506 + 213956), # 2021/08 ] -outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu (113989 + 97157), # 2011 (124421 + 98843), # 2012 (132878 + 100400), # 2013 @@ -91,7 +102,7 @@ x = range(10, 22) -date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] south = np.array(southTW) central = np.array(centralTW) @@ -113,7 +124,7 @@ plt.xlabel('Year') plt.ylabel('Population (Unit: 10 millions)') -plt.title("The composition of Taiwan's population") +plt.title("The composition of Taiwan's population in history") plt.legend() plt.show() From c01b030e706943d6d0f6837e05ad0dce4493aa2e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 16:07:18 +0800 Subject: [PATCH 0236/2002] Committed 2021/09/26 --- .../Population_composition_in_history.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history.py b/The attainments and realizations of my dreams/Population_composition_in_history.py index a6fa55c3..79615fff 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history.py @@ -122,9 +122,19 @@ axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) +plt.xticks(rotation=27) plt.xlabel('Year') plt.ylabel('Population (Unit: 10 millions)') plt.title("The composition of Taiwan's population in history") plt.legend() + +cm = 1/2.54 # centimeters in inches.[2] + +# Change the figure size.[1] +plt.figure(figsize=(18*cm, 8*cm)) + plt.show() +# References: +# 1. https://stackoverflow.com/a/24073700/14900011 +# 2. https://matplotlib.org/devdocs/gallery/subplots_axes_and_figures/figure_size_units.html From 94adc5d34d5b0bc366ec5c7f2fa7b53e39dc5d01 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 22:58:53 +0800 Subject: [PATCH 0237/2002] Committed 2021/09/26 --- .../Trade/2020_Trade_north_central_south.py | 5 +++++ .../Trade/__init__.py | 0 2 files changed, 5 insertions(+) create mode 100644 The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py create mode 100644 The attainments and realizations of my dreams/Trade/__init__.py diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py new file mode 100644 index 00000000..85d94c83 --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py @@ -0,0 +1,5 @@ +import matplotlib.pyplot as plt +import pandas as pd +import numpy as np + + diff --git a/The attainments and realizations of my dreams/Trade/__init__.py b/The attainments and realizations of my dreams/Trade/__init__.py new file mode 100644 index 00000000..e69de29b From abf96c61b466f0da9c228a1fce9cb5f61b8e1978 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 23:16:52 +0800 Subject: [PATCH 0238/2002] Committed 2021/09/26 --- .../Trade/2020_Trade_north_central_south.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py index 85d94c83..526c0d92 100644 --- a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py @@ -1,5 +1,12 @@ -import matplotlib.pyplot as plt import pandas as pd -import numpy as np + +df = pd.DataFrame(data=[[5497, 1093775143, 0, 0, 1093780640], + [571, 19273738, 0, 0, 19274309], + [1544095246, 5561724423, 2550413664, 3030786960, 12687020293]], + columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["箏敹恍鞎函拚W硫寞", "箏敹恍蝪⊥W硫寞", "箏鞎函拚W硫寞(怠銝)"] + ) + +print(df) From f6390321cf1676a1c68bf9be74a704925c9608bc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Sep 2021 23:24:22 +0800 Subject: [PATCH 0239/2002] Committed 2021/09/26 --- .../Trade/2020_Trade_north_central_south.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py index 526c0d92..6cfae05d 100644 --- a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south.py @@ -9,4 +9,9 @@ print(df) - +importation = pd.DataFrame(columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["脣勗桃喳勗蝔寞(怠銝)", "脣敹恍鞎函拙蝔寞", "脣敹恍蝪⊥摰蝔寞"], + data=[[1887315195, 3744420037, 1317064881, 1685399059, 8634199171], + [2249153, 952141962, 0, 1411, 954392527], + [5639340, 38349842, 0, 268237, 44257418]]) +print(importation) From 60e963058879e5e05948b381382f6321d9e5010e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 01:57:16 +0800 Subject: [PATCH 0240/2002] Committed 2021/09/26 --- .../Trade/2020_Trade_north_central_south_2.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py new file mode 100644 index 00000000..f5ef6c88 --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py @@ -0,0 +1,14 @@ +import pandas as pd + +importation = pd.DataFrame(columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["脣勗桃喳勗蝔寞(怠銝)", "脣敹恍鞎函拙蝔寞", "脣敹恍蝪⊥摰蝔寞"], + data=[[1887315195, 3744420037, 1317064881, 1685399059, 8634199171], + [2249153, 952141962, 0, 1411, 954392527], + [5639340, 38349842, 0, 268237, 44257418]]) +print(importation) + +exportation = pd.DataFrame(data=[[1544095246, 5561724423, 2550413664, 3030786960, 12687020293], + [5497, 1093775143, 0, 0, 1093780640], + [1544095246, 5561724423, 2550413664, 3030786960, 12687020293]], + columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["箏鞎函拚W硫寞(怠銝)", "箏敹恍鞎函拚W硫寞", "箏敹恍蝪⊥W硫寞"]) From 6c9c9edfcd263256c75ffb244a1dc4f69c14a3c6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 02:04:17 +0800 Subject: [PATCH 0241/2002] Committed 2021/09/26 --- .../Trade/2020_Trade_north_central_south_2.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py index f5ef6c88..e3b8700b 100644 --- a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py @@ -9,6 +9,8 @@ exportation = pd.DataFrame(data=[[1544095246, 5561724423, 2550413664, 3030786960, 12687020293], [5497, 1093775143, 0, 0, 1093780640], - [1544095246, 5561724423, 2550413664, 3030786960, 12687020293]], + [571, 19273738, 0, 0, 19274309]], columns=["粹", "箏", "箔葉", "擃", "閮"], index=["箏鞎函拚W硫寞(怠銝)", "箏敹恍鞎函拚W硫寞", "箏敹恍蝪⊥W硫寞"]) + +print(exportation) From 32828b015742c7cdd4dfc4238a693058ab4130a8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 02:05:40 +0800 Subject: [PATCH 0242/2002] Committed 2021/09/26 --- .../Trade/2020_Trade_north_central_south_2.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py index e3b8700b..5d3a914f 100644 --- a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_2.py @@ -14,3 +14,5 @@ index=["箏鞎函拚W硫寞(怠銝)", "箏敹恍鞎函拚W硫寞", "箏敹恍蝪⊥W硫寞"]) print(exportation) + +# Reference: https://portal.sw.nat.gov.tw/APGA/GA11_LIST From 270cb9417c352881ce4cdead7e4fb094a2e76e18 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 11:40:16 +0800 Subject: [PATCH 0243/2002] Committed 2021/09/27 --- ...020_Trade_north_central_south_translated.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_translated.py diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_translated.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_translated.py new file mode 100644 index 00000000..5d3a914f --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_translated.py @@ -0,0 +1,18 @@ +import pandas as pd + +importation = pd.DataFrame(columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["脣勗桃喳勗蝔寞(怠銝)", "脣敹恍鞎函拙蝔寞", "脣敹恍蝪⊥摰蝔寞"], + data=[[1887315195, 3744420037, 1317064881, 1685399059, 8634199171], + [2249153, 952141962, 0, 1411, 954392527], + [5639340, 38349842, 0, 268237, 44257418]]) +print(importation) + +exportation = pd.DataFrame(data=[[1544095246, 5561724423, 2550413664, 3030786960, 12687020293], + [5497, 1093775143, 0, 0, 1093780640], + [571, 19273738, 0, 0, 19274309]], + columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["箏鞎函拚W硫寞(怠銝)", "箏敹恍鞎函拚W硫寞", "箏敹恍蝪⊥W硫寞"]) + +print(exportation) + +# Reference: https://portal.sw.nat.gov.tw/APGA/GA11_LIST From 8df13f52bfb9435275f66439ac1bfc9adea9b934 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 11:56:05 +0800 Subject: [PATCH 0244/2002] Committed 2021/09/27 --- .../Trade/2020_Trade_north_central_south_3.py | 18 ++++++++++++++++++ ...020_Trade_north_central_south_translated.py | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_3.py diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_3.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_3.py new file mode 100644 index 00000000..5d3a914f --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_3.py @@ -0,0 +1,18 @@ +import pandas as pd + +importation = pd.DataFrame(columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["脣勗桃喳勗蝔寞(怠銝)", "脣敹恍鞎函拙蝔寞", "脣敹恍蝪⊥摰蝔寞"], + data=[[1887315195, 3744420037, 1317064881, 1685399059, 8634199171], + [2249153, 952141962, 0, 1411, 954392527], + [5639340, 38349842, 0, 268237, 44257418]]) +print(importation) + +exportation = pd.DataFrame(data=[[1544095246, 5561724423, 2550413664, 3030786960, 12687020293], + [5497, 1093775143, 0, 0, 1093780640], + [571, 19273738, 0, 0, 19274309]], + columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["箏鞎函拚W硫寞(怠銝)", "箏敹恍鞎函拚W硫寞", "箏敹恍蝪⊥W硫寞"]) + +print(exportation) + +# Reference: https://portal.sw.nat.gov.tw/APGA/GA11_LIST diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_translated.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_translated.py index 5d3a914f..e35caef8 100644 --- a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_translated.py +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_translated.py @@ -1,6 +1,6 @@ import pandas as pd -importation = pd.DataFrame(columns=["粹", "箏", "箔葉", "擃", "閮"], +importation = pd.DataFrame(columns=["Keelung customs", "Taipei customs", "Taichung customs", "Kaohsiung customs", "Total"], index=["脣勗桃喳勗蝔寞(怠銝)", "脣敹恍鞎函拙蝔寞", "脣敹恍蝪⊥摰蝔寞"], data=[[1887315195, 3744420037, 1317064881, 1685399059, 8634199171], [2249153, 952141962, 0, 1411, 954392527], @@ -10,7 +10,7 @@ exportation = pd.DataFrame(data=[[1544095246, 5561724423, 2550413664, 3030786960, 12687020293], [5497, 1093775143, 0, 0, 1093780640], [571, 19273738, 0, 0, 19274309]], - columns=["粹", "箏", "箔葉", "擃", "閮"], + columns=["Keelung customs", "Taipei customs", "Taichung customs", "Kaohsiung customs", "Total"], index=["箏鞎函拚W硫寞(怠銝)", "箏敹恍鞎函拚W硫寞", "箏敹恍蝪⊥W硫寞"]) print(exportation) From 9f74abbcc39bf926dd095e87d8da110ef23535a2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 12:19:17 +0800 Subject: [PATCH 0245/2002] Committed 2021/09/27 --- .../Arithmetic Operations.py | 7 +++++++ .../Trade/2020_Trade_north_central_south_3.py | 4 ++++ .../Trade/2020_Trade_north_central_south_4.py | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py create mode 100644 The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py new file mode 100644 index 00000000..55007abf --- /dev/null +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py @@ -0,0 +1,7 @@ +import pandas as pd + +rainfall = pd.DataFrame(data=[[200.1, 400.3, 1000.5], + [100.2, 300.4, 1100.6]], + columns=["City1", "City2", "City3"]) + +print(rainfall) diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_3.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_3.py index 5d3a914f..345cddaa 100644 --- a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_3.py +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_3.py @@ -15,4 +15,8 @@ print(exportation) +surplus = exportation - importation + +print(surplus) + # Reference: https://portal.sw.nat.gov.tw/APGA/GA11_LIST diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py new file mode 100644 index 00000000..a4ab6168 --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py @@ -0,0 +1,18 @@ +import pandas as pd + +importation = pd.DataFrame(columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["脣勗桃喳勗蝔寞(怠銝)", "脣敹恍鞎函拙蝔寞", "脣敹恍蝪⊥摰蝔寞"], + data=[[1887315195, 3744420037, 1317064881, 1685399059, 8634199171], + [2249153, 952141962, 0, 1411, 954392527], + [5639340, 38349842, 0, 268237, 44257418]]) +print(importation) + +exportation = pd.DataFrame(data=[[1544095246, 5561724423, 2550413664, 3030786960, 12687020293], + [5497, 1093775143, 0, 0, 1093780640], + [571, 19273738, 0, 0, 19274309]], + columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["箏鞎函拚W硫寞(怠銝)", "箏敹恍鞎函拚W硫寞", "箏敹恍蝪⊥W硫寞"]) + +print(exportation) + +surplus = pd.DataFrame() From 72ccfefa3e8c35b3ce6b1fb6f8afdd093ab06c11 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 12:26:17 +0800 Subject: [PATCH 0246/2002] Committed 2021/09/27 --- .../Arithmetic Operations.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py index 55007abf..5fd6d0ef 100644 --- a/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py @@ -1,7 +1,20 @@ import pandas as pd -rainfall = pd.DataFrame(data=[[200.1, 400.3, 1000.5], +rainfall = pd.DataFrame(data=[[300.1, 400.3, 1000.5], [100.2, 300.4, 1100.6]], columns=["City1", "City2", "City3"]) print(rainfall) + +rainfall_plus = rainfall + 100 + +print(rainfall_plus) + +more_rainfall = pd.DataFrame(data=[[100, 200], + [300, 400]], index=[1, 2], columns=["City 1", "City 4"]) + +print(more_rainfall) + +more_rainfall_plus = rainfall + more_rainfall + +print(more_rainfall_plus) From ea7c08f18bc66e4744fbf2c28c8f35fb2e5dc744 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 12:33:34 +0800 Subject: [PATCH 0247/2002] Committed 2021/09/27 --- .../Arithmetic Operations.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py index 5fd6d0ef..9f3f517e 100644 --- a/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Arithmetic Operations.py @@ -18,3 +18,9 @@ more_rainfall_plus = rainfall + more_rainfall print(more_rainfall_plus) + +summation = rainfall.loc[1, :] + rainfall +print(summation) + +summation2 = rainfall.add(rainfall.loc[:, "City2"], axis=0) +print(summation2) From 7495005495306ab373d071da6f1a77ca298a7e31 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 12:52:58 +0800 Subject: [PATCH 0248/2002] Committed 2021/09/27 --- .../Chapter5 - Data Analysis with pandas/Concatenation.py | 3 +++ .../Trade/2020_Trade_north_central_south_4.py | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py new file mode 100644 index 00000000..75b02844 --- /dev/null +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py @@ -0,0 +1,3 @@ +import pandas as pd + + diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py index a4ab6168..559561d0 100644 --- a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py @@ -15,4 +15,8 @@ print(exportation) -surplus = pd.DataFrame() +total_exportation = exportation.sum(axis=0) +print(total_exportation) + +exportation2 = exportation.append(total_exportation) +print(exportation2) From 744e58ee797fa2a8fde6124d0acb0313db12cf7c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 12:59:15 +0800 Subject: [PATCH 0249/2002] Committed 2021/09/27 --- .../Chapter5 - Data Analysis with pandas/Concatenation.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py index 75b02844..973050d9 100644 --- a/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py @@ -1,3 +1,8 @@ import pandas as pd +more_users = pd.DataFrame(data=[[15, "France", 4.1, "Becky"], + [44, "Canada", 6.1, "Leanne"]], + columns=['age', 'country', 'score', 'name'], + index=[1000, 1011]) +print(more_users) From f5373849a6842f6b36a50bba42e82aa683cfd60b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 13:10:47 +0800 Subject: [PATCH 0250/2002] Committed 2021/09/27 --- .../Concatenation.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py index 973050d9..68e13af3 100644 --- a/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Concatenation.py @@ -6,3 +6,18 @@ index=[1000, 1011]) print(more_users) + +data = [["Mark", 55, "Italy", 4.5, "Europe"], + ["John", 33, "USA", 6.7, "America"], + ["Tim", 41, "USA", 3.9, "America"], + ["Jenny", 12, "Germany", 9.0, "Europe"] + ] + +df = pd.DataFrame(data=data, columns=["name", "age", "country", "score", "continent"], + index=[1001, 1000, 1002, 1003]) + +glue = pd.concat([df, more_users], axis=0) +print(glue) + +glue2 = pd.concat([df, more_users], axis=1) +print(glue2) From 413040ff35868c0e26d8601312c67149d22b72f5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 13:46:52 +0800 Subject: [PATCH 0251/2002] Committed 2021/09/27 --- .../Chapter5 - Data Analysis with pandas/Joining.py | 3 +++ .../Trade/2020_Trade_north_central_south_4.py | 11 ++++++++++- .../Trade/2020_export_value_from_each_customs | 5 +++++ .../Trade/2020_export_value_from_each_customs.csv | 5 +++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 Python for Excel/Chapter5 - Data Analysis with pandas/Joining.py create mode 100644 The attainments and realizations of my dreams/Trade/2020_export_value_from_each_customs create mode 100644 The attainments and realizations of my dreams/Trade/2020_export_value_from_each_customs.csv diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Joining.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Joining.py new file mode 100644 index 00000000..75b02844 --- /dev/null +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Joining.py @@ -0,0 +1,3 @@ +import pandas as pd + + diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py index 559561d0..bb72cd31 100644 --- a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_4.py @@ -18,5 +18,14 @@ total_exportation = exportation.sum(axis=0) print(total_exportation) -exportation2 = exportation.append(total_exportation) +exportation2 = exportation.append(total_exportation, ignore_index=True) print(exportation2) + +print(exportation2.iloc[:, 0]) + +exportation2.index = ["箏鞎函拚W硫寞(怠銝)", "箏敹恍鞎函拚W硫寞", "箏敹恍蝪⊥W硫寞", "Sum of the customs"] +print(exportation2) + +print(exportation2.iloc[:, 0]) + +exportation2.to_csv("2020_export_value_from_each_customs.csv") diff --git a/The attainments and realizations of my dreams/Trade/2020_export_value_from_each_customs b/The attainments and realizations of my dreams/Trade/2020_export_value_from_each_customs new file mode 100644 index 00000000..624d73da --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_export_value_from_each_customs @@ -0,0 +1,5 @@ +,粹,箏,箔葉,擃,閮 +箏鞎函拚W硫寞(怠銝),1544095246,5561724423,2550413664,3030786960,12687020293 +箏敹恍鞎函拚W硫寞,5497,1093775143,0,0,1093780640 +箏敹恍蝪⊥W硫寞,571,19273738,0,0,19274309 +Sum of the customs,1544101314,6674773304,2550413664,3030786960,13800075242 diff --git a/The attainments and realizations of my dreams/Trade/2020_export_value_from_each_customs.csv b/The attainments and realizations of my dreams/Trade/2020_export_value_from_each_customs.csv new file mode 100644 index 00000000..624d73da --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_export_value_from_each_customs.csv @@ -0,0 +1,5 @@ +,粹,箏,箔葉,擃,閮 +箏鞎函拚W硫寞(怠銝),1544095246,5561724423,2550413664,3030786960,12687020293 +箏敹恍鞎函拚W硫寞,5497,1093775143,0,0,1093780640 +箏敹恍蝪⊥W硫寞,571,19273738,0,0,19274309 +Sum of the customs,1544101314,6674773304,2550413664,3030786960,13800075242 From 2a86dadbc96206960b85e01df6030b53249e5d8f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 15:40:16 +0800 Subject: [PATCH 0252/2002] Committed 2021/09/27 --- .../Trade/2020_Trade_north_central_south_5.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_5.py diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_5.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_5.py new file mode 100644 index 00000000..1f1402ab --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_5.py @@ -0,0 +1,4 @@ +import pandas as pd + + + From f88a6dd624c5abe57f4b4315cb21b727a9132728 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 16:11:43 +0800 Subject: [PATCH 0253/2002] Committed 2021/09/27 --- .../Trade/2020_Trade_north_central_south_5.py | 21 +++++++++++++++++++ .../2020_import_value_from_each_customs.csv | 5 +++++ 2 files changed, 26 insertions(+) create mode 100644 The attainments and realizations of my dreams/Trade/2020_import_value_from_each_customs.csv diff --git a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_5.py b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_5.py index 1f1402ab..0a00b147 100644 --- a/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_5.py +++ b/The attainments and realizations of my dreams/Trade/2020_Trade_north_central_south_5.py @@ -1,4 +1,25 @@ import pandas as pd +importation = pd.DataFrame(columns=["粹", "箏", "箔葉", "擃", "閮"], + index=["脣勗桃喳勗蝔寞(怠銝)", "脣敹恍鞎函拙蝔寞", "脣敹恍蝪⊥摰蝔寞"], + data=[[1887315195, 3744420037, 1317064881, 1685399059, 8634199171], + [2249153, 952141962, 0, 1411, 954392527], + [5639340, 38349842, 0, 268237, 44257418]]) +print(importation) +total_importation = importation.sum(axis=0) +print(total_importation) +print(1685399059 + 1411 + 268237) + +importation2 = importation.append(total_importation, ignore_index=True) +print(importation2) + +print(importation2.iloc[:, 0]) + +importation2.index = ["脣勗桃喳勗蝔寞(怠銝)", "脣敹恍鞎函拙蝔寞", "脣敹恍蝪⊥摰蝔寞", "Sum of the customs"] +print(importation2) + +print(importation2.iloc[:, 0]) + +importation2.to_csv("2020_import_value_from_each_customs.csv") diff --git a/The attainments and realizations of my dreams/Trade/2020_import_value_from_each_customs.csv b/The attainments and realizations of my dreams/Trade/2020_import_value_from_each_customs.csv new file mode 100644 index 00000000..0512f03a --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_import_value_from_each_customs.csv @@ -0,0 +1,5 @@ +,粹,箏,箔葉,擃,閮 +脣勗桃喳勗蝔寞(怠銝),1887315195,3744420037,1317064881,1685399059,8634199171 +脣敹恍鞎函拙蝔寞,2249153,952141962,0,1411,954392527 +脣敹恍蝪⊥摰蝔寞,5639340,38349842,0,268237,44257418 +Sum of the customs,1895203688,4734911841,1317064881,1685668707,9632849116 From 0d0201f84292b803e8efc5723036dc110a2907e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 17:02:31 +0800 Subject: [PATCH 0254/2002] Committed 2021/09/27 --- .../Applying a function.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py new file mode 100644 index 00000000..12acf47d --- /dev/null +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py @@ -0,0 +1,4 @@ +import pandas as pd + +rainfall = pd.DataFrame(data=[[300.1, 400.1, 1000.5], + [100.2, 300.4, 1100.6]]) From d64a6f5bda77ce74ee07188ff7fb888f6d24b0bc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 17:31:56 +0800 Subject: [PATCH 0255/2002] Committed 2021/09/27 --- .../Applying a function.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py index 12acf47d..6352c4dc 100644 --- a/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py @@ -1,4 +1,16 @@ import pandas as pd rainfall = pd.DataFrame(data=[[300.1, 400.1, 1000.5], - [100.2, 300.4, 1100.6]]) + [100.2, 300.4, 1100.6]], + columns=["City 1", "City 2", "City 3"]) + +print(rainfall) + +def format_string(x): + return f"{x:, .2f}" + + +# Note that we pass in the function without calling it. +rainfall.applymap(format_string) + +print(rainfall) From a222f72fe7215e7be647402a0a023055f48ebc31 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 17:38:22 +0800 Subject: [PATCH 0256/2002] Committed 2021/09/27 --- .../Applying a function.py | 2 +- .../Applying a function2.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function2.py diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py index 6352c4dc..33e01cab 100644 --- a/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function.py @@ -7,7 +7,7 @@ print(rainfall) def format_string(x): - return f"{x:, .2f}" + return f"{x:,.2f}" # Note that we pass in the function without calling it. diff --git a/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function2.py b/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function2.py new file mode 100644 index 00000000..f89371d3 --- /dev/null +++ b/Python for Excel/Chapter5 - Data Analysis with pandas/Applying a function2.py @@ -0,0 +1,11 @@ +import pandas as pd + +rainfall = pd.DataFrame(data=[[300.1, 400.1, 1000.5], + [100.2, 300.4, 1100.6]], + columns=["City 1", "City 2", "City 3"]) + +print(rainfall) + +rainfall.applymap(lambda x: f"{x:,.2f}") + +print(rainfall) From 92e61124ceb10ffd26ca30523a26433329265e67 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 17:52:16 +0800 Subject: [PATCH 0257/2002] Committed 2021/09/27 --- .../August2021.py | 122 ++++++++++++++++++ .../__init__.py | 0 2 files changed, 122 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/August2021.py create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/__init__.py diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/August2021.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/August2021.py new file mode 100644 index 00000000..2bc06bd4 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/August2021.py @@ -0,0 +1,122 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +axes.set_ylim(23000000, 23700000) +axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +axes.set_xlabel("Year\n" + "References:\n" + "1. https://www.ris.gov.tw/app/portal/346 \n" + "2. https://www.macromicro.me/collections/15/\n" + "tw-housing-relative/124/tw-housing-price-sinyi") + +axes.set_ylabel("Population (Unit: 10 millions)") + +axes2 = axes.twinx() +axes2.set_ylabel("Yearly Housing Price Index (2010/4 - 2021/04) \n" + "Method: (Guotai + Xinyi) / 2", color='goldenrod') + +axes2.plot(x, housing_index, color='gold') +axes2.tick_params(axis='y', labelcolor='goldenrod') + +plt.grid(linewidth=0.3) +plt.title("Taiwan's population change from 2010 - 2021/08 \n in relation to Annual Housing Price Index") + +figure.tight_layout() + +plt.show() + +# References: +# 1. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi +# 2. diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/__init__.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/__init__.py new file mode 100644 index 00000000..e69de29b From af7b05854f3221063ce6a8fff50f4c1bd014df65 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 18:04:27 +0800 Subject: [PATCH 0258/2002] Committed 2021/09/27 --- .../Trade/2020_converting_export_value_to_USD.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD.py diff --git a/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD.py b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD.py new file mode 100644 index 00000000..0530e785 --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD.py @@ -0,0 +1,8 @@ +import pandas as pd +import matplotlib.pyplot as plt + +exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) + +print(exportation) + + From 1ea505632b34ef9e519813bfad1a0592b1c07698 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 18:27:49 +0800 Subject: [PATCH 0259/2002] Committed 2021/09/27 --- Supplementary materials/pandas/apply().py | 4 ++++ .../Trade/2020_converting_export_value_to_USD.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 Supplementary materials/pandas/apply().py diff --git a/Supplementary materials/pandas/apply().py b/Supplementary materials/pandas/apply().py new file mode 100644 index 00000000..1f1402ab --- /dev/null +++ b/Supplementary materials/pandas/apply().py @@ -0,0 +1,4 @@ +import pandas as pd + + + diff --git a/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD.py b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD.py index 0530e785..bf32ee00 100644 --- a/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD.py +++ b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD.py @@ -4,5 +4,19 @@ exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) print(exportation) +print(exportation.info()) + +def TW_to_USD(x): + """ + TWD Taiwan New Dollar 28.0881028819 0.0356022621 + + https://web.archive.org/web/20210927101148/https://www.xe.com/currencytables/?from=USD&date=2020-12-31 + """ + return x / 28.0881028819 + + +exportation.applymap(TW_to_USD) + +print(exportation) From 3e72821dc94447e0334c95b4d745419bfc54facf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 18:32:51 +0800 Subject: [PATCH 0260/2002] Committed 2021/09/27 --- Supplementary materials/pandas/apply().py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Supplementary materials/pandas/apply().py b/Supplementary materials/pandas/apply().py index 1f1402ab..0ac96a73 100644 --- a/Supplementary materials/pandas/apply().py +++ b/Supplementary materials/pandas/apply().py @@ -1,4 +1,18 @@ import pandas as pd +import numpy as np +frame = pd.DataFrame(np.random.randn(4, 3), + columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon']) +print(frame) +def f(x): + return x.max() - x.min() + + +frame.apply(f) + +print(frame) + +# Reference: +# 1. https://stackoverflow.com/a/19798528/14900011 From 28bd60235b2632f306664c9991516fbc21b9fa16 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 18:36:41 +0800 Subject: [PATCH 0261/2002] Committed 2021/09/27 --- Supplementary materials/pandas/apply().py | 3 +++ .../2020_converting_export_value_to_USD_2.py | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_2.py diff --git a/Supplementary materials/pandas/apply().py b/Supplementary materials/pandas/apply().py index 0ac96a73..b47c04e5 100644 --- a/Supplementary materials/pandas/apply().py +++ b/Supplementary materials/pandas/apply().py @@ -14,5 +14,8 @@ def f(x): print(frame) +frame2 = frame.apply(f) +print(frame2) + # Reference: # 1. https://stackoverflow.com/a/19798528/14900011 diff --git a/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_2.py b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_2.py new file mode 100644 index 00000000..9c5b4538 --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_2.py @@ -0,0 +1,20 @@ +import pandas as pd +import matplotlib.pyplot as plt + +exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) + +print(exportation) +print(exportation.info()) + +def TW_to_USD(x): + """ + TWD Taiwan New Dollar 28.0881028819 0.0356022621 + + https://web.archive.org/web/20210927101148/https://www.xe.com/currencytables/?from=USD&date=2020-12-31 + """ + return x / 28.0881028819 + + +exportation_USD = exportation.applymap(TW_to_USD) + +print(exportation_USD) From 8b33f068d638c8174caa7970933aa40c06ed63e2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 18:42:56 +0800 Subject: [PATCH 0262/2002] Committed 2021/09/27 --- .../2020_converting_export_value_to_USD_2.py | 17 +++++++++++++++-- .../2020_converting_export_value_to_USD_3.py | 0 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_3.py diff --git a/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_2.py b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_2.py index 9c5b4538..1c40c1fb 100644 --- a/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_2.py +++ b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_2.py @@ -1,20 +1,33 @@ import pandas as pd -import matplotlib.pyplot as plt exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) print(exportation) print(exportation.info()) + def TW_to_USD(x): """ TWD Taiwan New Dollar 28.0881028819 0.0356022621 https://web.archive.org/web/20210927101148/https://www.xe.com/currencytables/?from=USD&date=2020-12-31 """ - return x / 28.0881028819 + return x / 28.08 exportation_USD = exportation.applymap(TW_to_USD) print(exportation_USD) + + +def TWD_to_USD(x): + """ + TWD Taiwan New Dollar 28.0881028819 0.0356022621 + https://web.archive.org/web/20210927101148/https://www.xe.com/currencytables/?from=USD&date=2020-12-31 + """ + + return x * 0.0356022621 + + +exportation_USD2 = exportation.applymap(TWD_to_USD) +print(exportation_USD2) diff --git a/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_3.py b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_3.py new file mode 100644 index 00000000..e69de29b From 37caded57faae353279bbc3d004760d0f991744c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 18:46:34 +0800 Subject: [PATCH 0263/2002] Committed 2021/09/27 --- .../2020_converting_export_value_to_USD_3.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_3.py b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_3.py index e69de29b..d8fdb9ff 100644 --- a/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_3.py +++ b/The attainments and realizations of my dreams/Trade/2020_converting_export_value_to_USD_3.py @@ -0,0 +1,20 @@ +import pandas as pd + +exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) + +print(exportation) +print(exportation.info()) + +def TWD_to_USD(x): + """ + TWD Taiwan New Dollar 28.0881028819 0.0356022621 + https://web.archive.org/web/20210927101148/https://www.xe.com/currencytables/?from=USD&date=2020-12-31 + """ + + return x * 0.0356022621 + + +exportation_USD = exportation.applymap(TWD_to_USD) +print(exportation_USD) + + From 67a3c9fb239f630f12329a3b1344c82a25f187fb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 19:20:44 +0800 Subject: [PATCH 0264/2002] Committed 2021/09/27 --- .../September2021.py | 28 +++++++++++++++++++ .../September2021_2.py | 26 +++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_2.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021.py index e69de29b..935f4f05 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021.py @@ -0,0 +1,28 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +position_vacancies = [85928, 50512, 37109, 29894, 5718, 48837, 9500, + 3477, 4956, 22775, 27978, 3462] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Miaoli", "Taichung", "Changhua", + "Yunlin", "Chiayi", "Tainan", "Kaohsiung", "Pingtung"] + +fig, ax = plt.subplots(figsize=(10, 9)) # [1] +plt.xticks(region_num, labels=label, rotation=47) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/09 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") + +# plt.ylim(280, 560) + +plt.show() diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_2.py new file mode 100644 index 00000000..f65c9201 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_2.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [85928, 50512, 37109, 29894, 48837, 22775, 27978] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(10, 9)) # [1] +plt.xticks(region_num, labels=label, rotation=47) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/09 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") + +# plt.ylim(280, 560) + +plt.show() From 32f2adf9c8e516a05ed6b1369cd0d54ba4dcfe6a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Sep 2021 19:30:11 +0800 Subject: [PATCH 0265/2002] Committed 2021/09/27 --- .../Monthly_total_job_openings_by_region/September2021_2.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_2.py index f65c9201..ed38ed71 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_2.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_2.py @@ -5,8 +5,8 @@ label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] -fig, ax = plt.subplots(figsize=(10, 9)) # [1] -plt.xticks(region_num, labels=label, rotation=47) +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plot = ax.bar(region_num, position_vacancies) @@ -21,6 +21,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") -# plt.ylim(280, 560) +plt.ylim(10000, 90000) plt.show() From b630a9fcf8046a845d29370a11c25a5451942999 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 08:56:11 +0800 Subject: [PATCH 0266/2002] Committed 2021/09/28 --- .../September2014.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014.py new file mode 100644 index 00000000..ed38ed71 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [85928, 50512, 37109, 29894, 48837, 22775, 27978] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/09 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(10000, 90000) + +plt.show() From cf5eb67be41296a13bb72d6f47465fc7a802fafc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 09:02:53 +0800 Subject: [PATCH 0267/2002] Committed 2021/09/28 --- .../Monthly_total_job_openings_by_region/September2014.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014.py index ed38ed71..4e1dbe66 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5, 6, 7] -position_vacancies = [85928, 50512, 37109, 29894, 48837, 22775, 27978] +position_vacancies = [66549, 34819, 21948, 17828, 27710, 12300, 16584] label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] @@ -16,11 +16,11 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2021/09 the number of job openings in Taiwan by region") +plt.title("2014/09 the number of job openings in Taiwan by region") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20140903150508/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(10000, 90000) +plt.ylim(10000, 70000) plt.show() From ba1df335d8a496c7e193067a2c3afc8c1479190d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 09:47:41 +0800 Subject: [PATCH 0268/2002] Committed 2021/09/28 --- .../Trade/2020_export_percentile.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 The attainments and realizations of my dreams/Trade/2020_export_percentile.py diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentile.py b/The attainments and realizations of my dreams/Trade/2020_export_percentile.py new file mode 100644 index 00000000..893ab1be --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentile.py @@ -0,0 +1,9 @@ +import pandas as pd + +exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) + +print(exportation) + +percentile = pd.DataFrame(data=["Percentile", 1544101314 / 13800075242, 6674773304 / 13800075242, + 2550413664 / 13800075242, 3030786960 / 13800075242, 100], + ) From f84b8c5a26db6649548a5e9f98f6818da70e36c7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 10:08:25 +0800 Subject: [PATCH 0269/2002] Committed 2021/09/28 --- .../Trade/2020_export_percentage.py | 15 +++++++++++++++ .../Trade/2020_export_percentage_2.py | 13 +++++++++++++ .../Trade/2020_export_percentile.py | 6 ++++-- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 The attainments and realizations of my dreams/Trade/2020_export_percentage.py create mode 100644 The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage.py new file mode 100644 index 00000000..aecce2de --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage.py @@ -0,0 +1,15 @@ +import pandas as pd + +exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) + +print(exportation) + +exportation.loc["Percentile", :] = pd.DataFrame(data=[(1544101314 / 13800075242), + (6674773304 / 13800075242), + (2550413664 / 13800075242), + (3030786960 / 13800075242), + 100]) + +print(exportation.info()) + +print(exportation) diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py new file mode 100644 index 00000000..6da61b6b --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py @@ -0,0 +1,13 @@ +import pandas as pd + +exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) + +print(exportation) + +percentile = [(1544101314 / 13800075242), + (6674773304 / 13800075242), + (2550413664 / 13800075242), + (3030786960 / 13800075242), + 100] + +print(percentile) diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentile.py b/The attainments and realizations of my dreams/Trade/2020_export_percentile.py index 893ab1be..4428dfe3 100644 --- a/The attainments and realizations of my dreams/Trade/2020_export_percentile.py +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentile.py @@ -4,6 +4,8 @@ print(exportation) -percentile = pd.DataFrame(data=["Percentile", 1544101314 / 13800075242, 6674773304 / 13800075242, +percentile = pd.DataFrame(data=[1544101314 / 13800075242, 6674773304 / 13800075242, 2550413664 / 13800075242, 3030786960 / 13800075242, 100], - ) + columns=["粹", "箏", "箔葉", "擃", "閮"]) + +print(percentile) From 6ef71db530e702f331b1816c4ab6d4c2f0aba412 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 10:43:12 +0800 Subject: [PATCH 0270/2002] Committed 2021/09/28 --- .../Trade/2020_export_percentage_2.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py index 6da61b6b..46e6a668 100644 --- a/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py @@ -1,4 +1,5 @@ import pandas as pd +import matplotlib.pyplot as plt exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) @@ -11,3 +12,20 @@ 100] print(percentile) + +# Pie chart, where the slices will be ordered and plotted counter-clockwise: +labels = 'Keelung customs\n(Container ports in N.TW & E.TW)', 'Taipei customs\n(Airports in N.TW,\n ' \ + 'including Miaoli county )', \ + 'Taichung customs\n(Airport & container\n ports in C.TW,\n including Yunlin county)', \ + 'Kaohsiung customs\n(Airport & container ports\n in S.TW)' +sizes = [11.18, 48.36, 18.48, 21.96] +explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') + +fig1, ax1 = plt.subplots() +ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90) + +ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. + +plt.title("The contribution of each region to total export in Taiwan 2020") + +plt.show() From 8bc821f7a5fa36f19808768719d0ab55beb739fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 10:50:11 +0800 Subject: [PATCH 0271/2002] Committed 2021/09/28 --- .../Trade/2020_export_percentage_2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py index 46e6a668..5dea9b80 100644 --- a/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_2.py @@ -16,7 +16,7 @@ # Pie chart, where the slices will be ordered and plotted counter-clockwise: labels = 'Keelung customs\n(Container ports in N.TW & E.TW)', 'Taipei customs\n(Airports in N.TW,\n ' \ 'including Miaoli county )', \ - 'Taichung customs\n(Airport & container\n ports in C.TW,\n including Yunlin county)', \ + 'Taichung customs\n(Airport & container\n ports in C.TW,\n incl. Yunlin county)', \ 'Kaohsiung customs\n(Airport & container ports\n in S.TW)' sizes = [11.18, 48.36, 18.48, 21.96] explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') From 215b0fdaaa4c239d834db261604e5a1c1f949a22 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 11:16:10 +0800 Subject: [PATCH 0272/2002] Committed 2021/09/28 --- Matplotlib 3 Cookbook/Text box.py | 4 +++ .../Trade/2020_export_percentage_3.py | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Text box.py create mode 100644 The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py diff --git a/Matplotlib 3 Cookbook/Text box.py b/Matplotlib 3 Cookbook/Text box.py new file mode 100644 index 00000000..6bac7289 --- /dev/null +++ b/Matplotlib 3 Cookbook/Text box.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt + + + diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py new file mode 100644 index 00000000..5dea9b80 --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py @@ -0,0 +1,31 @@ +import pandas as pd +import matplotlib.pyplot as plt + +exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) + +print(exportation) + +percentile = [(1544101314 / 13800075242), + (6674773304 / 13800075242), + (2550413664 / 13800075242), + (3030786960 / 13800075242), + 100] + +print(percentile) + +# Pie chart, where the slices will be ordered and plotted counter-clockwise: +labels = 'Keelung customs\n(Container ports in N.TW & E.TW)', 'Taipei customs\n(Airports in N.TW,\n ' \ + 'including Miaoli county )', \ + 'Taichung customs\n(Airport & container\n ports in C.TW,\n incl. Yunlin county)', \ + 'Kaohsiung customs\n(Airport & container ports\n in S.TW)' +sizes = [11.18, 48.36, 18.48, 21.96] +explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') + +fig1, ax1 = plt.subplots() +ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90) + +ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. + +plt.title("The contribution of each region to total export in Taiwan 2020") + +plt.show() From a050c313b7eff87d1183e09653cca7c855f7dd0c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 11:35:40 +0800 Subject: [PATCH 0273/2002] Committed 2021/09/28 --- .../Trade/2020_export_percentage_3.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py index 5dea9b80..83c07339 100644 --- a/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py @@ -28,4 +28,15 @@ plt.title("The contribution of each region to total export in Taiwan 2020") +textstr = '\n'.join(( + r'Reference:', + r'https://matplotlib.org/stable/gallery/text_labels_and_annotations/placing_text_boxes.html', +)) +# these are matplotlib.patch.Patch properties +props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) + +# place a text box in upper left in axes coords +ax1.text(0.10, 0.25, textstr, transform=ax1.transAxes, fontsize=14, + verticalalignment='top', bbox=props) + plt.show() From 3c3b7d9187f4587b049d6b4942d956b418f62c1a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 12:14:35 +0800 Subject: [PATCH 0274/2002] Committed 2021/09/28 --- .../Trade/2020_export_percentage_3.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py index 83c07339..dabc45dc 100644 --- a/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py @@ -26,17 +26,17 @@ ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. -plt.title("The contribution of each region to total export in Taiwan 2020") +plt.title("The contribution of each region to total export ($NTD) in Taiwan 2020") textstr = '\n'.join(( - r'Reference:', - r'https://matplotlib.org/stable/gallery/text_labels_and_annotations/placing_text_boxes.html', + r'Dataset:', + r'https://portal.sw.nat.gov.tw/APGA/GA11_LIST', )) # these are matplotlib.patch.Patch properties props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) # place a text box in upper left in axes coords -ax1.text(0.10, 0.25, textstr, transform=ax1.transAxes, fontsize=14, +ax1.text(0.09, 0.01, textstr, transform=ax1.transAxes, fontsize=12, verticalalignment='top', bbox=props) plt.show() From 149330ad82fe7aa91c3ab98c126f69cd68b0006d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 22:45:59 +0800 Subject: [PATCH 0275/2002] Committed 2021/09/28 --- .../Trade/2020_trade_surplus_by_region.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Trade/2020_trade_surplus_by_region.py diff --git a/The attainments and realizations of my dreams/Trade/2020_trade_surplus_by_region.py b/The attainments and realizations of my dreams/Trade/2020_trade_surplus_by_region.py new file mode 100644 index 00000000..e69de29b From 05abe998bdf0744551c35647062f7f04f01e30b4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 22:53:14 +0800 Subject: [PATCH 0276/2002] Committed 2021/09/28 --- .../Trade/2020_import_percentage.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Trade/2020_import_percentage.py diff --git a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py new file mode 100644 index 00000000..e69de29b From 2c689e5a0c085a9bfdeed5a9c45466636dc080c4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 23:05:45 +0800 Subject: [PATCH 0277/2002] Committed 2021/09/28 --- .../Trade/2020_import_percentage.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py index e69de29b..4a6c8c82 100644 --- a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py +++ b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py @@ -0,0 +1,5 @@ +import matplotlib.pyplot as plt +import pandas as pd + + + From e97bed9f8dd48f6b9af064f796d150b43b7c5c1c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 23:28:04 +0800 Subject: [PATCH 0278/2002] Committed 2021/09/28 --- .../Trade/2020_import_percentage.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py index 4a6c8c82..f21562ce 100644 --- a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py +++ b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py @@ -1,5 +1,8 @@ import matplotlib.pyplot as plt import pandas as pd +importation = pd.read_csv("2020_import_value_from_each_customs.csv", header=0, index_col=0) + +print(importation) From dd95aff5c2774d2667a5396c8ff9cccd80eed07b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 23:51:40 +0800 Subject: [PATCH 0279/2002] Committed 2021/09/28 --- .../Trade/2020_export_percentage_3.py | 1 + .../Trade/2020_import_percentage.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py index dabc45dc..bd532873 100644 --- a/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py @@ -18,6 +18,7 @@ 'including Miaoli county )', \ 'Taichung customs\n(Airport & container\n ports in C.TW,\n incl. Yunlin county)', \ 'Kaohsiung customs\n(Airport & container ports\n in S.TW)' + sizes = [11.18, 48.36, 18.48, 21.96] explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') diff --git a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py index f21562ce..10978f8e 100644 --- a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py +++ b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py @@ -5,4 +5,20 @@ print(importation) +percentile = [(1895203688 / 9632849116), + (4734911841 / 9632849116), + (1317064881 / 9632849116), + (1685668707 / 9632849116)] + +print(percentile) + +# Pie chart, where the slices will be ordered and plotted counter-clockwise: +labels = 'Keelung customs\n(Container ports in N.TW & E.TW)', 'Taipei customs\n(Airports in N.TW,\n ' \ + 'including Miaoli county )', \ + 'Taichung customs\n(Airport & container\n ports in C.TW,\n incl. Yunlin county)', \ + 'Kaohsiung customs\n(Airport & container ports\n in S.TW)' + +sizes = [19.67, 49.15, 13.67, 17.49] +explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') + From 054fa28f213b53a2e0b4eec6464f0569a44982ac Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Sep 2021 23:57:40 +0800 Subject: [PATCH 0280/2002] Committed 2021/09/28 --- .../Trade/2020_import_percentage.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py index 10978f8e..54884983 100644 --- a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py +++ b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py @@ -21,4 +21,22 @@ sizes = [19.67, 49.15, 13.67, 17.49] explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') +fig1, ax1 = plt.subplots() +ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90) +ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. + +plt.title("The contribution of each region to total import ($NTD) in Taiwan 2020") + +textstr = '\n'.join(( + r'Dataset:', + r'https://portal.sw.nat.gov.tw/APGA/GA11_LIST', +)) +# these are matplotlib.patch.Patch properties +props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) + +# place a text box in upper left in axes coords +ax1.text(0.09, 0.01, textstr, transform=ax1.transAxes, fontsize=12, + verticalalignment='top', bbox=props) + +plt.show() From 41f8324cab626e5a7b288dd78ec283893ebcd596 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 00:13:58 +0800 Subject: [PATCH 0281/2002] Committed 2021/09/28 --- .../Trade/2020_import_percentage.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py index 54884983..39d9f351 100644 --- a/The attainments and realizations of my dreams/Trade/2020_import_percentage.py +++ b/The attainments and realizations of my dreams/Trade/2020_import_percentage.py @@ -28,15 +28,13 @@ plt.title("The contribution of each region to total import ($NTD) in Taiwan 2020") -textstr = '\n'.join(( - r'Dataset:', - r'https://portal.sw.nat.gov.tw/APGA/GA11_LIST', -)) +textstr = 'Dataset:https://portal.sw.nat.gov.tw/APGA/GA11_LIST' + # these are matplotlib.patch.Patch properties props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) # place a text box in upper left in axes coords -ax1.text(0.09, 0.01, textstr, transform=ax1.transAxes, fontsize=12, +ax1.text(0.09, 0.00, textstr, transform=ax1.transAxes, fontsize=11, verticalalignment='top', bbox=props) plt.show() From 59ca169b28d03547a994b6ce1664d4ca15b49b04 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 00:24:13 +0800 Subject: [PATCH 0282/2002] Committed 2021/09/28 --- Matplotlib 3 Cookbook/Font dictionary.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Matplotlib 3 Cookbook/Font dictionary.py diff --git a/Matplotlib 3 Cookbook/Font dictionary.py b/Matplotlib 3 Cookbook/Font dictionary.py new file mode 100644 index 00000000..e69de29b From 34de9626387516b6ebbeb6ad1370e83ea0ad21f2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 00:38:43 +0800 Subject: [PATCH 0283/2002] Committed 2021/09/28 --- Matplotlib 3 Cookbook/Font dictionary.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Matplotlib 3 Cookbook/Font dictionary.py b/Matplotlib 3 Cookbook/Font dictionary.py index e69de29b..632db9b0 100644 --- a/Matplotlib 3 Cookbook/Font dictionary.py +++ b/Matplotlib 3 Cookbook/Font dictionary.py @@ -0,0 +1,13 @@ +import numpy as np +import matplotlib.pyplot as plt + +# Define the font dictionary to be applied to all the text in the plot. +font = {'family': 'DejaVu Sans', 'name': 'Times New Roman', 'style': 'italic', + 'color': 'orange', 'weight': 'bold', 'size': 16} + +# Define the data for an exponentially decaying curve and plot it. +t = np.linspace(0.0, 5.0, 100) +y = np.sin(2 * np.pi * t) * np.exp(-t/2) +plt.plot(t, y, 'm') + +# From 6fd31e756825924c6a6e008e56e023b422101330 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 00:45:42 +0800 Subject: [PATCH 0284/2002] Committed 2021/09/28 --- Matplotlib 3 Cookbook/Font dictionary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matplotlib 3 Cookbook/Font dictionary.py b/Matplotlib 3 Cookbook/Font dictionary.py index 632db9b0..b3846f04 100644 --- a/Matplotlib 3 Cookbook/Font dictionary.py +++ b/Matplotlib 3 Cookbook/Font dictionary.py @@ -10,4 +10,4 @@ y = np.sin(2 * np.pi * t) * np.exp(-t/2) plt.plot(t, y, 'm') -# +# Define the text, title, and labels, and print them on the plot. From f61937c98f2c62027efa6b546494f893f0a3414d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 12:03:25 +0800 Subject: [PATCH 0285/2002] Committed 2021/09/28 --- Matplotlib 3 Cookbook/Font dictionary.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Matplotlib 3 Cookbook/Font dictionary.py b/Matplotlib 3 Cookbook/Font dictionary.py index b3846f04..d524dbeb 100644 --- a/Matplotlib 3 Cookbook/Font dictionary.py +++ b/Matplotlib 3 Cookbook/Font dictionary.py @@ -11,3 +11,14 @@ plt.plot(t, y, 'm') # Define the text, title, and labels, and print them on the plot. +plt.text(x=2, y=0.65, s=r'$\sin(2 \pi t) \exp(-t/2)$', fontdict=font) + +plt.title('Damped exponential decay', fontdict=font) + +plt.xlabel('time (s)', fontdict=font) +plt.ylabel('voltage (mV)', fontdict=font) + +# Adjust the space to prevent clipping of ylabel. +plt.subplots_adjust(left=0.15) + +plt.show() From b0706028861e5a922c228e5dbf0442a02deba269 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 12:25:41 +0800 Subject: [PATCH 0286/2002] Committed 2021/09/29 --- Matplotlib 3 Cookbook/Annotating a point on a polar plot.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py b/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py index 70f00d5a..bd5f3fac 100644 --- a/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py +++ b/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py @@ -2,10 +2,15 @@ import matplotlib.pyplot as plt fig = plt.figure() + +# Define the axes and declares it as a polar plot. (You can also use polar=True) ax = fig.add_subplot(111, projection='polar') + +# r and theta set the data for radius, and the angle for the plot of the polar coordinates. r = np.arange(0, 1, 0.001) theta = 2 * 2*np.pi * r +# Plot the polar chart with theta and r. ax.plot(theta, r, color=[0.9, 0.4, 0.7], lw=3) # Plot a point with diamond marker at the 600 point on the polar curve. From 2d6625eca08ed93475c19fb336b74cd96392911c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 12:28:20 +0800 Subject: [PATCH 0287/2002] Committed 2021/09/29 --- Matplotlib 3 Cookbook/Annotating a point on a polar plot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py b/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py index bd5f3fac..6baf7cc2 100644 --- a/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py +++ b/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py @@ -12,6 +12,8 @@ # Plot the polar chart with theta and r. ax.plot(theta, r, color=[0.9, 0.4, 0.7], lw=3) +# color is specified with R, G, and B color values to create a custom color. +# R, G, and B values vary from 0 (dark) to 1 (bright). # Plot a point with diamond marker at the 600 point on the polar curve. ind = 600 From 9e057aa11221dd216d9358bf889913c594d6df76 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 12:39:01 +0800 Subject: [PATCH 0288/2002] Committed 2021/09/29 --- .../Annotating a point on a polar plot.py | 2 +- .../Annotating a point on a polar plot_2.py | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 Matplotlib 3 Cookbook/Annotating a point on a polar plot_2.py diff --git a/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py b/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py index 6baf7cc2..9c08d1ff 100644 --- a/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py +++ b/Matplotlib 3 Cookbook/Annotating a point on a polar plot.py @@ -11,7 +11,7 @@ theta = 2 * 2*np.pi * r # Plot the polar chart with theta and r. -ax.plot(theta, r, color=[0.9, 0.4, 0.7], lw=3) +ax.plot(theta, r, color=[0.9, 0.4, 0.7], lw=3) # lw = line width # color is specified with R, G, and B color values to create a custom color. # R, G, and B values vary from 0 (dark) to 1 (bright). diff --git a/Matplotlib 3 Cookbook/Annotating a point on a polar plot_2.py b/Matplotlib 3 Cookbook/Annotating a point on a polar plot_2.py new file mode 100644 index 00000000..0cd7e558 --- /dev/null +++ b/Matplotlib 3 Cookbook/Annotating a point on a polar plot_2.py @@ -0,0 +1,32 @@ +import numpy as np +import matplotlib.pyplot as plt + +fig = plt.figure() + +# Define the axes and declares it as a polar plot. (You can also use polar=True) +ax = fig.add_subplot(111, projection='polar') + +# r and theta set the data for radius, and the angle for the plot of the polar coordinates. +r = np.arange(0, 1, 0.001) +theta = 2 * 2*np.pi * r + +# Plot the polar chart with theta and r. +ax.plot(theta, r, color=[0.9, 0.4, 0.7], lw=3) # lw = line width +# color is specified with R, G, and B color values to create a custom color. +# R, G, and B values vary from 0 (dark) to 1 (bright). + +# Plot a point with diamond marker at the 600 point on the polar curve. +index = 600 +point_r, point_theta = r[index], theta[index] + +# the coordinates point_theta and point_r +ax.plot([point_theta], [point_r], 'D', markersize=10) + +# Define the annotation for the diamond point +## xy specifies the coordinates of the point to be annotated. +## xytext specifies the coordinates where the text description should be placed. +ax.annotate('a polar annotation', xy=(point_theta, point_r), xytext=(1.0, 0.75), + textcoords='figure fraction', arrowprops=dict(facecolor='red', shrink=0.05), + horizontalalignment='right', verticalalignment='bottom') + +plt.show() From 49e2e19f45ad481991dcbe8ec904b76d1b418ef7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 12:42:45 +0800 Subject: [PATCH 0289/2002] Committed 2021/09/29 --- .../2019_std_death_rate5.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 The attainments and realizations of my dreams/2019_std_death_rate5.py diff --git a/The attainments and realizations of my dreams/2019_std_death_rate5.py b/The attainments and realizations of my dreams/2019_std_death_rate5.py new file mode 100644 index 00000000..6a215501 --- /dev/null +++ b/The attainments and realizations of my dreams/2019_std_death_rate5.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] +death_rate = [289.6, 358.6, 361.5, 378.8, 387.4, 393.7, 402.4, 402.5, 406.4, 408.1, + 412.4, 413.1, 427.6, 437.3, 438.5, 439.3, 455.7, 493.5, 506.8, 545.2] + +label = ["Taipei", "Hsinchu City", "New Taipei", "Taoyuan", "Taichung", "Hsinchu", + "Penghu", "Changhua", "Chiayi City", "Yilan", "Keelung", "Tainan", "Kaohsiung", + "Chiayi", "Miaoli", "Nantou", "Yunlin", "Hualien", "Pingtung", "Taitung"] + +fig, ax = plt.subplots(figsize=(10, 8)) # [1] +plt.xticks(region_num, labels=label, rotation=47) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, death_rate) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2019 Standardized Death Rate By Region In Taiwan") + +plt.ylabel("Death per 10 thousands people") +plt.xlabel("Reference: https://www.moi.gov.tw/cl.aspx?n=14661") + +plt.ylim(280, 560) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib From a216bc3d6e4f86b8f933ec6d8d91ef88a6d80b08 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 12:54:29 +0800 Subject: [PATCH 0290/2002] Committed 2021/09/29 --- .../2019_std_death_rate5.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/2019_std_death_rate5.py b/The attainments and realizations of my dreams/2019_std_death_rate5.py index 6a215501..837eb05e 100644 --- a/The attainments and realizations of my dreams/2019_std_death_rate5.py +++ b/The attainments and realizations of my dreams/2019_std_death_rate5.py @@ -26,6 +26,10 @@ plt.ylim(280, 560) +plt.annotate(text="The Tsai regime announced the foundation of a new medical college in N.TW", + xy=(6, 400), xytext=(6, 520), textcoords='figure fraction', + arrowprops=dict(facecolor='red', shrink=0.05),) + plt.show() # Reference: From 7b39e9af42c4e2a7cedf2c589d74127bf84e1b8a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 13:08:15 +0800 Subject: [PATCH 0291/2002] Committed 2021/09/29 --- .../2019_std_death_rate5.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/2019_std_death_rate5.py b/The attainments and realizations of my dreams/2019_std_death_rate5.py index 837eb05e..a4bab9eb 100644 --- a/The attainments and realizations of my dreams/2019_std_death_rate5.py +++ b/The attainments and realizations of my dreams/2019_std_death_rate5.py @@ -28,7 +28,8 @@ plt.annotate(text="The Tsai regime announced the foundation of a new medical college in N.TW", xy=(6, 400), xytext=(6, 520), textcoords='figure fraction', - arrowprops=dict(facecolor='red', shrink=0.05),) + arrowprops=dict(facecolor='red', shrink=0.05), + horizontalalignment='right', verticalalignment='bottom') plt.show() From 4154ac80a0d50cbc8278664887d7ced13bb2bfeb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 13:18:50 +0800 Subject: [PATCH 0292/2002] Committed 2021/09/29 --- Matplotlib Official Primer/Annotations/Annotation basics.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/Annotation basics.py diff --git a/Matplotlib Official Primer/Annotations/Annotation basics.py b/Matplotlib Official Primer/Annotations/Annotation basics.py new file mode 100644 index 00000000..1c68b85d --- /dev/null +++ b/Matplotlib Official Primer/Annotations/Annotation basics.py @@ -0,0 +1,2 @@ +import matplotlib.pyplot as plt + From 044bf5c954b8d5b90a1b25b6e988b4b3f63e3044 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 13:24:28 +0800 Subject: [PATCH 0293/2002] Committed 2021/09/29 --- .../Annotations/Annotation basics.py | 1 + .../2019_std_death_rate6.py | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 The attainments and realizations of my dreams/2019_std_death_rate6.py diff --git a/Matplotlib Official Primer/Annotations/Annotation basics.py b/Matplotlib Official Primer/Annotations/Annotation basics.py index 1c68b85d..f652b92a 100644 --- a/Matplotlib Official Primer/Annotations/Annotation basics.py +++ b/Matplotlib Official Primer/Annotations/Annotation basics.py @@ -1,2 +1,3 @@ import matplotlib.pyplot as plt + diff --git a/The attainments and realizations of my dreams/2019_std_death_rate6.py b/The attainments and realizations of my dreams/2019_std_death_rate6.py new file mode 100644 index 00000000..46e0af7e --- /dev/null +++ b/The attainments and realizations of my dreams/2019_std_death_rate6.py @@ -0,0 +1,37 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] +death_rate = [289.6, 358.6, 361.5, 378.8, 387.4, 393.7, 402.4, 402.5, 406.4, 408.1, + 412.4, 413.1, 427.6, 437.3, 438.5, 439.3, 455.7, 493.5, 506.8, 545.2] + +label = ["Taipei", "Hsinchu City", "New Taipei", "Taoyuan", "Taichung", "Hsinchu", + "Penghu", "Changhua", "Chiayi City", "Yilan", "Keelung", "Tainan", "Kaohsiung", + "Chiayi", "Miaoli", "Nantou", "Yunlin", "Hualien", "Pingtung", "Taitung"] + +fig, ax = plt.subplots(figsize=(10, 8)) # [1] +plt.xticks(region_num, labels=label, rotation=47) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, death_rate) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2019 Standardized Death Rate By Region In Taiwan") + +plt.ylabel("Death per 10 thousands people") +plt.xlabel("Reference: https://www.moi.gov.tw/cl.aspx?n=14661") + +plt.ylim(280, 560) + +plt.annotate(text="The Tsai regime announced the foundation of a new medical college in N.TW", + xy=(6, 400), xytext=(6, 520), xycoords='data', textcoords='data', + arrowprops=dict(facecolor='red', shrink=0.05), + horizontalalignment='right', verticalalignment='bottom') + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib From febcf30921fb530ec945232bd6c79938dd57ec46 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 13:32:57 +0800 Subject: [PATCH 0294/2002] Committed 2021/09/29 --- .../2019_std_death_rate6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/2019_std_death_rate6.py b/The attainments and realizations of my dreams/2019_std_death_rate6.py index 46e0af7e..924bcac2 100644 --- a/The attainments and realizations of my dreams/2019_std_death_rate6.py +++ b/The attainments and realizations of my dreams/2019_std_death_rate6.py @@ -29,7 +29,7 @@ plt.annotate(text="The Tsai regime announced the foundation of a new medical college in N.TW", xy=(6, 400), xytext=(6, 520), xycoords='data', textcoords='data', arrowprops=dict(facecolor='red', shrink=0.05), - horizontalalignment='right', verticalalignment='bottom') + horizontalalignment='center', verticalalignment='bottom') plt.show() From 718e35dc68b38dd0025de0444272957f78f45594 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 13:43:18 +0800 Subject: [PATCH 0295/2002] Committed 2021/09/29 --- .../Annotations/Annotation basics.py | 11 +++++++++++ .../Annotations/Annotation basics2.py | 14 ++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/Annotation basics2.py diff --git a/Matplotlib Official Primer/Annotations/Annotation basics.py b/Matplotlib Official Primer/Annotations/Annotation basics.py index f652b92a..b0ad267a 100644 --- a/Matplotlib Official Primer/Annotations/Annotation basics.py +++ b/Matplotlib Official Primer/Annotations/Annotation basics.py @@ -1,3 +1,14 @@ +import numpy as np import matplotlib.pyplot as plt +# Define the data for an exponentially decaying curve and plot it. +t = np.linspace(0.0, 5.0, 100) +y = np.sin(2 * np.pi * t) * np.exp(-t/2) +plt.plot(t, y, 'm') +plt.annotate('local max', xy=(1.3, 0.6), xycoords='data', + xytext=(2.8, 0.7), textcoords='data', + arrowprops=dict(facecolor='black', shrink=0.05), + horizontalalignment='center', verticalalignment='top',) + +plt.show() diff --git a/Matplotlib Official Primer/Annotations/Annotation basics2.py b/Matplotlib Official Primer/Annotations/Annotation basics2.py new file mode 100644 index 00000000..426bb460 --- /dev/null +++ b/Matplotlib Official Primer/Annotations/Annotation basics2.py @@ -0,0 +1,14 @@ +import numpy as np +import matplotlib.pyplot as plt + +# Define the data for an exponentially decaying curve and plot it. +t = np.linspace(0.0, 5.0, 100) +y = np.sin(2 * np.pi * t) * np.exp(-t/2) +plt.plot(t, y, 'm') + +plt.annotate('local max', xy=(1.3, 0.6), xycoords='data', + xytext=(2.8, 0.7), textcoords='data', + arrowprops=dict(facecolor='black', shrink=0.05), + horizontalalignment='center', verticalalignment='bottom',) + +plt.show() From 87e580e45e8ba1907061277c6f53163019e78236 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 13:44:26 +0800 Subject: [PATCH 0296/2002] Committed 2021/09/29 --- Matplotlib Official Primer/Annotations/Annotation basics2.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Matplotlib Official Primer/Annotations/Annotation basics2.py b/Matplotlib Official Primer/Annotations/Annotation basics2.py index 426bb460..eaa10cdc 100644 --- a/Matplotlib Official Primer/Annotations/Annotation basics2.py +++ b/Matplotlib Official Primer/Annotations/Annotation basics2.py @@ -12,3 +12,5 @@ horizontalalignment='center', verticalalignment='bottom',) plt.show() + +# Reference: https://matplotlib.org/stable/tutorials/text/annotations.html#sphx-glr-tutorials-text-annotations-py From f5133c41f4da31d74e764a5ca27b0fb2cc3ee32f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 13:58:20 +0800 Subject: [PATCH 0297/2002] Committed 2021/09/29 --- .../Annotating with text with box.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/Annotating with text with box.py diff --git a/Matplotlib Official Primer/Annotations/Annotating with text with box.py b/Matplotlib Official Primer/Annotations/Annotating with text with box.py new file mode 100644 index 00000000..b555fad2 --- /dev/null +++ b/Matplotlib Official Primer/Annotations/Annotating with text with box.py @@ -0,0 +1,42 @@ +import tensorflow as tf +import numpy as np +import matplotlib.pyplot as plt +import keras +from tensorflow.keras.utils import plot_model +from mlxtend.plotting import plot_decision_regions +import tensorflow + +tf.random.set_seed(1) +np.random.seed(1) + +# We generate a toy dataset of 200 training examples with 2 features (x0, x1) drawn from a +# uniform distribution between [-1, 1) +x = np.random.uniform(low=-1, high=1, size=(200, 2)) +print(x) + +# Assign the ground truth label +y = np.ones(len(x)) +print(y) + +## Applying the threshold rule: +y[x[:, 0] * x[:, 1] < 0] = 0 + +# Use half of the data (100 training examples) for training and the remaining half for +# validation +## feature set (0 - 99) +x_train = x[:100, :] +## label set (0- 99) +y_train = y[:100] + +## the feature set for validation (100 - 199) +x_valid = x[100:, :] + +## the label set for validation (100 - 199) +y_valid = y[100:] + +fig = plt.figure(figsize=(6, 6)) +plt.plot(x[y == 0, 0], x[y == 0, 1], 'o', alpha=0.75, markersize=10) +plt.plot(x[y == 1, 0], x[y == 1, 1], '<', alpha=0.75, markersize=10) +plt.xlabel(r'$x_1$', size=15) +plt.ylabel(r'$x_2$', size=15) +plt.show() \ No newline at end of file From 3c4ff7fd1a5b7422aa559a62c5841e6d13b3f0e5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 14:03:30 +0800 Subject: [PATCH 0298/2002] Committed 2021/09/29 --- .../Annotations/Annotating with text with box.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Matplotlib Official Primer/Annotations/Annotating with text with box.py b/Matplotlib Official Primer/Annotations/Annotating with text with box.py index b555fad2..aa48ec64 100644 --- a/Matplotlib Official Primer/Annotations/Annotating with text with box.py +++ b/Matplotlib Official Primer/Annotations/Annotating with text with box.py @@ -39,4 +39,13 @@ plt.plot(x[y == 1, 0], x[y == 1, 1], '<', alpha=0.75, markersize=10) plt.xlabel(r'$x_1$', size=15) plt.ylabel(r'$x_2$', size=15) -plt.show() \ No newline at end of file + +plt.text(x=0, y=0, s='Direction', + horizontalalignment='center', + verticalalignment='center', + xycoords='data', + textcoords='data', + rotation=45, size=15, + bbox=dict(boxstyle="rarrow,pad=0.3", fc="cyan", ec="b", lw=2)) + +plt.show() From b7e7d29651eef1695c79f995061393dc334b3b8e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:04:29 +0800 Subject: [PATCH 0299/2002] Committed 2021/09/29 --- .../Annotating with text with box2.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/Annotating with text with box2.py diff --git a/Matplotlib Official Primer/Annotations/Annotating with text with box2.py b/Matplotlib Official Primer/Annotations/Annotating with text with box2.py new file mode 100644 index 00000000..49b12b5c --- /dev/null +++ b/Matplotlib Official Primer/Annotations/Annotating with text with box2.py @@ -0,0 +1,41 @@ +import tensorflow as tf +import numpy as np +import matplotlib.pyplot as plt + +tf.random.set_seed(1) +np.random.seed(1) + +# We generate a toy dataset of 200 training examples with 2 features (x0, x1) drawn from a +# uniform distribution between [-1, 1) +x = np.random.uniform(low=-1, high=1, size=(200, 2)) +print(x) + +# Assign the ground truth label +y = np.ones(len(x)) +print(y) + +## Applying the threshold rule: +y[x[:, 0] * x[:, 1] < 0] = 0 + +# Use half of the data (100 training examples) for training and the remaining half for +# validation +## feature set (0 - 99) +x_train = x[:100, :] +## label set (0- 99) +y_train = y[:100] + +## the feature set for validation (100 - 199) +x_valid = x[100:, :] + +## the label set for validation (100 - 199) +y_valid = y[100:] + +fig = plt.figure(figsize=(6, 6)) +plt.plot(x[y == 0, 0], x[y == 0, 1], 'o', alpha=0.75, markersize=10) +plt.plot(x[y == 1, 0], x[y == 1, 1], '<', alpha=0.75, markersize=10) +plt.xlabel(r'$x_1$', size=15) +plt.ylabel(r'$x_2$', size=15) + +plt.show() + + From d575314dba4faa2858ed9f4ceaf609f57a583ceb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:09:07 +0800 Subject: [PATCH 0300/2002] Committed 2021/09/29 --- .../Annotations/Annotating with text with box2.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Matplotlib Official Primer/Annotations/Annotating with text with box2.py b/Matplotlib Official Primer/Annotations/Annotating with text with box2.py index 49b12b5c..524b3931 100644 --- a/Matplotlib Official Primer/Annotations/Annotating with text with box2.py +++ b/Matplotlib Official Primer/Annotations/Annotating with text with box2.py @@ -30,7 +30,8 @@ ## the label set for validation (100 - 199) y_valid = y[100:] -fig = plt.figure(figsize=(6, 6)) +figure, axes = plt.subplots(nrows=1, ncols=1, figsize=(6, 6)) + plt.plot(x[y == 0, 0], x[y == 0, 1], 'o', alpha=0.75, markersize=10) plt.plot(x[y == 1, 0], x[y == 1, 1], '<', alpha=0.75, markersize=10) plt.xlabel(r'$x_1$', size=15) From 00e4ebbd1d71f9ebdbc53648dcb512a7a76d81b2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:18:27 +0800 Subject: [PATCH 0301/2002] Committed 2021/09/29 --- .../Annotating with text with box2.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Matplotlib Official Primer/Annotations/Annotating with text with box2.py b/Matplotlib Official Primer/Annotations/Annotating with text with box2.py index 524b3931..dbcfd38d 100644 --- a/Matplotlib Official Primer/Annotations/Annotating with text with box2.py +++ b/Matplotlib Official Primer/Annotations/Annotating with text with box2.py @@ -1,6 +1,6 @@ -import tensorflow as tf -import numpy as np import matplotlib.pyplot as plt +import numpy as np +import tensorflow as tf tf.random.set_seed(1) np.random.seed(1) @@ -32,11 +32,15 @@ figure, axes = plt.subplots(nrows=1, ncols=1, figsize=(6, 6)) -plt.plot(x[y == 0, 0], x[y == 0, 1], 'o', alpha=0.75, markersize=10) -plt.plot(x[y == 1, 0], x[y == 1, 1], '<', alpha=0.75, markersize=10) -plt.xlabel(r'$x_1$', size=15) -plt.ylabel(r'$x_2$', size=15) +axes.plot(x[y == 0, 0], x[y == 0, 1], 'o', alpha=0.75, markersize=10) +axes.plot(x[y == 1, 0], x[y == 1, 1], '<', alpha=0.75, markersize=10) +axes.set_xlabel(r'$x_1$', size=15) +axes.set_ylabel(r'$x_2$', size=15) -plt.show() +axes.text( + 0, 0, "Direction", ha="center", va="center", rotation=45, size=15, + bbox=dict(boxstyle="rarrow,pad=0.3", fc="cyan", ec="b", lw=2)) +plt.show() +# Reference: https://matplotlib.org/stable/tutorials/text/annotations.html#sphx-glr-tutorials-text-annotations-py From f06e36657583f5d994a94d035134c214c4eee44d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:30:23 +0800 Subject: [PATCH 0302/2002] Committed 2021/09/29 --- .../Annotations/text.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Matplotlib Official Primer/Annotations/text.py diff --git a/Matplotlib Official Primer/Annotations/text.py b/Matplotlib Official Primer/Annotations/text.py new file mode 100644 index 00000000..0a40ca0a --- /dev/null +++ b/Matplotlib Official Primer/Annotations/text.py @@ -0,0 +1,36 @@ +import matplotlib +import matplotlib.pyplot as plt + +fig = plt.figure() +ax = fig.add_subplot() +fig.subplots_adjust(top=0.85) + +# Set titles for the figure and the subplot respectively +fig.suptitle('bold figure suptitle', fontsize=14, fontweight='bold') +ax.set_title('axes title') + +ax.set_xlabel('xlabel') +ax.set_ylabel('ylabel') + +# Set both x- and y-axis limits to [0, 10] instead of default [0, 1] +ax.axis([0, 10, 0, 10]) + +ax.text(3, 8, 'boxed italics text in data coords', style='italic', + bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10}) + +ax.text(2, 6, r'an equation: $E=mc^2$', fontsize=15) + +ax.text(3, 2, 'unicode: Institut f羹r Festk繹rperphysik') + +ax.text(0.95, 0.01, 'colored text in axes coords', + verticalalignment='bottom', horizontalalignment='right', + transform=ax.transAxes, + color='green', fontsize=15) + +ax.plot([2], [1], 'o') +ax.annotate('annotate', xy=(2, 1), xytext=(3, 4), + arrowprops=dict(facecolor='black', shrink=0.05)) + +plt.show() + +# Source: https://matplotlib.org/stable/tutorials/text/text_intro.html From 9dcd0685389950e7a1a1c17e9402235e7b8ad67f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:45:36 +0800 Subject: [PATCH 0303/2002] Committed 2021/09/29 --- .../Horizontal bar chart.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Matplotlib Official Primer/Horizontal bar chart.py diff --git a/Matplotlib Official Primer/Horizontal bar chart.py b/Matplotlib Official Primer/Horizontal bar chart.py new file mode 100644 index 00000000..b4a8cb6a --- /dev/null +++ b/Matplotlib Official Primer/Horizontal bar chart.py @@ -0,0 +1,24 @@ +import matplotlib.pyplot as plt +import numpy as np + +# Fixing random state for reproducibility +np.random.seed(19680801) + + +plt.rcdefaults() +fig, ax = plt.subplots() + +# Example data +people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') +y_pos = np.arange(len(people)) +performance = 3 + 10 * np.random.rand(len(people)) +error = np.random.rand(len(people)) + +ax.barh(y_pos, performance, xerr=error, align='center') +ax.set_yticks(y_pos) +ax.set_yticklabels(people) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel('Performance') +ax.set_title('How fast do you want to go today?') + +plt.show() \ No newline at end of file From 082287c435b3268834d2342cefb2e3195ee0f01a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:47:29 +0800 Subject: [PATCH 0304/2002] Committed 2021/09/29 --- .../Horizontal bar chart2.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Matplotlib Official Primer/Horizontal bar chart2.py diff --git a/Matplotlib Official Primer/Horizontal bar chart2.py b/Matplotlib Official Primer/Horizontal bar chart2.py new file mode 100644 index 00000000..b4a8cb6a --- /dev/null +++ b/Matplotlib Official Primer/Horizontal bar chart2.py @@ -0,0 +1,24 @@ +import matplotlib.pyplot as plt +import numpy as np + +# Fixing random state for reproducibility +np.random.seed(19680801) + + +plt.rcdefaults() +fig, ax = plt.subplots() + +# Example data +people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') +y_pos = np.arange(len(people)) +performance = 3 + 10 * np.random.rand(len(people)) +error = np.random.rand(len(people)) + +ax.barh(y_pos, performance, xerr=error, align='center') +ax.set_yticks(y_pos) +ax.set_yticklabels(people) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel('Performance') +ax.set_title('How fast do you want to go today?') + +plt.show() \ No newline at end of file From 82926ee07ad31a8b4019f2f7e7266bd7c6ceb2c7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:50:23 +0800 Subject: [PATCH 0305/2002] Committed 2021/09/29 --- .../Horizontal bar chart2.py | 8 ++++-- .../Horizontal_bar_chart3.py | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 Matplotlib Official Primer/Horizontal_bar_chart3.py diff --git a/Matplotlib Official Primer/Horizontal bar chart2.py b/Matplotlib Official Primer/Horizontal bar chart2.py index b4a8cb6a..eb55b82d 100644 --- a/Matplotlib Official Primer/Horizontal bar chart2.py +++ b/Matplotlib Official Primer/Horizontal bar chart2.py @@ -11,14 +11,18 @@ # Example data people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') y_pos = np.arange(len(people)) + performance = 3 + 10 * np.random.rand(len(people)) error = np.random.rand(len(people)) ax.barh(y_pos, performance, xerr=error, align='center') + ax.set_yticks(y_pos) ax.set_yticklabels(people) -ax.invert_yaxis() # labels read top-to-bottom + +# ax.invert_yaxis() # labels read top-to-bottom + ax.set_xlabel('Performance') ax.set_title('How fast do you want to go today?') -plt.show() \ No newline at end of file +plt.show() diff --git a/Matplotlib Official Primer/Horizontal_bar_chart3.py b/Matplotlib Official Primer/Horizontal_bar_chart3.py new file mode 100644 index 00000000..eb55b82d --- /dev/null +++ b/Matplotlib Official Primer/Horizontal_bar_chart3.py @@ -0,0 +1,28 @@ +import matplotlib.pyplot as plt +import numpy as np + +# Fixing random state for reproducibility +np.random.seed(19680801) + + +plt.rcdefaults() +fig, ax = plt.subplots() + +# Example data +people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') +y_pos = np.arange(len(people)) + +performance = 3 + 10 * np.random.rand(len(people)) +error = np.random.rand(len(people)) + +ax.barh(y_pos, performance, xerr=error, align='center') + +ax.set_yticks(y_pos) +ax.set_yticklabels(people) + +# ax.invert_yaxis() # labels read top-to-bottom + +ax.set_xlabel('Performance') +ax.set_title('How fast do you want to go today?') + +plt.show() From 12495aae7307141464193dc8036cb27907314810 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:52:34 +0800 Subject: [PATCH 0306/2002] Committed 2021/09/29 --- Matplotlib Official Primer/Horizontal bar chart.py | 4 +++- Matplotlib Official Primer/Horizontal_bar_chart3.py | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Matplotlib Official Primer/Horizontal bar chart.py b/Matplotlib Official Primer/Horizontal bar chart.py index b4a8cb6a..f01377ce 100644 --- a/Matplotlib Official Primer/Horizontal bar chart.py +++ b/Matplotlib Official Primer/Horizontal bar chart.py @@ -21,4 +21,6 @@ ax.set_xlabel('Performance') ax.set_title('How fast do you want to go today?') -plt.show() \ No newline at end of file +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/barh.html diff --git a/Matplotlib Official Primer/Horizontal_bar_chart3.py b/Matplotlib Official Primer/Horizontal_bar_chart3.py index eb55b82d..100fc2c3 100644 --- a/Matplotlib Official Primer/Horizontal_bar_chart3.py +++ b/Matplotlib Official Primer/Horizontal_bar_chart3.py @@ -4,8 +4,8 @@ # Fixing random state for reproducibility np.random.seed(19680801) - plt.rcdefaults() + fig, ax = plt.subplots() # Example data @@ -15,12 +15,12 @@ performance = 3 + 10 * np.random.rand(len(people)) error = np.random.rand(len(people)) -ax.barh(y_pos, performance, xerr=error, align='center') +ax.barh(y_pos, performance, align='center') ax.set_yticks(y_pos) ax.set_yticklabels(people) -# ax.invert_yaxis() # labels read top-to-bottom +ax.invert_yaxis() # labels read top-to-bottom ax.set_xlabel('Performance') ax.set_title('How fast do you want to go today?') From c54b2a6df4783d3684ed9604ac8686bbc22733d5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:55:36 +0800 Subject: [PATCH 0307/2002] Committed 2021/09/29 --- Matplotlib Official Primer/Stacked bar chart2.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Matplotlib Official Primer/Stacked bar chart2.py diff --git a/Matplotlib Official Primer/Stacked bar chart2.py b/Matplotlib Official Primer/Stacked bar chart2.py new file mode 100644 index 00000000..e69de29b From e09df63ae5d7c47447eaca45a8f71ee48d4439d0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 29 Sep 2021 18:57:08 +0800 Subject: [PATCH 0308/2002] Committed 2021/09/29 --- .../Stacked bar chart2.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Matplotlib Official Primer/Stacked bar chart2.py b/Matplotlib Official Primer/Stacked bar chart2.py index e69de29b..351befec 100644 --- a/Matplotlib Official Primer/Stacked bar chart2.py +++ b/Matplotlib Official Primer/Stacked bar chart2.py @@ -0,0 +1,23 @@ +import matplotlib.pyplot as plt + + +labels = ['G1', 'G2', 'G3', 'G4', 'G5'] +men_means = [20, 35, 30, 35, 27] +women_means = [25, 32, 34, 20, 25] +men_std = [2, 3, 4, 1, 2] +women_std = [3, 5, 2, 3, 3] +width = 0.35 # the width of the bars: can also be len(x) sequence + +fig, ax = plt.subplots() + +ax.bar(labels, men_means, width, label='Men') +ax.bar(labels, women_means, width, bottom=men_means, + label='Women') + +ax.set_ylabel('Scores') +ax.set_title('Scores by group and gender') +ax.legend() + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_stacked.html From c3d18ed9ee4672aa9c67e92cb8b14a638e980215 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 00:22:57 +0800 Subject: [PATCH 0309/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Errorbar_function.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Matplotlib Official Primer/Errorbar_function.py diff --git a/Matplotlib Official Primer/Errorbar_function.py b/Matplotlib Official Primer/Errorbar_function.py new file mode 100644 index 00000000..177d9195 --- /dev/null +++ b/Matplotlib Official Primer/Errorbar_function.py @@ -0,0 +1,10 @@ +import numpy as np +import matplotlib.pyplot as plt + +# example data +x = np.arange(0.1, 4, 0.5) +y = np.exp(-x) + +fig, ax = plt.subplots() +ax.errorbar(x, y, xerr=0.2, yerr=0.4) +plt.show() From cc8c14ea168ac825acf0a8f01764bfb50174719c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 00:26:43 +0800 Subject: [PATCH 0310/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Errorbar_function.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Matplotlib Official Primer/Errorbar_function.py b/Matplotlib Official Primer/Errorbar_function.py index 177d9195..b142c722 100644 --- a/Matplotlib Official Primer/Errorbar_function.py +++ b/Matplotlib Official Primer/Errorbar_function.py @@ -7,4 +7,7 @@ fig, ax = plt.subplots() ax.errorbar(x, y, xerr=0.2, yerr=0.4) + +plt.title('Error_bar function') + plt.show() From 1ec6c08460801399c3116e641683b264bb4e2684 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 00:30:58 +0800 Subject: [PATCH 0311/2002] Committed 2021/09/30 --- ...Different ways of specifying error bars.py | 24 +++++++++++++++++++ .../Errorbar_function.py | 2 ++ 2 files changed, 26 insertions(+) create mode 100644 Matplotlib Official Primer/Different ways of specifying error bars.py diff --git a/Matplotlib Official Primer/Different ways of specifying error bars.py b/Matplotlib Official Primer/Different ways of specifying error bars.py new file mode 100644 index 00000000..3558e5c9 --- /dev/null +++ b/Matplotlib Official Primer/Different ways of specifying error bars.py @@ -0,0 +1,24 @@ +import numpy as np +import matplotlib.pyplot as plt + +# example data +x = np.arange(0.1, 4, 0.5) +y = np.exp(-x) + +# example error bar values that vary with x-position +error = 0.1 + 0.2 * x + +fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True) +ax0.errorbar(x, y, yerr=error, fmt='-o') +ax0.set_title('variable, symmetric error') + +# error bar values w/ different -/+ errors that +# also vary with the x-position +lower_error = 0.4 * error +upper_error = error +asymmetric_error = [lower_error, upper_error] + +ax1.errorbar(x, y, xerr=asymmetric_error, fmt='o') +ax1.set_title('variable, asymmetric error') +ax1.set_yscale('log') +plt.show() \ No newline at end of file diff --git a/Matplotlib Official Primer/Errorbar_function.py b/Matplotlib Official Primer/Errorbar_function.py index b142c722..967880c0 100644 --- a/Matplotlib Official Primer/Errorbar_function.py +++ b/Matplotlib Official Primer/Errorbar_function.py @@ -11,3 +11,5 @@ plt.title('Error_bar function') plt.show() + +# Source: https://matplotlib.org/stable/gallery/statistics/errorbar.html From 32e9228517a2522eaba1d7441a81f1f4e6e47fa1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 00:38:57 +0800 Subject: [PATCH 0312/2002] Committed 2021/09/30 --- .../Different ways of specifying error bars.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matplotlib Official Primer/Different ways of specifying error bars.py b/Matplotlib Official Primer/Different ways of specifying error bars.py index 3558e5c9..4fbe21cb 100644 --- a/Matplotlib Official Primer/Different ways of specifying error bars.py +++ b/Matplotlib Official Primer/Different ways of specifying error bars.py @@ -21,4 +21,4 @@ ax1.errorbar(x, y, xerr=asymmetric_error, fmt='o') ax1.set_title('variable, asymmetric error') ax1.set_yscale('log') -plt.show() \ No newline at end of file +plt.show() From 2dd7f8ea2d8e2e6ec935d9e9eca259f030f2f8c6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 00:44:34 +0800 Subject: [PATCH 0313/2002] Committed 2021/09/30 --- .../Different ways of specifying error bars.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Matplotlib Official Primer/Different ways of specifying error bars.py b/Matplotlib Official Primer/Different ways of specifying error bars.py index 4fbe21cb..173cdbb5 100644 --- a/Matplotlib Official Primer/Different ways of specifying error bars.py +++ b/Matplotlib Official Primer/Different ways of specifying error bars.py @@ -22,3 +22,5 @@ ax1.set_title('variable, asymmetric error') ax1.set_yscale('log') plt.show() + +# Source: https://matplotlib.org/stable/gallery/statistics/errorbar_features.html From 206895bb585b2f55aff4c8e353a4a9f4e65a001e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 00:46:36 +0800 Subject: [PATCH 0314/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Stacked bar chart.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Matplotlib Official Primer/Stacked bar chart.py b/Matplotlib Official Primer/Stacked bar chart.py index 5ac53e15..aa2522b1 100644 --- a/Matplotlib Official Primer/Stacked bar chart.py +++ b/Matplotlib Official Primer/Stacked bar chart.py @@ -10,7 +10,10 @@ fig, ax = plt.subplots() +# the parameters yerr used for error bars, ax.bar(labels, men_means, width, yerr=men_std, label='Men') + +# and bottom to stack the women's bars on top of the men's bars. ax.bar(labels, women_means, width, yerr=women_std, bottom=men_means, label='Women') From 772ee9e009892403d727a146ac83606708a8b190 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 00:59:04 +0800 Subject: [PATCH 0315/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Bar label.py | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Matplotlib Official Primer/Bar label.py diff --git a/Matplotlib Official Primer/Bar label.py b/Matplotlib Official Primer/Bar label.py new file mode 100644 index 00000000..8f10c8c7 --- /dev/null +++ b/Matplotlib Official Primer/Bar label.py @@ -0,0 +1,30 @@ +import matplotlib.pyplot as plt +import numpy as np + +N = 5 +menMeans = (20, 35, 30, 35, -27) +womenMeans = (25, 32, 34, 20, -25) +menStd = (2, 3, 4, 1, 2) +womenStd = (3, 5, 2, 3, 3) +ind = np.arange(N) # the x locations for the groups +width = 0.35 # the width of the bars: can also be len(x) sequence + +fig, ax = plt.subplots() + +p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men') +p2 = ax.bar(ind, womenMeans, width, + bottom=menMeans, yerr=womenStd, label='Women') + +ax.axhline(0, color='grey', linewidth=0.8) +ax.set_ylabel('Scores') +ax.set_title('Scores by group and gender') +ax.set_xticks(ind) +ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5')) +ax.legend() + +# Label with label_type 'center' instead of the default 'edge' +ax.bar_label(p1, label_type='center') +ax.bar_label(p2, label_type='center') +ax.bar_label(p2) + +plt.show() From b556870b1dfee4d31eab0a185ea0bbb5c0d879d9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 01:03:45 +0800 Subject: [PATCH 0316/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Bar Label Demo 1.py | 0 Matplotlib Official Primer/Bar label.py | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 Matplotlib Official Primer/Bar Label Demo 1.py diff --git a/Matplotlib Official Primer/Bar Label Demo 1.py b/Matplotlib Official Primer/Bar Label Demo 1.py new file mode 100644 index 00000000..e69de29b diff --git a/Matplotlib Official Primer/Bar label.py b/Matplotlib Official Primer/Bar label.py index 8f10c8c7..5b76a806 100644 --- a/Matplotlib Official Primer/Bar label.py +++ b/Matplotlib Official Primer/Bar label.py @@ -25,6 +25,8 @@ # Label with label_type 'center' instead of the default 'edge' ax.bar_label(p1, label_type='center') ax.bar_label(p2, label_type='center') -ax.bar_label(p2) +# ax.bar_label(p2) + +plt.savefig('Bar label.jpg') plt.show() From b1242fe1b0c3fe635290da943d31395cd2a65f99 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 01:07:16 +0800 Subject: [PATCH 0317/2002] Committed 2021/09/30 --- .../Bar Label Demo 1.jpg | Bin 0 -> 41565 bytes .../Bar Label Demo 1.py | 34 ++++++++++++++++++ Matplotlib Official Primer/Bar label.jpg | Bin 0 -> 40194 bytes 3 files changed, 34 insertions(+) create mode 100644 Matplotlib Official Primer/Bar Label Demo 1.jpg create mode 100644 Matplotlib Official Primer/Bar label.jpg diff --git a/Matplotlib Official Primer/Bar Label Demo 1.jpg b/Matplotlib Official Primer/Bar Label Demo 1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b96eb974eb1131c10ad7cf4e8a97b941191926a GIT binary patch literal 41565 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 Q@>g@4|6A_|`@Q4;014l<#sB~S literal 0 HcmV?d00001 From 6e79cb5b87f0ec0266ba3727bdf9b7d877ceb252 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 09:54:02 +0800 Subject: [PATCH 0318/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Bar label 2.jpg | Bin 0 -> 39479 bytes Matplotlib Official Primer/Bar label 2.py | 32 +++++++++++++++++++++ Matplotlib Official Primer/Bar label 3.jpg | Bin 0 -> 39972 bytes Matplotlib Official Primer/Bar label 3.py | 32 +++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 Matplotlib Official Primer/Bar label 2.jpg create mode 100644 Matplotlib Official Primer/Bar label 2.py create mode 100644 Matplotlib Official Primer/Bar label 3.jpg create mode 100644 Matplotlib Official Primer/Bar label 3.py diff --git a/Matplotlib Official Primer/Bar label 2.jpg b/Matplotlib Official Primer/Bar label 2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e46620c449336a9524d4abe95b8775ff37c7a7cf GIT binary patch literal 39479 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 Ht^NN1J%dj6 literal 0 HcmV?d00001 diff --git a/Matplotlib Official Primer/Bar label 2.py b/Matplotlib Official Primer/Bar label 2.py new file mode 100644 index 00000000..dea95650 --- /dev/null +++ b/Matplotlib Official Primer/Bar label 2.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt +import numpy as np + +N = 5 +menMeans = (20, 35, 30, 35, -27) +womenMeans = (25, 32, 34, 20, -25) +menStd = (2, 3, 4, 1, 2) +womenStd = (3, 5, 2, 3, 3) +ind = np.arange(N) # the x locations for the groups +width = 0.35 # the width of the bars: can also be len(x) sequence + +fig, ax = plt.subplots() + +p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men') +p2 = ax.bar(ind, womenMeans, width, + bottom=menMeans, yerr=womenStd, label='Women') + +ax.axhline(0, color='grey', linewidth=0.8) +ax.set_ylabel('Scores') +ax.set_title('Scores by group and gender') +ax.set_xticks(ind) +ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5')) +ax.legend() + +# Label with label_type 'center' instead of the default 'edge' +ax.bar_label(p1, label_type='center') +# ax.bar_label(p2, label_type='center') +ax.bar_label(p2) + +plt.savefig('Bar label 2.jpg') + +plt.show() diff --git a/Matplotlib Official Primer/Bar label 3.jpg b/Matplotlib Official Primer/Bar label 3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..943c8884948560d5962321e00250f23d4686fe73 GIT binary patch literal 39972 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 literal 0 HcmV?d00001 diff --git a/Matplotlib Official Primer/Bar label 3.py b/Matplotlib Official Primer/Bar label 3.py new file mode 100644 index 00000000..ed694b83 --- /dev/null +++ b/Matplotlib Official Primer/Bar label 3.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt +import numpy as np + +N = 5 +menMeans = (20, 35, 30, 35, -27) +womenMeans = (25, 32, 34, 20, -25) +menStd = (2, 3, 4, 1, 2) +womenStd = (3, 5, 2, 3, 3) +ind = np.arange(N) # the x locations for the groups +width = 0.35 # the width of the bars: can also be len(x) sequence + +fig, ax = plt.subplots() + +p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men') +p2 = ax.bar(ind, womenMeans, width, + bottom=menMeans, yerr=womenStd, label='Women') + +ax.axhline(0, color='grey', linewidth=0.8) +ax.set_ylabel('Scores') +ax.set_title('Scores by group and gender') +ax.set_xticks(ind) +ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5')) +ax.legend() + +# Label with label_type 'center' instead of the default 'edge' +# ax.bar_label(p1, label_type='center') +ax.bar_label(p2, label_type='center') +ax.bar_label(p2) + +plt.savefig('Bar label 3.jpg') + +plt.show() From 0990a6e573b473ae546deb20ed5101b445743dc3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:40:06 +0800 Subject: [PATCH 0319/2002] Committed 2021/09/30 --- .../Population_composition_in_history2.py | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history2.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history2.py b/The attainments and realizations of my dreams/Population_composition_in_history2.py new file mode 100644 index 00000000..79615fff --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history2.py @@ -0,0 +1,140 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +plt.bar(year, south, color='g', label="South Taiwan") +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +cm = 1/2.54 # centimeters in inches.[2] + +# Change the figure size.[1] +plt.figure(figsize=(18*cm, 8*cm)) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/24073700/14900011 +# 2. https://matplotlib.org/devdocs/gallery/subplots_axes_and_figures/figure_size_units.html From 5c5accb61b0e3823cb52595a7a96ade731708cb4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:47:25 +0800 Subject: [PATCH 0320/2002] Committed 2021/09/30 --- .../Population_composition_in_history2.py | 24 +-- .../Population_composition_in_history3.py | 140 ++++++++++++++++++ 2 files changed, 153 insertions(+), 11 deletions(-) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history3.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history2.py b/The attainments and realizations of my dreams/Population_composition_in_history2.py index 79615fff..be0551ae 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history2.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history2.py @@ -110,14 +110,15 @@ east = np.array(eastTW) outlying = np.array(outlyingTW) -plt.bar(year, south, color='g', label="South Taiwan") -plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") -plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") -plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") -plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") +cm = 1/2.54 -# get the current axes and store it to ax -axes = plt.gca() +figure, axes = plt.subplots(figsize=(18*cm, 8*cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan") +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) @@ -128,10 +129,11 @@ plt.title("The composition of Taiwan's population in history") plt.legend() -cm = 1/2.54 # centimeters in inches.[2] - -# Change the figure size.[1] -plt.figure(figsize=(18*cm, 8*cm)) +# Label with label_type 'center' instead of the default 'edge' +axes.bar_label(p1, label_type='center') +axes.bar_label(p2, label_type='center') +axes.bar_label(p3, label_type='center') +axes.bar_label(p2) plt.show() diff --git a/The attainments and realizations of my dreams/Population_composition_in_history3.py b/The attainments and realizations of my dreams/Population_composition_in_history3.py new file mode 100644 index 00000000..79615fff --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history3.py @@ -0,0 +1,140 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +plt.bar(year, south, color='g', label="South Taiwan") +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +cm = 1/2.54 # centimeters in inches.[2] + +# Change the figure size.[1] +plt.figure(figsize=(18*cm, 8*cm)) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/24073700/14900011 +# 2. https://matplotlib.org/devdocs/gallery/subplots_axes_and_figures/figure_size_units.html From fe3d1a78cc6c90723001647aae2153bafb1a36b0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:57:50 +0800 Subject: [PATCH 0321/2002] Committed 2021/09/30 --- .../Population_composition_in_history3.py | 14 +- .../Population_composition_in_history4.py | 144 ++++++++++++++++++ 2 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history4.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history3.py b/The attainments and realizations of my dreams/Population_composition_in_history3.py index 79615fff..d5de3833 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history3.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history3.py @@ -110,11 +110,11 @@ east = np.array(eastTW) outlying = np.array(outlyingTW) -plt.bar(year, south, color='g', label="South Taiwan") -plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") -plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") -plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") -plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") +p1 = plt.bar(year, south, color='g', label="South Taiwan") +p2 = plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") # get the current axes and store it to ax axes = plt.gca() @@ -133,6 +133,10 @@ # Change the figure size.[1] plt.figure(figsize=(18*cm, 8*cm)) +plt.bar_label(container=p1, fmt='%.2f', label_type='center') +plt.bar_label(container=p2, fmt='%.2f', label_type='center') +plt.bar_label(container=p3, fmt='%.2f', label_type='center') + plt.show() # References: diff --git a/The attainments and realizations of my dreams/Population_composition_in_history4.py b/The attainments and realizations of my dreams/Population_composition_in_history4.py new file mode 100644 index 00000000..d5de3833 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history4.py @@ -0,0 +1,144 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +p1 = plt.bar(year, south, color='g', label="South Taiwan") +p2 = plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +cm = 1/2.54 # centimeters in inches.[2] + +# Change the figure size.[1] +plt.figure(figsize=(18*cm, 8*cm)) + +plt.bar_label(container=p1, fmt='%.2f', label_type='center') +plt.bar_label(container=p2, fmt='%.2f', label_type='center') +plt.bar_label(container=p3, fmt='%.2f', label_type='center') + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/24073700/14900011 +# 2. https://matplotlib.org/devdocs/gallery/subplots_axes_and_figures/figure_size_units.html From d793a58dd686ea994c4d142c4512b221c64e4b2e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 11:00:59 +0800 Subject: [PATCH 0322/2002] Committed 2021/09/30 --- .../Population_composition_in_history4.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history4.py b/The attainments and realizations of my dreams/Population_composition_in_history4.py index d5de3833..d4531287 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history4.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history4.py @@ -110,14 +110,14 @@ east = np.array(eastTW) outlying = np.array(outlyingTW) -p1 = plt.bar(year, south, color='g', label="South Taiwan") -p2 = plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") -p3 = plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") -p4 = plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") -p5 = plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") +cm = 1/2.54 +figure, axes = plt.subplots(figsize=(18*cm, 8*cm)) -# get the current axes and store it to ax -axes = plt.gca() +p1 = axes.bar(year, south, color='g', label="South Taiwan") +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) @@ -128,11 +128,6 @@ plt.title("The composition of Taiwan's population in history") plt.legend() -cm = 1/2.54 # centimeters in inches.[2] - -# Change the figure size.[1] -plt.figure(figsize=(18*cm, 8*cm)) - plt.bar_label(container=p1, fmt='%.2f', label_type='center') plt.bar_label(container=p2, fmt='%.2f', label_type='center') plt.bar_label(container=p3, fmt='%.2f', label_type='center') From 679af214326c2a27488767a11ccd0b8bdcf90387 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 11:01:15 +0800 Subject: [PATCH 0323/2002] Committed 2021/09/30 --- .../Population_composition_in_history4.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history4.py b/The attainments and realizations of my dreams/Population_composition_in_history4.py index d4531287..a3b1479a 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history4.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history4.py @@ -128,9 +128,9 @@ plt.title("The composition of Taiwan's population in history") plt.legend() -plt.bar_label(container=p1, fmt='%.2f', label_type='center') -plt.bar_label(container=p2, fmt='%.2f', label_type='center') -plt.bar_label(container=p3, fmt='%.2f', label_type='center') +axes.bar_label(container=p1, fmt='%.2f', label_type='center') +axes.bar_label(container=p2, fmt='%.2f', label_type='center') +axes.bar_label(container=p3, fmt='%.2f', label_type='center') plt.show() From b55b55c6a9bded13e539be7754d5a03abb8c39b6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 11:16:09 +0800 Subject: [PATCH 0324/2002] Committed 2021/09/30 --- .../Population_composition_in_history4.py | 6 +- .../Population_composition_in_history5.py | 139 ++++++++++++++++++ 2 files changed, 142 insertions(+), 3 deletions(-) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history5.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history4.py b/The attainments and realizations of my dreams/Population_composition_in_history4.py index a3b1479a..947f122d 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history4.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history4.py @@ -128,9 +128,9 @@ plt.title("The composition of Taiwan's population in history") plt.legend() -axes.bar_label(container=p1, fmt='%.2f', label_type='center') -axes.bar_label(container=p2, fmt='%.2f', label_type='center') -axes.bar_label(container=p3, fmt='%.2f', label_type='center') +axes.bar_label(container=p1, fmt='{:.2f}'.format(p1), label_type='center') +axes.bar_label(container=p2, fmt='{:.2f}'.format(p2), label_type='center') +axes.bar_label(container=p3, fmt='{:.2f}'.format(p3), label_type='center') plt.show() diff --git a/The attainments and realizations of my dreams/Population_composition_in_history5.py b/The attainments and realizations of my dreams/Population_composition_in_history5.py new file mode 100644 index 00000000..947f122d --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history5.py @@ -0,0 +1,139 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +cm = 1/2.54 +figure, axes = plt.subplots(figsize=(18*cm, 8*cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan") +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +axes.bar_label(container=p1, fmt='{:.2f}'.format(p1), label_type='center') +axes.bar_label(container=p2, fmt='{:.2f}'.format(p2), label_type='center') +axes.bar_label(container=p3, fmt='{:.2f}'.format(p3), label_type='center') + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/24073700/14900011 +# 2. https://matplotlib.org/devdocs/gallery/subplots_axes_and_figures/figure_size_units.html From d2bed72aa1def37a11aa538e20aced827ed60964 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 11:47:22 +0800 Subject: [PATCH 0325/2002] Committed 2021/09/30 --- .../Labeling a pie and a donut2.py | 35 +++++++++++++++++++ .../Population_composition_in_history5.py | 12 +++++-- 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 Matplotlib Official Primer/Labeling a pie and a donut2.py diff --git a/Matplotlib Official Primer/Labeling a pie and a donut2.py b/Matplotlib Official Primer/Labeling a pie and a donut2.py new file mode 100644 index 00000000..4ef4739d --- /dev/null +++ b/Matplotlib Official Primer/Labeling a pie and a donut2.py @@ -0,0 +1,35 @@ +import numpy as np +import matplotlib.pyplot as plt + +fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) + +recipe = ["375 g flour", + "75 g sugar", + "250 g butter", + "300 g berries"] + +data = [float(x.split()[0]) for x in recipe] +ingredients = [x.split()[-1] for x in recipe] + + +def func(pct, allvals): + absolute = int(round(pct/100.*np.sum(allvals))) + return "{:.1f}%\n({:d} g)".format(pct, absolute) + + +wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), + textprops=dict(color="w")) + +ax.legend(wedges, ingredients, + title="Ingredients", + loc="center left", + bbox_to_anchor=(1, 0, 0.5, 1)) + +plt.setp(autotexts, size=8, weight="bold") + +ax.set_title("Matplotlib bakery: A pie") + +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Population_composition_in_history5.py b/The attainments and realizations of my dreams/Population_composition_in_history5.py index 947f122d..de7f0509 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history5.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history5.py @@ -110,6 +110,12 @@ east = np.array(eastTW) outlying = np.array(outlyingTW) +print(south) +print(central) +print(north) +print(east) +print(outlying) + cm = 1/2.54 figure, axes = plt.subplots(figsize=(18*cm, 8*cm)) @@ -128,9 +134,9 @@ plt.title("The composition of Taiwan's population in history") plt.legend() -axes.bar_label(container=p1, fmt='{:.2f}'.format(p1), label_type='center') -axes.bar_label(container=p2, fmt='{:.2f}'.format(p2), label_type='center') -axes.bar_label(container=p3, fmt='{:.2f}'.format(p3), label_type='center') +# axes.bar_label(container=p1, fmt='{:.2f}'.format(p1), label_type='center') +# axes.bar_label(container=p2, fmt='{:.2f}'.format(p2), label_type='center') +# axes.bar_label(container=p3, fmt='{:.2f}'.format(p3), label_type='center') plt.show() From a08617c3d8c4d8297baf6b57754cd5d93a754d52 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 11:56:45 +0800 Subject: [PATCH 0326/2002] Committed 2021/09/30 --- .../Labeling a pie and a donut2.py | 7 +++- .../Labeling a pie and a donut3.py | 40 +++++++++++++++++++ Matplotlib Official Primer/bbox_to_anchor.py | 20 ++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 Matplotlib Official Primer/Labeling a pie and a donut3.py create mode 100644 Matplotlib Official Primer/bbox_to_anchor.py diff --git a/Matplotlib Official Primer/Labeling a pie and a donut2.py b/Matplotlib Official Primer/Labeling a pie and a donut2.py index 4ef4739d..5d0b2649 100644 --- a/Matplotlib Official Primer/Labeling a pie and a donut2.py +++ b/Matplotlib Official Primer/Labeling a pie and a donut2.py @@ -20,10 +20,15 @@ def func(pct, allvals): wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), textprops=dict(color="w")) +# We can use the legend's bbox_to_anchor argument +# to position the legend outside of the pie. +# Here we use the axes coordinates (1, 0, 0.5, 1) together with the location "center left"; +# i.e. the left central point of the legend will be at the left central point of the bounding box, +# spanning from (1, 0) to (1.5, 1) in axes coordinates. ax.legend(wedges, ingredients, title="Ingredients", loc="center left", - bbox_to_anchor=(1, 0, 0.5, 1)) + bbox_to_anchor=(1, 10, 0.5, 1)) plt.setp(autotexts, size=8, weight="bold") diff --git a/Matplotlib Official Primer/Labeling a pie and a donut3.py b/Matplotlib Official Primer/Labeling a pie and a donut3.py new file mode 100644 index 00000000..9e2a29a3 --- /dev/null +++ b/Matplotlib Official Primer/Labeling a pie and a donut3.py @@ -0,0 +1,40 @@ +import numpy as np +import matplotlib.pyplot as plt + +fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) + +recipe = ["375 g flour", + "75 g sugar", + "250 g butter", + "300 g berries"] + +data = [float(x.split()[0]) for x in recipe] +ingredients = [x.split()[-1] for x in recipe] + + +def func(pct, allvals): + absolute = int(round(pct/100.*np.sum(allvals))) + return "{:.1f}%\n({:d} g)".format(pct, absolute) + + +wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), + textprops=dict(color="w")) + +# We can use the legend's bbox_to_anchor argument +# to position the legend outside of the pie. +# Here we use the axes coordinates (1, 0, 0.5, 1) together with the location "center left"; +# i.e. the left central point of the legend will be at the left central point of the bounding box, +# spanning from (1, 0) to (1.5, 1) in axes coordinates. +ax.legend(wedges, ingredients, + title="Ingredients", + loc="center left", + bbox_to_anchor=(1, 0, 0.5, 1)) + +plt.setp(autotexts, size=8, weight="bold") + +ax.set_title("Matplotlib bakery: A pie") + +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py \ No newline at end of file diff --git a/Matplotlib Official Primer/bbox_to_anchor.py b/Matplotlib Official Primer/bbox_to_anchor.py new file mode 100644 index 00000000..82a09e10 --- /dev/null +++ b/Matplotlib Official Primer/bbox_to_anchor.py @@ -0,0 +1,20 @@ +import matplotlib.pyplot as plt +import numpy as np + +fig = plt.figure() +ax = fig.add_subplot(projection="polar", facecolor="lightgoldenrodyellow") + +r = np.linspace(0, 3, 301) +theta = 2 * np.pi * r +ax.plot(theta, r, color="tab:orange", lw=3, label="a line") +ax.plot(0.5 * theta, r, color="tab:blue", ls="--", lw=3, label="another line") +ax.tick_params(grid_color="palegoldenrod") +# For polar axes, it may be useful to move the legend slightly away from the +# axes center, to avoid overlap between the legend and the axes. The following +# snippet places the legend's lower left corner just outside of the polar axes +# at an angle of 67.5 degrees in polar coordinates. +angle = np.deg2rad(67.5) +ax.legend(loc="lower left", + bbox_to_anchor=(.5 + np.cos(angle)/2, .5 + np.sin(angle)/2)) + +plt.show() \ No newline at end of file From 23fec07eb46159d8417269c1330b56785d56b2fd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 12:13:46 +0800 Subject: [PATCH 0327/2002] Committed 2021/09/30 --- .../Anatomy of a figure.py | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 Matplotlib Official Primer/Anatomy of a figure.py diff --git a/Matplotlib Official Primer/Anatomy of a figure.py b/Matplotlib Official Primer/Anatomy of a figure.py new file mode 100644 index 00000000..31d86b00 --- /dev/null +++ b/Matplotlib Official Primer/Anatomy of a figure.py @@ -0,0 +1,138 @@ +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.ticker import AutoMinorLocator, MultipleLocator + +np.random.seed(19680801) + +X = np.linspace(0.5, 3.5, 100) +Y1 = 3+np.cos(X) +Y2 = 1+np.cos(1+X/0.75)/2 +Y3 = np.random.uniform(Y1, Y2, len(X)) + +fig = plt.figure(figsize=(8, 8)) +ax = fig.add_subplot(1, 1, 1, aspect=1) + + +def minor_tick(x, pos): + if not x % 1.0: + return "" + return f"{x:.2f}" + +ax.xaxis.set_major_locator(MultipleLocator(1.000)) +ax.xaxis.set_minor_locator(AutoMinorLocator(4)) +ax.yaxis.set_major_locator(MultipleLocator(1.000)) +ax.yaxis.set_minor_locator(AutoMinorLocator(4)) +# FuncFormatter is created and used automatically +ax.xaxis.set_minor_formatter(minor_tick) + +ax.set_xlim(0, 4) +ax.set_ylim(0, 4) + +ax.tick_params(which='major', width=1.0) +ax.tick_params(which='major', length=10) +ax.tick_params(which='minor', width=1.0, labelsize=10) +ax.tick_params(which='minor', length=5, labelsize=10, labelcolor='0.25') + +ax.grid(linestyle="--", linewidth=0.5, color='.25', zorder=-10) + +ax.plot(X, Y1, c=(0.25, 0.25, 1.00), lw=2, label="Blue signal", zorder=10) +ax.plot(X, Y2, c=(1.00, 0.25, 0.25), lw=2, label="Red signal") +ax.plot(X, Y3, linewidth=0, + marker='o', markerfacecolor='w', markeredgecolor='k') + +ax.set_title("Anatomy of a figure", fontsize=20, verticalalignment='bottom') +ax.set_xlabel("X axis label") +ax.set_ylabel("Y axis label") + +ax.legend() + + +def circle(x, y, radius=0.15): + from matplotlib.patches import Circle + from matplotlib.patheffects import withStroke + circle = Circle((x, y), radius, clip_on=False, zorder=10, linewidth=1, + edgecolor='black', facecolor=(0, 0, 0, .0125), + path_effects=[withStroke(linewidth=5, foreground='w')]) + ax.add_artist(circle) + + +def text(x, y, text): + ax.text(x, y, text, backgroundcolor="white", + ha='center', va='top', weight='bold', color='blue') + + +# Minor tick +circle(0.50, -0.10) +text(0.50, -0.32, "Minor tick label") + +# Major tick +circle(-0.03, 4.00) +text(0.03, 3.80, "Major tick") + +# Minor tick +circle(0.00, 3.50) +text(0.00, 3.30, "Minor tick") + +# Major tick label +circle(-0.15, 3.00) +text(-0.15, 2.80, "Major tick label") + +# X Label +circle(1.80, -0.27) +text(1.80, -0.45, "X axis label") + +# Y Label +circle(-0.27, 1.80) +text(-0.27, 1.6, "Y axis label") + +# Title +circle(1.60, 4.13) +text(1.60, 3.93, "Title") + +# Blue plot +circle(1.75, 2.80) +text(1.75, 2.60, "Line\n(line plot)") + +# Red plot +circle(1.20, 0.60) +text(1.20, 0.40, "Line\n(line plot)") + +# Scatter plot +circle(3.20, 1.75) +text(3.20, 1.55, "Markers\n(scatter plot)") + +# Grid +circle(3.00, 3.00) +text(3.00, 2.80, "Grid") + +# Legend +circle(3.70, 3.80) +text(3.70, 3.60, "Legend") + +# Axes +circle(0.5, 0.5) +text(0.5, 0.3, "Axes") + +# Figure +circle(-0.3, 0.65) +text(-0.3, 0.45, "Figure") + +color = 'blue' +ax.annotate('Spines', xy=(4.0, 0.35), xytext=(3.3, 0.5), + weight='bold', color=color, + arrowprops=dict(arrowstyle='->', + connectionstyle="arc3", + color=color)) + +ax.annotate('', xy=(3.15, 0.0), xytext=(3.45, 0.45), + weight='bold', color=color, + arrowprops=dict(arrowstyle='->', + connectionstyle="arc3", + color=color)) + +ax.text(4.0, -0.4, "Made with https://matplotlib.org", + fontsize=10, ha="right", color='.5') + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/showcase/anatomy.html#sphx-glr-gallery-showcase-anatomy-py From 968e7894f91f7680d3dd14e3d29659adc4da5b5a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 12:22:09 +0800 Subject: [PATCH 0328/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Anatomy of a figure.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Matplotlib Official Primer/Anatomy of a figure.py b/Matplotlib Official Primer/Anatomy of a figure.py index 31d86b00..19632e9b 100644 --- a/Matplotlib Official Primer/Anatomy of a figure.py +++ b/Matplotlib Official Primer/Anatomy of a figure.py @@ -22,6 +22,7 @@ def minor_tick(x, pos): ax.xaxis.set_minor_locator(AutoMinorLocator(4)) ax.yaxis.set_major_locator(MultipleLocator(1.000)) ax.yaxis.set_minor_locator(AutoMinorLocator(4)) + # FuncFormatter is created and used automatically ax.xaxis.set_minor_formatter(minor_tick) From 4d1259dd87a6a612e04c5284bf63b46354aa45d5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 12:39:58 +0800 Subject: [PATCH 0329/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Spacing.py | 31 ++++++++++++++++++++++++++ Matplotlib Official Primer/Spacing2.py | 31 ++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 Matplotlib Official Primer/Spacing.py create mode 100644 Matplotlib Official Primer/Spacing2.py diff --git a/Matplotlib Official Primer/Spacing.py b/Matplotlib Official Primer/Spacing.py new file mode 100644 index 00000000..2e384cdc --- /dev/null +++ b/Matplotlib Official Primer/Spacing.py @@ -0,0 +1,31 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +# Bring some raw data. +frequencies = [6, 16, 75, 160, 244, 260, 145, 73, 16, 4, 1] + +# In my original code I create a series and run on that, +# so for consistency I create a series from the list. +freq_series = pd.Series(frequencies) + +x_labels = [108300.0, 110540.0, 112780.0, 115020.0, 117260.0, 119500.0, + 121740.0, 123980.0, 126220.0, 128460.0, 130700.0] + + +# dataframe using frequencies and x_labels from the OP +df = pd.DataFrame({'Frequency': frequencies}, index=x_labels) + +# plot +ax = df.plot(kind='bar', figsize=(12, 8), title='Amount Frequency', + xlabel='Amount ($)', ylabel='Frequency', legend=False) + +# annotate +ax.bar_label(ax.containers[0], label_type='edge') + +# pad the spacing between the number and the edge of the figure +ax.margins(y=0.1) + +plt.show() + +# Source: https://stackoverflow.com/a/67561982/14900011 diff --git a/Matplotlib Official Primer/Spacing2.py b/Matplotlib Official Primer/Spacing2.py new file mode 100644 index 00000000..467bdaa5 --- /dev/null +++ b/Matplotlib Official Primer/Spacing2.py @@ -0,0 +1,31 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +# Bring some raw data. +frequencies = [6, 16, 75, 160, 244, 260, 145, 73, 16, 4, 1] + +# In my original code I create a series and run on that, +# so for consistency I create a series from the list. +freq_series = pd.Series(frequencies) + +x_labels = [108300.0, 110540.0, 112780.0, 115020.0, 117260.0, 119500.0, + 121740.0, 123980.0, 126220.0, 128460.0, 130700.0] + + +# dataframe using frequencies and x_labels from the OP +df = pd.DataFrame({'Frequency': frequencies}, index=x_labels) + +# plot +ax = df.plot(kind='bar', figsize=(12, 8), title='Amount Frequency', + xlabel='Amount ($)', ylabel='Frequency', legend=False) + +# annotate +ax.bar_label(ax.containers[0], label_type='edge') + +# pad the spacing between the number and the edge of the figure +ax.margins(y=0.6) + +plt.show() + +# Source: https://stackoverflow.com/a/67561982/14900011 From aba63541d75f4c8fbb0015c0a5e3836e54320828 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 12:42:34 +0800 Subject: [PATCH 0330/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Spacing.py | 2 ++ Matplotlib Official Primer/Spacing2.jpg | Bin 0 -> 63876 bytes Matplotlib Official Primer/Spacing2.py | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 Matplotlib Official Primer/Spacing2.jpg diff --git a/Matplotlib Official Primer/Spacing.py b/Matplotlib Official Primer/Spacing.py index 2e384cdc..8d4ba22d 100644 --- a/Matplotlib Official Primer/Spacing.py +++ b/Matplotlib Official Primer/Spacing.py @@ -26,6 +26,8 @@ # pad the spacing between the number and the edge of the figure ax.margins(y=0.1) +plt.savefig('Spacing.jpg') + plt.show() # Source: https://stackoverflow.com/a/67561982/14900011 diff --git a/Matplotlib Official Primer/Spacing2.jpg b/Matplotlib Official Primer/Spacing2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..196b6f5b27021d3af6ad0217acfd6efa984dd24c GIT binary patch literal 63876 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 literal 0 HcmV?d00001 diff --git a/Matplotlib Official Primer/Spacing2.py b/Matplotlib Official Primer/Spacing2.py index 467bdaa5..8ce22753 100644 --- a/Matplotlib Official Primer/Spacing2.py +++ b/Matplotlib Official Primer/Spacing2.py @@ -24,7 +24,9 @@ ax.bar_label(ax.containers[0], label_type='edge') # pad the spacing between the number and the edge of the figure -ax.margins(y=0.6) +ax.margins(y=0.8) + +plt.savefig('Spacing2.jpg') plt.show() From 1b1f4abf782dcfc46a3e66ba7f457f0cbb19260e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 12:46:02 +0800 Subject: [PATCH 0331/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Spacing.jpg | Bin 0 -> 70942 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Matplotlib Official Primer/Spacing.jpg diff --git a/Matplotlib Official Primer/Spacing.jpg b/Matplotlib Official Primer/Spacing.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a50eccf23e66d253079ef1a84e8df07cf445505 GIT binary patch literal 70942 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 kCh$ Date: Thu, 30 Sep 2021 12:51:51 +0800 Subject: [PATCH 0332/2002] Committed 2021/09/30 --- .../Labeling a pie and a donut4.py | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Matplotlib Official Primer/Labeling a pie and a donut4.py diff --git a/Matplotlib Official Primer/Labeling a pie and a donut4.py b/Matplotlib Official Primer/Labeling a pie and a donut4.py new file mode 100644 index 00000000..9e2a29a3 --- /dev/null +++ b/Matplotlib Official Primer/Labeling a pie and a donut4.py @@ -0,0 +1,40 @@ +import numpy as np +import matplotlib.pyplot as plt + +fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) + +recipe = ["375 g flour", + "75 g sugar", + "250 g butter", + "300 g berries"] + +data = [float(x.split()[0]) for x in recipe] +ingredients = [x.split()[-1] for x in recipe] + + +def func(pct, allvals): + absolute = int(round(pct/100.*np.sum(allvals))) + return "{:.1f}%\n({:d} g)".format(pct, absolute) + + +wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), + textprops=dict(color="w")) + +# We can use the legend's bbox_to_anchor argument +# to position the legend outside of the pie. +# Here we use the axes coordinates (1, 0, 0.5, 1) together with the location "center left"; +# i.e. the left central point of the legend will be at the left central point of the bounding box, +# spanning from (1, 0) to (1.5, 1) in axes coordinates. +ax.legend(wedges, ingredients, + title="Ingredients", + loc="center left", + bbox_to_anchor=(1, 0, 0.5, 1)) + +plt.setp(autotexts, size=8, weight="bold") + +ax.set_title("Matplotlib bakery: A pie") + +plt.show() + +# Source: +# https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py \ No newline at end of file From 5d551f4e63957a2fa1a31b400b70a3b2aeb4940c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 13:01:55 +0800 Subject: [PATCH 0333/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Labeling a pie and a donut4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matplotlib Official Primer/Labeling a pie and a donut4.py b/Matplotlib Official Primer/Labeling a pie and a donut4.py index 9e2a29a3..df3b4a30 100644 --- a/Matplotlib Official Primer/Labeling a pie and a donut4.py +++ b/Matplotlib Official Primer/Labeling a pie and a donut4.py @@ -28,7 +28,7 @@ def func(pct, allvals): ax.legend(wedges, ingredients, title="Ingredients", loc="center left", - bbox_to_anchor=(1, 0, 0.5, 1)) + bbox_to_anchor=(0.1, 0.5, 1., .102)) plt.setp(autotexts, size=8, weight="bold") From bb51471163176b86a40d48e8b276bd6a280f17ce Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 13:02:42 +0800 Subject: [PATCH 0334/2002] Committed 2021/09/30 --- Matplotlib Official Primer/Labeling a pie and a donut4.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Matplotlib Official Primer/Labeling a pie and a donut4.py b/Matplotlib Official Primer/Labeling a pie and a donut4.py index df3b4a30..9b3957a2 100644 --- a/Matplotlib Official Primer/Labeling a pie and a donut4.py +++ b/Matplotlib Official Primer/Labeling a pie and a donut4.py @@ -36,5 +36,6 @@ def func(pct, allvals): plt.show() -# Source: -# https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py \ No newline at end of file +# References: +# 1. https://stackoverflow.com/questions/25068384/bbox-to-anchor-and-loc-in-matplotlib +# 2. https://stackoverflow.com/questions/39803385/what-does-a-4-element-tuple-argument-for-bbox-to-anchor-mean-in-matplotlib/39806180#39806180 From 1d7b4d68e202ca25b450e2884b92a9c9c94675b7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 13:05:02 +0800 Subject: [PATCH 0335/2002] Committed 2021/09/30 --- Matplotlib Official Primer/bbox_to_anchor2.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Matplotlib Official Primer/bbox_to_anchor2.py diff --git a/Matplotlib Official Primer/bbox_to_anchor2.py b/Matplotlib Official Primer/bbox_to_anchor2.py new file mode 100644 index 00000000..fae383f7 --- /dev/null +++ b/Matplotlib Official Primer/bbox_to_anchor2.py @@ -0,0 +1,42 @@ +import numpy as np +import matplotlib.pyplot as plt + +fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) + +recipe = ["375 g flour", + "75 g sugar", + "250 g butter", + "300 g berries"] + +data = [float(x.split()[0]) for x in recipe] +ingredients = [x.split()[-1] for x in recipe] + + +def func(pct, allvals): + absolute = int(round(pct/100.*np.sum(allvals))) + return "{:.1f}%\n({:d} g)".format(pct, absolute) + + +wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), + textprops=dict(color="w")) + +# We can use the legend's bbox_to_anchor argument +# to position the legend outside of the pie. +# Here we use the axes coordinates (1, 0, 0.5, 1) together with the location "center left"; +# i.e. the left central point of the legend will be at the left central point of the bounding box, +# spanning from (1, 0) to (1.5, 1) in axes coordinates. +ax.legend(wedges, ingredients, + title="Ingredients", + loc="center left", + bbox_to_anchor=(0.1, 0.5, 1., .102)) + +plt.setp(autotexts, size=8, weight="bold") + +ax.set_title("Matplotlib bakery: A pie") + +plt.show() + +# References: +# 1. https://stackoverflow.com/questions/25068384/bbox-to-anchor-and-loc-in-matplotlib +# 2. https://stackoverflow.com/questions/39803385/what-does-a-4-element-tuple-argument-for-bbox-to-anchor-mean-in-matplotlib/39806180#39806180 +# 3. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py From cc3c1a515a5c36366750fe21fb4f66f5ea66bf6a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 13:15:48 +0800 Subject: [PATCH 0336/2002] Committed 2021/09/30 --- .../Trade/2020_export_percentage_3.py | 3 +- .../Trade/2020_export_percentage_4.py | 43 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Trade/2020_export_percentage_4.py diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py index bd532873..0f17c88a 100644 --- a/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_3.py @@ -23,7 +23,8 @@ explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') fig1, ax1 = plt.subplots() -ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90) +ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90, + textprops=dict(color="w")) ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_4.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_4.py new file mode 100644 index 00000000..bd532873 --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_4.py @@ -0,0 +1,43 @@ +import pandas as pd +import matplotlib.pyplot as plt + +exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) + +print(exportation) + +percentile = [(1544101314 / 13800075242), + (6674773304 / 13800075242), + (2550413664 / 13800075242), + (3030786960 / 13800075242), + 100] + +print(percentile) + +# Pie chart, where the slices will be ordered and plotted counter-clockwise: +labels = 'Keelung customs\n(Container ports in N.TW & E.TW)', 'Taipei customs\n(Airports in N.TW,\n ' \ + 'including Miaoli county )', \ + 'Taichung customs\n(Airport & container\n ports in C.TW,\n incl. Yunlin county)', \ + 'Kaohsiung customs\n(Airport & container ports\n in S.TW)' + +sizes = [11.18, 48.36, 18.48, 21.96] +explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') + +fig1, ax1 = plt.subplots() +ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90) + +ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. + +plt.title("The contribution of each region to total export ($NTD) in Taiwan 2020") + +textstr = '\n'.join(( + r'Dataset:', + r'https://portal.sw.nat.gov.tw/APGA/GA11_LIST', +)) +# these are matplotlib.patch.Patch properties +props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) + +# place a text box in upper left in axes coords +ax1.text(0.09, 0.01, textstr, transform=ax1.transAxes, fontsize=12, + verticalalignment='top', bbox=props) + +plt.show() From 77030b854e44852acc6acd63013c6abfc01c7556 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 13:18:01 +0800 Subject: [PATCH 0337/2002] Committed 2021/09/30 --- .../Trade/2020_export_percentage_4.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_4.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_4.py index bd532873..0f17c88a 100644 --- a/The attainments and realizations of my dreams/Trade/2020_export_percentage_4.py +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_4.py @@ -23,7 +23,8 @@ explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') fig1, ax1 = plt.subplots() -ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90) +ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90, + textprops=dict(color="w")) ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. From 0fd06ac683b39e28d30b0bf59cc154946c37c822 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 13:45:35 +0800 Subject: [PATCH 0338/2002] Committed 2021/09/30 --- .../Population_composition_in_history5.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history5.py b/The attainments and realizations of my dreams/Population_composition_in_history5.py index de7f0509..0145239f 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history5.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history5.py @@ -116,8 +116,11 @@ print(east) print(outlying) +total = [i for i in range(0, len(south, central, north, east, outlying)) in south, central, north, east, outlying]: + + cm = 1/2.54 -figure, axes = plt.subplots(figsize=(18*cm, 8*cm)) +figure, axes = plt.subplots(figsize=(18*cm, 12*cm)) p1 = axes.bar(year, south, color='g', label="South Taiwan") p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") @@ -134,9 +137,9 @@ plt.title("The composition of Taiwan's population in history") plt.legend() -# axes.bar_label(container=p1, fmt='{:.2f}'.format(p1), label_type='center') -# axes.bar_label(container=p2, fmt='{:.2f}'.format(p2), label_type='center') -# axes.bar_label(container=p3, fmt='{:.2f}'.format(p3), label_type='center') +axes.bar_label(container=p1, fmt='{:.2f}'.format(p1), label_type='center') +axes.bar_label(container=p2, fmt='{:.2f}'.format(p2), label_type='center') +axes.bar_label(container=p3, fmt='{:.2f}'.format(p3), label_type='center') plt.show() From f25b46fde9c0889b3e661a7690d19217408399fc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:03:24 +0800 Subject: [PATCH 0339/2002] Committed 2021/09/30 --- .../Population_composition_in_history6.py | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history6.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history6.py b/The attainments and realizations of my dreams/Population_composition_in_history6.py new file mode 100644 index 00000000..3a171917 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history6.py @@ -0,0 +1,120 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +print(south) +print(central) +print(north) +print(east) +print(outlying) + + + From d92928a9ba22bceb9eae2ec044438c2a4be974f3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:24:32 +0800 Subject: [PATCH 0340/2002] Committed 2021/09/30 --- .../Population_composition_in_history6.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history6.py b/The attainments and realizations of my dreams/Population_composition_in_history6.py index 3a171917..f21b437d 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history6.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history6.py @@ -116,5 +116,11 @@ print(east) print(outlying) +Total1960 = south[0] + central[0] + north[0] + east[0] + outlying[0] +Total1970 = south[1] + central[1] + north[1] + east[1] + outlying[1] +Total1980 = south[2] + central[2] + north[2] + east[2] + outlying[2] +Total1990 = south[3] + central[3] + north[3] + east[3] + outlying[3] + + From 965271b5cfc2e4da431c941dcea6759e9ec64b08 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:28:46 +0800 Subject: [PATCH 0341/2002] Committed 2021/09/30 --- .../Population_composition_in_history6.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history6.py b/The attainments and realizations of my dreams/Population_composition_in_history6.py index f21b437d..4171c982 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history6.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history6.py @@ -120,6 +120,11 @@ Total1970 = south[1] + central[1] + north[1] + east[1] + outlying[1] Total1980 = south[2] + central[2] + north[2] + east[2] + outlying[2] Total1990 = south[3] + central[3] + north[3] + east[3] + outlying[3] +Total2000 = south[4] + central[4] + north[4] + east[4] + outlying[4] +Total2010 = south[5] + central[5] + north[5] + east[5] + outlying[5] +Total2015 = south[10] + central[10] + north[10] + east[10] + outlying[10] +Total2020 = south[15] + central[15] + north[15] + east[15] + outlying[15] +Total2021 = south[16] + central[16] + north[16] + east[16] + outlying[16] From a4f6742c0564e1a7927249667a742e9e29a2056b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:46:07 +0800 Subject: [PATCH 0342/2002] Committed 2021/09/30 --- .../Population_composition_in_history6.py | 25 ++++ .../Population_composition_in_history_1.py | 140 ++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history_1.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history6.py b/The attainments and realizations of my dreams/Population_composition_in_history6.py index 4171c982..ad5673be 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history6.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history6.py @@ -126,6 +126,31 @@ Total2020 = south[15] + central[15] + north[15] + east[15] + outlying[15] Total2021 = south[16] + central[16] + north[16] + east[16] + outlying[16] +totality = [Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] +print(totality) +cm = 1/2.54 +figure, axes = plt.subplots(figsize=(18*cm, 15*cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan") +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +axes.bar_label(container=p1, fmt='{:.2f}'.format(p1), label_type='center') +axes.bar_label(container=p2, fmt='{:.2f}'.format(p2), label_type='center') +axes.bar_label(container=p3, fmt='{:.2f}'.format(p3), label_type='center') + +plt.show() diff --git a/The attainments and realizations of my dreams/Population_composition_in_history_1.py b/The attainments and realizations of my dreams/Population_composition_in_history_1.py new file mode 100644 index 00000000..27fabaf2 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history_1.py @@ -0,0 +1,140 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +plt.bar(year, south, color='g', label="South Taiwan") +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +cm = 1/2.54 # centimeters in inches.[2] + +# Change the figure size.[1] +plt.figure(figsize=(18*cm, 15*cm)) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/24073700/14900011 +# 2. https://matplotlib.org/devdocs/gallery/subplots_axes_and_figures/figure_size_units.html From fad752ab806619eac786addaf1994e23aa8d399c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:47:48 +0800 Subject: [PATCH 0343/2002] Committed 2021/09/30 --- .../Population_composition_in_history_1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history_1.py b/The attainments and realizations of my dreams/Population_composition_in_history_1.py index 27fabaf2..dde5c237 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history_1.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history_1.py @@ -131,7 +131,7 @@ cm = 1/2.54 # centimeters in inches.[2] # Change the figure size.[1] -plt.figure(figsize=(18*cm, 15*cm)) +plt.figure(figsize=(28*cm, 15*cm)) plt.show() From 96b746fde2b7768a2b773ffd1ef56b3a01627fa6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:49:39 +0800 Subject: [PATCH 0344/2002] Committed 2021/09/30 --- .../Population_composition_in_history_2.py | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history_2.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history_2.py b/The attainments and realizations of my dreams/Population_composition_in_history_2.py new file mode 100644 index 00000000..dde5c237 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history_2.py @@ -0,0 +1,140 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +plt.bar(year, south, color='g', label="South Taiwan") +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +cm = 1/2.54 # centimeters in inches.[2] + +# Change the figure size.[1] +plt.figure(figsize=(28*cm, 15*cm)) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/24073700/14900011 +# 2. https://matplotlib.org/devdocs/gallery/subplots_axes_and_figures/figure_size_units.html From 2b673562cf29ece91b48ce6ca6b4c869bac6f410 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:51:50 +0800 Subject: [PATCH 0345/2002] Committed 2021/09/30 --- .../Population_composition_in_history_2.py | 11 +- .../Population_composition_in_history_3.py | 141 ++++++++++++++++++ 2 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history_3.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history_2.py b/The attainments and realizations of my dreams/Population_composition_in_history_2.py index dde5c237..49585e71 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history_2.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history_2.py @@ -110,6 +110,12 @@ east = np.array(eastTW) outlying = np.array(outlyingTW) + +cm = 1/2.54 # centimeters in inches.[2] + +# Change the figure size.[1] +plt.figure(figsize=(28*cm, 15*cm)) + plt.bar(year, south, color='g', label="South Taiwan") plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") @@ -128,11 +134,6 @@ plt.title("The composition of Taiwan's population in history") plt.legend() -cm = 1/2.54 # centimeters in inches.[2] - -# Change the figure size.[1] -plt.figure(figsize=(28*cm, 15*cm)) - plt.show() # References: diff --git a/The attainments and realizations of my dreams/Population_composition_in_history_3.py b/The attainments and realizations of my dreams/Population_composition_in_history_3.py new file mode 100644 index 00000000..49585e71 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history_3.py @@ -0,0 +1,141 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + + +cm = 1/2.54 # centimeters in inches.[2] + +# Change the figure size.[1] +plt.figure(figsize=(28*cm, 15*cm)) + +plt.bar(year, south, color='g', label="South Taiwan") +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/24073700/14900011 +# 2. https://matplotlib.org/devdocs/gallery/subplots_axes_and_figures/figure_size_units.html From 69d8320361e64128deba90b1ce23f427f02adec2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:54:17 +0800 Subject: [PATCH 0346/2002] Committed 2021/09/30 --- .../Population_composition_in_history_3.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history_3.py b/The attainments and realizations of my dreams/Population_composition_in_history_3.py index 49585e71..b1af5236 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history_3.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history_3.py @@ -111,16 +111,15 @@ outlying = np.array(outlyingTW) -cm = 1/2.54 # centimeters in inches.[2] +cm = 1/2.54 -# Change the figure size.[1] plt.figure(figsize=(28*cm, 15*cm)) -plt.bar(year, south, color='g', label="South Taiwan") -plt.bar(year, central, color='y', bottom=south, label="Central Taiwan") -plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan") -plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") -plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") +plt.bar(year, south, color='g', label="South Taiwan", align='edge', width=0.3) # Adjusting the spacing between bars. [1] +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', width=0.3) # get the current axes and store it to ax axes = plt.gca() @@ -137,5 +136,4 @@ plt.show() # References: -# 1. https://stackoverflow.com/a/24073700/14900011 -# 2. https://matplotlib.org/devdocs/gallery/subplots_axes_and_figures/figure_size_units.html +# 1. https://stackoverflow.com/a/40575741/14900011 From c33b696e576b22bcac4a611ce7de1f5c6e9f91e1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 1 Oct 2021 03:03:34 +0800 Subject: [PATCH 0347/2002] Committed 2021/09/30 --- .../Population_composition_in_history_4.py | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_composition_in_history_4.py diff --git a/The attainments and realizations of my dreams/Population_composition_in_history_4.py b/The attainments and realizations of my dreams/Population_composition_in_history_4.py new file mode 100644 index 00000000..b1af5236 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_composition_in_history_4.py @@ -0,0 +1,139 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + + +cm = 1/2.54 + +plt.figure(figsize=(28*cm, 15*cm)) + +plt.bar(year, south, color='g', label="South Taiwan", align='edge', width=0.3) # Adjusting the spacing between bars. [1] +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', width=0.3) + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/40575741/14900011 From 9b923e36f20fce8cef850fab231dce9e72f25922 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 1 Oct 2021 04:18:38 +0800 Subject: [PATCH 0348/2002] Committed 2021/09/30 --- .../Population_composition_in_history_4.py | 193 +++++++++--------- 1 file changed, 102 insertions(+), 91 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_composition_in_history_4.py b/The attainments and realizations of my dreams/Population_composition_in_history_4.py index b1af5236..c6abcc86 100644 --- a/The attainments and realizations of my dreams/Population_composition_in_history_4.py +++ b/The attainments and realizations of my dreams/Population_composition_in_history_4.py @@ -2,102 +2,112 @@ import matplotlib.ticker as ticker import numpy as np -year = ["1960", "70", "80", "90", "2000", "2010", +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] -northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 - (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 - (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 - (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 - (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 - (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 - (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 - (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 - (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 - (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 - (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 - (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 - (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 - (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 - (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 - (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 - (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 ] -centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 - (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 - (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 - (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 - (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 - (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 - (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 - (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 - (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 - (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 - (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 - (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 - (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 - (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 - (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 - (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 - (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 ] -southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 - (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 - (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 - (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 - (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 - (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 - (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 - (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 - (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 - (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 - (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 - (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 - (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 - (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 - (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 - (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 - (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 ] -eastTW = [(252264 + 208272), # 1960 - (335799 + 291761), # 1970 - (355178 + 281218), # 1980 - (352233 + 256803), # 1990 - (353630 + 245312), # 2000 - (338805 + 230673), # 2010 - (336838 + 228290), # 2011 - (335190 + 226252), # 2012 - (333897 + 224821), # 2013 - (333392 + 224470), # 2014 - (331945 + 222452), # 2015 - (330911 + 220802), # 2016 - (329237 + 219540), # 2017 - (327968 + 218919), # 2018 - (326247 + 216781), # 2019 - (324372 + 215261), # 2020 - (322506 + 213956), # 2021/08 +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 ] -outlyingTW = [(0 + 0 + 96986), # 1960 - (61305 + 16939 + 119153), # 1970 - (51883 + 9058 + 107043), # 1980 - (42754 + 5585 + 95932), # 1990 - (53832 + 6733 + 89496), # 2000 - (107308 + 96918), # 2010 Fujian + Penghu - (113989 + 97157), # 2011 - (124421 + 98843), # 2012 - (132878 + 100400), # 2013 - (140229 + 101758), # 2014 - (145346 + 102304), # 2015 - (147709 + 103263), # 2016 - (150336 + 104073), # 2017 - (152329 + 104440), # 2018 - (153274 + 105207), # 2019 - (153876 + 105952), # 2020 - (140004 + 13420 + 105645) # 2021/08 +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 ] x = range(10, 22) @@ -110,16 +120,17 @@ east = np.array(eastTW) outlying = np.array(outlyingTW) +cm = 1 / 2.54 -cm = 1/2.54 +plt.figure(figsize=(28 * cm, 15 * cm)) -plt.figure(figsize=(28*cm, 15*cm)) - -plt.bar(year, south, color='g', label="South Taiwan", align='edge', width=0.3) # Adjusting the spacing between bars. [1] +plt.bar(year, south, color='g', label="South Taiwan", align='edge', + width=0.3) # Adjusting the spacing between bars. [1] plt.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) -plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', width=0.3) +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', + width=0.3) # get the current axes and store it to ax axes = plt.gca() From 71b1b5f943b3c6bfffd14b8b631317aff7ea1492 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 16:06:10 +0800 Subject: [PATCH 0349/2002] Committed 2021/10/02 --- Matplotlib 3 Cookbook/Table chart.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Table chart.py diff --git a/Matplotlib 3 Cookbook/Table chart.py b/Matplotlib 3 Cookbook/Table chart.py new file mode 100644 index 00000000..7f79c394 --- /dev/null +++ b/Matplotlib 3 Cookbook/Table chart.py @@ -0,0 +1,6 @@ +import matplotlib.pyplot as plt +import numpy as np + +rows = ['2011', '2012', '2013', '2014', '2015'] + +columns = ('7Ah', '35Ah', '40Ah', '135Ah', '150Ah', '150Ah') From 605687a6ff86f72c740e7b6d3938f5ca40872f0a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 16:16:32 +0800 Subject: [PATCH 0350/2002] Committed 2021/10/02 --- Matplotlib 3 Cookbook/Table chart.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Matplotlib 3 Cookbook/Table chart.py b/Matplotlib 3 Cookbook/Table chart.py index 7f79c394..8f75eb74 100644 --- a/Matplotlib 3 Cookbook/Table chart.py +++ b/Matplotlib 3 Cookbook/Table chart.py @@ -1,6 +1,21 @@ import matplotlib.pyplot as plt import numpy as np +# sold in each year rows = ['2011', '2012', '2013', '2014', '2015'] +# The types of batteries columns = ('7Ah', '35Ah', '40Ah', '135Ah', '150Ah', '150Ah') + +data = [[75, 144, 114, 102, 108], + [90, 126, 102, 84, 126], + [96, 114, 75, 105, 135], + [105, 90, 150, 90, 75], + [90, 75, 135, 75, 90]] + +# Define the range and scale for the y axis. +values = np.arange(0, 600, 100) + +# Specify the color spectrum to be used. Each year will be represented in a different color: +colors = plt.cm.OrRd(np.linspace(0, 0.5, len(rows))) + From 9be31433797c52872e65a2279dbd2af6aa643498 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 16:23:20 +0800 Subject: [PATCH 0351/2002] Committed 2021/10/02 --- .../bar_label()/Bar label label_type.py | 32 +++++++++++++++++++ .../bar_label()/__init__.py | 0 2 files changed, 32 insertions(+) create mode 100644 Matplotlib Official Primer/bar_label()/Bar label label_type.py create mode 100644 Matplotlib Official Primer/bar_label()/__init__.py diff --git a/Matplotlib Official Primer/bar_label()/Bar label label_type.py b/Matplotlib Official Primer/bar_label()/Bar label label_type.py new file mode 100644 index 00000000..35e67d51 --- /dev/null +++ b/Matplotlib Official Primer/bar_label()/Bar label label_type.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt +import numpy as np + +N = 5 +menMeans = (20, 35, 30, 35, -27) +womenMeans = (25, 32, 34, 20, -25) +menStd = (2, 3, 4, 1, 2) +womenStd = (3, 5, 2, 3, 3) +ind = np.arange(N) # the x locations for the groups +width = 0.35 # the width of the bars: can also be len(x) sequence + +fig, ax = plt.subplots() + +p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men') +p2 = ax.bar(ind, womenMeans, width, + bottom=menMeans, yerr=womenStd, label='Women') + +ax.axhline(0, color='grey', linewidth=0.8) +ax.set_ylabel('Scores') +ax.set_title('Scores by group and gender') +ax.set_xticks(ind) +ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5')) +ax.legend() + +# Label with label_type 'center' instead of the default 'edge' +ax.bar_label(p1, label_type='center') +ax.bar_label(p2, label_type='center') +ax.bar_label(p2) + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html?highlight=stack#bar-label-demo diff --git a/Matplotlib Official Primer/bar_label()/__init__.py b/Matplotlib Official Primer/bar_label()/__init__.py new file mode 100644 index 00000000..e69de29b From e572b3d0636809feb8db0fa05694834ba0d8807d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 16:28:41 +0800 Subject: [PATCH 0352/2002] Committed 2021/10/02 --- .../bar_label()/Bar label label_type.py | 9 +++++---- .../bar_label()/bar label type of edge.jpg | Bin 0 -> 39559 bytes 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 Matplotlib Official Primer/bar_label()/bar label type of edge.jpg diff --git a/Matplotlib Official Primer/bar_label()/Bar label label_type.py b/Matplotlib Official Primer/bar_label()/Bar label label_type.py index 35e67d51..ec98f14b 100644 --- a/Matplotlib Official Primer/bar_label()/Bar label label_type.py +++ b/Matplotlib Official Primer/bar_label()/Bar label label_type.py @@ -12,8 +12,7 @@ fig, ax = plt.subplots() p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men') -p2 = ax.bar(ind, womenMeans, width, - bottom=menMeans, yerr=womenStd, label='Women') +p2 = ax.bar(ind, womenMeans, width, bottom=menMeans, yerr=womenStd, label='Women') ax.axhline(0, color='grey', linewidth=0.8) ax.set_ylabel('Scores') @@ -23,10 +22,12 @@ ax.legend() # Label with label_type 'center' instead of the default 'edge' -ax.bar_label(p1, label_type='center') -ax.bar_label(p2, label_type='center') +ax.bar_label(p1, label_type='edge') +ax.bar_label(p2, label_type='edge') ax.bar_label(p2) +plt.savefig('bar label type of edge.jpg') + plt.show() # Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html?highlight=stack#bar-label-demo diff --git a/Matplotlib Official Primer/bar_label()/bar label type of edge.jpg b/Matplotlib Official Primer/bar_label()/bar label type of edge.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57db088a31cf37922e303622d7fc32cffbe6a8b3 GIT binary patch literal 39559 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

      ;s<+(~Edziab6JQ!jK~yz7133WL!$A)CeB6Ov z{AZp8&5-$8L=4XsBOrJ~CWwV9+*+ae)VM`{dnOWh;a}$jFDFSGpi+y8)cAY=f1z*) zowcF4=-ww95l>bC7*gjx)S(89I8rU63|?y{0_F!Y$>nYxj)3>vPjU_WXZn_?KK&Pj z_Bo3J%_R$UN(9+D06$IE>5e_$%@V)XH38^TP=EOiXG4p=_#Z1q|MMsDXe-CVO1e4O z(I`4loh;UM_XkyM^}tN^8-xWZXFpD)4iHg(dk(1I+CzcV>_!}T0X)0p;UF5=^L5hz zoi&+t`6B=96LUSor=TWz;(C$Jha#rxL_vpo2oG!j|F2T}m-Q}uthb6S7TeKbjE64* z2r{QQzt#?sD7TP!L*WPmxe5~l8Eix!1y)j$`SWN^G*vN zV&Fhg$jFT88pnw4PKo}yYR%oUmj`IG5_&lUWcq7}25kI{HyStuL>31=Ke(V4{gvlB zX2OxR2`b%3l4pxBz)H{0%(HZnaViaeLrA^^l6xmv^L$9tl*ysy#+klRhPnl|gI5doZHKHY> z+&ZyFBd@ScIQNcMbZ+|kmi{b$yU1VVW8U+gm5!cp`&|siGk_QvaS{n!F-RkpQ}7K33eI9OHk8aq#`K z9S7uIHvJQ>7vAOTp+!5#s9NUm+kzcE2&Ho`o7&rcYR_r4xlYRA3OoW=X|fSOwm z7Dj_dqrg_@JW4A*@pynBg5{6*a>;o)9+pmKi9Ipv@d_@Q_hFZGdgiK!#^wzFqxE`U zt=;48{f$QqO^d^1ij@Aw6CxQ@>L!XcXvtAqJ6vC>N{;hVf73w;PH2ccMU@~SHQD)A zD%GEF>J%t7;feZ5EV! z+}PfmtKMUhT~coNXv2ez18vphEMgTN^w%<|0eU(}4LZkg;=bs8fGxJkwye``>8@TtETWPhDFPekHC+jdTef6Bl^oo;G`+{k%*)=*;*1zpkW`XtL&SQmU+BkI+a+mCB>Cs)_f9A#g{x)it0oISZ%XBpOCPsT&=1mo zYv41B!yqjL`f;`PF=kZ5F0fV|J+Yc~641A0o$*rmIiHirHUZ^gGi{YFqbtt*?+ceb zb-vUfPAaGteV_cv;^$3#>V=ze1bt=ovZ&5OM5&h-x>x?JxMB6gzLkH@b^ZHyYN{2c zXL#Atyk=finw-m=#qKt+}dv(_SYlJ7AqiXHlu zrdIyqXx6$z`b1|h6PSvh2BViU4z!k8n+d5WS-!Q4RCaqR_A`$=W*J+I^O`Nr0+88F z*@TbtkP~al50i~A!w8Qa!+1$&`)a#5S9o&@ZMKICS)Zu+JC+ynE9+%J&JdC5X*GR zNbSteJ)i!VKlEs4{=v1p3)r7zH#S%xq6Oq)dfFq;R~KXt7e<=~OkT~{3T3=Iwl3&0 zy>q3x?9Gt+e>uT?L6t;1quLFbx^(lKuB2_){f+D$FTCO`n%H}3F}`S%$6k|Zs>=~Tuwolq6rclJYP}Rp;HR487h~c{2es$v%QDabQ=jg?M>$BATS)J; z_uQhVx;$g=^*W_1WoWK~x>Z5zrw~3b)GbEvvyF%ddJ_38K;Tsp0IC}>jGp@w4aDrAMs$K`n%NJI2o?gVtCmE-9 z)wo_|89&vYJ4{Z0Jk9I4-1@AsoBWP~+IKH@s$!2ZlE(AsF--p~0wS2hvhvEafZO^^ zJ2p3BB-yA2wu=wgpAcc=tcVJhI^GbkvNC3=S>UAY^-pCrt&Fqg?^f_GIQ|y{zkW0b M=U?S`0>8EYKLI!h>Hq)$ literal 0 HcmV?d00001 From 2aa92721eda676d1d1a3258602f6f6e84fc447e4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 16:30:57 +0800 Subject: [PATCH 0353/2002] Committed 2021/10/02 --- .../bar_label()/Bar Label Demo.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Matplotlib Official Primer/bar_label()/Bar Label Demo.py diff --git a/Matplotlib Official Primer/bar_label()/Bar Label Demo.py b/Matplotlib Official Primer/bar_label()/Bar Label Demo.py new file mode 100644 index 00000000..0c2d5588 --- /dev/null +++ b/Matplotlib Official Primer/bar_label()/Bar Label Demo.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt +import numpy as np + +N = 5 +menMeans = (20, 35, 30, 35, -27) +womenMeans = (25, 32, 34, 20, -25) +menStd = (2, 3, 4, 1, 2) +womenStd = (3, 5, 2, 3, 3) +ind = np.arange(N) # the x locations for the groups +width = 0.35 # the width of the bars: can also be len(x) sequence + +fig, ax = plt.subplots() + +p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men') +p2 = ax.bar(ind, womenMeans, width, + bottom=menMeans, yerr=womenStd, label='Women') + +ax.axhline(0, color='grey', linewidth=0.8) +ax.set_ylabel('Scores') +ax.set_title('Scores by group and gender') +ax.set_xticks(ind) +ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5')) +ax.legend() + +# Label with label_type 'center' instead of the default 'edge' +ax.bar_label(p1, label_type='center') +ax.bar_label(p2, label_type='center') +ax.bar_label(p2) + +plt.savefig("Bar Label Demo.png") + +plt.show() From 485fd2ecfab9eb2bc47a0d60d3f40416353f8ecb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 16:31:54 +0800 Subject: [PATCH 0354/2002] Committed 2021/10/02 --- .../bar_label()/Bar Label Demo.png | Bin 0 -> 21963 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Matplotlib Official Primer/bar_label()/Bar Label Demo.png diff --git a/Matplotlib Official Primer/bar_label()/Bar Label Demo.png b/Matplotlib Official Primer/bar_label()/Bar Label Demo.png new file mode 100644 index 0000000000000000000000000000000000000000..beb2a6e2650ecbc7954c60d959ebb6a4930f301e GIT binary patch literal 21963 zcmd741yq-Bw=MbtwqOG`Dp(+3At7M_B1(s}qA1-Vjr~^y6hTx~JGatWw&bPmP_rCX>bH};kj-kWg7w`ML>sf2AIp=yF$;n7Et=hVZq9`V*^XC*O zir$T)=-O8-!~gJAHvhyQg4W`ftrg8~SleB-)T1t4wKg|4vo^sTMUt%P`aP5#FVc+4zs@^an%aTy=7()_%d6-BMRN`BKtiqQ-xN?Aba+-ap- z0sSp@w>EXQejIjGw5{HFf%D!|s!BdgYW)iCP0Y+i^s7FdmRoY$YLl+u@x5uGmro0< zII!#6sZ9pDr^3(6FHw5BtDmCtdHVETP2l8OZ56+J`;1v^^Md;tOTQee_%e6mxs6$n z0ZZXwMmmZrIG)q2g{z@TSm@T_pVwEo;UD|XQcEc6@D}=A6y^4L9fcQOd_b+Bs4GX8 zoWjqa@22P}>Lug<|KGy%s7SYx-Ank#z)|xx$8LOiihl-)I5umQh-bexS{{FW$*K0E zO<6WE0~sA_ii(OpS5(OQaw;nnd+r#Y=}XAYK2A{_>#5tNhGnn$44X3&UFL=*nKmCj zWtKDiU}4zH^;2o7bVA-tbap8Nb;|o^#{fMgJMufZg7f%srEMpSFHy@ zotc@rYQ>5J)h61H7z^dJwS(s7=UcQ^#Z!WUf~y!At?jnBH65W}p(&AV+po})Wg~r0 zOzQDpe;ueiVN`dB&!ka_j*gB~H9kN+-84?G^o8KKeP3LQ{C{(bzb4r|X`H(uUSFk=`uaqU#pju*KVIf*GGbzaa*Op7cqPZWYuPVo=)L!Cm2@99@ zi?-gm~8E>ThK=lf;z-n2E0^;Fl!Yn>E7cka`Twrq*I&9I!4ojvrTp-#@NMAMvMiKWYyaS8}r z##5@66`TKALo;j3TeWIcRlHVqO{$UV(&fuzR1>sW=dvl`E$nUudYf2TX{ko_hD~WE z(W(ipg0r4GPO4n{_(a~Fh5NW^vw&KhiZd>BrZ*;`CQ5O?RMpEP*N)r%zHHO|_4Hbi zv8T4bzlBIW-)B(xfJr^qA=Sy*c}L%DhnHAQxHM}E-r3udoxX>iT`#@Krj$Fq8|zzp zcdck-W2%u+UtOF-r?2W*UqZg&yE{w0Wt@jwt*b8?etmQMqsO-W{$&v4?A-jRt@xJ;P#1k$)PWRe1KF0~;7TYEhnbPtg5slht zWyR57WffTq49nLXIC4ZD5AE~k&xq$5*Tq?#2IDk^*}-p#XD6Gjyq2xm9!bZrEb>O# zYayqpztvOpLze!!a5A_n|l&`;E^68UYeY{p}@=e(ms|t~s_PcAx zzMftC*)X;D_VS$qT}jXPT_U@LyysJKv1G9G#H*byQ&$`MZJBloe~U6xSAR`5_4r_$ zj`Pe|<;lUE&^+haX!%eH@?bd*iil`Edi02sld~#PK6KOO&5;KcBQ%G)yWWbsTi0vZ zMY+t+T#%BImymccGdY-W!I#sw`=ojMsj`#lTnsqki$`iN-QVd6MBz=xoJ(qx)lR{0_z!1$Z-iH@n^ z4$m|svCX2Qq93~}Ln|^pcAtH)nZ>16h4f{`%{$4YTtXkv8`>V$q)5ySIdvRz28*K(6agJKTlZ;)kExpCofBm|3 z?JFd|fB*iG7VOg7J^I6)cdK^*ec7vDUtV21e>89E$7a-dT5`lqJ~3|E|- zoF3)XYg&0!rWjOj=s$Sy-~*0pNC6M7YC2J4!^20Cl9K~xWL_Wt{PcRPR`x`|U|)hK zo0#c#5r>+Whp*n*{rTX5;-aE0HoY|m6EEIf#uRX7g0EilTC;f})7}}8xuL=?Cb#8l zwjbu$A}c(6?vXu~#cq|`*@tWR&YV5#K`Px;6EfjZQXDg4CuBvZKRmteG+wK^H?0Mk zEfmStQ%`nzL9XLu&^Xq%ND%3CQZVNu4Bkq-(BH}}|- z@ztN78GY}QJ&+~Mt&vtEwlKU_TtcFEAbYTGIh&LDyDraK?EQ01xWQ0lq8%a*O5RE_ zD%^YqRp*j#R@jcc5^+p3&G^1dIYE0qpsy|4&MeBgJWUge9MvZy&Yc4SgGY}YtBx`Qvbb@2|4M*zayUYv~uH|zW)Aut@NU;k4ZJXU&pOE0E z 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 literal 0 HcmV?d00001 From 695c29c2dd5673a29f6d5346000411f7a99c8ac2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 16:36:46 +0800 Subject: [PATCH 0355/2002] Committed 2021/10/02 --- Matplotlib Official Primer/Bar label 2.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Matplotlib Official Primer/Bar label 2.py b/Matplotlib Official Primer/Bar label 2.py index dea95650..c7de6b4d 100644 --- a/Matplotlib Official Primer/Bar label 2.py +++ b/Matplotlib Official Primer/Bar label 2.py @@ -12,8 +12,7 @@ fig, ax = plt.subplots() p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men') -p2 = ax.bar(ind, womenMeans, width, - bottom=menMeans, yerr=womenStd, label='Women') +p2 = ax.bar(ind, womenMeans, width, bottom=menMeans, yerr=womenStd, label='Women') ax.axhline(0, color='grey', linewidth=0.8) ax.set_ylabel('Scores') From b6e9a79feed2fa123a1907c7239498c02de0fd52 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 16:48:21 +0800 Subject: [PATCH 0356/2002] Committed 2021/10/02 --- .../Annual_house_hold_income_2020.py | 0 .../Annual_household_income.png | Bin .../Annual_household_income.py | 0 .../Annual household income/__init__.py | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/{ => Annual household income}/Annual_house_hold_income_2020.py (100%) rename The attainments and realizations of my dreams/{ => Annual household income}/Annual_household_income.png (100%) rename The attainments and realizations of my dreams/{ => Annual household income}/Annual_household_income.py (100%) create mode 100644 The attainments and realizations of my dreams/Annual household income/__init__.py diff --git a/The attainments and realizations of my dreams/Annual_house_hold_income_2020.py b/The attainments and realizations of my dreams/Annual household income/Annual_house_hold_income_2020.py similarity index 100% rename from The attainments and realizations of my dreams/Annual_house_hold_income_2020.py rename to The attainments and realizations of my dreams/Annual household income/Annual_house_hold_income_2020.py diff --git a/The attainments and realizations of my dreams/Annual_household_income.png b/The attainments and realizations of my dreams/Annual household income/Annual_household_income.png similarity index 100% rename from The attainments and realizations of my dreams/Annual_household_income.png rename to The attainments and realizations of my dreams/Annual household income/Annual_household_income.png diff --git a/The attainments and realizations of my dreams/Annual_household_income.py b/The attainments and realizations of my dreams/Annual household income/Annual_household_income.py similarity index 100% rename from The attainments and realizations of my dreams/Annual_household_income.py rename to The attainments and realizations of my dreams/Annual household income/Annual_household_income.py diff --git a/The attainments and realizations of my dreams/Annual household income/__init__.py b/The attainments and realizations of my dreams/Annual household income/__init__.py new file mode 100644 index 00000000..e69de29b From 0784d713f24a4bfc4c9e44851224c534d54cb33e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 16:55:52 +0800 Subject: [PATCH 0357/2002] Committed 2021/10/02 --- .../Population composition in history 7.py | 156 ++++++++++++++++++ .../__init__.py | 0 2 files changed, 156 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Population composition in history 7.py create mode 100644 The attainments and realizations of my dreams/Historical population composition/__init__.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Population composition in history 7.py b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 7.py new file mode 100644 index 00000000..ad5673be --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 7.py @@ -0,0 +1,156 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1960", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +print(south) +print(central) +print(north) +print(east) +print(outlying) + +Total1960 = south[0] + central[0] + north[0] + east[0] + outlying[0] +Total1970 = south[1] + central[1] + north[1] + east[1] + outlying[1] +Total1980 = south[2] + central[2] + north[2] + east[2] + outlying[2] +Total1990 = south[3] + central[3] + north[3] + east[3] + outlying[3] +Total2000 = south[4] + central[4] + north[4] + east[4] + outlying[4] +Total2010 = south[5] + central[5] + north[5] + east[5] + outlying[5] +Total2015 = south[10] + central[10] + north[10] + east[10] + outlying[10] +Total2020 = south[15] + central[15] + north[15] + east[15] + outlying[15] +Total2021 = south[16] + central[16] + north[16] + east[16] + outlying[16] + +totality = [Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] + +print(totality) + +cm = 1/2.54 +figure, axes = plt.subplots(figsize=(18*cm, 15*cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan") +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +axes.bar_label(container=p1, fmt='{:.2f}'.format(p1), label_type='center') +axes.bar_label(container=p2, fmt='{:.2f}'.format(p2), label_type='center') +axes.bar_label(container=p3, fmt='{:.2f}'.format(p3), label_type='center') + +plt.show() + diff --git a/The attainments and realizations of my dreams/Historical population composition/__init__.py b/The attainments and realizations of my dreams/Historical population composition/__init__.py new file mode 100644 index 00000000..e69de29b From abc2eb29a9e081b1bcf95c6daf222ff614b3db0f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 17:14:04 +0800 Subject: [PATCH 0358/2002] Committed 2021/10/02 --- .../Population composition in history 7.py | 232 ++++++++++-------- .../Population composition in history 8.py | 170 +++++++++++++ 2 files changed, 293 insertions(+), 109 deletions(-) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Population composition in history 8.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Population composition in history 7.py b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 7.py index ad5673be..4b49cdf5 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Population composition in history 7.py +++ b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 7.py @@ -2,108 +2,116 @@ import matplotlib.ticker as ticker import numpy as np -year = ["1960", "70", "80", "90", "2000", "2010", +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] -northTW = [(829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 - (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 - (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 - (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 - (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 - (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 - (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 - (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 - (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 - (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 - (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 - (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 - (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 - (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 - (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 - (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 - (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 ] -centralTW = [(298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 - (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 - (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 - (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 - (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 - (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 - (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 - (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 - (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 - (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 - (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 - (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 - (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 - (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 - (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 - (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 - (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 ] -southTW = [(337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 - (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 - (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 - (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 - (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 - (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 - (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 - (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 - (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 - (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 - (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 - (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 - (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 - (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 - (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 - (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 - (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 ] -eastTW = [(252264 + 208272), # 1960 - (335799 + 291761), # 1970 - (355178 + 281218), # 1980 - (352233 + 256803), # 1990 - (353630 + 245312), # 2000 - (338805 + 230673), # 2010 - (336838 + 228290), # 2011 - (335190 + 226252), # 2012 - (333897 + 224821), # 2013 - (333392 + 224470), # 2014 - (331945 + 222452), # 2015 - (330911 + 220802), # 2016 - (329237 + 219540), # 2017 - (327968 + 218919), # 2018 - (326247 + 216781), # 2019 - (324372 + 215261), # 2020 - (322506 + 213956), # 2021/08 +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 ] -outlyingTW = [(0 + 0 + 96986), # 1960 - (61305 + 16939 + 119153), # 1970 - (51883 + 9058 + 107043), # 1980 - (42754 + 5585 + 95932), # 1990 - (53832 + 6733 + 89496), # 2000 - (107308 + 96918), # 2010 Fujian + Penghu - (113989 + 97157), # 2011 - (124421 + 98843), # 2012 - (132878 + 100400), # 2013 - (140229 + 101758), # 2014 - (145346 + 102304), # 2015 - (147709 + 103263), # 2016 - (150336 + 104073), # 2017 - (152329 + 104440), # 2018 - (153274 + 105207), # 2019 - (153876 + 105952), # 2020 - (140004 + 13420 + 105645) # 2021/08 +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 ] x = range(10, 22) -date = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] - south = np.array(southTW) central = np.array(centralTW) north = np.array(northTW) @@ -116,28 +124,36 @@ print(east) print(outlying) -Total1960 = south[0] + central[0] + north[0] + east[0] + outlying[0] -Total1970 = south[1] + central[1] + north[1] + east[1] + outlying[1] -Total1980 = south[2] + central[2] + north[2] + east[2] + outlying[2] -Total1990 = south[3] + central[3] + north[3] + east[3] + outlying[3] -Total2000 = south[4] + central[4] + north[4] + east[4] + outlying[4] -Total2010 = south[5] + central[5] + north[5] + east[5] + outlying[5] -Total2015 = south[10] + central[10] + north[10] + east[10] + outlying[10] -Total2020 = south[15] + central[15] + north[15] + east[15] + outlying[15] -Total2021 = south[16] + central[16] + north[16] + east[16] + outlying[16] +Total1940 = south[0] + central[0] + north[0] + east[0] + outlying[0] +Total1956 = south[1] + central[1] + north[1] + east[1] + outlying[1] +Total1960 = south[2] + central[2] + north[2] + east[2] + outlying[2] +Total1970 = south[3] + central[3] + north[3] + east[3] + outlying[3] +Total1980 = south[4] + central[4] + north[4] + east[4] + outlying[4] +Total1990 = south[5] + central[5] + north[5] + east[5] + outlying[5] +Total2000 = south[6] + central[6] + north[6] + east[6] + outlying[6] +Total2010 = south[7] + central[7] + north[7] + east[7] + outlying[7] +Total2015 = south[12] + central[12] + north[12] + east[12] + outlying[12] +Total2020 = south[17] + central[17] + north[17] + east[17] + outlying[17] +Total2021 = south[18] + central[18] + north[18] + east[18] + outlying[18] -totality = [Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] +totality = [Total1940, Total1956, Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] print(totality) -cm = 1/2.54 -figure, axes = plt.subplots(figsize=(18*cm, 15*cm)) +cm = 1 / 2.54 + +plt.figure(figsize=(28 * cm, 15 * cm)) -p1 = axes.bar(year, south, color='g', label="South Taiwan") -p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") -p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") -p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") -p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") +plt.bar(year, south, color='g', label="South Taiwan", align='edge', + width=0.3) # Adjusting the spacing between bars. [1] +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', + width=0.3) + +# get the current axes and store it to ax +axes = plt.gca() axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) @@ -148,9 +164,7 @@ plt.title("The composition of Taiwan's population in history") plt.legend() -axes.bar_label(container=p1, fmt='{:.2f}'.format(p1), label_type='center') -axes.bar_label(container=p2, fmt='{:.2f}'.format(p2), label_type='center') -axes.bar_label(container=p3, fmt='{:.2f}'.format(p3), label_type='center') - plt.show() +# References: +# 1. https://stackoverflow.com/a/40575741/14900011 diff --git a/The attainments and realizations of my dreams/Historical population composition/Population composition in history 8.py b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 8.py new file mode 100644 index 00000000..4b49cdf5 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 8.py @@ -0,0 +1,170 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +print(south) +print(central) +print(north) +print(east) +print(outlying) + +Total1940 = south[0] + central[0] + north[0] + east[0] + outlying[0] +Total1956 = south[1] + central[1] + north[1] + east[1] + outlying[1] +Total1960 = south[2] + central[2] + north[2] + east[2] + outlying[2] +Total1970 = south[3] + central[3] + north[3] + east[3] + outlying[3] +Total1980 = south[4] + central[4] + north[4] + east[4] + outlying[4] +Total1990 = south[5] + central[5] + north[5] + east[5] + outlying[5] +Total2000 = south[6] + central[6] + north[6] + east[6] + outlying[6] +Total2010 = south[7] + central[7] + north[7] + east[7] + outlying[7] +Total2015 = south[12] + central[12] + north[12] + east[12] + outlying[12] +Total2020 = south[17] + central[17] + north[17] + east[17] + outlying[17] +Total2021 = south[18] + central[18] + north[18] + east[18] + outlying[18] + +totality = [Total1940, Total1956, Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] + +print(totality) + +cm = 1 / 2.54 + +plt.figure(figsize=(28 * cm, 15 * cm)) + +plt.bar(year, south, color='g', label="South Taiwan", align='edge', + width=0.3) # Adjusting the spacing between bars. [1] +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', + width=0.3) + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/40575741/14900011 From eb5828777bf8c1a280b855d801e29d85239ca08c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 17:16:25 +0800 Subject: [PATCH 0359/2002] Committed 2021/10/02 --- .../Population composition in history 8.py | 1 - .../Population composition in history 9.py | 169 ++++++++++++++++++ 2 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Population composition in history 9.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Population composition in history 8.py b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 8.py index 4b49cdf5..e0d3e753 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Population composition in history 8.py +++ b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 8.py @@ -110,7 +110,6 @@ (140004 + 13420 + 105645) # 2021/08 ] -x = range(10, 22) south = np.array(southTW) central = np.array(centralTW) diff --git a/The attainments and realizations of my dreams/Historical population composition/Population composition in history 9.py b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 9.py new file mode 100644 index 00000000..e0d3e753 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 9.py @@ -0,0 +1,169 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +print(south) +print(central) +print(north) +print(east) +print(outlying) + +Total1940 = south[0] + central[0] + north[0] + east[0] + outlying[0] +Total1956 = south[1] + central[1] + north[1] + east[1] + outlying[1] +Total1960 = south[2] + central[2] + north[2] + east[2] + outlying[2] +Total1970 = south[3] + central[3] + north[3] + east[3] + outlying[3] +Total1980 = south[4] + central[4] + north[4] + east[4] + outlying[4] +Total1990 = south[5] + central[5] + north[5] + east[5] + outlying[5] +Total2000 = south[6] + central[6] + north[6] + east[6] + outlying[6] +Total2010 = south[7] + central[7] + north[7] + east[7] + outlying[7] +Total2015 = south[12] + central[12] + north[12] + east[12] + outlying[12] +Total2020 = south[17] + central[17] + north[17] + east[17] + outlying[17] +Total2021 = south[18] + central[18] + north[18] + east[18] + outlying[18] + +totality = [Total1940, Total1956, Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] + +print(totality) + +cm = 1 / 2.54 + +plt.figure(figsize=(28 * cm, 15 * cm)) + +plt.bar(year, south, color='g', label="South Taiwan", align='edge', + width=0.3) # Adjusting the spacing between bars. [1] +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', + width=0.3) + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/40575741/14900011 From 80aabd6bff21f39f5e50f37c3d8e0b1a680b5011 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 17:18:31 +0800 Subject: [PATCH 0360/2002] Committed 2021/10/02 --- .../Put data into data frame.py | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py new file mode 100644 index 00000000..d7f93699 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py @@ -0,0 +1,139 @@ +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +print(south) +print(central) +print(north) +print(east) +print(outlying) + +Total1940 = south[0] + central[0] + north[0] + east[0] + outlying[0] +Total1956 = south[1] + central[1] + north[1] + east[1] + outlying[1] +Total1960 = south[2] + central[2] + north[2] + east[2] + outlying[2] +Total1970 = south[3] + central[3] + north[3] + east[3] + outlying[3] +Total1980 = south[4] + central[4] + north[4] + east[4] + outlying[4] +Total1990 = south[5] + central[5] + north[5] + east[5] + outlying[5] +Total2000 = south[6] + central[6] + north[6] + east[6] + outlying[6] +Total2010 = south[7] + central[7] + north[7] + east[7] + outlying[7] +Total2015 = south[12] + central[12] + north[12] + east[12] + outlying[12] +Total2020 = south[17] + central[17] + north[17] + east[17] + outlying[17] +Total2021 = south[18] + central[18] + north[18] + east[18] + outlying[18] + +totality = [Total1940, Total1956, Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] + +print(totality) \ No newline at end of file From 56083b358ba9672598fc8bb8ee5f5c1624ded52f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 17:19:23 +0800 Subject: [PATCH 0361/2002] Committed 2021/10/02 --- .../Put data into data frame.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py index d7f93699..c6e6d161 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py +++ b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py @@ -136,4 +136,8 @@ totality = [Total1940, Total1956, Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] -print(totality) \ No newline at end of file +print(totality) + + + + From cea202637e733119ee2c13b71cf38e9d4e36df07 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 17:25:28 +0800 Subject: [PATCH 0362/2002] Committed 2021/10/02 --- .../Put data into data frame.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py index c6e6d161..e2d0a906 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py +++ b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame.py @@ -138,6 +138,13 @@ print(totality) - +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) From 14eb74cadc49e1d007ba69b6c46b0081f6f00e09 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 17:27:47 +0800 Subject: [PATCH 0363/2002] Committed 2021/10/02 --- .../Put data into data frame 2.py | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Put data into data frame 2.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Put data into data frame 2.py b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame 2.py new file mode 100644 index 00000000..e2d0a906 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame 2.py @@ -0,0 +1,150 @@ +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +print(south) +print(central) +print(north) +print(east) +print(outlying) + +Total1940 = south[0] + central[0] + north[0] + east[0] + outlying[0] +Total1956 = south[1] + central[1] + north[1] + east[1] + outlying[1] +Total1960 = south[2] + central[2] + north[2] + east[2] + outlying[2] +Total1970 = south[3] + central[3] + north[3] + east[3] + outlying[3] +Total1980 = south[4] + central[4] + north[4] + east[4] + outlying[4] +Total1990 = south[5] + central[5] + north[5] + east[5] + outlying[5] +Total2000 = south[6] + central[6] + north[6] + east[6] + outlying[6] +Total2010 = south[7] + central[7] + north[7] + east[7] + outlying[7] +Total2015 = south[12] + central[12] + north[12] + east[12] + outlying[12] +Total2020 = south[17] + central[17] + north[17] + east[17] + outlying[17] +Total2021 = south[18] + central[18] + north[18] + east[18] + outlying[18] + +totality = [Total1940, Total1956, Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] + +print(totality) + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + + From 8320389edd469ec89fdcb45b90673e719340d860 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 17:31:20 +0800 Subject: [PATCH 0364/2002] Committed 2021/10/02 --- .../Put data into data frame 2.py | 31 +------------------ ...tion of Taiwan's population in history.csv | 6 ++++ 2 files changed, 7 insertions(+), 30 deletions(-) create mode 100644 The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population in history.csv diff --git a/The attainments and realizations of my dreams/Historical population composition/Put data into data frame 2.py b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame 2.py index e2d0a906..af5af6d3 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Put data into data frame 2.py +++ b/The attainments and realizations of my dreams/Historical population composition/Put data into data frame 2.py @@ -109,35 +109,6 @@ (140004 + 13420 + 105645) # 2021/08 ] - -south = np.array(southTW) -central = np.array(centralTW) -north = np.array(northTW) -east = np.array(eastTW) -outlying = np.array(outlyingTW) - -print(south) -print(central) -print(north) -print(east) -print(outlying) - -Total1940 = south[0] + central[0] + north[0] + east[0] + outlying[0] -Total1956 = south[1] + central[1] + north[1] + east[1] + outlying[1] -Total1960 = south[2] + central[2] + north[2] + east[2] + outlying[2] -Total1970 = south[3] + central[3] + north[3] + east[3] + outlying[3] -Total1980 = south[4] + central[4] + north[4] + east[4] + outlying[4] -Total1990 = south[5] + central[5] + north[5] + east[5] + outlying[5] -Total2000 = south[6] + central[6] + north[6] + east[6] + outlying[6] -Total2010 = south[7] + central[7] + north[7] + east[7] + outlying[7] -Total2015 = south[12] + central[12] + north[12] + east[12] + outlying[12] -Total2020 = south[17] + central[17] + north[17] + east[17] + outlying[17] -Total2021 = south[18] + central[18] + north[18] + east[18] + outlying[18] - -totality = [Total1940, Total1956, Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] - -print(totality) - df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], data=[northTW, centralTW, @@ -147,4 +118,4 @@ print(df) - +df.to_csv("The composition of Taiwan's population in history.csv") diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population in history.csv b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population in history.csv new file mode 100644 index 00000000..3ba7f786 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population in history.csv @@ -0,0 +1,6 @@ +,1940,56,60,70,80,90,2000,2010,'11,'12,'13,'14,'15,'16,'17,'18,'19,'20,'21/08 +North,1661638,2809383,3364068,5061373,6961776,8625648,9608750,10291178,10357405,10427504,10477807,10528933,10587558,10637131,10679329,10713182,10748581,10745030,10690537 +Central,1960847,2935425,3304823,4120651,4636221,5102974,5615237,5760817,5765806,5779924,5788242,5798112,5806552,5813610,5814759,5813634,5808940,5797752,5777006 +South,1950383,3091090,3565789,4747227,5463631,5919376,6303682,6336424,6325427,6323688,6315472,6306859,6295917,6286390,6273953,6258460,6244091,6218993,6188763 +East,234596,788170,460536,627560,636396,609036,598942,569478,565128,561442,558718,557862,554397,551713,548777,546887,543028,539633,536462 +Outlying,264786,85886,96986,197397,167984,144271,150061,204226,211146,223264,233278,241987,247650,250972,254409,256769,258481,259828,259069 From 4527b09b82f73850d8a95e91c6aeb3197f1da267 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 17:51:50 +0800 Subject: [PATCH 0365/2002] Committed 2021/10/02 --- .../The composition of Taiwan's population.py | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py new file mode 100644 index 00000000..821474cc --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py @@ -0,0 +1,121 @@ +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + + From d19b38cacaffb77705a6c84ecffbbd9186eea5f8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 18:00:52 +0800 Subject: [PATCH 0366/2002] Committed 2021/10/02 --- .../The composition of Taiwan's population.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py index 821474cc..876b418f 100644 --- a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py @@ -1,5 +1,7 @@ import numpy as np import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] @@ -118,4 +120,18 @@ print(df) +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) +cm = 1 / 2.54 + +figure, axes = plt.subplots(figsize=(28 * cm, 15 * cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan", align='edge', width=0.3) # Adjusting the spacing between bars. [1] +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', width=0.3) From 0792f329352b568b6931c340ee744a14d37fcedd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 18:11:19 +0800 Subject: [PATCH 0367/2002] Committed 2021/10/02 --- .../The composition of Taiwan's population.py | 17 ++ ...The composition of Taiwan's population2.py | 154 ++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population2.py diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py index 876b418f..a0c0a1d5 100644 --- a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population.py @@ -135,3 +135,20 @@ p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', width=0.3) + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +# Label with label_type 'center' instead of the default 'edge' +axes.bar_label(p1, label_type='center') +axes.bar_label(p2, label_type='center') +axes.bar_label(p3, label_type='center') +axes.bar_label(p5) + +plt.show() diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population2.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population2.py new file mode 100644 index 00000000..393f2031 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population2.py @@ -0,0 +1,154 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +cm = 1 / 2.54 + +figure, axes = plt.subplots(figsize=(28 * cm, 15 * cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan", align='edge', width=0.3) # Adjusting the spacing between bars. [1] +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', width=0.3) + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +# Label with label_type 'center' instead of the default 'edge' +axes.bar_label(p1, label_type='center', fmt='%.2f') +axes.bar_label(p2, label_type='center', fmt='%.2f') +axes.bar_label(p3, label_type='center', fmt='%.2f') +axes.bar_label(p5) + +plt.show() From ed556f694b390f1193044b9d6df8b40e0b29d798 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 18:12:43 +0800 Subject: [PATCH 0368/2002] Committed 2021/10/02 --- ...The composition of Taiwan's population3.py | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population3.py diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population3.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population3.py new file mode 100644 index 00000000..393f2031 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population3.py @@ -0,0 +1,154 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +cm = 1 / 2.54 + +figure, axes = plt.subplots(figsize=(28 * cm, 15 * cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan", align='edge', width=0.3) # Adjusting the spacing between bars. [1] +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', width=0.3) + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +# Label with label_type 'center' instead of the default 'edge' +axes.bar_label(p1, label_type='center', fmt='%.2f') +axes.bar_label(p2, label_type='center', fmt='%.2f') +axes.bar_label(p3, label_type='center', fmt='%.2f') +axes.bar_label(p5) + +plt.show() From 01ac9fe633b6e8d24547bbb456defba560ee1962 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 18:16:22 +0800 Subject: [PATCH 0369/2002] Committed 2021/10/02 --- ...The composition of Taiwan's population3.py | 10 +- ...The composition of Taiwan's population4.py | 154 ++++++++++++++++++ 2 files changed, 159 insertions(+), 5 deletions(-) create mode 100644 The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4.py diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population3.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population3.py index 393f2031..56cba7c8 100644 --- a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population3.py +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population3.py @@ -130,11 +130,11 @@ figure, axes = plt.subplots(figsize=(28 * cm, 15 * cm)) -p1 = axes.bar(year, south, color='g', label="South Taiwan", align='edge', width=0.3) # Adjusting the spacing between bars. [1] -p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) -p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) -p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) -p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', width=0.3) +p1 = axes.bar(year, south, color='g', label="South Taiwan", align='edge') +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge') +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge') +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge') +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge') axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4.py new file mode 100644 index 00000000..4945fe12 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4.py @@ -0,0 +1,154 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +cm = 1 / 2.54 + +figure, axes = plt.subplots(figsize=(28 * cm, 15 * cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan") +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +# Label with label_type 'center' instead of the default 'edge' +axes.bar_label(p1, label_type='center', fmt='%.2f') +axes.bar_label(p2, label_type='center', fmt='%.2f') +axes.bar_label(p3, label_type='center', fmt='%.2f') +axes.bar_label(p5) + +plt.show() From c0ab99a1ad2297d3462edfebc465d135617ce539 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 18:23:30 +0800 Subject: [PATCH 0370/2002] Committed 2021/10/02 --- Matplotlib Official Primer/bbox_to_anchor3.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Matplotlib Official Primer/bbox_to_anchor3.py diff --git a/Matplotlib Official Primer/bbox_to_anchor3.py b/Matplotlib Official Primer/bbox_to_anchor3.py new file mode 100644 index 00000000..b4a50eea --- /dev/null +++ b/Matplotlib Official Primer/bbox_to_anchor3.py @@ -0,0 +1,17 @@ +import pandas as pd +import matplotlib.pyplot as plt + +data = {'var': ['TR', 'AC', 'F&B'], '2019 1Q': [6600, 1256, 588], '2019 2Q': [6566, 1309, 586], '2019 3Q': [7383, 1525, 673]} +df = pd.DataFrame(data) +df.set_index('var', inplace=True) + +ax = df.T.plot.bar(stacked=True, figsize=(10, 5), rot=0) + +for c in ax.containers: + ax.bar_label(c, label_type='center') + +ax.legend(title='Categories', bbox_to_anchor=(1.05, 1), loc='upper left') + +plt.show() + +# Source: https://stackoverflow.com/a/63856446/14900011 From c29b57527461e72d56b6900e7600359cd0941bdb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 18:28:30 +0800 Subject: [PATCH 0371/2002] Committed 2021/10/02 --- Matplotlib Official Primer/bbox_to_anchor3.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Matplotlib Official Primer/bbox_to_anchor3.py b/Matplotlib Official Primer/bbox_to_anchor3.py index b4a50eea..778862dc 100644 --- a/Matplotlib Official Primer/bbox_to_anchor3.py +++ b/Matplotlib Official Primer/bbox_to_anchor3.py @@ -5,12 +5,12 @@ df = pd.DataFrame(data) df.set_index('var', inplace=True) -ax = df.T.plot.bar(stacked=True, figsize=(10, 5), rot=0) +ax = df.T.plot.bar(stacked=True, figsize=(12, 6), rot=0) for c in ax.containers: ax.bar_label(c, label_type='center') -ax.legend(title='Categories', bbox_to_anchor=(1.05, 1), loc='upper left') +ax.legend(title='Categories', bbox_to_anchor=(1.01, 1), loc='upper left') plt.show() From b02413fca9709353bd367c85803c29f604900d4b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 18:33:53 +0800 Subject: [PATCH 0372/2002] Committed 2021/10/02 --- .../The composition of Taiwan's population4.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4.py index 4945fe12..7ad3d1bc 100644 --- a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4.py +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4.py @@ -146,9 +146,12 @@ plt.legend() # Label with label_type 'center' instead of the default 'edge' -axes.bar_label(p1, label_type='center', fmt='%.2f') +axes.bar_label(p1, label_type='center', fmt='%.2f') # [1] axes.bar_label(p2, label_type='center', fmt='%.2f') axes.bar_label(p3, label_type='center', fmt='%.2f') axes.bar_label(p5) plt.show() + +# References: +# 1. https://stackoverflow.com/a/64797097/14900011 From 1891465cf3b7b99f21994bf3541f62145ea76687 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 18:51:22 +0800 Subject: [PATCH 0373/2002] Committed 2021/10/02 --- .../Matplotlib/bar plot with percentage.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Supplementary materials/Matplotlib/bar plot with percentage.py diff --git a/Supplementary materials/Matplotlib/bar plot with percentage.py b/Supplementary materials/Matplotlib/bar plot with percentage.py new file mode 100644 index 00000000..5ad665c8 --- /dev/null +++ b/Supplementary materials/Matplotlib/bar plot with percentage.py @@ -0,0 +1,33 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +# create sample data as shown in the OP +np.random.seed(365) +people = ('A','B','C','D','E','F','G','H') +bottomdata = 3 + 10 * np.random.rand(len(people)) +topdata = 3 + 10 * np.random.rand(len(people)) + +# create the dataframe +df = pd.DataFrame({'Female': bottomdata, 'Male': topdata}, index=people) + +ax = df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + + # customize the label to account for cases when there might not be a bar section + labels = [f'{w:.2f}%' if (w := v.get_width()) > 0 else '' for v in c ] + + # set the bar label + ax.bar_label(c, labels=labels, label_type='center') + + # uncomment and use the next line if there are no nan or 0 length sections; just use fmt to add a % (the previous two lines of code are not needed, in this case) +# ax.bar_label(c, fmt='%.2f%%', label_type='center') + +# move the legend +ax.legend(bbox_to_anchor=(1.025, 1), loc='upper left', borderaxespad=0.) + +# add labels +ax.set_ylabel("People", fontsize=18) +ax.set_xlabel("Percent", fontsize=18) +plt.show() From f891cd30874ad358a1ad2c10a82c536e59241f9b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 19:03:26 +0800 Subject: [PATCH 0374/2002] Committed 2021/10/02 --- .../Matplotlib/bar plot with percentage2.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Supplementary materials/Matplotlib/bar plot with percentage2.py diff --git a/Supplementary materials/Matplotlib/bar plot with percentage2.py b/Supplementary materials/Matplotlib/bar plot with percentage2.py new file mode 100644 index 00000000..b06c99be --- /dev/null +++ b/Supplementary materials/Matplotlib/bar plot with percentage2.py @@ -0,0 +1,42 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +# create sample data as shown in the OP +np.random.seed(365) +people = ('A','B','C','D','E','F','G','H') +bottomdata = 3 + 10 * np.random.rand(len(people)) +topdata = 3 + 10 * np.random.rand(len(people)) + +# create the dataframe +df = pd.DataFrame({'Female': bottomdata, 'Male': topdata}, index=people) + +ax = df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + + # customize the label to account for cases when there might not be a bar section + + labels = [] + for v in c: + w = v.get_width() + if w > 0: + labels.append(f'{w:.2f}%') + else: + labels.append('') + +# labels = [f'{w:.2f}%' if (w := v.get_width()) > 0 else '' for v in c ] + + # set the bar label + ax.bar_label(c, labels=labels, label_type='center') + + # uncomment and use the next line if there are no nan or 0 length sections; just use fmt to add a % (the previous two lines of code are not needed, in this case) +# ax.bar_label(c, fmt='%.2f%%', label_type='center') + +# move the legend +ax.legend(bbox_to_anchor=(1.025, 1), loc='upper left', borderaxespad=0.) + +# add labels +ax.set_ylabel("People", fontsize=18) +ax.set_xlabel("Percent", fontsize=18) +plt.show() From db633c70c8a0113f26f44ed8dc24818a55588c89 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 19:05:43 +0800 Subject: [PATCH 0375/2002] Committed 2021/10/02 --- .../Matplotlib/bar plot with percentage2.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Supplementary materials/Matplotlib/bar plot with percentage2.py b/Supplementary materials/Matplotlib/bar plot with percentage2.py index b06c99be..fa7f0cec 100644 --- a/Supplementary materials/Matplotlib/bar plot with percentage2.py +++ b/Supplementary materials/Matplotlib/bar plot with percentage2.py @@ -40,3 +40,11 @@ ax.set_ylabel("People", fontsize=18) ax.set_xlabel("Percent", fontsize=18) plt.show() + +# Source: https://stackoverflow.com/a/64202669/14900011 +# References: +# 1. https://www.google.com/search?q=python+3.8+vs+3.7 +# 2. https://docs.python.org/3/whatsnew/3.8.html +# 3. https://www.google.com/search?q=walrus+operator +# 4. https://towardsdatascience.com/the-walrus-operator-7971cd339d7d +# 5. https://www.geeksforgeeks.org/display-percentage-above-bar-chart-in-matplotlib/ From 7e53be24f653ee76fbc5e5c2e5acda1dfe8eb216 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 19:07:36 +0800 Subject: [PATCH 0376/2002] Committed 2021/10/02 --- .../bar label showing percentile.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Matplotlib Official Primer/bar_label()/bar label showing percentile.py diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile.py new file mode 100644 index 00000000..8455b13a --- /dev/null +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile.py @@ -0,0 +1,50 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +# create sample data as shown in the OP +np.random.seed(365) +people = ('A','B','C','D','E','F','G','H') +bottomdata = 3 + 10 * np.random.rand(len(people)) +topdata = 3 + 10 * np.random.rand(len(people)) + +# create the dataframe +df = pd.DataFrame({'Female': bottomdata, 'Male': topdata}, index=people) + +ax = df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + + # customize the label to account for cases when there might not be a bar section + + labels = [] + for v in c: + w = v.get_width() + if w > 0: + labels.append(f'{w:.2f}%') + else: + labels.append('') + + # labels = [f'{w:.2f}%' if (w := v.get_width()) > 0 else '' for v in c ] + + # set the bar label + ax.bar_label(c, labels=labels, label_type='center') + + # uncomment and use the next line if there are no nan or 0 length sections; just use fmt to add a % (the previous two lines of code are not needed, in this case) +# ax.bar_label(c, fmt='%.2f%%', label_type='center') + +# move the legend +ax.legend(bbox_to_anchor=(1.025, 1), loc='upper left', borderaxespad=0.) + +# add labels +ax.set_ylabel("People", fontsize=18) +ax.set_xlabel("Percent", fontsize=18) +plt.show() + +# Source: https://stackoverflow.com/a/64202669/14900011 +# References: +# 1. https://www.google.com/search?q=python+3.8+vs+3.7 +# 2. https://docs.python.org/3/whatsnew/3.8.html +# 3. https://www.google.com/search?q=walrus+operator +# 4. https://towardsdatascience.com/the-walrus-operator-7971cd339d7d +# 5. https://www.geeksforgeeks.org/display-percentage-above-bar-chart-in-matplotlib/ From bae4005d0f0f8171a8d4adf176ae15ddf1dbfc94 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 19:09:19 +0800 Subject: [PATCH 0377/2002] Committed 2021/10/02 --- .../bar_label()/bar label showing percentile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile.py index 8455b13a..6017e037 100644 --- a/Matplotlib Official Primer/bar_label()/bar label showing percentile.py +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile.py @@ -42,6 +42,7 @@ plt.show() # Source: https://stackoverflow.com/a/64202669/14900011 + # References: # 1. https://www.google.com/search?q=python+3.8+vs+3.7 # 2. https://docs.python.org/3/whatsnew/3.8.html From d6b699e248dc1a14b8ae0269a3dbc808fba79c82 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 19:11:06 +0800 Subject: [PATCH 0378/2002] Committed 2021/10/02 --- .../bar_label()/bar label showing percentile.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile.py index 6017e037..7bc70fa8 100644 --- a/Matplotlib Official Primer/bar_label()/bar label showing percentile.py +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile.py @@ -4,7 +4,8 @@ # create sample data as shown in the OP np.random.seed(365) -people = ('A','B','C','D','E','F','G','H') + +people = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H') bottomdata = 3 + 10 * np.random.rand(len(people)) topdata = 3 + 10 * np.random.rand(len(people)) From 40aa4d95e142642eec059407e4e8592e59a7c867 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 22:08:45 +0800 Subject: [PATCH 0379/2002] Committed 2021/10/02 --- Matplotlib Official Primer/Label_right.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Matplotlib Official Primer/Label_right.py diff --git a/Matplotlib Official Primer/Label_right.py b/Matplotlib Official Primer/Label_right.py new file mode 100644 index 00000000..f5934314 --- /dev/null +++ b/Matplotlib Official Primer/Label_right.py @@ -0,0 +1,18 @@ +import numpy as np +import matplotlib.pyplot as plt + +# Fixing random state for reproducibility +np.random.seed(19680801) + +fig, ax = plt.subplots() +ax.plot(100*np.random.rand(20)) + +# Use automatic StrMethodFormatter +ax.yaxis.set_major_formatter('${x:1.2f}') + +ax.yaxis.set_tick_params(which='major', labelcolor='green', + labelleft=False, labelright=True) + +plt.show() + +# Source: https://matplotlib.org/stable/tutorials/intermediate/artists.html From e221cf8d23e5f18d7bf70344fd9dc33393102c0d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 22:46:14 +0800 Subject: [PATCH 0380/2002] Committed 2021/10/02 --- .../bar label showing percentile2.py | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Matplotlib Official Primer/bar_label()/bar label showing percentile2.py diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile2.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile2.py new file mode 100644 index 00000000..7bc70fa8 --- /dev/null +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile2.py @@ -0,0 +1,52 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +# create sample data as shown in the OP +np.random.seed(365) + +people = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H') +bottomdata = 3 + 10 * np.random.rand(len(people)) +topdata = 3 + 10 * np.random.rand(len(people)) + +# create the dataframe +df = pd.DataFrame({'Female': bottomdata, 'Male': topdata}, index=people) + +ax = df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + + # customize the label to account for cases when there might not be a bar section + + labels = [] + for v in c: + w = v.get_width() + if w > 0: + labels.append(f'{w:.2f}%') + else: + labels.append('') + + # labels = [f'{w:.2f}%' if (w := v.get_width()) > 0 else '' for v in c ] + + # set the bar label + ax.bar_label(c, labels=labels, label_type='center') + + # uncomment and use the next line if there are no nan or 0 length sections; just use fmt to add a % (the previous two lines of code are not needed, in this case) +# ax.bar_label(c, fmt='%.2f%%', label_type='center') + +# move the legend +ax.legend(bbox_to_anchor=(1.025, 1), loc='upper left', borderaxespad=0.) + +# add labels +ax.set_ylabel("People", fontsize=18) +ax.set_xlabel("Percent", fontsize=18) +plt.show() + +# Source: https://stackoverflow.com/a/64202669/14900011 + +# References: +# 1. https://www.google.com/search?q=python+3.8+vs+3.7 +# 2. https://docs.python.org/3/whatsnew/3.8.html +# 3. https://www.google.com/search?q=walrus+operator +# 4. https://towardsdatascience.com/the-walrus-operator-7971cd339d7d +# 5. https://www.geeksforgeeks.org/display-percentage-above-bar-chart-in-matplotlib/ From 6b40049bc4ede75d2a0640664f11c6df959b33fa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 22:49:21 +0800 Subject: [PATCH 0381/2002] Committed 2021/10/02 --- .../bar label showing percentile2.py | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile2.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile2.py index 7bc70fa8..7ef13ef4 100644 --- a/Matplotlib Official Primer/bar_label()/bar label showing percentile2.py +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile2.py @@ -14,26 +14,6 @@ ax = df.plot(kind='barh', stacked=True, figsize=(8, 6)) -for c in ax.containers: - - # customize the label to account for cases when there might not be a bar section - - labels = [] - for v in c: - w = v.get_width() - if w > 0: - labels.append(f'{w:.2f}%') - else: - labels.append('') - - # labels = [f'{w:.2f}%' if (w := v.get_width()) > 0 else '' for v in c ] - - # set the bar label - ax.bar_label(c, labels=labels, label_type='center') - - # uncomment and use the next line if there are no nan or 0 length sections; just use fmt to add a % (the previous two lines of code are not needed, in this case) -# ax.bar_label(c, fmt='%.2f%%', label_type='center') - # move the legend ax.legend(bbox_to_anchor=(1.025, 1), loc='upper left', borderaxespad=0.) From bfae54d3b963f89dcc94495e55ecdb2a6420a709 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 22:51:29 +0800 Subject: [PATCH 0382/2002] Committed 2021/10/02 --- .../bar label showing percentile3.py | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Matplotlib Official Primer/bar_label()/bar label showing percentile3.py diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py new file mode 100644 index 00000000..7bc70fa8 --- /dev/null +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py @@ -0,0 +1,52 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +# create sample data as shown in the OP +np.random.seed(365) + +people = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H') +bottomdata = 3 + 10 * np.random.rand(len(people)) +topdata = 3 + 10 * np.random.rand(len(people)) + +# create the dataframe +df = pd.DataFrame({'Female': bottomdata, 'Male': topdata}, index=people) + +ax = df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + + # customize the label to account for cases when there might not be a bar section + + labels = [] + for v in c: + w = v.get_width() + if w > 0: + labels.append(f'{w:.2f}%') + else: + labels.append('') + + # labels = [f'{w:.2f}%' if (w := v.get_width()) > 0 else '' for v in c ] + + # set the bar label + ax.bar_label(c, labels=labels, label_type='center') + + # uncomment and use the next line if there are no nan or 0 length sections; just use fmt to add a % (the previous two lines of code are not needed, in this case) +# ax.bar_label(c, fmt='%.2f%%', label_type='center') + +# move the legend +ax.legend(bbox_to_anchor=(1.025, 1), loc='upper left', borderaxespad=0.) + +# add labels +ax.set_ylabel("People", fontsize=18) +ax.set_xlabel("Percent", fontsize=18) +plt.show() + +# Source: https://stackoverflow.com/a/64202669/14900011 + +# References: +# 1. https://www.google.com/search?q=python+3.8+vs+3.7 +# 2. https://docs.python.org/3/whatsnew/3.8.html +# 3. https://www.google.com/search?q=walrus+operator +# 4. https://towardsdatascience.com/the-walrus-operator-7971cd339d7d +# 5. https://www.geeksforgeeks.org/display-percentage-above-bar-chart-in-matplotlib/ From d48547a76a415a8106021d976533524a939d708c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 22:53:57 +0800 Subject: [PATCH 0383/2002] Committed 2021/10/02 --- .../bar_label()/bar label showing percentile3.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py index 7bc70fa8..6dfd0a54 100644 --- a/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py @@ -12,6 +12,8 @@ # create the dataframe df = pd.DataFrame({'Female': bottomdata, 'Male': topdata}, index=people) +print(df) + ax = df.plot(kind='barh', stacked=True, figsize=(8, 6)) for c in ax.containers: From 408a18ac0715d39749dc4421266c4c37b6387536 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 23:01:28 +0800 Subject: [PATCH 0384/2002] Committed 2021/10/02 --- ...The composition of Taiwan's population5.py | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population5.py diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population5.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population5.py new file mode 100644 index 00000000..7ad3d1bc --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population5.py @@ -0,0 +1,157 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +cm = 1 / 2.54 + +figure, axes = plt.subplots(figsize=(28 * cm, 15 * cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan") +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +# Label with label_type 'center' instead of the default 'edge' +axes.bar_label(p1, label_type='center', fmt='%.2f') # [1] +axes.bar_label(p2, label_type='center', fmt='%.2f') +axes.bar_label(p3, label_type='center', fmt='%.2f') +axes.bar_label(p5) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/64797097/14900011 From 0d0e56679f135fcb313e73a02ec7c7998a0366be Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 23:18:38 +0800 Subject: [PATCH 0385/2002] Committed 2021/10/02 --- .../Percentage using data frame.py | 0 ...The composition of Taiwan's population5.py | 58 +++++++++++++++---- 2 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population5.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population5.py index 7ad3d1bc..e270d653 100644 --- a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population5.py +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population5.py @@ -1,13 +1,13 @@ -import numpy as np -import pandas as pd import matplotlib.pyplot as plt import matplotlib.ticker as ticker +import numpy as np +import pandas as pd year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] -northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 - (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 @@ -28,7 +28,7 @@ ] centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 - (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 @@ -69,7 +69,7 @@ (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 ] -eastTW = [(147744 + 86852), # 1940 +eastTW = [(147744 + 86852), # 1940 (219701 + 568469), # 1956 (252264 + 208272), # 1960 (335799 + 291761), # 1970 @@ -90,7 +90,7 @@ (322506 + 213956), # 2021/08 ] -outlyingTW = [(0 + 0 + 264786), # 1940 +outlyingTW = [(0 + 0 + 264786), # 1940 (0 + 0 + 85886), # 1956 (0 + 0 + 96986), # 1960 (61305 + 16939 + 119153), # 1970 @@ -146,9 +146,47 @@ plt.legend() # Label with label_type 'center' instead of the default 'edge' -axes.bar_label(p1, label_type='center', fmt='%.2f') # [1] -axes.bar_label(p2, label_type='center', fmt='%.2f') -axes.bar_label(p3, label_type='center', fmt='%.2f') +# axes.bar_label(p1, label_type='center', fmt='%.2f') # [1] +# axes.bar_label(p2, label_type='center', fmt='%.2f') +# axes.bar_label(p3, label_type='center', fmt='%.2f') +# axes.bar_label(p5) + +for c in p1: + labels = [] + for v in c: + w = v.get_width() + if w > 0: + labels.append(f'{w:.2f}%') + else: + labels.append('') + + axes.bar_label(c, labels=labels, label_type='center') + + +for c in p2: + labels = [] + for v in c: + w = v.get_width() + if w > 0: + labels.append(f'{w:.2f}%') + else: + labels.append('') + + axes.bar_label(c, labels=labels, label_type='center') + + +for c in p3: + labels = [] + for v in c: + w = v.get_width() + if w > 0: + labels.append(f'{w:.2f}%') + else: + labels.append('') + + axes.bar_label(c, labels=labels, label_type='center') + + axes.bar_label(p5) plt.show() From 35dc05549235c8078f4d90c4bba1453be17f6148 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 23:30:54 +0800 Subject: [PATCH 0386/2002] Committed 2021/10/02 --- .../Percentage using data frame.py | 130 +++++++++++++++++ .../Percentage using data frame 2.py | 132 ++++++++++++++++++ 2 files changed, 262 insertions(+) create mode 100644 The attainments and realizations of my dreams/Percentage using data frame 2.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame.py index e69de29b..cd359535 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame.py @@ -0,0 +1,130 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +ax = df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + ax.bar_label(c, fmt='%.2f%%', label_type='center') + + +plt.show() + diff --git a/The attainments and realizations of my dreams/Percentage using data frame 2.py b/The attainments and realizations of my dreams/Percentage using data frame 2.py new file mode 100644 index 00000000..1e9a4c1a --- /dev/null +++ b/The attainments and realizations of my dreams/Percentage using data frame 2.py @@ -0,0 +1,132 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +transposed_df = df.transpose() + +ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + ax.bar_label(c, fmt='%.2f%%', label_type='center') + + +plt.show() + From 401a6fc5cc6bc35b9eefa17a024c21015a10ef06 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 23:34:15 +0800 Subject: [PATCH 0387/2002] Committed 2021/10/02 --- .../bar label showing percentile3.py | 4 +- .../Percentage using data frame 3.py | 130 ++++++++++++++++++ 2 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 3.py diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py index 6dfd0a54..8cd9cbc6 100644 --- a/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py @@ -14,7 +14,9 @@ print(df) -ax = df.plot(kind='barh', stacked=True, figsize=(8, 6)) +cm = 1 / 2.54 + +ax = df.plot(kind='barh', stacked=True, figsize=(28 * cm, 15 * cm)) for c in ax.containers: diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 3.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 3.py new file mode 100644 index 00000000..d761ab84 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 3.py @@ -0,0 +1,130 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +ax = df.plot(kind='bar', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + ax.bar_label(c, fmt='%.2f%%', label_type='center') + + +plt.show() + From 9599a15de1bb413b74f0c0a81d8cb57cfd348f7b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 23:40:10 +0800 Subject: [PATCH 0388/2002] Committed 2021/10/02 --- .../bar_label()/bar label showing percentile3.py | 2 +- .../Percentage using data frame 2.py | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename The attainments and realizations of my dreams/{ => Historical population composition}/Percentage using data frame 2.py (100%) diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py index 8cd9cbc6..68025bda 100644 --- a/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile3.py @@ -16,7 +16,7 @@ cm = 1 / 2.54 -ax = df.plot(kind='barh', stacked=True, figsize=(28 * cm, 15 * cm)) +ax = df.plot(kind='bar', stacked=True, figsize=(28 * cm, 15 * cm)) for c in ax.containers: diff --git a/The attainments and realizations of my dreams/Percentage using data frame 2.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 2.py similarity index 100% rename from The attainments and realizations of my dreams/Percentage using data frame 2.py rename to The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 2.py From 447ab2a112a1f45669ad7fa57462bfc5a45f0f26 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 23:43:03 +0800 Subject: [PATCH 0389/2002] Committed 2021/10/02 --- .../bar label showing percentile4.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Matplotlib Official Primer/bar_label()/bar label showing percentile4.py diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile4.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile4.py new file mode 100644 index 00000000..68025bda --- /dev/null +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile4.py @@ -0,0 +1,56 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +# create sample data as shown in the OP +np.random.seed(365) + +people = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H') +bottomdata = 3 + 10 * np.random.rand(len(people)) +topdata = 3 + 10 * np.random.rand(len(people)) + +# create the dataframe +df = pd.DataFrame({'Female': bottomdata, 'Male': topdata}, index=people) + +print(df) + +cm = 1 / 2.54 + +ax = df.plot(kind='bar', stacked=True, figsize=(28 * cm, 15 * cm)) + +for c in ax.containers: + + # customize the label to account for cases when there might not be a bar section + + labels = [] + for v in c: + w = v.get_width() + if w > 0: + labels.append(f'{w:.2f}%') + else: + labels.append('') + + # labels = [f'{w:.2f}%' if (w := v.get_width()) > 0 else '' for v in c ] + + # set the bar label + ax.bar_label(c, labels=labels, label_type='center') + + # uncomment and use the next line if there are no nan or 0 length sections; just use fmt to add a % (the previous two lines of code are not needed, in this case) +# ax.bar_label(c, fmt='%.2f%%', label_type='center') + +# move the legend +ax.legend(bbox_to_anchor=(1.025, 1), loc='upper left', borderaxespad=0.) + +# add labels +ax.set_ylabel("People", fontsize=18) +ax.set_xlabel("Percent", fontsize=18) +plt.show() + +# Source: https://stackoverflow.com/a/64202669/14900011 + +# References: +# 1. https://www.google.com/search?q=python+3.8+vs+3.7 +# 2. https://docs.python.org/3/whatsnew/3.8.html +# 3. https://www.google.com/search?q=walrus+operator +# 4. https://towardsdatascience.com/the-walrus-operator-7971cd339d7d +# 5. https://www.geeksforgeeks.org/display-percentage-above-bar-chart-in-matplotlib/ From 4ecdb831306d9699f5afa58b117644947ad7e9b8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 23:45:26 +0800 Subject: [PATCH 0390/2002] Committed 2021/10/02 --- .../bar_label()/bar label showing percentile4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matplotlib Official Primer/bar_label()/bar label showing percentile4.py b/Matplotlib Official Primer/bar_label()/bar label showing percentile4.py index 68025bda..7ade141d 100644 --- a/Matplotlib Official Primer/bar_label()/bar label showing percentile4.py +++ b/Matplotlib Official Primer/bar_label()/bar label showing percentile4.py @@ -24,7 +24,7 @@ labels = [] for v in c: - w = v.get_width() + w = v.get_height() if w > 0: labels.append(f'{w:.2f}%') else: From 0efad9f1f5bb86f5e5c725ccd8bcf1e10caee0ca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Oct 2021 23:47:21 +0800 Subject: [PATCH 0391/2002] Committed 2021/10/02 --- .../Percentage using data frame 4.py | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 4.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 4.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 4.py new file mode 100644 index 00000000..78131d81 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 4.py @@ -0,0 +1,131 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +transposed_df = df.transpose() + +ax = df.plot(kind='bar', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + ax.bar_label(c, fmt='%.2f%%', label_type='center') + + +plt.show() From caecbd3860cec5e195b3ccbddba613b6c9949191 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 01:02:02 +0800 Subject: [PATCH 0392/2002] Committed 2021/10/02 --- .../Percentage using data frame 5.py | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py new file mode 100644 index 00000000..78131d81 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py @@ -0,0 +1,131 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +transposed_df = df.transpose() + +ax = df.plot(kind='bar', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + ax.bar_label(c, fmt='%.2f%%', label_type='center') + + +plt.show() From 078ada944a157e656df981da2a91138e98c0681d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 01:04:33 +0800 Subject: [PATCH 0393/2002] Committed 2021/10/02 --- ... composition of Taiwan's population4_1.py} | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) rename The attainments and realizations of my dreams/Historical population composition/{Percentage using data frame 5.py => The composition of Taiwan's population4_1.py} (81%) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_1.py similarity index 81% rename from The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py rename to The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_1.py index 78131d81..7ad3d1bc 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_1.py @@ -1,13 +1,13 @@ -import matplotlib.pyplot as plt -import matplotlib.ticker as ticker import numpy as np import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] -northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 - (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 @@ -28,7 +28,7 @@ ] centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 - (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 @@ -69,7 +69,7 @@ (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 ] -eastTW = [(147744 + 86852), # 1940 +eastTW = [(147744 + 86852), # 1940 (219701 + 568469), # 1956 (252264 + 208272), # 1960 (335799 + 291761), # 1970 @@ -90,7 +90,7 @@ (322506 + 213956), # 2021/08 ] -outlyingTW = [(0 + 0 + 264786), # 1940 +outlyingTW = [(0 + 0 + 264786), # 1940 (0 + 0 + 85886), # 1956 (0 + 0 + 96986), # 1960 (61305 + 16939 + 119153), # 1970 @@ -120,12 +120,38 @@ print(df) -transposed_df = df.transpose() +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) -ax = df.plot(kind='bar', stacked=True, figsize=(8, 6)) +cm = 1 / 2.54 -for c in ax.containers: - ax.bar_label(c, fmt='%.2f%%', label_type='center') +figure, axes = plt.subplots(figsize=(28 * cm, 15 * cm)) +p1 = axes.bar(year, south, color='g', label="South Taiwan") +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +# Label with label_type 'center' instead of the default 'edge' +axes.bar_label(p1, label_type='center', fmt='%.2f') # [1] +axes.bar_label(p2, label_type='center', fmt='%.2f') +axes.bar_label(p3, label_type='center', fmt='%.2f') +axes.bar_label(p5) plt.show() + +# References: +# 1. https://stackoverflow.com/a/64797097/14900011 From 0f0f5a67162ba13282574e1b14414253ecdd5f8c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 01:17:06 +0800 Subject: [PATCH 0394/2002] Committed 2021/10/02 --- ...e composition of Taiwan's population4_1.py | 10 +- ...e composition of Taiwan's population4_2.py | 159 ++++++++++++++++++ 2 files changed, 165 insertions(+), 4 deletions(-) create mode 100644 The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_2.py diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_1.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_1.py index 7ad3d1bc..e272ad25 100644 --- a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_1.py +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_1.py @@ -126,6 +126,8 @@ east = np.array(eastTW) outlying = np.array(outlyingTW) +total = south + central + north + east + outlying + cm = 1 / 2.54 figure, axes = plt.subplots(figsize=(28 * cm, 15 * cm)) @@ -146,10 +148,10 @@ plt.legend() # Label with label_type 'center' instead of the default 'edge' -axes.bar_label(p1, label_type='center', fmt='%.2f') # [1] -axes.bar_label(p2, label_type='center', fmt='%.2f') -axes.bar_label(p3, label_type='center', fmt='%.2f') -axes.bar_label(p5) +axes.bar_label(p1 / total * 100, label_type='center', fmt='%.2f') # [1] +axes.bar_label(p2 / total * 100, label_type='center', fmt='%.2f') +axes.bar_label(p3 / total * 100, label_type='center', fmt='%.2f') +axes.bar_label(p5 / total * 100) plt.show() diff --git a/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_2.py b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_2.py new file mode 100644 index 00000000..855d4e99 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/The composition of Taiwan's population4_2.py @@ -0,0 +1,159 @@ +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +total = south + central + north + east + outlying + +cm = 1 / 2.54 + +figure, axes = plt.subplots(figsize=(28 * cm, 15 * cm)) + +p1 = axes.bar(year, south, color='g', label="South Taiwan") +p2 = axes.bar(year, central, color='y', bottom=south, label="Central Taiwan") +p3 = axes.bar(year, north, color='b', bottom=south + central, label="North Taiwan") +p4 = axes.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan") +p5 = axes.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands") + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +# Label with label_type 'center' instead of the default 'edge' +axes.bar_label(p1 / (p1 + p2 + p3 + p4 + p5), label_type='center', fmt='%.2f') # [1] +axes.bar_label(p2 / (p1 + p2 + p3 + p4 + p5), label_type='center', fmt='%.2f') +axes.bar_label(p3 / (p1 + p2 + p3 + p4 + p5), label_type='center', fmt='%.2f') +axes.bar_label(p5 /(p1 + p2 + p3 + p4 + p5)) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/64797097/14900011 From 536e240b29d6892f581b1be2e7cfae39fc344bb3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 11:24:28 +0800 Subject: [PATCH 0395/2002] Committed 2021/10/02 --- .../Population_versus_housing_price_index/September2021.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py new file mode 100644 index 00000000..e69de29b From a414bede708a0f1d582b71a42e81f3ef76b5ed62 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:03:45 +0800 Subject: [PATCH 0396/2002] Committed 2021/10/03 --- Matplotlib 3 Cookbook/Table chart.py | 39 ++++++++++++++++++++++++++++ Matplotlib 3 Cookbook/Table.py | 17 ++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Table.py diff --git a/Matplotlib 3 Cookbook/Table chart.py b/Matplotlib 3 Cookbook/Table chart.py index 8f75eb74..d5036940 100644 --- a/Matplotlib 3 Cookbook/Table chart.py +++ b/Matplotlib 3 Cookbook/Table chart.py @@ -19,3 +19,42 @@ # Specify the color spectrum to be used. Each year will be represented in a different color: colors = plt.cm.OrRd(np.linspace(0, 0.5, len(rows))) +# Define x axis ticks where the bars are to be plotted. +index = np.arange(len(columns)) + 0.3 + +# Initialize the vertical offset for the stacked bar chart +y_offset = np.zeros(len(columns)) + +# Specify the area for the plot in terms of figure and axes. +figure, axes = plt.subplots() + +# Plot bars and create text labels for the table. +# Initialize the list in which data for the table is save. +cell_text = [] + +# Each iteration of the for loop plots one year of data for all battery ratings in one color. +n_rows = len(data) + +for row in range(n_rows): + plot = plt.bar(index, data[row], 0.5, bottom=y_offset, color=colors[row]) + y_offset = y_offset + data[row] + cell_text.append(['%1.1f' % (x) for x in y_offset]) + i = 0 + + # Each iteration of this for loop, label each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table to the bottom of the axes +table = plt.table(cellText=cell_text, rowLabels=rows, rowColours=colors, colLabels=columns, + loc='bottom') + +plt.ylabel("Units Sold") +plt.xticks([]) +plt.title("The Number Of Batteries Sold Per Year") + +plt.show() diff --git a/Matplotlib 3 Cookbook/Table.py b/Matplotlib 3 Cookbook/Table.py new file mode 100644 index 00000000..d21351fb --- /dev/null +++ b/Matplotlib 3 Cookbook/Table.py @@ -0,0 +1,17 @@ +import matplotlib.pyplot as plt +import numpy as np + +# sold in each year +rows = ['2011', '2012', '2013', '2014', '2015'] + +# The types of batteries +columns = ('7Ah', '35Ah', '40Ah', '135Ah', '150Ah', '150Ah') + +data = [[75, 144, 114, 102, 108], + [90, 126, 102, 84, 126], + [96, 114, 75, 105, 135], + [105, 90, 150, 90, 75], + [90, 75, 135, 75, 90]] + +plt.table(cellText=data, rowLabels=rows, colLabels=columns, loc='bottom') +plt.show() From f00423f67bbdbef4004395df54ab9c030697d3d1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:08:19 +0800 Subject: [PATCH 0397/2002] Committed 2021/10/03 --- .../Pyplot tutorial/Table.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Matplotlib Official Primer/Pyplot tutorial/Table.py diff --git a/Matplotlib Official Primer/Pyplot tutorial/Table.py b/Matplotlib Official Primer/Pyplot tutorial/Table.py new file mode 100644 index 00000000..2fdb4b65 --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/Table.py @@ -0,0 +1,54 @@ +import numpy as np +import matplotlib.pyplot as plt + + +data = [[ 66386, 174296, 75131, 577908, 32015], + [ 58230, 381139, 78045, 99308, 160454], + [ 89135, 80552, 152558, 497981, 603535], + [ 78415, 81858, 150656, 193263, 69638], + [139361, 331509, 343164, 781380, 52269]] + +columns = ('Freeze', 'Wind', 'Flood', 'Quake', 'Hail') +rows = ['%d year' % x for x in (100, 50, 20, 10, 5)] + +values = np.arange(0, 2500, 500) +value_increment = 1000 + +# Get some pastel shades for the colors +colors = plt.cm.BuPu(np.linspace(0, 0.5, len(rows))) +n_rows = len(data) + +index = np.arange(len(columns)) + 0.3 +bar_width = 0.4 + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(columns)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + data[row] + cell_text.append(['%1.1f' % (x / 1000.0) for x in y_offset]) +# Reverse colors and text labels to display the last value at the top. +colors = colors[::-1] +cell_text.reverse() + +# Add a table at the bottom of the axes +the_table = plt.table(cellText=cell_text, + rowLabels=rows, + rowColours=colors, + colLabels=columns, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +plt.ylabel("Loss in ${0}'s".format(value_increment)) +plt.yticks(values * value_increment, ['%d' % val for val in values]) +plt.xticks([]) +plt.title('Loss by Disaster') + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/misc/table_demo.html From dd6e26587e5316ef54f3606d029100e06c5186d1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:14:29 +0800 Subject: [PATCH 0398/2002] Committed 2021/10/03 --- Matplotlib 3 Cookbook/Table.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Matplotlib 3 Cookbook/Table.py b/Matplotlib 3 Cookbook/Table.py index d21351fb..564428fa 100644 --- a/Matplotlib 3 Cookbook/Table.py +++ b/Matplotlib 3 Cookbook/Table.py @@ -14,4 +14,9 @@ [90, 75, 135, 75, 90]] plt.table(cellText=data, rowLabels=rows, colLabels=columns, loc='bottom') + +plt.ylabel("Units Sold") +plt.xticks([]) +plt.title("The Number Of Batteries Sold Per Year") + plt.show() From 3deb23d6bd1db56738bb8e09025f752da0b375cf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:21:19 +0800 Subject: [PATCH 0399/2002] Committed 2021/10/03 --- .../Pyplot tutorial/Scatter.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Matplotlib Official Primer/Pyplot tutorial/Scatter.py diff --git a/Matplotlib Official Primer/Pyplot tutorial/Scatter.py b/Matplotlib Official Primer/Pyplot tutorial/Scatter.py new file mode 100644 index 00000000..a02ad5b6 --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/Scatter.py @@ -0,0 +1,30 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.cbook as cbook + +# Load a numpy record array from yahoo csv data with fields date, open, close, +# volume, adj_close from the mpl-data/example directory. The record array +# stores the date as an np.datetime64 with a day unit ('D') in the date column. +price_data = (cbook.get_sample_data('goog.npz', np_load=True)['price_data'] + .view(np.recarray)) +price_data = price_data[-250:] # get the most recent 250 trading days + +delta1 = np.diff(price_data.adj_close) / price_data.adj_close[:-1] + +# Marker size in units of points^2 +volume = (15 * price_data.volume[:-2] / price_data.volume[0])**2 +close = 0.003 * price_data.close[:-2] / 0.003 * price_data.open[:-2] + +fig, ax = plt.subplots() +ax.scatter(delta1[:-1], delta1[1:], c=close, s=volume, alpha=0.5) + +ax.set_xlabel(r'$\Delta_i$', fontsize=15) +ax.set_ylabel(r'$\Delta_{i+1}$', fontsize=15) +ax.set_title('Volume and percent change') + +ax.grid(True) +fig.tight_layout() + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/scatter_demo2.html From adb59ba7ee232d1f55e1075362b947de2f6ce122 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:23:38 +0800 Subject: [PATCH 0400/2002] Committed 2021/10/03 --- .../Pyplot tutorial/Date tick labels.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Matplotlib Official Primer/Pyplot tutorial/Date tick labels.py diff --git a/Matplotlib Official Primer/Pyplot tutorial/Date tick labels.py b/Matplotlib Official Primer/Pyplot tutorial/Date tick labels.py new file mode 100644 index 00000000..8796de91 --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/Date tick labels.py @@ -0,0 +1,43 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.dates as mdates +import matplotlib.cbook as cbook + +# Load a numpy structured array from yahoo csv data with fields date, open, +# close, volume, adj_close from the mpl-data/example directory. This array +# stores the date as an np.datetime64 with a day unit ('D') in the 'date' +# column. +data = cbook.get_sample_data('goog.npz', np_load=True)['price_data'] + +fig, ax = plt.subplots() +ax.plot('date', 'adj_close', data=data) + +# Major ticks every 6 months. +fmt_half_year = mdates.MonthLocator(interval=6) +ax.xaxis.set_major_locator(fmt_half_year) + +# Minor ticks every month. +fmt_month = mdates.MonthLocator() +ax.xaxis.set_minor_locator(fmt_month) + +# Text in the x axis will be displayed in 'YYYY-mm' format. +ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m')) + +# Round to nearest years. +datemin = np.datetime64(data['date'][0], 'Y') +datemax = np.datetime64(data['date'][-1], 'Y') + np.timedelta64(1, 'Y') +ax.set_xlim(datemin, datemax) + +# Format the coords message box, i.e. the numbers displayed as the cursor moves +# across the axes within the interactive GUI. +ax.format_xdata = mdates.DateFormatter('%Y-%m') +ax.format_ydata = lambda x: f'${x:.2f}' # Format the price. +ax.grid(True) + +# Rotates and right aligns the x labels, and moves the bottom of the +# axes up to make room for them. +fig.autofmt_xdate() + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/text_labels_and_annotations/date.html From e40ff5320bd42c29659fd0746495d74176ef4869 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:31:23 +0800 Subject: [PATCH 0401/2002] Committed 2021/10/03 --- Matplotlib Official Primer/Bar_of_pie.py | 65 ++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Matplotlib Official Primer/Bar_of_pie.py diff --git a/Matplotlib Official Primer/Bar_of_pie.py b/Matplotlib Official Primer/Bar_of_pie.py new file mode 100644 index 00000000..fc37d17d --- /dev/null +++ b/Matplotlib Official Primer/Bar_of_pie.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +from matplotlib.patches import ConnectionPatch +import numpy as np + +# make figure and assign axis objects +fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9, 5)) +fig.subplots_adjust(wspace=0) + +# pie chart parameters +ratios = [.27, .56, .17] +labels = ['Approve', 'Disapprove', 'Undecided'] +explode = [0.1, 0, 0] +# rotate so that first wedge is split by the x-axis +angle = -180 * ratios[0] +ax1.pie(ratios, autopct='%1.1f%%', startangle=angle, + labels=labels, explode=explode) + +# bar chart parameters + +xpos = 0 +bottom = 0 +ratios = [.33, .54, .07, .06] +width = .2 +colors = [[.1, .3, .5], [.1, .3, .3], [.1, .3, .7], [.1, .3, .9]] + +for j in range(len(ratios)): + height = ratios[j] + ax2.bar(xpos, height, width, bottom=bottom, color=colors[j]) + ypos = bottom + ax2.patches[j].get_height() / 2 + bottom += height + ax2.text(xpos, ypos, "%d%%" % (ax2.patches[j].get_height() * 100), + ha='center') + +ax2.set_title('Age of approvers') +ax2.legend(('50-65', 'Over 65', '35-49', 'Under 35')) +ax2.axis('off') +ax2.set_xlim(- 2.5 * width, 2.5 * width) + +# use ConnectionPatch to draw lines between the two plots +# get the wedge data +theta1, theta2 = ax1.patches[0].theta1, ax1.patches[0].theta2 +center, r = ax1.patches[0].center, ax1.patches[0].r +bar_height = sum([item.get_height() for item in ax2.patches]) + +# draw top connecting line +x = r * np.cos(np.pi / 180 * theta2) + center[0] +y = r * np.sin(np.pi / 180 * theta2) + center[1] +con = ConnectionPatch(xyA=(-width / 2, bar_height), coordsA=ax2.transData, + xyB=(x, y), coordsB=ax1.transData) +con.set_color([0, 0, 0]) +con.set_linewidth(4) +ax2.add_artist(con) + +# draw bottom connecting line +x = r * np.cos(np.pi / 180 * theta1) + center[0] +y = r * np.sin(np.pi / 180 * theta1) + center[1] +con = ConnectionPatch(xyA=(-width / 2, 0), coordsA=ax2.transData, + xyB=(x, y), coordsB=ax1.transData) +con.set_color([0, 0, 0]) +ax2.add_artist(con) +con.set_linewidth(4) + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/pie_and_polar_charts/bar_of_pie.html#sphx-glr-gallery-pie-and-polar-charts-bar-of-pie-py From 1b9c4e572f220eb1d648944f791ed1d3c652c01a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:34:51 +0800 Subject: [PATCH 0402/2002] Committed 2021/10/03 --- .../Bar chart on polar axis.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Matplotlib Official Primer/Bar chart on polar axis.py diff --git a/Matplotlib Official Primer/Bar chart on polar axis.py b/Matplotlib Official Primer/Bar chart on polar axis.py new file mode 100644 index 00000000..c2bedb4f --- /dev/null +++ b/Matplotlib Official Primer/Bar chart on polar axis.py @@ -0,0 +1,18 @@ +import numpy as np +import matplotlib.pyplot as plt + + +# Fixing random state for reproducibility +np.random.seed(19680801) + +# Compute pie slices +N = 20 +theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False) +radii = 10 * np.random.rand(N) +width = np.pi / 4 * np.random.rand(N) +colors = plt.cm.viridis(radii / 10.) + +ax = plt.subplot(projection='polar') +ax.bar(theta, radii, width=width, bottom=0.0, color=colors, alpha=0.5) + +plt.show() \ No newline at end of file From 37d2e9e6c168d3db450892ab2afa006f897367ad Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:37:56 +0800 Subject: [PATCH 0403/2002] Committed 2021/10/03 --- Matplotlib Official Primer/Bar chart on polar axis.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Matplotlib Official Primer/Bar chart on polar axis.py b/Matplotlib Official Primer/Bar chart on polar axis.py index c2bedb4f..2131539c 100644 --- a/Matplotlib Official Primer/Bar chart on polar axis.py +++ b/Matplotlib Official Primer/Bar chart on polar axis.py @@ -15,4 +15,6 @@ ax = plt.subplot(projection='polar') ax.bar(theta, radii, width=width, bottom=0.0, color=colors, alpha=0.5) -plt.show() \ No newline at end of file +plt.show() + +# Source: https://matplotlib.org/stable/gallery/pie_and_polar_charts/polar_bar.html#sphx-glr-gallery-pie-and-polar-charts-polar-bar-py From 7ec3c8f0efc13c5b8d075bd7057b60f6935e3c9f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:38:57 +0800 Subject: [PATCH 0404/2002] Committed 2021/10/03 --- .../Custom tick formatter for time series.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Matplotlib Official Primer/Custom tick formatter for time series.py diff --git a/Matplotlib Official Primer/Custom tick formatter for time series.py b/Matplotlib Official Primer/Custom tick formatter for time series.py new file mode 100644 index 00000000..27fa599d --- /dev/null +++ b/Matplotlib Official Primer/Custom tick formatter for time series.py @@ -0,0 +1,36 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.cbook as cbook + +# Load a numpy record array from yahoo csv data with fields date, open, close, +# volume, adj_close from the mpl-data/example directory. The record array +# stores the date as an np.datetime64 with a day unit ('D') in the date column. +r = (cbook.get_sample_data('goog.npz', np_load=True)['price_data'] + .view(np.recarray)) +r = r[-30:] # get the last 30 days + +# first we'll do it the default way, with gaps on weekends +fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(8, 4)) +ax1.plot(r.date, r.adj_close, 'o-') +ax1.set_title("Default") +fig.autofmt_xdate() + +# next we'll write a custom formatter +N = len(r) +ind = np.arange(N) # the evenly spaced plot indices + + +def format_date(x, pos=None): + thisind = np.clip(int(x + 0.5), 0, N - 1) + return r.date[thisind].item().strftime('%Y-%m-%d') + + +ax2.plot(ind, r.adj_close, 'o-') +# Use automatic FuncFormatter creation +ax2.xaxis.set_major_formatter(format_date) +ax2.set_title("Custom tick formatter") +fig.autofmt_xdate() + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/text_labels_and_annotations/date_index_formatter.html#sphx-glr-gallery-text-labels-and-annotations-date-index-formatter-py From 2cd4cce7c2f6d9e6d20a9d62e787247ed3cc6dba Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:40:58 +0800 Subject: [PATCH 0405/2002] Committed 2021/10/03 --- .../Circles, Wedges and Polygons.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Matplotlib Official Primer/Circles, Wedges and Polygons.py diff --git a/Matplotlib Official Primer/Circles, Wedges and Polygons.py b/Matplotlib Official Primer/Circles, Wedges and Polygons.py new file mode 100644 index 00000000..3c0f2e12 --- /dev/null +++ b/Matplotlib Official Primer/Circles, Wedges and Polygons.py @@ -0,0 +1,51 @@ +import numpy as np +from matplotlib.patches import Circle, Wedge, Polygon +from matplotlib.collections import PatchCollection +import matplotlib.pyplot as plt + +# Fixing random state for reproducibility +np.random.seed(19680801) + + +fig, ax = plt.subplots() + +resolution = 50 # the number of vertices +N = 3 +x = np.random.rand(N) +y = np.random.rand(N) +radii = 0.1*np.random.rand(N) +patches = [] +for x1, y1, r in zip(x, y, radii): + circle = Circle((x1, y1), r) + patches.append(circle) + +x = np.random.rand(N) +y = np.random.rand(N) +radii = 0.1*np.random.rand(N) +theta1 = 360.0*np.random.rand(N) +theta2 = 360.0*np.random.rand(N) +for x1, y1, r, t1, t2 in zip(x, y, radii, theta1, theta2): + wedge = Wedge((x1, y1), r, t1, t2) + patches.append(wedge) + +# Some limiting conditions on Wedge +patches += [ + Wedge((.3, .7), .1, 0, 360), # Full circle + Wedge((.7, .8), .2, 0, 360, width=0.05), # Full ring + Wedge((.8, .3), .2, 0, 45), # Full sector + Wedge((.8, .3), .2, 45, 90, width=0.10), # Ring sector +] + +for i in range(N): + polygon = Polygon(np.random.rand(N, 2), True) + patches.append(polygon) + +colors = 100 * np.random.rand(len(patches)) +p = PatchCollection(patches, alpha=0.4) +p.set_array(colors) +ax.add_collection(p) +fig.colorbar(p, ax=ax) + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/shapes_and_collections/patch_collection.html#sphx-glr-gallery-shapes-and-collections-patch-collection-py From 1de92399ba1a7ae466ac348a6fb13e9e3279802f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:45:09 +0800 Subject: [PATCH 0406/2002] Committed 2021/10/03 --- Matplotlib Official Primer/Ribbon Box.py | 88 ++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Matplotlib Official Primer/Ribbon Box.py diff --git a/Matplotlib Official Primer/Ribbon Box.py b/Matplotlib Official Primer/Ribbon Box.py new file mode 100644 index 00000000..5a811fa1 --- /dev/null +++ b/Matplotlib Official Primer/Ribbon Box.py @@ -0,0 +1,88 @@ +import numpy as np + +from matplotlib import cbook, colors as mcolors +from matplotlib.image import AxesImage +import matplotlib.pyplot as plt +from matplotlib.transforms import Bbox, TransformedBbox, BboxTransformTo + + +class RibbonBox: + + original_image = plt.imread( + cbook.get_sample_data("Minduka_Present_Blue_Pack.png")) + cut_location = 70 + b_and_h = original_image[:, :, 2:3] + color = original_image[:, :, 2:3] - original_image[:, :, 0:1] + alpha = original_image[:, :, 3:4] + nx = original_image.shape[1] + + def __init__(self, color): + rgb = mcolors.to_rgba(color)[:3] + self.im = np.dstack( + [self.b_and_h - self.color * (1 - np.array(rgb)), self.alpha]) + + def get_stretched_image(self, stretch_factor): + stretch_factor = max(stretch_factor, 1) + ny, nx, nch = self.im.shape + ny2 = int(ny*stretch_factor) + return np.vstack( + [self.im[:self.cut_location], + np.broadcast_to( + self.im[self.cut_location], (ny2 - ny, nx, nch)), + self.im[self.cut_location:]]) + + +class RibbonBoxImage(AxesImage): + zorder = 1 + + def __init__(self, ax, bbox, color, *, extent=(0, 1, 0, 1), **kwargs): + super().__init__(ax, extent=extent, **kwargs) + self._bbox = bbox + self._ribbonbox = RibbonBox(color) + self.set_transform(BboxTransformTo(bbox)) + + def draw(self, renderer, *args, **kwargs): + stretch_factor = self._bbox.height / self._bbox.width + + ny = int(stretch_factor*self._ribbonbox.nx) + if self.get_array() is None or self.get_array().shape[0] != ny: + arr = self._ribbonbox.get_stretched_image(stretch_factor) + self.set_array(arr) + + super().draw(renderer, *args, **kwargs) + + +def main(): + fig, ax = plt.subplots() + + years = np.arange(2004, 2009) + heights = [7900, 8100, 7900, 6900, 2800] + box_colors = [ + (0.8, 0.2, 0.2), + (0.2, 0.8, 0.2), + (0.2, 0.2, 0.8), + (0.7, 0.5, 0.8), + (0.3, 0.8, 0.7), + ] + + for year, h, bc in zip(years, heights, box_colors): + bbox0 = Bbox.from_extents(year - 0.4, 0., year + 0.4, h) + bbox = TransformedBbox(bbox0, ax.transData) + ax.add_artist(RibbonBoxImage(ax, bbox, bc, interpolation="bicubic")) + ax.annotate(str(h), (year, h), va="bottom", ha="center") + + ax.set_xlim(years[0] - 0.5, years[-1] + 0.5) + ax.set_ylim(0, 10000) + + background_gradient = np.zeros((2, 2, 4)) + background_gradient[:, :, :3] = [1, 1, 0] + background_gradient[:, :, 3] = [[0.1, 0.3], [0.3, 0.5]] # alpha channel + ax.imshow(background_gradient, interpolation="bicubic", zorder=0.1, + extent=(0, 1, 0, 1), transform=ax.transAxes, aspect="auto") + + plt.show() + + +main() + +# Source: https://matplotlib.org/stable/gallery/misc/demo_ribbon_box.html#sphx-glr-gallery-misc-demo-ribbon-box-py From ac10035eb3b4c3ce4abea552e741b9ee7f0ae986 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:50:55 +0800 Subject: [PATCH 0407/2002] Committed 2021/10/03 --- .../2D and 3D Axes in same Figure.py | 40 +++++++++++ Matplotlib Official Primer/MRI With EEG.py | 71 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 Matplotlib Official Primer/2D and 3D Axes in same Figure.py create mode 100644 Matplotlib Official Primer/MRI With EEG.py diff --git a/Matplotlib Official Primer/2D and 3D Axes in same Figure.py b/Matplotlib Official Primer/2D and 3D Axes in same Figure.py new file mode 100644 index 00000000..6e64a0a9 --- /dev/null +++ b/Matplotlib Official Primer/2D and 3D Axes in same Figure.py @@ -0,0 +1,40 @@ +import matplotlib.pyplot as plt +import numpy as np + + +def f(t): + return np.cos(2*np.pi*t) * np.exp(-t) + + +# Set up a figure twice as tall as it is wide +fig = plt.figure(figsize=plt.figaspect(2.)) +fig.suptitle('A tale of 2 subplots') + +# First subplot +ax = fig.add_subplot(2, 1, 1) + +t1 = np.arange(0.0, 5.0, 0.1) +t2 = np.arange(0.0, 5.0, 0.02) +t3 = np.arange(0.0, 2.0, 0.01) + +ax.plot(t1, f(t1), 'bo', + t2, f(t2), 'k--', markerfacecolor='green') +ax.grid(True) +ax.set_ylabel('Damped oscillation') + +# Second subplot +ax = fig.add_subplot(2, 1, 2, projection='3d') + +X = np.arange(-5, 5, 0.25) +Y = np.arange(-5, 5, 0.25) +X, Y = np.meshgrid(X, Y) +R = np.sqrt(X**2 + Y**2) +Z = np.sin(R) + +surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, + linewidth=0, antialiased=False) +ax.set_zlim(-1, 1) + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/mplot3d/mixed_subplots.html#sphx-glr-gallery-mplot3d-mixed-subplots-py diff --git a/Matplotlib Official Primer/MRI With EEG.py b/Matplotlib Official Primer/MRI With EEG.py new file mode 100644 index 00000000..b0e5e1b9 --- /dev/null +++ b/Matplotlib Official Primer/MRI With EEG.py @@ -0,0 +1,71 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.cbook as cbook +import matplotlib.cm as cm + +from matplotlib.collections import LineCollection +from matplotlib.ticker import MultipleLocator + +fig = plt.figure("MRI_with_EEG") + +# Load the MRI data (256x256 16 bit integers) +with cbook.get_sample_data('s1045.ima.gz') as dfile: + im = np.frombuffer(dfile.read(), np.uint16).reshape((256, 256)) + +# Plot the MRI image +ax0 = fig.add_subplot(2, 2, 1) +ax0.imshow(im, cmap=cm.gray) +ax0.axis('off') + +# Plot the histogram of MRI intensity +ax1 = fig.add_subplot(2, 2, 2) +im = np.ravel(im) +im = im[np.nonzero(im)] # Ignore the background +im = im / (2**16 - 1) # Normalize +ax1.hist(im, bins=100) +ax1.xaxis.set_major_locator(MultipleLocator(0.4)) +ax1.minorticks_on() +ax1.set_yticks([]) +ax1.set_xlabel('Intensity (a.u.)') +ax1.set_ylabel('MRI density') + +# Load the EEG data +n_samples, n_rows = 800, 4 +with cbook.get_sample_data('eeg.dat') as eegfile: + data = np.fromfile(eegfile, dtype=float).reshape((n_samples, n_rows)) +t = 10 * np.arange(n_samples) / n_samples + +# Plot the EEG +ticklocs = [] +ax2 = fig.add_subplot(2, 1, 2) +ax2.set_xlim(0, 10) +ax2.set_xticks(np.arange(10)) +dmin = data.min() +dmax = data.max() +dr = (dmax - dmin) * 0.7 # Crowd them a bit. +y0 = dmin +y1 = (n_rows - 1) * dr + dmax +ax2.set_ylim(y0, y1) + +segs = [] +for i in range(n_rows): + segs.append(np.column_stack((t, data[:, i]))) + ticklocs.append(i * dr) + +offsets = np.zeros((n_rows, 2), dtype=float) +offsets[:, 1] = ticklocs + +lines = LineCollection(segs, offsets=offsets, transOffset=None) +ax2.add_collection(lines) + +# Set the yticks to use axes coordinates on the y axis +ax2.set_yticks(ticklocs) +ax2.set_yticklabels(['PG3', 'PG5', 'PG7', 'PG9']) + +ax2.set_xlabel('Time (s)') + + +plt.tight_layout() +plt.show() + +# Source: https://matplotlib.org/stable/gallery/specialty_plots/mri_with_eeg.html#sphx-glr-gallery-specialty-plots-mri-with-eeg-py From ecc7f57995b205a322d16bb907810a91123dcdd8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:54:22 +0800 Subject: [PATCH 0408/2002] Committed 2021/10/03 --- .../Multiple Yaxis With Spines.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Matplotlib Official Primer/Multiple Yaxis With Spines.py diff --git a/Matplotlib Official Primer/Multiple Yaxis With Spines.py b/Matplotlib Official Primer/Multiple Yaxis With Spines.py new file mode 100644 index 00000000..c149e1a7 --- /dev/null +++ b/Matplotlib Official Primer/Multiple Yaxis With Spines.py @@ -0,0 +1,42 @@ +import matplotlib.pyplot as plt + + +fig, ax = plt.subplots() +fig.subplots_adjust(right=0.75) + +twin1 = ax.twinx() +twin2 = ax.twinx() + +# Offset the right spine of twin2. The ticks and label have already been +# placed on the right by twinx above. +twin2.spines.right.set_position(("axes", 1.2)) + +p1, = ax.plot([0, 1, 2], [0, 1, 2], "b-", label="Density") +p2, = twin1.plot([0, 1, 2], [0, 3, 2], "r-", label="Temperature") +p3, = twin2.plot([0, 1, 2], [50, 30, 15], "g-", label="Velocity") + +ax.set_xlim(0, 2) +ax.set_ylim(0, 2) +twin1.set_ylim(0, 4) +twin2.set_ylim(1, 65) + +ax.set_xlabel("Distance") +ax.set_ylabel("Density") +twin1.set_ylabel("Temperature") +twin2.set_ylabel("Velocity") + +ax.yaxis.label.set_color(p1.get_color()) +twin1.yaxis.label.set_color(p2.get_color()) +twin2.yaxis.label.set_color(p3.get_color()) + +tkw = dict(size=4, width=1.5) +ax.tick_params(axis='y', colors=p1.get_color(), **tkw) +twin1.tick_params(axis='y', colors=p2.get_color(), **tkw) +twin2.tick_params(axis='y', colors=p3.get_color(), **tkw) +ax.tick_params(axis='x', **tkw) + +ax.legend(handles=[p1, p2, p3]) + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/ticks_and_spines/multiple_yaxis_with_spines.html#sphx-glr-gallery-ticks-and-spines-multiple-yaxis-with-spines-py From 1a93227a9e729883709553127fa37d7180819651 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Oct 2021 13:57:17 +0800 Subject: [PATCH 0409/2002] Committed 2021/10/03 --- .../Colorbar Tick Labelling.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Matplotlib Official Primer/Colorbar Tick Labelling.py diff --git a/Matplotlib Official Primer/Colorbar Tick Labelling.py b/Matplotlib Official Primer/Colorbar Tick Labelling.py new file mode 100644 index 00000000..97dee097 --- /dev/null +++ b/Matplotlib Official Primer/Colorbar Tick Labelling.py @@ -0,0 +1,23 @@ +import matplotlib.pyplot as plt +import numpy as np +from matplotlib import cm +from numpy.random import randn + + +# Fixing random state for reproducibility +np.random.seed(19680801) + +fig, ax = plt.subplots() + +data = np.clip(randn(250, 250), -1, 1) + +cax = ax.imshow(data, cmap=cm.coolwarm) +ax.set_title('Gaussian noise with vertical colorbar') + +# Add colorbar, make sure to specify tick locations to match desired ticklabels +cbar = fig.colorbar(cax, ticks=[-1, 0, 1]) +cbar.ax.set_yticklabels(['< -1', '0', '> 1']) # vertically oriented colorbar + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/ticks_and_spines/colorbar_tick_labelling_demo.html#sphx-glr-gallery-ticks-and-spines-colorbar-tick-labelling-demo-py From 33776307ab4fa47ecb0691e6308b517c68dc954f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 03:24:05 +0800 Subject: [PATCH 0410/2002] Committed 2021/10/08 --- .../September2021.py | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py index e69de29b..6161f2cf 100644 --- a/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py @@ -0,0 +1,123 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08", "'21/09"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + () + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +axes.set_ylim(23000000, 23700000) +axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +axes.set_xlabel("Year\n" + "References:\n" + "1. https://www.ris.gov.tw/app/portal/346 \n" + "2. https://www.macromicro.me/collections/15/\n" + "tw-housing-relative/124/tw-housing-price-sinyi") + +axes.set_ylabel("Population (Unit: 10 millions)") + +axes2 = axes.twinx() +axes2.set_ylabel("Yearly Housing Price Index (2010/4 - 2021/04) \n" + "Method: (Guotai + Xinyi) / 2", color='goldenrod') + +axes2.plot(x, housing_index, color='gold') +axes2.tick_params(axis='y', labelcolor='goldenrod') + +plt.grid(linewidth=0.3) +plt.title("Taiwan's population change from 2010 - 2021/08 \n in relation to Annual Housing Price Index") + +figure.tight_layout() + +plt.show() + +# References: +# 1. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi +# 2. From 8af6dd8625c3952b961127c9d9451a599545a14f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 15:37:51 +0800 Subject: [PATCH 0411/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year.py | 6 ++++++ .../Road safety/__init__.py | 0 2 files changed, 6 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year.py create mode 100644 The attainments and realizations of my dreams/Road safety/__init__.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year.py b/The attainments and realizations of my dreams/Road safety/Year_over_year.py new file mode 100644 index 00000000..80078c26 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year.py @@ -0,0 +1,6 @@ +import pandas as pd +import matplotlib.pyplot as plt + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + + diff --git a/The attainments and realizations of my dreams/Road safety/__init__.py b/The attainments and realizations of my dreams/Road safety/__init__.py new file mode 100644 index 00000000..e69de29b From c85c0950e7903041811101a9091465bf261f246b Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 16:08:27 +0800 Subject: [PATCH 0412/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year.py | 22 ++++ .../Road safety/Year_over_year_2021.ipynb | 100 ++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2021.ipynb diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year.py b/The attainments and realizations of my dreams/Road safety/Year_over_year.py index 80078c26..c1caae81 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year.py @@ -3,4 +3,26 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "2021/01-07"] +death = [[133, 254, 198, 318, 340, 402], + [152, 255, 227, 373, 319, 388], + [140, 264, 195, 382, 346, 373], + [130, 252, 195, 370, 288, 417], + [140, 223, 191, 308, 311, 375], + [138, 219, 221, 302, 290, 387], + [137, 212, 203, 275, 289, 364], + [157, 266, 203, 259, 269, 329], + [106, 256, 213, 217, 246, 289], + [137, 248, 244, 245, 289, 280], + [131, 225, 249, 270, 294, 351], + [102, 232, 264, 325, 317, 347], + [73, 146, 145, 178, 190, 193]] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +df.plot() + +plt.show() diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.ipynb b/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.ipynb new file mode 100644 index 00000000..225791d7 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.ipynb @@ -0,0 +1,100 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Taipei New Taipei Taoyuan Taichung Tainan Kaohsiung\n", + "2009 133 254 198 318 340 402\n", + "10 152 255 227 373 319 388\n", + "11 140 264 195 382 346 373\n", + "12 130 252 195 370 288 417\n", + "13 140 223 191 308 311 375\n", + "14 138 219 221 302 290 387\n", + "15 137 212 203 275 289 364\n", + "16 157 266 203 259 269 329\n", + "17 106 256 213 217 246 289\n", + "18 137 248 244 245 289 280\n", + "19 131 225 249 270 294 351\n", + "20 102 232 264 325 317 347\n", + "2021/01-07 73 146 145 178 190 193\n" + ] + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "

      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "administrative_duty = [\"Taipei\", \"New Taipei\", \"Taoyuan\", \"Taichung\", \"Tainan\", \"Kaohsiung\"]\n", + "\n", + "year = [\"2009\", \"10\", \"11\", \"12\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\", \"20\", \"2021/01-07\"]\n", + "\n", + "death = [[133, 254, 198, 318, 340, 402],\n", + " [152, 255, 227, 373, 319, 388],\n", + " [140, 264, 195, 382, 346, 373],\n", + " [130, 252, 195, 370, 288, 417],\n", + " [140, 223, 191, 308, 311, 375],\n", + " [138, 219, 221, 302, 290, 387],\n", + " [137, 212, 203, 275, 289, 364],\n", + " [157, 266, 203, 259, 269, 329],\n", + " [106, 256, 213, 217, 246, 289],\n", + " [137, 248, 244, 245, 289, 280],\n", + " [131, 225, 249, 270, 294, 351],\n", + " [102, 232, 264, 325, 317, 347],\n", + " [73, 146, 145, 178, 190, 193]]\n", + "\n", + "df = pd.DataFrame(data=death, columns=administrative_duty, index=year)\n", + "\n", + "print(df)\n", + "\n", + "df.plot()\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From f0344e822645c35743b2c79eb936c86a6f076897 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 16:35:39 +0800 Subject: [PATCH 0413/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year.py | 29 ++++++++++--------- .../Road safety/Year_over_year_2020.py | 29 +++++++++++++++++++ 2 files changed, 44 insertions(+), 14 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year.py b/The attainments and realizations of my dreams/Road safety/Year_over_year.py index c1caae81..8d2b471c 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year.py @@ -5,24 +5,25 @@ year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "2021/01-07"] -death = [[133, 254, 198, 318, 340, 402], - [152, 255, 227, 373, 319, 388], - [140, 264, 195, 382, 346, 373], - [130, 252, 195, 370, 288, 417], - [140, 223, 191, 308, 311, 375], - [138, 219, 221, 302, 290, 387], - [137, 212, 203, 275, 289, 364], - [157, 266, 203, 259, 269, 329], - [106, 256, 213, 217, 246, 289], - [137, 248, 244, 245, 289, 280], - [131, 225, 249, 270, 294, 351], - [102, 232, 264, 325, 317, 347], - [73, 146, 145, 178, 190, 193]] +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] df = pd.DataFrame(data=death, columns=administrative_duty, index=year) print(df) -df.plot() +df.plot(grid=True) plt.show() diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020.py new file mode 100644 index 00000000..8d2b471c --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020.py @@ -0,0 +1,29 @@ +import pandas as pd +import matplotlib.pyplot as plt + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "2021/01-07"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +df.plot(grid=True) + +plt.show() From 788abb08734254da0937f5746b5cc15947220ddd Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 17:14:55 +0800 Subject: [PATCH 0414/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020.py | 12 +++++-- .../Road safety/Year_over_year_2020_2.py | 35 +++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_2.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020.py index 8d2b471c..7e9f9865 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020.py @@ -3,7 +3,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "2021/01-07"] +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] death = [[133, 254, 198, 318, 340, 402], # 2009 [152, 255, 227, 373, 319, 388], # 2010 @@ -17,13 +17,19 @@ [137, 248, 244, 245, 289, 280], # 2018 [131, 225, 249, 270, 294, 351], # 2019 [102, 232, 264, 325, 317, 347], # 2020 - [73, 146, 145, 178, 190, 193], # 2021/01-07 +# [73, 146, 145, 178, 190, 193], # 2021/01-07 ] df = pd.DataFrame(data=death, columns=administrative_duty, index=year) print(df) -df.plot(grid=True) +df.plot(grid=True, use_index=True, figsize=(10, 8), + title="The Number of Deaths in Road Accident in Taiwan by Region") + +plt.xlabel("Year") +plt.ylabel("The number of deaths (Unit: person)") +plt.text(x=1, y=1, s="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", + style='italic', bbox={'facecolor': 'red', 'alpha': 0.8, 'pad': 10}, fontproperties="MS Gothic") plt.show() diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_2.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_2.py new file mode 100644 index 00000000..7fc80804 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_2.py @@ -0,0 +1,35 @@ +import pandas as pd +import matplotlib.pyplot as plt + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +df.plot(grid=True, use_index=True, figsize=(10, 8), + title="The Number of Deaths in Road Accident in Taiwan by Region") + +plt.xlabel("Year") +plt.ylabel("The number of deaths (Unit: person)") +plt.text(x=1, y=1, s="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", + style='italic', bbox={'facecolor': 'red', 'alpha': 0.8, 'pad': 10}, fontproperties="MS Gothic") + +plt.show() From 90a5f64dbe99da322137e792db2d045451679ddd Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 17:36:37 +0800 Subject: [PATCH 0415/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_3.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_3.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_3.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_3.py new file mode 100644 index 00000000..7fc80804 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_3.py @@ -0,0 +1,35 @@ +import pandas as pd +import matplotlib.pyplot as plt + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +df.plot(grid=True, use_index=True, figsize=(10, 8), + title="The Number of Deaths in Road Accident in Taiwan by Region") + +plt.xlabel("Year") +plt.ylabel("The number of deaths (Unit: person)") +plt.text(x=1, y=1, s="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", + style='italic', bbox={'facecolor': 'red', 'alpha': 0.8, 'pad': 10}, fontproperties="MS Gothic") + +plt.show() From 58f612138ed3100111d6ca5b393ca9eddf662379 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 17:42:46 +0800 Subject: [PATCH 0416/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_3.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_3.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_3.py index 7fc80804..6d242334 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_3.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_3.py @@ -1,6 +1,8 @@ import pandas as pd import matplotlib.pyplot as plt +pd.options.plotting.backend = "plotly" + administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] @@ -24,12 +26,6 @@ print(df) -df.plot(grid=True, use_index=True, figsize=(10, 8), - title="The Number of Deaths in Road Accident in Taiwan by Region") - -plt.xlabel("Year") -plt.ylabel("The number of deaths (Unit: person)") -plt.text(x=1, y=1, s="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", - style='italic', bbox={'facecolor': 'red', 'alpha': 0.8, 'pad': 10}, fontproperties="MS Gothic") +df.plot() plt.show() From 3b3836c48ac6519a343373fbe9502fb4438a921c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 18:14:55 +0800 Subject: [PATCH 0417/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_4.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py new file mode 100644 index 00000000..be9cbc94 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py @@ -0,0 +1,30 @@ +import pandas as pd +import matplotlib.pyplot as plt + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) From 3868b77a85d4a7bc8ff8ca85d69a7c2861703a15 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 19:01:43 +0800 Subject: [PATCH 0418/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_4.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py index be9cbc94..3226a2de 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py @@ -1,5 +1,6 @@ import pandas as pd import matplotlib.pyplot as plt +import matplotlib.colors as colour administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] @@ -28,3 +29,36 @@ df["Tainan"].sum(), df["Kaohsiung"].sum()] print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative sum"], + index=administrative_duty) + +print(cumulative_sum) + +figure, axes = plt.subplots() + +# hide axes +figure.patch.set_visible(False) +axes.axis('off') +axes.axis('tight') + +axes.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) + +figure.tight_layout() + +plt.show() From 685fe5b38b9eab7a291d4175d31141de9f3a7a72 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 19:15:57 +0800 Subject: [PATCH 0419/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_5.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_5.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_5.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_5.py new file mode 100644 index 00000000..2582fd45 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_5.py @@ -0,0 +1,66 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative sum"], + index=administrative_duty) + +print(cumulative_sum) + +figure, axes = plt.subplots(nrows=1, ncols=2) + +# hide axes +figure.patch.set_visible(False) +axes[0, 1].axis('off') +axes[0, 1].axis('tight') + +axes[0, 1].table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) + +axes[0, 0].plot(data=df) + +figure.tight_layout() + +plt.show() From 85dacda933b4f3119a9de4253388fc4b7f0f02fc Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 19:23:57 +0800 Subject: [PATCH 0420/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_5.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_5.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_5.py index 2582fd45..bee215fc 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_5.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_5.py @@ -38,8 +38,10 @@ figure, axes = plt.subplots(nrows=1, ncols=2) +axes[0, 0].plot(year, df.loc[:, "Taipei"].values(), label="Taipei") + # hide axes -figure.patch.set_visible(False) +# axes[0, 1].patch.set_visible(False) axes[0, 1].axis('off') axes[0, 1].axis('tight') @@ -59,8 +61,6 @@ loc='center', ) -axes[0, 0].plot(data=df) - figure.tight_layout() plt.show() From ae1c887f76d633851451c280399a5cf0551d44fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 19:25:11 +0800 Subject: [PATCH 0421/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_6.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py new file mode 100644 index 00000000..7e0acad2 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py @@ -0,0 +1,68 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +print(df.loc[:, "Taipei"].values()) + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative sum"], + index=administrative_duty) + +print(cumulative_sum) + +figure, axes = plt.subplots(nrows=1, ncols=2) + +axes[0, 0].plot(year, df.loc[:, "Taipei"].values(), label="Taipei") + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes[0, 1].axis('off') +axes[0, 1].axis('tight') + +axes[0, 1].table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) + +figure.tight_layout() + +plt.show() From 29d0c4300cb5ae953ed964e5eebabee2e4fb5f41 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 19:32:59 +0800 Subject: [PATCH 0422/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_6.py | 44 ++++++------ .../Road safety/Year_over_year_2020_7.py | 70 +++++++++++++++++++ 2 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_7.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py index 7e0acad2..56270bd1 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py @@ -25,7 +25,9 @@ print(df) -print(df.loc[:, "Taipei"].values()) +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), df["Tainan"].sum(), df["Kaohsiung"].sum()] @@ -38,30 +40,30 @@ print(cumulative_sum) -figure, axes = plt.subplots(nrows=1, ncols=2) +figure, (axes1, axes2) = plt.subplots(nrows=1, ncols=2) -axes[0, 0].plot(year, df.loc[:, "Taipei"].values(), label="Taipei") +axes1.plot(year, Taipei, label="Taipei") # hide axes # axes[0, 1].patch.set_visible(False) -axes[0, 1].axis('off') -axes[0, 1].axis('tight') - -axes[0, 1].table(cellText=cumulative_sum.values, - colLabels=cumulative_sum.columns, - colColours=[colour.CSS4_COLORS.get('springgreen')], - colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], - cellColours=['w', 'w', 'w', 'w', 'w', 'w'], - cellLoc='center', - rowLabels=cumulative_sum.index, - rowColours=[colour.CSS4_COLORS.get('lightskyblue'), - colour.CSS4_COLORS.get('lightskyblue'), - colour.CSS4_COLORS.get('lightskyblue'), - colour.CSS4_COLORS.get('lightskyblue'), - colour.CSS4_COLORS.get('lightskyblue'), - colour.CSS4_COLORS.get('lightskyblue')], - loc='center', - ) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) figure.tight_layout() diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_7.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_7.py new file mode 100644 index 00000000..e47db3fe --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_7.py @@ -0,0 +1,70 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative sum"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) + +figure.tight_layout() + +plt.show() From 36516c71011385596864356788757ad30f6f35ee Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 8 Oct 2021 19:35:34 +0800 Subject: [PATCH 0423/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_7.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_7.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_7.py index e47db3fe..db23c234 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_7.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_7.py @@ -43,6 +43,9 @@ figure, (axes1, axes2) = plt.subplots(2) axes1.plot(year, Taipei, label="Taipei") +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") # hide axes # axes[0, 1].patch.set_visible(False) From 999a397b531afffb35b9590b3d3a01640dfd20fc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 22:09:08 +0800 Subject: [PATCH 0424/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8.py | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8.py new file mode 100644 index 00000000..db23c234 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8.py @@ -0,0 +1,73 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative sum"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) + +figure.tight_layout() + +plt.show() From 5adbfbc362b86555067dc4b5e6d5c9cd6187b075 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 22:15:40 +0800 Subject: [PATCH 0425/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8.py index db23c234..6ba226c8 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8.py @@ -29,6 +29,12 @@ print(Taipei) +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), df["Tainan"].sum(), df["Kaohsiung"].sum()] @@ -43,6 +49,12 @@ figure, (axes1, axes2) = plt.subplots(2) axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiumg") + axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") axes1.set_xlabel("Year") axes1.set_ylabel("The number of deaths") From 09953288358a777afb51b1d1dc9cc8cd4c74f33a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 22:19:17 +0800 Subject: [PATCH 0426/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_9.py | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_9.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_9.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_9.py new file mode 100644 index 00000000..d6b80add --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_9.py @@ -0,0 +1,85 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative sum"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2, figsize=(12, 8)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiumg") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) + +figure.tight_layout() + +plt.show() From 258690c0b0b49def3b102f97f84184283a91c5b4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 22:20:46 +0800 Subject: [PATCH 0427/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_1.py | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_1.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_1.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_1.py new file mode 100644 index 00000000..6ba226c8 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_1.py @@ -0,0 +1,85 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative sum"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiumg") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) + +figure.tight_layout() + +plt.show() From e76b7305982daf6b6b9e0831dbdda90330eeebec Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 22:29:06 +0800 Subject: [PATCH 0428/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_1.py | 2 + .../Road safety/Year_over_year_2020_8_2.py | 89 +++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_2.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_1.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_1.py index 6ba226c8..ad55aa78 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_1.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_1.py @@ -59,6 +59,8 @@ axes1.set_xlabel("Year") axes1.set_ylabel("The number of deaths") +axes1.legend() + # hide axes # axes[0, 1].patch.set_visible(False) axes2.axis('off') diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_2.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_2.py new file mode 100644 index 00000000..82790477 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_2.py @@ -0,0 +1,89 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative sum"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiumg") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) + +figure.tight_layout() + +plt.show() From 887b7685683cfa1b88f6ebb5cd6d7d1982898f29 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 22:32:40 +0800 Subject: [PATCH 0429/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_3.py | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_3.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_3.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_3.py new file mode 100644 index 00000000..ac8ab5a5 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_3.py @@ -0,0 +1,89 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiumg") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + ) + +figure.tight_layout() + +plt.show() From 88a39843b33764c553cd858d6b270a9228317657 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 22:35:34 +0800 Subject: [PATCH 0430/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_4.py | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_4.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_4.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_4.py new file mode 100644 index 00000000..f04c5370 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_4.py @@ -0,0 +1,90 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiumg") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖"' + ) + +figure.tight_layout() + +plt.show() From c7449e25ed2a3e7c95d7a2e9e3329aa0687ce282 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 22:43:55 +0800 Subject: [PATCH 0431/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_5.py | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_5.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_5.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_5.py new file mode 100644 index 00000000..de2d26e9 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_5.py @@ -0,0 +1,97 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖"' + ) + + +def label(xy, text): + y = xy[1] - 0.15 # shift y-value for label so that it's below the artist + plt.text(xy[0], y, text, ha="center", family='sans-serif', size=14) + + + +figure.tight_layout() + +plt.show() From b83536c7b31ddb5446954e0a99ec110d2ab8eda8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 23:11:05 +0800 Subject: [PATCH 0432/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_5.py | 15 ++- .../Road safety/Year_over_year_2020_8_6.py | 107 ++++++++++++++++++ 2 files changed, 118 insertions(+), 4 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_5.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_5.py index de2d26e9..5b33b329 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_5.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_5.py @@ -46,7 +46,7 @@ print(cumulative_sum) -figure, (axes1, axes2, axes3) = plt.subplots(3) +figure, (axes1, axes2) = plt.subplots(2) axes1.plot(year, Taipei, label="Taipei") axes1.plot(year, New_Taipei, label="New Taipei") @@ -82,16 +82,23 @@ colour.CSS4_COLORS.get('lightskyblue'), colour.CSS4_COLORS.get('lightskyblue')], loc='center', - url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖"' + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' ) def label(xy, text): - y = xy[1] - 0.15 # shift y-value for label so that it's below the artist + y = xy[1] - 0.15 # shift y-value for label so that it's below the artist.[1] plt.text(xy[0], y, text, ha="center", family='sans-serif', size=14) - figure.tight_layout() +font = {'family': 'DejaVu Sans', 'name': 'MS Gothic', 'style': 'italic', + 'color': 'orange', 'weight': 'bold', 'size': 12} + +plt.text(x=3, y=1, s="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", fontdict=font) + plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/shapes_and_collections/artist_reference.html#sphx-glr-gallery-shapes-and-collections-artist-reference-py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py new file mode 100644 index 00000000..a853d3ef --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py @@ -0,0 +1,107 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + + +def label(xy, text): + y = xy[1] - 0.15 # shift y-value for label so that it's below the artist.[1] + plt.text(xy[0], y, text, ha="center", family='sans-serif', size=14) + + +figure.tight_layout() + +font = {'family': 'DejaVu Sans', 'name': 'MS Gothic', 'style': 'italic', + 'color': 'orange', 'weight': 'bold', 'size': 12} + +plt.text(x=3, y=1, s="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", fontdict=font) + +plt.annotate(text="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", + xycoords='figure fraction', xy=(2.5, 2.5), textcoords='offset points', xytext=(2.5, 2.5)) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/shapes_and_collections/artist_reference.html#sphx-glr-gallery-shapes-and-collections-artist-reference-py From 7267b6a087d7bea8f151a9d3475d0ef89e1adfd2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Oct 2021 23:13:53 +0800 Subject: [PATCH 0433/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_6.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py index a853d3ef..3cd58d50 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py @@ -99,7 +99,8 @@ def label(xy, text): plt.text(x=3, y=1, s="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", fontdict=font) plt.annotate(text="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", - xycoords='figure fraction', xy=(2.5, 2.5), textcoords='offset points', xytext=(2.5, 2.5)) + xycoords='figure fraction', xy=(25, 2.5), textcoords='offset points', xytext=(2.5, 2.5), + fontproperties='MS Gothic') plt.show() From 6405c6ab0d656778c775313b2aa55d9eed4498f5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 00:25:52 +0800 Subject: [PATCH 0434/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_6.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py index 3cd58d50..b610350c 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_6.py @@ -93,13 +93,16 @@ def label(xy, text): figure.tight_layout() -font = {'family': 'DejaVu Sans', 'name': 'MS Gothic', 'style': 'italic', - 'color': 'orange', 'weight': 'bold', 'size': 12} +# font = {'family': 'DejaVu Sans', 'name': 'MS Gothic', 'style': 'italic', +# 'color': 'orange', 'weight': 'bold', 'size': 12} -plt.text(x=3, y=1, s="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", fontdict=font) +# plt.text(x=3, y=1, s="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", fontdict=font) plt.annotate(text="Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖", - xycoords='figure fraction', xy=(25, 2.5), textcoords='offset points', xytext=(2.5, 2.5), + textcoords='offset points', + xytext=(0.5, 0.1), + xy=(0.5, 0.1), + fontproperties='MS Gothic') plt.show() From aa9aad027a0b9ebc73ab00d6ebf004ef641d659b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 00:39:15 +0800 Subject: [PATCH 0435/2002] Committed 2021/10/08 --- .../Pyplot tutorial/colours.py | 27 +++++++++++++++++++ .../Road safety/Year_over_year_2020_4.py | 16 ++++++++--- 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 Matplotlib Official Primer/Pyplot tutorial/colours.py diff --git a/Matplotlib Official Primer/Pyplot tutorial/colours.py b/Matplotlib Official Primer/Pyplot tutorial/colours.py new file mode 100644 index 00000000..0e0f3b28 --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/colours.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt +import numpy as np + +t = np.linspace(0.0, 2.0, 201) +s = np.sin(2 * np.pi * t) + +# 1) RGB tuple: +fig, ax = plt.subplots(facecolor=(.18, .31, .31)) +# 2) hex string: +ax.set_facecolor('#eafff5') +# 3) gray level string: +ax.set_title('Voltage vs. time chart', color='0.7') +# 4) single letter color string +ax.set_xlabel('time (s)', color='c') +# 5) a named color: +ax.set_ylabel('voltage (mV)', color='peachpuff') +# 6) a named xkcd color: +ax.plot(t, s, 'xkcd:crimson') +# 7) Cn notation: +ax.plot(t, .7*s, color='C4', linestyle='--') +# 8) tab notation: +ax.tick_params(labelcolor='tab:orange') + + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/color/color_demo.html diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py index 3226a2de..e2416147 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_4.py @@ -38,19 +38,20 @@ figure, axes = plt.subplots() -# hide axes +# hide axes [1] figure.patch.set_visible(False) axes.axis('off') axes.axis('tight') +# Plot a table using matplotlib.[2] axes.table(cellText=cumulative_sum.values, colLabels=cumulative_sum.columns, colColours=[colour.CSS4_COLORS.get('springgreen')], - colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], # colwidths matplotlib [3][4] cellColours=['w', 'w', 'w', 'w', 'w', 'w'], cellLoc='center', rowLabels=cumulative_sum.index, - rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), #[5][6][7] colour.CSS4_COLORS.get('lightskyblue'), colour.CSS4_COLORS.get('lightskyblue'), colour.CSS4_COLORS.get('lightskyblue'), @@ -62,3 +63,12 @@ figure.tight_layout() plt.show() + +# References: +# 1. https://stackoverflow.com/a/45936469 +# 2. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.table.html +# 3. https://stackoverflow.com/a/46977181 +# 4. https://stackoverflow.com/a/15514091 +# 5. https://matplotlib.org/stable/gallery/color/named_colors.html +# 6. https://stackoverflow.com/a/46664216 +# 7. https://matplotlib.org/stable/gallery/color/color_demo.html From 7768ac828a99dfa3c35383925c842147cb8960d9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 00:43:31 +0800 Subject: [PATCH 0436/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_6.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py index 56270bd1..90bb45f3 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_6.py @@ -40,7 +40,7 @@ print(cumulative_sum) -figure, (axes1, axes2) = plt.subplots(nrows=1, ncols=2) +figure, (axes1, axes2) = plt.subplots(nrows=1, ncols=2) # matplotlib subplot [1] axes1.plot(year, Taipei, label="Taipei") @@ -68,3 +68,7 @@ figure.tight_layout() plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/subplots_demo.html + From e512c17b0866ac8a1a62e722dc09a2160032ec3e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 00:55:38 +0800 Subject: [PATCH 0437/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_7.py | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_7.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_7.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_7.py new file mode 100644 index 00000000..003dbd39 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_7.py @@ -0,0 +1,99 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + + +figure.tight_layout() + +text = figure.text(0.5, 0.02, + 'Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=8, + fontproperties='MS Gothic') + +plt.show() From a2bfb5647dc1ec675f7dd359d57c38021bff35d9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 00:58:04 +0800 Subject: [PATCH 0438/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_7.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_7.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_7.py index 003dbd39..e67fc81a 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_7.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_7.py @@ -89,11 +89,19 @@ figure.tight_layout() +# matplotlib text [1][2] text = figure.text(0.5, 0.02, - 'Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', horizontalalignment='center', verticalalignment='center', size=8, fontproperties='MS Gothic') +text.set_path_effects([path_effects.Normal()]) + plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py + From 71dd925274bfec0477d047f1136be5df69742ac9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 01:00:24 +0800 Subject: [PATCH 0439/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_8.py | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_8.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_8.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_8.py new file mode 100644 index 00000000..e67fc81a --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_8.py @@ -0,0 +1,107 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.02, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=8, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py + From 3f436ecdaa961b7b2ec0f9f8bc7ad9bd67f94950 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 01:11:12 +0800 Subject: [PATCH 0440/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_8.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_8.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_8.py index e67fc81a..b26141b3 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_8.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_8.py @@ -94,7 +94,7 @@ 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', horizontalalignment='center', verticalalignment='center', - size=8, + size=13, fontproperties='MS Gothic') text.set_path_effects([path_effects.Normal()]) From c37308e969dd3f8e414de0bbda7baa8f1fda0757 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 01:12:21 +0800 Subject: [PATCH 0441/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_9.py | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_9.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_9.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_9.py new file mode 100644 index 00000000..6862ef67 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_9.py @@ -0,0 +1,105 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Cumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.02, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py From 0159e6aed77004c68a9c571cea9233df8662262a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 01:21:24 +0800 Subject: [PATCH 0442/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_10.py | 110 ++++++++++++++++++ .../Road safety/Year_over_year_2020_8_9.py | 7 +- 2 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_10.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_10.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_10.py new file mode 100644 index 00000000..cd26d0a9 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_10.py @@ -0,0 +1,110 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [2] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +table.scale(2, 2.2) # [2] +table.set_fontsize(14) # [2] + + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.02, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_9.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_9.py index 6862ef67..e8fce739 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_9.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_9.py @@ -69,7 +69,7 @@ axes2.axis('off') axes2.axis('tight') -table = axes2.table(cellText=cumulative_sum.values, +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [2] colLabels=cumulative_sum.columns, colColours=[colour.CSS4_COLORS.get('springgreen')], colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], @@ -86,6 +86,10 @@ url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' ) +table.scale(2, 2.2) # [2] +table.set_fontsize(14) # [2] + + figure.tight_layout() # matplotlib text [1][2] @@ -103,3 +107,4 @@ # References: # 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html # 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ From 87fad1249a7c38beae3a47e9f6cbb4996e026832 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 01:31:48 +0800 Subject: [PATCH 0443/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_11.py | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_11.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_11.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_11.py new file mode 100644 index 00000000..6fd96f91 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_11.py @@ -0,0 +1,112 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +axes1.legend() + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.4, 2.2) # [3] +table.set_fontsize(14) # [3] + + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.02, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale From 06d951166692806cc4b71126ae787fe5a312c342 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 01:42:28 +0800 Subject: [PATCH 0444/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_12.py | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_12.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_12.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_12.py new file mode 100644 index 00000000..e5e412a5 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_12.py @@ -0,0 +1,115 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend(bbox_to_anchor=(1, 1, 2, 4)) # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.4, 2.2) # [3] +table.set_fontsize(14) # [3] + + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.02, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From 04d7b20e29643165dc2223307064a1b1349f2dd2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 01:48:48 +0800 Subject: [PATCH 0445/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_12.py | 3 +- .../Road safety/Year_over_year_2020_8_13.py | 112 ++++++++++++++++++ 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_13.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_12.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_12.py index e5e412a5..ca1f19b3 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_12.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_12.py @@ -92,7 +92,7 @@ table.set_fontsize(14) # [3] -figure.tight_layout() +figure.tight_layout() # [7] # matplotlib text [1][2] text = figure.text(0.5, 0.02, @@ -113,3 +113,4 @@ # 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale # 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py # 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/tutorials/intermediate/tight_layout_guide.html diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_13.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_13.py new file mode 100644 index 00000000..6190b7c6 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_13.py @@ -0,0 +1,112 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend(bbox_to_anchor=(1, 1, 2, 4)) # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2, 1.6) # [3] +table.set_fontsize(14) # [3] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.02, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From d596e7fbd274669d58f58f08421f5fe8fd14fd77 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 01:56:18 +0800 Subject: [PATCH 0446/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_13.py | 2 +- .../Road safety/Year_over_year_2020_8_14.py | 112 ++++++++++++++++++ 2 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_14.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_13.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_13.py index 6190b7c6..22d1ccdb 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_13.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_13.py @@ -88,7 +88,7 @@ ) # Scale column widths by xscale and row heights by yscale.[4] -table.scale(2, 1.6) # [3] +table.scale(2.01, 1.57) # [3] table.set_fontsize(14) # [3] # matplotlib text [1][2] diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_14.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_14.py new file mode 100644 index 00000000..dba52db3 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_14.py @@ -0,0 +1,112 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend(bbox_to_anchor=(0.1, 0.1, 2, 4)) # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.02, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From 1c3b365c8d099cf732f8c8ceb10c73a2edae900e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 01:57:37 +0800 Subject: [PATCH 0447/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_15.py | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_15.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_15.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_15.py new file mode 100644 index 00000000..3c0343ed --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_15.py @@ -0,0 +1,112 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.02, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From c1df470a7e5cf9b558002822e066aa1bf851921f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 02:01:49 +0800 Subject: [PATCH 0448/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_8_16.py | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_16.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_16.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_16.py new file mode 100644 index 00000000..27e8604d --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_8_16.py @@ -0,0 +1,112 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From 1a5fc8da5c72c13c03f69eef6cff244f80eb389e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 9 Oct 2021 05:44:13 +0800 Subject: [PATCH 0449/2002] Committed 2021/10/08 --- .../September2021_3.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_3.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_3.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_3.py new file mode 100644 index 00000000..a619c21a --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_3.py @@ -0,0 +1,29 @@ +import matplotlib.pyplot as plt +import seaborn as sns + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [85928, 50512, 37109, 29894, 48837, 22775, 27978] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/09 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(10000, 90000) + +sns.displot() + +plt.show() From f27f0f46315f84d0dec0b6ac4c905e3d4fc658d7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 14:58:59 +0800 Subject: [PATCH 0450/2002] Committed 2021/10/08 --- .../Road safety/Year_over_year_2020_10.py | 117 ++++++++++++++++++ .../Road safety/Year_over_year_2020_11.py | 117 ++++++++++++++++++ 2 files changed, 234 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_10.py create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_11.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_10.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_10.py new file mode 100644 index 00000000..8518036d --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_10.py @@ -0,0 +1,117 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import seaborn as sns + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + + +sns.displot(data=cumulative_sum, kde=True) + + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_11.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_11.py new file mode 100644 index 00000000..e8e5239e --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_11.py @@ -0,0 +1,117 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import seaborn as sns + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + + +sns.displot(data=cumulative_sum.transpose(), kde=True) + + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From 72cf87bcf8cdb549a7ed65d355262da1b9e96ee6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 15:00:55 +0800 Subject: [PATCH 0451/2002] Committed 2021/10/09 --- .../Road safety/Year_over_year_2020_12.py | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_12.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_12.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_12.py new file mode 100644 index 00000000..7e92eab6 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_12.py @@ -0,0 +1,113 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import seaborn as sns + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2) = plt.subplots(2) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From e10b4b352dcef0c95a33fc12850882975862c501 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 15:05:51 +0800 Subject: [PATCH 0452/2002] Committed 2021/10/09 --- .../Road safety/Year_over_year_2020_12.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_12.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_12.py index 7e92eab6..0bc7b640 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_12.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_12.py @@ -48,7 +48,7 @@ print(cumulative_sum) -figure, (axes1, axes2) = plt.subplots(2) +figure, (axes1, axes2, axes3) = plt.subplots(3) axes1.plot(year, Taipei, label="Taipei") axes1.plot(year, New_Taipei, label="New Taipei") @@ -92,6 +92,8 @@ table.scale(2.01, 1.57) # [3] table.set_fontsize(14) # [3] +axes3 = cumulative_sum.plot.kde() + # matplotlib text [1][2] text = figure.text(0.5, 0.04, 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', From 3ac0eb5586463be1967b7a91c28594e2c0ab7003 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 15:11:28 +0800 Subject: [PATCH 0453/2002] Committed 2021/10/09 --- .../Road safety/Year_over_year_2020_13.py | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_13.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_13.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_13.py new file mode 100644 index 00000000..dd60a48b --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_13.py @@ -0,0 +1,118 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import seaborn as sns + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +cumulative_sum_series = pd.Series(data=summary, index=administrative_duty) +print(cumulative_sum_series) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(10, 8)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3 = cumulative_sum_series.plot.kde() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From 5cf59337e2bda8b7d5cd6f091c180d6d31dd6eaf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 15:14:32 +0800 Subject: [PATCH 0454/2002] Committed 2021/10/09 --- .../Road safety/Year_over_year_2020_14.py | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_14.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_14.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_14.py new file mode 100644 index 00000000..c0d03dee --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_14.py @@ -0,0 +1,120 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import seaborn as sns + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +cumulative_sum_series = pd.Series(data=summary, index=administrative_duty) +print(cumulative_sum_series) + +figure, (axes1, axes2, axes3, axes4) = plt.subplots(4, figsize=(10, 10)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3 = cumulative_sum_series.plot.kde() + +axes4 = sns.histplot(data=cumulative_sum_series, kde=True) + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From 6fe1fde3858fa1803f1208bcfa9f4ca49efa59c5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 15:17:02 +0800 Subject: [PATCH 0455/2002] Committed 2021/10/09 --- .../Road safety/Year_over_year_2020_15.py | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_15.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_15.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_15.py new file mode 100644 index 00000000..05dc51a2 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_15.py @@ -0,0 +1,120 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import seaborn as sns + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +cumulative_sum_series = pd.Series(data=summary, index=administrative_duty) +print(cumulative_sum_series) + +figure, (axes1, axes2, axes3, axes4) = plt.subplots(4, figsize=(10, 10)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3 = cumulative_sum_series.transpose().plot.kde() + +axes4 = sns.histplot(data=cumulative_sum_series.transpose(), kde=True) + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From 231a2d914c68c2dd93f6b2de0a544cd599597b00 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 15:31:17 +0800 Subject: [PATCH 0456/2002] Committed 2021/10/09 --- ...grams to plot a cumulative distribution.py | 38 ++++++ .../Road safety/Year_over_year_2020_16.py | 114 ++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 Matplotlib Official Primer/Pyplot tutorial/Using histograms to plot a cumulative distribution.py create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_16.py diff --git a/Matplotlib Official Primer/Pyplot tutorial/Using histograms to plot a cumulative distribution.py b/Matplotlib Official Primer/Pyplot tutorial/Using histograms to plot a cumulative distribution.py new file mode 100644 index 00000000..c6916831 --- /dev/null +++ b/Matplotlib Official Primer/Pyplot tutorial/Using histograms to plot a cumulative distribution.py @@ -0,0 +1,38 @@ +import numpy as np +import matplotlib.pyplot as plt + +np.random.seed(19680801) + +mu = 200 +sigma = 25 +n_bins = 50 +x = np.random.normal(mu, sigma, size=100) + +fig, ax = plt.subplots(figsize=(8, 4)) + +# plot the cumulative histogram +n, bins, patches = ax.hist(x, n_bins, density=True, histtype='step', + cumulative=True, label='Empirical') + +# Add a line showing the expected distribution. +y = ((1 / (np.sqrt(2 * np.pi) * sigma)) * + np.exp(-0.5 * (1 / sigma * (bins - mu))**2)) +y = y.cumsum() +y /= y[-1] + +ax.plot(bins, y, 'k--', linewidth=1.5, label='Theoretical') + +# Overlay a reversed cumulative histogram. +ax.hist(x, bins=bins, density=True, histtype='step', cumulative=-1, + label='Reversed emp.') + +# tidy up the figure +ax.grid(True) +ax.legend(loc='right') +ax.set_title('Cumulative step histograms') +ax.set_xlabel('Annual rainfall (mm)') +ax.set_ylabel('Likelihood of occurrence') + +plt.show() + +# Source: https://matplotlib.org/stable/gallery/statistics/histogram_cumulative.html diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_16.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_16.py new file mode 100644 index 00000000..e105bb22 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_16.py @@ -0,0 +1,114 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(10, 8)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3. + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend From bb381bb744e451308746a8718166c3fe23b1a327 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 15:49:25 +0800 Subject: [PATCH 0457/2002] Committed 2021/10/09 --- .../Road safety/Year_over_year_2020_16.py | 5 +- .../Road safety/Year_over_year_2020_17.py | 119 ++++++++++++++++++ 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_17.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_16.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_16.py index e105bb22..e676377f 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_16.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_16.py @@ -91,7 +91,8 @@ table.scale(2.01, 1.57) # [3] table.set_fontsize(14) # [3] -axes3. +axes3.bar(administrative_duty, summary) # Create a bar chart. [7] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] # matplotlib text [1][2] text = figure.text(0.5, 0.04, @@ -112,3 +113,5 @@ # 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale # 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py # 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_17.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_17.py new file mode 100644 index 00000000..ed44b0df --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_17.py @@ -0,0 +1,119 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(10, 8)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary) # Create a bar chart. [7] +axes3.bar_label(axes3.containers[0], label_type='edge') # Add a bar label. [9] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ From 9ac052a8e70ea6545a034f5dbae9b443cb9ca9d0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 16:03:28 +0800 Subject: [PATCH 0458/2002] Committed 2021/10/09 --- .../Road safety/Month_over_month_2021/July2021.py | 7 +++++++ .../Road safety/Month_over_month_2021/__init__.py | 0 2 files changed, 7 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/__init__.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py new file mode 100644 index 00000000..98bd300a --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py @@ -0,0 +1,7 @@ +import matplotlib.pyplot as plt + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + + diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/__init__.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/__init__.py new file mode 100644 index 00000000..e69de29b From d0d630f6e560f7dba8357bbea97e139ef50680e8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 16:29:31 +0800 Subject: [PATCH 0459/2002] Committed 2021/10/09 --- .../Month_over_month_2021/July2021.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py index 98bd300a..ee8c2037 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py @@ -1,7 +1,37 @@ import matplotlib.pyplot as plt +import pandas as pd administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] +deaths = [[14, 30, 18, 28, 31, 31], # Jan + [23, 55, 38, 46, 62, 70], # Feb + [36, 70, 56, 82, 83, 98], # Mar + [47, 85, 77, 106, 106, 123], # Apr + [57, 106, 99, 128, 147, 153], # May + [66, 123, 123, 151, 172, 177], # Jun + [73, 146, 145, 178, 190, 173], # Jul + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +figure, axes = plt.subplots() + +axes.plot(month_as_of_now, df.loc[:, "Taipei"].to_numpy(), label="Taipei") +axes.plot(month_as_of_now, df.loc[:, "New Taipei"].to_numpy(), label="New Taipei") +axes.plot(month_as_of_now, df.loc[:, "Taoyuan"].to_numpy(), label="Taoyuan") +axes.plot(month_as_of_now, df.loc[:, "Taichung"].to_numpy(), label="Taichung") +axes.plot(month_as_of_now, df.loc[:, "Tainan"].to_numpy(), label="Tainan") +axes.plot(month_as_of_now, df.loc[:, "Kaohsiung"].to_numpy(), label="Kaohsiung") + +axes.legend() + +axes.grid(True) + +plt.show() From 32e8097ca5978a725d8764e00cf91559d35ef406 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 16:40:07 +0800 Subject: [PATCH 0460/2002] Committed 2021/10/09 --- .../Road safety/Month_over_month_2021/July2021.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py index ee8c2037..ded6906b 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021.py @@ -13,7 +13,7 @@ [47, 85, 77, 106, 106, 123], # Apr [57, 106, 99, 128, 147, 153], # May [66, 123, 123, 151, 172, 177], # Jun - [73, 146, 145, 178, 190, 173], # Jul + [73, 146, 145, 178, 190, 193], # Jul ] df = pd.DataFrame(data=deaths, @@ -30,8 +30,14 @@ axes.plot(month_as_of_now, df.loc[:, "Tainan"].to_numpy(), label="Tainan") axes.plot(month_as_of_now, df.loc[:, "Kaohsiung"].to_numpy(), label="Kaohsiung") +axes.set_title("The Cumulative Number of Deaths in Road Accident in Taiwan by Region (2021/01-07)") + axes.legend() axes.grid(True) +axes.set_ylabel("The number of deaths") + +axes.set_xlabel("Months in 2021") + plt.show() From 98daa974ce382984a72137171e2f79fbd7e2b060 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 16:42:17 +0800 Subject: [PATCH 0461/2002] Committed 2021/10/09 --- .../July2021_bar_table.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py new file mode 100644 index 00000000..ded6906b --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py @@ -0,0 +1,43 @@ +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # Jan + [23, 55, 38, 46, 62, 70], # Feb + [36, 70, 56, 82, 83, 98], # Mar + [47, 85, 77, 106, 106, 123], # Apr + [57, 106, 99, 128, 147, 153], # May + [66, 123, 123, 151, 172, 177], # Jun + [73, 146, 145, 178, 190, 193], # Jul + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +figure, axes = plt.subplots() + +axes.plot(month_as_of_now, df.loc[:, "Taipei"].to_numpy(), label="Taipei") +axes.plot(month_as_of_now, df.loc[:, "New Taipei"].to_numpy(), label="New Taipei") +axes.plot(month_as_of_now, df.loc[:, "Taoyuan"].to_numpy(), label="Taoyuan") +axes.plot(month_as_of_now, df.loc[:, "Taichung"].to_numpy(), label="Taichung") +axes.plot(month_as_of_now, df.loc[:, "Tainan"].to_numpy(), label="Tainan") +axes.plot(month_as_of_now, df.loc[:, "Kaohsiung"].to_numpy(), label="Kaohsiung") + +axes.set_title("The Cumulative Number of Deaths in Road Accident in Taiwan by Region (2021/01-07)") + +axes.legend() + +axes.grid(True) + +axes.set_ylabel("The number of deaths") + +axes.set_xlabel("Months in 2021") + +plt.show() From f7b4de8c9cbe09cfe0da34f156afe71823e50ede Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 16:56:02 +0800 Subject: [PATCH 0462/2002] Committed 2021/10/09 --- .../July2021_bar_table.py | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py index ded6906b..a3a11466 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py @@ -1,5 +1,6 @@ import matplotlib.pyplot as plt import pandas as pd +import numpy as np administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] @@ -21,23 +22,17 @@ columns=administrative_duty) print(df) -figure, axes = plt.subplots() +# Get some pastel shades for the colors +colors = plt.colormaps().BuPu(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) -axes.plot(month_as_of_now, df.loc[:, "Taipei"].to_numpy(), label="Taipei") -axes.plot(month_as_of_now, df.loc[:, "New Taipei"].to_numpy(), label="New Taipei") -axes.plot(month_as_of_now, df.loc[:, "Taoyuan"].to_numpy(), label="Taoyuan") -axes.plot(month_as_of_now, df.loc[:, "Taichung"].to_numpy(), label="Taichung") -axes.plot(month_as_of_now, df.loc[:, "Tainan"].to_numpy(), label="Tainan") -axes.plot(month_as_of_now, df.loc[:, "Kaohsiung"].to_numpy(), label="Kaohsiung") +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 -axes.set_title("The Cumulative Number of Deaths in Road Accident in Taiwan by Region (2021/01-07)") +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) -axes.legend() - -axes.grid(True) - -axes.set_ylabel("The number of deaths") - -axes.set_xlabel("Months in 2021") +# Plot bars and create text labels for the table +cell_text = [] plt.show() From 29f895a601e9a4476d31e6a339d0e6cdca5be5a1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 17:21:27 +0800 Subject: [PATCH 0463/2002] Committed 2021/10/09 --- .../July2021_bar_table.py | 31 ++++++++- .../July2021_bar_table_2.py | 68 +++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_2.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py index a3a11466..c3dd4310 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table.py @@ -23,7 +23,7 @@ print(df) # Get some pastel shades for the colors -colors = plt.colormaps().BuPu(np.linspace(0, 0.5, len(month_as_of_now))) +colors = plt.cm.BuPu.BuPu(np.linspace(0, 0.5, len(month_as_of_now))) n_rows = len(deaths) index = np.arange(len(administrative_duty)) + 0.3 @@ -34,5 +34,34 @@ # Plot bars and create text labels for the table cell_text = [] +for row in range(n_rows): + plt.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Reverse colors and text labels to display the last value at the top. +colors = colors[::-1] +cell_text.reverse() + +# Add a table at the bottom of the axes +the_table = plt.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +plt.ylabel("The number of deaths") +plt.xticks([]) +plt.title("The Cumulative Number of Deaths in Road Accident in Taiwan by Region (2021/01-07)") + +plt.grid(True) # pyplot.grid [1][2] plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_2.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_2.py new file mode 100644 index 00000000..e9f3253b --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_2.py @@ -0,0 +1,68 @@ +import matplotlib.pyplot as plt +import pandas as pd +import numpy as np +import matplotlib.cm as cm + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # Jan + [23, 55, 38, 46, 62, 70], # Feb + [36, 70, 56, 82, 83, 98], # Mar + [47, 85, 77, 106, 106, 123], # Apr + [57, 106, 99, 128, 147, 153], # May + [66, 123, 123, 151, 172, 177], # Jun + [73, 146, 145, 178, 190, 193], # Jul + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors +colors = plt.cm.BuPu.BuPu(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plt.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Reverse colors and text labels to display the last value at the top. +colors = colors[::-1] +cell_text.reverse() + +# Add a table at the bottom of the axes +the_table = plt.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +plt.ylabel("The number of deaths") +plt.xticks([]) +plt.title("The Cumulative Number of Deaths in Road Accident in Taiwan by Region (2021/01-07)") + +plt.grid(True) # pyplot.grid [1][2] + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py From c253e8b89d4b6ca02c695f809ff9f18c2d92ce37 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 17:34:42 +0800 Subject: [PATCH 0464/2002] Committed 2021/10/09 --- .../July2021_bar_table_2.py | 8 +- .../July2021_bar_table_3.py | 82 +++++++++++++++++++ 2 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_2.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_2.py index e9f3253b..88183d8c 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_2.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_2.py @@ -24,7 +24,8 @@ print(df) # Get some pastel shades for the colors -colors = plt.cm.BuPu.BuPu(np.linspace(0, 0.5, len(month_as_of_now))) +cmap = cm.get_cmap("Spectral") # [3] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) n_rows = len(deaths) index = np.arange(len(administrative_duty)) + 0.3 @@ -57,12 +58,15 @@ plt.ylabel("The number of deaths") plt.xticks([]) -plt.title("The Cumulative Number of Deaths in Road Accident in Taiwan by Region (2021/01-07)") +plt.title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") plt.grid(True) # pyplot.grid [1][2] +plt.tight_layout() + plt.show() # References: # 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html # 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py new file mode 100644 index 00000000..96cf5889 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py @@ -0,0 +1,82 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # Jan + [23, 55, 38, 46, 62, 70], # Feb + [36, 70, 56, 82, 83, 98], # Mar + [47, 85, 77, 106, 106, 123], # Apr + [57, 106, 99, 128, 147, 153], # May + [66, 123, 123, 151, 172, 177], # Jun + [73, 146, 145, 178, 190, 193], # Jul + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors +cmap = cm.get_cmap("Spectral") # [3] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plt.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + +# Reverse colors and text labels to display the last value at the top. +colors = colors[::-1] +cell_text.reverse() + +# Add a table at the bottom of the axes +the_table = plt.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +plt.ylabel("The number of deaths") +plt.xticks([]) +plt.title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +plt.grid(True) # pyplot.grid [1][2] + +plt.tight_layout() + +# matplotlib text [1][2] +text = plt.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 From 20a86588179569fdae9452d0c4594bb7e28255ac Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 17:46:55 +0800 Subject: [PATCH 0465/2002] Committed 2021/10/09 --- .../Road safety/Month_over_month_2021/July2021_bar_table_3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py index 96cf5889..fa03c054 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py @@ -65,7 +65,7 @@ plt.tight_layout() # matplotlib text [1][2] -text = plt.text(0.5, 0.04, +text = plt.text(0.9, 0.01, 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', horizontalalignment='center', verticalalignment='center', From b3b85f7ce58247e54c02eb97bbcb2e2a6068283b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 17:54:35 +0800 Subject: [PATCH 0466/2002] Committed 2021/10/09 --- .../July2021_bar_table_3.py | 2 +- .../July2021_bar_table_4.py | 82 +++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_4.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py index fa03c054..9fc91d36 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_3.py @@ -65,7 +65,7 @@ plt.tight_layout() # matplotlib text [1][2] -text = plt.text(0.9, 0.01, +text = plt.text(2.4, 3.9, 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', horizontalalignment='center', verticalalignment='center', diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_4.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_4.py new file mode 100644 index 00000000..9fc91d36 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_4.py @@ -0,0 +1,82 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # Jan + [23, 55, 38, 46, 62, 70], # Feb + [36, 70, 56, 82, 83, 98], # Mar + [47, 85, 77, 106, 106, 123], # Apr + [57, 106, 99, 128, 147, 153], # May + [66, 123, 123, 151, 172, 177], # Jun + [73, 146, 145, 178, 190, 193], # Jul + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors +cmap = cm.get_cmap("Spectral") # [3] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plt.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + +# Reverse colors and text labels to display the last value at the top. +colors = colors[::-1] +cell_text.reverse() + +# Add a table at the bottom of the axes +the_table = plt.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +plt.ylabel("The number of deaths") +plt.xticks([]) +plt.title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +plt.grid(True) # pyplot.grid [1][2] + +plt.tight_layout() + +# matplotlib text [1][2] +text = plt.text(2.4, 3.9, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 From 7d2fa48e5e6061b633414df95b1520d524a46f4a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 18:00:25 +0800 Subject: [PATCH 0467/2002] Committed 2021/10/09 --- .../July2021_bar_table_4.py | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_4.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_4.py index 9fc91d36..d83e1b75 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_4.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_4.py @@ -32,13 +32,15 @@ index = np.arange(len(administrative_duty)) + 0.3 bar_width = 0.4 +figure, axes = plt.subplots() + # Initialize the vertical-offset for the stacked bar chart. y_offset = np.zeros(len(administrative_duty)) # Plot bars and create text labels for the table cell_text = [] for row in range(n_rows): - plt.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) y_offset = y_offset + deaths[row] cell_text.append([x for x in y_offset]) @@ -47,30 +49,30 @@ cell_text.reverse() # Add a table at the bottom of the axes -the_table = plt.table(cellText=cell_text, - rowLabels=month_as_of_now, - rowColours=colors, - colLabels=administrative_duty, - loc='bottom') +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') # Adjust layout to make room for the table: plt.subplots_adjust(left=0.2, bottom=0.2) -plt.ylabel("The number of deaths") -plt.xticks([]) -plt.title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") -plt.grid(True) # pyplot.grid [1][2] +axes.grid(True) # pyplot.grid [1][2] -plt.tight_layout() +figure.tight_layout() # matplotlib text [1][2] -text = plt.text(2.4, 3.9, - 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', - horizontalalignment='center', - verticalalignment='center', - size=13, - fontproperties='MS Gothic') +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') text.set_path_effects([path_effects.Normal()]) From f1ab773a4ffbf2dc8e589684c6e4bc0fea0acc67 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 18:17:21 +0800 Subject: [PATCH 0468/2002] Committed 2021/10/09 --- .../July2021_bar_table_5.py | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_5.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_5.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_5.py new file mode 100644 index 00000000..d83e1b75 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_5.py @@ -0,0 +1,84 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # Jan + [23, 55, 38, 46, 62, 70], # Feb + [36, 70, 56, 82, 83, 98], # Mar + [47, 85, 77, 106, 106, 123], # Apr + [57, 106, 99, 128, 147, 153], # May + [66, 123, 123, 151, 172, 177], # Jun + [73, 146, 145, 178, 190, 193], # Jul + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors +cmap = cm.get_cmap("Spectral") # [3] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + +# Reverse colors and text labels to display the last value at the top. +colors = colors[::-1] +cell_text.reverse() + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 From f8b4757737cfdef91ff798db280d3593f85ac41b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 18:26:16 +0800 Subject: [PATCH 0469/2002] Committed 2021/10/09 --- .../Road safety/Month_over_month_2021/July2021_bar_table_5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_5.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_5.py index d83e1b75..018a35ca 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_5.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_5.py @@ -71,7 +71,7 @@ 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', horizontalalignment='center', verticalalignment='center', - size=13, + size=12, fontproperties='MS Gothic') text.set_path_effects([path_effects.Normal()]) From 633c8f61acbc3ce88e34507cbfed90ade023c695 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 19:07:26 +0800 Subject: [PATCH 0470/2002] Committed 2021/10/09 --- .../July2021_bar_tabel_6.py | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_tabel_6.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_tabel_6.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_tabel_6.py new file mode 100644 index 00000000..018a35ca --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_tabel_6.py @@ -0,0 +1,84 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # Jan + [23, 55, 38, 46, 62, 70], # Feb + [36, 70, 56, 82, 83, 98], # Mar + [47, 85, 77, 106, 106, 123], # Apr + [57, 106, 99, 128, 147, 153], # May + [66, 123, 123, 151, 172, 177], # Jun + [73, 146, 145, 178, 190, 193], # Jul + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors +cmap = cm.get_cmap("Spectral") # [3] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + +# Reverse colors and text labels to display the last value at the top. +colors = colors[::-1] +cell_text.reverse() + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 From 7514bf955551a8654b5b9bfb2358efb06c1ea309 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 19:08:55 +0800 Subject: [PATCH 0471/2002] Committed 2021/10/09 --- .../{July2021_bar_tabel_6.py => July2021_bar_table_6.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Road safety/Month_over_month_2021/{July2021_bar_tabel_6.py => July2021_bar_table_6.py} (100%) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_tabel_6.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py similarity index 100% rename from The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_tabel_6.py rename to The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py From 2d3826bd08d68d6a0f956aeeb7a6f8630c291ef3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 19:16:20 +0800 Subject: [PATCH 0472/2002] Committed 2021/10/09 --- .../Month_over_month_2021/July2021_bar_table_6.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py index 018a35ca..361f945f 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py @@ -10,13 +10,13 @@ month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] -deaths = [[14, 30, 18, 28, 31, 31], # Jan - [23, 55, 38, 46, 62, 70], # Feb - [36, 70, 56, 82, 83, 98], # Mar - [47, 85, 77, 106, 106, 123], # Apr - [57, 106, 99, 128, 147, 153], # May - [66, 123, 123, 151, 172, 177], # Jun - [73, 146, 145, 178, 190, 193], # Jul +deaths = [[7, 23, 22, 27, 18, 16], # July + [9, 17, 24, 23, 29, 20], # June + [10, 21, 22, 22, 37, 34], # May + [11, 15, 21, 24, 24, 25], # April + [13, 15, 18, 36, 21, 28], # March + [9, 25, 20, 18, 31, 39], # February + [14, 30, 18, 28, 31, 31], # January ] df = pd.DataFrame(data=deaths, From e0c5de8e17664e3b40c5f0ac8d761e274c41b73c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 19:20:54 +0800 Subject: [PATCH 0473/2002] Committed 2021/10/09 --- .../Road safety/Month_over_month_2021/July2021_bar_table_6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py index 361f945f..0721fb5e 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_6.py @@ -68,7 +68,7 @@ # matplotlib text [1][2] text = figure.text(0.5, 0.04, - 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', horizontalalignment='center', verticalalignment='center', size=12, From d87c3d4fb1da2d3b798c58402a67db0af94a900e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 22:58:07 +0800 Subject: [PATCH 0474/2002] Committed 2021/10/09 --- .../Road safety/Year_over_year_2020_18.py | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_18.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_18.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_18.py new file mode 100644 index 00000000..ed44b0df --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_18.py @@ -0,0 +1,119 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(10, 8)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary) # Create a bar chart. [7] +axes3.bar_label(axes3.containers[0], label_type='edge') # Add a bar label. [9] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ From b3d850a2b5d68edea12794562f05f7e551e6279b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 9 Oct 2021 23:08:56 +0800 Subject: [PATCH 0475/2002] Committed 2021/10/09 --- .../Road safety/Year_over_year_2020_18.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_18.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_18.py index ed44b0df..4b0952b7 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_18.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_18.py @@ -47,7 +47,7 @@ print(cumulative_sum) -figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(10, 8)) +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) axes1.plot(year, Taipei, label="Taipei") axes1.plot(year, New_Taipei, label="New Taipei") From 045b572a959e6a68adf63f66b662fb050f149461 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 01:50:18 +0800 Subject: [PATCH 0476/2002] Committed 2021/10/09 --- .../September2021.py | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py index 6161f2cf..af90674f 100644 --- a/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021.py @@ -13,8 +13,8 @@ (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 - (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 - () +# (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + (4017632 + 2544720 + 451422 + 2272812 + 574512 + 365117 + 452882), # 2021/09 ] centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 @@ -28,7 +28,8 @@ (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 - (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 +# (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 ] southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 @@ -42,7 +43,8 @@ (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 - (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 +# (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 ] eastTW = [(338805 + 230673), # 2010 @@ -56,7 +58,8 @@ (327968 + 218919), # 2018 (326247 + 216781), # 2019 (324372 + 215261), # 2020 - (322506 + 213956), # 2021/08 +# (322506 + 213956), # 2021/08 + (322260 + 213818), # 2021/09 ] outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu @@ -70,7 +73,8 @@ (152329 + 104440), # 2018 (153274 + 105207), # 2019 (153876 + 105952), # 2020 - (140004 + 13420 + 105645) # 2021/08 +# (140004 + 13420 + 105645), # 2021/08 + (140856 + 13429 + 106036), # 2021/09 ] x = range(10, 22) @@ -105,14 +109,14 @@ axes.set_ylabel("Population (Unit: 10 millions)") axes2 = axes.twinx() -axes2.set_ylabel("Yearly Housing Price Index (2010/4 - 2021/04) \n" +axes2.set_ylabel("Yearly Housing Price Index (2010/04 - 2021/04) \n" "Method: (Guotai + Xinyi) / 2", color='goldenrod') axes2.plot(x, housing_index, color='gold') axes2.tick_params(axis='y', labelcolor='goldenrod') plt.grid(linewidth=0.3) -plt.title("Taiwan's population change from 2010 - 2021/08 \n in relation to Annual Housing Price Index") +plt.title("Taiwan's population change from 2010 - 2021/09 \n in relation to Annual Housing Price Index") figure.tight_layout() From 17c9ca5b7eb5f8f6e23d873d8b5a141e5b2438d4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 15:27:20 +0800 Subject: [PATCH 0477/2002] Committed 2021/10/10 --- Matplotlib 3 Cookbook/Table chart 2.py | 60 ++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Matplotlib 3 Cookbook/Table chart 2.py diff --git a/Matplotlib 3 Cookbook/Table chart 2.py b/Matplotlib 3 Cookbook/Table chart 2.py new file mode 100644 index 00000000..d5036940 --- /dev/null +++ b/Matplotlib 3 Cookbook/Table chart 2.py @@ -0,0 +1,60 @@ +import matplotlib.pyplot as plt +import numpy as np + +# sold in each year +rows = ['2011', '2012', '2013', '2014', '2015'] + +# The types of batteries +columns = ('7Ah', '35Ah', '40Ah', '135Ah', '150Ah', '150Ah') + +data = [[75, 144, 114, 102, 108], + [90, 126, 102, 84, 126], + [96, 114, 75, 105, 135], + [105, 90, 150, 90, 75], + [90, 75, 135, 75, 90]] + +# Define the range and scale for the y axis. +values = np.arange(0, 600, 100) + +# Specify the color spectrum to be used. Each year will be represented in a different color: +colors = plt.cm.OrRd(np.linspace(0, 0.5, len(rows))) + +# Define x axis ticks where the bars are to be plotted. +index = np.arange(len(columns)) + 0.3 + +# Initialize the vertical offset for the stacked bar chart +y_offset = np.zeros(len(columns)) + +# Specify the area for the plot in terms of figure and axes. +figure, axes = plt.subplots() + +# Plot bars and create text labels for the table. +# Initialize the list in which data for the table is save. +cell_text = [] + +# Each iteration of the for loop plots one year of data for all battery ratings in one color. +n_rows = len(data) + +for row in range(n_rows): + plot = plt.bar(index, data[row], 0.5, bottom=y_offset, color=colors[row]) + y_offset = y_offset + data[row] + cell_text.append(['%1.1f' % (x) for x in y_offset]) + i = 0 + + # Each iteration of this for loop, label each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table to the bottom of the axes +table = plt.table(cellText=cell_text, rowLabels=rows, rowColours=colors, colLabels=columns, + loc='bottom') + +plt.ylabel("Units Sold") +plt.xticks([]) +plt.title("The Number Of Batteries Sold Per Year") + +plt.show() From 52bed9d1d04fb69fb13899d66f2ca824b7510950 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 15:28:46 +0800 Subject: [PATCH 0478/2002] Committed 2021/10/10 --- Matplotlib 3 Cookbook/Table chart 2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Matplotlib 3 Cookbook/Table chart 2.py b/Matplotlib 3 Cookbook/Table chart 2.py index d5036940..197f185b 100644 --- a/Matplotlib 3 Cookbook/Table chart 2.py +++ b/Matplotlib 3 Cookbook/Table chart 2.py @@ -1,10 +1,10 @@ import matplotlib.pyplot as plt import numpy as np -# sold in each year +# table's row rows = ['2011', '2012', '2013', '2014', '2015'] -# The types of batteries +# table's column columns = ('7Ah', '35Ah', '40Ah', '135Ah', '150Ah', '150Ah') data = [[75, 144, 114, 102, 108], From bfd7a6826317ca0149d75bfea67ecf0e3d942a5f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 15:52:58 +0800 Subject: [PATCH 0479/2002] Committed 2021/10/10 --- Matplotlib 3 Cookbook/Table chart 2.py | 31 ++++--- .../Jyly2021_bar_table_7.py | 81 +++++++++++++++++++ 2 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/Jyly2021_bar_table_7.py diff --git a/Matplotlib 3 Cookbook/Table chart 2.py b/Matplotlib 3 Cookbook/Table chart 2.py index 197f185b..195beccc 100644 --- a/Matplotlib 3 Cookbook/Table chart 2.py +++ b/Matplotlib 3 Cookbook/Table chart 2.py @@ -1,5 +1,6 @@ import matplotlib.pyplot as plt import numpy as np +import matplotlib.cm as cm # table's row rows = ['2011', '2012', '2013', '2014', '2015'] @@ -7,6 +8,7 @@ # table's column columns = ('7Ah', '35Ah', '40Ah', '135Ah', '150Ah', '150Ah') +# table's data data = [[75, 144, 114, 102, 108], [90, 126, 102, 84, 126], [96, 114, 75, 105, 135], @@ -16,8 +18,9 @@ # Define the range and scale for the y axis. values = np.arange(0, 600, 100) +cmap = cm.get_cmap("Spectral") # Specify the color spectrum to be used. Each year will be represented in a different color: -colors = plt.cm.OrRd(np.linspace(0, 0.5, len(rows))) +colors = cmap(np.linspace(0, 0.5, len(rows))) # Define x axis ticks where the bars are to be plotted. index = np.arange(len(columns)) + 0.3 @@ -29,32 +32,36 @@ figure, axes = plt.subplots() # Plot bars and create text labels for the table. -# Initialize the list in which data for the table is save. + +# Initialize the list where data for the table is save. cell_text = [] -# Each iteration of the for loop plots one year of data for all battery ratings in one color. n_rows = len(data) +# Each iteration of the for loop plots one year of data (for all battery ratings in one color). for row in range(n_rows): - plot = plt.bar(index, data[row], 0.5, bottom=y_offset, color=colors[row]) + plot = axes.bar(index, data[row], 0.5, bottom=y_offset, color=colors[row]) y_offset = y_offset + data[row] cell_text.append(['%1.1f' % (x) for x in y_offset]) i = 0 - # Each iteration of this for loop, label each bar with corresponding value for the given year + # Each iteration of this for loop labels each bar with corresponding value for the given year for rectangle in plot: height = rectangle.get_height() axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), horizontalalignment='center', verticalalignment='bottom') - i = i + 1 + i = i + 1 # Add a table to the bottom of the axes -table = plt.table(cellText=cell_text, rowLabels=rows, rowColours=colors, colLabels=columns, - loc='bottom') - -plt.ylabel("Units Sold") -plt.xticks([]) -plt.title("The Number Of Batteries Sold Per Year") +table = axes.table(cellText=cell_text, + rowLabels=rows, + rowColours=colors, + colLabels=columns, + loc='bottom') + +axes.set_ylabel("Units Sold") +axes.set_xticks([]) +axes.set_title("The Number Of Batteries Sold Per Year") plt.show() diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/Jyly2021_bar_table_7.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/Jyly2021_bar_table_7.py new file mode 100644 index 00000000..e7fb9dea --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/Jyly2021_bar_table_7.py @@ -0,0 +1,81 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[7, 23, 22, 27, 18, 16], # July + [9, 17, 24, 23, 29, 20], # June + [10, 21, 22, 22, 37, 34], # May + [11, 15, 21, 24, 24, 25], # April + [13, 15, 18, 36, 21, 28], # March + [9, 25, 20, 18, 31, 39], # February + [14, 30, 18, 28, 31, 31], # January + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors +cmap = cm.get_cmap("Spectral") # [3] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 From cb89604b0e8f87baef119231913005a95d4927b2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 15:57:14 +0800 Subject: [PATCH 0480/2002] Committed 2021/10/10 --- .../July2021_bar_table_8.py | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py new file mode 100644 index 00000000..e46e081e --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py @@ -0,0 +1,81 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 24, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors +cmap = cm.get_cmap("Spectral") # [3] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 From 5fbc8e83af2cfc3246e3b10c57894933a9dc0351 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:01:05 +0800 Subject: [PATCH 0481/2002] Committed 2021/10/10 --- .../{Jyly2021_bar_table_7.py => July2021_bar_table_7.py} | 0 .../Road safety/Month_over_month_2021/July2021_bar_table_8.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename The attainments and realizations of my dreams/Road safety/Month_over_month_2021/{Jyly2021_bar_table_7.py => July2021_bar_table_7.py} (100%) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/Jyly2021_bar_table_7.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_7.py similarity index 100% rename from The attainments and realizations of my dreams/Road safety/Month_over_month_2021/Jyly2021_bar_table_7.py rename to The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_7.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py index e46e081e..b68d8f2c 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py @@ -13,7 +13,7 @@ deaths = [[14, 30, 18, 28, 31, 31], # January [9, 25, 20, 18, 31, 39], # February [13, 15, 18, 36, 21, 28], # March - [11, 15, 21, 24, 24, 25], # April + [11, 15, 21, 24, 23, 25], # April [10, 21, 22, 22, 37, 34], # May [9, 17, 24, 23, 29, 20], # June [7, 23, 22, 27, 18, 16], # July From 7ab657d02ac9a4688f9f3c77d76dfb226e955b6a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:02:06 +0800 Subject: [PATCH 0482/2002] Committed 2021/10/10 --- .../Road safety/Month_over_month_2021/July2021_bar_table_8.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py index b68d8f2c..f84fe076 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_8.py @@ -79,3 +79,5 @@ # 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html # 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py # 3. https://stackoverflow.com/a/51454824 + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 6b274ad1de46012d3030a06b8b42a8a6901b48e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:09:13 +0800 Subject: [PATCH 0483/2002] Committed 2021/10/10 --- .../July2021_bar_table_9.py | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_9.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_9.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_9.py new file mode 100644 index 00000000..acb1465a --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_9.py @@ -0,0 +1,87 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("OrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 1e6b088b0d386f1257f7389ea360be5fef0172da Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:13:08 +0800 Subject: [PATCH 0484/2002] Committed 2021/10/10 --- .../July2021_bar_table_10.py | 87 +++++++++++++++++++ .../July2021_bar_table_11.py | 87 +++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_10.py create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_11.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_10.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_10.py new file mode 100644 index 00000000..84463670 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_10.py @@ -0,0 +1,87 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlGn") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_11.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_11.py new file mode 100644 index 00000000..84463670 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_11.py @@ -0,0 +1,87 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlGn") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 339b88cce2aee59fc5ad582809e82cf1d739dccc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:14:55 +0800 Subject: [PATCH 0485/2002] Committed 2021/10/10 --- .../July2021_bar_table_11.py | 2 +- .../July2021_bar_table_12.py | 87 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_12.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_11.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_11.py index 84463670..3a1c65e8 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_11.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_11.py @@ -27,7 +27,7 @@ # Get some pastel shades for the colors[3] # Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] -cmap = cm.get_cmap("YlGn") # Colormap reference[5] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) n_rows = len(deaths) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_12.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_12.py new file mode 100644 index 00000000..3a1c65e8 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_12.py @@ -0,0 +1,87 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From a04e2364b278195fadfa8243c8c8954556aea8f5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:20:46 +0800 Subject: [PATCH 0486/2002] Committed 2021/10/10 --- .../July2021_bar_table_12.py | 1 + .../July2021_bar_table_13.py | 88 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_13.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_12.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_12.py index 3a1c65e8..a1da11b6 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_12.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_12.py @@ -43,6 +43,7 @@ cell_text = [] for row in range(n_rows): axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + axes.bar_label(axes.containers[0], label_type='edge') y_offset = y_offset + deaths[row] cell_text.append([x for x in y_offset]) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_13.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_13.py new file mode 100644 index 00000000..ea0cf733 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_13.py @@ -0,0 +1,88 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 770323fca4838c8e325fba397d9c748d13a8dd40 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:38:30 +0800 Subject: [PATCH 0487/2002] Committed 2021/10/10 --- .../July2021_bar_table_14.py | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_14.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_14.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_14.py new file mode 100644 index 00000000..ea0cf733 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_14.py @@ -0,0 +1,88 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From b7d7ef4d1c73c07ef2918e3afafc76c1aee0f07b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:45:06 +0800 Subject: [PATCH 0488/2002] Committed 2021/10/10 --- Matplotlib 3 Cookbook/Table chart 3.py | 67 +++++++++++++++++++ .../July2021_bar_table_14.py | 25 ++++--- 2 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 Matplotlib 3 Cookbook/Table chart 3.py diff --git a/Matplotlib 3 Cookbook/Table chart 3.py b/Matplotlib 3 Cookbook/Table chart 3.py new file mode 100644 index 00000000..353a7dd6 --- /dev/null +++ b/Matplotlib 3 Cookbook/Table chart 3.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.cm as cm + +# table's row +rows = ['2011', '2012', '2013', '2014', '2015'] + +# table's column +columns = ('7Ah', '35Ah', '40Ah', '135Ah', '150Ah', '150Ah') + +# table's data +data = [[75, 144, 114, 102, 108], + [90, 126, 102, 84, 126], + [96, 114, 75, 105, 135], + [105, 90, 150, 90, 75], + [90, 75, 135, 75, 90]] + +# Define the range and scale for the y axis. +values = np.arange(0, 600, 100) + +cmap = cm.get_cmap("Spectral") +# Specify the color spectrum to be used. Each year will be represented in a different color: +colors = cmap(np.linspace(0, 0.5, len(rows))) + +# Define x axis ticks where the bars are to be plotted. +index = np.arange(len(columns)) + 0.3 + +# Initialize the vertical offset for the stacked bar chart +y_offset = np.zeros(len(columns)) + +# Specify the area for the plot in terms of figure and axes. +figure, axes = plt.subplots() + +# Plot bars and create text labels for the table. + +# Initialize the list where data for the table is save. +cell_text = [] + +n_rows = len(data) + +# Each iteration of the for loop plots one year of data (for all battery ratings in one color). +for row in range(n_rows): + plot = axes.bar(index, data[row], 0.5, bottom=y_offset, color=colors[row]) + y_offset = y_offset + data[row] + cell_text.append(['%1.1f' % (x) for x in y_offset]) + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table to the bottom of the axes +table = axes.table(cellText=cell_text, + rowLabels=rows, + rowColours=colors, + colLabels=columns, + loc='bottom') + +axes.set_ylabel("Units Sold") +axes.set_xticks([]) +axes.set_title("The Number Of Batteries Sold Per Year") + +plt.show() diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_14.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_14.py index ea0cf733..44c2fcf2 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_14.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_14.py @@ -10,13 +10,13 @@ month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] -deaths = [[14, 30, 18, 28, 31, 31], # January +deaths = [[14, 30, 18, 28, 31, 31], # January [9, 25, 20, 18, 31, 39], # February - [13, 15, 18, 36, 21, 28], # March - [11, 15, 21, 24, 23, 25], # April - [10, 21, 22, 22, 37, 34], # May - [9, 17, 24, 23, 29, 20], # June - [7, 23, 22, 27, 18, 16], # July + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July ] df = pd.DataFrame(data=deaths, @@ -42,11 +42,20 @@ # Plot bars and create text labels for the table cell_text = [] for row in range(n_rows): - axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) - axes.bar_label(axes.containers[0], label_type='center') + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') y_offset = y_offset + deaths[row] cell_text.append([x for x in y_offset]) + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 # Add a table at the bottom of the axes the_table = axes.table(cellText=cell_text, From 2833d0e09cdd4ce00c506ed834190a8a07e441db Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:51:37 +0800 Subject: [PATCH 0489/2002] Committed 2021/10/10 --- .../July2021_bar_table_15.py | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15.py new file mode 100644 index 00000000..44c2fcf2 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15.py @@ -0,0 +1,97 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, axes = plt.subplots() + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 36c4fc157d686fcad7d43d1242b6db9ddf800041 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:56:44 +0800 Subject: [PATCH 0490/2002] Committed 2021/10/10 --- .../July2021_bar_table_15.py | 6 +- .../July2021_bar_table_16.py | 101 ++++++++++++++++++ 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15.py index 44c2fcf2..9e78150b 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15.py @@ -34,7 +34,7 @@ index = np.arange(len(administrative_duty)) + 0.3 bar_width = 0.4 -figure, axes = plt.subplots() +figure, (axes, axes2) = plt.subplots(2) # Initialize the vertical-offset for the stacked bar chart. y_offset = np.zeros(len(administrative_duty)) @@ -73,6 +73,10 @@ axes.grid(True) # pyplot.grid [1][2] +axes2.bar(administrative_duty, [73, 146, 145, 178, 190, 193]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [73, 146, 145, 178, 190, 193], '-o', color='orange') + figure.tight_layout() # matplotlib text [1][2] diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16.py new file mode 100644 index 00000000..9e78150b --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16.py @@ -0,0 +1,101 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [73, 146, 145, 178, 190, 193]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [73, 146, 145, 178, 190, 193], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 35046a43644bfab1e4b1c8814003cd515a021088 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 16:58:11 +0800 Subject: [PATCH 0491/2002] Committed 2021/10/10 --- .../Month_over_month_2021/July2021_bar_table_15_2.py | 0 .../Road safety/Month_over_month_2021/July2021_bar_table_16.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_2.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_2.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_2.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16.py index 9e78150b..427f8147 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16.py @@ -77,7 +77,7 @@ axes2.bar_label(axes2.containers[0], label_type='edge') axes2.plot(administrative_duty, [73, 146, 145, 178, 190, 193], '-o', color='orange') -figure.tight_layout() +# figure.tight_layout() # matplotlib text [1][2] text = figure.text(0.5, 0.04, From c84ebd5760527f7e50e3d79578d1d1bcf1ca96ca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 17:07:17 +0800 Subject: [PATCH 0492/2002] Committed 2021/10/10 --- .../July2021_bar_table_15_2.py | 101 ++++++++++++++++++ .../July2021_bar_table_16_2.py | 101 ++++++++++++++++++ 2 files changed, 202 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16_2.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_2.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_2.py index e69de29b..d85da76a 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_2.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_2.py @@ -0,0 +1,101 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(10, 18)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [73, 146, 145, 178, 190, 193]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [73, 146, 145, 178, 190, 193], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16_2.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16_2.py new file mode 100644 index 00000000..0ca7fb70 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_16_2.py @@ -0,0 +1,101 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(10, 10)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [73, 146, 145, 178, 190, 193]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [73, 146, 145, 178, 190, 193], '-o', color='orange') + +# figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 6c26538cd48d80f50e407913e7fe204691cee17e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 17:13:03 +0800 Subject: [PATCH 0493/2002] Committed 2021/10/10 --- .../Road safety/Year_over_year_2020_19.py | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_19.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_19.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_19.py new file mode 100644 index 00000000..3d0bf753 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_19.py @@ -0,0 +1,120 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary) # Create a bar chart. [7] +axes3.bar_label(axes3.containers[0], label_type='edge', color='b', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html From 00021ee680481fd1acad0c32a90ae713b2a3daee Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 17:15:06 +0800 Subject: [PATCH 0494/2002] Committed 2021/10/10 --- .../Road safety/Year_over_year_2020_20.py | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py new file mode 100644 index 00000000..3d0bf753 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py @@ -0,0 +1,120 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary) # Create a bar chart. [7] +axes3.bar_label(axes3.containers[0], label_type='edge', color='b', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html From b9f029054b564f43f0e88e9dace21f771f80a5bb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 17:17:41 +0800 Subject: [PATCH 0495/2002] Committed 2021/10/10 --- .../Road safety/Year_over_year_2020_20.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py index 3d0bf753..3613289c 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py @@ -92,7 +92,7 @@ table.set_fontsize(14) # [3] axes3.bar(administrative_duty, summary) # Create a bar chart. [7] -axes3.bar_label(axes3.containers[0], label_type='edge', color='b', fontsize=14)# Add a bar label and its format.[9][10] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] # matplotlib text [1][2] From 8ff66bf79947e8e38cd13f15e6f8a5c940352a83 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 17:20:02 +0800 Subject: [PATCH 0496/2002] Committed 2021/10/10 --- .../Road safety/Year_over_year_2020_19_2.py | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2020_19_2.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_19_2.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_19_2.py new file mode 100644 index 00000000..3613289c --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_19_2.py @@ -0,0 +1,120 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary) # Create a bar chart. [7] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html From 6e3064a920bbfabfc8fba6b04160faeabf4d1ecf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 17:25:45 +0800 Subject: [PATCH 0497/2002] Committed 2021/10/10 --- .../Road safety/Year_over_year_2020_20.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py index 3613289c..b57ab2ee 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2020_20.py @@ -91,7 +91,7 @@ table.scale(2.01, 1.57) # [3] table.set_fontsize(14) # [3] -axes3.bar(administrative_duty, summary) # Create a bar chart. [7] +axes3.bar(administrative_duty, summary, color=colour.CSS4_COLORS.get('palegreen'), linewidth=1, ecolor=colour.CSS4_COLORS.get('dodgerblue')) # Create a bar chart and its format. [7][11][12] axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] @@ -118,3 +118,5 @@ # 8. https://stackoverflow.com/a/48842891 # 9. https://stackoverflow.com/a/67561982/ # 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html +# 11. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar.html#matplotlib.axes.Axes.bar +# 12. https://matplotlib.org/stable/gallery/color/named_colors.html From cab456db9b0782d6c1b80ebfa7686b65281b9cb2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 17:38:25 +0800 Subject: [PATCH 0498/2002] Committed 2021/10/10 --- .../July2021_bar_table_15_3.py | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_3.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_3.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_3.py new file mode 100644 index 00000000..5d7e994b --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_3.py @@ -0,0 +1,103 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='lower center') # The position of the cell with respect to ax. This must be one of the codes.[6][7] + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [73, 146, 145, 178, 190, 193]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [73, 146, 145, 178, 190, 193], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.table.html +# 7. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.codes + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 12d474fda3ca622277db604f5babeb0d0fd1bfd5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 17:40:09 +0800 Subject: [PATCH 0499/2002] Committed 2021/10/10 --- .../July2021_bar_table_15_1.py | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_1.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_1.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_1.py new file mode 100644 index 00000000..e1c254f9 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_1.py @@ -0,0 +1,101 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 7)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [73, 146, 145, 178, 190, 193]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [73, 146, 145, 178, 190, 193], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From b4882725e4401f1c25b0089b6349e87c491550dc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Oct 2021 17:42:00 +0800 Subject: [PATCH 0500/2002] Committed 2021/10/10 --- .../Month_over_month_2021/July2021_bar_table_15_1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_1.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_1.py index e1c254f9..e5219bd7 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_1.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/July2021_bar_table_15_1.py @@ -80,7 +80,7 @@ figure.tight_layout() # matplotlib text [1][2] -text = figure.text(0.5, 0.04, +text = figure.text(0.5, 0.01, 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', horizontalalignment='center', verticalalignment='center', From 431047a911fe6758122d6817bafede910186458f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 11 Oct 2021 19:25:21 +0800 Subject: [PATCH 0501/2002] Committed 2021/10/11 --- .../Trade/2020_export_percentage_5.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 The attainments and realizations of my dreams/Trade/2020_export_percentage_5.py diff --git a/The attainments and realizations of my dreams/Trade/2020_export_percentage_5.py b/The attainments and realizations of my dreams/Trade/2020_export_percentage_5.py new file mode 100644 index 00000000..d474d79e --- /dev/null +++ b/The attainments and realizations of my dreams/Trade/2020_export_percentage_5.py @@ -0,0 +1,44 @@ +import pandas as pd +import matplotlib.pyplot as plt + +exportation = pd.read_csv("2020_export_value_from_each_customs.csv", header=0, index_col=0) + +print(exportation) + +percentile = [(1544101314 / 13800075242), + (6674773304 / 13800075242), + (2550413664 / 13800075242), + (3030786960 / 13800075242), + 100] + +print(percentile) + +# Pie chart, where the slices will be ordered and plotted counter-clockwise: +labels = 'Keelung customs\n(Container ports in N.TW & E.TW)', 'Taipei customs\n(Airports in N.TW,\n ' \ + 'including Miaoli county )', \ + 'Taichung customs\n(Airport & container\n ports in C.TW,\n incl. Yunlin county)', \ + 'Kaohsiung customs\n(Airport & container ports\n in S.TW)' + +sizes = [11.18, 48.36, 18.48, 21.96] +explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') + +fig1, ax1 = plt.subplots() +ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.2f%%', shadow=True, startangle=90, + textprops=dict(color="k")) + +ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. + +plt.title("The contribution of each region to total export ($NTD) in Taiwan 2020") + +textstr = '\n'.join(( + r'Dataset:', + r'https://portal.sw.nat.gov.tw/APGA/GA11_LIST', +)) +# these are matplotlib.patch.Patch properties +props = dict(boxstyle='round', facecolor='wheat', alpha=0.5) + +# place a text box in upper left in axes coords +ax1.text(0.09, 0.01, textstr, transform=ax1.transAxes, fontsize=12, + verticalalignment='top', bbox=props) + +plt.show() From 561926044fc68e7f3ef886d0b5e71cb4027fe2ca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 13 Oct 2021 02:07:57 +0800 Subject: [PATCH 0502/2002] Committed 2021/10/13 --- .../September2021_2.py | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021_2.py diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021_2.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021_2.py new file mode 100644 index 00000000..e9c558be --- /dev/null +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021_2.py @@ -0,0 +1,127 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08", "'21/09"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + # (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + (4017632 + 2544720 + 451422 + 2272812 + 574512 + 365117 + 452882), # 2021/09 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + # (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + # (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + # (322506 + 213956), # 2021/08 + (322260 + 213818), # 2021/09 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + # (140004 + 13420 + 105645), # 2021/08 + (140856 + 13429 + 106036), # 2021/09 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +axes.set_ylim(23300000, 23700000) +axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +axes.set_xlabel("Year\n" + "References:\n" + "1. https://www.ris.gov.tw/app/portal/346 \n" + "2. https://www.macromicro.me/collections/15/\n" + "tw-housing-relative/124/tw-housing-price-sinyi") + +axes.set_ylabel("Population (Unit: 10 millions)") + +axes2 = axes.twinx() +axes2.set_ylabel("Yearly Housing Price Index (2010/04 - 2021/04) \n" + "Method: (Guotai + Xinyi) / 2", color='goldenrod') + +axes2.plot(x, housing_index, color='gold') +axes2.tick_params(axis='y', labelcolor='goldenrod') + +plt.grid(linewidth=0.3) +plt.title("Taiwan's population change from 2010 - 2021/09 \n in relation to Annual Housing Price Index") + +figure.tight_layout() + +plt.show() + +# References: +# 1. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi +# 2. From c317a5b0a471dab78cc6cffab563809b04c05666 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 13 Oct 2021 02:14:53 +0800 Subject: [PATCH 0503/2002] Committed 2021/10/13 --- .../September2021_3.py | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021_3.py diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021_3.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021_3.py new file mode 100644 index 00000000..fb319fd1 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/September2021_3.py @@ -0,0 +1,127 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08", "'21/09"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + # (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + (4017632 + 2544720 + 451422 + 2272812 + 574512 + 365117 + 452882), # 2021/09 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + # (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + # (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + # (322506 + 213956), # 2021/08 + (322260 + 213818), # 2021/09 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + # (140004 + 13420 + 105645), # 2021/08 + (140856 + 13429 + 106036), # 2021/09 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +axes.set_ylim(23400000, 23700000) +axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +axes.set_xlabel("Year\n" + "References:\n" + "1. https://www.ris.gov.tw/app/portal/346 \n" + "2. https://www.macromicro.me/collections/15/\n" + "tw-housing-relative/124/tw-housing-price-sinyi") + +axes.set_ylabel("Population (Unit: 10 millions)") + +axes2 = axes.twinx() +axes2.set_ylabel("Yearly Housing Price Index (2010/04 - 2021/04) \n" + "Method: (Guotai + Xinyi) / 2", color='goldenrod') + +axes2.plot(x, housing_index, color='gold') +axes2.tick_params(axis='y', labelcolor='goldenrod') + +plt.grid(linewidth=0.3) +plt.title("Taiwan's population change from 2010 - 2021/09 \n in relation to Annual Housing Price Index") + +figure.tight_layout() + +plt.show() + +# References: +# 1. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi +# 2. From d1ab2fc4206bad0ee1176efc8afc264037c12f28 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 13 Oct 2021 17:14:26 +0800 Subject: [PATCH 0504/2002] Committed 2021/10/13 --- .../Forecast/Prediction for the the population 2022.py | 0 .../Population_versus_housing_price_index/Forecast/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/__init__.py diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/__init__.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/__init__.py new file mode 100644 index 00000000..e69de29b From da79e7606a3306cf3366e12a7875ae469b681ee7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 13 Oct 2021 17:16:21 +0800 Subject: [PATCH 0505/2002] Committed 2021/10/13 --- .../Prediction for the the population 2022.py | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py index e69de29b..541d9aec 100644 --- a/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py @@ -0,0 +1,94 @@ +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08", "'21/09"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + # (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + (4017632 + 2544720 + 451422 + 2272812 + 574512 + 365117 + 452882), # 2021/09 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + # (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + # (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + # (322506 + 213956), # 2021/08 + (322260 + 213818), # 2021/09 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + # (140004 + 13420 + 105645), # 2021/08 + (140856 + 13429 + 106036), # 2021/09 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] \ No newline at end of file From 81a2767f253c2ac9d271df6554221062fb9f2e3d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 13 Oct 2021 17:32:42 +0800 Subject: [PATCH 0506/2002] Committed 2021/10/13 --- .../Prediction for the the population 2022.py | 186 ++++++++++-------- 1 file changed, 109 insertions(+), 77 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py index 541d9aec..78fe9403 100644 --- a/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py @@ -1,94 +1,126 @@ -year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08", "'21/09"] +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker -northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 - (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 - (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 - (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 - (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 - (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 - (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 - (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 - (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 - (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 - (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 - # (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08", "'21/09"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 (4017632 + 2544720 + 451422 + 2272812 + 574512 + 365117 + 452882), # 2021/09 ] -centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 - (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 - (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 - (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 - (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 - (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 - (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 - (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 - (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 - (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 - (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 - # (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 ] -southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 - (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 - (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 - (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 - (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 - (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 - (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 - (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 - (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 - (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 - (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 - # (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 ] -eastTW = [(338805 + 230673), # 2010 - (336838 + 228290), # 2011 - (335190 + 226252), # 2012 - (333897 + 224821), # 2013 - (333392 + 224470), # 2014 - (331945 + 222452), # 2015 - (330911 + 220802), # 2016 - (329237 + 219540), # 2017 - (327968 + 218919), # 2018 - (326247 + 216781), # 2019 - (324372 + 215261), # 2020 - # (322506 + 213956), # 2021/08 +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 (322260 + 213818), # 2021/09 ] -outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu - (113989 + 97157), # 2011 - (124421 + 98843), # 2012 - (132878 + 100400), # 2013 - (140229 + 101758), # 2014 - (145346 + 102304), # 2015 - (147709 + 103263), # 2016 - (150336 + 104073), # 2017 - (152329 + 104440), # 2018 - (153274 + 105207), # 2019 - (153876 + 105952), # 2020 - # (140004 + 13420 + 105645), # 2021/08 +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645), # 2021/08 (140856 + 13429 + 106036), # 2021/09 ] -x = range(10, 22) +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) -date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] -index = [(330.60 + 129.45) / 2] -housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 - (102.42 + 218.72) / 2, # 2011/04 - (109.85 + 241.27) / 2, # 2012/04 - (117.29 + 278.51) / 2, # 2013/04 - (124.60 + 297.78) / 2, # 2014/04 - (124.61 + 289.3) / 2, # 2015/04 - (95.92 + 279.74) / 2, # 2016/04 - (101.89 + 282.36) / 2, # 2017/04 - (107.48 + 285.55) / 2, # 2018/04 - (114.48 + 294.46) / 2, # 2019/04 - (125.22 + 302.61) / 2, # 2020/04 - (129.45 + 333.60) / 2, # 2021/04 - ] \ No newline at end of file +print(df) From e309be8876b521394a4f6690693621a4279e1cd1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 13 Oct 2021 17:54:27 +0800 Subject: [PATCH 0507/2002] Committed 2021/10/13 --- .../Forecast/Prediction for the the population 2022.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py index 78fe9403..a8dda70c 100644 --- a/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/Forecast/Prediction for the the population 2022.py @@ -124,3 +124,12 @@ outlyingTW]) print(df) + +total = [] + +for i in range(0, 20, 1): + summation = df.iloc[:, i].sum() + total.append(summation) + + +print(total) From 687672a3f35ea1bdfaa3b75ea447bad096920fb4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 23 Oct 2021 23:27:47 +0800 Subject: [PATCH 0508/2002] Committed 2021/10/23 --- .../October2021.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021.py new file mode 100644 index 00000000..0a3cb671 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [89351, 52065, 38298, 30692, 50527, 23497, 28960] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/10 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("https://web.archive.org/web/20211023110903/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() From 5829b40e875994c81efc053cd854c66daf42dfd9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 24 Oct 2021 04:15:03 +0800 Subject: [PATCH 0509/2002] Committed 2021/10/24 --- .../Monthly_total_job_openings_by_region/October2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021.py index 0a3cb671..3d3a3c36 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021.py @@ -19,7 +19,7 @@ plt.title("2021/10 the number of job openings in Taiwan by region") # plt.ylabel("") -plt.xlabel("https://web.archive.org/web/20211023110903/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20211023110903/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(20000, 90000) From eb892311edeae2c0b8164444674c7e4d54f735a7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 7 Nov 2021 19:27:30 +0800 Subject: [PATCH 0510/2002] Committed 2021/11/07 --- .../Alloting higher education resources 2022.py | 0 .../Yearly Higher Education Budget Allotment/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py create mode 100644 The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/__init__.py diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/__init__.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/__init__.py new file mode 100644 index 00000000..e69de29b From f56623f610b520343bd909cb52c2e8867a70ef22 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 13 Nov 2021 02:16:56 +0800 Subject: [PATCH 0511/2002] Committed 2021/11/12 --- .../Annual number of births in Taiwan/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/__init__.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/__init__.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/__init__.py new file mode 100644 index 00000000..e69de29b From fd889040b0312a63f01811aa38e69408f39d3397 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 13 Nov 2021 17:29:11 +0800 Subject: [PATCH 0512/2002] Committed 2021/11/13 --- .../The number of births till 2020.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2020.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2020.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2020.py new file mode 100644 index 00000000..75b02844 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2020.py @@ -0,0 +1,3 @@ +import pandas as pd + + From 09a98a8843328cec530b25023b04ad248d7bb23d Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 13 Nov 2021 18:49:14 +0800 Subject: [PATCH 0513/2002] Committed 2021/11/13 --- .../The number of births till 2020.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2020.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2020.py index 75b02844..4b9c8981 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2020.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2020.py @@ -1,3 +1,3 @@ import pandas as pd - +import matplotlib.pyplot as plt From 1289dc234bdd89db9ee761d7b1ad5d50212a0a87 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Nov 2021 14:28:10 +0800 Subject: [PATCH 0514/2002] Committed 2021/11/27 --- .../Graph Algorithms/__init__.py | 0 40 Algorithms Every Programmer Should Know/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/__init__.py create mode 100644 40 Algorithms Every Programmer Should Know/__init__.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/__init__.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/40 Algorithms Every Programmer Should Know/__init__.py b/40 Algorithms Every Programmer Should Know/__init__.py new file mode 100644 index 00000000..e69de29b From 9e95d1d48b8b527aa6d1e2dcf97ac33563213486 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Nov 2021 15:01:36 +0800 Subject: [PATCH 0515/2002] Committed 2021/11/27 --- .../Graph Algorithms/Representations of graphs.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Representations of graphs.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Representations of graphs.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Representations of graphs.py new file mode 100644 index 00000000..0b3b5f80 --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Representations of graphs.py @@ -0,0 +1,7 @@ +import networkx as nx + +graph = nx.Graph() + +# Add a single vertex +graph.add_node("Mike") + From 049a6fbac276017cf3632d8a075ae9b0131f5370 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Nov 2021 15:16:16 +0800 Subject: [PATCH 0516/2002] Committed 2021/11/27 --- .../Representations of graphs.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Representations of graphs.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Representations of graphs.py index 0b3b5f80..8179b263 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Representations of graphs.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Representations of graphs.py @@ -5,3 +5,20 @@ # Add a single vertex graph.add_node("Mike") +# Add a bunch of vertices using a list +graph.add_nodes_from(["Amine", "Wassim", "Nick"]) + +# Add an edge between the existing vertices. +graph.add_edge("Mike", "Amine") + +# Print the edges and vertices. +print(graph.edges) +print(graph.nodes) + +# If we are adding an edge, this also leads to adding the associated vertices, +# if they do not already exist +graph.add_edge("Amine", "Imran") + +print(graph.nodes) +print(graph.edges) + From 9be318fbe19f808399df01903dda858ad4e908e1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 28 Nov 2021 15:19:11 +0800 Subject: [PATCH 0517/2002] Committed 2021/11/28 --- .../Monthly_total_job_openings_by_region/November2021.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py new file mode 100644 index 00000000..e69de29b From 1ab6b78a81fe334c4f3a872186b96af862e443ed Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 28 Nov 2021 15:22:09 +0800 Subject: [PATCH 0518/2002] Committed 2021/11/28 --- .../November2021.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py index e69de29b..3d3a3c36 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [89351, 52065, 38298, 30692, 50527, 23497, 28960] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/10 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211023110903/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() From 9f1706d52b89f72b70c36a9ef2a1dc82f733bbe6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 00:37:45 +0800 Subject: [PATCH 0519/2002] Committed 2021/11/28 --- .../Monthly_total_job_openings_by_region/November2021.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py index 3d3a3c36..2cbca2ac 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5, 6, 7] -position_vacancies = [89351, 52065, 38298, 30692, 50527, 23497, 28960] +position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] @@ -19,7 +19,7 @@ plt.title("2021/10 the number of job openings in Taiwan by region") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20211023110903/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(20000, 90000) From cd003517be660e29c209395c44b0f81af7b286b2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 00:47:09 +0800 Subject: [PATCH 0520/2002] Committed 2021/11/28 --- .../Monthly_total_job_openings_by_region/November2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py index 2cbca2ac..171a9e9a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021.py @@ -16,7 +16,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2021/10 the number of job openings in Taiwan by region") +plt.title("2021/11 the number of job openings in Taiwan by region") # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") From ac978e69d891a1c7929856da0082a5a4bfc1edca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:35:10 +0800 Subject: [PATCH 0521/2002] Committed 2021/11/29 --- .../November2021_ZH.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH.py new file mode 100644 index 00000000..6222de7f --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH.py @@ -0,0 +1,34 @@ +import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + +font = {'family': 'MS Gothic', + 'color': 'darkred', + 'weight': 'normal', + 'size': 16, + } + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] + +label = ["啣", "啣", "獢", "啁姘", "唬葉", "啣", "擃"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region", fontproperties="MS Gothic") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() From 5bf3fd628c33bbd9fe197085986db41d6f20c4ac Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:43:24 +0800 Subject: [PATCH 0522/2002] Committed 2021/11/29 --- .../November2021_ZH_2.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_2.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_2.py new file mode 100644 index 00000000..b03f4f06 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_2.py @@ -0,0 +1,31 @@ +import matplotlib +import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] + +label = ["啣", "啣", "獢", "啁姘", "唬葉", "啣", "擃"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region", fontproperties="MS Gothic") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() From 0385f2ea4eb1c6a3b05e387bb870b3ef19841884 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:44:35 +0800 Subject: [PATCH 0523/2002] Committed 2021/11/29 --- .../November2021_ZH_2.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_2.py index b03f4f06..b9273bec 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_2.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_2.py @@ -3,7 +3,7 @@ # Using the magic encoding # -*- coding: utf-8 -*- -matplotlib.rc('font', family="MS Gothic") +matplotlib.rc('font', family="MS Gothic") # [1] region_num = [1, 2, 3, 4, 5, 6, 7] position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] @@ -29,3 +29,6 @@ plt.ylim(20000, 90000) plt.show() + +# Reference: +# 1. https://stackoverflow.com/questions/10960463/non-ascii-characters-in-matplotlib From df8a9d31efc398e8f1a80e71d2fd2b70791e7f39 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:48:50 +0800 Subject: [PATCH 0524/2002] Committed 2021/11/29 --- .../October2021_ZH_JP.py | 32 +++++++++++++++++++ .../September2021_ZH_JP.py | 0 2 files changed, 32 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_ZH_JP.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_ZH_JP.py new file mode 100644 index 00000000..d083f7cb --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_ZH_JP.py @@ -0,0 +1,32 @@ +import matplotlib +import matplotlib.pyplot as plt + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [89351, 52065, 38298, 30692, 50527, 23497, 28960] + +label = ["啣", "啣", "獢", "啁姘", "唬葉", "啣", "擃"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/10 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211023110903/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py new file mode 100644 index 00000000..e69de29b From 5bd7af870e8e9493560f17fda4d0e87614dbf6a7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:49:39 +0800 Subject: [PATCH 0525/2002] Committed 2021/11/29 --- .../September2021_ZH_JP.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py index e69de29b..e767751b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py @@ -0,0 +1,31 @@ +import matplotlib +import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [85928, 50512, 37109, 29894, 48837, 22775, 27978] + +label = ["啣", "啣", "獢", "啁姘", "唬葉", "啣", "擃"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/09 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(10000, 90000) + +plt.show() From 62c2182c5030628b46cb7f084f699f6d86563c7b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:51:16 +0800 Subject: [PATCH 0526/2002] Committed 2021/11/29 --- .../September2014_ZH_JP.py | 26 +++++++++++++++++++ .../September2021_ZH_JP.py | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py new file mode 100644 index 00000000..4e1dbe66 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [66549, 34819, 21948, 17828, 27710, 12300, 16584] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2014/09 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20140903150508/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(10000, 70000) + +plt.show() diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py index e767751b..c5acded2 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_ZH_JP.py @@ -21,7 +21,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2021/09 the number of job openings in Taiwan by region") +plt.title("2021/09 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region") # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") From d9e673ae69e365c530e8140860ebc05aa90318a4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:53:49 +0800 Subject: [PATCH 0527/2002] Committed 2021/11/29 --- .../September2014_ZH_JP.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py index 4e1dbe66..ea60d848 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py @@ -1,9 +1,14 @@ +import matplotlib import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6, 7] position_vacancies = [66549, 34819, 21948, 17828, 27710, 12300, 16584] -label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] +label = ["啣", "啣", "獢", "啁姘", "唬葉", "啣", "擃"] fig, ax = plt.subplots(figsize=(8, 7)) plt.xticks(region_num, labels=label, rotation=7) From 8b6a378a225c888a5ed2d943c64d29b9bfd1b325 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:54:37 +0800 Subject: [PATCH 0528/2002] Committed 2021/11/29 --- .../Monthly_total_job_openings_by_region/September2014_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py index ea60d848..47dbead9 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_ZH_JP.py @@ -21,7 +21,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2014/09 the number of job openings in Taiwan by region") +plt.title("2014/09 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region") # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20140903150508/https://www.104.com.tw/jb/category/?cat=2") From 065a47255548c8d5f283ade32af93ab3348de003 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 21:56:46 +0800 Subject: [PATCH 0529/2002] Committed 2021/11/29 --- .../November2021_ZH_JP.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP.py new file mode 100644 index 00000000..b9273bec --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP.py @@ -0,0 +1,34 @@ +import matplotlib +import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") # [1] + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] + +label = ["啣", "啣", "獢", "啁姘", "唬葉", "啣", "擃"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region", fontproperties="MS Gothic") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/questions/10960463/non-ascii-characters-in-matplotlib From b5622893cecace12e825b789b0f85cd4f185f048 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 22:02:43 +0800 Subject: [PATCH 0530/2002] Committed 2021/11/29 --- .../November2021_ZH_JP.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP.py index b9273bec..8d866fb3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP.py @@ -24,7 +24,7 @@ plt.title("2021/11 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region", fontproperties="MS Gothic") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("&箏: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") # [2][3] plt.ylim(20000, 90000) @@ -32,3 +32,5 @@ # Reference: # 1. https://stackoverflow.com/questions/10960463/non-ascii-characters-in-matplotlib +# 2. Google Translate +# 3. https://ja.wikipedia.org/wiki/擃撣#箏 From 884a412841324a5fffc37e4130f4f6e29fe1eaba Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 23:25:24 +0800 Subject: [PATCH 0531/2002] Committed 2021/11/29 --- .../November2021_ZH_JP_EN.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP_EN.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP_EN.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP_EN.py new file mode 100644 index 00000000..7b0ad2b3 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP_EN.py @@ -0,0 +1,36 @@ +import matplotlib +import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") # [1] + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] + +label = ["Taipei\n啣", "New Taipei\n啣", "Taoyuan\n獢", "Hsinch\n啁姘", "Taichung\n唬葉", "Tainan\n啣", "Kaohsiung\n擃"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region", fontproperties="MS Gothic") + +# plt.ylabel("") +plt.xlabel("Source&&箏: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") # [2][3] + +plt.ylim(20000, 90000) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/questions/10960463/non-ascii-characters-in-matplotlib +# 2. Google Translate +# 3. https://ja.wikipedia.org/wiki/擃撣#箏 From 450597c278f694ba84ab7c9af46df2e762e024b3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Nov 2021 23:28:00 +0800 Subject: [PATCH 0532/2002] Committed 2021/11/29 --- .../November2021_ZH_JP_EN.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP_EN.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP_EN.py index 7b0ad2b3..dc752fc8 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP_EN.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_ZH_JP_EN.py @@ -8,7 +8,7 @@ region_num = [1, 2, 3, 4, 5, 6, 7] position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] -label = ["Taipei\n啣", "New Taipei\n啣", "Taoyuan\n獢", "Hsinch\n啁姘", "Taichung\n唬葉", "Tainan\n啣", "Kaohsiung\n擃"] +label = ["啣\nTaipei", "啣\nNew Taipei", "獢\nTaoyuan", "啁姘\nHsinchu", "唬葉\nTaichung", "啣\nTainan", "擃\nKaohsiung"] fig, ax = plt.subplots(figsize=(8, 7)) plt.xticks(region_num, labels=label, rotation=7) From 32f39b9cd0197b3cecadae1cb1338e2a113e27aa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 1 Dec 2021 18:45:10 +0800 Subject: [PATCH 0533/2002] Committed 2021/12/01 --- .../Calculating centrality metrics.py | 6 ++++++ ...he_top_universities_in_the_world_2010.xlsx | Bin 5975 -> 5974 bytes ...he_top_universities_in_the_world_2013.xlsx | Bin 5861 -> 5861 bytes 3 files changed, 6 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Calculating centrality metrics.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Calculating centrality metrics.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Calculating centrality metrics.py new file mode 100644 index 00000000..60c78c5b --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Calculating centrality metrics.py @@ -0,0 +1,6 @@ +import networkx as nx +import matplotlib.pyplot as plt + +vertices = range(1, 10) + + diff --git a/The attainments and realizations of my dreams/Heading_to_the_top_universities_in_the_world_2010.xlsx b/The attainments and realizations of my dreams/Heading_to_the_top_universities_in_the_world_2010.xlsx index e9154901757535d1953973842f17c205e4fd36b1..e980168289186a49fa07fb86eae063e95103f856 100644 GIT binary patch delta 602 zcmcbvcTJBkz?+#xgn@y9gCUE*F?b^1>Ut1;*GS6n9Z*!8iGe{7NT=i{2NdNO6zeDF z7p3Y|wFv)zvvCx zM-8UUw;65OSU>@_S%zZ?D};4~_W~1`HF<`>Q;1NbU@Rj<=#kJvh|qCi52%o^s1+wX ztS5(wnn6@f5S3y)GkLYB5`=pZ$mN~+yJKM2W866b+v6A+hT+%Z{OT#b!M6r>IS+{fHP delta 585 zcmcbncU_M!z?+#xgn@y9gF!XBaGcHJ6bK~+F)0Smtr5;DUnYozl#E#_&#g=NfHtu{Iw86&iGGG0o zqs?~(SFGCA>X0)xm0Ng22Y29%TMLi5Oxs;@$U5f3M`KgtGl~JujZxB#8;jYGXj-Q1U-E08{_m@Eq{}CK`1j|F)%xfkW}9;-9*e)3 zZRZx%{rSoEtA7ta3zP`ej0`Dn4VnEaYPGcPQ%sWG4R?4zkikj5I8PU>uVpo{a>E3)lVYoNImH+)2Zk zs-`^7mL|n|?+-kD`|@LI+;#)Ki6va0*Qc<|WmTCuT!0%WrchZ!q`6~=pk z3Cx&I;~5_jCe>bMbw(^_dmRm|b%Hel-LX?qlj-vQ~{(c|(Ws#Fe+CGKI3T zF0AWTnSloB+l0cALcbU#4-8&ebz0;g{%H`&b2zAchYXR z<<-*Io4U*HY-n!y{`~FhEqM=})MR=1_HUY8(zhe+`pNw6Dnjd?cA=**O@2YkJ?`T|Hcok6TCuT!0%WrchZ!q`6~=pk z3Cx Date: Wed, 1 Dec 2021 18:50:29 +0800 Subject: [PATCH 0534/2002] Committed 2021/12/01 --- .../Graph Algorithms/Calculating centrality metrics.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Calculating centrality metrics.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Calculating centrality metrics.py index 60c78c5b..60c064d6 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Calculating centrality metrics.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Calculating centrality metrics.py @@ -3,4 +3,12 @@ vertices = range(1, 10) +edges = [(7, 2), (2, 3), (7, 4), (4, 5), (7, 3), (7, 5), (1, 6), (1, 7), (2, 8), (2, 9)] +graph = nx.Graph() +graph.add_nodes_from(vertices) +graph.add_edges_from(edges) + +nx.draw(graph, with_labels=True, node_color='y', node_size=800) + +plt.show() From 874b7ef683f7bf5dae0c8c920256afd6f3d01cfc Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 2 Dec 2021 18:16:24 +0800 Subject: [PATCH 0535/2002] Committed 2021/12/2 --- .idea/inspectionProfiles/Project_Default.xml | 9 --------- .../Symbolic Computations.py | 7 +++++++ 2 files changed, 7 insertions(+), 9 deletions(-) create mode 100644 Chapter5 - Some More Python Essentials/Symbolic Computations.py diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index d1a816be..b1e3cb5f 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -2,14 +2,5 @@ \ No newline at end of file diff --git a/Chapter5 - Some More Python Essentials/Symbolic Computations.py b/Chapter5 - Some More Python Essentials/Symbolic Computations.py new file mode 100644 index 00000000..aa60bb08 --- /dev/null +++ b/Chapter5 - Some More Python Essentials/Symbolic Computations.py @@ -0,0 +1,7 @@ +import sympy as sym + +x = 2 +y = 3 +z = x * y + +print(z) From 4959eb9367ad6fba3aa37c0dd9442b3a76badf09 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 2 Dec 2021 18:34:03 +0800 Subject: [PATCH 0536/2002] Committed 2021/12/2 --- .../Symbolic Computations.py | 4 ++++ .../example_symbolic.py | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 Chapter5 - Some More Python Essentials/example_symbolic.py diff --git a/Chapter5 - Some More Python Essentials/Symbolic Computations.py b/Chapter5 - Some More Python Essentials/Symbolic Computations.py index aa60bb08..14ea5e5b 100644 --- a/Chapter5 - Some More Python Essentials/Symbolic Computations.py +++ b/Chapter5 - Some More Python Essentials/Symbolic Computations.py @@ -5,3 +5,7 @@ z = x * y print(z) + +x, y = sym.symbols('x y') # define x and y as a mathematical symbols. +z = x * y +print(z) diff --git a/Chapter5 - Some More Python Essentials/example_symbolic.py b/Chapter5 - Some More Python Essentials/example_symbolic.py new file mode 100644 index 00000000..221f2da0 --- /dev/null +++ b/Chapter5 - Some More Python Essentials/example_symbolic.py @@ -0,0 +1,13 @@ +import sympy as sym + +x = 2 +y = 3 +z = x * y + +x, y = sym.symbols('x y') + +print(2 * x + 3*x - y) # Algebraic computation +print(sym.diff(x**2, x)) # Differentiate x**2 wrt. x +print(sym.integrate(sym.cos(x), x)) # Integrates cos(x) wrt. x +print(sym.simplify((x ** 2 + x ** 3) / x ** 2)) # Simplifies expression + From ea8fdfd25f1b69e40406ad433bacd6b7e32cb361 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 2 Dec 2021 20:14:09 +0800 Subject: [PATCH 0537/2002] Committed 2021/12/2 --- Chapter5 - Some More Python Essentials/example_symbolic.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Chapter5 - Some More Python Essentials/example_symbolic.py b/Chapter5 - Some More Python Essentials/example_symbolic.py index 221f2da0..685ed880 100644 --- a/Chapter5 - Some More Python Essentials/example_symbolic.py +++ b/Chapter5 - Some More Python Essentials/example_symbolic.py @@ -10,4 +10,5 @@ print(sym.diff(x**2, x)) # Differentiate x**2 wrt. x print(sym.integrate(sym.cos(x), x)) # Integrates cos(x) wrt. x print(sym.simplify((x ** 2 + x ** 3) / x ** 2)) # Simplifies expression - +print(sym.limit(sym.sin(x) / x, x, 0)) # lim of sin(x)/x as x -> 0 +print(sym.solve(5 * x - 15, x)) # Solve 5 * x = 15 From fb9b8b97ed770b620a61c6d6d382ee39948f6f0e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 3 Dec 2021 02:43:50 +0800 Subject: [PATCH 0538/2002] Committed 2021/12/02 --- Chapter5 - Some More Python Essentials/Analytically.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Chapter5 - Some More Python Essentials/Analytically.py diff --git a/Chapter5 - Some More Python Essentials/Analytically.py b/Chapter5 - Some More Python Essentials/Analytically.py new file mode 100644 index 00000000..dce23969 --- /dev/null +++ b/Chapter5 - Some More Python Essentials/Analytically.py @@ -0,0 +1,10 @@ +import sympy as sym + +x = sym.symbols('x') + +f_expr = 5*x**3 + 2*x**2 - 1 # Symbolic expression for f(x) + +dfdx_expr = sym.diff(f_expr, x) # Compute f'(x) symbolically + +# turn symbolic expressions into functions +f = sym.lambdify([x]) From 445b6195562296103f0a7b7944c7d085c73945dd Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 3 Dec 2021 02:47:22 +0800 Subject: [PATCH 0539/2002] Committed 2021/12/02 --- Chapter5 - Some More Python Essentials/Analytically.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Chapter5 - Some More Python Essentials/Analytically.py b/Chapter5 - Some More Python Essentials/Analytically.py index dce23969..dab1ccfe 100644 --- a/Chapter5 - Some More Python Essentials/Analytically.py +++ b/Chapter5 - Some More Python Essentials/Analytically.py @@ -7,4 +7,4 @@ dfdx_expr = sym.diff(f_expr, x) # Compute f'(x) symbolically # turn symbolic expressions into functions -f = sym.lambdify([x]) +f = sym.lambdify([x], f_expr) # f = lambda x: 5*x**3 + 2*x**2 - 1 From d4f4798d994e9286c4858a5093703a94941cba61 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 3 Dec 2021 03:00:51 +0800 Subject: [PATCH 0540/2002] Committed 2021/12/02 --- Chapter5 - Some More Python Essentials/Analytically.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Chapter5 - Some More Python Essentials/Analytically.py b/Chapter5 - Some More Python Essentials/Analytically.py index dab1ccfe..0d67891d 100644 --- a/Chapter5 - Some More Python Essentials/Analytically.py +++ b/Chapter5 - Some More Python Essentials/Analytically.py @@ -8,3 +8,6 @@ # turn symbolic expressions into functions f = sym.lambdify([x], f_expr) # f = lambda x: 5*x**3 + 2*x**2 - 1 +dfdx = sym.lambdify([x], dfdx_expr) # dfdx = lambda x: 15*x**2 4*x + +print(f(1), dfdx(1)) # Call and print, x = 1 From 645ae78e97d4a8baae41a7124c530af144d757ab Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 6 Dec 2021 13:20:30 +0800 Subject: [PATCH 0541/2002] Committed 2021/12/06 --- NetworkX Altas/Directed graph.py | 8 ++++++++ NetworkX Altas/__init__.py | 0 2 files changed, 8 insertions(+) create mode 100644 NetworkX Altas/Directed graph.py create mode 100644 NetworkX Altas/__init__.py diff --git a/NetworkX Altas/Directed graph.py b/NetworkX Altas/Directed graph.py new file mode 100644 index 00000000..097bd787 --- /dev/null +++ b/NetworkX Altas/Directed graph.py @@ -0,0 +1,8 @@ +import networkx as nx +import matplotlib.pyplot as plt + +triangle_graph = nx.from_edgelist([(1, 2), (2, 3), (3, 1)], create_using=nx.DiGraph) +nx.draw_planar(triangle_graph, with_labels=True, node_size=1000, node_color="#ffff8f", + width=0.8, font_size=14) + +plt.show() diff --git a/NetworkX Altas/__init__.py b/NetworkX Altas/__init__.py new file mode 100644 index 00000000..e69de29b From 74d1e09bfa5acc19803cd31b3d6657a5f376c1ce Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 6 Dec 2021 13:36:29 +0800 Subject: [PATCH 0542/2002] Committed 2021/12/06 --- NetworkX Altas/An undirected graph.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 NetworkX Altas/An undirected graph.py diff --git a/NetworkX Altas/An undirected graph.py b/NetworkX Altas/An undirected graph.py new file mode 100644 index 00000000..09a6d3ec --- /dev/null +++ b/NetworkX Altas/An undirected graph.py @@ -0,0 +1,15 @@ +import networkx as nx +import matplotlib.pyplot as plt + +vertices = range(1, 13) + +edges = [(2, 8), (2, 3), (2, 6), (3, 0), (3, 9), (0, 1), (0, 10), (9, 10), (1, 4), (10, 11), (4, 5), + (11, 12), (12, 5), (5, 7)] + +directed_acyclic_graph = nx.Graph() +directed_acyclic_graph.add_nodes_from(vertices) +directed_acyclic_graph.add_edges_from(edges) + +nx.draw(G=directed_acyclic_graph) + +plt.show() From fbb42cc15b5c9212a485e235555be52a553343e2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 6 Dec 2021 13:40:50 +0800 Subject: [PATCH 0543/2002] Committed 2021/12/06 --- NetworkX Altas/Undirected graph.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 NetworkX Altas/Undirected graph.py diff --git a/NetworkX Altas/Undirected graph.py b/NetworkX Altas/Undirected graph.py new file mode 100644 index 00000000..fc22cba8 --- /dev/null +++ b/NetworkX Altas/Undirected graph.py @@ -0,0 +1,15 @@ +import networkx as nx +import matplotlib.pyplot as plt + +vertices = range(1, 13) + +edges = [(2, 8), (2, 3), (2, 6), (3, 0), (3, 9), (0, 1), (0, 10), (9, 10), (1, 4), (10, 11), (4, 5), + (11, 12), (12, 5), (5, 7)] + +directed_acyclic_graph = nx.Graph() +directed_acyclic_graph.add_nodes_from(vertices) +directed_acyclic_graph.add_edges_from(edges) + +nx.draw(G=directed_acyclic_graph, with_labels=True, node_color='y', node_size=800) + +plt.show() From b93748c79714573638786c73e5ab919aaa5e0e23 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 6 Dec 2021 13:54:40 +0800 Subject: [PATCH 0544/2002] Committed 2021/12/06 --- NetworkX Altas/An directed graph.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 NetworkX Altas/An directed graph.py diff --git a/NetworkX Altas/An directed graph.py b/NetworkX Altas/An directed graph.py new file mode 100644 index 00000000..549d3535 --- /dev/null +++ b/NetworkX Altas/An directed graph.py @@ -0,0 +1,16 @@ +import networkx as nx +import matplotlib.pyplot as plt + +vertices = range(1, 13) + +edges = [(2, 8), (2, 3), (2, 6), (3, 0), (3, 9), (0, 1), (0, 10), (9, 10), (1, 4), (10, 11), (4, 5), + (11, 12), (12, 5), (5, 7)] + +directed_graph = nx.DiGraph() + +directed_graph.add_edges_from(edges) +directed_graph.add_nodes_from(vertices) + +nx.draw(G=directed_graph, with_labels=True, node_color='y', node_size=800) + +plt.draw() From e18cb158ca577556d67d77331b5746718d65d1fc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 6 Dec 2021 14:01:59 +0800 Subject: [PATCH 0545/2002] Committed 2021/12/06 --- NetworkX Altas/An directed graph.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/An directed graph.py b/NetworkX Altas/An directed graph.py index 549d3535..3830a491 100644 --- a/NetworkX Altas/An directed graph.py +++ b/NetworkX Altas/An directed graph.py @@ -13,4 +13,4 @@ nx.draw(G=directed_graph, with_labels=True, node_color='y', node_size=800) -plt.draw() +plt.show() From eba25321736a431129dfa6073c574dcbb6c675a2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 6 Dec 2021 14:50:56 +0800 Subject: [PATCH 0546/2002] Committed 2021/12/06 --- NetworkX Altas/Circuits.py | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 NetworkX Altas/Circuits.py diff --git a/NetworkX Altas/Circuits.py b/NetworkX Altas/Circuits.py new file mode 100644 index 00000000..03eaa9a7 --- /dev/null +++ b/NetworkX Altas/Circuits.py @@ -0,0 +1,44 @@ +import matplotlib.pyplot as plt +import networkx as nx + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + + + From 320353374b040526c40c1c20eeecc0f762846d67 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 6 Dec 2021 14:53:04 +0800 Subject: [PATCH 0547/2002] Committed 2021/12/06 --- NetworkX Altas/Circuits.py | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/NetworkX Altas/Circuits.py b/NetworkX Altas/Circuits.py index 03eaa9a7..53f7ad97 100644 --- a/NetworkX Altas/Circuits.py +++ b/NetworkX Altas/Circuits.py @@ -40,5 +40,44 @@ def _to_string(formula, root): return _to_string(formula, root) +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="", layer=0) +# Layer 1 +circuit.add_node(1, label="", layer=1) +circuit.add_node(2, label="", layer=1) +circuit.add_edge(0, 1) +circuit.add_edge(0, 2) +# Layer 2 +circuit.add_node(3, label="x", layer=2) +circuit.add_node(4, label="y", layer=2) +circuit.add_node(5, label="竅", layer=2) +circuit.add_edge(1, 3) +circuit.add_edge(1, 4) +circuit.add_edge(2, 4) +circuit.add_edge(2, 5) +# Layer 3 +circuit.add_node(6, label="z", layer=3) +circuit.add_edge(5, 6) +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) +labels = nx.get_node_attributes(circuit, "label") +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +# Source: https://networkx.org/documentation/stable/auto_examples/algorithms/plot_circuits.html#sphx-glr-auto-examples-algorithms-plot-circuits-py + From 275f78af96a123d9ecf92693d01ce970a426fed1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 9 Dec 2021 00:38:20 +0800 Subject: [PATCH 0548/2002] Committed 2021/12/08 --- NetworkX Altas/Page209.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 NetworkX Altas/Page209.py diff --git a/NetworkX Altas/Page209.py b/NetworkX Altas/Page209.py new file mode 100644 index 00000000..f5c8fa64 --- /dev/null +++ b/NetworkX Altas/Page209.py @@ -0,0 +1,17 @@ +import networkx as nx +import matplotlib.pyplot as plt + +vertices = ['A', 'B', 'C', 'D', 'E'] + +edges = [('A', 'B'), ('B', 'C'), ('B', 'D'), ('C', 'E'), ('E', 'D'), ('D', 'C')] + +directed_graph = nx.DiGraph() + +directed_graph.add_nodes_from(vertices) +directed_graph.add_edges_from(edges) + +nx.draw(G=directed_graph) + +nx.draw_planar(G=directed_graph) + +plt.show() From f93caa01292288519bb02ef163cbe8512bdc50fc Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 10 Dec 2021 13:30:49 +0800 Subject: [PATCH 0549/2002] Committed 2021/12/10 --- NetworkX Altas/Dijkstra's algorithm.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 NetworkX Altas/Dijkstra's algorithm.py diff --git a/NetworkX Altas/Dijkstra's algorithm.py b/NetworkX Altas/Dijkstra's algorithm.py new file mode 100644 index 00000000..c0bbed9a --- /dev/null +++ b/NetworkX Altas/Dijkstra's algorithm.py @@ -0,0 +1,12 @@ +import matplotlib.pyplot as plt +import networkx as nx + +graph = nx.Graph() + +edge = [('a', 'b', 0.3), ('b', 'c', 0.9), ('a', 'c', 0.5), ('c', 'd', 1.2)] + +graph.add_weighted_edges_from(edge) + +nx.draw(graph) + +plt.show() From 092528038ca8997f44f355b4ea3110f8dfc0c5e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 10 Dec 2021 14:08:05 +0800 Subject: [PATCH 0550/2002] Committed 2021/12/10 --- NetworkX Altas/Dijkstra's algorithm2.py | 12 ++++++++++++ NetworkX Altas/cosine.py | 13 +++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 NetworkX Altas/Dijkstra's algorithm2.py create mode 100644 NetworkX Altas/cosine.py diff --git a/NetworkX Altas/Dijkstra's algorithm2.py b/NetworkX Altas/Dijkstra's algorithm2.py new file mode 100644 index 00000000..fc09a982 --- /dev/null +++ b/NetworkX Altas/Dijkstra's algorithm2.py @@ -0,0 +1,12 @@ +import matplotlib.pyplot as plt +import networkx as nx + +graph = nx.Graph() + +edge = [('a', 'b', 0.3), ('b', 'c', 0.9), ('a', 'c', 0.5), ('c', 'd', 1.2)] + +graph.add_weighted_edges_from(edge) + +nx.draw_planar(G=graph, with_labels=True, node_color='y', node_size=800, font_size=14, width=0.8) + +plt.show() diff --git a/NetworkX Altas/cosine.py b/NetworkX Altas/cosine.py new file mode 100644 index 00000000..8aebfb62 --- /dev/null +++ b/NetworkX Altas/cosine.py @@ -0,0 +1,13 @@ +import math + +import matplotlib.pyplot as plt +import networkx as nx + +graph = nx.Graph() + +graph.add_edge('y', 'x', function=math.cos) +graph.add_node(math.cos) + +nx.draw_planar(G=graph) + +plt.show() From 26d110aa9b9fd524fe0db89b817a3553cbd7d4c3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 10 Dec 2021 14:19:13 +0800 Subject: [PATCH 0551/2002] Committed 2021/12/10 --- NetworkX Altas/Dijkstra's algorithm2.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NetworkX Altas/Dijkstra's algorithm2.py b/NetworkX Altas/Dijkstra's algorithm2.py index fc09a982..497cd619 100644 --- a/NetworkX Altas/Dijkstra's algorithm2.py +++ b/NetworkX Altas/Dijkstra's algorithm2.py @@ -10,3 +10,5 @@ nx.draw_planar(G=graph, with_labels=True, node_color='y', node_size=800, font_size=14, width=0.8) plt.show() + +print(nx.dijkstra_path(G=graph, source='a', target='d')) From 566bb3345cb88676b015199e5d543d808b0256be Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 10 Dec 2021 14:34:18 +0800 Subject: [PATCH 0552/2002] Committed 2021/12/10 --- NetworkX Altas/Dijkstra's algorithm3.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 NetworkX Altas/Dijkstra's algorithm3.py diff --git a/NetworkX Altas/Dijkstra's algorithm3.py b/NetworkX Altas/Dijkstra's algorithm3.py new file mode 100644 index 00000000..22181c59 --- /dev/null +++ b/NetworkX Altas/Dijkstra's algorithm3.py @@ -0,0 +1,20 @@ +import matplotlib.pyplot as plt +import networkx as nx + +graph = nx.Graph() + +edge = [('0', '1', 2.02), ('0', '3', 4.45), + ('0', '10', 6.2), ('1', '4', 1.7), + ('4', '5', 3.28), ('5', '7', 4.28), + ('1', '10', 5.8), ('5', '12', 3.3), + ('10', '11', 1.67), ('11', '12', 2.16), + ('9', '10', 2.32), ('3', '9', 5.02), + ] + +graph.add_weighted_edges_from(edge) + +nx.draw_planar(G=graph, with_labels=True, node_color='y', node_size=800, font_size=14, width=0.8) + +plt.show() + +print(nx.dijkstra_path(G=graph, source='0', target='12')) From 974040fd3725c11de3807340f994fb0f47608a8e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 11 Dec 2021 13:01:17 +0800 Subject: [PATCH 0553/2002] Committed 2021/12/11 --- .../September2021_bar_table.py | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py new file mode 100644 index 00000000..e5219bd7 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py @@ -0,0 +1,101 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 7)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [73, 146, 145, 178, 190, 193]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [73, 146, 145, 178, 190, 193], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 253110721da2f4a855fed80e97b64a821f62d5e9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 11 Dec 2021 13:07:38 +0800 Subject: [PATCH 0554/2002] Committed 2021/12/11 --- .../Month_over_month_2021/September2021_bar_table.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py index e5219bd7..3f0fe219 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py @@ -8,7 +8,7 @@ month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] -month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"] deaths = [[14, 30, 18, 28, 31, 31], # January [9, 25, 20, 18, 31, 39], # February @@ -17,6 +17,8 @@ [10, 21, 22, 22, 37, 34], # May [9, 17, 24, 23, 29, 20], # June [7, 23, 22, 27, 18, 16], # July + [10, 21, 27, 13, 17, 15], # August + [13, 20, 32, 22, 26, 29], # September ] df = pd.DataFrame(data=deaths, @@ -69,7 +71,7 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-07)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-09)") axes.grid(True) # pyplot.grid [1][2] From c7cda3013d693af5f1702f46bccdb04d6b6d9e80 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 11 Dec 2021 13:14:54 +0800 Subject: [PATCH 0555/2002] Committed 2021/12/11 --- .../Month_over_month_2021/September2021_bar_table.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py index 3f0fe219..4b93117a 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table.py @@ -75,9 +75,9 @@ axes.grid(True) # pyplot.grid [1][2] -axes2.bar(administrative_duty, [73, 146, 145, 178, 190, 193]) +axes2.bar(administrative_duty, [96, 187, 204, 213, 233, 237]) axes2.bar_label(axes2.containers[0], label_type='edge') -axes2.plot(administrative_duty, [73, 146, 145, 178, 190, 193], '-o', color='orange') +axes2.plot(administrative_duty, [96, 187, 204, 213, 233, 237], '-o', color='orange') figure.tight_layout() From 004553a93887791d006c789393fc00c73fb9074b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 11 Dec 2021 13:27:13 +0800 Subject: [PATCH 0556/2002] Committed 2021/12/11 --- .../September2021_bar_table_2.py | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py new file mode 100644 index 00000000..4b93117a --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py @@ -0,0 +1,103 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + [10, 21, 27, 13, 17, 15], # August + [13, 20, 32, 22, 26, 29], # September + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 7)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-09)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [96, 187, 204, 213, 233, 237]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [96, 187, 204, 213, 233, 237], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 39748995ed46faeb74b96500656a9648dca4c28d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 11 Dec 2021 13:32:59 +0800 Subject: [PATCH 0557/2002] Committed 2021/12/11 --- .../Month_over_month_2021/September2021_bar_table_2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py index 4b93117a..93f8f46e 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py @@ -36,7 +36,7 @@ index = np.arange(len(administrative_duty)) + 0.3 bar_width = 0.4 -figure, (axes, axes2) = plt.subplots(2, figsize=(9, 7)) +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 9)) # Initialize the vertical-offset for the stacked bar chart. y_offset = np.zeros(len(administrative_duty)) From a06165e0fabb427dea499b4392288978b45f3cb9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 11 Dec 2021 13:48:17 +0800 Subject: [PATCH 0558/2002] Committed 2021/12/11 --- .../Month_over_month_2021/September2021_bar_table_2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py index 93f8f46e..06e2a27a 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/September2021_bar_table_2.py @@ -36,7 +36,7 @@ index = np.arange(len(administrative_duty)) + 0.3 bar_width = 0.4 -figure, (axes, axes2) = plt.subplots(2, figsize=(9, 9)) +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) # Initialize the vertical-offset for the stacked bar chart. y_offset = np.zeros(len(administrative_duty)) From 1fb26abcb62ec9e0cdbc701a7c96c0da2c7983c0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 12 Dec 2021 14:37:48 +0800 Subject: [PATCH 0559/2002] Committed 2021/12/12 --- NetworkX Altas/Dijkstra's algorithms4.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 NetworkX Altas/Dijkstra's algorithms4.py diff --git a/NetworkX Altas/Dijkstra's algorithms4.py b/NetworkX Altas/Dijkstra's algorithms4.py new file mode 100644 index 00000000..22181c59 --- /dev/null +++ b/NetworkX Altas/Dijkstra's algorithms4.py @@ -0,0 +1,20 @@ +import matplotlib.pyplot as plt +import networkx as nx + +graph = nx.Graph() + +edge = [('0', '1', 2.02), ('0', '3', 4.45), + ('0', '10', 6.2), ('1', '4', 1.7), + ('4', '5', 3.28), ('5', '7', 4.28), + ('1', '10', 5.8), ('5', '12', 3.3), + ('10', '11', 1.67), ('11', '12', 2.16), + ('9', '10', 2.32), ('3', '9', 5.02), + ] + +graph.add_weighted_edges_from(edge) + +nx.draw_planar(G=graph, with_labels=True, node_color='y', node_size=800, font_size=14, width=0.8) + +plt.show() + +print(nx.dijkstra_path(G=graph, source='0', target='12')) From 8624a004571dff55317e01088b8e968dc3d18c64 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 12 Dec 2021 14:41:55 +0800 Subject: [PATCH 0560/2002] Committed 2021/12/12 --- NetworkX Altas/Dijkstra's algorithms4.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NetworkX Altas/Dijkstra's algorithms4.py b/NetworkX Altas/Dijkstra's algorithms4.py index 22181c59..2167b78c 100644 --- a/NetworkX Altas/Dijkstra's algorithms4.py +++ b/NetworkX Altas/Dijkstra's algorithms4.py @@ -18,3 +18,5 @@ plt.show() print(nx.dijkstra_path(G=graph, source='0', target='12')) + +print(nx.dijkstra_path_length(G=graph, source='0', target='12')) From 95efd9ad849062afaea63f34bc6d26a070963c0c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 12 Dec 2021 14:47:38 +0800 Subject: [PATCH 0561/2002] Committed 2021/12/12 --- NetworkX Altas/Dijkstra's algorithms4.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NetworkX Altas/Dijkstra's algorithms4.py b/NetworkX Altas/Dijkstra's algorithms4.py index 2167b78c..7b557592 100644 --- a/NetworkX Altas/Dijkstra's algorithms4.py +++ b/NetworkX Altas/Dijkstra's algorithms4.py @@ -20,3 +20,6 @@ print(nx.dijkstra_path(G=graph, source='0', target='12')) print(nx.dijkstra_path_length(G=graph, source='0', target='12')) + +# Further reading: +# https://networkx.org/documentation/stable/reference/algorithms/shortest_paths.html From ffb0ea7bd814f121dbbb8c98c24e7ea077536c42 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 12 Dec 2021 15:15:22 +0800 Subject: [PATCH 0562/2002] Committed 2021/12/12 --- NetworkX Altas/Degree centrality.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 NetworkX Altas/Degree centrality.py diff --git a/NetworkX Altas/Degree centrality.py b/NetworkX Altas/Degree centrality.py new file mode 100644 index 00000000..66e41fcc --- /dev/null +++ b/NetworkX Altas/Degree centrality.py @@ -0,0 +1,20 @@ +import matplotlib.pyplot as plt +import networkx as nx + +graph = nx.Graph() + +edge = [('0', '1', 2.02), ('0', '3', 4.45), + ('0', '10', 6.2), ('1', '4', 1.7), + ('4', '5', 3.28), ('5', '7', 4.28), + ('1', '10', 5.8), ('5', '12', 3.3), + ('10', '11', 1.67), ('11', '12', 2.16), + ('9', '10', 2.32), ('3', '9', 5.02), + ] + +graph.add_weighted_edges_from(edge) + +nx.draw_planar(G=graph, with_labels=True, node_color='y', node_size=800, font_size=14, width=0.8) + +plt.show() + + From ae2e106ebf9df18b281ac922c12fdf93a07b966e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 12 Dec 2021 15:20:18 +0800 Subject: [PATCH 0563/2002] Committed 2021/12/12 --- NetworkX Altas/Degree centrality.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NetworkX Altas/Degree centrality.py b/NetworkX Altas/Degree centrality.py index 66e41fcc..22e602f5 100644 --- a/NetworkX Altas/Degree centrality.py +++ b/NetworkX Altas/Degree centrality.py @@ -17,4 +17,8 @@ plt.show() +print(nx.algorithms.centrality.degree_centrality(G=graph)) +# Further reading: +# 1. https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.centrality.degree_centrality.html#networkx.algorithms.centrality.degree_centrality +# 2. https://networkx.org/documentation/stable/reference/algorithms/centrality.html From 34d8b58494d6f842611ccb9d7ec481b84ee740b1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 12 Dec 2021 18:50:20 +0800 Subject: [PATCH 0564/2002] Committed 2021/12/12 --- NetworkX Altas/Dijkstra's algorithm2.py | 3 +++ NetworkX Altas/Directed graph.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/NetworkX Altas/Dijkstra's algorithm2.py b/NetworkX Altas/Dijkstra's algorithm2.py index 497cd619..c3d9a0d4 100644 --- a/NetworkX Altas/Dijkstra's algorithm2.py +++ b/NetworkX Altas/Dijkstra's algorithm2.py @@ -12,3 +12,6 @@ plt.show() print(nx.dijkstra_path(G=graph, source='a', target='d')) + +# Reference: +# 1.https://networkx.org/documentation/stable/reference/introduction.html#algorithms diff --git a/NetworkX Altas/Directed graph.py b/NetworkX Altas/Directed graph.py index 097bd787..08f8586e 100644 --- a/NetworkX Altas/Directed graph.py +++ b/NetworkX Altas/Directed graph.py @@ -6,3 +6,5 @@ width=0.8, font_size=14) plt.show() + +# Reference: https://networkx.org/nx-guides/content/algorithms/dag/index.html From 8ccdbfbae24300c49c4dc068d421a38e9a5e59ef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Dec 2021 18:11:01 +0800 Subject: [PATCH 0565/2002] Committed 2021/12/13 --- NetworkX Altas/Kernighan Partition.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 NetworkX Altas/Kernighan Partition.py diff --git a/NetworkX Altas/Kernighan Partition.py b/NetworkX Altas/Kernighan Partition.py new file mode 100644 index 00000000..279bda92 --- /dev/null +++ b/NetworkX Altas/Kernighan Partition.py @@ -0,0 +1,18 @@ +import matplotlib.pyplot as plt +import networkx as nx + +graph = nx.Graph() + +edge = [('0', '1', 2.02), ('0', '3', 4.45), + ('0', '10', 6.2), ('1', '4', 1.7), + ('4', '5', 3.28), ('5', '7', 4.28), + ('1', '10', 5.8), ('5', '12', 3.3), + ('10', '11', 1.67), ('11', '12', 2.16), + ('9', '10', 2.32), ('3', '9', 5.02), + ] + +graph.add_weighted_edges_from(edge) + +result = nx.algorithms.community.kernighan_lin_bisection(G=graph) + +print(result) From e3399d723c783f09db8dd59022cd6721b6b8d2cd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Dec 2021 19:34:04 +0800 Subject: [PATCH 0566/2002] Committed 2021/12/13 --- NetworkX Altas/Kernighan Partition.py | 4 ++++ NetworkX Altas/Prim's algorithm.py | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 NetworkX Altas/Prim's algorithm.py diff --git a/NetworkX Altas/Kernighan Partition.py b/NetworkX Altas/Kernighan Partition.py index 279bda92..3ea08405 100644 --- a/NetworkX Altas/Kernighan Partition.py +++ b/NetworkX Altas/Kernighan Partition.py @@ -16,3 +16,7 @@ result = nx.algorithms.community.kernighan_lin_bisection(G=graph) print(result) + +nx.draw_planar(G=graph, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) + +plt.show() diff --git a/NetworkX Altas/Prim's algorithm.py b/NetworkX Altas/Prim's algorithm.py new file mode 100644 index 00000000..c374f8dc --- /dev/null +++ b/NetworkX Altas/Prim's algorithm.py @@ -0,0 +1,13 @@ +from networkx.algorithms import tree +import networkx as nx + +G = nx.cycle_graph(4) +G.add_edge(0, 3, weight=2) + +nx.draw_planar(G=G, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) + +mst = tree.minimum_spanning_edges(G, algorithm="prim", data=False) + +edgelist = list(mst) + +print(sorted(sorted(e) for e in edgelist)) From 187c91c831df8b9074b2e15b4d15aafdd5dfa22a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 13 Dec 2021 19:36:59 +0800 Subject: [PATCH 0567/2002] Committed 2021/12/13 --- NetworkX Altas/Prim's algorithm.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/NetworkX Altas/Prim's algorithm.py b/NetworkX Altas/Prim's algorithm.py index c374f8dc..fe76716e 100644 --- a/NetworkX Altas/Prim's algorithm.py +++ b/NetworkX Altas/Prim's algorithm.py @@ -1,13 +1,19 @@ from networkx.algorithms import tree import networkx as nx +import matplotlib.pyplot as plt G = nx.cycle_graph(4) G.add_edge(0, 3, weight=2) nx.draw_planar(G=G, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) +plt.show() + mst = tree.minimum_spanning_edges(G, algorithm="prim", data=False) edgelist = list(mst) print(sorted(sorted(e) for e in edgelist)) + +# Reference: +# https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.tree.mst.minimum_spanning_edges.html From 1cadcfad8a344956134fd4fe51102af8b2bcd8a8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 15 Dec 2021 14:34:24 +0800 Subject: [PATCH 0568/2002] Committed 2021/12/15 --- NetworkX Altas/Bipartite.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 NetworkX Altas/Bipartite.py diff --git a/NetworkX Altas/Bipartite.py b/NetworkX Altas/Bipartite.py new file mode 100644 index 00000000..d2f7433c --- /dev/null +++ b/NetworkX Altas/Bipartite.py @@ -0,0 +1,15 @@ +from networkx.algorithms import bipartite +import networkx as nx +import matplotlib.pyplot as plt + +B = nx.Graph() + +# Add nodes with the node attribute "bipartite" +B.add_nodes_from([1, 2, 3, 4], bipartite=0) +B.add_nodes_from(["a", "b", "c"], bipartite=1) + +# Add edges only between nodes of opposite node sets +B.add_edges_from([(1, "a"), (1, "b"), (2, "b"), (2, "c"), (3, "c"), (4, "a")]) + +c = bipartite.color(G=B) +print(c) From cc8f6c3bbaa7b7b3ec96c5bbc42967b18880ddef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 15 Dec 2021 14:56:28 +0800 Subject: [PATCH 0569/2002] Committed 2021/12/15 --- NetworkX Altas/Bipartite.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NetworkX Altas/Bipartite.py b/NetworkX Altas/Bipartite.py index d2f7433c..a7745722 100644 --- a/NetworkX Altas/Bipartite.py +++ b/NetworkX Altas/Bipartite.py @@ -13,3 +13,7 @@ c = bipartite.color(G=B) print(c) + +nx.draw_planar(G=B, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) + +plt.show() From 070dfb9e7715ebd96e0935ed64f93f9d57feda87 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 16 Dec 2021 09:58:58 +0800 Subject: [PATCH 0570/2002] Committed 2021/12/16 --- NetworkX Altas/Circuits2.py | 45 +++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 NetworkX Altas/Circuits2.py diff --git a/NetworkX Altas/Circuits2.py b/NetworkX Altas/Circuits2.py new file mode 100644 index 00000000..4542703d --- /dev/null +++ b/NetworkX Altas/Circuits2.py @@ -0,0 +1,45 @@ +import matplotlib.pyplot as plt +import networkx as nx + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 + From 794e6dedddf509a8888656c3d733d00807d4c6bb Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 16 Dec 2021 12:10:11 +0800 Subject: [PATCH 0571/2002] Committed 2021/12/16 --- NetworkX Altas/Circuits2.py | 30 ++++++++++ .../Identifying trees in a circuit.py | 56 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 NetworkX Altas/Identifying trees in a circuit.py diff --git a/NetworkX Altas/Circuits2.py b/NetworkX Altas/Circuits2.py index 4542703d..e5071ab6 100644 --- a/NetworkX Altas/Circuits2.py +++ b/NetworkX Altas/Circuits2.py @@ -42,4 +42,34 @@ def _to_string(formula, root): circuit = nx.DiGraph() # Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) + +# Layer 1 +circuit.add_node(3, label="PO1", layer=1) + +circuit.add_edge(0, 3) +circuit.add_edge(1, 3) +circuit.add_edge(2, 3) + + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() diff --git a/NetworkX Altas/Identifying trees in a circuit.py b/NetworkX Altas/Identifying trees in a circuit.py new file mode 100644 index 00000000..8c33ade9 --- /dev/null +++ b/NetworkX Altas/Identifying trees in a circuit.py @@ -0,0 +1,56 @@ +import matplotlib.pyplot as plt +import networkx as nx + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) + +# Layer 1 +circuit.add_node(3, label="PO1", layer=1) + +circuit.add_edge(0, 3) +circuit.add_edge(1, 3) +circuit.add_edge(2, 3) + + From daaed59afaf62240fb62eb556aa3922c21220248 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 16 Dec 2021 12:10:34 +0800 Subject: [PATCH 0572/2002] Committed 2021/12/16 --- .../Identifying trees in a circuit.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/NetworkX Altas/Identifying trees in a circuit.py b/NetworkX Altas/Identifying trees in a circuit.py index 8c33ade9..349cabd4 100644 --- a/NetworkX Altas/Identifying trees in a circuit.py +++ b/NetworkX Altas/Identifying trees in a circuit.py @@ -54,3 +54,21 @@ def _to_string(formula, root): circuit.add_edge(2, 3) +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() From 8bcd5ae5a92cbebf897f834663b82b9886567c08 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 16 Dec 2021 14:03:21 +0800 Subject: [PATCH 0573/2002] Committed 2021/12/16 --- NetworkX Altas/Identifying trees in a circuit.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NetworkX Altas/Identifying trees in a circuit.py b/NetworkX Altas/Identifying trees in a circuit.py index 349cabd4..1f50621e 100644 --- a/NetworkX Altas/Identifying trees in a circuit.py +++ b/NetworkX Altas/Identifying trees in a circuit.py @@ -45,6 +45,8 @@ def _to_string(formula, root): circuit.add_node(0, label="PI1", layer=0) circuit.add_node(1, label="PI2", layer=0) circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(5, label="PI5", layer=0) # Layer 1 circuit.add_node(3, label="PO1", layer=1) From e2322408ad3b73b5b85947a65061a58e397f524f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 16 Dec 2021 15:22:49 +0800 Subject: [PATCH 0574/2002] Committed 2021/12/16 --- .../Identifying trees in a circuit.py | 49 +++++++- .../Identifying trees in a circuit2.py | 116 ++++++++++++++++++ 2 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 NetworkX Altas/Identifying trees in a circuit2.py diff --git a/NetworkX Altas/Identifying trees in a circuit.py b/NetworkX Altas/Identifying trees in a circuit.py index 1f50621e..8ac4aed3 100644 --- a/NetworkX Altas/Identifying trees in a circuit.py +++ b/NetworkX Altas/Identifying trees in a circuit.py @@ -46,21 +46,59 @@ def _to_string(formula, root): circuit.add_node(1, label="PI2", layer=0) circuit.add_node(2, label="PI3", layer=0) circuit.add_node(3, label="PI4", layer=0) -circuit.add_node(5, label="PI5", layer=0) +circuit.add_node(4, label="PI5", layer=0) # Layer 1 -circuit.add_node(3, label="PO1", layer=1) +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) -circuit.add_edge(0, 3) -circuit.add_edge(1, 3) -circuit.add_edge(2, 3) +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) +circuit.add_edge(4, 12) +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) # Convert the circuit to an equivalent formula. formula = circuit_to_formula(circuit) print(formula_to_string(formula)) labels = nx.get_node_attributes(circuit, "label") + options = { "node_size": 600, "alpha": 0.5, @@ -68,6 +106,7 @@ def _to_string(formula, root): "labels": labels, "font_size": 22, } + plt.figure(figsize=(8, 8)) pos = nx.multipartite_layout(circuit, subset_key="layer") nx.draw_networkx(circuit, pos, **options) diff --git a/NetworkX Altas/Identifying trees in a circuit2.py b/NetworkX Altas/Identifying trees in a circuit2.py new file mode 100644 index 00000000..bcfd48ce --- /dev/null +++ b/NetworkX Altas/Identifying trees in a circuit2.py @@ -0,0 +1,116 @@ +import matplotlib.pyplot as plt +import networkx as nx + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() From 3a01da21f5d10b6f7e227b56dabe37dc3eb0690b Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 16 Dec 2021 15:31:03 +0800 Subject: [PATCH 0575/2002] Committed 2021/12/16 --- .../Identifying trees in a circuit3.py | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 NetworkX Altas/Identifying trees in a circuit3.py diff --git a/NetworkX Altas/Identifying trees in a circuit3.py b/NetworkX Altas/Identifying trees in a circuit3.py new file mode 100644 index 00000000..bcfd48ce --- /dev/null +++ b/NetworkX Altas/Identifying trees in a circuit3.py @@ -0,0 +1,116 @@ +import matplotlib.pyplot as plt +import networkx as nx + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() From 8f6aed5d42aafe1dd4425005ff2abe94953920fa Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 16 Dec 2021 15:56:32 +0800 Subject: [PATCH 0576/2002] Committed 2021/12/16 --- .../Identifying trees in a circuit3.py | 4 + .../Identifying trees in a circuit4.py | 120 ++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 NetworkX Altas/Identifying trees in a circuit4.py diff --git a/NetworkX Altas/Identifying trees in a circuit3.py b/NetworkX Altas/Identifying trees in a circuit3.py index bcfd48ce..528eafd8 100644 --- a/NetworkX Altas/Identifying trees in a circuit3.py +++ b/NetworkX Altas/Identifying trees in a circuit3.py @@ -1,5 +1,6 @@ import matplotlib.pyplot as plt import networkx as nx +import networkx.algorithms.approximation as approximate def circuit_to_formula(circuit): @@ -114,3 +115,6 @@ def _to_string(formula, root): plt.title(formula_to_string(formula)) plt.axis("equal") plt.show() + +print(approximate.steiner_tree(G=circuit, terminal_nodes=[14, 15])) + diff --git a/NetworkX Altas/Identifying trees in a circuit4.py b/NetworkX Altas/Identifying trees in a circuit4.py new file mode 100644 index 00000000..c360d077 --- /dev/null +++ b/NetworkX Altas/Identifying trees in a circuit4.py @@ -0,0 +1,120 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) From e339641bb438273858655b0e1d7d36e79b698d54 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 15:29:39 +0800 Subject: [PATCH 0577/2002] Committed 2021/12/20 --- .../Chapter14 - Reinforcement Learning/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Python Machine Learning by Example/Chapter14 - Reinforcement Learning/__init__.py diff --git a/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/__init__.py b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/__init__.py new file mode 100644 index 00000000..e69de29b From a47e1797099268a1b0577bd9e85c087ed095e5a6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 16:19:27 +0800 Subject: [PATCH 0578/2002] Committed 2021/12/20 --- .../FrozenLake.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py diff --git a/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py new file mode 100644 index 00000000..7ddc56c5 --- /dev/null +++ b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py @@ -0,0 +1,16 @@ +import gym + +environment = gym.make("FrozenLake-v1") + +number_of_state = environment.observation_space.n + +print(number_of_state) + +number_of_action = environment.action_space.n +print(number_of_action) + +environment.render() + +# Take a right action +new_state, reward, is_done, info = environment.step(2) +print(new_state) From 48161ef5d6df1d3b98327909c3ae78d59a09e96f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 16:27:48 +0800 Subject: [PATCH 0579/2002] Committed 2021/12/20 --- .../FrozenLake.py | 2 ++ .../FrozenLake_example_code.py | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake_example_code.py diff --git a/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py index 7ddc56c5..3c6b66d5 100644 --- a/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py +++ b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py @@ -9,6 +9,8 @@ number_of_action = environment.action_space.n print(number_of_action) +environment.reset() + environment.render() # Take a right action diff --git a/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake_example_code.py b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake_example_code.py new file mode 100644 index 00000000..d82023f4 --- /dev/null +++ b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake_example_code.py @@ -0,0 +1,23 @@ + +import gym +import torch + + +env = gym.make("FrozenLake-v0") + +n_state = env.observation_space.n +print(n_state) +n_action = env.action_space.n +print(n_action) + + +env.reset() + +env.render() + +new_state, reward, is_done, info = env.step(2) +env.render() +print(new_state) +print(reward) +print(is_done) +print(info) \ No newline at end of file From 09747e3767583e44d7d91118a9f21f861042bbe9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 16:52:35 +0800 Subject: [PATCH 0580/2002] Committed 2021/12/20 --- .../FrozenLake.py | 18 ++++++++++++++++++ .../FrozenLake_example_code.py | 7 +++---- Supplementary materials/gym/__init__.py | 0 ...mum example of getting something running.py | 13 +++++++++++++ 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 Supplementary materials/gym/__init__.py create mode 100644 Supplementary materials/gym/a bare minimum example of getting something running.py diff --git a/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py index 3c6b66d5..02e8548d 100644 --- a/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py +++ b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake.py @@ -15,4 +15,22 @@ # Take a right action new_state, reward, is_done, info = environment.step(2) +environment.render() + print(new_state) +print(reward) +print(is_done) +print(info) + +def run_episode(environment, policy): + state = environment.reset() + total_reward = 0 + is_done = False + + while not is_done: + action = policy[state].item() + state, reward, is_done, info = environment.step(action) + total_reward += reward + if is_done: + break + return total_reward diff --git a/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake_example_code.py b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake_example_code.py index d82023f4..7e5c8631 100644 --- a/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake_example_code.py +++ b/Python Machine Learning by Example/Chapter14 - Reinforcement Learning/FrozenLake_example_code.py @@ -1,9 +1,6 @@ - import gym -import torch - -env = gym.make("FrozenLake-v0") +env = gym.make("FrozenLake-v1") n_state = env.observation_space.n print(n_state) @@ -15,6 +12,8 @@ env.render() +# Source: https://github.com/PacktPublishing/Python-Machine-Learning-By-Example-Third-Edition/blob/master/chapter14/simulate_frozenlake.py + new_state, reward, is_done, info = env.step(2) env.render() print(new_state) diff --git a/Supplementary materials/gym/__init__.py b/Supplementary materials/gym/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Supplementary materials/gym/a bare minimum example of getting something running.py b/Supplementary materials/gym/a bare minimum example of getting something running.py new file mode 100644 index 00000000..cc015976 --- /dev/null +++ b/Supplementary materials/gym/a bare minimum example of getting something running.py @@ -0,0 +1,13 @@ +import gym + +env = gym.make('CartPole-v0') + +env.reset() + +for _ in range(1000): + env.render() + env.step(env.action_space.sample()) # take a random action + +env.close() + +# Source: https://gym.openai.com/docs/ From e3bc15e12c8886cf68ff8ff380c438305121cc8b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 17:04:13 +0800 Subject: [PATCH 0581/2002] Committed 2021/12/20 --- ...example of getting something running.ipynb | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 Supplementary materials/gym/a bare minimum example of getting something running.ipynb diff --git a/Supplementary materials/gym/a bare minimum example of getting something running.ipynb b/Supplementary materials/gym/a bare minimum example of getting something running.ipynb new file mode 100644 index 00000000..865febc2 --- /dev/null +++ b/Supplementary materials/gym/a bare minimum example of getting something running.ipynb @@ -0,0 +1,79 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "ename": "ImportError", + "evalue": "\n Cannot import pyglet.\n HINT: you can install pyglet directly via 'pip install pyglet'.\n But if you really just want to install all Gym dependencies and not have to think about it,\n 'pip install -e .[all]' or 'pip install gym[all]' will do it.\n ", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mModuleNotFoundError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\rendering.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 14\u001B[0m \u001B[1;32mtry\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 15\u001B[1;33m \u001B[1;32mimport\u001B[0m \u001B[0mpyglet\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 16\u001B[0m \u001B[1;32mexcept\u001B[0m \u001B[0mImportError\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0me\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mModuleNotFoundError\u001B[0m: No module named 'pyglet'", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001B[1;31mImportError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp/ipykernel_9100/4039161985.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 6\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 7\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0m_\u001B[0m \u001B[1;32min\u001B[0m \u001B[0mrange\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;36m1000\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m----> 8\u001B[1;33m \u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 9\u001B[0m \u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mstep\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0maction_space\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0msample\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;31m# take a random action\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 10\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\core.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, mode, **kwargs)\u001B[0m\n\u001B[0;32m 293\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 294\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mmode\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;34m\"human\"\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 295\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmode\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 296\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 297\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mclose\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\cartpole.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, mode)\u001B[0m\n\u001B[0;32m 177\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 178\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mviewer\u001B[0m \u001B[1;32mis\u001B[0m \u001B[1;32mNone\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 179\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0mgym\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0menvs\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mclassic_control\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mrendering\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 180\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 181\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mviewer\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mrendering\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mViewer\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mscreen_width\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mscreen_height\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\rendering.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 21\u001B[0m \u001B[0mBut\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0myou\u001B[0m \u001B[0mreally\u001B[0m \u001B[0mjust\u001B[0m \u001B[0mwant\u001B[0m \u001B[0mto\u001B[0m \u001B[0minstall\u001B[0m \u001B[0mall\u001B[0m \u001B[0mGym\u001B[0m \u001B[0mdependencies\u001B[0m \u001B[1;32mand\u001B[0m \u001B[1;32mnot\u001B[0m \u001B[0mhave\u001B[0m \u001B[0mto\u001B[0m \u001B[0mthink\u001B[0m \u001B[0mabout\u001B[0m \u001B[0mit\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 22\u001B[0m \u001B[1;34m'pip install -e .[all]'\u001B[0m \u001B[1;32mor\u001B[0m \u001B[1;34m'pip install gym[all]'\u001B[0m \u001B[0mwill\u001B[0m \u001B[0mdo\u001B[0m \u001B[0mit\u001B[0m\u001B[1;33m.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 23\u001B[1;33m \"\"\"\n\u001B[0m\u001B[0;32m 24\u001B[0m )\n\u001B[0;32m 25\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mImportError\u001B[0m: \n Cannot import pyglet.\n HINT: you can install pyglet directly via 'pip install pyglet'.\n But if you really just want to install all Gym dependencies and not have to think about it,\n 'pip install -e .[all]' or 'pip install gym[all]' will do it.\n " + ] + } + ], + "source": [ + "import gym\n", + "\n", + "env = gym.make('CartPole-v0')\n", + "\n", + "env.reset()\n", + "\n", + "for _ in range(1000):\n", + " env.render()\n", + " env.step(env.action_space.sample()) # take a random action\n", + "\n", + "env.close()\n", + "\n", + "# Source: https://gym.openai.com/docs/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From c42f5f7faf9738cbe8d7b1cb14ad3322771904cf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 17:09:47 +0800 Subject: [PATCH 0582/2002] Committed 2021/12/20 --- ...example of getting something running.ipynb | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/Supplementary materials/gym/a bare minimum example of getting something running.ipynb b/Supplementary materials/gym/a bare minimum example of getting something running.ipynb index 865febc2..d459931f 100644 --- a/Supplementary materials/gym/a bare minimum example of getting something running.ipynb +++ b/Supplementary materials/gym/a bare minimum example of getting something running.ipynb @@ -2,27 +2,17 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [ { - "ename": "ImportError", - "evalue": "\n Cannot import pyglet.\n HINT: you can install pyglet directly via 'pip install pyglet'.\n But if you really just want to install all Gym dependencies and not have to think about it,\n 'pip install -e .[all]' or 'pip install gym[all]' will do it.\n ", - "output_type": "error", - "traceback": [ - "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[1;31mModuleNotFoundError\u001B[0m Traceback (most recent call last)", - "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\rendering.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 14\u001B[0m \u001B[1;32mtry\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 15\u001B[1;33m \u001B[1;32mimport\u001B[0m \u001B[0mpyglet\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 16\u001B[0m \u001B[1;32mexcept\u001B[0m \u001B[0mImportError\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0me\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", - "\u001B[1;31mModuleNotFoundError\u001B[0m: No module named 'pyglet'", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001B[1;31mImportError\u001B[0m Traceback (most recent call last)", - "\u001B[1;32m~\\AppData\\Local\\Temp/ipykernel_9100/4039161985.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 6\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 7\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0m_\u001B[0m \u001B[1;32min\u001B[0m \u001B[0mrange\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;36m1000\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m----> 8\u001B[1;33m \u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 9\u001B[0m \u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mstep\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0maction_space\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0msample\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;31m# take a random action\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 10\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", - "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\core.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, mode, **kwargs)\u001B[0m\n\u001B[0;32m 293\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 294\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mmode\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;34m\"human\"\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 295\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmode\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 296\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 297\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mclose\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", - "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\cartpole.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, mode)\u001B[0m\n\u001B[0;32m 177\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 178\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mviewer\u001B[0m \u001B[1;32mis\u001B[0m \u001B[1;32mNone\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 179\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0mgym\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0menvs\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mclassic_control\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mrendering\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 180\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 181\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mviewer\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mrendering\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mViewer\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mscreen_width\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mscreen_height\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", - "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\rendering.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 21\u001B[0m \u001B[0mBut\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0myou\u001B[0m \u001B[0mreally\u001B[0m \u001B[0mjust\u001B[0m \u001B[0mwant\u001B[0m \u001B[0mto\u001B[0m \u001B[0minstall\u001B[0m \u001B[0mall\u001B[0m \u001B[0mGym\u001B[0m \u001B[0mdependencies\u001B[0m \u001B[1;32mand\u001B[0m \u001B[1;32mnot\u001B[0m \u001B[0mhave\u001B[0m \u001B[0mto\u001B[0m \u001B[0mthink\u001B[0m \u001B[0mabout\u001B[0m \u001B[0mit\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 22\u001B[0m \u001B[1;34m'pip install -e .[all]'\u001B[0m \u001B[1;32mor\u001B[0m \u001B[1;34m'pip install gym[all]'\u001B[0m \u001B[0mwill\u001B[0m \u001B[0mdo\u001B[0m \u001B[0mit\u001B[0m\u001B[1;33m.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 23\u001B[1;33m \"\"\"\n\u001B[0m\u001B[0;32m 24\u001B[0m )\n\u001B[0;32m 25\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", - "\u001B[1;31mImportError\u001B[0m: \n Cannot import pyglet.\n HINT: you can install pyglet directly via 'pip install pyglet'.\n But if you really just want to install all Gym dependencies and not have to think about it,\n 'pip install -e .[all]' or 'pip install gym[all]' will do it.\n " + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\cartpole.py:151: UserWarning: \u001B[33mWARN: You are calling 'step()' even though this environment has already returned done = True. You should always call 'reset()' once you receive 'done = True' -- any further steps are undefined behavior.\u001B[0m\n", + " \"You are calling 'step()' even though this \"\n" ] } ], From ce351806f8137438892bc70cfcca2d87f1f7c07e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 17:18:13 +0800 Subject: [PATCH 0583/2002] Committed 2021/12/20 --- .../Chapter7 - Reinforcement Learning/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Machine Learning for Finance/Chapter7 - Reinforcement Learning/__init__.py diff --git a/Machine Learning for Finance/Chapter7 - Reinforcement Learning/__init__.py b/Machine Learning for Finance/Chapter7 - Reinforcement Learning/__init__.py new file mode 100644 index 00000000..e69de29b From 17c3ad953894b1ec06ceabd6ec2b4870fd7d24fa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:08:27 +0800 Subject: [PATCH 0584/2002] Committed 2021/12/20 --- .../CartPole.ipynb | 62 +++++++++++++++++++ .../__init__.py | 0 2 files changed, 62 insertions(+) create mode 100644 Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.ipynb create mode 100644 Hands on Machine Learning2/Chapter18 - Reinforcement Learning/__init__.py diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.ipynb b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.ipynb new file mode 100644 index 00000000..3fae51cb --- /dev/null +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.ipynb @@ -0,0 +1,62 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.00851348 -0.02512302 -0.00803812 0.01979263]\n" + ] + } + ], + "source": [ + "import gym\n", + "\n", + "environment = gym.make(\"CartPole-v1\")\n", + "\n", + "observation = environment.reset()\n", + "\n", + "print(observation)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/__init__.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/__init__.py new file mode 100644 index 00000000..e69de29b From 8c64744305e40a78ef0169fe57834ea14ebf67b7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:28:31 +0800 Subject: [PATCH 0585/2002] Committed 2021/12/20 --- .../CartPole.ipynb | 38 +++++++++++++++++-- .../CartPole.py | 11 ++++++ 2 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.py diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.ipynb b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.ipynb index 3fae51cb..9cf9336f 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.ipynb +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -11,7 +11,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[ 0.00851348 -0.02512302 -0.00803812 0.01979263]\n" + "[-0.03841699 -0.04977718 -0.0340114 0.00516261]\n" ] } ], @@ -25,11 +25,43 @@ "print(observation)" ] }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp/ipykernel_26492/21817557.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[1;32m----> 1\u001B[1;33m \u001B[0menvironment\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\core.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, mode, **kwargs)\u001B[0m\n\u001B[0;32m 293\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 294\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mmode\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;34m\"human\"\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 295\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmode\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 296\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 297\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mclose\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\cartpole.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, mode)\u001B[0m\n\u001B[0;32m 227\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpoletrans\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mset_rotation\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m-\u001B[0m\u001B[0mx\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;36m2\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 228\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 229\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mviewer\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mreturn_rgb_array\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mmode\u001B[0m \u001B[1;33m==\u001B[0m \u001B[1;34m\"rgb_array\"\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 230\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 231\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mclose\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\rendering.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, return_rgb_array)\u001B[0m\n\u001B[0;32m 123\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mwindow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mclear\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 124\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mwindow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mswitch_to\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 125\u001B[1;33m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mwindow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdispatch_events\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 126\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mtransform\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0menable\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 127\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0mgeom\u001B[0m \u001B[1;32min\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mgeoms\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\pyglet\\window\\win32\\__init__.py\u001B[0m in \u001B[0;36mdispatch_events\u001B[1;34m(self)\u001B[0m\n\u001B[0;32m 718\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 719\u001B[0m \u001B[0mmsg\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mMSG\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 720\u001B[1;33m \u001B[1;32mwhile\u001B[0m \u001B[0m_user32\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mPeekMessageW\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mbyref\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmsg\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m0\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m0\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m0\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mPM_REMOVE\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 721\u001B[0m \u001B[0m_user32\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mTranslateMessage\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mbyref\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmsg\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 722\u001B[0m \u001B[0m_user32\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mDispatchMessageW\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mbyref\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmsg\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mKeyboardInterrupt\u001B[0m: " + ] + } + ], + "source": [ + "environment.render()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "code", "execution_count": null, "outputs": [], - "source": [], + "source": [ + "environment.close()" + ], "metadata": { "collapsed": false, "pycharm": { diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.py new file mode 100644 index 00000000..edd83123 --- /dev/null +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole.py @@ -0,0 +1,11 @@ +import gym + +environment = gym.make("CartPole-v1") + +observation = environment.reset() + +print(observation) + +environment.render() + +environment.close() From fe8f9d013b315340b683c83535e2ae3ff83eef52 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:31:16 +0800 Subject: [PATCH 0586/2002] Committed 2021/12/20 --- .../Chapter18 - Reinforcement Learning/CartPole2.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole2.py diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole2.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole2.py new file mode 100644 index 00000000..b6bb5b47 --- /dev/null +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole2.py @@ -0,0 +1,9 @@ +import gym + +environment = gym.make("CartPole-v1") + +observation = environment.reset() + +print(observation) + +environment.render() From 600386427b4a01f45514448be2b5b91c5745b9e7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 20:21:16 +0800 Subject: [PATCH 0587/2002] Committed 2021/12/20 --- .../Chapter18 - Reinforcement Learning/CartPole2.py | 2 ++ .../CartPole_example.py | 9 +++++++++ 2 files changed, 11 insertions(+) create mode 100644 Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole2.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole2.py index b6bb5b47..cf203681 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole2.py +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole2.py @@ -7,3 +7,5 @@ print(observation) environment.render() + +print(environment.action_space) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py new file mode 100644 index 00000000..10caabcc --- /dev/null +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py @@ -0,0 +1,9 @@ +import gym + +environment = gym.make('CartPole-v1') + +environment.seed(42) + +observation = environment.reset() + +print(observation) From 68abb4a81dfeb81ca784d7099db254316e551838 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 20:47:08 +0800 Subject: [PATCH 0588/2002] Committed 2021/12/20 --- .../CartPole_example.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py index 10caabcc..ce77dc50 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py @@ -1,4 +1,5 @@ import gym +import matplotlib.pyplot as plt environment = gym.make('CartPole-v1') @@ -7,3 +8,26 @@ observation = environment.reset() print(observation) + +image = environment.render(mode="rgb_array") +print(image.shape) + +def plot_environment(environment, figsize=(5, 4)): + plt.figure(figsize=figsize) + image = environment.render(mode="rgb_array") + plt.imshow(image) + plt.axis("off") + + return image + + +plot_environment(environment) + +plt.show() + +print(environment.action_space) + +action = 1 # accelerate right +observation, reward, done, info = environment.step(action) + +print(observation, '\n', reward, '\n', done, '\n', info) From d91e06b535bfe343afe4a1a51996b32f4d2fab4c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 21:01:35 +0800 Subject: [PATCH 0589/2002] Committed 2021/12/20 --- .../CartPole_example.ipynb | 127 ++++++++++++++++++ .../CartPole_example.py | 4 +- 2 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb new file mode 100644 index 00000000..b8673c79 --- /dev/null +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb @@ -0,0 +1,127 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[-0.01258566 -0.00156614 0.04207708 -0.00180545]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\pyglet\\image\\codecs\\wic.py:289: UserWarning: [WinError -2147417850] Cannot change thread mode after it is set\n", + " warnings.warn(str(err))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(400, 600, 3)\n" + ] + }, + { + "data": { + "text/plain": "
      ", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASUAAADICAYAAACuyvefAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFgklEQVR4nO3dT2scdRzH8e9so1WjrtW2WIgi/ilSFWxrK3r0GYhPoMeCT8FLr168loJXb/bkRdCCgmKV4p+DKFoRaqkaq03apCab7HhQxFWT6m7sfnZ9vSCH/GZ2+B6WNzOb2UnTtm0BpOiMewCAPxIlIIooAVFECYgiSkAUUQKizFxju/sFgP9Cs9EGZ0pAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKDGy/tpq9a5errZtxz0KU2Bm3AMw+S5+8V5dOPNa3XHf49V0fn1L7X7smdp+284xT8YkEiVG1q6vVW95oeY/fev3tR0PHBQlhuLyDYgiSkAUUQKiiBIQRZSAKKIERBElIIooAVFEiZG0bfs3Xy9pfvuBf0+UGEnbX6sfv3x/YO2WXffWLXfNjWkiJp0oMZq2an1laWCpM7O9mm03jGkgJp0oAVFECYgiSkAUUQKiiBIQRZSAKKIERBElIIooMZL11eXqr6+NewymiCgxksXzn1Vv6aeBtR33HxjTNEwDUWLLbb99VzWNL+QyHFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFFiaG3bVn9tdXCx6VTT2TaegZgKosQI2rr4+TsDKzfv2FO33v3gmOZhGogSw2ur+uu9wTVnSoxIlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlBhBW9UOrng2N6MSJYZ25buv6ueFbwfW7tr7VFUJE8MTJYbW761U+6f/+TZz063OlhiJKAFRRAmIIkpAFFECoogSEEWUgChN27abbd90I9NpcXGxTpw4Uaurq5vut/PGq3Xw9u8H1j65vLMurMxu+JqmaerIkSO1Z8+eLZmVibXhfSOixF+cO3eu9u3bV1euXNl0v6cfuadefP656redapq2buos1Qsvv1mvf3B2w9c0TVOnT5+uQ4cObfXYTJYNozRzPadguiyu3Vlvzz9bvf722tas1aPdd6vq1LjHYsKJEkM78OiTtdL/9VKt387Uu988XB+dnR/zVEw6H3QztHt2dwd+v7qyVj8sLI9pGqaFKDG02ebbqvXL1e+v1kyzUg/d9mF1mv64x2LCuXxjaC+98mr1O2/Ug3O764m9d9fXy/PV74sSo9k0SsePH79ecxDk0qVL1ev1rrnf/KXlqlquiz9eqNOffPyPjt22bZ08ebLOnDkz4pRMsqNHj264bdNbAhYWFtwS8D90/vz5Onz4cC0tLW35sZumqVOnTtX+/fu3/NhMjm63O9wtAd1ud7PNTKnFxcX/9JlIs7Oz3ltsyAfdQBRRAqKIEhBFlIAo7lPiL7rdbh07duyaTwkYRtM0NTc3t+XHZXp4SgAwDhv+edflGxBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiDJzje3NdZkC4DfOlIAoogREESUgiigBUUQJiCJKQJRfAIij34zzl4JRAAAAAElFTkSuQmCC\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Discrete(2)\n", + "0.042077083\n", + "[-0.01261699 0.1929279 0.04204097 -0.28092128] \n", + " 1.0 \n", + " False \n", + " {}\n" + ] + } + ], + "source": [ + "import gym\n", + "import matplotlib.pyplot as plt\n", + "\n", + "environment = gym.make('CartPole-v1')\n", + "\n", + "environment.seed(42)\n", + "\n", + "observation = environment.reset()\n", + "\n", + "print(observation) # cart's horizontal position, its velocity, the angle of the pole (0 = vertical), and the angular velocity.\n", + "\n", + "image = environment.render(mode=\"rgb_array\")\n", + "print(image.shape)\n", + "\n", + "def plot_environment(environment, figsize=(5, 4)):\n", + " plt.figure(figsize=figsize)\n", + " image = environment.render(mode=\"rgb_array\")\n", + " plt.imshow(image)\n", + " plt.axis(\"off\")\n", + "\n", + " return image\n", + "\n", + "\n", + "plot_environment(environment)\n", + "\n", + "plt.show()\n", + "\n", + "print(environment.action_space)\n", + "\n", + "print(observation[2])\n", + "\n", + "action = 1 # accelerate right\n", + "observation, reward, done, info = environment.step(action)\n", + "\n", + "print(observation, '\\n', reward, '\\n', done, '\\n', info)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py index ce77dc50..56bd4b71 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py @@ -7,7 +7,7 @@ observation = environment.reset() -print(observation) +print(observation) # cart's horizontal position, its velocity, the angle of the pole (0 = vertical), and the angular velocity. image = environment.render(mode="rgb_array") print(image.shape) @@ -27,6 +27,8 @@ def plot_environment(environment, figsize=(5, 4)): print(environment.action_space) +print(observation[2]) + action = 1 # accelerate right observation, reward, done, info = environment.step(action) From 265ab75d869eca0b4dd2a5d7e405a41b74af5d4a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 21:34:23 +0800 Subject: [PATCH 0590/2002] Committed 2021/12/20 --- .../CartPole_example.ipynb | 46 ++++++++++++------- .../CartPole_example.py | 17 +++++++ 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb index b8673c79..4694a196 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": { "collapsed": true }, @@ -11,21 +11,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[-0.01258566 -0.00156614 0.04207708 -0.00180545]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\pyglet\\image\\codecs\\wic.py:289: UserWarning: [WinError -2147417850] Cannot change thread mode after it is set\n", - " warnings.warn(str(err))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "[-0.01258566 -0.00156614 0.04207708 -0.00180545]\n", "(400, 600, 3)\n" ] }, @@ -92,7 +78,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASUAAADICAYAAACuyvefAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFgklEQVR4nO3dTWtcZRjH4ftMo62NdaytxUIUQS1SFazaii79BuIX6LLgV3DTrRu3peDWnV25EbSgoFil+LIQxReEWlqN1SZtUpNJ5rhQxFGT6kzs/Ge8LsgizzM53IvhxzmTMzNN27YFkKIz7gEA/kiUgCiiBEQRJSCKKAFRRAmIMnOdffcLAP+FZqMNZ0pAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKDGy/tpq9a5dqbZtxz0KU2Bm3AMw+S598V5dOPta3X7vo9V0fn1K7Xvkmdq+a++YJ2MSiRIja9fXqre8UPOfvvX72u77HhclhuLyDYgiSkAUUQKiiBIQRZSAKKIERBElIIooAVFEiZG0bfs3by9pfvuBf0+UGEnbX6sfv3x/YG3nnffUzj1zY5qISSdKjKatWl9ZGljqzGyvZttNYxqISSdKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKjGR9dbn662sDazfdsmtM0zANRImRLJ7/rHpLPw2s7TnwVDWN974xHFFi6wkSIxAlIIooAVFECYgiSkAUUQKiiBIQRZSAKKIERBElhta2bfXXVgcXm041nW3jGYipIEqMoK1Ln78zsHLL7v116133j2kepoEoMby2qr/eG1xzpsSIRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRIkRtFXt4IovDGBUosTQrn73df28cHFgbc+Bp6pKmBieKDG0fm+l2j9959vMjludLTESUQKiiBIQRZSAKKIERBElIIooAVGatm032990k+m0uLhYJ0+erNXV1U0ft/fma/X4bd8PrH1yZW9dWJnd8G+apqmjR4/W/v37t2RWJtaG942IEn9x7ty5OnjwYF29enXTxz390N314vPPVb/tVNO0taOzVC+8/Ga9/sFXG/5N0zR15syZOnz48FaPzWTZMEozN3IKpsvi2h319vyz1etvr23NWj3cfbeqTo97LCacKDG0xx5+slb6v16q9duZevfbB+ujr+bHPBWTzgvdDO3ufd2B36+trNUPC8tjmoZpIUoMbba5WLV+pfr91ZppVuqBXR9Wp+mPeywmnMs3hvbSK69Wv/NG3T+3r544cFd9szxf/b4oMZpNo3TixIkbNQdBLl++XL1e77qPm7+8XFXLdenHC3Xmk4//0bHbtq1Tp07V2bNnR5ySSXbs2LEN9za9JWBhYcEtAf9D58+fryNHjtTS0tKWH7tpmjp9+nQdOnRoy4/N5Oh2u8PdEtDtdjfbZkotLi7+p5+JNDs767nFhrzQDUQRJSCKKAFRRAmI4j4l/qLb7dbx48ev+ykBw2iapubm5rb8uEwPnxIAjMOG/951+QZEESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqLMXGe/uSFTAPzGmRIQRZSAKKIERBElIIooAVFECYjyC8lw34xFaK9sAAAAAElFTkSuQmCC\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_environment(environment)\n", + "plt.show()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, "outputs": [], "source": [], "metadata": { diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py index 56bd4b71..26d17697 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py @@ -33,3 +33,20 @@ def plot_environment(environment, figsize=(5, 4)): observation, reward, done, info = environment.step(action) print(observation, '\n', reward, '\n', done, '\n', info) + +def basic_policy(observation): + angle = observation[2] + + return 0 if angle < 0 else 1 + + +totals = [] + +for episode in range(500): + episode_rewards = 0 + observation = environment.reset() + + for step in range(200): + action = basic_policy(observation) + observation, reward, done, info = environment.step(action) + episode_rewards += reward From 85535c512ced77de73693792b197c5291d06d9d1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 22:05:23 +0800 Subject: [PATCH 0591/2002] Committed 2021/12/20 --- .../CartPole_example.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py index 26d17697..01b61f01 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py @@ -1,5 +1,6 @@ import gym import matplotlib.pyplot as plt +import numpy as np environment = gym.make('CartPole-v1') @@ -50,3 +51,11 @@ def basic_policy(observation): action = basic_policy(observation) observation, reward, done, info = environment.step(action) episode_rewards += reward + + if done: + break + + totals.append(episode_rewards) + + +print(np.mean(totals), np.std(totals), np.min(totals), np.max(totals)) From 3522eb649316f88d8e522d0c4bc2a02bc5ea7b30 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 22:06:52 +0800 Subject: [PATCH 0592/2002] Committed 2021/12/20 --- .../CartPole_example.ipynb | 44 ++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb index 4694a196..6085f1a2 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -41,6 +41,7 @@ "source": [ "import gym\n", "import matplotlib.pyplot as plt\n", + "import numpy as np\n", "\n", "environment = gym.make('CartPole-v1')\n", "\n", @@ -78,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "outputs": [ { "data": { @@ -104,9 +105,42 @@ }, { "cell_type": "code", - "execution_count": 4, - "outputs": [], - "source": [], + "execution_count": 7, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "41.684 8.839917646675222 24.0 68.0\n" + ] + } + ], + "source": [ + "def basic_policy(observation):\n", + " angle = observation[2]\n", + "\n", + " return 0 if angle < 0 else 1\n", + "\n", + "\n", + "totals = []\n", + "\n", + "for episode in range(500):\n", + " episode_rewards = 0\n", + " observation = environment.reset()\n", + "\n", + " for step in range(200):\n", + " action = basic_policy(observation)\n", + " observation, reward, done, info = environment.step(action)\n", + " episode_rewards += reward\n", + "\n", + " if done:\n", + " break\n", + "\n", + " totals.append(episode_rewards)\n", + "\n", + "\n", + "print(np.mean(totals), np.std(totals), np.min(totals), np.max(totals))\n" + ], "metadata": { "collapsed": false, "pycharm": { From e8c8346a8de13b1813bc00f373b2cd7d7cd83089 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 22:32:53 +0800 Subject: [PATCH 0593/2002] Committed 2021/12/20 --- .../CartPole_example.ipynb | 112 +++++++++++++++++- .../CartPole_example.py | 38 ++++++ 2 files changed, 145 insertions(+), 5 deletions(-) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb index 6085f1a2..e36f7fa5 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 5, + "execution_count": 1, "metadata": { "collapsed": true }, @@ -11,7 +11,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "[-0.01258566 -0.00156614 0.04207708 -0.00180545]\n", + "[-0.01258566 -0.00156614 0.04207708 -0.00180545]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\pyglet\\image\\codecs\\wic.py:289: UserWarning: [WinError -2147417850] Cannot change thread mode after it is set\n", + " warnings.warn(str(err))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "(400, 600, 3)\n" ] }, @@ -40,6 +54,7 @@ ], "source": [ "import gym\n", + "import matplotlib.animation\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", @@ -79,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 2, "outputs": [ { "data": { @@ -105,7 +120,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 3, "outputs": [ { "name": "stdout", @@ -139,7 +154,94 @@ " totals.append(episode_rewards)\n", "\n", "\n", - "print(np.mean(totals), np.std(totals), np.min(totals), np.max(totals))\n" + "print(np.mean(totals), np.std(totals), np.min(totals), np.max(totals))" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [], + "source": [ + "# Let's visualize one episode:\n", + "environment.seed(42)\n", + "\n", + "frames = []\n", + "\n", + "observation = environment.reset()\n", + "\n", + "for step in range(200):\n", + " image = environment.render(mode='rgb_array')\n", + " frames.append(image)\n", + " action = basic_policy(observation)\n", + "\n", + " observation, reward, done, info = environment.step(action)\n", + "\n", + " if done:\n", + " break" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "Now show the animation:" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [], + "source": [ + "def update_scene(num, frames, patch):\n", + " patch.set_data(frames[num])\n", + " return patch\n", + "\n", + "\n", + "def plot_animation(frames, repeat=False, interval=40):\n", + " figure = plt.figure()\n", + " patch = plt.imshow(X=frames[0])\n", + " plt.axis('off')\n", + " animation = matplotlib.animation.FuncAnimation(fig=figure, func=update_scene, frames=len(frames), fargs=(frames, patch), interval=interval, repeat=repeat)\n", + "\n", + " plt.close()\n", + " return animation" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_animation(frames=frames)" ], "metadata": { "collapsed": false, diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py index 01b61f01..7739915a 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py @@ -1,6 +1,7 @@ import gym import matplotlib.pyplot as plt import numpy as np +import matplotlib.animation as anime environment = gym.make('CartPole-v1') @@ -59,3 +60,40 @@ def basic_policy(observation): print(np.mean(totals), np.std(totals), np.min(totals), np.max(totals)) + +# Let's visualize one episode: +environment.seed(42) + +frames = [] + +observation = environment.reset() + +for step in range(200): + image = environment.render(mode='rgb_array') + frames.append(image) + action = basic_policy(observation) + + observation, reward, done, info = environment.step(action) + + if done: + break + + +# Now show the animation: + +def update_scene(num, frames, patch): + patch.set_data(frames[num]) + return patch + + +def plot_animation(frames, repeat=False, interval=40): + figure = plt.figure() + patch = plt.imshow(X=frames[0]) + plt.axis('off') + animation = anime.FuncAnimation(fig=figure, func=update_scene, frames=len(frames), fargs=(frames, patch), interval=interval, repeat=repeat) + + plt.close() + return animation + + +plot_animation(frames=frames) From 7d66c1f008553fa0006e8cb97e7c1a80da872441 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 22:35:36 +0800 Subject: [PATCH 0594/2002] Committed 2021/12/20 --- .../Chapter18 - Reinforcement Learning/CartPole_example.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py index 7739915a..da1cef50 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py @@ -96,4 +96,6 @@ def plot_animation(frames, repeat=False, interval=40): return animation -plot_animation(frames=frames) +animation = plot_animation(frames=frames) + +print(animation) From c8e095fa2f8df8efaecedc25f8ca803275d92833 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 22:49:51 +0800 Subject: [PATCH 0595/2002] Committed 2021/12/20 --- .../CartPole_example.ipynb | 119 ++++++------------ .../CartPole_example.py | 2 + 2 files changed, 41 insertions(+), 80 deletions(-) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb index e36f7fa5..0f080403 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb @@ -2,9 +2,12 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { - "collapsed": true + "collapsed": true, + "pycharm": { + "is_executing": true + } }, "outputs": [ { @@ -13,43 +16,6 @@ "text": [ "[-0.01258566 -0.00156614 0.04207708 -0.00180545]\n" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\pyglet\\image\\codecs\\wic.py:289: UserWarning: [WinError -2147417850] Cannot change thread mode after it is set\n", - " warnings.warn(str(err))\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(400, 600, 3)\n" - ] - }, - { - "data": { - "text/plain": "
      ", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAASUAAADICAYAAACuyvefAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFgklEQVR4nO3dT2scdRzH8e9so1WjrtW2WIgi/ilSFWxrK3r0GYhPoMeCT8FLr168loJXb/bkRdCCgmKV4p+DKFoRaqkaq03apCab7HhQxFWT6m7sfnZ9vSCH/GZ2+B6WNzOb2UnTtm0BpOiMewCAPxIlIIooAVFECYgiSkAUUQKizFxju/sFgP9Cs9EGZ0pAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKDGy/tpq9a5errZtxz0KU2Bm3AMw+S5+8V5dOPNa3XHf49V0fn1L7X7smdp+284xT8YkEiVG1q6vVW95oeY/fev3tR0PHBQlhuLyDYgiSkAUUQKiiBIQRZSAKKIERBElIIooAVFEiZG0bfs3Xy9pfvuBf0+UGEnbX6sfv3x/YO2WXffWLXfNjWkiJp0oMZq2an1laWCpM7O9mm03jGkgJp0oAVFECYgiSkAUUQKiiBIQRZSAKKIERBElIIooMZL11eXqr6+NewymiCgxksXzn1Vv6aeBtR33HxjTNEwDUWLLbb99VzWNL+QyHFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFFiaG3bVn9tdXCx6VTT2TaegZgKosQI2rr4+TsDKzfv2FO33v3gmOZhGogSw2ur+uu9wTVnSoxIlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlBhBW9UOrng2N6MSJYZ25buv6ueFbwfW7tr7VFUJE8MTJYbW761U+6f/+TZz063OlhiJKAFRRAmIIkpAFFECoogSEEWUgChN27abbd90I9NpcXGxTpw4Uaurq5vut/PGq3Xw9u8H1j65vLMurMxu+JqmaerIkSO1Z8+eLZmVibXhfSOixF+cO3eu9u3bV1euXNl0v6cfuadefP656redapq2buos1Qsvv1mvf3B2w9c0TVOnT5+uQ4cObfXYTJYNozRzPadguiyu3Vlvzz9bvf722tas1aPdd6vq1LjHYsKJEkM78OiTtdL/9VKt387Uu988XB+dnR/zVEw6H3QztHt2dwd+v7qyVj8sLI9pGqaFKDG02ebbqvXL1e+v1kyzUg/d9mF1mv64x2LCuXxjaC+98mr1O2/Ug3O764m9d9fXy/PV74sSo9k0SsePH79ecxDk0qVL1ev1rrnf/KXlqlquiz9eqNOffPyPjt22bZ08ebLOnDkz4pRMsqNHj264bdNbAhYWFtwS8D90/vz5Onz4cC0tLW35sZumqVOnTtX+/fu3/NhMjm63O9wtAd1ud7PNTKnFxcX/9JlIs7Oz3ltsyAfdQBRRAqKIEhBFlIAo7lPiL7rdbh07duyaTwkYRtM0NTc3t+XHZXp4SgAwDhv+edflGxBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiDJzje3NdZkC4DfOlIAoogREESUgiigBUUQJiCJKQJRfAIij34zzl4JRAAAAAElFTkSuQmCC\n" - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Discrete(2)\n", - "0.042077083\n", - "[-0.01261699 0.1929279 0.04204097 -0.28092128] \n", - " 1.0 \n", - " False \n", - " {}\n" - ] } ], "source": [ @@ -94,19 +60,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "outputs": [ - { - "data": { - "text/plain": "
      ", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAASUAAADICAYAAACuyvefAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFgklEQVR4nO3dTWtcZRjH4ftMo62NdaytxUIUQS1SFazaii79BuIX6LLgV3DTrRu3peDWnV25EbSgoFil+LIQxReEWlqN1SZtUpNJ5rhQxFGT6kzs/Ge8LsgizzM53IvhxzmTMzNN27YFkKIz7gEA/kiUgCiiBEQRJSCKKAFRRAmIMnOdffcLAP+FZqMNZ0pAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKDGy/tpq9a5dqbZtxz0KU2Bm3AMw+S598V5dOPta3X7vo9V0fn1K7Xvkmdq+a++YJ2MSiRIja9fXqre8UPOfvvX72u77HhclhuLyDYgiSkAUUQKiiBIQRZSAKKIERBElIIooAVFEiZG0bfs3by9pfvuBf0+UGEnbX6sfv3x/YG3nnffUzj1zY5qISSdKjKatWl9ZGljqzGyvZttNYxqISSdKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKjGR9dbn662sDazfdsmtM0zANRImRLJ7/rHpLPw2s7TnwVDWN974xHFFi6wkSIxAlIIooAVFECYgiSkAUUQKiiBIQRZSAKKIERBElhta2bfXXVgcXm041nW3jGYipIEqMoK1Ln78zsHLL7v116133j2kepoEoMby2qr/eG1xzpsSIRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRIkRtFXt4IovDGBUosTQrn73df28cHFgbc+Bp6pKmBieKDG0fm+l2j9959vMjludLTESUQKiiBIQRZSAKKIERBElIIooAVGatm032990k+m0uLhYJ0+erNXV1U0ft/fma/X4bd8PrH1yZW9dWJnd8G+apqmjR4/W/v37t2RWJtaG942IEn9x7ty5OnjwYF29enXTxz390N314vPPVb/tVNO0taOzVC+8/Ga9/sFXG/5N0zR15syZOnz48FaPzWTZMEozN3IKpsvi2h319vyz1etvr23NWj3cfbeqTo97LCacKDG0xx5+slb6v16q9duZevfbB+ujr+bHPBWTzgvdDO3ufd2B36+trNUPC8tjmoZpIUoMbba5WLV+pfr91ZppVuqBXR9Wp+mPeywmnMs3hvbSK69Wv/NG3T+3r544cFd9szxf/b4oMZpNo3TixIkbNQdBLl++XL1e77qPm7+8XFXLdenHC3Xmk4//0bHbtq1Tp07V2bNnR5ySSXbs2LEN9za9JWBhYcEtAf9D58+fryNHjtTS0tKWH7tpmjp9+nQdOnRoy4/N5Oh2u8PdEtDtdjfbZkotLi7+p5+JNDs767nFhrzQDUQRJSCKKAFRRAmI4j4l/qLb7dbx48ev+ykBw2iapubm5rb8uEwPnxIAjMOG/951+QZEESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoogREESUgiigBUUQJiCJKQBRRAqLMXGe/uSFTAPzGmRIQRZSAKKIERBElIIooAVFECYjyC8lw34xFaK9sAAAAAElFTkSuQmCC\n" - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "execution_count": null, + "outputs": [], "source": [ "plot_environment(environment)\n", "plt.show()" @@ -114,22 +69,15 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n" + "name": "#%%\n", + "is_executing": true } } }, { "cell_type": "code", - "execution_count": 3, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "41.684 8.839917646675222 24.0 68.0\n" - ] - } - ], + "execution_count": null, + "outputs": [], "source": [ "def basic_policy(observation):\n", " angle = observation[2]\n", @@ -159,13 +107,14 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n" + "name": "#%%\n", + "is_executing": true } } }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "outputs": [], "source": [ "# Let's visualize one episode:\n", @@ -188,7 +137,8 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n" + "name": "#%%\n", + "is_executing": true } } }, @@ -203,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "outputs": [], "source": [ "def update_scene(num, frames, patch):\n", @@ -223,30 +173,39 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n" + "name": "#%%\n", + "is_executing": true } } }, { "cell_type": "code", - "execution_count": 6, - "outputs": [ - { - "data": { - "text/plain": "" - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "outputs": [], "source": [ "plot_animation(frames=frames)" ], "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n" + "name": "#%%\n", + "is_executing": true + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "animation = plot_animation(frames=frames)\n", + "animation.to_jshtml(fps=30, embed_frames=True, default_mode=None)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n", + "is_executing": true } } } diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py index da1cef50..8083f9ac 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.py @@ -99,3 +99,5 @@ def plot_animation(frames, repeat=False, interval=40): animation = plot_animation(frames=frames) print(animation) + +animation.to_jshtml(fps=30, embed_frames=True, default_mode=None) From 984e525c1dd8b943d53e6f168c9e5aebbef3bd3c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 20 Dec 2021 22:58:30 +0800 Subject: [PATCH 0596/2002] Committed 2021/12/20 --- .../CartPole_example2.ipynb | 217 ++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.ipynb diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.ipynb b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.ipynb new file mode 100644 index 00000000..ebed89f1 --- /dev/null +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.ipynb @@ -0,0 +1,217 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[-0.01258566 -0.00156614 0.04207708 -0.00180545]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\pyglet\\image\\codecs\\wic.py:289: UserWarning: [WinError -2147417850] Cannot change thread mode after it is set\n", + " warnings.warn(str(err))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(400, 600, 3)\n" + ] + }, + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Discrete(2)\n", + "0.042077083\n", + "[-0.01261699 0.1929279 0.04204097 -0.28092128] \n", + " 1.0 \n", + " False \n", + " {}\n" + ] + }, + { + "data": { + "text/plain": "
      ", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASUAAADICAYAAACuyvefAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFbUlEQVR4nO3dzW6UZRjH4fsdioiiRUFCk2JMJMSgJkYkBpeegfEE2LHwFNywdeOexKULFu7cGNTEGD/QGD8WRlF0QQgoYEtbim2n87qQGEdsqzOV+U+9rqSLPs/M5F5Mfnln+kynadu2AFJ0Rj0AwJ+JEhBFlIAoogREESUgiigBUSY22HdeAPgvNGttuFICoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJSCKKAFRRImh9brLtXJzvtq2HfUobAETox6A8Xftu4/r0mdv1u5Hnqqm8/tTat+Tz9eO+/aOeDLGkSgxtHa1WyuL1+vK1+/9sfbAo0dEiYF4+QZEESUgiigBUUQJiCJKQBRRAqKIEhBFlIAoosRQ2rb9m4+XNLd+4N8TJYbS9rr1y/ef9K3d89DDdc+e6RFNxLgTJYbTVq0u3ehb6kzsqGbb9hENxLgTJSCKKAFRRAmIIkpAFFECoogSEEWUgCiiBEQRJYayurxYvdVu39r2nfeNaBq2AlFiKHMXv6mVGzN9a3sOHaum8dk3BiNKbD5BYgiiBEQRJSCKKAFRRAmIIkpAFFECoogSEEWUgCiixMDatq1ed7l/selU09k2moHYEkSJIbR17dsP+lZ2PjBVu/YfHNE8bAWixODaqt7qSv+aKyWGJEpAFFECoogSEEWUgCiiBEQRJSCKKAFRRAmIIkoMoa1q+1d8YQDDEiUGtvDTD/Xr9ct9a3sOHasqYWJwosTAeitL1f7lO98m7t7laomhiBIQRZSAKKIERBElIIooAVFECYjStG273v66m2xNc3NzderUqVpeXl73dnvvullH7v+5b+2r+b11aeneNe/TNE0dP368pqamNmVWxtaa50ZEidtcuHChDh8+XAsLC+ve7rnHD9QrL71YvbZTTdPW3Z0b9fJr79Rbn55f8z5N09TZs2fr6NGjmz0242XNKE3cySnYWua6D9b7V1+old6O2tZ06/H7P6yqd0c9FmNOlBjY0088W0u931+q9dqJ+ujiY/XF+Ssjnopx541uBnZg32Tf7zeXunX1+uKIpmGrECUGdm/nctXqfPV6yzXRLNXBXZ9Xp+mNeizG3Lov32ZnZ+/QGCSZn5+vDf4AUlVVr77+RvU6b9fB6X31zKH99ePiler1No7SwsKC59b/3O7du9fcWzdKp0+f3uxZGAMzMzPV7XY3vN2V2cWqWqxrv1yqs199+Y8eu23bOnPmTJ07d27IKRlnJ06cWHPPkQBu80+PBAzCkQBuWfNIgPeUgCiiBEQRJSCKKAFRRAmI4mMm3GZycrJOnjy54X8JGETTNDU9Pb3pj8vW4UgAMAqOBADjQZSAKKIERBElIIooAVFECYgiSkAUUQKiiBIQRZSAKKIERBElIIooAVFECYgiSkAUUQKiiBIQRZSAKKIERBElIIooAVFECYgiSkAUUQKiiBIQRZSAKKIERBElIIooAVFECYgiSkAUUQKiiBIQRZSAKKIERBElIIooAVFECYgyscF+c0emALjFlRIQRZSAKKIERBElIIooAVFECYjyG5qP6DUUObfbAAAAAElFTkSuQmCC\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "41.684 8.839917646675222 24.0 68.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\matplotlib\\animation.py:974: UserWarning: Animation was deleted without rendering anything. This is most likely unintended. To prevent deletion, assign the Animation to a variable that exists for as long as you need the Animation.\n", + " 'Animation was deleted without rendering anything. This is '\n" + ] + }, + { + "data": { + "text/plain": "'\\n\\n\\n\\n\\n\\n
      \\n \\n
      \\n \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n
      \\n
      \\n
      \\n\\n\\n\\n'" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gym\n", + "import matplotlib.animation\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "environment = gym.make('CartPole-v1')\n", + "\n", + "environment.seed(42)\n", + "\n", + "observation = environment.reset()\n", + "\n", + "print(\n", + " observation) # cart's horizontal position, its velocity, the angle of the pole (0 = vertical), and the angular velocity.\n", + "\n", + "image = environment.render(mode=\"rgb_array\")\n", + "print(image.shape)\n", + "\n", + "\n", + "def plot_environment(environment, figsize=(5, 4)):\n", + " plt.figure(figsize=figsize)\n", + " image = environment.render(mode=\"rgb_array\")\n", + " plt.imshow(image)\n", + " plt.axis(\"off\")\n", + "\n", + " return image\n", + "\n", + "\n", + "plot_environment(environment)\n", + "\n", + "plt.show()\n", + "\n", + "print(environment.action_space)\n", + "\n", + "print(observation[2])\n", + "\n", + "action = 1 # accelerate right\n", + "observation, reward, done, info = environment.step(action)\n", + "\n", + "print(observation, '\\n', reward, '\\n', done, '\\n', info)\n", + "plot_environment(environment)\n", + "plt.show()\n", + "\n", + "\n", + "def basic_policy(observation):\n", + " angle = observation[2]\n", + "\n", + " return 0 if angle < 0 else 1\n", + "\n", + "\n", + "totals = []\n", + "\n", + "for episode in range(500):\n", + " episode_rewards = 0\n", + " observation = environment.reset()\n", + "\n", + " for step in range(200):\n", + " action = basic_policy(observation)\n", + " observation, reward, done, info = environment.step(action)\n", + " episode_rewards += reward\n", + "\n", + " if done:\n", + " break\n", + "\n", + " totals.append(episode_rewards)\n", + "\n", + "print(np.mean(totals), np.std(totals), np.min(totals), np.max(totals))\n", + "# Let's visualize one episode:\n", + "environment.seed(42)\n", + "\n", + "frames = []\n", + "\n", + "observation = environment.reset()\n", + "\n", + "for step in range(200):\n", + " image = environment.render(mode='rgb_array')\n", + " frames.append(image)\n", + " action = basic_policy(observation)\n", + "\n", + " observation, reward, done, info = environment.step(action)\n", + "\n", + " if done:\n", + " break\n", + "\n", + "# Now show the animation:\n", + "\n", + "def update_scene(num, frames, patch):\n", + " patch.set_data(frames[num])\n", + " return patch\n", + "\n", + "\n", + "def plot_animation(frames, repeat=False, interval=40):\n", + " figure = plt.figure()\n", + " patch = plt.imshow(X=frames[0])\n", + " plt.axis('off')\n", + " animation = matplotlib.animation.FuncAnimation(fig=figure, func=update_scene, frames=len(frames),\n", + " fargs=(frames, patch), interval=interval, repeat=repeat)\n", + "\n", + " plt.close()\n", + " return animation\n", + "\n", + "\n", + "plot_animation(frames=frames)\n", + "animation = plot_animation(frames=frames)\n", + "animation.to_jshtml(fps=30, embed_frames=True, default_mode=None)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 35e0fa6de5ce1e1281679745df49718fa914a4d9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 23:40:42 +0800 Subject: [PATCH 0597/2002] Committed 2021/12/20 --- .../CartPole_example.ipynb | 52 +++++++++++++------ 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb index 0f080403..50e86361 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example.ipynb @@ -2,12 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { - "collapsed": true, - "pycharm": { - "is_executing": true - } + "collapsed": true }, "outputs": [ { @@ -16,6 +13,33 @@ "text": [ "[-0.01258566 -0.00156614 0.04207708 -0.00180545]\n" ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m_ctypes/callbacks.c\u001B[0m in \u001B[0;36m'calling callback function'\u001B[1;34m()\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\pyglet\\window\\win32\\__init__.py\u001B[0m in \u001B[0;36mf\u001B[1;34m(hwnd, msg, wParam, lParam)\u001B[0m\n\u001B[0;32m 735\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 736\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0m_get_window_proc\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mevent_handlers\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 737\u001B[1;33m \u001B[1;32mdef\u001B[0m \u001B[0mf\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mhwnd\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mmsg\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mwParam\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mlParam\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 738\u001B[0m \u001B[0mevent_handler\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mevent_handlers\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mget\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmsg\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;32mNone\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 739\u001B[0m \u001B[0mresult\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;32mNone\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mKeyboardInterrupt\u001B[0m: " + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp/ipykernel_19780/442299231.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 12\u001B[0m \u001B[0mprint\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mobservation\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;31m# cart's horizontal position, its velocity, the angle of the pole (0 = vertical), and the angular velocity.\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 13\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 14\u001B[1;33m \u001B[0mimage\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0menvironment\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmode\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;34m\"rgb_array\"\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 15\u001B[0m \u001B[0mprint\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mimage\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mshape\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 16\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\core.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, mode, **kwargs)\u001B[0m\n\u001B[0;32m 293\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 294\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mmode\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;34m\"human\"\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 295\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0menv\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmode\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;33m**\u001B[0m\u001B[0mkwargs\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 296\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 297\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mclose\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\cartpole.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, mode)\u001B[0m\n\u001B[0;32m 227\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpoletrans\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mset_rotation\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m-\u001B[0m\u001B[0mx\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;36m2\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 228\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 229\u001B[1;33m \u001B[1;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mviewer\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mrender\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mreturn_rgb_array\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mmode\u001B[0m \u001B[1;33m==\u001B[0m \u001B[1;34m\"rgb_array\"\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 230\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 231\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mclose\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mself\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\gym\\envs\\classic_control\\rendering.py\u001B[0m in \u001B[0;36mrender\u001B[1;34m(self, return_rgb_array)\u001B[0m\n\u001B[0;32m 123\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mwindow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mclear\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 124\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mwindow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mswitch_to\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 125\u001B[1;33m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mwindow\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mdispatch_events\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 126\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mtransform\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0menable\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 127\u001B[0m \u001B[1;32mfor\u001B[0m \u001B[0mgeom\u001B[0m \u001B[1;32min\u001B[0m \u001B[0mself\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mgeoms\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\site-packages\\pyglet\\window\\win32\\__init__.py\u001B[0m in \u001B[0;36mdispatch_events\u001B[1;34m(self)\u001B[0m\n\u001B[0;32m 718\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 719\u001B[0m \u001B[0mmsg\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mMSG\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m--> 720\u001B[1;33m \u001B[1;32mwhile\u001B[0m \u001B[0m_user32\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mPeekMessageW\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mbyref\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmsg\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m0\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m0\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m0\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mPM_REMOVE\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 721\u001B[0m \u001B[0m_user32\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mTranslateMessage\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mbyref\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmsg\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 722\u001B[0m \u001B[0m_user32\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mDispatchMessageW\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mbyref\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mmsg\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mKeyboardInterrupt\u001B[0m: " + ] } ], "source": [ @@ -69,8 +93,7 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n", - "is_executing": true + "name": "#%%\n" } } }, @@ -107,8 +130,7 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n", - "is_executing": true + "name": "#%%\n" } } }, @@ -137,8 +159,7 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n", - "is_executing": true + "name": "#%%\n" } } }, @@ -173,8 +194,7 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n", - "is_executing": true + "name": "#%%\n" } } }, @@ -188,8 +208,7 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n", - "is_executing": true + "name": "#%%\n" } } }, @@ -204,8 +223,7 @@ "metadata": { "collapsed": false, "pycharm": { - "name": "#%%\n", - "is_executing": true + "name": "#%%\n" } } } From a84f81c02a2102589c98483720674e423cae3c56 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 23:46:31 +0800 Subject: [PATCH 0598/2002] Committed 2021/12/20 --- .../CartPole_example2.py | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.py diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.py new file mode 100644 index 00000000..37e35eb3 --- /dev/null +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.py @@ -0,0 +1,106 @@ +import gym +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.animation as anime +from IPython.display import HTML + +environment = gym.make('CartPole-v1') + +environment.seed(42) + +observation = environment.reset() + +print(observation) # cart's horizontal position, its velocity, the angle of the pole (0 = vertical), and the angular velocity. + +image = environment.render(mode="rgb_array") +print(image.shape) + +def plot_environment(environment, figsize=(5, 4)): + plt.figure(figsize=figsize) + image = environment.render(mode="rgb_array") + plt.imshow(image) + plt.axis("off") + + return image + + +plot_environment(environment) + +plt.show() + +print(environment.action_space) + +print(observation[2]) + +action = 1 # accelerate right +observation, reward, done, info = environment.step(action) + +print(observation, '\n', reward, '\n', done, '\n', info) + +def basic_policy(observation): + angle = observation[2] + + return 0 if angle < 0 else 1 + + +totals = [] + +for episode in range(500): + episode_rewards = 0 + observation = environment.reset() + + for step in range(200): + action = basic_policy(observation) + observation, reward, done, info = environment.step(action) + episode_rewards += reward + + if done: + break + + totals.append(episode_rewards) + + +print(np.mean(totals), np.std(totals), np.min(totals), np.max(totals)) + +# Let's visualize one episode: +environment.seed(42) + +frames = [] + +observation = environment.reset() + +for step in range(200): + image = environment.render(mode='rgb_array') + frames.append(image) + action = basic_policy(observation) + + observation, reward, done, info = environment.step(action) + + if done: + break + + +# Now show the animation: + +def update_scene(num, frames, patch): + patch.set_data(frames[num]) + return patch + + +def plot_animation(frames, repeat=False, interval=40): + figure = plt.figure() + patch = plt.imshow(X=frames[0]) + plt.axis('off') + animation = anime.FuncAnimation(fig=figure, func=update_scene, frames=len(frames), fargs=(frames, patch), interval=interval, repeat=repeat) + + plt.close() + return animation + + +animation = plot_animation(frames=frames) + +print(animation) + +animation.to_jshtml(fps=30, embed_frames=True, default_mode=None) + +HTML(animation.to_jshtml()) From 29a2dca0dec73f37f5b117f6ad96f36e24e72590 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 20 Dec 2021 23:52:21 +0800 Subject: [PATCH 0599/2002] Committed 2021/12/20 --- .../Chapter18 - Reinforcement Learning/CartPole_example2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.py b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.py index 37e35eb3..b9b473d2 100644 --- a/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.py +++ b/Hands on Machine Learning2/Chapter18 - Reinforcement Learning/CartPole_example2.py @@ -2,7 +2,7 @@ import matplotlib.pyplot as plt import numpy as np import matplotlib.animation as anime -from IPython.display import HTML +from IPython.display import HTML, display environment = gym.make('CartPole-v1') @@ -103,4 +103,4 @@ def plot_animation(frames, repeat=False, interval=40): animation.to_jshtml(fps=30, embed_frames=True, default_mode=None) -HTML(animation.to_jshtml()) +display(HTML(animation.to_jshtml())) From c0f8be498b22e3d41c8de6501b7daa38bf0e50a3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Dec 2021 15:01:53 +0800 Subject: [PATCH 0600/2002] Committed 2021/12/20 --- .../November2021_+3.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3.py new file mode 100644 index 00000000..0cd7c6cc --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() From 876bc6452194f4e28e423eb515a3185968764f32 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Dec 2021 15:19:00 +0800 Subject: [PATCH 0601/2002] Committed 2021/12/25 --- .../November2021_+3.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3.py index 0cd7c6cc..b9aba081 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3.py @@ -1,12 +1,12 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] -position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] +position_vacancies = [92415, 53496, 39357, 31572, 5843, 51570, 9722, 23956, 29969, 3826] -label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Miaoli", "Taichung", "Changhua", "Tainan", "Kaohsiung", "Pingtung"] fig, ax = plt.subplots(figsize=(8, 7)) -plt.xticks(region_num, labels=label, rotation=7) +plt.xticks(region_num, labels=label, rotation=20) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plot = ax.bar(region_num, position_vacancies) @@ -21,6 +21,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(20000, 90000) +plt.ylim(3000, 90000) plt.show() From 59483e27ecc6b444386e3cbf42251b2d9685b50b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Dec 2021 15:20:25 +0800 Subject: [PATCH 0602/2002] Committed 2021/12/25 --- .../November2021_+3plus.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3plus.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3plus.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3plus.py new file mode 100644 index 00000000..b9aba081 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3plus.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +position_vacancies = [92415, 53496, 39357, 31572, 5843, 51570, 9722, 23956, 29969, 3826] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Miaoli", "Taichung", "Changhua", "Tainan", "Kaohsiung", "Pingtung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=20) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(3000, 90000) + +plt.show() From f9cdf33c5144fa7a496bcec82527f5a272b3e412 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Dec 2021 15:26:32 +0800 Subject: [PATCH 0603/2002] Committed 2021/12/25 --- .../{November2021_+3plus.py => November2021_+3_order.py} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/{November2021_+3plus.py => November2021_+3_order.py} (75%) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3plus.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3_order.py similarity index 75% rename from The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3plus.py rename to The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3_order.py index b9aba081..5c3a80ef 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3plus.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_+3_order.py @@ -1,9 +1,9 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] -position_vacancies = [92415, 53496, 39357, 31572, 5843, 51570, 9722, 23956, 29969, 3826] +position_vacancies = [92415, 53496, 39357, 31572, 51570, 9722, 23956, 29969, 5843, 9722, 3826] -label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Miaoli", "Taichung", "Changhua", "Tainan", "Kaohsiung", "Pingtung"] +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung", "Miaoli", "Changhua", "Pingtung"] fig, ax = plt.subplots(figsize=(8, 7)) plt.xticks(region_num, labels=label, rotation=20) From 7b28e22404c35f826c09049fb54fd00b9d636b5f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Dec 2021 15:41:32 +0800 Subject: [PATCH 0604/2002] Committed 2021/12/25 --- .../November2021_metro.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py new file mode 100644 index 00000000..ad750306 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [145911, 76772, 64285, 32988, 33795, 29969] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() From de4cc3658a2f5f41ab3d05841e3ad121606a27e9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Dec 2021 15:50:14 +0800 Subject: [PATCH 0605/2002] Committed 2021/12/25 --- .../November2021_metro.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py index ad750306..f1dfff54 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py @@ -1,12 +1,12 @@ import matplotlib.pyplot as plt -region_num = [1, 2, 3, 4, 5, 6, 7] -position_vacancies = [145911, 76772, 64285, 32988, 33795, 29969] +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [150860, 76772, 64285, 32988, 33795, 3161] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", - "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung", "others"] -fig, ax = plt.subplots(figsize=(8, 7)) +fig, ax = plt.subplots(figsize=(8, 8)) plt.xticks(region_num, labels=label, rotation=7) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) @@ -22,6 +22,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(20000, 90000) +plt.ylim(30000, 150000) plt.show() From b91d91b7605469c11c1a4a1b92ccd1f61be7f152 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Dec 2021 15:54:23 +0800 Subject: [PATCH 0606/2002] Committed 2021/12/25 --- .../November2021_metro.py | 2 +- .../November2021_metro_.py | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro_.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py index f1dfff54..66cbf201 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro.py @@ -6,7 +6,7 @@ label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung", "others"] -fig, ax = plt.subplots(figsize=(8, 8)) +fig, ax = plt.subplots(figsize=(9, 8)) plt.xticks(region_num, labels=label, rotation=7) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro_.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro_.py new file mode 100644 index 00000000..48287148 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro_.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [150860, 76772, 64285, 32988, 33795] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung", "others"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(30000, 150000) + +plt.show() From 3d3b746a4de446ab74317c3a0b13fe9f3b6337f2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Dec 2021 16:00:52 +0800 Subject: [PATCH 0607/2002] Committed 2021/12/25 --- .../Monthly_total_job_openings_by_region/November2021_metro_.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro_.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro_.py index 48287148..c1e61f01 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro_.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/November2021_metro_.py @@ -4,7 +4,7 @@ position_vacancies = [150860, 76772, 64285, 32988, 33795] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", - "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung", "others"] + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] fig, ax = plt.subplots(figsize=(9, 8)) plt.xticks(region_num, labels=label, rotation=7) From 4c63439fe932cb52d4237672ada3532295c162cf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 12:39:09 +0800 Subject: [PATCH 0608/2002] Committed 2021/12/26 --- NetworkX Altas/Minimum cut.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 NetworkX Altas/Minimum cut.py diff --git a/NetworkX Altas/Minimum cut.py b/NetworkX Altas/Minimum cut.py new file mode 100644 index 00000000..1378d219 --- /dev/null +++ b/NetworkX Altas/Minimum cut.py @@ -0,0 +1,11 @@ +import networkx as nx + +G = nx.DiGraph() +G.add_edge("x", "a", capacity=3.0) +G.add_edge("x", "b", capacity=1.0) +G.add_edge("a", "c", capacity=3.0) +G.add_edge("b", "c", capacity=5.0) +G.add_edge("b", "d", capacity=4.0) +G.add_edge("d", "e", capacity=2.0) +G.add_edge("c", "y", capacity=2.0) +G.add_edge("e", "y", capacity=3.0) From b271d322a37a229e5926f2ffe6b2e6cfeb92791b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 12:56:34 +0800 Subject: [PATCH 0609/2002] Committed 2021/12/26 --- .../Identifying trees (cuts) in a circuit5.py | 120 ++++++++++++++++++ NetworkX Altas/Minimum cut.py | 5 + 2 files changed, 125 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit5.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit5.py b/NetworkX Altas/Identifying trees (cuts) in a circuit5.py new file mode 100644 index 00000000..c360d077 --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit5.py @@ -0,0 +1,120 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) diff --git a/NetworkX Altas/Minimum cut.py b/NetworkX Altas/Minimum cut.py index 1378d219..fedba8c3 100644 --- a/NetworkX Altas/Minimum cut.py +++ b/NetworkX Altas/Minimum cut.py @@ -1,4 +1,5 @@ import networkx as nx +import matplotlib.pyplot as plt G = nx.DiGraph() G.add_edge("x", "a", capacity=3.0) @@ -9,3 +10,7 @@ G.add_edge("d", "e", capacity=2.0) G.add_edge("c", "y", capacity=2.0) G.add_edge("e", "y", capacity=3.0) + +nx.draw_planar(G=G, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) + +plt.show() From 68d074bc83818b57b65cf5fd0c64cb440452a74f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:20:25 +0800 Subject: [PATCH 0610/2002] Committed 2021/12/26 --- .../Identifying trees (cuts) in a circuit5.py | 4 + .../Identifying trees (cuts) in a circuit6.py | 126 ++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit6.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit5.py b/NetworkX Altas/Identifying trees (cuts) in a circuit5.py index c360d077..edac148d 100644 --- a/NetworkX Altas/Identifying trees (cuts) in a circuit5.py +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit5.py @@ -118,3 +118,7 @@ def _to_string(formula, root): print(nx.algorithms.tree.is_tree(G=circuit)) print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.flow.minimum_cut(flowG=circuit, _s=[0, 1, 2, 3, 4], _t=[14, 15]) + +print(residential) diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit6.py b/NetworkX Altas/Identifying trees (cuts) in a circuit6.py new file mode 100644 index 00000000..9aa05754 --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit6.py @@ -0,0 +1,126 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.flow.minimum_cut(flowG=circuit, + _s=["PI1", "PI2", "PI3", "PI4", "PI5"], + _t=["PO1", "PO2"]) + +print(residential) From ef3b65b7f8be75c79fca604ad7518d15a1e25e58 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:24:15 +0800 Subject: [PATCH 0611/2002] Committed 2021/12/26 --- .../Identifying trees (cuts) in a circuit7.py | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit7.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit7.py b/NetworkX Altas/Identifying trees (cuts) in a circuit7.py new file mode 100644 index 00000000..8b623b66 --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit7.py @@ -0,0 +1,124 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.cut_size(G=circuit, S=[0, 1, 2, 3, 4], T=[14, 15]) + +print(residential) From 982e16e2efd15b2c466fb0a920409de05e4e8132 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:29:19 +0800 Subject: [PATCH 0612/2002] Committed 2021/12/26 --- .../Identifying trees (cuts) in a circuit8.py | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit8.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit8.py b/NetworkX Altas/Identifying trees (cuts) in a circuit8.py new file mode 100644 index 00000000..2dbf6b22 --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit8.py @@ -0,0 +1,124 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.cut_size(G=circuit, S=[0, 1, 2, 3, 4]) + +print(residential) From a2bacc6af1415d9f5a66090aeac9596c2c8b9288 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:32:46 +0800 Subject: [PATCH 0613/2002] Committed 2021/12/26 --- .../Identifying trees (cuts) in a circuit9.py | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit9.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit9.py b/NetworkX Altas/Identifying trees (cuts) in a circuit9.py new file mode 100644 index 00000000..cd5d52cb --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit9.py @@ -0,0 +1,124 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.cut_size(G=circuit, S=[i for i in range(1, 6)], T=[j for j in range(14, 16)]) + +print(residential) From d976738b67e6a0a5a85721eb63d9cb05bd2926cf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:39:38 +0800 Subject: [PATCH 0614/2002] Committed 2021/12/26 --- NetworkX Altas/cut_size_example.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 NetworkX Altas/cut_size_example.py diff --git a/NetworkX Altas/cut_size_example.py b/NetworkX Altas/cut_size_example.py new file mode 100644 index 00000000..194f7673 --- /dev/null +++ b/NetworkX Altas/cut_size_example.py @@ -0,0 +1,5 @@ +import networkx as nx + +graph = nx.barbell_graph(m1=3, m2=0) + + From 4d918ce69ce4e8fe18ab2074cc8c0efc65f26655 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:41:29 +0800 Subject: [PATCH 0615/2002] Committed 2021/12/26 --- ...Identifying trees (cuts) in a circuit10.py | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit10.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit10.py b/NetworkX Altas/Identifying trees (cuts) in a circuit10.py new file mode 100644 index 00000000..9d5c7f71 --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit10.py @@ -0,0 +1,124 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.cut_size(G=circuit, S={i for i in range(1, 6)}, T={j for j in range(14, 16)}) + +print(residential) From 51e1ee33d57cb4a63832c91c0ba2065613a40f81 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:50:25 +0800 Subject: [PATCH 0616/2002] Committed 2021/12/26 --- NetworkX Altas/cut_size_example.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NetworkX Altas/cut_size_example.py b/NetworkX Altas/cut_size_example.py index 194f7673..97993ae8 100644 --- a/NetworkX Altas/cut_size_example.py +++ b/NetworkX Altas/cut_size_example.py @@ -1,5 +1,10 @@ import networkx as nx +import matplotlib.pyplot as plt graph = nx.barbell_graph(m1=3, m2=0) +nx.draw_planar(G=graph, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) +plt.show() + +print(nx.algorithms.is_directed_acyclic_graph(graph)) From 9ccabe9bceab2412b86a14b80e59edbb1c9a560b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:51:53 +0800 Subject: [PATCH 0617/2002] Committed 2021/12/26 --- ...Identifying trees (cuts) in a circuit11.py | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit11.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit11.py b/NetworkX Altas/Identifying trees (cuts) in a circuit11.py new file mode 100644 index 00000000..1b29f418 --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit11.py @@ -0,0 +1,126 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.cut_size(G=circuit, S={i for i in range(1, 6)}, T={j for j in range(14, 16)}) + +print(residential) + +print(nx.algorithms.is_directed_acyclic_graph(G=circuit)) From 3ef088b9adbfc993d0fc03e3815868ef4e223abe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:58:35 +0800 Subject: [PATCH 0618/2002] Committed 2021/12/26 --- NetworkX Altas/cut_size_example.py | 5 +++++ NetworkX Altas/cut_size_example2.py | 10 ++++++++++ 2 files changed, 15 insertions(+) create mode 100644 NetworkX Altas/cut_size_example2.py diff --git a/NetworkX Altas/cut_size_example.py b/NetworkX Altas/cut_size_example.py index 97993ae8..2c11eab3 100644 --- a/NetworkX Altas/cut_size_example.py +++ b/NetworkX Altas/cut_size_example.py @@ -8,3 +8,8 @@ plt.show() print(nx.algorithms.is_directed_acyclic_graph(graph)) + +print(nx.cut_size(graph, {0, 1, 2}, {3, 4, 5})) + +# Reference: +# https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.cuts.cut_size.html#networkx.algorithms.cuts.cut_size diff --git a/NetworkX Altas/cut_size_example2.py b/NetworkX Altas/cut_size_example2.py new file mode 100644 index 00000000..a4181bee --- /dev/null +++ b/NetworkX Altas/cut_size_example2.py @@ -0,0 +1,10 @@ +import networkx as nx +import matplotlib.pyplot as plt + +graph = nx.MultiGraph(["ab", "ab"]) +S = {"a"} +T = {"b"} + +nx.draw_planar(G=graph, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) + +plt.show() \ No newline at end of file From faeea72a848ba829356d520ff92717dd26b1c0ab Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 14:01:29 +0800 Subject: [PATCH 0619/2002] Committed 2021/12/26 --- NetworkX Altas/cut_size_example2.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/cut_size_example2.py b/NetworkX Altas/cut_size_example2.py index a4181bee..cb5b3b8e 100644 --- a/NetworkX Altas/cut_size_example2.py +++ b/NetworkX Altas/cut_size_example2.py @@ -7,4 +7,6 @@ nx.draw_planar(G=graph, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) -plt.show() \ No newline at end of file +plt.show() + +print(nx.cut_size(graph, {"a"}, {"b"})) From 7065a98a2d45fd538e7787c2ad1a3050702ee8fd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 15:51:47 +0800 Subject: [PATCH 0620/2002] Committed 2021/12/26 --- ...Identifying trees (cuts) in a circuit12.py | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit12.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit12.py b/NetworkX Altas/Identifying trees (cuts) in a circuit12.py new file mode 100644 index 00000000..5b6d4298 --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit12.py @@ -0,0 +1,134 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.cut_size(G=circuit, S={i for i in range(1, 6)}, T={j for j in range(14, 16)}) + +print(residential) + +print(nx.algorithms.is_directed_acyclic_graph(G=circuit)) + +branching = nx.algorithms.dag_to_branching(G=circuit) + +nx.draw_planar(G=branching, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) + +plt.show() + +print('\n', nx.algorithms.minimum_branching(G=circuit)) From 65e852084343e11193e5d01a8a2f859f2b98ffbf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 15:53:04 +0800 Subject: [PATCH 0621/2002] Committed 2021/12/26 --- ...Identifying trees (cuts) in a circuit12.py | 2 +- ...Identifying trees (cuts) in a circuit13.py | 134 ++++++++++++++++++ 2 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit13.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit12.py b/NetworkX Altas/Identifying trees (cuts) in a circuit12.py index 5b6d4298..cd1fb0d7 100644 --- a/NetworkX Altas/Identifying trees (cuts) in a circuit12.py +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit12.py @@ -131,4 +131,4 @@ def _to_string(formula, root): plt.show() -print('\n', nx.algorithms.minimum_branching(G=circuit)) +print('\n', nx.algorithms.minimum_spanning_arborescence(G=circuit)) diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit13.py b/NetworkX Altas/Identifying trees (cuts) in a circuit13.py new file mode 100644 index 00000000..5b6d4298 --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit13.py @@ -0,0 +1,134 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.cut_size(G=circuit, S={i for i in range(1, 6)}, T={j for j in range(14, 16)}) + +print(residential) + +print(nx.algorithms.is_directed_acyclic_graph(G=circuit)) + +branching = nx.algorithms.dag_to_branching(G=circuit) + +nx.draw_planar(G=branching, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) + +plt.show() + +print('\n', nx.algorithms.minimum_branching(G=circuit)) From a0a9cffa7e2eb8d124218cd78bfa26646be18337 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 15:56:46 +0800 Subject: [PATCH 0622/2002] Committed 2021/12/26 --- ...Identifying trees (cuts) in a circuit14.py | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit14.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit14.py b/NetworkX Altas/Identifying trees (cuts) in a circuit14.py new file mode 100644 index 00000000..dceb239c --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit14.py @@ -0,0 +1,134 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.cut_size(G=circuit, S={i for i in range(1, 6)}, T={j for j in range(14, 16)}) + +print(residential) + +print(nx.algorithms.is_directed_acyclic_graph(G=circuit)) + +branching = nx.algorithms.dag_to_branching(G=circuit) + +nx.draw_planar(G=branching, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) + +plt.show() + +print('\n', nx.algorithms.maximum_branching(G=circuit)) From 7fba6a0ce525d3b21fff5a077095292a24122507 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Dec 2021 16:03:05 +0800 Subject: [PATCH 0623/2002] Committed 2021/12/26 --- ...Identifying trees (cuts) in a circuit15.py | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 NetworkX Altas/Identifying trees (cuts) in a circuit15.py diff --git a/NetworkX Altas/Identifying trees (cuts) in a circuit15.py b/NetworkX Altas/Identifying trees (cuts) in a circuit15.py new file mode 100644 index 00000000..1f666c03 --- /dev/null +++ b/NetworkX Altas/Identifying trees (cuts) in a circuit15.py @@ -0,0 +1,140 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +residential = nx.algorithms.cut_size(G=circuit, S={i for i in range(1, 6)}, T={j for j in range(14, 16)}) + +print(residential) + +print(nx.algorithms.is_directed_acyclic_graph(G=circuit)) + +branching = nx.algorithms.dag_to_branching(G=circuit) + +nx.draw_planar(G=branching, with_labels=True, node_color='g', node_size=800, font_size=14, width=0.8) + +plt.show() + +print('\n', nx.algorithms.maximum_branching(G=circuit)) +print('\n') +print(nx.is_tree(circuit), '\n') +print(nx.is_forest(circuit), '\n') +print(nx.is_directed_acyclic_graph(circuit), '\n') +print(nx.is_arborescence(circuit), '\n') +print(nx.is_branching(circuit)) From 551d0d27dc554faa587d90e2dc733202deb204bf Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 30 Dec 2021 08:16:49 +0800 Subject: [PATCH 0624/2002] Committed 2021/12/30 --- .../Monthly_total_job_openings_by_region/December2021.py | 0 .../Monthly_total_job_openings_by_region/December2021_metro.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py new file mode 100644 index 00000000..e69de29b From 182fafdc79c64cee5002095a6f810a741f15424f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 30 Dec 2021 09:22:44 +0800 Subject: [PATCH 0625/2002] Committed 2021/12/30 --- .../December2021_metro.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py index e69de29b..c1e61f01 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [150860, 76772, 64285, 32988, 33795] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(30000, 150000) + +plt.show() From f56203374689402c38d014a2fdf907e9a8621d4b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 31 Dec 2021 16:16:43 +0800 Subject: [PATCH 0626/2002] Committed 2021/12/31 --- .../December2021_metro.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py index c1e61f01..845739e6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5] -position_vacancies = [150860, 76772, 64285, 32988, 33795] +position_vacancies = [151771, 77456, 64269, 33182, 33945] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] @@ -20,7 +20,7 @@ plt.title("2021/11 the number of job openings in Taiwan by metro") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20211231064231/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(30000, 150000) From 098f9a6b66acca076a2987402a8e3a8c1239d1d5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 31 Dec 2021 16:18:40 +0800 Subject: [PATCH 0627/2002] Committed 2021/12/31 --- .../Monthly_total_job_openings_by_region/December2021_metro.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py index 845739e6..c44254e0 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021_metro.py @@ -17,7 +17,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2021/11 the number of job openings in Taiwan by metro") +plt.title("2021/12 the number of job openings in Taiwan by metro") # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20211231064231/https://www.104.com.tw/jb/category/?cat=2") From 6de5bbb9b519c27b912248f41f84148506c70e9c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 31 Dec 2021 16:22:54 +0800 Subject: [PATCH 0628/2002] Committed 2021/12/31 --- .../December2021.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py index e69de29b..111cfdf2 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [93322, 53419, 39619, 31983, 51453, 23935, 29993] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211231064231/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() From e04faeeb5636f152e469f2012e259ac9f7730164 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 31 Dec 2021 16:36:03 +0800 Subject: [PATCH 0629/2002] Committed 2021/12/31 --- .../Monthly_total_job_openings_by_region/December2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py index 111cfdf2..21a2a185 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/December2021.py @@ -16,7 +16,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2021/11 the number of job openings in Taiwan by region") +plt.title("2021/12 the number of job openings in Taiwan by region") # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20211231064231/https://www.104.com.tw/jb/category/?cat=2") From 5d7a9862273c9524c2a31cd446fcff2e2a03e38b Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 8 Jan 2022 21:29:56 +0800 Subject: [PATCH 0630/2002] Committed 2022/01/08 --- .../November2021.py | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py new file mode 100644 index 00000000..51a05010 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py @@ -0,0 +1,128 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08", "'21/09"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + # (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 +# (4017632 + 2544720 + 451422 + 2272812 + 574512 + 365117 + 452882), # 2021/09 + (4011586 + 2531659 + 450944 + 2272452 + 575131 + 364350 + 452665), # 2021/11 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + # (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + # (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + # (322506 + 213956), # 2021/08 + (322260 + 213818), # 2021/09 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + # (140004 + 13420 + 105645), # 2021/08 + (140856 + 13429 + 106036), # 2021/09 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +axes.set_ylim(23400000, 23700000) +axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +axes.set_xlabel("Year\n" + "References:\n" + "1. https://www.ris.gov.tw/app/portal/346 \n" + "2. https://www.macromicro.me/collections/15/\n" + "tw-housing-relative/124/tw-housing-price-sinyi") + +axes.set_ylabel("Population (Unit: 10 millions)") + +axes2 = axes.twinx() +axes2.set_ylabel("Yearly Housing Price Index (2010/04 - 2021/04) \n" + "Method: (Guotai + Xinyi) / 2", color='goldenrod') + +axes2.plot(x, housing_index, color='gold') +axes2.tick_params(axis='y', labelcolor='goldenrod') + +plt.grid(linewidth=0.3) +plt.title("Taiwan's population change from 2010 - 2021/09 \n in relation to Annual Housing Price Index") + +figure.tight_layout() + +plt.show() + +# References: +# 1. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi +# 2. From 17102493acb7d9fec3aa59d3626877ef02369a75 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 8 Jan 2022 21:46:00 +0800 Subject: [PATCH 0631/2002] Committed 2022/01/08 --- .../November2021.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py index 51a05010..19334297 100644 --- a/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py @@ -30,7 +30,8 @@ (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 # (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 - (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 +# (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 + (2814422 + 538568 + 1256062 + 485479 + 670664), # 2021/11 ] southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 @@ -45,7 +46,8 @@ (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 # (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 - (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 +# (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 + (1863435 + 2746939 + 493855 + 805177 + 264954), # 2021/11 ] eastTW = [(338805 + 230673), # 2010 @@ -60,7 +62,8 @@ (326247 + 216781), # 2019 (324372 + 215261), # 2020 # (322506 + 213956), # 2021/08 - (322260 + 213818), # 2021/09 +# (322260 + 213818), # 2021/09 + (321697 + 213534), # 2021/11 ] outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu @@ -75,7 +78,8 @@ (153274 + 105207), # 2019 (153876 + 105952), # 2020 # (140004 + 13420 + 105645), # 2021/08 - (140856 + 13429 + 106036), # 2021/09 +# (140856 + 13429 + 106036), # 2021/09 + (141327 + 13577 + 106310), # 2021/11 ] x = range(10, 22) @@ -93,7 +97,8 @@ (107.48 + 285.55) / 2, # 2018/04 (114.48 + 294.46) / 2, # 2019/04 (125.22 + 302.61) / 2, # 2020/04 - (129.45 + 333.60) / 2, # 2021/04 +# (129.45 + 333.60) / 2, # 2021/04 + (134.69 + 341.62) / 2 # 2021/07 ] figure, axes = plt.subplots() @@ -110,14 +115,14 @@ axes.set_ylabel("Population (Unit: 10 millions)") axes2 = axes.twinx() -axes2.set_ylabel("Yearly Housing Price Index (2010/04 - 2021/04) \n" +axes2.set_ylabel("Yearly Housing Price Index (2010/04 - 2021/07) \n" "Method: (Guotai + Xinyi) / 2", color='goldenrod') axes2.plot(x, housing_index, color='gold') axes2.tick_params(axis='y', labelcolor='goldenrod') plt.grid(linewidth=0.3) -plt.title("Taiwan's population change from 2010 - 2021/09 \n in relation to Annual Housing Price Index") +plt.title("Taiwan's population change from 2010 - 2021/11 \n in relation to Annual Housing Price Index") figure.tight_layout() From a5e689d8a65d31363b31619ec3cdcbea336b8d39 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 8 Jan 2022 21:48:05 +0800 Subject: [PATCH 0632/2002] Committed 2022/01/08 --- .../Population_versus_housing_price_index/November2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py index 19334297..fd325bcd 100644 --- a/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/November2021.py @@ -104,7 +104,7 @@ figure, axes = plt.subplots() axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) -axes.set_ylim(23400000, 23700000) +axes.set_ylim(23350000, 23700000) axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) axes.set_xlabel("Year\n" "References:\n" From 3ec94b456cf5c8ca3882b2a3adabb868d0f33b03 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 13 Jan 2022 16:32:50 +0800 Subject: [PATCH 0633/2002] Committed 2022/01/13 --- Supplementary materials/Robotics/Rotation Matrices.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Supplementary materials/Robotics/Rotation Matrices.py diff --git a/Supplementary materials/Robotics/Rotation Matrices.py b/Supplementary materials/Robotics/Rotation Matrices.py new file mode 100644 index 00000000..3524396d --- /dev/null +++ b/Supplementary materials/Robotics/Rotation Matrices.py @@ -0,0 +1,6 @@ +import numpy as np + +theta1 = 0 +theta2 = 0 + + From 666e04f42ecc0c5d5aeb6b5827551b9905129e3e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 13 Jan 2022 16:49:23 +0800 Subject: [PATCH 0634/2002] Committed 2022/01/13 --- .../Robotics/Rotation Matrices.py | 18 +++++++++++++++-- .../Robotics/Rotation Matrices2.py | 20 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 Supplementary materials/Robotics/Rotation Matrices2.py diff --git a/Supplementary materials/Robotics/Rotation Matrices.py b/Supplementary materials/Robotics/Rotation Matrices.py index 3524396d..176438c6 100644 --- a/Supplementary materials/Robotics/Rotation Matrices.py +++ b/Supplementary materials/Robotics/Rotation Matrices.py @@ -1,6 +1,20 @@ import numpy as np -theta1 = 0 -theta2 = 0 +theta1 = 0 # Theta 1 angle in degree +theta2 = 0 # Theta 2 angle in degree +# Convert these two angles from degrees to radians +theta1 = (theta1 / 180.0) * np.pi +theta2 = (theta2 / 180.0) * np.pi +rotation_matrix_0_1 = [[np.cos(theta1), - np.sin(theta1), 0], + [np.sin(theta1), np.cos(theta1), 0], + [0, 0, 1]] + +rotation_matrix_1_2 = [[np.cos(theta2), - np.sin(theta2), 0], + [np.sin(theta2), np.cos(theta2), 0], + [0, 0, 1]] + +rotation_matrix_0_2 = np.dot(rotation_matrix_0_1, rotation_matrix_1_2) + +print(rotation_matrix_0_2) diff --git a/Supplementary materials/Robotics/Rotation Matrices2.py b/Supplementary materials/Robotics/Rotation Matrices2.py new file mode 100644 index 00000000..58ef55f3 --- /dev/null +++ b/Supplementary materials/Robotics/Rotation Matrices2.py @@ -0,0 +1,20 @@ +import numpy as np + +theta1 = 90 # Theta 1 angle in degree +theta2 = 0 # Theta 2 angle in degree + +# Convert these two angles from degrees to radians +theta1 = (theta1 / 180.0) * np.pi +theta2 = (theta2 / 180.0) * np.pi + +rotation_matrix_0_1 = [[np.cos(theta1), - np.sin(theta1), 0], + [np.sin(theta1), np.cos(theta1), 0], + [0, 0, 1]] + +rotation_matrix_1_2 = [[np.cos(theta2), - np.sin(theta2), 0], + [np.sin(theta2), np.cos(theta2), 0], + [0, 0, 1]] + +rotation_matrix_0_2 = np.dot(rotation_matrix_0_1, rotation_matrix_1_2) + +print(rotation_matrix_0_2) From 47f2a6fb739fdcc57290af5e1e6c93151e128c9c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 13 Jan 2022 16:51:02 +0800 Subject: [PATCH 0635/2002] Committed 2022/01/13 --- .../Robotics/Rotation Matrices3.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Supplementary materials/Robotics/Rotation Matrices3.py diff --git a/Supplementary materials/Robotics/Rotation Matrices3.py b/Supplementary materials/Robotics/Rotation Matrices3.py new file mode 100644 index 00000000..e70c1d67 --- /dev/null +++ b/Supplementary materials/Robotics/Rotation Matrices3.py @@ -0,0 +1,20 @@ +import numpy as np + +theta1 = 0 # Theta 1 angle in degree +theta2 = 90 # Theta 2 angle in degree + +# Convert these two angles from degrees to radians +theta1 = (theta1 / 180.0) * np.pi +theta2 = (theta2 / 180.0) * np.pi + +rotation_matrix_0_1 = [[np.cos(theta1), - np.sin(theta1), 0], + [np.sin(theta1), np.cos(theta1), 0], + [0, 0, 1]] + +rotation_matrix_1_2 = [[np.cos(theta2), - np.sin(theta2), 0], + [np.sin(theta2), np.cos(theta2), 0], + [0, 0, 1]] + +rotation_matrix_0_2 = np.dot(rotation_matrix_0_1, rotation_matrix_1_2) + +print(rotation_matrix_0_2) From 3ebc4654e19f752f0159b0aabdc543958747127e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 13 Jan 2022 16:58:54 +0800 Subject: [PATCH 0636/2002] Committed 2022/01/13 --- .../Robotics/Rotation Matrices4.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Supplementary materials/Robotics/Rotation Matrices4.py diff --git a/Supplementary materials/Robotics/Rotation Matrices4.py b/Supplementary materials/Robotics/Rotation Matrices4.py new file mode 100644 index 00000000..4ee821ac --- /dev/null +++ b/Supplementary materials/Robotics/Rotation Matrices4.py @@ -0,0 +1,20 @@ +import numpy as np + +theta1 = 30 # Theta 1 angle in degree +theta2 = 60 # Theta 2 angle in degree + +# Convert these two angles from degrees to radians +theta1 = (theta1 / 180.0) * np.pi +theta2 = (theta2 / 180.0) * np.pi + +rotation_matrix_0_1 = [[np.cos(theta1), - np.sin(theta1), 0], + [np.sin(theta1), np.cos(theta1), 0], + [0, 0, 1]] + +rotation_matrix_1_2 = [[np.cos(theta2), - np.sin(theta2), 0], + [np.sin(theta2), np.cos(theta2), 0], + [0, 0, 1]] + +rotation_matrix_0_2 = np.dot(rotation_matrix_0_1, rotation_matrix_1_2) + +print(rotation_matrix_0_2) From eb0dfd4995ec1566d760d36444e94fb4d33fa425 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 14 Jan 2022 11:55:46 +0800 Subject: [PATCH 0637/2002] Committed 2022/01/14 --- Supplementary materials/Robotics/Trigonometric.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Supplementary materials/Robotics/Trigonometric.py diff --git a/Supplementary materials/Robotics/Trigonometric.py b/Supplementary materials/Robotics/Trigonometric.py new file mode 100644 index 00000000..c7fa3a79 --- /dev/null +++ b/Supplementary materials/Robotics/Trigonometric.py @@ -0,0 +1,5 @@ +import numpy as np + +theta = np.arccos(9) + +print(theta) From 97c13b6e8ae61385b7380a4eb84b30af7e7d207a Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 14 Jan 2022 15:07:39 +0800 Subject: [PATCH 0638/2002] Committed 2022/01/14 --- Supplementary materials/Robotics/Trigonometric.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Supplementary materials/Robotics/Trigonometric.py b/Supplementary materials/Robotics/Trigonometric.py index c7fa3a79..71cb5877 100644 --- a/Supplementary materials/Robotics/Trigonometric.py +++ b/Supplementary materials/Robotics/Trigonometric.py @@ -1,5 +1,5 @@ import numpy as np -theta = np.arccos(9) +theta = np.arccos(32/40) print(theta) From 29c392b6ab28f68c223383a08bb63e445a5964e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 30 Jan 2022 14:54:39 +0800 Subject: [PATCH 0639/2002] Committed 2022/01/30 --- .../January2022.py | 26 ++++++++++++++++++ .../January2022_metro.py | 27 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022.py new file mode 100644 index 00000000..63c34f1b --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [93322, 53419, 39619, 31983, 51453, 23935, 29993] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2022/01 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211231064231/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022_metro.py new file mode 100644 index 00000000..73a695c2 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [151771, 77456, 64269, 33182, 33945] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2022/01 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211231064231/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(30000, 150000) + +plt.show() From 04797c4445c3913ad5a58e62cca201a19262195e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 31 Jan 2022 14:59:16 +0800 Subject: [PATCH 0640/2002] Committed 2022/01/31 --- .../Monthly_total_job_openings_by_region/January2022.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022.py index 63c34f1b..a656a2fd 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5, 6, 7] -position_vacancies = [93322, 53419, 39619, 31983, 51453, 23935, 29993] +position_vacancies = [94107, 52597, 38864, 32089, 50772, 23918, 30356] label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] @@ -19,7 +19,7 @@ plt.title("2022/01 the number of job openings in Taiwan by region") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20211231064231/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20220130184455/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(20000, 90000) From 70b56f7b896acac0083b44e543a6796cd9ab8a4a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 31 Jan 2022 15:03:45 +0800 Subject: [PATCH 0641/2002] Committed 2022/01/31 --- .../Monthly_total_job_openings_by_region/January2022_metro.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022_metro.py index 73a695c2..db176ef7 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/January2022_metro.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5] -position_vacancies = [151771, 77456, 64269, 33182, 33945] +position_vacancies = [151796, 77042, 63362, 32980, 34233] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] @@ -20,7 +20,7 @@ plt.title("2022/01 the number of job openings in Taiwan by metro") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20211231064231/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20220130184455/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(30000, 150000) From ec69035ac59c5ba2e77e1b886166697dfed6999c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 8 Feb 2022 14:25:37 +0800 Subject: [PATCH 0642/2002] Committed 2022/02/08 --- .../Chapter1 - Sounds and Signals/__init__.py | 0 .../Chapter1 - Sounds and Signals/thinkdsp.py | 1759 +++++++++++++++++ .../Think DSP/__init__.py | 0 Digital Signal Processing/__init__.py | 0 4 files changed, 1759 insertions(+) create mode 100644 Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/__init__.py create mode 100644 Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/thinkdsp.py create mode 100644 Digital Signal Processing/Think DSP/__init__.py create mode 100644 Digital Signal Processing/__init__.py diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/__init__.py b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/thinkdsp.py b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/thinkdsp.py new file mode 100644 index 00000000..f26785b0 --- /dev/null +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/thinkdsp.py @@ -0,0 +1,1759 @@ +"""This file contains code used in "Think DSP", +by Allen B. Downey, available from greenteapress.com +Copyright 2013 Allen B. Downey +License: MIT License (https://opensource.org/licenses/MIT) +""" + +import copy +import math + +import numpy as np +import random +import scipy +import scipy.stats +import scipy.fftpack +import subprocess +import warnings + +from wave import open as open_wave +from scipy.io import wavfile + +import matplotlib.pyplot as plt + +try: + from IPython.display import Audio +except: + warnings.warn( + "Can't import Audio from IPython.display; " "Wave.make_audio() will not work." + ) + +PI2 = math.pi * 2 + + +def random_seed(x): + """Initialize the random and np.random generators. + x: int seed + """ + random.seed(x) + np.random.seed(x) + + +class UnimplementedMethodException(Exception): + """Exception if someone calls a method that should be overridden.""" + + +class WavFileWriter: + """Writes wav files.""" + + def __init__(self, filename="sound.wav", framerate=11025): + """Opens the file and sets parameters. + filename: string + framerate: samples per second + """ + self.filename = filename + self.framerate = framerate + self.nchannels = 1 + self.sampwidth = 2 + self.bits = self.sampwidth * 8 + self.bound = 2 ** (self.bits - 1) - 1 + + self.fmt = "h" + self.dtype = np.int16 + + self.fp = open_wave(self.filename, "w") + self.fp.setnchannels(self.nchannels) + self.fp.setsampwidth(self.sampwidth) + self.fp.setframerate(self.framerate) + + def write(self, wave): + """Writes a wave. + wave: Wave + """ + zs = wave.quantize(self.bound, self.dtype) + self.fp.writeframes(zs.tostring()) + + def close(self, duration=0): + """Closes the file. + duration: how many seconds of silence to append + """ + if duration: + self.write(rest(duration)) + + self.fp.close() + + +def read_wave(filename="sound.wav"): + """Reads a wave file. + filename: string + returns: Wave + """ + fp = open_wave(filename, "r") + + nchannels = fp.getnchannels() + nframes = fp.getnframes() + sampwidth = fp.getsampwidth() + framerate = fp.getframerate() + + z_str = fp.readframes(nframes) + + fp.close() + + dtype_map = {1: np.int8, 2: np.int16, 3: "special", 4: np.int32} + if sampwidth not in dtype_map: + raise ValueError("sampwidth %d unknown" % sampwidth) + + if sampwidth == 3: + xs = np.fromstring(z_str, dtype=np.int8).astype(np.int32) + ys = (xs[2::3] * 256 + xs[1::3]) * 256 + xs[0::3] + else: + ys = np.fromstring(z_str, dtype=dtype_map[sampwidth]) + + # if it's in stereo, just pull out the first channel + if nchannels == 2: + ys = ys[::2] + + # ts = np.arange(len(ys)) / framerate + wave = Wave(ys, framerate=framerate) + wave.normalize() + return wave + + +def read_wave_with_scipy(filename): + """Reads a wave file. + filename: string + returns: Wave + """ + # TODO: Check back later and see if this works on 24-bit data, + # and runs without throwing warnings. + framerate, ys = wavfile.read(filename) + + # if it's in stereo, just pull out the first channel + if ys.ndim == 2: + ys = ys[:, 0] + + # ts = np.arange(len(ys)) / framerate + wave = Wave(ys, framerate=framerate) + wave.normalize() + return wave + + +def play_wave(filename="sound.wav", player="aplay"): + """Plays a wave file. + filename: string + player: string name of executable that plays wav files + """ + cmd = "%s %s" % (player, filename) + popen = subprocess.Popen(cmd, shell=True) + popen.communicate() + + +def find_index(x, xs): + """Find the index corresponding to a given value in an array.""" + n = len(xs) + start = xs[0] + end = xs[-1] + i = round((n - 1) * (x - start) / (end - start)) + return int(i) + + +class _SpectrumParent: + """Contains code common to Spectrum and DCT. + """ + + def __init__(self, hs, fs, framerate, full=False): + """Initializes a spectrum. + hs: array of amplitudes (real or complex) + fs: array of frequencies + framerate: frames per second + full: boolean to indicate full or real FFT + """ + self.hs = np.asanyarray(hs) + self.fs = np.asanyarray(fs) + self.framerate = framerate + self.full = full + + @property + def max_freq(self): + """Returns the Nyquist frequency for this spectrum.""" + return self.framerate / 2 + + @property + def amps(self): + """Returns a sequence of amplitudes (read-only property).""" + return np.absolute(self.hs) + + @property + def power(self): + """Returns a sequence of powers (read-only property).""" + return self.amps ** 2 + + def copy(self): + """Makes a copy. + Returns: new Spectrum + """ + return copy.deepcopy(self) + + def max_diff(self, other): + """Computes the maximum absolute difference between spectra. + other: Spectrum + returns: float + """ + assert self.framerate == other.framerate + assert len(self) == len(other) + + hs = self.hs - other.hs + return np.max(np.abs(hs)) + + def ratio(self, denom, thresh=1, val=0): + """The ratio of two spectrums. + denom: Spectrum + thresh: values smaller than this are replaced + val: with this value + returns: new Wave + """ + ratio_spectrum = self.copy() + ratio_spectrum.hs /= denom.hs + ratio_spectrum.hs[denom.amps < thresh] = val + return ratio_spectrum + + def invert(self): + """Inverts this spectrum/filter. + returns: new Wave + """ + inverse = self.copy() + inverse.hs = 1 / inverse.hs + return inverse + + @property + def freq_res(self): + return self.framerate / 2 / (len(self.fs) - 1) + + def render_full(self, high=None): + """Extracts amps and fs from a full spectrum. + high: cutoff frequency + returns: fs, amps + """ + hs = np.fft.fftshift(self.hs) + amps = np.abs(hs) + fs = np.fft.fftshift(self.fs) + i = 0 if high is None else find_index(-high, fs) + j = None if high is None else find_index(high, fs) + 1 + return fs[i:j], amps[i:j] + + def plot(self, high=None, **options): + """Plots amplitude vs frequency. + Note: if this is a full spectrum, it ignores low and high + high: frequency to cut off at + """ + if self.full: + fs, amps = self.render_full(high) + plt.plot(fs, amps, **options) + else: + i = None if high is None else find_index(high, self.fs) + plt.plot(self.fs[:i], self.amps[:i], **options) + + def plot_power(self, high=None, **options): + """Plots power vs frequency. + high: frequency to cut off at + """ + if self.full: + fs, amps = self.render_full(high) + plt.plot(fs, amps ** 2, **options) + else: + i = None if high is None else find_index(high, self.fs) + plt.plot(self.fs[:i], self.power[:i], **options) + + def estimate_slope(self): + """Runs linear regression on log power vs log frequency. + returns: slope, inter, r2, p, stderr + """ + x = np.log(self.fs[1:]) + y = np.log(self.power[1:]) + t = scipy.stats.linregress(x, y) + return t + + def peaks(self): + """Finds the highest peaks and their frequencies. + returns: sorted list of (amplitude, frequency) pairs + """ + t = list(zip(self.amps, self.fs)) + t.sort(reverse=True) + return t + + +class Spectrum(_SpectrumParent): + """Represents the spectrum of a signal.""" + + def __len__(self): + """Length of the spectrum.""" + return len(self.hs) + + def __add__(self, other): + """Adds two spectrums elementwise. + other: Spectrum + returns: new Spectrum + """ + if other == 0: + return self.copy() + + assert all(self.fs == other.fs) + hs = self.hs + other.hs + return Spectrum(hs, self.fs, self.framerate, self.full) + + __radd__ = __add__ + + def __mul__(self, other): + """Multiplies two spectrums elementwise. + other: Spectrum + returns: new Spectrum + """ + assert all(self.fs == other.fs) + hs = self.hs * other.hs + return Spectrum(hs, self.fs, self.framerate, self.full) + + def convolve(self, other): + """Convolves two Spectrums. + other: Spectrum + returns: Spectrum + """ + assert all(self.fs == other.fs) + if self.full: + hs1 = np.fft.fftshift(self.hs) + hs2 = np.fft.fftshift(other.hs) + hs = np.convolve(hs1, hs2, mode="same") + hs = np.fft.ifftshift(hs) + else: + # not sure this branch would mean very much + hs = np.convolve(self.hs, other.hs, mode="same") + + return Spectrum(hs, self.fs, self.framerate, self.full) + + @property + def real(self): + """Returns the real part of the hs (read-only property).""" + return np.real(self.hs) + + @property + def imag(self): + """Returns the imaginary part of the hs (read-only property).""" + return np.imag(self.hs) + + @property + def angles(self): + """Returns a sequence of angles (read-only property).""" + return np.angle(self.hs) + + def scale(self, factor): + """Multiplies all elements by the given factor. + factor: what to multiply the magnitude by (could be complex) + """ + self.hs *= factor + + def low_pass(self, cutoff, factor=0): + """Attenuate frequencies above the cutoff. + cutoff: frequency in Hz + factor: what to multiply the magnitude by + """ + self.hs[abs(self.fs) > cutoff] *= factor + + def high_pass(self, cutoff, factor=0): + """Attenuate frequencies below the cutoff. + cutoff: frequency in Hz + factor: what to multiply the magnitude by + """ + self.hs[abs(self.fs) < cutoff] *= factor + + def band_stop(self, low_cutoff, high_cutoff, factor=0): + """Attenuate frequencies between the cutoffs. + low_cutoff: frequency in Hz + high_cutoff: frequency in Hz + factor: what to multiply the magnitude by + """ + # TODO: test this function + fs = abs(self.fs) + indices = (low_cutoff < fs) & (fs < high_cutoff) + self.hs[indices] *= factor + + def pink_filter(self, beta=1): + """Apply a filter that would make white noise pink. + beta: exponent of the pink noise + """ + denom = self.fs ** (beta / 2.0) + denom[0] = 1 + self.hs /= denom + + def differentiate(self): + """Apply the differentiation filter. + returns: new Spectrum + """ + new = self.copy() + new.hs *= PI2 * 1j * new.fs + return new + + def integrate(self): + """Apply the integration filter. + returns: new Spectrum + """ + new = self.copy() + zero = (new.fs == 0) + new.hs[~zero] /= PI2 * 1j * new.fs[~zero] + new.hs[zero] = np.inf + return new + + def make_integrated_spectrum(self): + """Makes an integrated spectrum. + """ + cs = np.cumsum(self.power) + cs /= cs[-1] + return IntegratedSpectrum(cs, self.fs) + + def make_wave(self): + """Transforms to the time domain. + returns: Wave + """ + if self.full: + ys = np.fft.ifft(self.hs) + else: + ys = np.fft.irfft(self.hs) + + # NOTE: whatever the start time was, we lose it when + # we transform back; we could fix that by saving start + # time in the Spectrum + # ts = self.start + np.arange(len(ys)) / self.framerate + return Wave(ys, framerate=self.framerate) + + +class IntegratedSpectrum: + """Represents the integral of a spectrum.""" + + def __init__(self, cs, fs): + """Initializes an integrated spectrum: + cs: sequence of cumulative amplitudes + fs: sequence of frequencies + """ + self.cs = np.asanyarray(cs) + self.fs = np.asanyarray(fs) + + def plot_power(self, low=0, high=None, expo=False, **options): + """Plots the integrated spectrum. + low: int index to start at + high: int index to end at + """ + cs = self.cs[low:high] + fs = self.fs[low:high] + + if expo: + cs = np.exp(cs) + + plt.plot(fs, cs, **options) + + def estimate_slope(self, low=1, high=-12000): + """Runs linear regression on log cumulative power vs log frequency. + returns: slope, inter, r2, p, stderr + """ + # print self.fs[low:high] + # print self.cs[low:high] + x = np.log(self.fs[low:high]) + y = np.log(self.cs[low:high]) + t = scipy.stats.linregress(x, y) + return t + + +class Dct(_SpectrumParent): + """Represents the spectrum of a signal using discrete cosine transform.""" + + @property + def amps(self): + """Returns a sequence of amplitudes (read-only property). + Note: for DCTs, amps are positive or negative real. + """ + return self.hs + + def __add__(self, other): + """Adds two DCTs elementwise. + other: DCT + returns: new DCT + """ + if other == 0: + return self + + assert self.framerate == other.framerate + hs = self.hs + other.hs + return Dct(hs, self.fs, self.framerate) + + __radd__ = __add__ + + def make_wave(self): + """Transforms to the time domain. + returns: Wave + """ + N = len(self.hs) + ys = scipy.fftpack.idct(self.hs, type=2) / 2 / N + # NOTE: whatever the start time was, we lose it when + # we transform back + # ts = self.start + np.arange(len(ys)) / self.framerate + return Wave(ys, framerate=self.framerate) + + +class Spectrogram: + """Represents the spectrum of a signal.""" + + def __init__(self, spec_map, seg_length): + """Initialize the spectrogram. + spec_map: map from float time to Spectrum + seg_length: number of samples in each segment + """ + self.spec_map = spec_map + self.seg_length = seg_length + + def any_spectrum(self): + """Returns an arbitrary spectrum from the spectrogram.""" + index = next(iter(self.spec_map)) + return self.spec_map[index] + + @property + def time_res(self): + """Time resolution in seconds.""" + spectrum = self.any_spectrum() + return float(self.seg_length) / spectrum.framerate + + @property + def freq_res(self): + """Frequency resolution in Hz.""" + return self.any_spectrum().freq_res + + def times(self): + """Sorted sequence of times. + returns: sequence of float times in seconds + """ + ts = sorted(iter(self.spec_map)) + return ts + + def frequencies(self): + """Sequence of frequencies. + returns: sequence of float freqencies in Hz. + """ + fs = self.any_spectrum().fs + return fs + + def plot(self, high=None, **options): + """Make a pseudocolor plot. + high: highest frequency component to plot + """ + fs = self.frequencies() + i = None if high is None else find_index(high, fs) + fs = fs[:i] + ts = self.times() + + # make the array + size = len(fs), len(ts) + array = np.zeros(size, dtype=np.float) + + # copy amplitude from each spectrum into a column of the array + for j, t in enumerate(ts): + spectrum = self.spec_map[t] + array[:, j] = spectrum.amps[:i] + + underride(options, cmap='inferno_r', shading='auto') + plt.pcolormesh(ts, fs, array, **options) + + def get_data(self, high=None, **options): + """Returns spectogram as 2D numpy array + high: highest frequency component to return + """ + fs = self.frequencies() + i = None if high is None else find_index(high, fs) + fs = fs[:i] + ts = self.times() + + # make the array + size = len(fs), len(ts) + array = np.zeros(size, dtype=np.float) + + # copy amplitude from each spectrum into a column of the array + for j, t in enumerate(ts): + spectrum = self.spec_map[t] + array[:, j] = spectrum.amps[:i] + + return array + + def make_wave(self): + """Inverts the spectrogram and returns a Wave. + returns: Wave + """ + res = [] + for t, spectrum in sorted(self.spec_map.items()): + wave = spectrum.make_wave() + n = len(wave) + + window = 1 / np.hamming(n) + wave.window(window) + + i = wave.find_index(t) + start = i - n // 2 + end = start + n + res.append((start, end, wave)) + + starts, ends, waves = zip(*res) + low = min(starts) + high = max(ends) + + ys = np.zeros(high - low, np.float) + for start, end, wave in res: + ys[start:end] = wave.ys + + # ts = np.arange(len(ys)) / self.framerate + return Wave(ys, framerate=wave.framerate) + + +class Wave: + """Represents a discrete-time waveform. + """ + + def __init__(self, ys, ts=None, framerate=None): + """Initializes the wave. + ys: wave array + ts: array of times + framerate: samples per second + """ + self.ys = np.asanyarray(ys) + self.framerate = framerate if framerate is not None else 11025 + + if ts is None: + self.ts = np.arange(len(ys)) / self.framerate + else: + self.ts = np.asanyarray(ts) + + def copy(self): + """Makes a copy. + Returns: new Wave + """ + return copy.deepcopy(self) + + def __len__(self): + return len(self.ys) + + @property + def start(self): + return self.ts[0] + + @property + def end(self): + return self.ts[-1] + + @property + def duration(self): + """Duration (property). + returns: float duration in seconds + """ + return len(self.ys) / self.framerate + + def __add__(self, other): + """Adds two waves elementwise. + other: Wave + returns: new Wave + """ + if other == 0: + return self + + assert self.framerate == other.framerate + + # make an array of times that covers both waves + start = min(self.start, other.start) + end = max(self.end, other.end) + n = int(round((end - start) * self.framerate)) + 1 + ys = np.zeros(n) + ts = start + np.arange(n) / self.framerate + + def add_ys(wave): + i = find_index(wave.start, ts) + + # make sure the arrays line up reasonably well + diff = ts[i] - wave.start + dt = 1 / wave.framerate + if (diff / dt) > 0.1: + warnings.warn( + "Can't add these waveforms; their " "time arrays don't line up." + ) + + j = i + len(wave) + ys[i:j] += wave.ys + + add_ys(self) + add_ys(other) + + return Wave(ys, ts, self.framerate) + + __radd__ = __add__ + + def __or__(self, other): + """Concatenates two waves. + other: Wave + returns: new Wave + """ + if self.framerate != other.framerate: + raise ValueError("Wave.__or__: framerates do not agree") + + ys = np.concatenate((self.ys, other.ys)) + # ts = np.arange(len(ys)) / self.framerate + return Wave(ys, framerate=self.framerate) + + def __mul__(self, other): + """Multiplies two waves elementwise. + Note: this operation ignores the timestamps; the result + has the timestamps of self. + other: Wave + returns: new Wave + """ + # the spectrums have to have the same framerate and duration + assert self.framerate == other.framerate + assert len(self) == len(other) + + ys = self.ys * other.ys + return Wave(ys, self.ts, self.framerate) + + def max_diff(self, other): + """Computes the maximum absolute difference between waves. + other: Wave + returns: float + """ + assert self.framerate == other.framerate + assert len(self) == len(other) + + ys = self.ys - other.ys + return np.max(np.abs(ys)) + + def convolve(self, other): + """Convolves two waves. + Note: this operation ignores the timestamps; the result + has the timestamps of self. + other: Wave or NumPy array + returns: Wave + """ + if isinstance(other, Wave): + assert self.framerate == other.framerate + window = other.ys + else: + window = other + + ys = np.convolve(self.ys, window, mode="full") + # ts = np.arange(len(ys)) / self.framerate + return Wave(ys, framerate=self.framerate) + + def diff(self): + """Computes the difference between successive elements. + returns: new Wave + """ + ys = np.diff(self.ys) + ts = self.ts[1:].copy() + return Wave(ys, ts, self.framerate) + + def cumsum(self): + """Computes the cumulative sum of the elements. + returns: new Wave + """ + ys = np.cumsum(self.ys) + ts = self.ts.copy() + return Wave(ys, ts, self.framerate) + + def quantize(self, bound, dtype): + """Maps the waveform to quanta. + bound: maximum amplitude + dtype: numpy data type or string + returns: quantized signal + """ + return quantize(self.ys, bound, dtype) + + def apodize(self, denom=20, duration=0.1): + """Tapers the amplitude at the beginning and end of the signal. + Tapers either the given duration of time or the given + fraction of the total duration, whichever is less. + denom: float fraction of the segment to taper + duration: float duration of the taper in seconds + """ + self.ys = apodize(self.ys, self.framerate, denom, duration) + + def hamming(self): + """Apply a Hamming window to the wave. + """ + self.ys *= np.hamming(len(self.ys)) + + def window(self, window): + """Apply a window to the wave. + window: sequence of multipliers, same length as self.ys + """ + self.ys *= window + + def scale(self, factor): + """Multplies the wave by a factor. + factor: scale factor + """ + self.ys *= factor + + def shift(self, shift): + """Shifts the wave left or right in time. + shift: float time shift + """ + # TODO: track down other uses of this function and check them + self.ts += shift + + def roll(self, roll): + """Rolls this wave by the given number of locations. + """ + self.ys = np.roll(self.ys, roll) + + def truncate(self, n): + """Trims this wave to the given length. + n: integer index + """ + self.ys = truncate(self.ys, n) + self.ts = truncate(self.ts, n) + + def zero_pad(self, n): + """Trims this wave to the given length. + n: integer index + """ + self.ys = zero_pad(self.ys, n) + self.ts = self.start + np.arange(n) / self.framerate + + def normalize(self, amp=1.0): + """Normalizes the signal to the given amplitude. + amp: float amplitude + """ + self.ys = normalize(self.ys, amp=amp) + + def unbias(self): + """Unbiases the signal. + """ + self.ys = unbias(self.ys) + + def find_index(self, t): + """Find the index corresponding to a given time.""" + n = len(self) + start = self.start + end = self.end + i = round((n - 1) * (t - start) / (end - start)) + return int(i) + + def segment(self, start=None, duration=None): + """Extracts a segment. + start: float start time in seconds + duration: float duration in seconds + returns: Wave + """ + if start is None: + start = self.ts[0] + i = 0 + else: + i = self.find_index(start) + + j = None if duration is None else self.find_index(start + duration) + return self.slice(i, j) + + def slice(self, i, j): + """Makes a slice from a Wave. + i: first slice index + j: second slice index + """ + ys = self.ys[i:j].copy() + ts = self.ts[i:j].copy() + return Wave(ys, ts, self.framerate) + + def make_spectrum(self, full=False): + """Computes the spectrum using FFT. + full: boolean, whethere to compute a full FFT + (as opposed to a real FFT) + returns: Spectrum + """ + n = len(self.ys) + d = 1 / self.framerate + + if full: + hs = np.fft.fft(self.ys) + fs = np.fft.fftfreq(n, d) + else: + hs = np.fft.rfft(self.ys) + fs = np.fft.rfftfreq(n, d) + + return Spectrum(hs, fs, self.framerate, full) + + def make_dct(self): + """Computes the DCT of this wave. + """ + N = len(self.ys) + hs = scipy.fftpack.dct(self.ys, type=2) + fs = (0.5 + np.arange(N)) / 2 + return Dct(hs, fs, self.framerate) + + def make_spectrogram(self, seg_length, win_flag=True): + """Computes the spectrogram of the wave. + seg_length: number of samples in each segment + win_flag: boolean, whether to apply hamming window to each segment + returns: Spectrogram + """ + if win_flag: + window = np.hamming(seg_length) + i, j = 0, seg_length + step = int(seg_length // 2) + + # map from time to Spectrum + spec_map = {} + + while j < len(self.ys): + segment = self.slice(i, j) + if win_flag: + segment.window(window) + + # the nominal time for this segment is the midpoint + t = (segment.start + segment.end) / 2 + spec_map[t] = segment.make_spectrum() + + i += step + j += step + + return Spectrogram(spec_map, seg_length) + + def get_xfactor(self, options): + try: + xfactor = options["xfactor"] + options.pop("xfactor") + except KeyError: + xfactor = 1 + return xfactor + + def plot(self, **options): + """Plots the wave. + If the ys are complex, plots the real part. + """ + xfactor = self.get_xfactor(options) + plt.plot(self.ts * xfactor, np.real(self.ys), **options) + + def plot_vlines(self, **options): + """Plots the wave with vertical lines for samples. + """ + xfactor = self.get_xfactor(options) + plt.vlines(self.ts * xfactor, 0, self.ys, **options) + + def corr(self, other): + """Correlation coefficient two waves. + other: Wave + returns: float coefficient of correlation + """ + corr = np.corrcoef(self.ys, other.ys)[0, 1] + return corr + + def cov_mat(self, other): + """Covariance matrix of two waves. + other: Wave + returns: 2x2 covariance matrix + """ + return np.cov(self.ys, other.ys) + + def cov(self, other): + """Covariance of two unbiased waves. + other: Wave + returns: float + """ + total = sum(self.ys * other.ys) / len(self.ys) + return total + + def cos_cov(self, k): + """Covariance with a cosine signal. + freq: freq of the cosine signal in Hz + returns: float covariance + """ + n = len(self.ys) + factor = math.pi * k / n + ys = [math.cos(factor * (i + 0.5)) for i in range(n)] + total = 2 * sum(self.ys * ys) + return total + + def cos_transform(self): + """Discrete cosine transform. + returns: list of frequency, cov pairs + """ + n = len(self.ys) + res = [] + for k in range(n): + cov = self.cos_cov(k) + res.append((k, cov)) + + return res + + def write(self, filename="sound.wav"): + """Write a wave file. + filename: string + """ + print("Writing", filename) + wfile = WavFileWriter(filename, self.framerate) + wfile.write(self) + wfile.close() + + def play(self, filename="sound.wav"): + """Plays a wave file. + filename: string + """ + self.write(filename) + play_wave(filename) + + def make_audio(self): + """Makes an IPython Audio object. + """ + audio = Audio(data=self.ys.real, rate=self.framerate) + return audio + + +def unbias(ys): + """Shifts a wave array so it has mean 0. + ys: wave array + returns: wave array + """ + return ys - ys.mean() + + +def normalize(ys, amp=1.0): + """Normalizes a wave array so the maximum amplitude is +amp or -amp. + ys: wave array + amp: max amplitude (pos or neg) in result + returns: wave array + """ + high, low = abs(max(ys)), abs(min(ys)) + return amp * ys / max(high, low) + + +def shift_right(ys, shift): + """Shifts a wave array to the right and zero pads. + ys: wave array + shift: integer shift + returns: wave array + """ + res = np.zeros(len(ys) + shift) + res[shift:] = ys + return res + + +def shift_left(ys, shift): + """Shifts a wave array to the left. + ys: wave array + shift: integer shift + returns: wave array + """ + return ys[shift:] + + +def truncate(ys, n): + """Trims a wave array to the given length. + ys: wave array + n: integer length + returns: wave array + """ + return ys[:n] + + +def quantize(ys, bound, dtype): + """Maps the waveform to quanta. + ys: wave array + bound: maximum amplitude + dtype: numpy data type of the result + returns: quantized signal + """ + if max(ys) > 1 or min(ys) < -1: + warnings.warn("Warning: normalizing before quantizing.") + ys = normalize(ys) + + zs = (ys * bound).astype(dtype) + return zs + + +def apodize(ys, framerate, denom=20, duration=0.1): + """Tapers the amplitude at the beginning and end of the signal. + Tapers either the given duration of time or the given + fraction of the total duration, whichever is less. + ys: wave array + framerate: int frames per second + denom: float fraction of the segment to taper + duration: float duration of the taper in seconds + returns: wave array + """ + # a fixed fraction of the segment + n = len(ys) + k1 = n // denom + + # a fixed duration of time + k2 = int(duration * framerate) + + k = min(k1, k2) + + w1 = np.linspace(0, 1, k) + w2 = np.ones(n - 2 * k) + w3 = np.linspace(1, 0, k) + + window = np.concatenate((w1, w2, w3)) + return ys * window + + +class Signal: + """Represents a time-varying signal.""" + + def __add__(self, other): + """Adds two signals. + other: Signal + returns: Signal + """ + if other == 0: + return self + return SumSignal(self, other) + + __radd__ = __add__ + + @property + def period(self): + """Period of the signal in seconds (property). + Since this is used primarily for purposes of plotting, + the default behavior is to return a value, 0.1 seconds, + that is reasonable for many signals. + returns: float seconds + """ + return 0.1 + + def plot(self, framerate=11025): + """Plots the signal. + The default behavior is to plot three periods. + framerate: samples per second + """ + duration = self.period * 3 + wave = self.make_wave(duration, start=0, framerate=framerate) + wave.plot() + + def make_wave(self, duration=1, start=0, framerate=11025): + """Makes a Wave object. + duration: float seconds + start: float seconds + framerate: int frames per second + returns: Wave + """ + n = round(duration * framerate) + ts = start + np.arange(n) / framerate + ys = self.evaluate(ts) + return Wave(ys, ts, framerate=framerate) + + +def infer_framerate(ts): + """Given ts, find the framerate. + Assumes that the ts are equally spaced. + ts: sequence of times in seconds + returns: frames per second + """ + # TODO: confirm that this is never used and remove it + dt = ts[1] - ts[0] + framerate = 1.0 / dt + return framerate + + +class SumSignal(Signal): + """Represents the sum of signals.""" + + def __init__(self, *args): + """Initializes the sum. + args: tuple of signals + """ + self.signals = args + + @property + def period(self): + """Period of the signal in seconds. + Note: this is not correct; it's mostly a placekeeper. + But it is correct for a harmonic sequence where all + component frequencies are multiples of the fundamental. + returns: float seconds + """ + return max(sig.period for sig in self.signals) + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ts = np.asarray(ts) + return sum(sig.evaluate(ts) for sig in self.signals) + + +class Sinusoid(Signal): + """Represents a sinusoidal signal.""" + + def __init__(self, freq=440, amp=1.0, offset=0, func=np.sin): + """Initializes a sinusoidal signal. + freq: float frequency in Hz + amp: float amplitude, 1.0 is nominal max + offset: float phase offset in radians + func: function that maps phase to amplitude + """ + self.freq = freq + self.amp = amp + self.offset = offset + self.func = func + + @property + def period(self): + """Period of the signal in seconds. + returns: float seconds + """ + return 1.0 / self.freq + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ts = np.asarray(ts) + phases = PI2 * self.freq * ts + self.offset + ys = self.amp * self.func(phases) + return ys + + +def CosSignal(freq=440, amp=1.0, offset=0): + """Makes a cosine Sinusoid. + freq: float frequency in Hz + amp: float amplitude, 1.0 is nominal max + offset: float phase offset in radians + returns: Sinusoid object + """ + return Sinusoid(freq, amp, offset, func=np.cos) + + +def SinSignal(freq=440, amp=1.0, offset=0): + """Makes a sine Sinusoid. + freq: float frequency in Hz + amp: float amplitude, 1.0 is nominal max + offset: float phase offset in radians + returns: Sinusoid object + """ + return Sinusoid(freq, amp, offset, func=np.sin) + + +def Sinc(freq=440, amp=1.0, offset=0): + """Makes a Sinc function. + freq: float frequency in Hz + amp: float amplitude, 1.0 is nominal max + offset: float phase offset in radians + returns: Sinusoid object + """ + return Sinusoid(freq, amp, offset, func=np.sinc) + + +class ComplexSinusoid(Sinusoid): + """Represents a complex exponential signal.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ts = np.asarray(ts) + phases = PI2 * self.freq * ts + self.offset + ys = self.amp * np.exp(1j * phases) + return ys + + +class SquareSignal(Sinusoid): + """Represents a square signal.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ts = np.asarray(ts) + cycles = self.freq * ts + self.offset / PI2 + frac, _ = np.modf(cycles) + ys = self.amp * np.sign(unbias(frac)) + return ys + + +class SawtoothSignal(Sinusoid): + """Represents a sawtooth signal.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ts = np.asarray(ts) + cycles = self.freq * ts + self.offset / PI2 + frac, _ = np.modf(cycles) + ys = normalize(unbias(frac), self.amp) + return ys + + +class ParabolicSignal(Sinusoid): + """Represents a parabolic signal.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ts = np.asarray(ts) + cycles = self.freq * ts + self.offset / PI2 + frac, _ = np.modf(cycles) + ys = (frac - 0.5) ** 2 + ys = normalize(unbias(ys), self.amp) + return ys + + +class CubicSignal(ParabolicSignal): + """Represents a cubic signal.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ys = ParabolicSignal.evaluate(self, ts) + ys = np.cumsum(ys) + ys = normalize(unbias(ys), self.amp) + return ys + + +class GlottalSignal(Sinusoid): + """Represents a periodic signal that resembles a glottal signal.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ts = np.asarray(ts) + cycles = self.freq * ts + self.offset / PI2 + frac, _ = np.modf(cycles) + ys = frac ** 2 * (1 - frac) + ys = normalize(unbias(ys), self.amp) + return ys + + +class TriangleSignal(Sinusoid): + """Represents a triangle signal.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ts = np.asarray(ts) + cycles = self.freq * ts + self.offset / PI2 + frac, _ = np.modf(cycles) + ys = np.abs(frac - 0.5) + ys = normalize(unbias(ys), self.amp) + return ys + +from scipy.integrate import cumtrapz + +class Chirp(Signal): + """Represents a signal with variable frequency.""" + + def __init__(self, start=440, end=880, amp=1.0): + """Initializes a linear chirp. + start: float frequency in Hz + end: float frequency in Hz + amp: float amplitude, 1.0 is nominal max + """ + self.start = start + self.end = end + self.amp = amp + + @property + def period(self): + """Period of the signal in seconds. + returns: float seconds + """ + return ValueError("Non-periodic signal.") + + def evaluate(self, ts): + """Evaluates the signal at the given times. + Note: This version is a little more complicated than the one + in the book because it handles the case where the ts are + not equally spaced. + ts: float array of times + returns: float wave array + """ + def interpolate(ts, f0, f1): + t0, t1 = ts[0], ts[-1] + return f0 + (f1 - f0) * (ts - t0) / (t1 - t0) + + # compute the frequencies + ts = np.asarray(ts) + freqs = interpolate(ts, self.start, self.end) + + # compute the time intervals + dts = np.diff(ts, append=ts[-1]) + + # compute the changes in phase + dphis = PI2 * freqs * dts + dphis = np.roll(dphis, 1) + + # compute phase + phases = np.cumsum(dphis) + + # compute the amplitudes + ys = self.amp * np.cos(phases) + return ys + + +class ExpoChirp(Chirp): + """Represents a signal with varying frequency.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + f0, f1 = np.log10(self.start), np.log10(self.end) + freqs = np.logspace(f0, f1, len(ts)) + dts = np.diff(ts, prepend=0) + dphis = PI2 * freqs * dts + phases = np.cumsum(dphis) + ys = self.amp * np.cos(phases) + return ys + + +class SilentSignal(Signal): + """Represents silence.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + return np.zeros(len(ts)) + + +class Impulses(Signal): + """Represents silence.""" + + def __init__(self, locations, amps=1): + self.locations = np.asanyarray(locations) + self.amps = amps + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ys = np.zeros(len(ts)) + indices = np.searchsorted(ts, self.locations) + ys[indices] = self.amps + return ys + + +class Noise(Signal): + """Represents a noise signal (abstract parent class).""" + + def __init__(self, amp=1.0): + """Initializes a white noise signal. + amp: float amplitude, 1.0 is nominal max + """ + self.amp = amp + + @property + def period(self): + """Period of the signal in seconds. + returns: float seconds + """ + return ValueError("Non-periodic signal.") + + +class UncorrelatedUniformNoise(Noise): + """Represents uncorrelated uniform noise.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ys = np.random.uniform(-self.amp, self.amp, len(ts)) + return ys + + +class UncorrelatedGaussianNoise(Noise): + """Represents uncorrelated gaussian noise.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + ts: float array of times + returns: float wave array + """ + ys = np.random.normal(0, self.amp, len(ts)) + return ys + + +class BrownianNoise(Noise): + """Represents Brownian noise, aka red noise.""" + + def evaluate(self, ts): + """Evaluates the signal at the given times. + Computes Brownian noise by taking the cumulative sum of + a uniform random series. + ts: float array of times + returns: float wave array + """ + dys = np.random.uniform(-1, 1, len(ts)) + # ys = scipy.integrate.cumtrapz(dys, ts) + ys = np.cumsum(dys) + ys = normalize(unbias(ys), self.amp) + return ys + + +class PinkNoise(Noise): + """Represents Brownian noise, aka red noise.""" + + def __init__(self, amp=1.0, beta=1.0): + """Initializes a pink noise signal. + amp: float amplitude, 1.0 is nominal max + """ + self.amp = amp + self.beta = beta + + def make_wave(self, duration=1, start=0, framerate=11025): + """Makes a Wave object. + duration: float seconds + start: float seconds + framerate: int frames per second + returns: Wave + """ + signal = UncorrelatedUniformNoise() + wave = signal.make_wave(duration, start, framerate) + spectrum = wave.make_spectrum() + + spectrum.pink_filter(beta=self.beta) + + wave2 = spectrum.make_wave() + wave2.unbias() + wave2.normalize(self.amp) + return wave2 + + +def rest(duration): + """Makes a rest of the given duration. + duration: float seconds + returns: Wave + """ + signal = SilentSignal() + wave = signal.make_wave(duration) + return wave + + +def make_note(midi_num, duration, sig_cons=CosSignal, framerate=11025): + """Make a MIDI note with the given duration. + midi_num: int MIDI note number + duration: float seconds + sig_cons: Signal constructor function + framerate: int frames per second + returns: Wave + """ + freq = midi_to_freq(midi_num) + signal = sig_cons(freq) + wave = signal.make_wave(duration, framerate=framerate) + wave.apodize() + return wave + + +def make_chord(midi_nums, duration, sig_cons=CosSignal, framerate=11025): + """Make a chord with the given duration. + midi_nums: sequence of int MIDI note numbers + duration: float seconds + sig_cons: Signal constructor function + framerate: int frames per second + returns: Wave + """ + freqs = [midi_to_freq(num) for num in midi_nums] + signal = sum(sig_cons(freq) for freq in freqs) + wave = signal.make_wave(duration, framerate=framerate) + wave.apodize() + return wave + + +def midi_to_freq(midi_num): + """Converts MIDI note number to frequency. + midi_num: int MIDI note number + returns: float frequency in Hz + """ + x = (midi_num - 69) / 12.0 + freq = 440.0 * 2 ** x + return freq + + +def sin_wave(freq, duration=1, offset=0): + """Makes a sine wave with the given parameters. + freq: float cycles per second + duration: float seconds + offset: float radians + returns: Wave + """ + signal = SinSignal(freq, offset=offset) + wave = signal.make_wave(duration) + return wave + + +def cos_wave(freq, duration=1, offset=0): + """Makes a cosine wave with the given parameters. + freq: float cycles per second + duration: float seconds + offset: float radians + returns: Wave + """ + signal = CosSignal(freq, offset=offset) + wave = signal.make_wave(duration) + return wave + + +def mag(a): + """Computes the magnitude of a numpy array. + a: numpy array + returns: float + """ + return np.sqrt(np.dot(a, a)) + + +def zero_pad(array, n): + """Extends an array with zeros. + array: numpy array + n: length of result + returns: new NumPy array + """ + res = np.zeros(n) + res[: len(array)] = array + return res + + +def decorate(**options): + """Decorate the current axes. + Call decorate with keyword arguments like + decorate(title='Title', + xlabel='x', + ylabel='y') + The keyword arguments can be any of the axis properties + https://matplotlib.org/api/axes_api.html + In addition, you can use `legend=False` to suppress the legend. + And you can use `loc` to indicate the location of the legend + (the default value is 'best') + """ + loc = options.pop("loc", "best") + if options.pop("legend", True): + legend(loc=loc) + + plt.gca().set(**options) + plt.tight_layout() + + +def legend(**options): + """Draws a legend only if there is at least one labeled item. + options are passed to plt.legend() + https://matplotlib.org/api/_as_gen/matplotlib.plt.legend.html + """ + underride(options, loc="best", frameon=False) + + ax = plt.gca() + handles, labels = ax.get_legend_handles_labels() + if handles: + ax.legend(handles, labels, **options) + + +def remove_from_legend(bad_labels): + """Removes some labels from the legend. + bad_labels: sequence of strings + """ + ax = plt.gca() + handles, labels = ax.get_legend_handles_labels() + handle_list, label_list = [], [] + for handle, label in zip(handles, labels): + if label not in bad_labels: + handle_list.append(handle) + label_list.append(label) + ax.legend(handle_list, label_list) + + +def underride(d, **options): + """Add key-value pairs to d only if key is not in d. + If d is None, create a new dictionary. + d: dictionary + options: keyword args to add to d + """ + if d is None: + d = {} + + for key, val in options.items(): + d.setdefault(key, val) + + return d + + + + +def main(): + + cos_basis = cos_wave(440) + sin_basis = sin_wave(440) + + wave = cos_wave(440, offset=math.pi / 2) + cos_cov = cos_basis.cov(wave) + sin_cov = sin_basis.cov(wave) + print(cos_cov, sin_cov, mag((cos_cov, sin_cov))) + return + + wfile = WavFileWriter() + for sig_cons in [ + SinSignal, + TriangleSignal, + SawtoothSignal, + GlottalSignal, + ParabolicSignal, + SquareSignal, + ]: + print(sig_cons) + sig = sig_cons(440) + wave = sig.make_wave(1) + wave.apodize() + wfile.write(wave) + wfile.close() + return + + signal = GlottalSignal(440) + signal.plot() + plt.show() + return + + wfile = WavFileWriter() + for m in range(60, 0, -1): + wfile.write(make_note(m, 0.25)) + wfile.close() + return + + wave1 = make_note(69, 1) + wave2 = make_chord([69, 72, 76], 1) + wave = wave1 | wave2 + + wfile = WavFileWriter() + wfile.write(wave) + wfile.close() + return + + sig1 = CosSignal(freq=440) + sig2 = CosSignal(freq=523.25) + sig3 = CosSignal(freq=660) + sig4 = CosSignal(freq=880) + sig5 = CosSignal(freq=987) + sig = sig1 + sig2 + sig3 + sig4 + + # wave = Wave(sig, duration=0.02) + # wave.plot() + + wave = sig.make_wave(duration=1) + # wave.normalize() + + wfile = WavFileWriter(wave) + wfile.write() + wfile.close() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/Digital Signal Processing/Think DSP/__init__.py b/Digital Signal Processing/Think DSP/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Digital Signal Processing/__init__.py b/Digital Signal Processing/__init__.py new file mode 100644 index 00000000..e69de29b From e49375398e0ef8f90a39678e90bda82e10682977 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 15:17:02 +0800 Subject: [PATCH 0643/2002] Committed 2022/02/09 --- .../Chapter1 - Sounds and Signals/Spectral Decomposition.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py new file mode 100644 index 00000000..e69de29b From 01c05b5bd1d49d9fa2a3d52481a4590c26ad67e3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 16:40:12 +0800 Subject: [PATCH 0644/2002] Committed 2022/02/09 --- .../Chapter1 - Sounds and Signals/Spectral Decomposition.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py index e69de29b..14516252 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py @@ -0,0 +1,6 @@ +import thinkdsp + +cos_signal = thinkdsp.CosSignal(freq=440, amp=1.0, offset=0) +sin_sigal = thinkdsp.SinSignal(freq=880, amp=0.5, offset=0) + + From ea3312641a1daaa09121abe16857ba33f4f5b62e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 16:54:38 +0800 Subject: [PATCH 0645/2002] Committed 2022/02/09 --- .../Chapter1 - Sounds and Signals/Spectral Decomposition.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py index 14516252..cfbe68eb 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py @@ -3,4 +3,4 @@ cos_signal = thinkdsp.CosSignal(freq=440, amp=1.0, offset=0) sin_sigal = thinkdsp.SinSignal(freq=880, amp=0.5, offset=0) - +mix = sin_sigal + cos_signal From 66f79a514b051317f7057b079b00b77ae35cefd2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 17:14:04 +0800 Subject: [PATCH 0646/2002] Committed 2022/02/09 --- .../Spectral Decomposition.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py index cfbe68eb..7ea2ce52 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.py @@ -1,6 +1,13 @@ import thinkdsp +import matplotlib.pyplot as plt cos_signal = thinkdsp.CosSignal(freq=440, amp=1.0, offset=0) sin_sigal = thinkdsp.SinSignal(freq=880, amp=0.5, offset=0) mix = sin_sigal + cos_signal + +wave = mix.make_wave(duration=0.5, start=0, framerate=11025) + +wave.plot() + +plt.show() From 555f58c80fb88710c3e435e9ebd04c36dd2230e6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 17:22:57 +0800 Subject: [PATCH 0647/2002] Committed 2022/02/09 --- .../Think DSP/Chapter1 - Sounds and Signals/Signals.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.py diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.py b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.py new file mode 100644 index 00000000..d3d0e59d --- /dev/null +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.py @@ -0,0 +1,7 @@ +from thinkdsp import CosSignal, SinSignal, decorate + +cosine_signal = CosSignal(freq=440, amp=1.0, offset=0) + +sine_signal = SinSignal(freq=880, amp=0.5, offset=0) + + From 17597c318947d27affe97a118507101ad65fdde4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 17:39:09 +0800 Subject: [PATCH 0648/2002] Committed 2022/02/09 --- .../Signals.ipynb | 36 +++++++++++++++++++ .../Chapter1 - Sounds and Signals/Signals.py | 9 +++++ 2 files changed, 45 insertions(+) create mode 100644 Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb new file mode 100644 index 00000000..f5746948 --- /dev/null +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb @@ -0,0 +1,36 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.py b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.py index d3d0e59d..c56033c1 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.py +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.py @@ -1,7 +1,16 @@ from thinkdsp import CosSignal, SinSignal, decorate +import matplotlib.pyplot as plt cosine_signal = CosSignal(freq=440, amp=1.0, offset=0) sine_signal = SinSignal(freq=880, amp=0.5, offset=0) +cosine_signal.plot() +decorate(xlabel='Time (s)') +# figure, (axes1, axes2) = plt.subplots(nrows=2) + +# axes1.plot(cosine_signal) +# axes1.set_xlabel('Time (s)') + +plt.show() From 529f48b9046b8dcafe3b59ba20bdeef1b4e82d30 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 17:50:26 +0800 Subject: [PATCH 0649/2002] Committed 2022/02/09 --- .../Signals.ipynb | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb index f5746948..fa2f1b27 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb @@ -2,13 +2,34 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": true }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "" + "from thinkdsp import CosSignal, SinSignal, decorate\n", + "import matplotlib.pyplot as plt\n", + "\n", + "cosine_signal = CosSignal(freq=440, amp=1.0, offset=0)\n", + "\n", + "sine_signal = SinSignal(freq=880, amp=0.5, offset=0)\n", + "\n", + "cosine_signal.plot()\n", + "decorate(xlabel='Time (s)')\n", + "\n", + "plt.show()\n" ] } ], From 9b9943cabe0a2c6132134b71d9248926426a0ef8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 17:55:11 +0800 Subject: [PATCH 0650/2002] Committed 2022/02/09 --- .../Signals.ipynb | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb index fa2f1b27..4b9127ad 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb @@ -29,8 +29,48 @@ "cosine_signal.plot()\n", "decorate(xlabel='Time (s)')\n", "\n", - "plt.show()\n" + "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sine_signal.plot()\n", + "decorate(xlabel='Time (s)')\n", + "\n", + "plt.show()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { From 664da131817d0ec11ede6a51b931a014359c7340 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 18:59:50 +0800 Subject: [PATCH 0651/2002] Committed 2022/02/09 --- .../Signals.ipynb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb index 4b9127ad..b0e8e5bc 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Signals.ipynb @@ -60,6 +60,36 @@ } } }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "mix = sine_signal + cosine_signal\n", + "\n", + "mix.plot()\n", + "decorate(xlabel='Time (s)')\n", + "\n", + "plt.show()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "code", "execution_count": null, From 780b191613c50c7e493fe52348552a76bd30b331 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 19:04:44 +0800 Subject: [PATCH 0652/2002] Committed 2022/02/09 --- .../Spectral Decomposition.ipynb | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb new file mode 100644 index 00000000..dccda9b6 --- /dev/null +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb @@ -0,0 +1,108 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mModuleNotFoundError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-U\\ch-0\\213.6777.52.plugins\\python\\helpers\\pydev\\_pydevd_bundle\\pydevd_cython_wrapper.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 7\u001B[0m \u001B[1;32mtry\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m----> 8\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0m_pydevd_bundle_ext\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mpydevd_cython\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mmod\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 9\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mModuleNotFoundError\u001B[0m: No module named '_pydevd_bundle_ext'", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001B[1;31mImportError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-U\\ch-0\\213.6777.52.plugins\\python\\helpers\\pydev\\_pydevd_bundle\\pydevd_cython_wrapper.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 10\u001B[0m \u001B[1;32mexcept\u001B[0m \u001B[0mImportError\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 11\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0m_pydevd_bundle\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mpydevd_cython\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0mmod\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 12\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mImportError\u001B[0m: cannot import name 'pydevd_cython' from '_pydevd_bundle' (C:\\Users\\ted10014\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-U\\ch-0\\213.6777.52.plugins\\python\\helpers\\pydev\\_pydevd_bundle\\__init__.py)", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001B[1;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_39080\\3607238440.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 7\u001B[0m \u001B[0mremove_imported_pydev_package\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 8\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mpydev_jupyter_utils\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m----> 9\u001B[1;33m \u001B[0mpydev_jupyter_utils\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mattach_to_debugger\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;36m65124\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m", + "\u001B[1;32m~\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-U\\ch-0\\213.6777.52.plugins\\python\\helpers-pro\\jupyter_debug\\pydev_jupyter_utils.py\u001B[0m in \u001B[0;36mattach_to_debugger\u001B[1;34m(debugger_port)\u001B[0m\n\u001B[0;32m 72\u001B[0m \u001B[0mipython_shell\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mget_ipython\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 73\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 74\u001B[1;33m \u001B[1;32mimport\u001B[0m \u001B[0mpydevd\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 75\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0m_pydev_bundle\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mpydev_localhost\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 76\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-U\\ch-0\\213.6777.52.plugins\\python\\helpers\\pydev\\pydevd.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 53\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0m_pydevd_bundle\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpydevd_frame_utils\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0madd_exception_to_frame\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mremove_exception_from_frame\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 54\u001B[0m \u001B[1;32mfrom\u001B[0m \u001B[0m_pydevd_bundle\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpydevd_kill_all_pydevd_threads\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mkill_all_pydev_threads\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 55\u001B[1;33m from _pydevd_bundle.pydevd_trace_dispatch import (\n\u001B[0m\u001B[0;32m 56\u001B[0m trace_dispatch as _trace_dispatch, global_cache_skips, global_cache_frame_skips, show_tracing_warning)\n\u001B[0;32m 57\u001B[0m from _pydevd_frame_eval.pydevd_frame_eval_main import (\n", + "\u001B[1;32m~\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-U\\ch-0\\213.6777.52.plugins\\python\\helpers\\pydev\\_pydevd_bundle\\pydevd_trace_dispatch.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 53\u001B[0m \u001B[1;31m# Regular: use fallback if not found and give message to user\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 54\u001B[0m \u001B[1;32mtry\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 55\u001B[1;33m \u001B[1;32mfrom\u001B[0m \u001B[0m_pydevd_bundle\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mpydevd_cython_wrapper\u001B[0m \u001B[1;32mimport\u001B[0m \u001B[0mtrace_dispatch\u001B[0m \u001B[1;32mas\u001B[0m \u001B[0m_trace_dispatch\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mglobal_cache_skips\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mglobal_cache_frame_skips\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mfix_top_level_trace_and_get_trace_func\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 56\u001B[0m \u001B[1;32mdef\u001B[0m \u001B[0mtrace_dispatch\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mpy_db\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mframe\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mevent\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0marg\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 57\u001B[0m \u001B[1;32mif\u001B[0m \u001B[0m_trace_dispatch\u001B[0m \u001B[1;32mis\u001B[0m \u001B[1;32mNone\u001B[0m\u001B[1;33m:\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32m~\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-U\\ch-0\\213.6777.52.plugins\\python\\helpers\\pydev\\_pydevd_bundle\\pydevd_cython_wrapper.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 33\u001B[0m \u001B[0mmod_name\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;34m'pydevd_cython_%s_%s%s_%s'\u001B[0m \u001B[1;33m%\u001B[0m \u001B[1;33m(\u001B[0m\u001B[0msys\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mplatform\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0msys\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mversion_info\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;36m0\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0msys\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mversion_info\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;36m1\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mplat\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 34\u001B[0m \u001B[0mcheck_name\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;34m'_pydevd_bundle.%s'\u001B[0m \u001B[1;33m%\u001B[0m \u001B[1;33m(\u001B[0m\u001B[0mmod_name\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 35\u001B[1;33m \u001B[0mmod\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mgetattr\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0m__import__\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mcheck_name\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mmod_name\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 36\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 37\u001B[0m \u001B[1;31m# Regardless of how it was found, make sure it's later available as the\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;32mc:\\program files (x86)\\microsoft visual studio\\shared\\python37_64\\lib\\importlib\\_bootstrap.py\u001B[0m in \u001B[0;36mparent\u001B[1;34m(self)\u001B[0m\n", + "\u001B[1;31mKeyboardInterrupt\u001B[0m: " + ] + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 1, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import thinkdsp\n", + "import matplotlib.pyplot as plt\n", + "\n", + "cos_signal = thinkdsp.CosSignal(freq=440, amp=1.0, offset=0)\n", + "sin_sigal = thinkdsp.SinSignal(freq=880, amp=0.5, offset=0)\n", + "\n", + "mix = sin_sigal + cos_signal\n", + "\n", + "wave = mix.make_wave(duration=0.5, start=0, framerate=11025)\n", + "\n", + "wave.plot()\n", + "\n", + "plt.show()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From edc64e6b69034dc95679803cc9887618ea752b4d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 19:07:09 +0800 Subject: [PATCH 0653/2002] Committed 2022/02/09 --- .../Spectral Decomposition.ipynb | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb index dccda9b6..001a2e72 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb @@ -71,6 +71,35 @@ } } }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "cos_signal.plot()\n", + "\n", + "plt.xlabel(xlabel='Time (s)')\n", + "\n", + "plt.show()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "code", "execution_count": null, From f540a0333174101d0bbfe169b9f56affbe0ab9c1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 9 Feb 2022 19:16:26 +0800 Subject: [PATCH 0654/2002] Committed 2022/02/09 --- .../Spectral Decomposition.ipynb | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb index 001a2e72..16ccfcbd 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/Spectral Decomposition.ipynb @@ -100,6 +100,38 @@ } } }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "period = mix.period\n", + "segment = wave.segment(start=0, duration=period*3)\n", + "\n", + "segment.plot()\n", + "\n", + "plt.xlabel(xlabel='Time (s)')\n", + "\n", + "plt.show()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "code", "execution_count": null, From 55c1f31e1409278dbef239bc5013fdbdffb2c0ff Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 14:15:50 +0800 Subject: [PATCH 0655/2002] Committed 2022/02/19 --- .../Chapter3 - Built-in Data Structures & Functions/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/__init__.py diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/__init__.py b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/__init__.py new file mode 100644 index 00000000..e69de29b From f79663d8321599037bb2885479b7ab0a50a0da0a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 14:37:14 +0800 Subject: [PATCH 0656/2002] Committed 2022/02/19 --- .../Tuple.ipynb | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb new file mode 100644 index 00000000..a676fd47 --- /dev/null +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb @@ -0,0 +1,80 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4, 5, 6)\n" + ] + } + ], + "source": [ + "tup = 4, 5, 6\n", + "print(tup)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "((4, 5, 6), (7, 8))\n" + ] + } + ], + "source": [ + "nested_tup = (4, 5, 6), (7, 8)\n", + "print(nested_tup)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 8104d1a9a67cf24dbd111f99ff7712cbb2bdacff Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 14:47:18 +0800 Subject: [PATCH 0657/2002] Committed 2022/02/19 --- .../Tuple.ipynb | 140 +++++++++++++++++- 1 file changed, 139 insertions(+), 1 deletion(-) diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb index a676fd47..a9afa696 100644 --- a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb @@ -43,11 +43,149 @@ } } }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4, 0, 2)\n" + ] + } + ], + "source": [ + "print(tuple([4, 0, 2]))" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('s', 't', 'r', 'i', 'n', 'g')\n" + ] + } + ], + "source": [ + "iterator = tuple('string')\n", + "print(iterator)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('s', 't', 'r', 'i', 'n', 'g')\n" + ] + } + ], + "source": [ + "iterator2 = tuple(\"string\")\n", + "print(iterator2)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "s\n" + ] + } + ], + "source": [ + "print(iterator[0])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "t\n" + ] + } + ], + "source": [ + "print(iterator2[1])" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('foo', [1, 2], True)\n" + ] + } + ], + "source": [ + "immutable = tuple(['foo', [1, 2], True])\n", + "print(immutable)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "code", "execution_count": null, "outputs": [], - "source": [], + "source": [ + "immutable[2] = False\n", + "print(immutable)" + ], "metadata": { "collapsed": false, "pycharm": { From 07d48f1123eed19f26859643b0bbeb3572544cbf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 14:56:53 +0800 Subject: [PATCH 0658/2002] Committed 2022/02/19 --- .../Tuple.ipynb | 127 +++++++++++++++++- .../Tuple.py | 5 + 2 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.py diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb index a9afa696..bc55b0c3 100644 --- a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb @@ -180,8 +180,20 @@ }, { "cell_type": "code", - "execution_count": null, - "outputs": [], + "execution_count": 14, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'tuple' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mTypeError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_27468\\1483395061.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[1;32m----> 1\u001B[1;33m \u001B[0mimmutable\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;36m2\u001B[0m\u001B[1;33m]\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;32mFalse\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 2\u001B[0m \u001B[0mprint\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mimmutable\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mTypeError\u001B[0m: 'tuple' object does not support item assignment" + ] + } + ], "source": [ "immutable[2] = False\n", "print(immutable)" @@ -192,6 +204,117 @@ "name": "#%%\n" } } + }, + { + "cell_type": "code", + "execution_count": 16, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'tuple' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mTypeError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_27468\\232738141.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[1;32m----> 1\u001B[1;33m \u001B[0mimmutable\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;36m1\u001B[0m\u001B[1;33m]\u001B[0m \u001B[1;33m=\u001B[0m \u001B[1;33m[\u001B[0m\u001B[1;36m1\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m2\u001B[0m\u001B[1;33m,\u001B[0m \u001B[1;36m3\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 2\u001B[0m \u001B[0mprint\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mimmutable\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mTypeError\u001B[0m: 'tuple' object does not support item assignment" + ] + } + ], + "source": [ + "immutable[1] = [1, 2, 3]\n", + "print(immutable)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 11, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'tuple' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mTypeError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_27468\\3407988625.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[1;32m----> 1\u001B[1;33m \u001B[0mimmutable\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;36m1\u001B[0m\u001B[1;33m]\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mimmutable\u001B[0m\u001B[1;33m[\u001B[0m\u001B[1;36m1\u001B[0m\u001B[1;33m]\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mappend\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;36m3\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 2\u001B[0m \u001B[0mprint\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mimmutable\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mTypeError\u001B[0m: 'tuple' object does not support item assignment" + ] + } + ], + "source": [ + "immutable[1] = immutable[1].append(3)\n", + "print(immutable)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 13, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('foo', [1, 2, 3, 3], True)\n" + ] + } + ], + "source": [ + "print(immutable)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 12, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('foo', [1, 2, 3, 3], True)\n" + ] + } + ], + "source": [ + "immutable[1].append(3)\n", + "print(immutable)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.py b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.py new file mode 100644 index 00000000..1ed6d195 --- /dev/null +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.py @@ -0,0 +1,5 @@ +immutable = tuple(['foo', [1, 2], True]) +print(immutable) + +immutable[1] = [1, 2, 3] +print(immutable) \ No newline at end of file From 1f8f0a0263a5cabf4a9e6ba621c488e02389c5a6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 15:03:02 +0800 Subject: [PATCH 0659/2002] Committed 2022/02/19 --- .../Tuple.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.py b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.py index 1ed6d195..ced4c1e6 100644 --- a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.py +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.py @@ -1,5 +1,10 @@ immutable = tuple(['foo', [1, 2], True]) print(immutable) -immutable[1] = [1, 2, 3] -print(immutable) \ No newline at end of file +# immutable[1] = [1, 2, 3] + +# immutable[1] = immutable[1].append(3) + +immutable[1].append(3) + +print(immutable) From b609e0b56df6e2c5d1830d5745ca64cd93f0b562 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 15:13:30 +0800 Subject: [PATCH 0660/2002] Committed 2022/02/19 --- .../Tuple.ipynb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb index bc55b0c3..860b62e5 100644 --- a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Tuple.ipynb @@ -304,6 +304,29 @@ } } }, + { + "cell_type": "code", + "execution_count": 17, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4, None, 'foo', 6, 0, 'bar')\n" + ] + } + ], + "source": [ + "immutability = (4, None, 'foo') + (6, 0) + ('bar', )\n", + "print(immutability)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "code", "execution_count": null, From c7e835337aad46696dad97633e3cb64b23d6d0c0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 15:34:19 +0800 Subject: [PATCH 0661/2002] Committed 2022/02/19 --- .../List.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/List.py diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/List.py b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/List.py new file mode 100644 index 00000000..cb9f061f --- /dev/null +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/List.py @@ -0,0 +1,10 @@ +a = [7, 2, 5, 1, 3] + +a.sort() + +print(a) + +b = ['saw', 'small', 'He', 'foxes', 'six'] +b.sort(key=len) + +print(b) From 17e119b77bd8e6800392996a0d56521d9a548488 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 15:42:29 +0800 Subject: [PATCH 0662/2002] Committed 2022/02/19 --- .../Dictionary.ipynb | 36 +++++++++++++++++++ .../Dictionary.py | 13 +++++++ 2 files changed, 49 insertions(+) create mode 100644 Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.ipynb create mode 100644 Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.py diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.ipynb b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.ipynb new file mode 100644 index 00000000..f5746948 --- /dev/null +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.ipynb @@ -0,0 +1,36 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.py b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.py new file mode 100644 index 00000000..7561f3b4 --- /dev/null +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.py @@ -0,0 +1,13 @@ +from collections import defaultdict + +words = ['apple', 'bat', 'bar', 'atom', 'book'] + +by_letter = defaultdict(list) + +for word in words: + by_letter[word[0]].append(word) + + +print(by_letter) +print('\n') +print(words) From 86bd07128fff44b89d0efa37d9e824aa732695a7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 15:51:52 +0800 Subject: [PATCH 0663/2002] Committed 2022/02/19 --- .../Dictionary.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.py b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.py index 7561f3b4..c3916ebb 100644 --- a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.py +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Dictionary.py @@ -4,6 +4,8 @@ by_letter = defaultdict(list) +print(by_letter) + for word in words: by_letter[word[0]].append(word) @@ -11,3 +13,6 @@ print(by_letter) print('\n') print(words) + +print(by_letter[0]) +print(by_letter[1]) From 0126921ae9de2b693a3a54d6efef9b710eed553b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 16:14:52 +0800 Subject: [PATCH 0664/2002] Committed 2022/02/19 --- .../Hashability.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Hashability.py diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Hashability.py b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Hashability.py new file mode 100644 index 00000000..f90adf64 --- /dev/null +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Hashability.py @@ -0,0 +1,5 @@ +print(hash('string')) + +print(hash((1, 2, (2, 3)))) + +print(hash([1, 2])) # Fails because list is mutable. From e398324446cb02ccd323aec0ade6e79c1716ec5d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 16:36:58 +0800 Subject: [PATCH 0665/2002] Committed 2022/02/19 --- .../Hashability.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Hashability.py b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Hashability.py index f90adf64..b0408119 100644 --- a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Hashability.py +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Hashability.py @@ -2,4 +2,14 @@ print(hash((1, 2, (2, 3)))) -print(hash([1, 2])) # Fails because list is mutable. +try: + print(hash([1, 2])) # Fails because list is mutable. + +except TypeError: + print("TypeError: unhashable type: 'list'") + +try: + print(hash((1, 2, [2, 3]))) # fails because the third element of the tuple is mutable. + +except TypeError: + print("TypeError: unhashable type: 'list'") From c61736fc3be0026d40ab21328cf160fc8450a2eb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 16:54:21 +0800 Subject: [PATCH 0666/2002] Committed 2022/02/19 --- .../Set.ipynb | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb new file mode 100644 index 00000000..dce68d33 --- /dev/null +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb @@ -0,0 +1,81 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1, 2, 3}\n" + ] + } + ], + "source": [ + "settler = [2, 2, 2, 1, 3, 3]\n", + "settler = set(settler)\n", + "print(settler)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1, 2, 3}\n" + ] + } + ], + "source": [ + "settle = {2, 2, 2, 1, 3, 3}\n", + "print(settle)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 483c04ccd7562d66240719c81f0995e1b35d8d4d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 17:44:47 +0800 Subject: [PATCH 0667/2002] Committed 2022/02/19 --- .../Set.ipynb | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb index dce68d33..f0798cae 100644 --- a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb @@ -46,7 +46,34 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1, 2, 3, 4, 5, 6, 7, 8}\n", + "{1, 2, 3, 4, 5, 6, 7, 8}\n" + ] + } + ], + "source": [ + "a = {1, 2, 3, 4, 5}\n", + "b = {3, 4, 5, 6, 7, 8}\n", + "\n", + "print(a.union(b))\n", + "print(a | b)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, "outputs": [], "source": [], "metadata": { From c41e723b480bd448b23780332acd114947729961 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Feb 2022 17:46:54 +0800 Subject: [PATCH 0668/2002] Committed 2022/02/19 --- .../Set.ipynb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb index f0798cae..b6ab3249 100644 --- a/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb +++ b/Python for Data Analysis/Chapter3 - Built-in Data Structures & Functions/Set.ipynb @@ -71,6 +71,30 @@ } } }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{3, 4, 5}\n", + "{3, 4, 5}\n" + ] + } + ], + "source": [ + "print(a.intersection(b))\n", + "print(a & b)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "code", "execution_count": null, From 77fcc60cbc5c5d59c31473a3a1570104ed876ed2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Feb 2022 01:59:47 +0800 Subject: [PATCH 0669/2002] Committed 2022/02/19 --- .../December (year-over-year comparisons).py | 1 + .../Days under air pollution/__init__.py | 0 2 files changed, 1 insertion(+) create mode 100644 The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py create mode 100644 The attainments and realizations of my dreams/Days under air pollution/__init__.py diff --git a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py new file mode 100644 index 00000000..59d9624c --- /dev/null +++ b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py @@ -0,0 +1 @@ +# Reference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx diff --git a/The attainments and realizations of my dreams/Days under air pollution/__init__.py b/The attainments and realizations of my dreams/Days under air pollution/__init__.py new file mode 100644 index 00000000..e69de29b From 8b1ccc2a3995e13ef603e8899ba0d7f4735936e6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Feb 2022 02:02:39 +0800 Subject: [PATCH 0670/2002] Committed 2022/02/19 --- .../Days under air pollution/2021 in sum.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 The attainments and realizations of my dreams/Days under air pollution/2021 in sum.py diff --git a/The attainments and realizations of my dreams/Days under air pollution/2021 in sum.py b/The attainments and realizations of my dreams/Days under air pollution/2021 in sum.py new file mode 100644 index 00000000..59d9624c --- /dev/null +++ b/The attainments and realizations of my dreams/Days under air pollution/2021 in sum.py @@ -0,0 +1 @@ +# Reference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx From 311d60a223558764dced1f1694606a762fb7f188 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Feb 2022 00:35:32 +0800 Subject: [PATCH 0671/2002] Committed 2022/02/27 --- .../February2022.py | 0 .../February2022_metro.py | 27 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022_metro.py new file mode 100644 index 00000000..03e96e7f --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [173152, 86229, 74105, 38453, 38373] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2022/02 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20220226163214/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(30000, 150000) + +plt.show() From ddf84a58cbafcd602d5eecbd5d81992307cd0e29 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Feb 2022 00:47:44 +0800 Subject: [PATCH 0672/2002] Committed 2022/02/27 --- .../Monthly_total_job_openings_by_region/February2022_metro.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022_metro.py index 03e96e7f..cba4b80a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022_metro.py @@ -22,6 +22,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20220226163214/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(30000, 150000) +plt.ylim(30000, 160000) plt.show() From 2d19d22a137973e178df1ea875759007ddbbe058 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Feb 2022 15:26:15 +0800 Subject: [PATCH 0673/2002] Committed 2022/02/27 --- .../February2022.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py index e69de29b..cd24819f 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [105740, 61783, 44534, 35054, 59418, 27771, 34083] + +label = ["Taipei", "New Taipei", "Taoyuan", "Hsinchu", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2022/02 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20220226163214/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(25000, 95000) + +plt.show() From c0f745f120514c494826cc77906a92551b9cf19a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Feb 2022 15:31:37 +0800 Subject: [PATCH 0674/2002] Committed 2022/02/27 --- .../Monthly_total_job_openings_by_region/February2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py index cd24819f..8d85f358 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py @@ -21,6 +21,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20220226163214/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(25000, 95000) +plt.ylim(27500, 107000) plt.show() From d0ddf8996cc38fb74d4e322d35cefdff783ada08 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Feb 2022 15:35:41 +0800 Subject: [PATCH 0675/2002] Committed 2022/02/27 --- .../Monthly_total_job_openings_by_region/February2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py index 8d85f358..b5999e94 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/February2022.py @@ -21,6 +21,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20220226163214/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(27500, 107000) +plt.ylim(27500, 100500) plt.show() From 12c9dcabc009ede4b2ee8b469a53ef4d6a56e9c7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 5 Mar 2022 18:52:23 +0800 Subject: [PATCH 0676/2002] Committed 2022/03/05 --- .../September2021_metro.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py new file mode 100644 index 00000000..cce83af2 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [173152, 86229, 74105, 38453, 38373] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/09 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(30000, 160000) + +plt.show() From bce26468e10e41f7359537eb4190424b68e1bb27 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 5 Mar 2022 18:56:37 +0800 Subject: [PATCH 0677/2002] Committed 2022/03/05 --- .../Monthly_total_job_openings_by_region/September2021_metro.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py index cce83af2..8ff33d4b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5] -position_vacancies = [173152, 86229, 74105, 38453, 38373] +position_vacancies = [140966, 72721, 61138, 31208, 31440] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] From aed8345a485fd1492ac916f173336334f8621391 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 5 Mar 2022 18:58:38 +0800 Subject: [PATCH 0678/2002] Committed 2022/03/05 --- .../Monthly_total_job_openings_by_region/September2021_metro.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py index 8ff33d4b..6813e1fa 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2021_metro.py @@ -22,6 +22,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(30000, 160000) +plt.ylim(30000, 130000) plt.show() From f8521b16669622ccb71b023d3a05dcde86876e12 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 5 Mar 2022 18:59:52 +0800 Subject: [PATCH 0679/2002] Committed 2022/03/05 --- .../October2021_metro.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py new file mode 100644 index 00000000..6813e1fa --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [140966, 72721, 61138, 31208, 31440] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/09 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(30000, 130000) + +plt.show() From c3b585b7a0bc15061c1b590b17c87817f1ec9d94 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 5 Mar 2022 19:01:54 +0800 Subject: [PATCH 0680/2002] Committed 2022/03/05 --- .../Monthly_total_job_openings_by_region/October2021_metro.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py index 6813e1fa..b95d1fbf 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py @@ -17,7 +17,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2021/09 the number of job openings in Taiwan by metro") +plt.title("2021/10 the number of job openings in Taiwan by metro") # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") From 3d8aeea6123a3c16836bbcc1b33d1e54ff439a62 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 5 Mar 2022 19:04:55 +0800 Subject: [PATCH 0681/2002] Committed 2022/03/05 --- .../Monthly_total_job_openings_by_region/October2021_metro.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py index b95d1fbf..cb6066d3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5] -position_vacancies = [140966, 72721, 61138, 31208, 31440] +position_vacancies = [146114, 74826, 63052, 32115, 32609] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] @@ -20,7 +20,7 @@ plt.title("2021/10 the number of job openings in Taiwan by metro") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20211023110903/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(30000, 130000) From 6d77a195e7fd8e024b098a06a1a00b9c0b3537f3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 5 Mar 2022 19:10:45 +0800 Subject: [PATCH 0682/2002] Committed 2022/03/05 --- .../Monthly_total_job_openings_by_region/October2021_metro.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py index cb6066d3..04eff6fc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/October2021_metro.py @@ -22,6 +22,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20211023110903/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(30000, 130000) +plt.ylim(30000, 140000) plt.show() From e39935fec36d57a0ea1df0b8b005f63bcdbbf033 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 12:15:38 +0800 Subject: [PATCH 0683/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter.ipynb | 63 +++++++++++++++++++ Digital Signal Processing/NUK/__init__.py | 0 2 files changed, 63 insertions(+) create mode 100644 Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb create mode 100644 Digital Signal Processing/NUK/__init__.py diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb new file mode 100644 index 00000000..62ee3765 --- /dev/null +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb @@ -0,0 +1,63 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "\n", + "from math import pi\n", + "\n", + "N = 40;\n", + "ws1 = 0.3*pi;\n", + "wp1 = 0.4*pi;\n", + "wp2 = 0.65*pi;\n", + "ws2 = 0.75 * pi;\n", + "Ns = 200;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "NH = N / 2;\n", + "deltaw = pi/ Ns;\n", + "Ns_p = round((wp2 - wp1)/deltaw);\n", + "Ns_s1 = round(ws1/deltaw);\n", + "Ns_s2 = round((pi - ws2) / deltaw);\n", + "NV = (1 : NH)';" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Digital Signal Processing/NUK/__init__.py b/Digital Signal Processing/NUK/__init__.py new file mode 100644 index 00000000..e69de29b From 82d1f84cc6270bf165b39a7d790163b0d79d8819 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 12:43:46 +0800 Subject: [PATCH 0684/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter.ipynb | 5 ++++- .../NUK/Case2_FIR_bandpass_filter.py | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb index 62ee3765..8a8a3399 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb @@ -29,7 +29,10 @@ "Ns_p = round((wp2 - wp1)/deltaw);\n", "Ns_s1 = round(ws1/deltaw);\n", "Ns_s2 = round((pi - ws2) / deltaw);\n", - "NV = (1 : NH)';" + "NV = []\n", + "\n", + "for i in range(NH):\n", + " NV.append(i)\n" ], "metadata": { "collapsed": false, diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py new file mode 100644 index 00000000..be45b23a --- /dev/null +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py @@ -0,0 +1,19 @@ +from math import pi + +N = 40; +ws1 = 0.3*pi; +wp1 = 0.4*pi; +wp2 = 0.65*pi; +ws2 = 0.75 * pi; +Ns = 200; + +NH = N / 2; +deltaw = pi/ Ns; +Ns_p = round((wp2 - wp1)/deltaw); +Ns_s1 = round(ws1/deltaw); +Ns_s2 = round((pi - ws2) / deltaw); +NV = [] + +for i in range(NH): + NV.append(i) + From 26a34962e50809296d135fc0364a33b078fcc56d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 12:51:09 +0800 Subject: [PATCH 0685/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter.ipynb | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb index 8a8a3399..59244e62 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb @@ -8,7 +8,7 @@ }, "outputs": [], "source": [ - "\n", + "import numpy as np\n", "from math import pi\n", "\n", "N = 40;\n", @@ -32,7 +32,26 @@ "NV = []\n", "\n", "for i in range(NH):\n", - " NV.append(i)\n" + " NV.append(i)\n", + "\n", + "\n", + "NV = np.array(NV)\n", + "NV = NV.transpose()\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "P = np.zeros(NH, 1);\n", + "Qp = np.zeros(NH, NH);" ], "metadata": { "collapsed": false, From 963d9fa1c84022b835ad694f9368ad1487e20f25 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 13:27:01 +0800 Subject: [PATCH 0686/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter.ipynb | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb index 59244e62..57da6439 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb @@ -50,8 +50,41 @@ "execution_count": null, "outputs": [], "source": [ + "from math import cos\n", + "\n", "P = np.zeros(NH, 1);\n", - "Qp = np.zeros(NH, NH);" + "Qp = np.zeros(NH, NH);\n", + "\n", + "for iw in range(Ns_p):\n", + " w = wp1 + iw*deltaw;\n", + " P = P - 2*cos(w*(NV-0.5));\n", + " Qp = Qp + cos(w * (NV-0.5)) * np.array((cos(w * (NV-0.5)))).transpose()\n", + "\n", + "\n", + "P = (wp2 - wp1) * P / (Ns_p + 1);\n", + "Qp = (wp2 - wp1) * Qp / (Ns_p + 1);" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "Qs = np.zeros(NH, NH)\n", + "\n", + "for iw in range(Ns_s1):\n", + " w = iw*deltaw;\n", + " Qs1 = Qs1 + cos(w*(NV-0.5)) * np.array((cos(w*(NV-0.5)))).transpose()\n", + "\n", + "\n", + "Qs1 = ws1 * Qs1 / (Ns_s1 + 1);\n", + "\n" ], "metadata": { "collapsed": false, From 3701278fadeace2725848acf74e9d0468ec26e45 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 13:30:15 +0800 Subject: [PATCH 0687/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py index be45b23a..804b6cc6 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py @@ -1,4 +1,5 @@ -from math import pi +from math import pi, cos +import numpy as np N = 40; ws1 = 0.3*pi; @@ -17,3 +18,19 @@ for i in range(NH): NV.append(i) + +NV = np.array(NV) +NV = NV.transpose() + +P = np.zeros(NH, 1); +Qp = np.zeros(NH, NH); + +for iw in range(Ns_p): + w = wp1 + iw*deltaw; + P = P - 2*cos(w*(NV-0.5)); + Qp = Qp + cos(w * (NV-0.5)) * np.array((cos(w * (NV-0.5)))).transpose() + + +P = (wp2 - wp1) * P / (Ns_p + 1); +Qp = (wp2 - wp1) * Qp / (Ns_p + 1); + From 2a2559fd97fd3f9bb32472d6f5646fe223143647 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 13:31:42 +0800 Subject: [PATCH 0688/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py index 804b6cc6..314f9d36 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py @@ -34,3 +34,11 @@ P = (wp2 - wp1) * P / (Ns_p + 1); Qp = (wp2 - wp1) * Qp / (Ns_p + 1); +Qs = np.zeros(NH, NH) + +for iw in range(Ns_s1): + w = iw*deltaw; + Qs1 = Qs1 + cos(w*(NV-0.5)) * np.array((cos(w*(NV-0.5)))).transpose() + + +Qs1 = ws1 * Qs1 / (Ns_s1 + 1); From 05408ebc11d23f8ee52d82631abdbab8633bb7c0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 13:59:17 +0800 Subject: [PATCH 0689/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter.ipynb | 67 ++++++++++++++++++- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb index 57da6439..6002e82e 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb @@ -83,8 +83,7 @@ " Qs1 = Qs1 + cos(w*(NV-0.5)) * np.array((cos(w*(NV-0.5)))).transpose()\n", "\n", "\n", - "Qs1 = ws1 * Qs1 / (Ns_s1 + 1);\n", - "\n" + "Qs1 = ws1 * Qs1 / (Ns_s1 + 1);\n" ], "metadata": { "collapsed": false, @@ -92,6 +91,70 @@ "name": "#%%\n" } } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "Qs2 = np.zeros(NH, NH);\n", + "\n", + "for iw in range(Ns_s2):\n", + " w = ws2 + iw*deltaw;\n", + " Qs2 = Qs2 + cos(w*(NV-0.5)) * np.array((cos(w*(NV-0.5)))).transpose()\n", + "\n", + "\n", + "Qs2 = (pi - ws2) * Qs2 / (Ns_s2 + 1);" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "Q = Qp + Qs1 + Qs2;\n", + "A = -0.5 * np.invert(Q) * P" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "h = np.zeros(N, 1)\n", + "h[1:NH] = 0.5 * np.flipud(A)\n", + "h[NH+1:N] = 0.5 * A" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { From d4c27b98b4028842c9f4a340bf78224b129eed7d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 14:01:27 +0800 Subject: [PATCH 0690/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter.ipynb | 6 +++++- .../NUK/Case2_FIR_bandpass_filter.py | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb index 6002e82e..ccab34ed 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb @@ -148,7 +148,11 @@ "cell_type": "code", "execution_count": null, "outputs": [], - "source": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "\n" + ], "metadata": { "collapsed": false, "pycharm": { diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py index 314f9d36..7067d128 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py @@ -1,5 +1,6 @@ from math import pi, cos import numpy as np +import matplotlib.pyplot as plt N = 40; ws1 = 0.3*pi; @@ -42,3 +43,21 @@ Qs1 = ws1 * Qs1 / (Ns_s1 + 1); + +Qs2 = np.zeros(NH, NH); + +for iw in range(Ns_s2): + w = ws2 + iw*deltaw; + Qs2 = Qs2 + cos(w*(NV-0.5)) * np.array((cos(w*(NV-0.5)))).transpose() + + +Qs2 = (pi - ws2) * Qs2 / (Ns_s2 + 1); + +Q = Qp + Qs1 + Qs2; +A = -0.5 * np.invert(Q) * P + +h = np.zeros(N, 1) +h[1:NH] = 0.5 * np.flipud(A) +h[NH+1:N] = 0.5 * A + + From 9c9d1930f2f9d31b385b4c7352a6b51b5796d6da Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 16:05:39 +0800 Subject: [PATCH 0691/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter.ipynb | 18 +++++++++++++++++- .../NUK/Case2_FIR_bandpass_filter.py | 10 ++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb index ccab34ed..700000b0 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.ipynb @@ -151,7 +151,23 @@ "source": [ "import matplotlib.pyplot as plt\n", "\n", - "\n" + "figure, (ax1, ax2, ax3, ax4) = plt.subplots(2, 2)\n", + "\n", + "ax1.stem([0:N-1], h)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "plt.stem([0:N-1], h)\n" ], "metadata": { "collapsed": false, diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py index 7067d128..d2ab6113 100644 --- a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter.py @@ -60,4 +60,14 @@ h[1:NH] = 0.5 * np.flipud(A) h[NH+1:N] = 0.5 * A +# figure, (ax1, ax2, ax3, ax4) = plt.subplots(2, 2) +# ax1.stem([0:N-1], h) + +# plt.stem([0:N-1], h) + +plt.stem(range(N), h) + +plt.xlabel('n') +plt.ylabel('Impulse response') +plt.title('Case 2 bandpass filter ') From 6c319676e36e62f45d7055a3376464c5987fe3b6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 16:21:25 +0800 Subject: [PATCH 0692/2002] Committed 2022/03/13 --- .../NUK/Case2_FIR_bandpass_filter2.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Digital Signal Processing/NUK/Case2_FIR_bandpass_filter2.py diff --git a/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter2.py b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter2.py new file mode 100644 index 00000000..361131e0 --- /dev/null +++ b/Digital Signal Processing/NUK/Case2_FIR_bandpass_filter2.py @@ -0,0 +1,70 @@ +from math import pi, cos +import numpy as np +import matplotlib.pyplot as plt + +N = 40; +ws1 = 0.3 * pi; +wp1 = 0.4 * pi; +wp2 = 0.65 * pi; +ws2 = 0.75 * pi; +Ns = 200; + +NH = N / 2; +NH = int(NH) +deltaw = pi / Ns; +Ns_p = round((wp2 - wp1) / deltaw); +Ns_s1 = round(ws1 / deltaw); +Ns_s2 = round((pi - ws2) / deltaw); +NV = [] + +for i in range(NH): + NV.append(i) + +NV = np.array(NV) +NV = NV.transpose() + +P = np.zeros(NH, 1); +Qp = np.zeros(NH, NH); + +for iw in range(Ns_p): + w = wp1 + iw * deltaw; + P = P - 2 * cos(w * (NV - 0.5)); + Qp = Qp + cos(w * (NV - 0.5)) * np.array((cos(w * (NV - 0.5)))).transpose() + +P = (wp2 - wp1) * P / (Ns_p + 1); +Qp = (wp2 - wp1) * Qp / (Ns_p + 1); + +Qs = np.zeros(NH, NH) + +for iw in range(Ns_s1): + w = iw * deltaw; + Qs1 = Qs1 + cos(w * (NV - 0.5)) * np.array((cos(w * (NV - 0.5)))).transpose() + +Qs1 = ws1 * Qs1 / (Ns_s1 + 1); + +Qs2 = np.zeros(NH, NH); + +for iw in range(Ns_s2): + w = ws2 + iw * deltaw; + Qs2 = Qs2 + cos(w * (NV - 0.5)) * np.array((cos(w * (NV - 0.5)))).transpose() + +Qs2 = (pi - ws2) * Qs2 / (Ns_s2 + 1); + +Q = Qp + Qs1 + Qs2; +A = -0.5 * np.invert(Q) * P + +h = np.zeros(N, 1) +h[1:NH] = 0.5 * np.flipud(A) +h[NH + 1:N] = 0.5 * A + +# figure, (ax1, ax2, ax3, ax4) = plt.subplots(2, 2) + +# ax1.stem([0:N-1], h) + +# plt.stem([0:N-1], h) + +plt.stem(range(N), h) + +plt.xlabel('n') +plt.ylabel('Impulse response') +plt.title('Case 2 bandpass filter ') From 6a614c48f481b0ddd8fa6fe98473a62610e0cdaf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 22:14:37 +0800 Subject: [PATCH 0693/2002] Committed 2022/03/13 --- Digital Signal Processing/SciPy/FIR_filter.py | 16 ++++++++++++++++ Digital Signal Processing/SciPy/__init__.py | 0 2 files changed, 16 insertions(+) create mode 100644 Digital Signal Processing/SciPy/FIR_filter.py create mode 100644 Digital Signal Processing/SciPy/__init__.py diff --git a/Digital Signal Processing/SciPy/FIR_filter.py b/Digital Signal Processing/SciPy/FIR_filter.py new file mode 100644 index 00000000..cceb3812 --- /dev/null +++ b/Digital Signal Processing/SciPy/FIR_filter.py @@ -0,0 +1,16 @@ +import numpy as np +import scipy.signal as signal +import matplotlib.pyplot as plt + +b1 = signal.firwin(40, 0.5) +b2 = signal.firwin(41, [0.3, 0.8]) +w1, h1 = signal.freqz(b1) +w2, h2 = signal.freqz(b2) + +plt.title('Digital filter frequency response') +plt.plot(w1, 20*np.log10(np.abs(h1)), 'b') +plt.plot(w2, 20*np.log10(np.abs(h2)), 'r') +plt.ylabel('Amplitude Response (dB)') +plt.xlabel('Frequency (rad/sample)') +plt.grid() +plt.show() diff --git a/Digital Signal Processing/SciPy/__init__.py b/Digital Signal Processing/SciPy/__init__.py new file mode 100644 index 00000000..e69de29b From 187fc64c324de2e66ba114e8723a6f29e8a33c3a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 22:16:49 +0800 Subject: [PATCH 0694/2002] Committed 2022/03/13 --- Digital Signal Processing/SciPy/FIR_filter.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Digital Signal Processing/SciPy/FIR_filter.py b/Digital Signal Processing/SciPy/FIR_filter.py index cceb3812..3b6b9c19 100644 --- a/Digital Signal Processing/SciPy/FIR_filter.py +++ b/Digital Signal Processing/SciPy/FIR_filter.py @@ -14,3 +14,5 @@ plt.xlabel('Frequency (rad/sample)') plt.grid() plt.show() + +# Source: https://scipy.github.io/devdocs/tutorial/signal.html#filter-transformations From 929ec6afe1d45da36b5d5ac2eb9cf02b94d6761e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 22:18:20 +0800 Subject: [PATCH 0695/2002] Committed 2022/03/13 --- Digital Signal Processing/SciPy/FIR_filter.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Digital Signal Processing/SciPy/FIR_filter.py b/Digital Signal Processing/SciPy/FIR_filter.py index 3b6b9c19..58d06fca 100644 --- a/Digital Signal Processing/SciPy/FIR_filter.py +++ b/Digital Signal Processing/SciPy/FIR_filter.py @@ -16,3 +16,5 @@ plt.show() # Source: https://scipy.github.io/devdocs/tutorial/signal.html#filter-transformations + +# Reference: https://stackoverflow.com/questions/37833940/frequency-response-scipy-signal From a0f2ff0a83380d0920257d51ec1cf57f1e542ecf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 13 Mar 2022 22:19:29 +0800 Subject: [PATCH 0696/2002] Committed 2022/03/13 --- Digital Signal Processing/SciPy/FIR_filter.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Digital Signal Processing/SciPy/FIR_filter.py b/Digital Signal Processing/SciPy/FIR_filter.py index 58d06fca..a45c7876 100644 --- a/Digital Signal Processing/SciPy/FIR_filter.py +++ b/Digital Signal Processing/SciPy/FIR_filter.py @@ -18,3 +18,5 @@ # Source: https://scipy.github.io/devdocs/tutorial/signal.html#filter-transformations # Reference: https://stackoverflow.com/questions/37833940/frequency-response-scipy-signal + +# Reference2: https://www.google.com/search?q=python+z+transform From 59d307863a8f51803eb1a05b48a5f09ca37dd2e1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Mar 2022 22:18:42 +0800 Subject: [PATCH 0697/2002] Committed 2022/03/19 --- .../December2021_bar_table.py | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table.py new file mode 100644 index 00000000..06e2a27a --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table.py @@ -0,0 +1,103 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + [10, 21, 27, 13, 17, 15], # August + [13, 20, 32, 22, 26, 29], # September + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-09)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [96, 187, 204, 213, 233, 237]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [96, 187, 204, 213, 233, 237], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 0d04374433f67e6b00270a09da103f3b8bf8ea1d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Mar 2022 22:31:28 +0800 Subject: [PATCH 0698/2002] Committed 2022/03/19 --- .../Month_over_month_2021/December2021_bar_table.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table.py index 06e2a27a..31544090 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table.py @@ -8,7 +8,7 @@ month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] -month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"] +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] deaths = [[14, 30, 18, 28, 31, 31], # January [9, 25, 20, 18, 31, 39], # February @@ -19,6 +19,9 @@ [7, 23, 22, 27, 18, 16], # July [10, 21, 27, 13, 17, 15], # August [13, 20, 32, 22, 26, 29], # September + [9, 21, 16, 30, 21, 33], # October + [15, 25, 25, 22, 18, 26], # November + [11, 33, 24, 18, 25, 37], # December ] df = pd.DataFrame(data=deaths, @@ -71,13 +74,13 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-09)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-12)") axes.grid(True) # pyplot.grid [1][2] -axes2.bar(administrative_duty, [96, 187, 204, 213, 233, 237]) +axes2.bar(administrative_duty, [132, 266, 269, 283, 295, 333]) axes2.bar_label(axes2.containers[0], label_type='edge') -axes2.plot(administrative_duty, [96, 187, 204, 213, 233, 237], '-o', color='orange') +axes2.plot(administrative_duty, [132, 266, 269, 283, 295, 333], '-o', color='orange') figure.tight_layout() From ee63080e909d0c2d5c2c757b29793fe0eadb70c0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Mar 2022 22:36:44 +0800 Subject: [PATCH 0699/2002] Committed 2022/03/19 --- .../December2021_bar_table_.py | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_.py new file mode 100644 index 00000000..3019c697 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_.py @@ -0,0 +1,106 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + [10, 21, 27, 13, 17, 15], # August + [13, 20, 32, 22, 26, 29], # September + [9, 21, 16, 30, 21, 33], # October + [15, 25, 25, 22, 18, 26], # November + [11, 33, 24, 18, 25, 37], # December + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 9)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-12)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [132, 266, 269, 283, 295, 333]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [132, 266, 269, 283, 295, 333], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 91dbd614079c57a2f295235054275d0dac5e2019 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Mar 2022 22:38:24 +0800 Subject: [PATCH 0700/2002] Committed 2022/03/19 --- .../Month_over_month_2021/December2021_bar_table_metro.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py new file mode 100644 index 00000000..e69de29b From 52a04d8e7695908972d7e890e0e29964d02bf247 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Mar 2022 23:36:08 +0800 Subject: [PATCH 0701/2002] Committed 2022/03/19 --- .../December2021_bar_table_metro.py | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py index e69de29b..f32067f1 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py @@ -0,0 +1,106 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung\nPingtung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + [13, 15, 18, 36, 21, 28], # March + [11, 15, 21, 24, 23, 25], # April + [10, 21, 22, 22, 37, 34], # May + [9, 17, 24, 23, 29, 20], # June + [7, 23, 22, 27, 18, 16], # July + [10, 21, 27, 13, 17, 15], # August + [13, 20, 32, 22, 26, 29], # September + [9, 21, 16, 30, 21, 33], # October + [15, 25, 25, 22, 18, 26], # November + [11, 33, 24, 18, 25, 37], # December + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 9)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-12)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [132, 266, 269, 283, 295, 333]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [132, 266, 269, 283, 295, 333], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 4b0c81b04617e1f6ed22fd90523852aaca8cdf5c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Mar 2022 23:41:37 +0800 Subject: [PATCH 0702/2002] Committed 2022/03/19 --- .../December2021_bar_table_metro.py | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py index f32067f1..2a441e64 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py @@ -10,18 +10,18 @@ month_as_of_now = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] -deaths = [[14, 30, 18, 28, 31, 31], # January - [9, 25, 20, 18, 31, 39], # February - [13, 15, 18, 36, 21, 28], # March - [11, 15, 21, 24, 23, 25], # April - [10, 21, 22, 22, 37, 34], # May - [9, 17, 24, 23, 29, 20], # June - [7, 23, 22, 27, 18, 16], # July - [10, 21, 27, 13, 17, 15], # August - [13, 20, 32, 22, 26, 29], # September - [9, 21, 16, 30, 21, 33], # October - [15, 25, 25, 22, 18, 26], # November - [11, 33, 24, 18, 25, 37], # December +deaths = [[14, 30, 18, 28, 31, 31+18], # January + [9, 25, 20, 18, 31, 39+15], # February + [13, 15, 18, 36, 21, 28+19], # March + [11, 15, 21, 24, 23, 25+14], # April + [10, 21, 22, 22, 37, 34+14], # May + [9, 17, 24, 23, 29, 20+10], # June + [7, 23, 22, 27, 18, 16+24], # July + [10, 21, 27, 13, 17, 15+13], # August + [13, 20, 32, 22, 26, 29+14], # September + [9, 21, 16, 30, 21, 33+21], # October + [15, 25, 25, 22, 18, 26+18], # November + [11, 33, 24, 18, 25, 37+28], # December ] df = pd.DataFrame(data=deaths, From 8ad22de770ef45d7a9eca4fcd9ec47f173130822 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Mar 2022 23:50:00 +0800 Subject: [PATCH 0703/2002] Committed 2022/03/19 --- .../Month_over_month_2021/December2021_bar_table_metro.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py index 2a441e64..4c18a9b1 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2021/December2021_bar_table_metro.py @@ -39,7 +39,7 @@ index = np.arange(len(administrative_duty)) + 0.3 bar_width = 0.4 -figure, (axes, axes2) = plt.subplots(2, figsize=(9, 9)) +figure, (axes, axes2) = plt.subplots(2, figsize=(10, 10)) # Initialize the vertical-offset for the stacked bar chart. y_offset = np.zeros(len(administrative_duty)) @@ -78,9 +78,9 @@ axes.grid(True) # pyplot.grid [1][2] -axes2.bar(administrative_duty, [132, 266, 269, 283, 295, 333]) +axes2.bar(administrative_duty, [132, 266, 269, 283, 295, 541]) axes2.bar_label(axes2.containers[0], label_type='edge') -axes2.plot(administrative_duty, [132, 266, 269, 283, 295, 333], '-o', color='orange') +axes2.plot(administrative_duty, [132, 266, 269, 283, 295, 541], '-o', color='orange') figure.tight_layout() From 722355b0b4d7ee91e3431460cf0e86ed231e690a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Mar 2022 13:33:12 +0800 Subject: [PATCH 0704/2002] Committed 2022/03/20 --- .../Road safety/Year_over_year_2021.py | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2021.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.py new file mode 100644 index 00000000..b57ab2ee --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.py @@ -0,0 +1,122 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + # [73, 146, 145, 178, 190, 193], # 2021/01-07 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2020)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary, color=colour.CSS4_COLORS.get('palegreen'), linewidth=1, ecolor=colour.CSS4_COLORS.get('dodgerblue')) # Create a bar chart and its format. [7][11][12] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html +# 11. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar.html#matplotlib.axes.Axes.bar +# 12. https://matplotlib.org/stable/gallery/color/named_colors.html From 3a8c084d9129b10f4a00760ddda95aed0963e2dd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Mar 2022 13:40:18 +0800 Subject: [PATCH 0705/2002] Committed 2022/03/20 --- .../Road safety/Year_over_year_2021.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.py index b57ab2ee..f4a7bd9d 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2021.py @@ -5,7 +5,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2020"] +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] death = [[133, 254, 198, 318, 340, 402], # 2009 [152, 255, 227, 373, 319, 388], # 2010 @@ -19,7 +19,7 @@ [137, 248, 244, 245, 289, 280], # 2018 [131, 225, 249, 270, 294, 351], # 2019 [102, 232, 264, 325, 317, 347], # 2020 - # [73, 146, 145, 178, 190, 193], # 2021/01-07 + [132, 266, 269, 283, 295, 333], # 2021 ] df = pd.DataFrame(data=death, columns=administrative_duty, index=year) @@ -42,7 +42,7 @@ print(summary) cumulative_sum = pd.DataFrame(data=summary, - columns=["Accumulative Deaths (2009-2020)"], + columns=["Accumulative Deaths (2009-2021)"], index=administrative_duty) print(cumulative_sum) From 66dbc6e2bea1fb5144cfb2ac72badd6a7aa368ef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Mar 2022 15:06:12 +0800 Subject: [PATCH 0706/2002] Committed 2022/03/27 --- .../March2022_metro.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py new file mode 100644 index 00000000..cba4b80a --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [173152, 86229, 74105, 38453, 38373] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2022/02 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20220226163214/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(30000, 160000) + +plt.show() From 4fb92db81d44ce16fe920de3007e1aa6fdefba65 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Mar 2022 15:10:12 +0800 Subject: [PATCH 0707/2002] Committed 2022/03/27 --- .../Monthly_total_job_openings_by_region/March2022_metro.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py index cba4b80a..5b3dd933 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5] -position_vacancies = [173152, 86229, 74105, 38453, 38373] +position_vacancies = [178995, 88885, 76159, 39243, 39416] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] @@ -17,10 +17,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2022/02 the number of job openings in Taiwan by metro") +plt.title("2022/03 the number of job openings in Taiwan by metro") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20220226163214/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20220327070711/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(30000, 160000) From 1e6ab8330759fc25ae3ac07600adeb8fa9e3c4cc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Mar 2022 15:31:35 +0800 Subject: [PATCH 0708/2002] Committed 2022/03/27 --- .../Monthly_total_job_openings_by_region/March2022_metro.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py index 5b3dd933..2a2d4c4d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_metro.py @@ -22,6 +22,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20220327070711/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(30000, 160000) +plt.ylim(35000, 165000) plt.show() From 6494c9626ce713f1c0a56eb70ece3661e2051389 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Apr 2022 15:47:00 +0800 Subject: [PATCH 0709/2002] Committed 2022/03/27 --- .../Analytically2.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Chapter5 - Some More Python Essentials/Analytically2.py diff --git a/Chapter5 - Some More Python Essentials/Analytically2.py b/Chapter5 - Some More Python Essentials/Analytically2.py new file mode 100644 index 00000000..80c16843 --- /dev/null +++ b/Chapter5 - Some More Python Essentials/Analytically2.py @@ -0,0 +1,16 @@ +import sympy as sym + +x = sym.symbols('x') + +f_expr = 5*x**3 + 2*x**2 - 1 # Symbolic expression for f(x) + +dfdx_expr = sym.diff(f_expr, x) # Compute f'(x) symbolically + +print(f_expr) +print(dfdx_expr) + +# turn symbolic expressions into functions +f = sym.lambdify([x], f_expr) # f = lambda x: 5*x**3 + 2*x**2 - 1 +dfdx = sym.lambdify([x], dfdx_expr) # dfdx = lambda x: 15*x**2 4*x + +print(f(1), dfdx(1)) # Call and print, x = 1 From 7f0c82aa86efc676264ed7cd41a752223e6bf934 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Apr 2022 15:49:07 +0800 Subject: [PATCH 0710/2002] Committed 2022/04/03 --- Chapter5 - Some More Python Essentials/Analytically2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Chapter5 - Some More Python Essentials/Analytically2.py b/Chapter5 - Some More Python Essentials/Analytically2.py index 80c16843..9c53f8ac 100644 --- a/Chapter5 - Some More Python Essentials/Analytically2.py +++ b/Chapter5 - Some More Python Essentials/Analytically2.py @@ -9,7 +9,7 @@ print(f_expr) print(dfdx_expr) -# turn symbolic expressions into functions +# turn symbolic expressions into functions for numerical calculations. f = sym.lambdify([x], f_expr) # f = lambda x: 5*x**3 + 2*x**2 - 1 dfdx = sym.lambdify([x], dfdx_expr) # dfdx = lambda x: 15*x**2 4*x From 7154d1e1441bcf659ab948962ba6e550558ef331 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Apr 2022 16:44:14 +0800 Subject: [PATCH 0711/2002] Committed 2022/04/03 --- .../Using_sympy_to_find_the_derivative.py | 0 .../Chapter7 - Solving Nonlinear Algebraic Equations/__init__.py | 0 Programming for Computations - Python/__init__.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative.py create mode 100644 Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/__init__.py create mode 100644 Programming for Computations - Python/__init__.py diff --git a/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative.py b/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative.py new file mode 100644 index 00000000..e69de29b diff --git a/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/__init__.py b/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Programming for Computations - Python/__init__.py b/Programming for Computations - Python/__init__.py new file mode 100644 index 00000000..e69de29b From 2d5ac97aa8969bfcaf7be17227a1953ee94826d1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Apr 2022 16:53:07 +0800 Subject: [PATCH 0712/2002] Committed 2022/04/03 --- .../Using_sympy_to_find_the_derivative.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative.py b/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative.py index e69de29b..3a7eacd1 100644 --- a/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative.py +++ b/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative.py @@ -0,0 +1,11 @@ +import sympy as sym + +x = sym.symbols('x') +f_expression = x**2 - 9 # symbolic expression for f(x) +dfdx_expression = sym.diff(f_expression, x) # compute f'(x) symbolically + +# turn f_expression and dfdx_expression into plan Python functions +f = sym.lambdify([x], f_expression) +dfdx = sym.lambdify([x], dfdx_expression) + +print(f(3), dfdx(3)) From f41ef85999249a993b7c61608d333bb50b5f2ebd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Apr 2022 16:58:18 +0800 Subject: [PATCH 0713/2002] Committed 2022/04/03 --- .../Using_sympy_to_find_the_derivative2.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative2.py diff --git a/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative2.py b/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative2.py new file mode 100644 index 00000000..1a5bb324 --- /dev/null +++ b/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative2.py @@ -0,0 +1,11 @@ +import sympy as sym + +x = sym.symbols('x') +f_expression = x**2 - 9 # symbolic expression for f(x) +dfdx_expression = sym.diff(f_expression, x) # compute f'(x) symbolically + +# turn f_expression and dfdx_expression into plan Python functions +f = sym.lambdify(x, f_expression) +dfdx = sym.lambdify(x, dfdx_expression) + +print(f(3), dfdx(3)) From 86a96c9326e9e97e08b52ca4a6eec9eb59fc0719 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Apr 2022 17:02:08 +0800 Subject: [PATCH 0714/2002] Committed 2022/04/03 --- .../Using_sympy_to_find_the_derivative3.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative3.py diff --git a/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative3.py b/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative3.py new file mode 100644 index 00000000..e67fe147 --- /dev/null +++ b/Programming for Computations - Python/Chapter7 - Solving Nonlinear Algebraic Equations/Using_sympy_to_find_the_derivative3.py @@ -0,0 +1,11 @@ +import sympy as sym + +x = sym.symbols('x') +f_expression = x**2 - 9 # symbolic expression for f(x) +dfdx_expression = sym.diff(f_expression, x) # compute f'(x) symbolically + +# turn f_expression and dfdx_expression into plan Python functions +f = sym.lambdify(y, f_expression) +dfdx = sym.lambdify(y, dfdx_expression) + +print(f(3), dfdx(3)) From fed857be786b5e57151cd8019fd81fc55f125288 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 19:06:20 +0800 Subject: [PATCH 0715/2002] Committed 2022/04/05 --- .../stop_band.ipynb | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb new file mode 100644 index 00000000..64293bb5 --- /dev/null +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From a2d81195a33cac44eaf577f4c4199ce53a315408 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 19:23:53 +0800 Subject: [PATCH 0716/2002] Committed 2022/04/05 --- .../92002__jcveliz__violin-origional.wav | Bin 0 -> 441044 bytes .../stop_band.ipynb | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/92002__jcveliz__violin-origional.wav diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/92002__jcveliz__violin-origional.wav b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/92002__jcveliz__violin-origional.wav new file mode 100644 index 0000000000000000000000000000000000000000..36a8470ef18ae112cfa234eac8b53e0cd1228fea GIT binary patch literal 441044 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

      |QzAK2~rZEkSBJ_QvygOlM8 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

      TWPCVg%sbNE=OEt83~WE3B;ucGm~ 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 BJWT)q literal 0 HcmV?d00001 diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb index 64293bb5..283cdba8 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb @@ -7,7 +7,12 @@ "collapsed": true }, "outputs": [], - "source": [] + "source": [ + "from thinkdsp import read_wave\n", + "\n", + "wave = read_wave('92002__jcveliz__violin-origional.wav')\n", + "\n" + ] } ], "metadata": { From da8194710a2a389b20827887985b7258876fc4ff Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 19:51:27 +0800 Subject: [PATCH 0717/2002] Committed 2022/04/05 --- .../stop_band.ipynb | 180 +++++++++++++++++- 1 file changed, 176 insertions(+), 4 deletions(-) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb index 283cdba8..273585e2 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb @@ -2,17 +2,189 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": { - "collapsed": true + "collapsed": true, + "pycharm": { + "name": "#%%\n" + } }, "outputs": [], "source": [ - "from thinkdsp import read_wave\n", + "from thinkdsp import read_wave, play_wave\n", + "import matplotlib.pyplot as plt\n", "\n", "wave = read_wave('92002__jcveliz__violin-origional.wav')\n", - "\n" + "\n", + "play_wave(wave, player='Groove Music')" ] + }, + { + "cell_type": "code", + "execution_count": 28, + "outputs": [ + { + "data": { + "text/plain": "

      ", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAh0UlEQVR4nO3deXhV1dn+8e+ThCSQhDFhhoR5UkCJgAOiAgo4oNU619raWutr9a19tVSqtWpbqq1Vq7Wl1p9DW61aB1rAAVREESWMMgoyhTGQECAJIcNZvz8SMEASkpxhn+H+XJdXz7Cz17Nz6J191l57LXPOISIi0S/O6wJERCQ0FPgiIjFCgS8iEiMU+CIiMUKBLyISIxK8LqAu6enpLisry+syREQiyqJFi/Y45zJqey9sAz8rK4ucnByvyxARiShmtrmu99SlIyISIxT4IiIxQoEvIhIjFPgiIjFCgS8iEiMU+CIiMUKBLyISIxT4IhI2fD5HbkEJH6zJ87qUqKTAFxHPFR2qoNLnuOCxjxj18Ad857mFlFX4ePTdtRwsqzyy3f7ScrYVHvSw0shm4boASnZ2ttOdtiLRbfnWQi558hMAeqansGFPcYN+7suHJvD64q1cmd2NuDgLZokRx8wWOeeya3svbKdWEJHos2LbPj7fWMDs1buY/1X+Ue81NOwB7nptGW8t3c7v3/uSCwZ14MrsbnRslczBskoy26UEuuyooTN8EQmq/KJD3PfWSgZ0SuN3734Z9PY2Tb0w6G2EM53hi0hAVPoccQZmx3ejFBSX0TI5gYT4OIoPVfDvxVu5762VR96f8cWOkNSYNXkGt4/pw/+O6aPunmMo8EWkVoUlZRQUl9EjPYXFWwoZltmGXvfMpE2LZjx46Un079iS3u1T2VdSzhV/ns+6vCKvSz7iiTnrGJbZhtF9a50lOGYp8EVi0KGKSuLNOFThY9f+UnpmpB55L2vyDCac1JFluYVs31fKyJ5tWbChgG+NzARgb0k5t/1zCQCj+2Zw0eBOYRX2h3372c8B+NmE/vxgdC+PqwkP6sMXiTAfrM3jrN7pVPock578hLW7DvDT8f1pl5qIAR9+uZvTMttwoLSCzPQUzh/Ygc35JfTrmEZhSRlDH3jvuH1OOKkj6/OKePr6YYx9dG7oDyrILh7SmSuGdY2JM/76+vAV+CJhat663bRunkjXNs1pk5LIqu37mfjEvEbvp0ViPCVllfTvmMaanQeCUGlkiTNY8csLaJEYnR0cumgrEgFKyytZvnUfG/cU4RxMfv2LgOy3pPrGJYV9FZ+DaR9tYGi31ozo0Y7mifFelxQyCnwRD/1n2XZ6pKfw7qpdPDFnndflxIzHZlf9rhMT4nj6ulPp2yGNbm1bHHm/0ueIj8IRPgEJfDMbDzwOxAPPOOem1rHd5cBrwGnOOfXXSEzx+RxllT5Wbt9Pq+bN6JWRwo9eWuJ1WTGtrMLHTc9XRVFWuxZsyi/h15edzD1vfMGT155CQXEZ3dq24Nx+7T2uNDD8DnwziweeAsYBW4GFZjbdObfqmO3SgDuAz/xtUyQSTXnzC176PPfI8wsGdfCwGjnWpvwSAO55o6or7fBIJIDubVtw70UDGTcwsj+zQEyeNhxY75zb4JwrA14GJtWy3YPAb4HSALQpEhFWbt/HpU99wgP/WXVU2AO8s3KXR1VJY20pKOH7L+SwfGshk576hFXb9/Pf5dtZt+sAL3y6iVteXOR1iQ0SiC6dLkDNf8lbgRE1NzCzU4FuzrkZZnZXANoUCWt5B0oZ/qs5R54vzS30rhgJmMMTvdU2WmrX/lJmLN9B25REluYWcvGQzgzLbBPqEusV9Iu2ZhYHPArc2IBtbwZuBujevXtwCxMJgvfX7GLqrDVcMKij16VIiI349Zyjnj83fxN/vSGblKR4zuiV7lFVR/N7HL6ZnQ7c75y7oPr5zwCcc7+pft4K+Ao4fCteR6AAuKS+C7cahy+RKPuh99hTVOZ1GRJmVvzyApIT4kiID/4SJPWNww9E6wuBPmbWw8wSgauB6YffdM7tc86lO+eynHNZwAJOEPYikWjhpgKFvdTqpF+8Q+8ps9i6t8TTOvzu0nHOVZjZbcA7VA3LfNY5t9LMHgBynHPT69+DSOTaV1LOnz5cz18+2uB1KRIBFm4qoGubFifeMEg0tYJIIx2qqGTx5kKmL9vOS59v8bociTC3ndub287rTXKz4Nzhq6kVRAJgwuPzWL1jP+mpSewpOuR1ORKhnvxgPZvyi3ny2lND3rYWMRepx5Ite/H5qr4Fr96xH0BhL3779Kt8vOhd0Rm+SB0+25DPVdMWeF2GRKH84jJuePZzXrxpxIk3DiCd4Ysco7S8ki35Jezcr5vCJXjmrdvDim37QtqmzvBFjnHbP5cwe7WmPZDgu+iPH4d00XWd4TfCtsKDR/rdyip8lJZX8tGXu8maPIO8A1+fDU54fB7DHjx+VSEJjcKSMnILStheeLBRP+fzOXw+x0df7g5SZSLH25xfHLK2dIbfQGt27mf8Y/O496KB3HRWD8Y+OpctBV/fRLEsdx+rd+Tic+7Ixb2syTOYd/e5R82zLcHzxJx1DOjUku+/8PVw3sSEOD756XlkpCUxfdl2SssrGdS5JQM7tSS/uIzfv/sl9140gLlrd/PDfyz2sHqJVaMf+TBkZ/kK/AbatKcq3B/87yrW7TpwVNgDR4VMTaMe/oD5k8+jc+vmQa8xVuQdKOUnryzjs40FzPjRWVz0x485VOGrdduyCh+n/Wp2vftzzvHywtx6txEJpjeXbOPSU7oEvR3deNUAK7bt46I/fuzXPl6/9QxO7R5eM+dFot73zKTCF57/ZkX88f5PRtMzI9Xv/QR7Lp2o99z8TX7vY/aqqouAn6zfw78XbWXxlr1+7zOWOOd49uONCnuJWnV9Sw0kdemcwJqd+3lt0Va/9/OXjzbw+cYCcjZ/HfShvDofqUrLK5m9etdRqw+JRKOd+0sZ0KllUNtQ4J/AVX8JzI03lT53VNhDVZgFaz6NSFZe6SPOjKmzVvPXeRu9LkckJL7z/xbywneHc3bfjKC1ocA/AV8QuxD63/s2/7p5JCN6tgtaG5HAOceeojIy0pIA6DNllscViXjji237ghr46sOvx9LcQg4cqghqG1dNW8AHa/Oa/PNf7S6ivNLHmp37WZ93AOcc5ZXB7wusyedzHKqobNTPlFX4WL61kImPz6PHz2Zy2q9m8/aKnYx/7KMgVSkS/h55Zy2v5ARvxJhG6dQja/KMkLTTNiWR2XeOpm1KYqN+7qvdRYz5/dyjXuvdPpX1eUWseXB80LuL5n65m1Xb9/Pbt9cAMLJnW3qkp/CziQNomdwMgINllZSUVdAuNemonw3V71Yk0gzq3JIZt49q8s9reuQmeDWIf2WPVVBcxg9ezOEf3xtJYsLRX7p8Pset/1hM+5ZJnNe/PQM7t6RdShJvLd3Gna8sO25f6/OqVpLsf+/bPDhpEFcP706zRiyrlltQwtXTFvDqLadz3TOfcd2I7pzZO51d+0s5p197CorLSEqI4/aXljBnzdHfTBZsKGDBhgI++nIPt57bizU7DvDigs1A1QXq3IIS9h0s93uIq0g0C+ZANJ3h18GLM9CxA9rzzLdPA6qC/oO1edz0/PG/g9F9M5jbwNv/U5MSePN/zqR3+7rH9+YWlLBm5wGen7+Jj9fvaVrxJ3DnuL48+t6XQdm3SLR56NKTuH5kZpN+tr4zfAV+HbzqcnjkisFcPKQz9721gldy/B8Oetirt5zOaVltj3t98Za9fONP8wPWjogERlOHbatLp5HW7jzgWdt3vbacu15bHvD9fvPPn3LTWT2496KBAFRU+rj8z5+yLLcw4G2JSHhS4NfigigdKfK3jzeyNLeQRZv3ktwsjtLy0I7mERFvaVjmMaYv2+51CUG1qPrmL4W9SOxR4NewYts+bn9Jt/CLSHRS4NdQUta4m4dERCKJAr8GM68rEBEJHgV+Necca6pXqhIRiUYKfKrC/qXPc7n3rZVelyIiEjQalgk8Nnsdj89Z53UZIiJBpTN84I0l27wuQUQk6GI+8JflFh63ILmISDSK+cCf9NQnXpcgIhISAQl8MxtvZmvNbL2ZTa7l/TvNbJWZLTezOWbWtGngRERiwISTOgZlv34HvpnFA08BE4CBwDVmNvCYzZYA2c65wcBrwMP+thsI5/7uQ69LEBE5Tre2LYKy30Cc4Q8H1jvnNjjnyoCXgUk1N3DOfeCcO9xRvgDoGoB2/bZxT7HXJYiIHCdY94AGIvC7ADWXh9pa/VpdbgJqXaXazG42sxwzy9m9u2ELfIiISMOE9KKtmV0PZAOP1Pa+c26acy7bOZedkRG8ldsBFm0uCOr+RUTCTSBuvNoGdKvxvGv1a0cxs7HAFGC0c+5QANr1y+VPf+p1CSIitQtSn04gzvAXAn3MrIeZJQJXA9NrbmBmpwB/AS5xzuXVso+QKTpUwSb13YtIDPL7DN85V2FmtwHvAPHAs865lWb2AJDjnJtOVRdOKvCqVU1JucU5d4m/bTeyTj79Kp9rn/kslM2KiISNgMyl45ybCcw85rX7ajweG4h2/PH8/E3c/59VXpchInJCFqQ+nZi403bnvlKFvYjEvJgI/PGPR+ei5CIijRETgV9YUu51CSIiDRas1fdiIvBFRCQGAn/so3O9LkFEJCxEfeCvzyvyugQRkUYJ57l0REQkAkR14L+1VEsXiogcFtWBf8fLS70uQUQkbER14IuIRCINyxQREb8EZC6dcOOc4763VnpdhohIWInKM/zdBw7x4oLNXpchItIkmjxNRCRG7NhXGpT9RmfgB+uuBRGRENhTFJxFAaMy8IP1dUhEJBQ0SqcRgvXLEhEJBeeCs9+oDHwRETmeAl9EJMyoS0dEJEZU+oLTp6PAFxEJM/PW7QnKfqMy8IN1wUNEJJJFXeCXllfySk6u12WIiISdqAv84kMVPPLOWq/LEBEJO1EX+HEahC8iUqvoC/w4Bb6ISG2iLvDjFfgiIrWKvsBXl46ISK2iLvCV9yIitYu6wFeXjohI7QIS+GY23szWmtl6M5tcy/tJZvav6vc/M7OsQLRbG3XpiIjUzu/AN7N44ClgAjAQuMbMBh6z2U3AXudcb+APwG/9bbcuGqUjIlK7QJzhDwfWO+c2OOfKgJeBScdsMwl4vvrxa8AYM52Ki4iEUiACvwtQcy6DrdWv1bqNc64C2Ae0O3ZHZnazmeWYWc7u3bsDUJqIiBwWVhdtnXPTnHPZzrnsjIwMr8sREYkqgQj8bUC3Gs+7Vr9W6zZmlgC0AvID0LaIiDRQIAJ/IdDHzHqYWSJwNTD9mG2mA9+ufnwF8L5zmsRYRCSUEvzdgXOuwsxuA94B4oFnnXMrzewBIMc5Nx34G/Cima0HCqj6oyAiIiHkd+ADOOdmAjOPee2+Go9LgW8Goi0REWmasLpoKyIiwaPAFxGJEQp8EZEYocAXEYkRCnwRkRihwBcRiREKfBGRGKHAFxGJEQp8EZEYocAXEYkRCnwRkRihwBcRiRFRGfhrHxrvdQkiImEnKgM/KSGeDi2TvC5DRCSsRGXgA8y4fZTXJYiIhJWoDfz01CS+ccqxa6mLiMSuqA18gKmXD2bCSR29LkNEpFHapSQGZb9RHfiJCXFkpKkvX0QiS1ycBWe/QdlrGNFS6SISaYIT9zEQ+CIiUiXqA9+hU3wREYiBwPcp70UkwliQ+nSiPvAP9+GnJSd4W4iIiMeiPvCvGNYVgP/+6CyPKxER8VbUn/YOy2zDpqkXAtA2JZFKn2PfwXKPqxIRqZsFaZxO1Ad+TYvvHQdA1uQZHlciIlK3ey4cEJT9Rn2XTm0uP7Wr1yWIiNQpWDMExGTg//7KIbz/k9FelyEiUivdeBVgPTNSGT9I8+yISOyI2cAHOLN3O69LEBE5jgVpIL5fgW9mbc3sPTNbV/2/bWrZZqiZfWpmK81suZld5U+bgXT9yEwenDTI6zJERELC3zP8ycAc51wfYE7182OVADc45wYB44HHzKy1n+0GhJlx3YhMbj+vt9eliIgEnb+BPwl4vvrx88Clx27gnPvSObeu+vF2IA/I8LPdgImLM354jgJfRMJHuF607eCc21H9eCfQob6NzWw4kAh8Vcf7N5tZjpnl7N6928/SGq55Yjyv3nJ6yNoTEalPsObSOeGNV2Y2G6htOMuUmk+cc87M6pyqzMw6AS8C33bO+Wrbxjk3DZgGkJ2dHdJpz07LahvK5kRE6hSsi7YnDHzn3Ni63jOzXWbWyTm3ozrQ8+rYriUwA5jinFvQ5GqD7K83ZPP9F3K8LkNEJCj87dKZDny7+vG3gbeO3cDMEoE3gBecc6/52V5QjRtYb4+UiEhE8zfwpwLjzGwdMLb6OWaWbWbPVG9zJXA2cKOZLa3+b6if7YqISCP5NXmacy4fGFPL6znA96of/x34uz/thNIfrhrCj/+1zOsyREQCLqbvtK3NZad0ZeGUOi9biIhELAV+LTLSkhjSrbXXZYiIBJQCvw5n9tI8OyISXRT4dfjJ+f341shMr8sQEQkYBX4d4uOMrm2ae12GiEjAKPBFRGKEAr8eV53Wjax2LbwuQ0QkIBT49WjdIpHnvzscgO5tFfwiEtkU+CfQPi0ZgNs0Z76IRDi/7rSNBc0T49k09UIAUpMSuPUfiz2uSESkaXSG3wgTT+7EzNtHeV2GiEiTKPAbaWDnljxxzSkAXDuiu8fViIg0nAK/CS4Z0plNUy/knokDSE9NPPIHIFj6dUhjeI+2dGtbdV/ANcO7NXlfV5929M+OH/T12jZ/vSGbjb+ZyMpfXtDk/YtI+FIfvh9SkxLI+fk4AJrFGT8MQP/+gp+NIS4OSg5VkhBvtEtJonliPAA+n2NdXhH9OqZx8eDO7Cku4/aXljRq/7ee05uplw+mpKyCODOSm8XjnGNLQQmZ7VIASElKYO5d5/CDFxexZucBALq1bc51IzKZOmuN38coIt5Q4AfIhJM7+b2PnJ+PJT01qepJ2vHvx8UZ/TpWvXFG73QAxvRvz5qd+/nxv5axpaAEgA//7xyue+YzthUePOrn1zw4nuRmVX88WiR+/dGb2ZGwPyyzXQozbx9F7t4SXvx0M/dMHEBcnCnwRSKYORfSpWMbLDs72+XkRNZyg5vzi1maW8ibS7bxwdqGLcL+8OWD6dsxjebN4o+EeVP4fI6CkrKv/2AAe4vLWL1zPwXFZVw0uHOT913Tyu376NAymc35xazPK+KMXun86KUlPPed0xj6wHsBaUMk1h0eGdgUZrbIOZdd63sK/OB4a+k27nh56XGvD8tsw0WDO3HjGVlBW6jYa1mTZ3hdgkhEC1bgq0snSIZ0bV3r6//+4RmhLcQDM24/i/0HKxjYuSWvL97KjWdk8dLnudzzxhdelyYS03SGH0TOOabOWsOoPhmc3KUVSc3ijvShx6LPNuRz1bQFXpchEvbUpSNR4WBZJa8v2cqUN1Z4XYpIWKo5uKIp1KUjYaN5YjzXjcjk2uHdKa90zFqxo9ZrHSKxKpi9AAp88YSZkZhgTBrahUGdW3KwzMcT76/jvVW7vC5NxDMXDvZ/eHd9FPjiud7tq4aj/vWGbHw+x/rdRZz/h488rkoktDq2TOapa08NahuaWkHCSlyc0bdDGp9PGcMp3Vt7XY5IyPz9eyOC3obO8CUstU9L5o1bz6T4UAVrdh7g8qfne12SSNBcN6I7vdunBr0dneFLWEtJSmBYZhu+uP98r0sRCZobz8gKSTsKfIkIacnN+MapXchISzrxxiIRIiMtiWW/OJ8+HZo+rUpjqEtHIsajVw4F4Ft/+4x56/Z4W4xIACycMjak7SnwJeI8dtVQ/r14K3uKypj20QavyxFpktSk0MevunQk4rRLTeLms3tx+5g+AFw8JDAzgYqEyjn9MljhwUJDfv2JMbO2wL+ALGATcKVzbm8d27YEVgFvOudu86ddEag6Qzo858hV2d1YsX2f5uuXiPDcd4Z70q6/Z/iTgTnOuT7AnOrndXkQ0N00EhRn9UnnltG9uOyULl6XIlKva4Z7txa2v4E/CXi++vHzwKW1bWRmw4AOwLt+tidSr6mXn8zcu87h3R+fzbiBHRr0M4fXCj7scBfRwE4tA16fxLYpEwfwm2+c7Fn7fs2WaWaFzrnW1Y8N2Hv4eY1t4oD3geuBsUB2XV06ZnYzcDNA9+7dh23evLnJtYkA9Pv5LA5V+I48HzugPdcM747PwfdfyOH2MX24c1xfDpZVUnSo4rhhn1rMRQLl7f8dRf+OwT+J8Gu2TDObDXSs5a0pNZ8455yZ1fbX41ZgpnNu64lWeHLOTQOmQdX0yCeqTeRE1j40gaW5haQlJ9Ar4+g7Gb/69UTiqv9JNk+MP7JYfE0DOrVk9Y79oShVotB3z+zBtSO6HZkvymsnDHznXJ0DRc1sl5l1cs7tMLNOQF4tm50OjDKzW4FUINHMipxz9fX3iwTM0G6ta309Pu7ES0zOumMUhyoq2X+wgs35xcxasZO/fbwxwBVKNHry2lMCtpZ0oPjbpfMIkO+cm2pmk4G2zrm769n+Rurp0qlJC6BIuMt+aDZn9m7Hj87rzU3P57A5v8TrksQDme1asDm/hDvH9SUlKYEurZM5tXsb2rdM9qSeYC6AMhV4xcxuAjYDV1Y3mA3c4pz7np/7FwlbOT//+svvBz85h537S0lMiCP7odkeViWhMmXiAA4cquDHY/sw/6t8zujVjhN1W3tNSxyKBNhXu4vISEti8P0alBZtUpMSOLlLKy4Z2tnT4ZX10RKHIiF0+OLw/Mnn8cKnm/nz3K88rkj89fDlg+nTIZUhXVsT14BrP+FKgS8SJJ1bN2fyhP70bp/K/726zOtyxA+XntKFxITIn4lGgS8SZFcM68op3Vsz5vdzvS5FGig9NZGp3xhMVnoL5qzOi4qwBwW+SEj0ykhl3t3nMurhD+iZkcKG3cVelyTH+L/z+/Lh2t384uJBnNy11ZHXw2UMfSDooq1ICJWWV5KUEIeZsWBDPldPW+B1STHvzN7t6NAymUeuGNKgezPCXX0XbaPje4pIhEhuFn9k6N7Inu3o3KpqrPaUiQO8LCum/eN7I3n0yqFREfYnoi4dEQ+9fuuZrNy+jzEDOvD9s3sCMOrh98ktOOhxZdEtIy2JBy4ZRLkvPHs4gkWBL+Khjq2S6djq6Dsy5919niZtC5LxgzrSoWUS143MpG+I1pENJwp8kTA05yejj4zqyUhLYveBQx5XFPluPCOLn184gIT42O3JVuCLhKFeGan87ptDmLN6F09fP4wt+SW8tHALT3+om7iaYtLQztx/ySCvy/CcRumIRBB19TTN4aUwY4GmVhCJEkvvG0fzxHiG/vI9DpZXel1O2Lt7fD/Skpt5XUbYUOCLRJDWLRIB+GTyeRQfquCRd9Yyfdl2kpvFUVruO8FPx5bXbjmd7Ky2XpcRVhT4IhGobUoibVMSue/igbRq3oyfTujPSb94x+uywsKNZ2Rx70UDY2JcfWMp8EUiWHpqEg9eehIA9188kHP6tafSOZ6fv4kXPo29NaH7dkjlzvP7KuzroIu2IlHMOcf7a/IY2bMdg6L8G0CX1s358K5zaBbDwy5BF21FYpaZMWZAB6BqpIpzjqv+soDPNxUA0KZFM/aWlB/Zvk/7VNblFXlSqz9e+cHpDO+h/voTUeCLxBAz45/fH0F5peNgeSVtUxJZn1fE2Efnkp6axHt3jmbjnmKW5u7l0qFdeDVnK3f/e7nXZddp1h2j6JWRGjXTFwebunREhOnLtnNq99Z0bdPiuPdKyyuZ+cUOXl6Yy+cbq74ZJCXEcajCx5XZXXklZ+uRbXtlpPBVCKZ+fujSk5g0tLOGXNaivi4dBb6INNiizXtZs3M/143IpKLSR0J8HCu376OwpJyOrZLplZHK//xjMTO+2MGIHm35bGMBQ7q1ZlluIQBDu7VmaW4hZ/Zuxyfr8xvd/gOTBvGtkZlhv1i4l9SHLyIBMSyzDcMy2wAcmZNmUOdWR23zwKRBdG3TnLvH92fJlr307ZhGaVklFT5H59bNAVixbR8X/fHjOttJS0rgwKEKxg3swB+uGsrOfaXsLSnjNI2r94sCX0QCql1qEj+rnt//8I1PLY/peqk5bLJFYjwlZVV3Db9403C+9bfPmXnHKMyqhp0mN4und/vUEFUf3RT4IhJy/TumcceYPpzbvz39OqRRVunjYFklHVslx9S8N6GmwBeRkDMzfjyu75HnzYmnVXNdgA02jWUSEYkRCnwRkRihwBcRiREKfBGRGKHAFxGJEQp8EZEYocAXEYkRCnwRkRgRtpOnmdluwJ8le9KBPQEqx0vRchygYwlX0XIs0XIc4N+xZDrnMmp7I2wD319mllPXjHGRJFqOA3Qs4SpajiVajgOCdyzq0hERiREKfBGRGBHNgT/N6wICJFqOA3Qs4SpajiVajgOCdCxR24cvIiJHi+YzfBERqUGBLyISIyI68M3sWTPLM7MVdbx/nZktN7MvzGy+mQ0JdY0N1YBjmVR9LEvNLMfMzgp1jQ1xouOosd1pZlZhZleEqrbGasBnco6Z7av+TJaa2X2hrrGhGvK5VB/PUjNbaWZzQ1lfQzXgM7mrxuexwswqzSwsF8JtwLG0MrP/mNmy6s/kO3436pyL2P+As4FTgRV1vH8G0Kb68QTgM69r9uNYUvn6mstgYI3XNTflOKq3iQfeB2YCV3hdsx+fyTnAf72uM0DH0hpYBXSvft7e65qbchzHbHsx8L7XNfvxmdwD/Lb6cQZQACT602ZEn+E75z6i6pdQ1/vznXN7q58uALqGpLAmaMCxFLnqTx5IAcLyavuJjqPaj4B/A3nBr6jpGngsEaEBx3It8Lpzbkv19mH52TTyM7kGeCmI5filAcfigDQzM6pO+AqACn/ajOjAb6SbgFleF+EPM7vMzNYAM4Dvel1PU5hZF+Ay4GmvawmQ06u/cs8ys0FeF+OHvkAbM/vQzBaZ2Q1eF+QPM2sBjKfqxCJSPQkMALYDXwB3OOd8/uwwJhYxN7NzqQr8sOz3bijn3BvAG2Z2NvAgMNbjkpriMeCnzjlf1YlLRFtM1bwlRWY2EXgT6ONtSU2WAAwDxgDNgU/NbIFz7ktvy2qyi4FPnHOR/A3tAmApcB7QC3jPzOY55/Y3dYdRf4ZvZoOBZ4BJzrl8r+sJhOqvgj3NLN3rWpogG3jZzDYBVwB/MrNLPa2oiZxz+51zRdWPZwLNIvQzAdgKvOOcK3bO7QE+AsJ2kEMDXE0Yd+c00Heo6mZzzrn1wEagvz87jOrAN7PuwOvAtyL4TAUAM+td3ZeHmZ0KJAER9wfMOdfDOZflnMsCXgNudc696W1VTWNmHWt8JsOp+v9TxH0m1d4CzjKzhOrukBHAao9rahIzawWMpuqYItkWqr5xYWYdgH7ABn92GNFdOmb2ElUjJdLNbCvwC6AZgHPuz8B9QDuqziIBKlyYzqbXgGO5HLjBzMqBg8BVNS7iho0GHEfEaMCxXAH80MwqqPpMrg7HzwROfCzOudVm9jawHPABzzjn6h1a64UG/vu6DHjXOVfsSZEN1IBjeRB4zsy+AIyqrlC/pn/W1AoiIjEiqrt0RETkawp8EZEYocAXEYkRCnwRkRihwBcRiREKfBGRGKHAFxGJEf8f9inKY0BiS78AAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from thinkdsp import read_wave, play_wave\n", + "\n", + "wave = read_wave('92002__jcveliz__violin-origional.wav')\n", + "\n", + "segment = wave.segment(start=1.2, duration=0.6)\n", + "\n", + "segment.plot()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 29, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.xlabel('Time (s)')\n", + "segment.plot()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 30, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEGCAYAAACJnEVTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAZdElEQVR4nO3de5RV5Z3m8e9ThSJBRBCCiBg0jatDuqMSomaS6WVPHLykO5q1EmN6dUvSztCTpVmdzCQZ0lmzNJ3JJDNJmxkT27Qd6ejE9pbLhBlJI6F1jI4XCoIoUaEiICCXwpJrIUVV/eaP/R44daoOBXU5h6r3+axV6+zz7tu7d53znH3evfd7FBGYmVkeGupdATMzqx2HvplZRhz6ZmYZceibmWXEoW9mlpFR9a7A0UyaNClmzJhR72qYmQ0rK1as2BkRk3sbd0KH/owZM2hqaqp3NczMhhVJG6uNc/OOmVlGHPpmZhlx6JuZZcShb2aWEYe+mVlGHPpmZhlx6JuZZSS70P+nF7exc9/BelfDzKwusgr9fQc7+Hc/WsENdz9X76qYmdVFVqHf2Vn8YMzmN9vqXBMzs/roM/QlTZf0mKTfSFoj6S9T+URJSyWtS48TUrkk3S6pWdJqSbPLljUvTb9O0ryh2ywzM+vNsRzpdwD/ISJmAZcCN0maBSwAlkXETGBZeg5wFTAz/c0H7oTiQwK4BbgEuBi4pfRBYWZmtdFn6EfE1ohYmYb3Ai8B04BrgHvSZPcA16bha4B7o/AMcLqkqcAVwNKIaI2IN4GlwJWDuTFmZnZ0x9WmL2kGcBHwLDAlIramUduAKWl4GrCpbLbNqaxaeeU65ktqktTU0tJyPNUzM7M+HHPoSzoV+AnwuYjYUz4uIgKIwahQRNwVEXMiYs7kyb12B21mZv10TKEv6SSKwL8vIn6airenZhvS445UvgWYXjb72amsWrmZmdXIsVy9I+Bu4KWIuK1s1CKgdAXOPODnZeU3pKt4LgV2p2agJcBcSRPSCdy5qczMzGrkWH456wPAnwEvSFqVyv4K+CbwkKQbgY3AdWncYuBqoBloAz4NEBGtkr4GLE/T/XVEtA7GRpiZ2bHpM/Qj4klAVUZ/qJfpA7ipyrIWAguPp4JDYVBOPpiZDUNZ3ZFb9aPLzCwTeYW+mVnmHPpmZhlx6JuZZcShb2aWEYe+mVlGHPpmZhlx6JuZZcShb2aWEYe+mVlG8gx998NgZpnKKvTlbhjMLHNZhb6ZWe4c+mZmGXHom5llxKFvZpYRh76ZWUayCv3wpZpmlrmsQv8wX7ppZpnKM/TNzDKVZ+i7mcfMMpVV6PuOXDPLXVahb2aWO4e+mVlGHPpmZhlx6JuZZcShb2aWEYe+mVlGHPpmZhlx6JuZZcShb2aWkSxD370wmFmusgp998JgZrnLKvTNzHLn0Dczy4hD38wsIw59M7OMOPTNzDLi0Dczy0ifoS9poaQdkl4sK7tV0hZJq9Lf1WXjviypWdIrkq4oK78ylTVLWjD4m2JmZn05liP9HwJX9lL+nYi4MP0tBpA0C7geeHea528lNUpqBO4ArgJmAZ9M05qZWQ31GfoR8QTQeozLuwZ4ICIORsR6oBm4OP01R8SrEdEOPJCmrYuInvfk3vFYMy9u2V2H2piZ1c5A2vRvlrQ6Nf9MSGXTgE1l02xOZdXKe5A0X1KTpKaWlpYBVK/XZVcd960lr/BH331yUNdnZnai6W/o3wm8E7gQ2Ar8zWBVKCLuiog5ETFn8uTJg7VYMzMDRvVnpojYXhqW9PfA/0lPtwDTyyY9O5VxlHIzM6uRfh3pS5pa9vSjQOnKnkXA9ZJGSzoXmAk8BywHZko6V9LJFCd7F/W/2mZm1h99HulLuh+4DJgkaTNwC3CZpAspeineAPwFQESskfQQ8BugA7gpIjrTcm4GlgCNwMKIWDPYG9OX3k7gmpnlpM/Qj4hP9lJ891Gm/zrw9V7KFwOLj6t2Q+RoJ3TNzEYy35FrZpYRh76ZWUYc+mZmGXHom5llJMvQ91U8ZparrELfV+2YWe6yCn0zs9w59M3MMuLQNzPLiEPfzCwjDn0zs4w49M3MMuLQNzPLiEPfzCwjWYa+78c1s1xlFfq+H9fMcpdV6JuZ5c6hb2aWEYe+mVlGHPpmZhlx6JuZZcShb2aWEYe+mVlGHPpmZhlx6JuZZSTL0PfvoptZrrIKff8uupnlLqvQ9xG+meUuq9Av8RG/meUqy9A3M8uVQ9/MLCMOfTOzjDj0zcwy4tA3M8uIQ9/MLCNZhr6v1zezXGUZ+mZmuXLom5llxKFvZpaRPkNf0kJJOyS9WFY2UdJSSevS44RULkm3S2qWtFrS7LJ55qXp10maNzSbU3/PrW9lzeu7610NM7NeHcuR/g+BKyvKFgDLImImsCw9B7gKmJn+5gN3QvEhAdwCXAJcDNxS+qAYaa77u6f58O1P1rsaZma96jP0I+IJoLWi+BrgnjR8D3BtWfm9UXgGOF3SVOAKYGlEtEbEm8BSen6QmJnZEOtvm/6UiNiahrcBU9LwNGBT2XSbU1m1cjMzq6EBn8iNiAAG7cp3SfMlNUlqamlpGazFmpkZ/Q/97anZhvS4I5VvAaaXTXd2KqtW3kNE3BURcyJizuTJk/tZPTMz601/Q38RULoCZx7w87LyG9JVPJcCu1Mz0BJgrqQJ6QTu3FRmZmY1NKqvCSTdD1wGTJK0meIqnG8CD0m6EdgIXJcmXwxcDTQDbcCnASKiVdLXgOVpur+OiMqTwzUTg9caZWY2rPQZ+hHxySqjPtTLtAHcVGU5C4GFx1U7MzMbVL4j18wsIw59M7OMOPTNzDLi0Dczy4hD38wsIw59M7OMOPTNzDKSVej7liwzy11WoW9mljuHvplZRhz6ZmYZceibmWXEoW9mlhGHvplZRhz6ZmYZceibmWXEoW9mlhGHvplZRhz6ZmYZyTL0w53wmFmmsgx9M7NcOfSB8KG/mWXCoW9mlhGHvplZRhz6ZmYZceibmWXEoW9mlhGHvplZRhz6ZmYZceibmWUky9D3rVhmlqssQ9/MLFcOfTOzjDj0zcwy4tA3M8uIQ9/MLCNZhX61LpTds7KZ5SKr0C9RvStgZlYnWYa+mVmuHPr4Zi0zy8eAQl/SBkkvSFolqSmVTZS0VNK69DghlUvS7ZKaJa2WNHswNqA/HPJmlqvBONL/w4i4MCLmpOcLgGURMRNYlp4DXAXMTH/zgTsHYd2Dwr+Ra2a5GIrmnWuAe9LwPcC1ZeX3RuEZ4HRJU4dg/WZmVsVAQz+ARyWtkDQ/lU2JiK1peBswJQ1PAzaVzbs5lXUjab6kJklNLS0tA6yemZmVGzXA+T8YEVskvR1YKunl8pEREZKOq+0kIu4C7gKYM2dOTdpd3LhjZrkY0JF+RGxJjzuAnwEXA9tLzTbpcUeafAswvWz2s1OZmZnVSL9DX9JYSeNKw8Bc4EVgETAvTTYP+HkaXgTckK7iuRTYXdYMZGZmNTCQ5p0pwM8klZbzjxHxT5KWAw9JuhHYCFyXpl8MXA00A23Apwew7kHli3fMLBf9Dv2IeBW4oJfyN4AP9VIewE39XZ+ZmQ2c78g1M8uIQx8IX79jZpnIM/QHIeP/9/Ovs2Jj68AXZGZWQwO9Tn9E6M+J3M/e/2sANnzzw4NcGzOzoZPnkb6ZWaYc+mZmGXHom5llxKFvZpYRh76ZWUYc+hz96p0fr9jMb17fU7vK9OG2R1/hPbcuqXc1zGyY8iWbffjCw88DJ86lmbf/c3O9q2Bmw5iP9PEduWaWjyxDfziE/COrt/KdpWvrXQ0zG2GyDP3h4KZ/XMn/WLau3tUwsxHGoY/70zezfGQV+s52M8tdVqFfIlTvKpiZ1UVWoV+tGcffAMwsF1mF/mE+0DezTOUV+j6kN7PM5RX6SeWBfvjyHTPLRFahPxxuyjIzG0p5hX7KfFUc6o/kj4Kd+w7yixe21rsaZnaCyCr0T0Rrt+9lxcY3h2z5N/5wOZ+5byW72w4N2TrMbPjIqpfNE/GIfu53ngCGrhfPTW8eAKCjq2tIlm9mw0uWR/qVN2eN5PO4PkltZuWyCv2cA1CVJzLMLEtZhX6J88/McpVV6Fc9zs/3C4CZZSar0C/xgb6Z5Sqr0K9nk/7W3QfYtvut+lXAzIzsLtksUr/ypGYt7tR9/zf+GThxfmDdzPKU1ZF+yb6DHfWuwqDb1NrGoudfr3c1zOwEl9WRfrUD+pFwJedH//Ypdu5r5yMXnNXr+JwvVzWzI7I80q/U3LJvUJZTy2Dt6uq+rp372nutQ1Q8mlnesgr9asH369cGp++bzq7aReuhKt0qVKtD5edRZ1ewYef+Y17fm/vb+fcPraKtfeQ1jZnlJKvQr+Z4fzO32hF9Rw1Dv1q4d1bUrTGdtK6c/jtL13LZtx9n4xvHFvy3LV3LT1du4ccrNvejtmZ2osgq9A919n50fLxX71QL91qGfrV1VX4eNTYUoV+57c+tbwVg6zFeRlqaf1RDVi8ZsxEnq3fwL17Y1mv5W4eqfBhUOaJv7+h9+qFo+qj6raKzypF+xYfBjr0HAWivCP1Sdncd43mI0nQNFV+KNrW2ccFXH2X9cTQVmVn91Dz0JV0p6RVJzZIW1HLd1Y7ob1u6ttfyyqA8XF4l9Ieiz/pqzTjVukqubN45PH3Fh8Sm1qLL5crFLHtpOzMWPMKet7pvS+kbQ+XyFz61nt0HDvFQ06Ye61y+obXHCWeApg2tVb919Wb15l3sfavnvn1w+WuseX33MS/HzGoc+pIagTuAq4BZwCclzRqKde196xDfWvIyf/zdJ/n9W5cwY8Ej/JfFLx8ef9+zG2nZe5D9Fdfsz1jwCOt37qezK7qF+4H2zsPDF31t6eHhiGD/wQ4OdXbxr1Pf+KXlP7J6Kxvf2M9jL+/oNn3psfybQXl5eVAufGo9rfvb6eyKbsF38deX8dahTrq6otu3gV+8sJWOzq4e3xAqP6i27DqQHtu6lX998UtFeeqHv6T04VCZ4Q83FW38r+/qPv2SNdv4+Pef5p6nN3Qrf+yVHXzs+0/zxYefp9Izr77Brrb2bmVt7R185HtPceV//1WP6f/jT17gw7c/2aN8y64DtO5v71H+1qFODnZ09ig3y4lqeZmhpPcDt0bEFen5lwEi4hu9TT9nzpxoamo67vXsPnCIC776aK/jLpx+Oqs27TruZY50k8eNpiU1BfVl3OhRjDm5kcYGdTsncOZpp7D/YAd7Kz5Ip50+hq4IuiLYvufIOs4afwqjGhtoUNEM1ZY+WCedejJdUTQp7Sr79jT25EYmjRtNR2ewq62d/Wn6cya+jcYGHf5W9Fpr8UF23qSxBMVyInqWQ9mHLcVJ7+BI30ydEYjiDu5SWVdEt+eIw5eF7TvYgQRjR5fd/hKwedcB2ju6eOfkscU5F6XZ4vAkhxdVWl75eop9VzweaO9k/JiTataBVESxjyR17522PDYqyoNinobKtsAhNtRrq/Vlz++aehp3/Mnsfs0raUVEzOltXK1vzpoGlLcDbAYuKZ9A0nxgPsA555zTr5V0dHb1CPfxY07iiS/9IePHnMTty9b1aNL50Y2X8GZbO5+9/9cATJ84hrEnj2LyuNHMPmcCP3pmI5eedwZvHepkz1uH+G3L/m5Hk5e/6+289x0Tuer3zuTM8aewZM02Fj65nmsvmsaOvQe58/HfAnDB2eMZfVIjo0c18Kt1Ow/P//7zzmDs6EZ++dIOBsvsc05n5WtH9sH7Zkzgtda2bsEL8C/eeQbTTh/DC1t2M6pRvLhlD+99xwTOHF+EeOv+dl7euvdwc9e/PH8Sp51yEl0RdHbBT1Zu5vJ3TWHi2JNYv3M/zTv2cf6UcTy7vpWTRzVwyXkTaZRobBBrt+9l5Wu7uOic05lxxtjDgXagvZNfvrSdyeNGM3fWFBokGlScsL7v2df4wO+cQWdXMOW0U+joDDa92caGnfuZM2Mip44elUK72J5DnV2cclIj7542HijOQzRItLV30tgAs8467XCglr+RS+FW+iBobFARehz5cGhIyVcqK/+Q2H+wg/bOLia87eRu+/dtoxtZu20fv3vmaUhpnXGki+/ydUZah8rW0dhQPG9I+/DAoaH9tlK+TUr/h9KHTqleh/dDxT4ozSOOfGhWW3ZvzwdS51o4Wt0Hui2V8884Y+wAllZdrY/0PwZcGRH/Jj3/M+CSiLi5t+n7e6RvZpazox3p1/pE7hZgetnzs1OZmZnVQK1DfzkwU9K5kk4GrgcW1bgOZmbZqmmbfkR0SLoZWAI0AgsjYk0t62BmlrOa97IZEYuBxbVer5mZZXZHrplZ7hz6ZmYZceibmWXEoW9mlpGa3px1vCS1ABsHsIhJwM4+p8qL90lP3ic9eZ/0NJz2yTsiYnJvI07o0B8oSU3V7krLlfdJT94nPXmf9DRS9ombd8zMMuLQNzPLyEgP/bvqXYETkPdJT94nPXmf9DQi9smIbtM3M7PuRvqRvpmZlXHom5llZESGfj1/fL0eJG2Q9IKkVZKaUtlESUslrUuPE1K5JN2e9s1qSbPLljMvTb9O0rx6bU9/SFooaYekF8vKBm0fSHpv2sfNad7a/hZgP1TZJ7dK2pJeK6skXV027stp+16RdEVZea/vp9RF+rOp/MHUXfoJTdJ0SY9J+o2kNZL+MpXn81qJiBH1R9Fl82+B84CTgeeBWfWu1xBv8wZgUkXZfwMWpOEFwH9Nw1cDv6D4ZbZLgWdT+UTg1fQ4IQ1PqPe2Hcc++ANgNvDiUOwD4Lk0rdK8V9V7m/u5T24FvtDLtLPSe2U0cG56DzUe7f0EPARcn4a/D3ym3tt8DPtkKjA7DY8D1qZtz+a1MhKP9C8GmiPi1YhoBx4ArqlznerhGuCeNHwPcG1Z+b1ReAY4XdJU4ApgaUS0RsSbwFLgyhrXud8i4gmgtaJ4UPZBGndaRDwTxbv63rJlnbCq7JNqrgEeiIiDEbEeaKZ4L/X6fkpHr/8K+HGav3z/nrAiYmtErEzDe4GXKH67O5vXykgM/d5+fH1anepSKwE8KmlF+mF5gCkRsTUNbwOmpOFq+2ck7rfB2gfT0nBl+XB1c2qqWFhqxuD498kZwK6I6KgoHzYkzQAuAp4lo9fKSAz9HH0wImYDVwE3SfqD8pHpiCPra3O9Dw67E3gncCGwFfibutamTiSdCvwE+FxE7CkfN9JfKyMx9LP78fWI2JIedwA/o/hKvj191SQ97kiTV9s/I3G/DdY+2JKGK8uHnYjYHhGdEdEF/D3FawWOf5+8QdHUMaqi/IQn6SSKwL8vIn6airN5rYzE0M/qx9cljZU0rjQMzAVepNjm0hUF84Cfp+FFwA3pqoRLgd3pa+0SYK6kCekr/9xUNpwNyj5I4/ZIujS1Zd9QtqxhpRRsyUcpXitQ7JPrJY2WdC4wk+KEZK/vp3Q0/BjwsTR/+f49YaX/393ASxFxW9mofF4r9T6TPBR/FGfc11JcdfCVetdniLf1PIorKp4H1pS2l6LNdRmwDvglMDGVC7gj7ZsXgDlly/pzihN4zcCn671tx7kf7qdorjhE0Y5642DuA2AORUD+Fvge6W72E/mvyj75n2mbV1ME2tSy6b+Stu8Vyq44qfZ+Sq+959K+ehgYXe9tPoZ98kGKppvVwKr0d3VOrxV3w2BmlpGR2LxjZmZVOPTNzDLi0Dczy4hD38wsIw59M7OMOPRtWJDUWdYz5Kp0C/2IIOkiSXen4U9J+l7F+MclVf1BbkkPSJo51PW0kWFU35OYnRAORMSFvY1IN8EoirtMh6O/Av7zAOa/E/gS8G8Hpzo2kvlI34YlSTNSH+/3UtwIM13SFyUtT52JfbVs2q9IWivpSUn3S/pCKj98BC1pkqQNabhR0rfKlvUXqfyyNM+PJb0s6b5SX+mS3ifp/0l6XtJzksZJekLShWX1eFLSBRXbMQ54T0Q8fwzb/JGybzqvSFqfRv0KuLysSwSzqvwiseFijKRVaXg98HmKrgLmRcQzkuam5xdT3EW5KHU8t5+i64ALKV7vK4EVfazrRorb7d8naTTwlKRH07iLgHcDrwNPAR+Q9BzwIPCJiFgu6TTgAMXt/p8CPifpfOCUXsK9dPdmuU9I+mDZ898BiIhFpC5FJD0E/N9U3iWpGbjgGLbNMufQt+GiW/NOatPfGEUf51D0fTIX+HV6firFh8A44GcR0ZbmO5Z+mOYC75FU6ldmfFpWO/BcRGxOy1oFzAB2A1sjYjlApF4bJT0M/CdJX6S4Zf+HvaxrKtBSUfZgRNxctq2Pl4+U9CWK/XFHWfEO4Cwc+tYHh74NZ/vLhgV8IyL+rnwCSZ87yvwdHGniPKViWZ+NiG4dzkm6DDhYVtTJUd5DEdEmaSnFD3FcB7y3l8kOVKz7qCRdDnyc4lexyp2SlmV2VG7Tt5FiCfDnKvpJR9I0SW8HngCulTQmtZ//cdk8GzgSxB+rWNZnVHTBi6TzVfRgWs0rwFRJ70vTjytrX/8BcDuwPIpfWKr0Eqn5pi+S3kHR+dfHI6Iy4M+nZzORWQ8+0rcRISIelfQu4Ol0bnUf8KcRsVLSgxS9kO6g6Cq45NvAQyp+beyRsvIfUDTbrEwnals4yk/eRUS7pE8A35U0huKI+3JgX0SskLQH+Icq874sabykcVH8fN/RfIqiN8j/lbbx9Yi4WtIUiuaebX3Mb+ZeNi0vkm6lCONv12h9ZwGPA79b7ZJSSZ8H9kbED/q5js8DeyLi7n5X1LLh5h2zISLpBorfX/1KH/cQ3En3cwXHaxdHftTb7Kh8pG9mlhEf6ZuZZcShb2aWEYe+mVlGHPpmZhlx6JuZZeT/A+zGkrwaNZCsAAAAAElFTkSuQmCC\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "spectrum = segment.make_spectrum()\n", + "plt.xlabel('Frequency (Hz)')\n", + "spectrum.plot()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "The frequency components above 10 kHz are small. We can see the lower frequencies more clearly by providing an upper bound:" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 31, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "spectrum.plot(high=10000)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "Spectrum provides low_pass, which applies a low pass filter; that is, it attenuates all frequency components above a cutoff frequency." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 32, + "outputs": [], + "source": [ + "spectrum.low_pass(3000)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 33, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.xlabel('Frequency (Hz)')\n", + "spectrum.plot(high=10000)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { From c08eaaf6c9eec6f5596e891c313c19623189870c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 19:54:03 +0800 Subject: [PATCH 0718/2002] Committed 2022/04/05 --- .../{stop_band.ipynb => low_pass_filter.ipynb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/{stop_band.ipynb => low_pass_filter.ipynb} (100%) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/low_pass_filter.ipynb similarity index 100% rename from Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb rename to Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/low_pass_filter.ipynb From 69dde89f7f6bdc903e04ee9d1e6539f7ee9dc1b0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 19:54:44 +0800 Subject: [PATCH 0719/2002] Committed 2022/04/05 --- .../stop_band.ipynb | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb new file mode 100644 index 00000000..3bbeb103 --- /dev/null +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from thinkdsp import read_wave, play_wave\n", + "\n", + "wave = read_wave('92002__jcveliz__violin-origional.wav')\n", + "\n", + "segment = wave.segment(start=1.2, duration=0.6)\n", + "\n", + "segment.plot()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 6c7564ec3513c2ab7f1ac0f8c3c88eb301a9b9ba Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 20:03:25 +0800 Subject: [PATCH 0720/2002] Committed 2022/04/05 --- .../stop_band.ipynb | 124 +++++++++++++++++- 1 file changed, 122 insertions(+), 2 deletions(-) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb index 3bbeb103..b28b7afd 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb @@ -2,13 +2,25 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": { "collapsed": true }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "from thinkdsp import read_wave, play_wave\n", + "import matplotlib.pyplot as plt\n", "\n", "wave = read_wave('92002__jcveliz__violin-origional.wav')\n", "\n", @@ -16,6 +28,114 @@ "\n", "segment.plot()" ] + }, + { + "cell_type": "code", + "execution_count": 39, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.xlabel('Time (s)')\n", + "segment.plot()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 40, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "spectrum = segment.make_spectrum()\n", + "plt.xlabel('Frequency (Hz)')\n", + "spectrum.plot()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 41, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEGCAYAAACJnEVTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAfo0lEQVR4nO3de5xcZZ3n8c+vqjude9K5EEIS6IARBZWLEYMys3HRgOgMzKwX3FGCo5sZR1111RnQZXB0Z2VXx51lRYQRFH0pN0XJIjOQycgiICEJhBAIMQ3kSi6dpNPppLvT3VW//eM81alu+lLVVV23832/XvXqU885p85z6iTf85znXMrcHRERiYdEuSsgIiKlo9AXEYkRhb6ISIwo9EVEYkShLyISI3XlrsBwZs2a5U1NTeWuhohIVVm/fv0Bd5892LiKDv2mpibWrVtX7mqIiFQVM9s+1Dh174iIxIhCX0QkRhT6IiIxotAXEYkRhb6ISIwo9EVEYkShLyISIwr9LM/tauPZnYfLXQ0RkTFT0TdnldofffcxALbd8L4y10REZGyopS8iEiMjhr6ZLTCz35jZC2b2vJl9LpTPMLNVZrY1/G0M5WZmN5pZs5ltNLPzsz5reZh+q5ktH7vVEhGRweTS0u8FvujuZwFLgE+b2VnANcBqd18ErA7vAd4LLAqvFcDNEO0kgOuBtwMXANdndhQiIlIaI4a+u+9x96fDcDuwGZgHXA7cESa7A7giDF8O/NgjTwLTzWwucAmwyt0PuXsrsAq4tJgrIyIiw8urT9/MmoDzgDXAHHffE0btBeaE4XnAzqzZdoWyocoHLmOFma0zs3UtLS35VE9EREaQc+ib2WTgF8Dn3f1I9jh3d8CLUSF3v9XdF7v74tmzB30ctIiIjFJOoW9m9USB/1N3vy8U7wvdNoS/+0P5bmBB1uzzQ9lQ5SIiUiK5XL1jwG3AZnf/TtaolUDmCpzlwP1Z5VeFq3iWAG2hG+ghYJmZNYYTuMtCmYiIlEguN2e9E/gY8JyZbQhlXwFuAO4xs08A24EPhXEPApcBzUAH8HEAdz9kZt8A1obpvu7uh4qxEiIikpsRQ9/dHwNsiNEXDzK9A58e4rNuB27Pp4IiIlI8uiNXRCRGFPoiIjGi0BcRiRGFvohIjCj0RURiRKEvIhIjCn0RkRhR6IuIxIhCX0QkRhT6IiIxotAXEYkRhb6ISIwo9EVEYkShLyISIwp9EZEYUeiLiMSIQl9EJEYU+iIiMaLQFxGJEYW+iEiMKPRFRGJEoS8iEiMKfRGRGFHoi4jEiEJfRCRGFPoiIjGi0BcRiRGFvohIjCj0RURiRKEvIhIjCn0RkRhR6IuIxIhCX0QkRhT6IiIxotAXEYkRhb6ISIwo9EVEYkShLyISIwp9EZEYGTH0zex2M9tvZpuyyr5mZrvNbEN4XZY17lozazazLWZ2SVb5paGs2cyuKf6qiIjISHJp6f8IuHSQ8v/l7ueG14MAZnYWcCVwdpjne2aWNLMkcBPwXuAs4CNhWhERKaERQ9/dHwUO5fh5lwN3uftxd38FaAYuCK9md3/Z3buBu8K0VW9XawfffHAz6bSXuyoiIiMqpE//M2a2MXT/NIayecDOrGl2hbKhyl/DzFaY2TozW9fS0lJA9UrjP9/5DLc8+jKbXm0rd1VEREY02tC/GTgDOBfYA/xDsSrk7re6+2J3Xzx79uxifeyY6Q0tfDX0RaQa1I1mJnfflxk2s38CHghvdwMLsiadH8oYpryqWfjrrtQXkco3qpa+mc3NevsnQObKnpXAlWbWYGYLgUXAU8BaYJGZLTSzcUQne1eOvtoVxGzkaUREKsSILX0zuxNYCswys13A9cBSMzsXcGAb8BcA7v68md0DvAD0Ap9291T4nM8ADwFJ4HZ3f77YK1NOaueLSDUYMfTd/SODFN82zPR/D/z9IOUPAg/mVbsqcKJ7p6zVEBHJie7IFRGJEYW+iEiMKPQLdOI8rvp3RKTyKfQLpD59EakmCv0CmS7ZFJEqotAvEjX0RaQaKPQLpO4dEakmCn0RkRhR6IuIxIhCv0CZ87h64JqIVAOFfoEMXb0jItVDoV8kaueLSDVQ6Beqr3unvNUQEcmFQr9A6twRkWqi0C+QGvgiUk0U+kWipzGISDVQ6BeJ+vRFpBoo9AukBr6IVBOFvohIjCj0RURiRKEvIhIjCn0RkRhR6IuIxIhCX0QkRhT6IiIxotAvEtcDGUSkCij0C6THL4hINVHoi4jEiEK/QHrmjohUE4V+kehnE0WkGij0i0QnckWkGij0C6QTuSJSTRT6IiIxotAXEYkRhb6ISIwo9EVEYkShLyISIwp9EZEYUeiLiMTIiKFvZreb2X4z25RVNsPMVpnZ1vC3MZSbmd1oZs1mttHMzs+aZ3mYfquZLR+b1SmjCr03q6snxZ1P7cD1vAgRIbeW/o+ASweUXQOsdvdFwOrwHuC9wKLwWgHcDNFOArgeeDtwAXB9ZkdR7Sr98QvfWfV7rr3vOR56fm+5qyIiFWDE0Hf3R4FDA4ovB+4Iw3cAV2SV/9gjTwLTzWwucAmwyt0PuXsrsIrX7khkDBw4ehyA9q7eMtdERCrBaPv057j7njC8F5gThucBO7Om2xXKhiqvepX+zJ1KPxIRkdIq+ESuR53FRUs+M1thZuvMbF1LS0uxPnbsKVtFpAqMNvT3hW4bwt/9oXw3sCBruvmhbKjy13D3W919sbsvnj179iirVwaV3eCv9OqJSImMNvRXApkrcJYD92eVXxWu4lkCtIVuoIeAZWbWGE7gLgtlVU/dJyJSTepGmsDM7gSWArPMbBfRVTg3APeY2SeA7cCHwuQPApcBzUAH8HEAdz9kZt8A1obpvu7uA08Oyxjoe/SzmvoiQg6h7+4fGWLUxYNM68Cnh/ic24Hb86qdiIgUle7ILRI1pEWkGij0a9yJ3h3tlkREoV80Op0rItVAoS8iEiMK/RqXuXpHz1sTEVDoF02lZqruIxCRbAr9ApkyVUSqiEJfRCRGFPoFqpa+8iqppoiMMYV+jdOJXBHJptAvkPr0RaSaKPRFRGJEoV/j+rp31KsvIij0RURiRaFfJDpRKiLVQKFf83SmWUROUOgXSaVfxaMjEREBhb6ISKwo9ItELWkRqQYK/QJVerdOpddPREpLoS8iEiMKfRGRGFHoF6ha+vKrpJoiMsYU+jVOXfoikk2hXyCdKBWRaqLQFxGJEYV+XFTLyQcRGVMK/SKp1EcXq/tJRLIp9AtkOlUqIlVEoV+gSm3hD1QdtRSRsabQL5JKbfFXar1EpDwU+iIiMaLQL5Jq6eYRkXhT6BeoWrpPdMWmiIBCX0QkVhT6IiIxotAvkkrtPtHNWSKSTaFfoMwJ3EoPV6/UvZKIlJRCv0iq5YSuiMSbQr9AakCLSDUpKPTNbJuZPWdmG8xsXSibYWarzGxr+NsYys3MbjSzZjPbaGbnF2MFyi0T+pXavZOplvZNIgLFaem/y93PdffF4f01wGp3XwSsDu8B3gssCq8VwM1FWLaMwCp1byQiZTEW3TuXA3eE4TuAK7LKf+yRJ4HpZjZ3DJYvIiJDKDT0HXjYzNab2YpQNsfd94ThvcCcMDwP2Jk1765Q1o+ZrTCzdWa2rqWlpcDqlY7a0yJSDeoKnP8id99tZicBq8zsxeyR7u5mlld3srvfCtwKsHjx4orviq6WZ+7ohLOIQIEtfXffHf7uB34JXADsy3TbhL/7w+S7gQVZs88PZbVBTX0RqQKjDn0zm2RmUzLDwDJgE7ASWB4mWw7cH4ZXAleFq3iWAG1Z3UAiIlIChXTvzAF+Ga4OqQN+5u7/YmZrgXvM7BPAduBDYfoHgcuAZqAD+HgBy64Y6jYRkWoy6tB395eBcwYpPwhcPEi5A58e7fIqVSbzK/2OXO2bRAR0R27R6HJ4EakGCn0RkRhR6BeqhP0ma7cd4tcb8zv3rSMQEclW6HX6EpQiWz/4/d8B8L63vK8ESxORWqSWfoGq5eYsERFQ6BdNpT/YTD+iIiKg0K95lX4pqYiUlkK/QGpAi0g1UegXqO/mLDWoRaQKKPTL5PbHXmFXa8eYL6dWd0aX/uOjfPneZ8tdDZGqo9Avkny6efa3d/H1B17g6h+uHbsK1bgX97Zz7/pd5a6GSNVR6BdoNFfFpNPR3/auniLXRkRkeAr9MijHtf2VesK5raOHT96xjoNHj5e7KiKxoNAvUIVmaZ9K79L/6VPb+dfN+7j1ty+XuyoisaDQL5J8unl07fwJma8tUatnnEUqjEK/DPTohtdS5IuUhkK/QJXaVz5Qpe5oMkdIauiLlIZCv4xK0c1T6WGaDvsidXmJlIZCv0CFtJ8rtfVdSpkjpUrfOYnUCoV+kVR6fFdqN1Rmx1fpTykVqRUK/TJSl0Z2946IlIJCv1CV2oQOKr4FrRO5IiWl0C9QZUd+5et7SmmFtvXdnV+s30Vnd6rcVREpCoV+kVR4g78kO6edhzp4vPlAXvNU+onc3718kC/e+yxff+CFcldFpCj0w+g1rpRZuvTbj5BKO9tuyP2H2zMnchMVGvpHu3oBaGnvKnNNRIpDLf0CjaaFX+lHBaOVSo/iiaN9Lf0KTX2RGqPQl7Kq9B2gdkZSaxT6BaqWG6wqNVxPXKdf5oqMoFK/P5F8KfQLlPlBlHzCPx0SJFmCjuz2471jvoyCVPhTNjO1UuZLrVDoF2g0YVDKVuPP1uwo3cJGIbMDrMzIr/wjEJF8KfQLNJqfS8zMMpp5R6urJ7/rzJv3t5fk5xwr/ZJNkVqj0C9QpqWaT36nwsSjuNhl1NJ57mDe/Z1H+egP1oxRbU6o9JuzRGqNQr9A2w50AHDX2p05z9O3oyhhT3G+oQ/w7K62MahJf6Vs6e8+3Mn9G3aPat5SHpWJjCWFfoEWNzUCsHDmxJzn8VEcHRQqlc5n2tJVbDRP2cy3qyrjP3zvCT5314a81i9TLUW+1AqFfoGeeOkgANMmjst5nkzmVGr3Tk8+e4jBlpXHivW19PP4/KOjvCJp75HortredO7rp24nqTUK/UGM5lA+lUeQnAjg0qV+Pt0nvQXujVKj+P7yqV+hRyK9qdGffM/VoWPdtB7rzns5+Uqnnb+9fxNb97WP+bKkNij0B/HKgWN5z9Pdm3voZ0KrlN07h47mHkC9hbb081ix0Vyymc93PZhCd2q5OP8bqzjvG6vGfDnbD3Xw499tZ8VP1o/5sqQ2KPSD7Nb9ka78uw9ufuSlPJYV/ua9lPxNGR89Uy/TtZGLI52F3dCVx0HPidDPo6l/vLewxxzns1OrljuuS3keRqqbQj/YdrCjb/jg0eM5zZO9oziWx/PWM/9B82kRZy8rn+6n46FVPL8x9xPNhzujo4LR3jCcT/dOT280bWceJ2e7ekrX0v/5+l0AvHq4s6BljpV8uhWzfW3l81x738Yi10aqQclD38wuNbMtZtZsZteUevlDueOJbX3DG3Yezmmelc++OqplHeuOWtINdbl//fvbT+yIct3BHO7o7usK2bznSM7LygTcpIbRPXn7eB4BntnB3PDPL+Y8T3eB3U/5hP6Dz+0FYOqE+oKWmYu/+flGmq75dV7dVy/sifryD3fkd/7gR09s486ncr/MGKCzO5Xz/41sT+9o5VgJHgeSTjtP5Pl7DgB3r93BMztax6BGlamkz9M3syRwE/AeYBew1sxWunvRf6Gio7uXbQc62Heki52tHYyvT/LcrjYuWDiDju5emvcf5Z9++wonTWlg8vg6Xm45xqzJDSyYMYE7n9rBC68e4S+XnsGpMyYye3IDhzt7mD6hHgdaO7p5bOsBPn/3hn7LbLrm1wB89z+ex3mnNtKbStM4aRxTx/cPjD2Ho66Wg0e72dvWxfSJ0fjx9clB1+V4b4q3//fVfe/fdP1DbLvhfbg7ZkZPKo0BdckEPak0Rzp7eGRLC1+891kAzj5lKht2HuZrK5/nDxbNYs7U8XT2pDjek+aNc6eQTBjj6hIc7erl4Rf28V9/tQmA9q5e2jp7mDZE4KXTTldvioa6ZL+7d7/3yEtc9/6zBp0nU+fMFT4dWTuwL9y9gW/+6Zvp6ok+s6EuQdqdumS0c+zqSXG4o4fbfvtKv+/8Q4vns/wdTbzh5KlAdISSWUYiYbg7u7Na6n/5k/V8aukZXPbmubg7aT9xTiExxOHN9oO5n+fZl0dXWkYq7dy9Lgrhp3e0suT0mTnNd9tj0XeRT5fknrbRHbVccdPjbNnXzpqvXMycqeNHnN7deWDjHj575zO8ed40/u9nL8p5WZt2t7GrtYNL3zQ353k+eMvvWL+9lR9+/G2868yTcpqnN5Xmb37xHEBevwNxuKObA0e7ed1Jk3OeB6Cto4dpE8e+ATEcK+VNJ2Z2IfA1d78kvL8WwN2/Odj0ixcv9nXr1uW9nD1tnVz+3cf7tY5Hct6p07nlo2+ltaOHj922Jq953/m6mTzefHDI8dMm1JN2Z0J9krqE8Wrb4KEwLpnAceqTCXpTnlOLNmEjX/r59HXv4eJ/eITWjtE9VmHBjAmkwhUvB49193UZDWfO1AaSZvSmnWQiuvCxtaMnr26cjPqk0TOKK25GY/aUBhIG+44Mvv2nTainoS5BXcLYe6SLxonjSCSiHW9vyulJpft9PzMnjaO9q5fZUxqoSxppd1KpzM4o6uJLu9NxPNXv4Xjzpk/ALNoZ7GnrYs7UBg53RDvg+mSCZMLYcaijX90aJ9YzcVwdiQSkUk5rRw/TJ9bT3ZvGLNr59aTS/XYQ8xsnkDAjlXbcnZQ7qXT06k076fC3N5Rl168+aRzvTVOXjHaU6TR9O9G0O8eO9/Y7Kj1tmHtZEqF+KXfSafp20qdMG09DfbKvK7SzO0VD/Ykj5BOPNKHfjn3BjAm4R+Vm0cMNe1PROjTUJ/r+be5v7+rrLlw4a1Lf/Jntkvlu+uqI09PrfefI5jdOoD7Z/4j9Nc0GixpIO1s7SaWd8fUJ5k6bMPw8wBvnTuWmPzt/yO9sOGa23t0XDzau1L+cNQ/IPqbcBbw9ewIzWwGsADj11FNHtZCp4+tZeuZsxtcn+dmaHVy0aBbPv3qElvbjXHL2HBY0TmTCuCTnnTqds0+ZxklTGvpOJJ40dTz/9qWl3PSb5r6Ts396/jz+ZdNe3nHGTE6eNp60Ry2Rc+ZP56/edUbfBtx+8Bj/7luPcM78aZxx0mTue3o3b5w7lbc1NdKTcnpTadIOs6aM45z505k9pYHNe46wu7WTg8e6mTl5HKkQHOnwj3XbwQ427W7jwtNn8qVLzuTOp3Zw66Mv963rVRc28VjzAbYfPMbHljQxdUIdL+5pZ9qEev7k/Hl9LcZn/nYZrce6eeXgMVraj7Nh52HWvHyQS84+mf3tx+noTnHazInsbeuiN51m7rQJfOuhLSw+rTEKhoSBR+cI6pNGc8tRth3ooC5pXP2OJiaOS7J5Tzu/fCa64/WtpzUyob6O+qT17bwmjavjJ09uB+ANJ0/hWHcvOw91ct37z+Ibw/wc4RXnzuPe0Lc+c9I4Dh7r5g8WzeK3W/M/lM92wcIZPL29tV93z0Wvm8W4ZILVL+7jwNFuLnrdLCaOS/LwC/uYNbmBy958Mp3dKVLurN12iKaZk5jfOJH6pFGXSFBfZxw8GnWrHe7s4aQpDTyzo5VJDXUsnDUJ48QTRRMJI2HR+7qkcebJU7nuV5uif2dTx+PQF8AN9Qme2XGY02ZOZMakcaTTzlvmT+OM2ZOZNaWB6361iTNPnsIp4d9ib9rZtLuNN82b1tdNl8mmTODVJYy2zp6+RsO4sDNLJCz6a9HfZHit3ryfLfva+YNFszhpynh6Umka6hJ931/CTqyPGdQljfmNE3n4+b0cPd7LWXOn9vv++y5c9mjYiMLZDH69cQ/He9O8tWlGXyCaQX0yQSrt/UMyvHmp5RiHjh3nzDlTmdyQxMz6dibZjY9U2DElDMbXJZnYkKSrJ8XR46nsjyOZiHbSybC90uEotT5pNO8/Sk/KaQrbdOA6ZcvsPC5aNIu71+5kyekzmRKO/i3MkzkCztaUxw2f+Sh1S/8DwKXu/snw/mPA2939M4NNP9qWvohInA3X0i/1idzdwIKs9/NDmYiIlECpQ38tsMjMFprZOOBKYGWJ6yAiElsl7dN3914z+wzwEJAEbnf350tZBxGROCv1iVzc/UHgwVIvV0REdEeuiEisKPRFRGJEoS8iEiMKfRGRGCnpzVn5MrMWYHsBHzELKOy2zeoTt3WO2/qC1jkuClnn09x99mAjKjr0C2Vm64a6K61WxW2d47a+oHWOi7FaZ3XviIjEiEJfRCRGaj30by13Bcogbusct/UFrXNcjMk613SfvoiI9FfrLX0REcmi0BcRiZGaDP1K/fH10TCzBWb2GzN7wcyeN7PPhfIZZrbKzLaGv42h3MzsxrDuG83s/KzPWh6m32pmy8u1Trkws6SZPWNmD4T3C81sTVivu8OjuTGzhvC+OYxvyvqMa0P5FjO7pEyrkjMzm25mPzezF81ss5ldWMvb2cy+EP5NbzKzO81sfC1uZzO73cz2m9mmrLKibVcze6uZPRfmudEG/gTXQO5eUy+iRza/BJwOjAOeBc4qd70KWJ+5wPlheArwe+As4H8C14Tya4D/EYYvA/6Z6JfYlgBrQvkM4OXwtzEMN5Z7/YZZ7/8C/Ax4ILy/B7gyDH8f+FQY/ivg+2H4SuDuMHxW2PYNwMLwbyJZ7vUaYZ3vAD4ZhscB02t1OxP9dOorwISs7Xt1LW5n4A+B84FNWWVF267AU2FaC/O+d9j6lPsLGYMv+ELgoaz31wLXlrteRVy/+4H3AFuAuaFsLrAlDN8CfCRr+i1h/EeAW7LK+01XSS+iX1RbDfx74IHwj/kAUDdwGxP9NsOFYbguTGcDt3v2dJX4AqaFELQB5TW5nTnxe9kzwnZ7ALikVrcz0DQg9IuyXcO4F7PK+0032KsWu3cG+/H1eWWqS1GFQ9rzgDXAHHffE0btBeaE4aHWv5q+l38E/hpIh/czgcPu3hveZ9e9b73C+LYwfTWtL0St1Bbgh6Fb6wdmNoka3c7uvhv4NrAD2EO03dZT+9s5o1jbdV4YHlg+pFoM/ZpkZpOBXwCfd/cj2eM82sXXxLW3ZvZ+YL+7ry93XUqsjqgL4GZ3Pw84RnTY36fGtnMjcDnRzu4UYBJwaVkrVSal3q61GPo19+PrZlZPFPg/dff7QvE+M5sbxs8F9ofyoda/Wr6XdwJ/bGbbgLuIunj+NzDdzDK/9JZd9771CuOnAQepnvXN2AXscvc14f3PiXYCtbqd3w284u4t7t4D3Ee07Wt9O2cUa7vuDsMDy4dUi6FfUz++Hs7E3wZsdvfvZI1aCWTO4C8n6uvPlF8VrgJYArSFw8iHgGVm1hhaWctCWUVx92vdfb67NxFtu39z9z8DfgN8IEw2cH0z38MHwvQeyq8MV30sBBYRnfCqSO6+F9hpZmeGoouBF6jR7UzUrbPEzCaGf+OZ9a3p7ZylKNs1jDtiZkvC93hV1mcNrtwnOMbopMllRFe5vAR8tdz1KXBdLiI69NsIbAivy4j6M1cDW4F/BWaE6Q24Kaz7c8DirM/6c6A5vD5e7nXLYd2XcuLqndOJ/jM3A/cCDaF8fHjfHMafnjX/V8P3sIURrmiohBdwLrAubOtfEV2lUbPbGfg74EVgE/AToitwam47A3cSnbfoITqi+0QxtyuwOHyHLwHfZcDFAANfegyDiEiM1GL3joiIDEGhLyISIwp9EZEYUeiLiMSIQl9EJEYU+lIVzCxlZhuyXk3lrlOxmNl5ZnZbGL7azL47YPwjZjbkD2Sb2V1mtmis6ym1oW7kSUQqQqe7nzvYiHBTirl7erDxVeArwH8rYP6biZ5V9J+KUx2pZWrpS1Uys6bw/PQfE92YssDMvmxma8NzyP8ua9qvmtnvzeyx8Nz2L4Xyvha0mc0Kj37IPMv/W1mf9RehfGmYJ/PM+59mnl1uZm8zsyfM7Fkze8rMppjZo2Z2blY9HjOzcwasxxTgLe7+bA7r/MdZRzpbzOyVMOq3wLuzHl8gMiT9I5FqMcHMNoThV4AvEN1yv9zdnzSzZeH9BUR3Na40sz8kenDZlUR3u9YBTxM9zXE4nyC6/f1tZtYAPG5mD4dx5wFnA68CjwPvNLOngLuBD7v7WjObCnQSPT7jauDzZvZ6YPwg4Z65mzLbh83soqz3rwNw95WER4qY2T3A/wvlaTNrBs7JYd0k5hT6Ui36de+EPv3t7v5kKFoWXs+E95OJdgJTgF+6e0eYL5fnMC0D3mJmmWfATAuf1Q085e67wmdtIHpOehuwx93XAnh4CqqZ3QtcZ2ZfJrqF/keDLGsu0SOVs93t7p/JWtdHskea2V8TfR83ZRXvJ3papUJfhqXQl2p2LGvYgG+6+y3ZE5jZ54eZv5cTXZzjB3zWZ92934PKzGwpcDyrKMUw/4fcvcPMVhE9QvhDwFsHmaxzwLKHZWbvBj5I9GtM2caHzxIZlvr0pVY8BPy5Rb87gJnNM7OTgEeBK8xsQug//6OsebZxIog/MOCzPmXRI60xs9db9IMmQ9kCzDWzt4Xpp2T1r/8AuBFY6+6tg8y7mdB9MxIzO43oYVwfdPeBAf96XttNJPIaaulLTXD3h83sjcDvwrnVo8BH3f1pM7ub6HdU9xM9ejvj28A9ZrYC+HVW+Q+Ium2eDidqW4Arhll2t5l9GPg/ZjaBqMX9buCou683syPAD4eY90Uzm2ZmU9y9fYTVvJro6Yy/Cuv4qrtfZmZziLp79o4wv4iesinxYmZfIwrjb5doeacAjwBvGOqSUjP7AtDu7j8Y5TK+ABxx99tGXVGJDXXviIwRM7uK6PeMvzrCPQQ30/9cQb4OA3cUML/EiFr6IiIxopa+iEiMKPRFRGJEoS8iEiMKfRGRGFHoi4jEyP8H4RLWVguWbVgAAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.xlabel('Frequency (Hz)')\n", + "spectrum.plot(high=10000)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "spectrum.band_stop(low_cutoff=2000, high_cutoff=4000, factor=0)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "plt.xlabel('Frequency (Hz)')\n", + "spectrum.plot(high=10000)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { From ee7ad8f84561cc1bc8f483a22c202a14619c1b24 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 20:04:15 +0800 Subject: [PATCH 0721/2002] Committed 2022/04/05 --- .../stop_band.ipynb | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb index b28b7afd..253cd0ad 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 38, + "execution_count": 42, "metadata": { "collapsed": true }, @@ -31,7 +31,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 43, "outputs": [ { "data": { @@ -57,7 +57,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 44, "outputs": [ { "data": { @@ -84,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 45, "outputs": [ { "data": { @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "outputs": [], "source": [ "spectrum.band_stop(low_cutoff=2000, high_cutoff=4000, factor=0)" @@ -124,8 +124,19 @@ }, { "cell_type": "code", - "execution_count": null, - "outputs": [], + "execution_count": 47, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "plt.xlabel('Frequency (Hz)')\n", "spectrum.plot(high=10000)" From edac3b02bb8f7ab79ed08241a81e108307fa837c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 22:03:32 +0800 Subject: [PATCH 0722/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/March2022.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py new file mode 100644 index 00000000..e69de29b From 71b97c2b9e154d11517014d6d77b3bb58233c2cd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 22:08:52 +0800 Subject: [PATCH 0723/2002] Committed 2022/04/05 --- .../March2022.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py index e69de29b..adb6d8bd 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py @@ -0,0 +1,26 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [109262, 63982, 46161, 61036, 28391, 35120] + +label = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2022/03 the number of job openings in Taiwan by region") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20220130184455/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() From d0f300ad152d2a3ad0f5d980775c36290cc8c8d6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 22:10:41 +0800 Subject: [PATCH 0724/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/March2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py index adb6d8bd..dc3e3b10 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py @@ -21,6 +21,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20220130184455/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(20000, 90000) +plt.ylim(20000, 100000) plt.show() From 465e95030a2442229002f61108977b10d86e6c4b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:04:12 +0800 Subject: [PATCH 0725/2002] Committed 2022/04/05 --- .../March2022_ZH.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py new file mode 100644 index 00000000..6222de7f --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py @@ -0,0 +1,34 @@ +import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + +font = {'family': 'MS Gothic', + 'color': 'darkred', + 'weight': 'normal', + 'size': 16, + } + +region_num = [1, 2, 3, 4, 5, 6, 7] +position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] + +label = ["啣", "啣", "獢", "啁姘", "唬葉", "啣", "擃"] + +fig, ax = plt.subplots(figsize=(8, 7)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2021/11 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region", fontproperties="MS Gothic") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(20000, 90000) + +plt.show() From 0b93ec78640fcb99da5df59e5cd39f23d5627372 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:05:01 +0800 Subject: [PATCH 0726/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/March2022_ZH.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py index 6222de7f..1c3ebc80 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py @@ -24,10 +24,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2021/11 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region", fontproperties="MS Gothic") +plt.title("2022/03 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region", fontproperties="MS Gothic") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20211128163303/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20220130184455/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(20000, 90000) From b3bb3428dbed9a57ea619014bc09ec74c2b9690d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:11:02 +0800 Subject: [PATCH 0727/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/March2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py index dc3e3b10..4970d27a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022.py @@ -19,7 +19,7 @@ plt.title("2022/03 the number of job openings in Taiwan by region") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20220130184455/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20220327070711/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(20000, 100000) From 96451926dc9130e1b42a01f10f26f36e8303348f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:14:13 +0800 Subject: [PATCH 0728/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/March2022_ZH.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py index 1c3ebc80..60022316 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py @@ -27,7 +27,7 @@ plt.title("2022/03 啁啣瑞撩貊絞閮\nthe number of job openings in Taiwan by region", fontproperties="MS Gothic") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20220130184455/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20220327070711/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(20000, 90000) From 2d183fb92489953a7340705ea493fc8946c78f4b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:16:14 +0800 Subject: [PATCH 0729/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/March2022_ZH.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py index 60022316..3c590de1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py @@ -8,8 +8,8 @@ 'size': 16, } -region_num = [1, 2, 3, 4, 5, 6, 7] -position_vacancies = [92415, 53496, 39357, 31572, 51570, 23956, 29969] +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [109262, 63982, 46161, 61036, 28391, 35120] label = ["啣", "啣", "獢", "啁姘", "唬葉", "啣", "擃"] @@ -29,6 +29,6 @@ # plt.ylabel("") plt.xlabel("Reference: https://web.archive.org/web/20220327070711/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(20000, 90000) +plt.ylim(20000, 100000) plt.show() From 7cd59a1ffb6cab60b906c4db7d4fc99444cdb2ea Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:18:14 +0800 Subject: [PATCH 0730/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/March2022_ZH.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py index 3c590de1..2453636d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py @@ -11,7 +11,7 @@ region_num = [1, 2, 3, 4, 5, 6] position_vacancies = [109262, 63982, 46161, 61036, 28391, 35120] -label = ["啣", "啣", "獢", "啁姘", "唬葉", "啣", "擃"] +label = ["啣", "啣", "獢", "唬葉", "啣", "擃"] fig, ax = plt.subplots(figsize=(8, 7)) plt.xticks(region_num, labels=label, rotation=7) From efa15b61402b50de953115470c2a8f8872a1496a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:21:13 +0800 Subject: [PATCH 0731/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/March2022_ZH.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py index 2453636d..b70699f7 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/March2022_ZH.py @@ -1,12 +1,9 @@ +import matplotlib import matplotlib.pyplot as plt # Using the magic encoding # -*- coding: utf-8 -*- -font = {'family': 'MS Gothic', - 'color': 'darkred', - 'weight': 'normal', - 'size': 16, - } +matplotlib.rc('font', family="MS Gothic") # [1] region_num = [1, 2, 3, 4, 5, 6] position_vacancies = [109262, 63982, 46161, 61036, 28391, 35120] From 691146d585d5592f85e03d101ba6e27a44de4521 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:24:50 +0800 Subject: [PATCH 0732/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/2022/April/Metro.py | 0 .../Monthly_total_job_openings_by_region/2022/April/__init__.py | 0 .../Monthly_total_job_openings_by_region/2022/__init__.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/__init__.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/__init__.py new file mode 100644 index 00000000..e69de29b From 73c0598a1a23a531ce23e2efe1a5d9d5ec726f40 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:25:24 +0800 Subject: [PATCH 0733/2002] Committed 2022/04/05 --- .../2022/April/{Metro.py => Metro_area.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/{Metro.py => Metro_area.py} (100%) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area.py similarity index 100% rename from The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro.py rename to The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area.py From 43b8a80517c6d1ac644359126a71475a8c0f3e3d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:27:37 +0800 Subject: [PATCH 0734/2002] Committed 2022/04/05 --- .../2022/April/Metro_area_ZH.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH.py new file mode 100644 index 00000000..e69de29b From f10eaeaec116e5501451b29602b7d5395025b49a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 5 Apr 2022 23:28:13 +0800 Subject: [PATCH 0735/2002] Committed 2022/04/05 --- .../2022/April/{Metro_area_ZH.py => Metro_area_ZH_JP.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/{Metro_area_ZH.py => Metro_area_ZH_JP.py} (100%) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py similarity index 100% rename from The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH.py rename to The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py From 3ba2807a085f749abeff01cd5d0a7a431555ab5a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 6 Apr 2022 00:05:46 +0800 Subject: [PATCH 0736/2002] Committed 2022/04/05 --- .../Monthly_total_job_openings_by_region/2022/April/Urban.py | 0 .../2022/April/Urban_ZH_JP.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban_ZH_JP.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban_ZH_JP.py new file mode 100644 index 00000000..e69de29b From dc593379c1b660e81e0328bc42566884c321ac50 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 6 Apr 2022 00:14:28 +0800 Subject: [PATCH 0737/2002] Committed 2022/04/05 --- .../2022/April/{Urban.py => Borough.py} | 0 .../2022/April/{Urban_ZH_JP.py => Borough_ZH_JP.py} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/{Urban.py => Borough.py} (100%) rename The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/{Urban_ZH_JP.py => Borough_ZH_JP.py} (100%) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Borough.py similarity index 100% rename from The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban.py rename to The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Borough.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Borough_ZH_JP.py similarity index 100% rename from The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Urban_ZH_JP.py rename to The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Borough_ZH_JP.py From ec4786f03f2464201b8c79f5637f1e8f6605021c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 11 Apr 2022 17:26:35 +0800 Subject: [PATCH 0738/2002] Committed 2022/04/11 --- .../pandas/Excel_sheet_shape.py | 6 + Supplementary materials/pandas/trace.txt | 5003 +++++++++++++++++ 2 files changed, 5009 insertions(+) create mode 100644 Supplementary materials/pandas/Excel_sheet_shape.py create mode 100644 Supplementary materials/pandas/trace.txt diff --git a/Supplementary materials/pandas/Excel_sheet_shape.py b/Supplementary materials/pandas/Excel_sheet_shape.py new file mode 100644 index 00000000..462ccc4d --- /dev/null +++ b/Supplementary materials/pandas/Excel_sheet_shape.py @@ -0,0 +1,6 @@ +import pandas as pd + +df = pd.read_csv("trace.txt", delimiter="\t") + +# Reference: +# 1. https://stackoverflow.com/a/51067912/ diff --git a/Supplementary materials/pandas/trace.txt b/Supplementary materials/pandas/trace.txt new file mode 100644 index 00000000..67ba0f2e --- /dev/null +++ b/Supplementary materials/pandas/trace.txt @@ -0,0 +1,5003 @@ +0x011C8272 +0x011C8272 +0x18F0B218 +0x18F0B220 +0x18F0B228 +0x06DE4DC0 +0x06DE4DC8 +0x1B6436C8 +0x1B6436C8 +0x1057A0A8 +0x1057A0A8 +0x1586AB00 +0x1586AB08 +0x1586AB10 +0x1586AB18 +0x1586AB20 +0x1586AB28 +0x1586AB30 +0x1586AB38 +0x1586AB40 +0x1DAB3B60 +0x1DAB3B68 +0x1DAB3B70 +0x1DAB3B78 +0x1DAB3B80 +0x1DAB3B88 +0x1DAB3B90 +0x1DAB3B98 +0x13C367B8 +0x13C367C0 +0x13C367C8 +0x0F169E30 +0x0F169E38 +0x0F169E40 +0x0F169E48 +0x0F169E50 +0x1817F038 +0x1817F040 +0x1817F048 +0x1817F050 +0x1817F058 +0x1817F060 +0x1817F068 +0x186D7108 +0x186D7110 +0x186D7118 +0x186D7120 +0x186D7128 +0x186D7130 +0x1A6FB500 +0x1A6FB508 +0x1A6FB510 +0x1A6FB518 +0x1A6FB520 +0x1A6FB528 +0x1A6FB530 +0x1A6FB538 +0x148AA970 +0x148AA978 +0x148AA980 +0x148AA988 +0x16496CA0 +0x16496CA8 +0x16496CB0 +0x07298E60 +0x07298E60 +0x1AB5F588 +0x1AB5F590 +0x1AB5F598 +0x1AB5F5A0 +0x1AB5F5A8 +0x1CEFFA00 +0x1CEFFA08 +0x1CEFFA10 +0x1CEFFA18 +0x1CEFFA20 +0x03D247BC +0x03D247C4 +0x03D247CC +0x03D247D4 +0x03D247DC +0x03D247E4 +0x03D247EC +0x06628CC8 +0x06628CD0 +0x0F579ED0 +0x0F579ED0 +0x1C84F938 +0x1C84F938 +0x0CFB9A30 +0x0CFB9A30 +0x09FD1458 +0x09FD1458 +0x17ACAF80 +0x17ACAF88 +0x17ACAF90 +0x17ACAF98 +0x17ACAFA0 +0x17ACAFA8 +0x17ACAFB0 +0x176C6EE0 +0x176C6EE8 +0x013942BA +0x0F395E70 +0x0F395E78 +0x0F395E80 +0x0F395E88 +0x146BA900 +0x146BA908 +0x146BA910 +0x146BA918 +0x146BA920 +0x01068256 +0x0106825E +0x01068266 +0x1DC13B80 +0x1DC13B88 +0x1DC13B90 +0x1DC13B98 +0x1DC13BA0 +0x002B808F +0x002B8097 +0x002B809F +0x002B80A7 +0x002B80AF +0x002B80B7 +0x049E8940 +0x049E8948 +0x049E8950 +0x07B34F88 +0x07B34F90 +0x07B34F98 +0x07B34FA0 +0x07B34FA8 +0x08B951A8 +0x08B951B0 +0x08B951B8 +0x0A2A5450 +0x0A2A5458 +0x0A2A5460 +0x0A2A5468 +0x0A2A5470 +0x0A2A5478 +0x0911D238 +0x0911D240 +0x0911D248 +0x0911D250 +0x0911D258 +0x0911D260 +0x0911D268 +0x0911D270 +0x1FB9BFC8 +0x1FB9BFC8 +0x0C255878 +0x0C255880 +0x0C255888 +0x0C255890 +0x0C255898 +0x0DA5DB50 +0x0DA5DB58 +0x0DA5DB60 +0x1E883D80 +0x1E883D80 +0x1E63FD00 +0x1E63FD08 +0x1E63FD10 +0x1E63FD18 +0x1E63FD20 +0x1E63FD28 +0x175B2EC0 +0x05D6CBB0 +0x05D6CBB0 +0x13BD67C8 +0x13BD67D0 +0x13BD67D8 +0x1332E660 +0x1332E668 +0x1332E670 +0x1332E678 +0x1347E6A0 +0x1347E6A0 +0x09DC13C8 +0x09DC13D0 +0x09DC13D8 +0x09DC13E0 +0x09DC13E8 +0x09DC13F0 +0x09DC13F8 +0x09DC1400 +0x146D6920 +0x146D6920 +0x141F28A0 +0x141F28A8 +0x0B2B5650 +0x0B2B5658 +0x0B2B5660 +0x0E919D70 +0x0E919D78 +0x0E919D80 +0x0E919D88 +0x09185230 +0x09185238 +0x150E2A48 +0x150E2A48 +0x079CCF40 +0x079CCF40 +0x11B0E390 +0x11B0E398 +0x11B0E3A0 +0x11B0E3A8 +0x11B0E3B0 +0x11B0E3B8 +0x11B0E3C0 +0x11B0E3C8 +0x0B4696C0 +0x0B4696C8 +0x0B4696D0 +0x0B4696D8 +0x0B4696E0 +0x07150E70 +0x07150E70 +0x1A3AB480 +0x1A3AB488 +0x1A3AB490 +0x1A3AB498 +0x1A3AB4A0 +0x1A3AB4A8 +0x1A3AB4B0 +0x17ACAF90 +0x17ACAF90 +0x112F2298 +0x112F22A0 +0x112F22A8 +0x112F22B0 +0x112F22B8 +0x112F22C0 +0x03E6C7CC +0x03E6C7CC +0x0F7DDF58 +0x1AAB7560 +0x1AAB7568 +0x1AAB7570 +0x1AAB7578 +0x14996948 +0x14996950 +0x14996958 +0x14996960 +0x14996968 +0x14996970 +0x1087E108 +0x1087E110 +0x1087E118 +0x1087E120 +0x1087E128 +0x1087E130 +0x1087E138 +0x1087E140 +0x1087E148 +0x09C6D398 +0x09C6D398 +0x13A32758 +0x13A32760 +0x13A32768 +0x13A32770 +0x13A32778 +0x13A32780 +0x13A32788 +0x01EE43DC +0x01EE43E4 +0x12D3A5E0 +0x12D3A5E0 +0x13B1A7A0 +0x13B1A7A8 +0x1E5AFCC0 +0x1E5AFCC8 +0x1E5AFCD0 +0x048F4988 +0x048F4988 +0x15A96BB0 +0x15A96BB0 +0x08071050 +0x08071058 +0x08071060 +0x08071068 +0x1F52BEA0 +0x1F52BEA8 +0x1F52BEB0 +0x1F52BEB8 +0x1F8ABF68 +0x1F8ABF68 +0x116522C8 +0x116522D0 +0x116522D8 +0x116522E0 +0x116522E8 +0x116522F0 +0x01A2038C +0x01A2038C +0x00C401E0 +0x00C401E8 +0x122C2460 +0x122C2468 +0x122C2470 +0x122C2478 +0x122C2480 +0x122C2488 +0x0C361888 +0x0C361888 +0x1D6B3B40 +0x18B33160 +0x18B33168 +0x18B33170 +0x18B33178 +0x18B33180 +0x18B33188 +0x0041C0C3 +0x0041C0CB +0x0041C0D3 +0x0041C0DB +0x0041C0E3 +0x05FB0BF8 +0x05FB0C00 +0x05FB0C08 +0x05FB0C10 +0x15822B38 +0x15822B38 +0x1A84F510 +0x1A84F518 +0x1A84F520 +0x1A84F528 +0x1A84F530 +0x1A84F538 +0x1A84F540 +0x1A84F548 +0x1A84F550 +0x1B3476B0 +0x0295C52C +0x0295C534 +0x0295C53C +0x0295C544 +0x0295C54C +0x0295C554 +0x0295C55C +0x0295C564 +0x16342C60 +0x16342C68 +0x16342C70 +0x16342C78 +0x16342C80 +0x16342C88 +0x16342C90 +0x16342C98 +0x16342CA0 +0x03DA87B4 +0x03DA87BC +0x03DA87C4 +0x03DA87CC +0x03DA87D4 +0x03DA87DC +0x03DA87E4 +0x03DA87EC +0x0A185448 +0x0A185448 +0x1A227480 +0x1A227488 +0x1A227490 +0x1A227498 +0x14282860 +0x1697AD58 +0x1697AD60 +0x1697AD68 +0x1697AD70 +0x1697AD78 +0x1697AD80 +0x08EE91E0 +0x08EE91E8 +0x1833B0B8 +0x1833B0B8 +0x0A19D450 +0x0A19D450 +0x17DB7008 +0x1F61FEC0 +0x1F61FEC8 +0x1F61FED0 +0x1F61FED8 +0x1F61FEE0 +0x01180278 +0x01180280 +0x0B60D6C0 +0x0B60D6C8 +0x0B60D6D0 +0x121FA488 +0x121FA488 +0x0C4E98C0 +0x0C4E98C0 +0x16992D58 +0x16992D60 +0x16992D68 +0x16992D70 +0x16992D78 +0x05770B30 +0x05770B38 +0x05770B40 +0x05770B48 +0x05770B50 +0x05770B58 +0x1CC6B980 +0x1B00F658 +0x10262040 +0x10262048 +0x10262050 +0x10262058 +0x10262060 +0x10262068 +0x10262070 +0x19F17418 +0x19F17420 +0x19F17428 +0x19F17430 +0x19F17438 +0x1063E0C0 +0x1063E0C8 +0x1063E0D0 +0x1063E0D8 +0x08A51180 +0x08A51180 +0x1EDB3DF8 +0x1EDB3E00 +0x1EDB3E08 +0x1EDB3E10 +0x1EDB3E18 +0x1ED4FDB8 +0x1ED4FDC0 +0x1ED4FDC8 +0x1ED4FDD0 +0x1ED4FDD8 +0x1ED4FDE0 +0x1ED4FDE8 +0x17C9EFE8 +0x17C9EFF0 +0x17C9EFF8 +0x17C9F000 +0x0AFB55F0 +0x0AFB55F8 +0x0AFB5600 +0x0AFB5608 +0x0AFB5610 +0x0BED97E8 +0x0BED97F0 +0x0BED97F8 +0x0BED9800 +0x0BED9808 +0x1B5676B8 +0x1B5676C0 +0x1B5676C8 +0x1B5676D0 +0x1B5676D8 +0x02838558 +0x15E9ABE0 +0x15E9ABE8 +0x15E9ABF0 +0x15E9ABF8 +0x15E9AC00 +0x15E9AC08 +0x15E9AC10 +0x15E9AC18 +0x06C54DC8 +0x06C54DD0 +0x046FC8E0 +0x046FC8E8 +0x046FC8F0 +0x046FC8F8 +0x046FC900 +0x1B0A3648 +0x1B0A3650 +0x1B0A3658 +0x1B0A3660 +0x1B0A3668 +0x1B0A3670 +0x1B0A3678 +0x1B0A3680 +0x15F16C38 +0x15F16C40 +0x15F16C48 +0x006DC0DB +0x006DC0E3 +0x006DC0EB +0x006DC0F3 +0x006DC0FB +0x006DC103 +0x1EBAFDB0 +0x1EBAFDB0 +0x0D375A88 +0x0D375A88 +0x127EE528 +0x127EE528 +0x1E5ABCD8 +0x1E5ABCD8 +0x07AE8F68 +0x07AE8F68 +0x085A50C0 +0x085A50C8 +0x085A50D0 +0x085A50D8 +0x085A50E0 +0x085A50E8 +0x085A50F0 +0x1D6AFB00 +0x1D6AFB08 +0x1D6AFB10 +0x1D6AFB18 +0x1D6AFB20 +0x1D803B08 +0x1D803B10 +0x1D803B18 +0x1D803B20 +0x1D803B28 +0x1D803B30 +0x1389E720 +0x1389E728 +0x1389E730 +0x1389E738 +0x1389E740 +0x1389E748 +0x1389E750 +0x1389E758 +0x1389E760 +0x02DC05C8 +0x02DC05D0 +0x02DC05D8 +0x02DC05E0 +0x02DC05E8 +0x02DC05F0 +0x02DC05F8 +0x0B60D728 +0x17DB2FC0 +0x17DB2FC8 +0x17DB2FD0 +0x17DB2FD8 +0x17DB2FE0 +0x17DB2FE8 +0x17DB2FF0 +0x13BD67C8 +0x13BD67C8 +0x1A7FF508 +0x1A7FF510 +0x1A7FF518 +0x1A7FF520 +0x1A7FF528 +0x1A7FF530 +0x0C21D8A0 +0x0C21D8A8 +0x1BA17740 +0x1BA17748 +0x1BA17750 +0x1BA17758 +0x1BA17760 +0x1BA17768 +0x1BA17770 +0x099B5378 +0x099B5378 +0x013E4284 +0x013E4284 +0x03E4C820 +0x03E4C828 +0x13BD6780 +0x13BD6788 +0x13BD6790 +0x13BD6798 +0x092B9260 +0x092B9260 +0x03F30810 +0x03F30810 +0x02D9C60C +0x02D9C60C +0x1433A868 +0x1433A870 +0x1433A878 +0x1433A880 +0x1433A888 +0x1433A890 +0x1433A898 +0x1433A8A0 +0x1433A8A8 +0x00DF01F6 +0x00DF01FE +0x00DF0206 +0x00DF020E +0x00DF0216 +0x1D8E7B48 +0x1D8E7B50 +0x1D8E7B58 +0x1D8E7B60 +0x1D8E7B68 +0x1D8E7B70 +0x11DDE3D8 +0x11DDE3E0 +0x11DDE3E8 +0x11DDE3F0 +0x11DDE3F8 +0x11DDE400 +0x0C18D838 +0x0C18D840 +0x0C18D848 +0x0C18D850 +0x0C18D858 +0x0C18D860 +0x05FFCC08 +0x05FFCC10 +0x05FFCC18 +0x05FFCC20 +0x05FFCC28 +0x05FFCC30 +0x05FFCC38 +0x05FFCC40 +0x05FFCC48 +0x0F375EA8 +0x0F375EB0 +0x0F375EB8 +0x0F375EC0 +0x1C1EF840 +0x1C1EF848 +0x1C1EF850 +0x02C145BC +0x02C145BC +0x15DFEBF8 +0x15DFEC00 +0x15DFEC08 +0x15DFEC10 +0x006C00D8 +0x006C00E0 +0x006C00E8 +0x006C00F0 +0x08D311B0 +0x08D311B0 +0x05D30BF0 +0x05D30BF8 +0x05D30C00 +0x05D30C08 +0x03F547EC +0x0F491ED0 +0x0F491ED0 +0x0E689D18 +0x0E689D20 +0x1C927920 +0x1C927928 +0x1C927930 +0x1C927938 +0x16332C68 +0x16332C68 +0x062CCC78 +0x062CCC80 +0x062CCC88 +0x062CCC90 +0x062CCC98 +0x0C215850 +0x0C215850 +0x0939D2A0 +0x0939D2A8 +0x0939D2B0 +0x0939D2B8 +0x1827F040 +0x1827F048 +0x1827F050 +0x1827F058 +0x1827F060 +0x06768D00 +0x06768D00 +0x0C20D868 +0x0C20D870 +0x0C20D878 +0x0C20D880 +0x0C20D888 +0x0C20D890 +0x061E8C40 +0x061E8C48 +0x10876110 +0x10876118 +0x10876120 +0x10876128 +0x10876130 +0x10876138 +0x10876140 +0x10876148 +0x1B9A3780 +0x1B9A3788 +0x1B9A3790 +0x1B9A3798 +0x1B9A37A0 +0x1B9A37A8 +0x16CC6DA0 +0x16CC6DA8 +0x1354E6D8 +0x1354E6D8 +0x17F17008 +0x17F17010 +0x17F17018 +0x17F17020 +0x17F17028 +0x17F17030 +0x17F17038 +0x17F17040 +0x17F17048 +0x005700B6 +0x005700BE +0x005700C6 +0x005700CE +0x005700D6 +0x005700DE +0x005700E6 +0x005700EE +0x015182DC +0x015182DC +0x0F5CDF18 +0x0F5CDF18 +0x1386A758 +0x06B5CD68 +0x06B5CD70 +0x06B5CD78 +0x06B5CD80 +0x06B5CD88 +0x06B5CD90 +0x06B5CD98 +0x042F4888 +0x042F4888 +0x033DC6C4 +0x033DC6C4 +0x05680AF8 +0x05680AF8 +0x0F90DF80 +0x0F90DF88 +0x0A319460 +0x0A319468 +0x0A319470 +0x0A319478 +0x0A319480 +0x0FD69FB8 +0x0FD69FB8 +0x197DB310 +0x197DB310 +0x0A2A5450 +0x0A2A5458 +0x0A2A5460 +0x0A2A5468 +0x0A2A5470 +0x0A2A5478 +0x0A2A5480 +0x099C9390 +0x099C9398 +0x099C93A0 +0x02D3C5A8 +0x02D3C5B0 +0x02D3C5B8 +0x1BB9B7C8 +0x1BB9B7C8 +0x088A9128 +0x088A9130 +0x088A9138 +0x088A9140 +0x088A9148 +0x088A9150 +0x088A9158 +0x088A9160 +0x088A9168 +0x0026C06D +0x0026C06D +0x1217E470 +0x1217E478 +0x1217E480 +0x18BB7180 +0x18BB7188 +0x18BB7190 +0x18BB7198 +0x0EF09E08 +0x0EF09E10 +0x0EF09E18 +0x0EF09E20 +0x0EF09E28 +0x0EF09E30 +0x0EF09E38 +0x0EF09E40 +0x06A00D90 +0x06A00D98 +0x044BC898 +0x044BC8A0 +0x044BC8A8 +0x044BC8B0 +0x044BC8B8 +0x044BC8C0 +0x0D119A58 +0x0D119A60 +0x0D119A68 +0x0D119A70 +0x0D119A78 +0x0D119A80 +0x16D46DB8 +0x16D46DC0 +0x16D46DC8 +0x16D46DD0 +0x16D46DD8 +0x16D46DE0 +0x16D46DE8 +0x16D46DF0 +0x16D46DF8 +0x116CA2F0 +0x116CA2F0 +0x10996170 +0x10996170 +0x11F72420 +0x11F72420 +0x0C21D848 +0x0C21D850 +0x0C21D858 +0x0C21D860 +0x0C21D868 +0x0C21D870 +0x0C21D878 +0x04200870 +0x04200870 +0x10CEA1F8 +0x10CEA1F8 +0x10E0E218 +0x1765AEC0 +0x1765AEC8 +0x1765AED0 +0x1765AED8 +0x1765AEE0 +0x1765AEE8 +0x1765AEF0 +0x1765AEF8 +0x09CF13F0 +0x09CF13F8 +0x09CF1400 +0x09CF1408 +0x0E7CDD00 +0x0E7CDD08 +0x03734728 +0x03734728 +0x181B3070 +0x181B3078 +0x181B3080 +0x181B3088 +0x181B3090 +0x181B3098 +0x181B30A0 +0x181B30A8 +0x197D3318 +0x197D3320 +0x197D3328 +0x197D3330 +0x197D3338 +0x197D3340 +0x197D3348 +0x08F451F0 +0x1074A128 +0x1074A130 +0x1074A138 +0x1074A140 +0x1074A148 +0x10A0E140 +0x0298C550 +0x0298C550 +0x0A9A9540 +0x0A9A9548 +0x0A9A9550 +0x0A9A9558 +0x0A9A9560 +0x0A9A9568 +0x0A9A9570 +0x0A9A9578 +0x0A9A9580 +0x152F2A80 +0x152F2A88 +0x152F2A90 +0x152F2A98 +0x152F2AA0 +0x152F2AA8 +0x19423290 +0x19423290 +0x0FEC5FE8 +0x0FEC5FF0 +0x0FEC5FF8 +0x0FEC6000 +0x0FEC6008 +0x0FEC6010 +0x0FEC6018 +0x0FEC6020 +0x0FEC6028 +0x16686D18 +0x16686D20 +0x16686D28 +0x16686D30 +0x07AE8F60 +0x0C0C9848 +0x0C0C9850 +0x0C0C9858 +0x0C0C9860 +0x0C0C9868 +0x0C0C9870 +0x165CED20 +0x165CED20 +0x063ECCC8 +0x063ECCD0 +0x063ECCD8 +0x12CBE5A0 +0x12CBE5A8 +0x003580BB +0x0E4C5CA0 +0x0E4C5CA8 +0x0E4C5CB0 +0x0E4C5CB8 +0x1C7D3928 +0x1C7D3930 +0x1C7D3938 +0x1C7D3940 +0x1C7D3948 +0x1C7D3950 +0x1C7D3958 +0x1C7D3960 +0x1C7D3968 +0x1C24F870 +0x1C24F878 +0x1C24F880 +0x1C24F888 +0x1C24F890 +0x1C24F898 +0x1C24F8A0 +0x0FC55F98 +0x0FC55FA0 +0x0FC55FA8 +0x0FC55FB0 +0x0FC55FB8 +0x0FC55FC0 +0x0FC55FC8 +0x0D175A40 +0x0D175A48 +0x0D175A50 +0x0D175A58 +0x0D175A60 +0x01CE83C6 +0x01CE83C6 +0x193A7298 +0x193A72A0 +0x193A72A8 +0x193A72B0 +0x193A72B8 +0x193A72C0 +0x193A72C8 +0x177AEF18 +0x177AEF20 +0x177AEF28 +0x177AEF30 +0x177AEF38 +0x177AEF40 +0x177AEF48 +0x177AEF50 +0x0B9B1778 +0x0B9B1778 +0x05830B20 +0x05830B28 +0x05830B30 +0x05830B38 +0x05830B40 +0x05830B48 +0x0A32D4B8 +0x0A32D4B8 +0x14C02988 +0x14C02990 +0x14C02998 +0x14C029A0 +0x14C029A8 +0x14C029B0 +0x14C029B8 +0x14C029C0 +0x14C029C8 +0x14BA69B8 +0x14BA69C0 +0x14BA69C8 +0x14BA69D0 +0x14BA69D8 +0x1BD737A0 +0x1BD737A8 +0x1F537EC8 +0x1F537ED0 +0x1F537ED8 +0x1F537EE0 +0x1F537EE8 +0x1608EC20 +0x1608EC28 +0x069C0D80 +0x0DDF5BC0 +0x0DDF5BC8 +0x0DDF5BD0 +0x0DDF5BD8 +0x0DDF5BE0 +0x0DDF5BE8 +0x1F32FEB0 +0x1F32FEB0 +0x0063C0C7 +0x0063C0C7 +0x1A377498 +0x1A377498 +0x18ECF1F8 +0x18ECF1F8 +0x1A82F500 +0x1A82F508 +0x1A82F510 +0x1A82F518 +0x1A82F520 +0x1A82F528 +0x1A82F530 +0x1A82F538 +0x1A82F540 +0x04124858 +0x04124858 +0x12B5E590 +0x12B5E590 +0x0DB11B88 +0x0DB11B88 +0x0828D080 +0x0828D088 +0x0828D090 +0x0828D098 +0x02BAC574 +0x02BAC57C +0x02BAC584 +0x02BAC58C +0x07DA0FD8 +0x07DA0FE0 +0x07DA0FE8 +0x07DA0FF0 +0x07DA0FF8 +0x07DA1000 +0x07DA1008 +0x07DA1010 +0x07DA1018 +0x04AA8998 +0x04AA89A0 +0x04AA89A8 +0x164CECA0 +0x164CECA8 +0x167AED20 +0x167AED28 +0x167AED30 +0x167AED38 +0x167AED40 +0x167AED48 +0x167AED50 +0x017102EA +0x017102EA +0x00F041F1 +0x00F041F1 +0x066DCD28 +0x066DCD28 +0x0FF32028 +0x0FF32030 +0x0FF32038 +0x176F6EE0 +0x176F6EE8 +0x176F6EF0 +0x176F6EF8 +0x176F6F00 +0x15D96BF8 +0x15D96BF8 +0x1E95BD20 +0x1E95BD20 +0x015182BC +0x015182BC +0x0A549510 +0x0A549510 +0x18833128 +0x18833130 +0x18833138 +0x18833140 +0x18833148 +0x18833150 +0x10E66208 +0x10E66208 +0x11F02410 +0x11F02418 +0x11F02420 +0x11F02428 +0x11F02430 +0x00CBC198 +0x00CBC1A0 +0x00CBC1A8 +0x00CBC1B0 +0x1D29FA90 +0x1D29FA98 +0x1D29FAA0 +0x1D29FAA8 +0x1D29FAB0 +0x1D29FAB8 +0x06B84D70 +0x06B84D78 +0x06B84D80 +0x13DB27C8 +0x13DB27D0 +0x13DB27D8 +0x13DB27E0 +0x13DB27E8 +0x13DB27F0 +0x060ACC60 +0x060ACC68 +0x060ACC70 +0x060ACC78 +0x060ACC80 +0x065ECCC0 +0x065ECCC8 +0x065ECCD0 +0x0DC19BB8 +0x0DC19BC0 +0x0DC19BC8 +0x0B231640 +0x0B231648 +0x0B231650 +0x0B231658 +0x0CED19E8 +0x0CED19F0 +0x0CED19F8 +0x0CED1A00 +0x0CED1A08 +0x0CED1A10 +0x0CED1A18 +0x0CED1A20 +0x0CED1A28 +0x0CF89A20 +0x0CF89A28 +0x0CF89A30 +0x0CF89A38 +0x183FB080 +0x1F35BE60 +0x1F35BE60 +0x1B7C7710 +0x1B7C7710 +0x134A66A0 +0x134A66A8 +0x134A66B0 +0x134A66B8 +0x134A66C0 +0x134A66C8 +0x0F7B1F48 +0x0F7B1F48 +0x1EF1FE00 +0x1EF1FE08 +0x1EF1FE10 +0x1EF1FE18 +0x1EF1FE20 +0x1EF1FE28 +0x1EF1FE30 +0x0A6B1508 +0x0A6B1510 +0x0A6B1518 +0x0A6B1520 +0x0A6B1528 +0x12BB2598 +0x12BB25A0 +0x12BB25A8 +0x12BB25B0 +0x12BB25B8 +0x03E8C7F0 +0x03E8C7F0 +0x0685CD18 +0x0685CD18 +0x01ED840C +0x01ED8414 +0x01ED841C +0x01ED8424 +0x1771EEE0 +0x08BED1D0 +0x08BED1D8 +0x081DD040 +0x081DD048 +0x081DD050 +0x081DD058 +0x148BE920 +0x148BE920 +0x1299A560 +0x1299A560 +0x0D7CDB08 +0x0D7CDB08 +0x1272A538 +0x1272A538 +0x02A5457C +0x02A54584 +0x02A5458C +0x02A54594 +0x02A5459C +0x02A545A4 +0x02A545AC +0x02A545B4 +0x1524AA70 +0x1524AA70 +0x1D323A78 +0x1D323A78 +0x17C9EFA0 +0x17C9EFA0 +0x119FA360 +0x119FA360 +0x09E39428 +0x09E39428 +0x12A72560 +0x12A72568 +0x12A72570 +0x12A72578 +0x12A72580 +0x1195E330 +0x1195E330 +0x0A0C9428 +0x0A0C9430 +0x0A0C9438 +0x0A0C9440 +0x0A0C9448 +0x0A0C9450 +0x0A0C9458 +0x06714D38 +0x06714D40 +0x1B6436C0 +0x1B6436C8 +0x1B6436D0 +0x1B6436D8 +0x1B6436E0 +0x1B6436E8 +0x1B6436F0 +0x0026C04D +0x0026C055 +0x0026C05D +0x0026C065 +0x0026C06D +0x0026C075 +0x0026C07D +0x084210D0 +0x084210D8 +0x084210E0 +0x10FE6200 +0x10FE6208 +0x10FE6210 +0x037C0740 +0x037C0748 +0x037C0750 +0x037C0758 +0x037C0760 +0x149D2988 +0x149D2988 +0x18633108 +0x18633110 +0x18633118 +0x11926320 +0x11926328 +0x08111038 +0x08111040 +0x08111048 +0x08111050 +0x08111058 +0x0A7D9550 +0x0A7D9558 +0x09B75370 +0x09B75378 +0x09B75380 +0x09B75388 +0x06D20DC0 +0x06D20DC0 +0x1DBDFBD0 +0x1DBDFBD0 +0x18CFB1D0 +0x18CFB1D0 +0x0DE15BF8 +0x0DE15BF8 +0x1803F038 +0x1803F040 +0x1803F048 +0x1803F050 +0x1803F058 +0x1803F060 +0x013A8276 +0x0FA89F70 +0x0FA89F70 +0x14EB6A48 +0x1F0DFE20 +0x1F0DFE28 +0x1F0DFE30 +0x1F0DFE38 +0x1F0DFE40 +0x1F0DFE48 +0x1F0DFE50 +0x11A8A370 +0x11A8A378 +0x11A8A380 +0x11A8A388 +0x11A8A390 +0x11A8A398 +0x160EEC30 +0x160EEC30 +0x0F4D9F00 +0x0F4D9F00 +0x1D137A48 +0x1D137A50 +0x1D137A58 +0x1D137A60 +0x1D137A68 +0x1D137A70 +0x1D137A78 +0x11BAE380 +0x11BAE388 +0x0FD91FD8 +0x0FD91FD8 +0x091F9278 +0x091F9278 +0x05B90B78 +0x05B90B78 +0x0B6CD728 +0x0B6CD730 +0x0B6CD738 +0x0B6CD740 +0x0B6CD748 +0x08839100 +0x08839108 +0x08839110 +0x13B1A760 +0x13B1A768 +0x13B1A770 +0x13B1A778 +0x13B1A780 +0x13B1A788 +0x13B1A790 +0x13B1A798 +0x13B1A7A0 +0x036686DC +0x036686E4 +0x036686EC +0x036686F4 +0x036686FC +0x183FF0D0 +0x183FF0D0 +0x11A26358 +0x11A26358 +0x05100A58 +0x05100A60 +0x05100A68 +0x05100A70 +0x0CED19E0 +0x0CED19E8 +0x0CED19F0 +0x09CF1400 +0x09CF1408 +0x0E7CDD00 +0x0E7CDD08 +0x0E7CDD10 +0x0E7CDD18 +0x0E7CDD20 +0x0E7CDD28 +0x0E7CDD30 +0x0118C262 +0x0118C26A +0x0118C272 +0x0118C27A +0x0118C282 +0x0118C28A +0x0118C292 +0x0214C490 +0x0214C490 +0x11A8A398 +0x11A8A3A0 +0x11A8A3A8 +0x11A8A3B0 +0x0A19D430 +0x0A19D438 +0x0A19D440 +0x0A19D448 +0x158AAB28 +0x158AAB30 +0x158AAB38 +0x158AAB40 +0x158AAB48 +0x158AAB50 +0x158AAB58 +0x05F48C00 +0x05F48C00 +0x0FB71F98 +0x0FB71F98 +0x03D687B4 +0x03D687BC +0x03D687C4 +0x03D687CC +0x03D687D4 +0x03D687DC +0x1A873550 +0x1A873550 +0x0F1B9E60 +0x0F1B9E60 +0x0A37D4B0 +0x0A37D4B0 +0x1F0E3E20 +0x1F0E3E20 +0x1A623518 +0x1A623520 +0x0C869910 +0x0C869918 +0x0C869920 +0x0C869928 +0x0C869930 +0x0C869938 +0x19083220 +0x19083228 +0x19083230 +0x19083238 +0x19083240 +0x083B1078 +0x083B1080 +0x083B1088 +0x083B1090 +0x083B1098 +0x083B10A0 +0x083B10A8 +0x083B10B0 +0x083B10B8 +0x0958D2E0 +0x0958D2E0 +0x12FD2600 +0x12FD2600 +0x05100A50 +0x05100A58 +0x05100A60 +0x05100A68 +0x05100A70 +0x0CED19E0 +0x1210E428 +0x1210E430 +0x1210E438 +0x1210E440 +0x1210E448 +0x09CB13B0 +0x09CB13B0 +0x16DF6DE0 +0x16DF6DE8 +0x16DF6DF0 +0x16DF6DF8 +0x16DF6E00 +0x16DF6E08 +0x1EDEFE08 +0x1EDEFE10 +0x1EDEFE18 +0x0CB25960 +0x0CB25968 +0x0CB25970 +0x0CB25978 +0x0CB25980 +0x0F2E1EA8 +0x0F2E1EA8 +0x0E55DCB0 +0x0E55DCB0 +0x0C231880 +0x0C231888 +0x0C231890 +0x0C231898 +0x08875110 +0x08875118 +0x08875120 +0x08875128 +0x03E4C7E8 +0x03E4C7E8 +0x040DC820 +0x040DC828 +0x040DC830 +0x040DC838 +0x040DC840 +0x040DC848 +0x040DC850 +0x165A2CC0 +0x165A2CC0 +0x07AE8F68 +0x07AE8F68 +0x0DCB1BD8 +0x0DCB1BD8 +0x06CDCD98 +0x06CDCD98 +0x18383080 +0x18383088 +0x18383090 +0x18383098 +0x183830A0 +0x183830A8 +0x183830B0 +0x183830B8 +0x183830C0 +0x1C973970 +0x1C973978 +0x0E291C50 +0x0E291C58 +0x0E291C60 +0x0E291C68 +0x0E291C70 +0x0E291C78 +0x17452EB0 +0x17452EB0 +0x00E401F8 +0x00E40200 +0x00E40208 +0x00E40210 +0x00E40218 +0x01F6042C +0x01F6042C +0x1739EEB0 +0x1739EEB0 +0x1622AC70 +0x1622AC78 +0x1622AC80 +0x1622AC88 +0x1622AC90 +0x1622AC98 +0x1622ACA0 +0x1622ACA8 +0x11A8A360 +0x17196E70 +0x17196E70 +0x092952A0 +0x092952A0 +0x021D444C +0x021D4454 +0x021D445C +0x021D4464 +0x021D446C +0x021D4474 +0x021D447C +0x021D4484 +0x021D448C +0x10D221E8 +0x10D221E8 +0x05FB0C48 +0x05FB0C48 +0x1D41FA88 +0x1D41FA90 +0x1D41FA98 +0x1D41FAA0 +0x1D41FAA8 +0x1D41FAB0 +0x027D4554 +0x027D4554 +0x06164C68 +0x06164C68 +0x1ADC7608 +0x1ADC7610 +0x10002000 +0x10002008 +0x10002010 +0x10002018 +0x10002020 +0x18E8F228 +0x18E8F230 +0x063B4C78 +0x063B4C80 +0x063B4C88 +0x063B4C90 +0x063B4C98 +0x063B4CA0 +0x063B4CA8 +0x119FA3A0 +0x119FA3A8 +0x0EE35DC0 +0x0EE35DC8 +0x0EE35DD0 +0x0EE35DD8 +0x0B1B1658 +0x0B1B1658 +0x18ECF240 +0x18ECF240 +0x1195E368 +0x1195E370 +0x0AC65590 +0x0AC65598 +0x0AC655A0 +0x0AC655A8 +0x0AC655B0 +0x0AC655B8 +0x0AC655C0 +0x136CE6F8 +0x136CE700 +0x136CE708 +0x136CE710 +0x136CE718 +0x17556EF8 +0x17556F00 +0x17556F08 +0x1ACAB5A0 +0x1ACAB5A8 +0x1ACAB5B0 +0x1ACAB5B8 +0x1ACAB5C0 +0x04CE09A0 +0x04CE09A0 +0x06BF8DC0 +0x06BF8DC8 +0x06BF8DD0 +0x06BF8DD8 +0x06BF8DE0 +0x06BF8DE8 +0x0C6798D0 +0x0C6798D8 +0x02BAC594 +0x02BAC59C +0x02BAC5A4 +0x02BAC5AC +0x02BAC5B4 +0x02BAC5BC +0x1D027A00 +0x1D027A08 +0x1D027A10 +0x1414E860 +0x1414E868 +0x120D6420 +0x120D6428 +0x120D6430 +0x120D6438 +0x120D6440 +0x120D6448 +0x120D6450 +0x10FE6268 +0x10FE6268 +0x10FD6250 +0x14452880 +0x14452888 +0x14452890 +0x14452898 +0x144528A0 +0x1D7B7B30 +0x1D7B7B38 +0x1D7B7B40 +0x1D7B7B48 +0x1D7B7B50 +0x1D7B7B58 +0x06A3CD70 +0x06A3CD78 +0x06A3CD80 +0x06A3CD88 +0x06A3CD90 +0x06A3CD98 +0x06A3CDA0 +0x10F7E1E0 +0x1D757AF8 +0x1D757AF8 +0x0C975970 +0x0C975978 +0x0C975980 +0x0C975988 +0x0C975990 +0x0F8B9F78 +0x0F8B9F78 +0x19887340 +0x19887348 +0x19887350 +0x19887358 +0x19887360 +0x19887368 +0x19887370 +0x19887378 +0x1AC3B5D0 +0x1AC3B5D0 +0x1E333C78 +0x1E333C78 +0x0DA69B78 +0x0DA69B80 +0x0DA69B88 +0x0DA69B90 +0x0DA69B98 +0x1B64B6C0 +0x1B64B6C8 +0x014DC2BC +0x014DC2C4 +0x014DC2CC +0x014DC2D4 +0x014DC2DC +0x15DD2BF0 +0x15DD2BF8 +0x15DD2C00 +0x15DD2C08 +0x15DD2C10 +0x15DD2C18 +0x15DD2C20 +0x15DD2C28 +0x163EAC80 +0x1868B128 +0x1868B128 +0x014B02F6 +0x014B02F6 +0x0B5816D0 +0x0B5816D0 +0x190E7260 +0x190E7260 +0x0ED0DDC8 +0x0ED0DDC8 +0x1A377460 +0x1A377468 +0x1A377470 +0x1A377478 +0x1A377480 +0x1A377488 +0x1A377490 +0x1A377498 +0x107DE150 +0x107DE158 +0x107DE160 +0x135F66C0 +0x135F66C8 +0x135F66D0 +0x135F66D8 +0x13CFE7F0 +0x13CFE7F8 +0x13CFE800 +0x1794EF20 +0x1794EF28 +0x1794EF30 +0x1794EF38 +0x1794EF40 +0x1C237890 +0x1C237890 +0x17D8EFD8 +0x17D8EFE0 +0x17D8EFE8 +0x17D8EFF0 +0x17D8EFF8 +0x17D8F000 +0x1D4FBAC8 +0x1D4FBAD0 +0x1D4FBAD8 +0x1D4FBAE0 +0x1D4FBAE8 +0x0B3A56A0 +0x0B3A56A8 +0x0B3A56B0 +0x0B3A56B8 +0x0B3A56C0 +0x0B3A56C8 +0x0F409E80 +0x03AAC76C +0x03AAC774 +0x03AAC77C +0x03AAC784 +0x03AAC78C +0x03AAC794 +0x03AAC79C +0x03AAC7A4 +0x13086630 +0x13086630 +0x0EE39E28 +0x0EE39E28 +0x044BC8E8 +0x044BC8E8 +0x182F7088 +0x182F7088 +0x0BE157F0 +0x0BE157F0 +0x1D987B58 +0x1D987B60 +0x1D987B68 +0x1D987B70 +0x1D987B78 +0x1D987B80 +0x0FCA9F90 +0x0FCA9F98 +0x0FCA9FA0 +0x0FCA9FA8 +0x0FCA9FB0 +0x003C8079 +0x003C8081 +0x003C8089 +0x003C8091 +0x003C8099 +0x1DFD3C00 +0x1DFD3C08 +0x1DFD3C10 +0x1DFD3C18 +0x1DFD3C20 +0x1DFD3C28 +0x0C15D840 +0x0C15D840 +0x0E55DCD0 +0x0E55DCD0 +0x19BC33D8 +0x19BC33D8 +0x19FE3450 +0x19FE3450 +0x08B5D1A0 +0x08B5D1A8 +0x08B5D1B0 +0x08B5D1B8 +0x08B5D1C0 +0x08B5D1C8 +0x08B5D1D0 +0x08DFD1C0 +0x1E823D40 +0x1E823D40 +0x16B3ED70 +0x16B3ED70 +0x0A3954A8 +0x0A3954B0 +0x0A3954B8 +0x0A3954C0 +0x0A3954C8 +0x013B42CE +0x013B42D6 +0x013B42DE +0x1B283660 +0x1B283668 +0x1B283670 +0x1B283678 +0x1B283680 +0x0FE5A000 +0x0FE5A008 +0x0FE5A010 +0x0FE5A018 +0x0FE5A020 +0x0FE5A028 +0x09CE53A0 +0x192F3268 +0x192F3268 +0x1210E440 +0x1210E440 +0x14282888 +0x14282890 +0x14282898 +0x142828A0 +0x142828A8 +0x142828B0 +0x142828B8 +0x0EC3DDB8 +0x0EC3DDB8 +0x0B401690 +0x0B401690 +0x1D10FA60 +0x1D10FA60 +0x195BF2F0 +0x195BF2F8 +0x195BF300 +0x195BF308 +0x09D653B0 +0x09D653B8 +0x09D653C0 +0x09D653C8 +0x08B851B8 +0x08B851B8 +0x129B2578 +0x129B2578 +0x1DF2FC30 +0x1DF2FC30 +0x0CAF5990 +0x0CAF5998 +0x0CAF59A0 +0x0CAF59A8 +0x0CAF59B0 +0x0106820E +0x18E231D0 +0x18E231D8 +0x18E231E0 +0x18E231E8 +0x18E231F0 +0x18E231F8 +0x1E90FD48 +0x1E90FD50 +0x1E90FD58 +0x1E90FD60 +0x1E90FD68 +0x1E90FD70 +0x1E90FD78 +0x0C6098C0 +0x0C6098C8 +0x1CB7B978 +0x1CB7B980 +0x1CB7B988 +0x1CB7B990 +0x1CB7B998 +0x1CB7B9A0 +0x1CB7B9A8 +0x1CB7B9B0 +0x1CB7B9B8 +0x1F747EF0 +0x1F747EF8 +0x1F747F00 +0x1F747F08 +0x1F747F10 +0x04ED89E0 +0x04ED89E0 +0x0AE455D0 +0x0AE455D0 +0x11706348 +0x16F4EDE0 +0x16F4EDE8 +0x16F4EDF0 +0x16F4EDF8 +0x16F4EE00 +0x16F4EE08 +0x16F4EE10 +0x12F8E600 +0x12F8E600 +0x1EFABE08 +0x1EFABE10 +0x1EFABE18 +0x1EFABE20 +0x1EFABE28 +0x0C041820 +0x0C041828 +0x0C041830 +0x0C041838 +0x0C041840 +0x0C041848 +0x0C041850 +0x0E3EDCA0 +0x0E3EDCA0 +0x1D59BB10 +0x1D59BB18 +0x1D59BB20 +0x1493A920 +0x1493A928 +0x1C7B7930 +0x1C7B7938 +0x1C7B7940 +0x1C7B7948 +0x1C7B7950 +0x1C7B7958 +0x14ADA960 +0x14ADA968 +0x1157E2E0 +0x1157E2E0 +0x0F5CDF18 +0x0F5CDF20 +0x1C84F900 +0x1C84F908 +0x1C84F910 +0x10B2A178 +0x10B2A178 +0x19F2B418 +0x19F2B418 +0x1D237A90 +0x1D237A98 +0x1D237AA0 +0x1D237AA8 +0x05E40BC8 +0x0676CCF0 +0x0676CCF8 +0x0676CD00 +0x0676CD08 +0x0676CD10 +0x0676CD18 +0x0E869D28 +0x0E869D28 +0x13232650 +0x13232658 +0x13232660 +0x13232668 +0x13232670 +0x13232678 +0x13232680 +0x13232688 +0x05978B30 +0x05978B38 +0x05978B40 +0x05978B48 +0x05978B50 +0x033DC684 +0x033DC68C +0x033DC694 +0x033DC69C +0x033DC6A4 +0x033DC6AC +0x1D55FAA0 +0x1D55FAA8 +0x1D55FAB0 +0x1D55FAB8 +0x1D55FAC0 +0x1D55FAC8 +0x1D55FAD0 +0x0EEB5DE0 +0x0EEB5DE8 +0x0EEB5DF0 +0x0EEB5DF8 +0x0EEB5E00 +0x0EEB5E08 +0x0EEB5E10 +0x0EEB5E18 +0x0BAD5760 +0x142CE860 +0x142CE860 +0x06A7CD58 +0x06A7CD60 +0x06A7CD68 +0x06A7CD70 +0x06A7CD78 +0x06A7CD80 +0x06A7CD88 +0x06A7CD90 +0x06A7CD98 +0x1FA77F88 +0x1FA77F90 +0x1FA77F98 +0x1FA77FA0 +0x1FA77FA8 +0x0E805D00 +0x0E805D08 +0x0E805D10 +0x0E805D18 +0x1833B0B0 +0x1833B0B0 +0x1F84BF48 +0x1F84BF48 +0x1FBE3FC0 +0x1FBE3FC8 +0x1FBE3FD0 +0x13812700 +0x13812708 +0x13812710 +0x13812718 +0x0B43D6C8 +0x0B43D6D0 +0x0B43D6D8 +0x14C72980 +0x14C72988 +0x0C0C9840 +0x0C0C9840 +0x10C1A1C8 +0x085B50B0 +0x085B50B8 +0x085B50C0 +0x085B50C8 +0x1E823D28 +0x1E823D30 +0x1E823D38 +0x1E823D40 +0x1E823D48 +0x1E823D50 +0x18B4B188 +0x18B4B190 +0x18B4B198 +0x18B4B1A0 +0x18B4B1A8 +0x18B4B1B0 +0x18B4B1B8 +0x18B4B1C0 +0x03B507B4 +0x03B507B4 +0x063D8CB0 +0x063D8CB8 +0x063D8CC0 +0x063D8CC8 +0x1599AB40 +0x1E257C50 +0x1E257C58 +0x1E257C60 +0x1E257C68 +0x1E257C70 +0x1E257C78 +0x1E257C80 +0x1E257C88 +0x06D20DB0 +0x06D20DB8 +0x06D20DC0 +0x06D20DC8 +0x06D20DD0 +0x06D20DD8 +0x06D20DE0 +0x06D20DE8 +0x06D20DF0 +0x079A0F38 +0x079A0F40 +0x079A0F48 +0x079A0F50 +0x079A0F58 +0x136426F0 +0x136426F8 +0x13642700 +0x13642708 +0x0A76D4F0 +0x0A76D4F8 +0x0A76D500 +0x1445A8A0 +0x1445A8A8 +0x1445A8B0 +0x1445A8B8 +0x1445A8C0 +0x1445A8C8 +0x1D6B3AF8 +0x1D6B3AF8 +0x06B5CD78 +0x06B5CD80 +0x06B5CD88 +0x06B5CD90 +0x06B5CD98 +0x06B5CDA0 +0x06B5CDA8 +0x06B5CDB0 +0x06B5CDB8 +0x11866330 +0x11866338 +0x11866340 +0x11866348 +0x11866350 +0x1CFDFA00 +0x1CFDFA08 +0x1CFDFA10 +0x0E1ADC38 +0x0E1ADC38 +0x02EE45E4 +0x02EE45E4 +0x1B6276F0 +0x1B6276F0 +0x164BECE8 +0x03E2C7C4 +0x03E2C7CC +0x03E2C7D4 +0x03E2C7DC +0x19BC33D8 +0x19BC33D8 +0x00E741DF +0x00E741E7 +0x00E741EF +0x00E741F7 +0x00E741FF +0x00E74207 +0x00E7420F +0x00E74217 +0x00E7421F +0x1A887548 +0x1A887550 +0x1A887558 +0x1A887560 +0x1A887568 +0x1A887570 +0x1A887578 +0x1805B000 +0x0E62DCE0 +0x0E62DCE0 +0x08EE9228 +0x08EE9230 +0x08EE9238 +0x08EE9240 +0x01F983F4 +0x01F983FC +0x01F98404 +0x01F9840C +0x1E35BC78 +0x1E35BC80 +0x1E35BC88 +0x1E35BC90 +0x1E35BC98 +0x1E35BCA0 +0x02AA855C +0x02AA8564 +0x02AA856C +0x02AA8574 +0x02AA857C +0x02AA8584 +0x0532CA78 +0x0532CA80 +0x0532CA88 +0x0532CA90 +0x0532CA98 +0x0532CAA0 +0x0532CAA8 +0x0532CAB0 +0x0532CAB8 +0x14A4A968 +0x14A4A970 +0x14A4A978 +0x14A4A980 +0x14A4A988 +0x12B4E560 +0x12B4E568 +0x12B4E570 +0x0F849F48 +0x0F849F50 +0x0F849F58 +0x0F849F60 +0x0F849F68 +0x186D70E8 +0x186D70F0 +0x186D70F8 +0x186D7100 +0x186D7108 +0x186D7110 +0x186D7118 +0x12FD2638 +0x12FD2638 +0x1765AEE8 +0x1765AEE8 +0x16086C60 +0x16086C68 +0x16086C70 +0x16086C78 +0x0CD5D9B0 +0x0CD5D9B8 +0x0CD5D9C0 +0x0CD5D9C8 +0x0F491E90 +0x0F491E90 +0x0D135A40 +0x0D135A48 +0x0D135A50 +0x0D135A58 +0x0D135A60 +0x0D6B5AF0 +0x0D6B5AF8 +0x0D6B5B00 +0x0D6B5B08 +0x0D6B5B10 +0x0D6B5B18 +0x0D6B5B20 +0x1524AA78 +0x1524AA78 +0x1B62F718 +0x1B62F718 +0x098E9370 +0x098E9370 +0x029A058C +0x029A058C +0x1386A710 +0x1386A710 +0x09EE13E8 +0x09EE13E8 +0x0797CF78 +0x0797CF80 +0x0797CF88 +0x0007C00F +0x0007C017 +0x023684C4 +0x1C3CB880 +0x1C3CB888 +0x1C3CB890 +0x1C3CB898 +0x1C3CB8A0 +0x1C3CB8A8 +0x1C3CB8B0 +0x0A47D4C8 +0x0A47D4D0 +0x0A47D4D8 +0x17A66F40 +0x17A66F48 +0x17A66F50 +0x17A66F58 +0x17A66F60 +0x17A66F68 +0x05190A70 +0x05190A78 +0x05190A80 +0x05190A88 +0x05190A90 +0x05190A98 +0x0B5A16B0 +0x17666EF0 +0x17666EF0 +0x15BF2BA8 +0x15BF2BB0 +0x15BF2BB8 +0x15BF2BC0 +0x15BF2BC8 +0x15BF2BD0 +0x0DC35B98 +0x0DC35BA0 +0x0DC35BA8 +0x0DC35BB0 +0x0DC35BB8 +0x0DC35BC0 +0x0DC35BC8 +0x0DC35BD0 +0x02E5C60C +0x02E5C614 +0x02E5C61C +0x03FB87F8 +0x03FB8800 +0x03FB8808 +0x05C60BC8 +0x05C60BC8 +0x16A56D80 +0x16A56D88 +0x16A56D90 +0x16A56D98 +0x00A10142 +0x05A64B80 +0x05A64B88 +0x05A64B90 +0x05A64B98 +0x05A64BA0 +0x05A64BA8 +0x0A32D460 +0x0A32D468 +0x0A32D470 +0x0B4C16A0 +0x0B4C16A8 +0x0B4C16B0 +0x0B4C16B8 +0x0B4C16C0 +0x0B4C16C8 +0x0B4C16D0 +0x0B4C16D8 +0x0B4C16E0 +0x1CEDBA28 +0x1CEDBA30 +0x0199C334 +0x0199C33C +0x0199C344 +0x1CC3F9B0 +0x1CC3F9B0 +0x01EB8408 +0x01EB8408 +0x15346A70 +0x15346A70 +0x14D1E9B8 +0x14D1E9B8 +0x05874B68 +0x05874B70 +0x1BD8F7C0 +0x1BD8F7C8 +0x1BD8F7D0 +0x1BD8F7D8 +0x107DE148 +0x107DE148 +0x1CAEF968 +0x1CAEF968 +0x0026C055 +0x0026C055 +0x11ACE3A0 +0x11ACE3A8 +0x050E0A20 +0x050E0A28 +0x050E0A30 +0x050E0A38 +0x050E0A40 +0x050E0A48 +0x050E0A50 +0x0CFB9A00 +0x0CFB9A00 +0x1E083C28 +0x1E083C30 +0x1E083C38 +0x1E083C40 +0x1E083C48 +0x1E083C50 +0x1E083C58 +0x1E083C60 +0x1E083C68 +0x1E32FCA8 +0x1E32FCA8 +0x034B86D8 +0x034B86E0 +0x034B86E8 +0x034B86F0 +0x034B86F8 +0x12BAE580 +0x12BAE588 +0x12BAE590 +0x12BAE598 +0x1DFB7C18 +0x1DFB7C20 +0x1DFB7C28 +0x1DFB7C30 +0x1DFB7C38 +0x190E7270 +0x0F581EB0 +0x0F581EB8 +0x0F581EC0 +0x0F581EC8 +0x06B6CD90 +0x06B6CD98 +0x06B6CDA0 +0x06B6CDA8 +0x06B6CDB0 +0x06B6CDB8 +0x025A0514 +0x025A0514 +0x10242088 +0x12D025A0 +0x12D025A8 +0x12D025B0 +0x12D025B8 +0x12D025C0 +0x12D025C8 +0x1BA8F780 +0x1BA8F780 +0x050E0A38 +0x050E0A38 +0x0BA95768 +0x0BA95770 +0x0BA95778 +0x0BA95780 +0x0BA95788 +0x0BA95790 +0x1032A0A0 +0x1032A0A0 +0x09EE1430 +0x09EE1430 +0x1E753D40 +0x13AAE760 +0x13AAE768 +0x13AAE770 +0x13AAE778 +0x13AAE780 +0x13AAE788 +0x1078E160 +0x1DE37BC0 +0x1DE37BC8 +0x1DE37BD0 +0x1DE37BD8 +0x06FB4DF8 +0x06FB4DF8 +0x06628CD8 +0x06628CD8 +0x1AA9B598 +0x1AA9B5A0 +0x1AA9B5A8 +0x1AA9B5B0 +0x0F4CDEA0 +0x0CB25960 +0x0CB25960 +0x10A5A160 +0x10A5A160 +0x1C6AB8E0 +0x1C6AB8E0 +0x1A043400 +0x1A043400 +0x1C0CB848 +0x1C0CB850 +0x1C0CB858 +0x1C0CB860 +0x1C0CB868 +0x1C0CB870 +0x1C0CB878 +0x1C0CB880 +0x077C0EF8 +0x00A7018E +0x00A7018E +0x007F412E +0x007F4136 +0x007F413E +0x007F4146 +0x007F414E +0x007F4156 +0x103620B0 +0x1BC4B780 +0x1BC4B788 +0x1BC4B790 +0x1BC4B798 +0x1BC4B7A0 +0x1BC4B7A8 +0x1BC4B7B0 +0x1BC4B7B8 +0x079CCF58 +0x079CCF60 +0x079CCF68 +0x079CCF70 +0x079CCF78 +0x079CCF80 +0x079CCF88 +0x0A37D498 +0x0A37D4A0 +0x0A37D4A8 +0x0A37D4B0 +0x0A37D4B8 +0x0A37D4C0 +0x1F36FE60 +0x1F36FE68 +0x1F36FE70 +0x12D025B8 +0x12D025C0 +0x12D025C8 +0x12D025D0 +0x12D025D8 +0x12D025E0 +0x13266678 +0x13266680 +0x13266688 +0x13266690 +0x0E165C30 +0x0E165C38 +0x0E165C40 +0x0E165C48 +0x1EEC3E10 +0x1EEC3E18 +0x1EEC3E20 +0x1EEC3E28 +0x1EEC3E30 +0x1FE33FC0 +0x1F61FED0 +0x1F61FED8 +0x1F61FEE0 +0x1F61FEE8 +0x1F61FEF0 +0x1F61FEF8 +0x1F61FF00 +0x1F61FF08 +0x1066A100 +0x1066A100 +0x15B6EB70 +0x15B6EB70 +0x15C56B98 +0x15C56BA0 +0x15C56BA8 +0x15C56BB0 +0x15C56BB8 +0x038D4754 +0x038D475C +0x038D4764 +0x038D476C +0x038D4774 +0x038D477C +0x02A08540 +0x02A08548 +0x1F88FF40 +0x1F88FF48 +0x1F88FF50 +0x1F88FF58 +0x1F88FF60 +0x017682EE +0x017682F6 +0x017682FE +0x01768306 +0x0176830E +0x1B5F3700 +0x1B5F3708 +0x1B5F3710 +0x1B5F3718 +0x0F1A1E30 +0x0F1A1E38 +0x0F1A1E40 +0x0F1A1E48 +0x0F1A1E50 +0x10996178 +0x10996178 +0x0275451C +0x02754524 +0x0275452C +0x02754534 +0x0275453C +0x02754544 +0x0275454C +0x14A9E960 +0x00FB421F +0x00FB4227 +0x00FB422F +0x00FB4237 +0x00FB423F +0x1C457888 +0x1C457888 +0x0D7CDB10 +0x0D7CDB10 +0x1544EAD0 +0x1EA33D40 +0x1EA33D48 +0x1EA33D50 +0x1EA33D58 +0x1EA33D60 +0x172CEE80 +0x172CEE88 +0x172CEE90 +0x172CEE98 +0x172CEEA0 +0x172CEEA8 +0x133C2690 +0x133C2690 +0x0A971578 +0x0A971578 +0x1BFC3860 +0x104B60A0 +0x104B60A8 +0x104B60B0 +0x104B60B8 +0x104B60C0 +0x104B60C8 +0x104B60D0 +0x086C1128 +0x086C1130 +0x086C1138 +0x0DC35B80 +0x0DC35B88 +0x0DC35B90 +0x0DC35B98 +0x08E491E8 +0x08E491F0 +0x08E491F8 +0x08E49200 +0x08E49208 +0x08E49210 +0x15A72B68 +0x15A72B70 +0x15A72B78 +0x15A72B80 +0x15A72B88 +0x0722CE48 +0x0722CE50 +0x0722CE58 +0x0722CE60 +0x161AEC60 +0x161AEC60 +0x0F3E1EB8 +0x0F3E1EC0 +0x0F3E1EC8 +0x0F3E1ED0 +0x0F3E1ED8 +0x1BB93780 +0x1BB93788 +0x1BB93790 +0x1BB93798 +0x0F59DEF0 +0x0F59DEF8 +0x0F59DF00 +0x0F59DF08 +0x1CF179E0 +0x1CF179E8 +0x1099E180 +0x1099E188 +0x1099E190 +0x1099E198 +0x1C1D3840 +0x1C1D3848 +0x1C1D3850 +0x1C1D3858 +0x1C1D3860 +0x044E08A8 +0x044E08B0 +0x044E08B8 +0x044E08C0 +0x044E08C8 +0x044E08D0 +0x09E593D0 +0x09E593D8 +0x09E593E0 +0x09E593E8 +0x09E593F0 +0x09E593F8 +0x09E59400 +0x10936140 +0x10936140 +0x14AAE9A8 +0x1665ECC0 +0x1665ECC8 +0x1665ECD0 +0x1665ECD8 +0x1665ECE0 +0x1665ECE8 +0x033E469C +0x033E46A4 +0x033E46AC +0x033E46B4 +0x033E46BC +0x033E46C4 +0x033E46CC +0x033E46D4 +0x18B0B198 +0x18B0B1A0 +0x18B0B1A8 +0x18B0B1B0 +0x18B0B1B8 +0x0DBD5B80 +0x0DBD5B88 +0x0DBD5B90 +0x0DBD5B98 +0x0AB39570 +0x0AB39570 +0x08071060 +0x08071060 +0x1E873D50 +0x1E873D58 +0x1E873D60 +0x1F84BF00 +0x1F84BF08 +0x1F84BF10 +0x1F84BF18 +0x1622AC58 +0x1622AC60 +0x1622AC68 +0x1622AC70 +0x1622AC78 +0x1622AC80 +0x01768336 +0x0176833E +0x01768346 +0x0176834E +0x01768356 +0x03EA87D4 +0x03EA87DC +0x03EA87E4 +0x1FB4BF70 +0x1FB4BF78 +0x1FB4BF80 +0x1FB4BF88 +0x1FB4BF90 +0x1FB4BF98 +0x1FB4BFA0 +0x147F6910 +0x147F6910 +0x1E333C78 +0x1E333C78 +0x038D4764 +0x038D4764 +0x0DCD5BC0 +0x0DCD5BC0 +0x183830D8 +0x183830D8 +0x11B8A3C0 +0x11B8A3C0 +0x1144A290 +0x1144A290 +0x1E597D28 +0x1E597D28 +0x1A5334B0 +0x1A5334B0 +0x0BC557B0 +0x0BC557B0 +0x09D393C0 +0x09D393C8 +0x09D393D0 +0x09D393D8 +0x09D393E0 +0x09D393E8 +0x09D393F0 +0x02974530 +0x15E66BF8 +0x15E66C00 +0x15E66C08 +0x15E66C10 +0x15E66C18 +0x15E66C20 +0x15E66C28 +0x09291250 +0x09291258 +0x0B8E9720 +0x0B8E9720 +0x11FF2420 +0x11FF2428 +0x11FF2430 +0x11FF2438 +0x11FF2440 +0x11FF2448 +0x11FF2450 +0x11FF2458 +0x079CCF48 +0x079CCF48 +0x05EECBE0 +0x05EECBE8 +0x05EECBF0 +0x05EECBF8 +0x05EECC00 +0x05EECC08 +0x05EECC10 +0x05EECC18 +0x05EECC20 +0x0EF31E40 +0x0EF31E40 +0x1D7CFB40 +0x1D7CFB48 +0x1D7CFB50 +0x1AEB75E0 +0x1AEB75E8 +0x1AEB75F0 +0x1A03B440 +0x1A03B448 +0x01D2C3A6 +0x01D2C3AE +0x01D2C3B6 +0x01D2C3BE +0x0AFB5620 +0x0AFB5620 +0x143D68D0 +0x143D68D0 +0x1C87F960 +0x1C87F960 +0x038C4720 +0x038C4728 +0x038C4730 +0x038C4738 +0x038C4740 +0x038C4748 +0x038C4750 +0x0751CEF0 +0x0751CEF8 +0x0751CF00 +0x0751CF08 +0x13086620 +0x13086628 +0x11B9A3B0 +0x11B9A3B8 +0x11B9A3C0 +0x11B9A3C8 +0x11B9A3D0 +0x11B9A3D8 +0x11B9A3E0 +0x0FD69FB0 +0x16046C50 +0x16046C50 +0x0106825E +0x01068266 +0x1DC13B80 +0x1DC13B88 +0x1DC13B90 +0x11AA2398 +0x11AA23A0 +0x11AA23A8 +0x11AA23B0 +0x11AA23B8 +0x188EB120 +0x188EB128 +0x188EB130 +0x188EB138 +0x00A1016A +0x00A1016A +0x00A78167 +0x00A7816F +0x00A78177 +0x00A7817F +0x00A78187 +0x142CE888 +0x142CE888 +0x1524AA80 +0x1524AA80 +0x1FB1BF78 +0x1FB1BF80 +0x1FB1BF88 +0x1FB1BF90 +0x1FB1BF98 +0x1FB1BFA0 +0x1FB1BFA8 +0x1FB1BFB0 +0x0A5454E8 +0x0A5454E8 +0x1794EF30 +0x1794EF38 +0x1794EF40 +0x1794EF48 +0x1794EF50 +0x1794EF58 +0x1794EF60 +0x1794EF68 +0x1794EF70 +0x0676CD18 +0x0676CD20 +0x0676CD28 +0x0676CD30 +0x0676CD38 +0x0676CD40 +0x0676CD48 +0x0676CD50 +0x1DA63B50 +0x1DA63B58 +0x1DA63B60 +0x1DA63B68 +0x1DA63B70 +0x1DA63B78 +0x1ECEBDE8 +0x1ECEBDF0 +0x1ECEBDF8 +0x03D247A4 +0x03D247AC +0x03D247B4 +0x03D247BC +0x1487E908 +0x1487E910 +0x1487E918 +0x1487E920 +0x1487E928 +0x1487E930 +0x1487E938 +0x1487E940 +0x124B64F8 +0x0BEFD7E0 +0x0BEFD7E8 +0x0BEFD7F0 +0x0BEFD7F8 +0x0BEFD800 +0x0BEFD808 +0x0BEFD810 +0x0BEFD818 +0x1433A878 +0x1433A880 +0x1433A888 +0x1433A890 +0x1433A898 +0x1433A8A0 +0x1433A8A8 +0x1433A8B0 +0x14996978 +0x14996978 +0x16CDADA8 +0x16CDADA8 +0x13812708 +0x13812710 +0x13812718 +0x13812720 +0x13812728 +0x13812730 +0x13812738 +0x13812740 +0x13812748 +0x152E6AC0 +0x003F007E +0x003F0086 +0x003F008E +0x003F0096 +0x003F009E +0x0FDADFF8 +0x0FDADFF8 +0x1DF2FBF8 +0x1DF2FBF8 +0x16BCEDB8 +0x16BCEDC0 +0x16BCEDC8 +0x16BCEDD0 +0x16BCEDD8 +0x16BCEDE0 +0x16BCEDE8 +0x14AD6960 +0x14AD6968 +0x1868B128 +0x1868B128 +0x1ED4FDB0 +0x1ED4FDB8 +0x1ED4FDC0 +0x1ED4FDC8 +0x1ED4FDD0 +0x1ED4FDD8 +0x1ED4FDE0 +0x1ED4FDE8 +0x1FEC8040 +0x1FEC8040 +0x13E26800 +0x13E26808 +0x13E26810 +0x13E26818 +0x13E26820 +0x13E26828 +0x19033200 +0x19033208 +0x120D6468 +0x120D6468 +0x03B98794 +0x03B98794 +0x135FE6C8 +0x135FE6C8 +0x16046C18 +0x16046C18 +0x11796308 +0x11796310 +0x11796318 +0x11796320 +0x11796328 +0x11796330 +0x1200E440 +0x1200E440 +0x10FE6208 +0x10FE6210 +0x10FE6218 +0x10FE6220 +0x10FE6228 +0x10FE6230 +0x1E507CE8 +0x1E507CF0 +0x1E507CF8 +0x1E507D00 +0x121EE440 +0x121EE448 +0x121EE450 +0x121EE458 +0x121EE460 +0x09CA9390 +0x09CA9390 +0x10CEA1F8 +0x10CEA1F8 +0x1EBFBD80 +0x1EBFBD88 +0x1EBFBD90 +0x1EBFBD98 +0x1EBFBDA0 +0x155D6AE8 +0x155D6AE8 +0x0466C900 +0x0466C908 +0x0466C910 +0x0466C918 +0x05AE0B60 +0x08609100 +0x08609100 +0x055B4AD8 +0x055B4AE0 +0x055B4AE8 +0x055B4AF0 +0x055B4AF8 +0x055B4B00 +0x055B4B08 +0x055B4B10 +0x055B4B18 +0x1FB9BFB0 +0x1FB9BFB8 +0x1FB9BFC0 +0x1FB9BFC8 +0x1E35FC60 +0x1E35FC68 +0x064D4CA8 +0x064D4CB0 +0x064D4CB8 +0x064D4CC0 +0x064D4CC8 +0x064D4CD0 +0x064D4CD8 +0x099B5370 +0x099B5378 +0x099B5380 +0x009BC138 +0x009BC140 +0x18C6F198 +0x18C6F198 +0x1063E108 +0x05EFCBE0 +0x05EFCBE8 +0x05EFCBF0 +0x05EFCBF8 +0x05EFCC00 +0x05EFCC08 +0x05EFCC10 +0x05EFCC18 +0x0E4D1CA8 +0x0E4D1CA8 +0x09E8D3D8 +0x09E8D3E0 +0x09E8D3E8 +0x09E8D3F0 +0x09E8D3F8 +0x09E8D400 +0x09E8D408 +0x09E8D410 +0x03280650 +0x03280658 +0x03280660 +0x03280668 +0x03280670 +0x03280678 +0x03280680 +0x1CFF3A08 +0x1CFF3A10 +0x1CFF3A18 +0x1CFF3A20 +0x1CFF3A28 +0x1CFF3A30 +0x15172A28 +0x15172A30 +0x15172A38 +0x15172A40 +0x15172A48 +0x15172A50 +0x15172A58 +0x08F21218 +0x08F21220 +0x08F21228 +0x08F21230 +0x095C52C0 +0x095C52C8 +0x06D34DD8 +0x06D34DD8 +0x1F2D3EA0 +0x1F2D3EA0 +0x08CA51F0 +0x08CA51F0 +0x040C0828 +0x040C0830 +0x040C0838 +0x040C0840 +0x040C0848 +0x040C0850 +0x09291290 +0x09291290 +0x10142040 +0x10142048 +0x10142050 +0x10142058 +0x10142060 +0x10142068 +0x10142070 +0x1380A730 +0x1380A738 +0x1380A740 +0x1380A748 +0x1380A750 +0x1ECCFDA0 +0x1ECCFDA8 +0x1ECCFDB0 +0x13AF2760 +0x13AF2768 +0x13AF2770 +0x13AF2778 +0x13AF2780 +0x13AF2788 +0x13AF2790 +0x13AF2798 +0x08A05158 +0x08A05158 +0x0B24D670 +0x0B24D670 +0x1F0AFE70 +0x1F0AFE78 +0x1F0AFE80 +0x1F0AFE88 +0x0F6DDEE0 +0x0F6DDEE8 +0x133526A8 +0x186330C0 +0x186330C8 +0x186330D0 +0x186330D8 +0x186330E0 +0x186330E8 +0x186330F0 +0x186330F8 +0x1D6AFB30 +0x1C09F820 +0x1C09F828 +0x1C09F830 +0x1C09F838 +0x1C09F840 +0x1C09F848 +0x035786B0 +0x035786B8 +0x035786C0 +0x035786C8 +0x035786D0 +0x035786D8 +0x09CA93C8 +0x09CA93D0 +0x09CA93D8 +0x0FDADFB0 +0x0FDADFB8 +0x0FDADFC0 +0x0FDADFC8 +0x1592EB28 +0x1592EB30 +0x1592EB38 +0x1592EB40 +0x1592EB48 +0x1592EB50 +0x1592EB58 +0x1592EB60 +0x08B5D1D0 +0x08DFD1C0 +0x08DFD1C8 +0x08DFD1D0 +0x08DFD1D8 +0x08DFD1E0 +0x1C13F828 +0x1C13F828 +0x16FE2E20 +0x16FE2E28 +0x16FE2E30 +0x16FE2E38 +0x16FE2E40 +0x16FE2E48 +0x17B2EF98 +0x17B2EF98 +0x019FC358 +0x019FC360 +0x019FC368 +0x019FC370 +0x019FC378 +0x019FC380 +0x019FC388 +0x060ACC18 +0x060ACC20 +0x0117428E +0x1349E6A0 +0x1349E6A8 +0x1349E6B0 +0x1349E6B8 +0x1349E6C0 +0x1349E6C8 +0x1536EA98 +0x1536EAA0 +0x1536EAA8 +0x1536EAB0 +0x1536EAB8 +0x1BB9B788 +0x1BB9B788 +0x141DE860 +0x141DE860 +0x1402A848 +0x1402A848 +0x092B9270 +0x092B9278 +0x092B9280 +0x092B9288 +0x092B9290 +0x0DA45BB0 +0x0DA45BB8 +0x1FB9BF80 +0x1FB9BF88 +0x1FB9BF90 +0x1FB9BF98 +0x16A56D98 +0x16A56D98 +0x0F90DF20 +0x0F90DF28 +0x0F90DF30 +0x0F90DF38 +0x0F90DF40 +0x0F90DF48 +0x0F90DF50 +0x1F0E3E28 +0x1F0E3E30 +0x1F0E3E38 +0x1F0E3E40 +0x1F0E3E48 +0x0DA5DBA8 +0x0DA5DBB0 +0x0DA5DBB8 +0x06E7CDD0 +0x06E7CDD8 +0x06E7CDE0 +0x04FE0A40 +0x04FE0A48 +0x04FE0A50 +0x0ECB1D90 +0x0ECB1D98 +0x0ECB1DA0 +0x0ECB1DA8 +0x0ECB1DB0 +0x0ECB1DB8 +0x1F3C3ED8 +0x1F3C3EE0 +0x1F3C3EE8 +0x16FAAE00 +0x16FAAE08 +0x16FAAE10 +0x133566B0 +0x133566B8 +0x133566C0 +0x11C2E380 +0x11C2E388 +0x1CF3BA08 +0x1CF3BA10 +0x1CF3BA18 +0x1CF3BA20 +0x1CF3BA28 +0x1CF3BA30 +0x0E165C30 +0x082C1088 +0x082C1088 +0x1D4FBB00 +0x1D4FBB00 +0x1551AAB0 +0x1551AAB0 +0x0BFD1800 +0x0BFD1808 +0x0BFD1810 +0x0BFD1818 +0x0BFD1820 +0x0BFD1828 +0x0BFD1830 +0x1A8C3580 +0x0E7A1CF0 +0x0E7A1CF8 +0x0E7A1D00 +0x0E7A1D08 +0x0E7A1D10 +0x0E7A1D18 +0x0D719AF0 +0x0D719AF0 +0x095552D8 +0x095552E0 +0x095552E8 +0x095552F0 +0x095552F8 +0x09555300 +0x0EFA5DF0 +0x0EFA5DF8 +0x0EFA5E00 +0x1D9EBB48 +0x1D9EBB50 +0x1D9EBB58 +0x1D9EBB60 +0x1D9EBB68 +0x1D9EBB70 +0x1D9EBB78 +0x1D9EBB80 +0x186E30F0 +0x186E30F8 +0x186E3100 +0x186E3108 +0x186E3110 +0x186E3118 +0x15F16C10 +0x15F16C18 +0x15F16C20 +0x15F16C28 +0x15F16C30 +0x15F16C38 +0x15F16C40 +0x15F16C48 +0x1A2BB4A8 +0x1A2BB4A8 +0x1BFBF848 +0x00E741CF +0x00E741D7 +0x00E741DF +0x00E741E7 +0x00E741EF +0x00E741F7 +0x1516EA58 +0x1516EA58 +0x01DC83D2 +0x01DC83DA +0x01DC83E2 +0x01DC83EA +0x01DC83F2 +0x0BA69760 +0x0BA69768 +0x0BA69770 +0x0BA69778 +0x0BA69780 +0x06628CE8 +0x06628CF0 +0x06628CF8 +0x06628D00 +0x06628D08 +0x06628D10 +0x186B7118 +0x186B7120 +0x186B7128 +0x186B7130 +0x186B7138 +0x186B7140 +0x1CC3F980 +0x1CC3F988 +0x1CC3F990 +0x1063A100 +0x1063A108 +0x0C18D830 +0x0C18D838 +0x0C18D840 +0x0C18D848 +0x0C18D850 +0x06A48D88 +0x06A48D88 +0x1322A668 +0x1322A670 +0x1322A678 +0x1322A680 +0x1322A688 +0x19797348 +0x0C255850 +0x0C255858 +0x0C255860 +0x0C255868 +0x11262250 +0x11262258 +0x11262260 +0x11262268 +0x11262270 +0x11262278 +0x11262280 +0x11262288 +0x1D83FB38 +0x1D83FB38 +0x0A9A9570 +0x0A9A9578 +0x0A9A9580 +0x0A9A9588 +0x0A9A9590 +0x08E011C0 +0x08E011C8 +0x0ADA1600 +0x0ADA1600 +0x1EAD7DA8 +0x1EAD7DB0 +0x127564E0 +0x127564E8 +0x127564F0 +0x0DEB1BD8 +0x0DEB1BD8 +0x06E8CDE8 +0x06E8CDF0 +0x06E8CDF8 +0x06E8CE00 +0x06E8CE08 +0x06E8CE10 +0x162AEC88 +0x162AEC88 +0x018D4352 +0x018D4352 +0x0E0F1C68 +0x0E0F1C68 +0x13ADA788 +0x13ADA790 +0x13ADA798 +0x13ADA7A0 +0x13ADA7A8 +0x10996180 +0x10996188 +0x10996190 +0x0C249850 +0x0C249858 +0x0C249860 +0x0ADFD610 +0x0ADFD618 +0x0ADFD620 +0x0ADFD628 +0x1D473A80 +0x1D473A88 +0x1D473A90 +0x1D473A98 +0x0C215848 +0x0C215850 +0x0C215858 +0x0C215860 +0x0C215868 +0x0C215870 +0x0C215878 +0x0C215880 +0x0C215888 +0x0DAF9B60 +0x0DAF9B68 +0x0DAF9B70 +0x0DAF9B78 +0x0DAF9B80 +0x0DAF9B88 +0x0DAF9B90 +0x1BFCB800 +0x1BFCB800 +0x056C8AE0 +0x056C8AE8 +0x056C8AF0 +0x056C8AF8 +0x056C8B00 +0x056C8B08 +0x056C8B10 +0x056C8B18 +0x056C8B20 +0x1AA2B560 +0x1AA2B560 +0x1E35BC60 +0x1E35BC68 +0x1E35BC70 +0x1E35BC78 +0x1E35BC80 +0x1E35BC88 +0x1E35BC90 +0x1E35BC98 +0x08759148 +0x08759150 +0x1512AA20 +0x1512AA28 +0x1512AA30 +0x0D179A70 +0x0D179A70 +0x1D8F3B68 +0x1D8F3B70 +0x1D8F3B78 +0x1D8F3B80 +0x0CAC5960 +0x0CAC5968 +0x0CAC5970 +0x0CAC5978 +0x14ED2A10 +0x14ED2A10 +0x09099218 +0x09099220 +0x09099228 +0x09099230 +0x09099238 +0x09099240 +0x1EF1FE08 +0x1EF1FE08 +0x029A0584 +0x029A0584 +0x167AED18 +0x167AED18 +0x1D59BAE8 +0x1D59BAE8 +0x1878F160 +0x1878F160 +0x086290D0 +0x086290D8 +0x086290E0 +0x086290E8 +0x086290F0 +0x1CDEF9E8 +0x1CDEF9E8 +0x13AF2780 +0x13AF2788 +0x13AF2790 +0x13AF2798 +0x13AF27A0 +0x01144228 +0x01144228 +0x01DC83DA +0x01DC83E2 +0x01DC83EA +0x01DC83F2 +0x01DC83FA +0x01DC8402 +0x01DC840A +0x097612F8 +0x09761300 +0x09761308 +0x09761310 +0x09761318 +0x09761320 +0x09761328 +0x09761330 +0x09761338 +0x11D763C8 +0x11D763C8 +0x02944568 +0x02944570 +0x02944578 +0x02944580 +0x02944588 +0x02944590 +0x096412D0 +0x096412D8 +0x096412E0 +0x0722CE88 +0x0722CE88 +0x037B8708 +0x037B8708 +0x1ADC75F0 +0x1ADC75F8 +0x1ADC7600 +0x1ADC7608 +0x1ADC7610 +0x10002000 +0x1BA17778 +0x1BA17780 +0x1BA17788 +0x1BA17790 +0x1BA17798 +0x1BA177A0 +0x1BE1B7F0 +0x1BE1B7F0 +0x055FCB00 +0x055FCB08 +0x055FCB10 +0x055FCB18 +0x055FCB20 +0x15B7AB60 +0x15B7AB68 +0x15B7AB70 +0x15B7AB78 +0x044688B0 +0x044688B8 +0x044688C0 +0x044688C8 +0x044688D0 +0x044688D8 +0x044688E0 +0x044688E8 +0x044688F0 +0x10DAE1E8 +0x10DAE1E8 +0x1BF0B838 +0x1BF0B838 +0x00B44169 +0x00B44171 +0x00B44179 +0x00B44181 +0x00B44189 +0x00B44191 +0x00B44199 +0x00B441A1 +0x00B441A9 +0x05D48BB8 +0x05D48BC0 +0x05D48BC8 +0x05D48BD0 +0x05D48BD8 +0x05D48BE0 +0x0F24DE60 +0x0F24DE60 +0x12FF6618 +0x12FF6618 +0x122A2488 +0x122A2490 +0x122A2498 +0x122A24A0 +0x122A24A8 +0x06010C00 +0x06010C08 +0x06010C10 +0x1B07B648 +0x1B07B648 +0x013E427C +0x013E427C +0x1E3E3C88 +0x1E3E3C88 +0x0AF5D650 +0x0AF5D650 +0x07420EA8 +0x07420EB0 +0x07420EB8 +0x07420EC0 +0x07420EC8 +0x07420ED0 +0x07420ED8 +0x07420EE0 +0x08E211E0 +0x08E211E8 +0x08E211F0 +0x08E211F8 +0x08E21200 +0x17E3F010 +0x17E3F018 +0x17E3F020 +0x1C31F860 +0x1C31F868 +0x1C31F870 +0x1C31F878 +0x1C31F880 +0x1C31F888 +0x01800338 +0x01800338 +0x1BD937D8 +0x1BD937E0 +0x1BD937E8 +0x1BD937F0 +0x1BD937F8 +0x1BD93800 +0x1BD93808 +0x1BD93810 +0x1BD93818 +0x1A007420 +0x1A007428 +0x1A007430 +0x1A007438 +0x1A007440 +0x1A007448 +0x1A007450 +0x1C367860 +0x1C367868 +0x195AB300 +0x195AB300 +0x0A00D410 +0x0A00D410 +0x1927B298 +0x1927B2A0 +0x1927B2A8 +0x084B1090 +0x084B1098 +0x084B10A0 +0x011D0262 +0x011D026A +0x011D0272 +0x011D027A +0x011D0282 +0x07F55048 +0x07F55048 +0x07974F78 +0x07974F78 +0x17B2EF90 +0x17B2EF98 +0x17B2EFA0 +0x17B2EFA8 +0x17B2EFB0 +0x09B2D3A8 +0x09B2D3A8 +0x0F849F38 +0x0F849F40 +0x0F849F48 +0x0F849F50 +0x0F849F58 +0x19A47398 +0x19A47398 +0x07A34F98 +0x07A34FA0 +0x07A34FA8 +0x1CEAF9E0 +0x1CEAF9E8 +0x1CEAF9F0 +0x1CEAF9F8 +0x01AC0388 +0x01AC0388 +0x1AAC7570 +0x1AAC7570 +0x08EED1E8 +0x08EED1E8 +0x09B5D3C0 +0x09B5D3C0 +0x03D307C8 +0x03D307D0 +0x03D307D8 +0x03D307E0 +0x03D307E8 +0x03D307F0 +0x03D307F8 +0x0C679908 +0x0C679908 +0x13DD67F0 +0x13DD67F0 +0x0A5854E0 +0x0A5854E8 +0x0A5854F0 +0x0A5854F8 +0x0A585500 +0x0A585508 +0x0F161E30 +0x0F161E38 +0x0C4FD8E0 +0x0C4FD8E0 +0x17522EC8 +0x17522ED0 +0x17522ED8 +0x17522EE0 +0x17522EE8 +0x0FC05F98 +0x0FC05F98 +0x0FB71FB8 +0x0FB71FB8 +0x1A82F520 +0x1A82F520 +0x04840960 +0x04840968 +0x11BBE380 +0x11BBE388 +0x11BBE390 +0x11BBE398 +0x121FA490 +0x121FA490 +0x1415E868 +0x1415E870 +0x1415E878 +0x0924D250 +0x0924D258 +0x0924D260 +0x0924D268 +0x0924D270 +0x099B5358 +0x099B5360 +0x099B5368 +0x099B5370 +0x099B5378 +0x1E273C88 +0x1E273C88 +0x1FA17F90 +0x1FA17F90 +0x1A16B430 +0x1A16B430 +0x1F84FF00 +0x1F84FF00 +0x05CA8BF8 +0x05CA8C00 +0x10386080 +0x10386088 +0x10386090 +0x10386098 +0x103860A0 +0x103860A8 +0x103860B0 +0x1F56FEB0 +0x1F56FEB8 +0x1F56FEC0 +0x1F56FEC8 +0x1F56FED0 +0x1F56FED8 +0x1F56FEE0 +0x1D803B60 +0x1D803B60 +0x1A41F488 +0x1A41F490 +0x1A41F498 +0x1A41F4A0 +0x1A41F4A8 +0x1A41F4B0 +0x1A41F4B8 +0x1A41F4C0 +0x1C287860 +0x1C287860 +0x01FEC42E +0x01FEC436 +0x01FEC43E +0x01FEC446 +0x01FEC44E +0x01FEC456 +0x01FEC45E +0x02FCC610 +0x02FCC618 +0x02FCC620 +0x02FCC628 +0x02FCC630 +0x02FCC638 +0x02FCC640 +0x02FCC648 +0x02FCC650 +0x0396474C +0x0396474C +0x1347E698 +0x1347E698 +0x1380A718 +0x1380A718 +0x05E40BF8 +0x05E40BF8 +0x18E2F1F0 +0x18E2F1F8 +0x18E2F200 +0x18E2F208 +0x18E2F210 +0x1302A600 +0x1302A608 +0x11926348 +0x11926350 +0x11926358 +0x11926360 +0x11926368 +0x11926370 +0x11926378 +0x19F3F3E0 +0x039F4760 +0x039F4760 +0x07728F40 +0x07728F48 +0x195BF2C0 +0x195BF2C8 +0x195BF2D0 +0x195BF2D8 +0x0D975B50 +0x0D975B50 +0x0AFC5600 +0x0AFC5608 +0x0AFC5610 +0x0AFC5618 +0x0AFC5620 +0x0AFC5628 +0x0AFC5630 +0x0AFC5638 +0x03060624 +0x0306062C +0x03060634 +0x0306063C +0x03060644 +0x0306064C +0x03060654 +0x05B54B68 +0x05B54B70 +0x0DA25B90 +0x0DA25B90 +0x11DAE3C0 +0x11DAE3C8 +0x11DAE3D0 +0x11DAE3D8 +0x11DAE3E0 +0x11DAE3E8 +0x11DAE3F0 +0x11DAE3F8 +0x14D1E9B0 +0x14D1E9B0 +0x09B5D378 +0x09B5D378 +0x1347E698 +0x1347E698 +0x133566C0 +0x11C2E380 +0x11C2E388 +0x11C2E390 +0x11C2E398 +0x10E22208 +0x10E22210 +0x10E22218 +0x10E22220 +0x10E22228 +0x1D8F3B20 +0x171B2E40 +0x171B2E48 +0x171B2E50 +0x171B2E58 +0x171B2E60 +0x171B2E68 +0x171B2E70 +0x176EAEF8 +0x176EAEF8 +0x03A2879C +0x03A287A4 +0x03A287AC +0x15D32BA0 +0x15D32BA8 +0x15D32BB0 +0x06084C50 +0x06084C58 +0x06084C60 +0x06084C68 +0x06084C70 +0x1228E460 +0x1228E468 +0x14B6A998 +0x14B6A998 +0x14D1E9B0 +0x14D1E9B0 +0x161C6C68 +0x161C6C70 +0x161C6C78 +0x161C6C80 +0x161C6C88 +0x02838528 +0x02838530 +0x02838538 +0x02838540 +0x02838548 +0x02838550 +0x02838558 +0x15E9ABE0 +0x0688CD20 +0x0688CD28 +0x0688CD30 +0x0688CD38 +0x0688CD40 +0x0688CD48 +0x0688CD50 +0x0688CD58 +0x11B9E3A8 +0x11B9E3B0 +0x11B9E3B8 +0x11B9E3C0 +0x11B9E3C8 +0x0BE95808 +0x0BE95810 +0x0BE95818 +0x0BE95820 +0x0BE95828 +0x05CA0B98 +0x05CA0BA0 +0x05CA0BA8 +0x1177A328 +0x1F0E3E20 +0x1F0E3E28 +0x1F0E3E30 +0x1F0E3E38 +0x1063A100 +0x1063A100 +0x14142868 +0x14142870 +0x14142878 +0x14142880 +0x0A42D480 +0x0A42D488 +0x0A42D490 +0x1C24F870 +0x1C24F878 +0x1C24F880 +0x1C24F888 +0x1C24F890 +0x1C24F898 +0x1C24F8A0 +0x0B8E9758 +0x0B8E9758 +0x024B44D8 +0x024B44E0 +0x1032A060 +0x1032A068 +0x1032A070 +0x1032A078 +0x13DAA7E8 +0x13DAA7E8 +0x13696728 +0x13696728 +0x1386A720 +0x1386A728 +0x1386A730 +0x1386A738 +0x1386A740 +0x18F631F8 +0x18F63200 +0x18F63208 +0x18F63210 +0x18F63218 +0x18F63220 +0x0F1A1E30 +0x0F1A1E38 +0x0F1A1E40 +0x0F1A1E48 +0x0F1A1E50 +0x0F1A1E58 +0x09E8D430 +0x00E401C8 +0x00E401D0 +0x00E401D8 +0x00E401E0 +0x00E401E8 +0x00E401F0 +0x196AB2E8 +0x196AB2F0 +0x196AB2F8 +0x196AB300 +0x196AB308 +0x196AB310 +0x196AB318 +0x196AB320 +0x124264C0 +0x124264C8 +0x124264D0 +0x124264D8 +0x124264E0 +0x0094C152 +0x0094C15A +0x0094C162 +0x0094C16A +0x0094C172 +0x0094C17A +0x13D4E7C0 +0x13D4E7C8 +0x13D4E7D0 +0x13D4E7D8 +0x13D4E7E0 +0x1FCC3FA8 +0x1FCC3FA8 +0x1FF2FFF8 +0x1FF30000 +0x1FF30008 +0x1FF30010 +0x1FF30018 +0x1FF30020 +0x1FF30028 +0x0F889F68 +0x1279A500 +0x1279A508 +0x1279A510 +0x1279A518 +0x1279A520 +0x1279A528 +0x1279A530 +0x1279A538 +0x183830B8 +0x183830B8 +0x0D135A60 +0x0D135A60 +0x1DAB3B90 +0x1DAB3B98 +0x1DAB3BA0 +0x1DAB3BA8 +0x1DAB3BB0 +0x1DAB3BB8 +0x08AA51A0 +0x08AA51A0 +0x176EAEF0 +0x176EAEF0 +0x024CC4F8 +0x024CC500 +0x00BCC17A +0x00BCC182 +0x00BCC18A +0x00BCC192 +0x149D2948 +0x149D2948 +0x07520ED8 +0x07520EE0 +0x07520EE8 +0x07520EF0 +0x07520EF8 +0x07520F00 +0x18FB3230 +0x18FB3230 +0x0E9ADD38 +0x0E9ADD40 +0x0E9ADD48 +0x0E9ADD50 +0x0E9ADD58 +0x06DE8DE8 +0x06DE8DF0 +0x06DE8DF8 +0x06DE8E00 +0x06DE8E08 +0x14B6A970 +0x14B6A970 +0x196FF310 +0x196FF310 +0x07F54FF0 +0x07F54FF0 +0x1B2836B0 +0x1B2836B0 +0x0205C424 +0x0205C42C +0x0205C434 +0x0205C43C +0x0205C444 +0x12B8A5A8 +0x12B8A5B0 +0x12B8A5B8 +0x12B8A5C0 +0x12B8A5C8 +0x12B8A5D0 +0x12B8A5D8 +0x0AA25590 +0x0AA25590 +0x00B08179 +0x00B08179 +0x11126278 +0x11126280 +0x15836B00 +0x15836B08 +0x15836B10 +0x15836B18 +0x15836B20 +0x011C8252 +0x011C825A +0x011C8262 +0x011C826A +0x011C8272 +0x011C827A +0x011C8282 +0x011C828A +0x011C8292 +0x036586DC +0x036586DC +0x15D8EBC0 +0x15D8EBC8 +0x15D8EBD0 +0x15D8EBD8 +0x15D8EBE0 +0x18F371E0 +0x18F371E8 +0x18F371F0 +0x18F371F8 +0x18F37200 +0x18F37208 +0x18F37210 +0x18F37218 +0x18F37220 +0x0ECD9DA0 +0x0ECD9DA0 +0x05A4CB70 +0x05A4CB78 +0x05A4CB80 +0x05A4CB88 +0x05A4CB90 +0x05A4CB98 +0x05A4CBA0 +0x1D07FA48 +0x1D07FA48 +0x1D757B08 +0x1D757B10 +0x1D757B18 +0x1D757B20 +0x1D757B28 +0x1D757B30 +0x1D2FFA80 +0x1D2FFA88 +0x1D2FFA90 +0x1D2FFA98 +0x1D2FFAA0 +0x163DECA8 +0x163DECA8 +0x1878F100 +0x1878F108 +0x1878F110 +0x1878F118 +0x1878F120 +0x1878F128 +0x1FA57F50 +0x1FA57F58 +0x1FA57F60 +0x1FA57F68 +0x1FA57F70 +0x1FA57F78 +0x0C9E9998 +0x0C9E9998 +0x1398E758 +0x1398E758 +0x11996348 +0x11996350 +0x11996358 +0x11996360 +0x11996368 +0x11996370 +0x11996378 +0x11996380 +0x11996388 +0x19E273E0 +0x19E273E8 +0x19E273F0 +0x19E273F8 +0x19E27400 +0x19E27408 +0x129B2540 +0x129B2548 +0x129B2550 +0x129B2558 +0x129B2560 +0x129B2568 +0x129B2570 +0x129B2578 +0x0B405698 +0x0B4056A0 +0x0B4056A8 +0x0B4056B0 +0x0B4056B8 +0x06DB0DC8 +0x06DB0DD0 +0x06DB0DD8 +0x06DB0DE0 +0x06DB0DE8 +0x06DB0DF0 +0x06DB0DF8 +0x0F5A5ED0 +0x0F5A5ED0 +0x011C8262 +0x011C8262 +0x14ED29F8 +0x14ED29F8 +0x03EA0824 +0x03EA0824 +0x0DB11B70 +0x0DB11B70 +0x0A6114C0 +0x0A6114C0 +0x14D169C8 +0x14D169C8 +0x15786B30 +0x15786B38 +0x15786B40 +0x15786B48 +0x15786B50 +0x15786B58 +0x15786B60 +0x096212F8 +0x096212F8 +0x0E9A1D48 +0x0E9A1D48 +0x1CDB7A08 +0x1CDB7A08 +0x14BA69B0 +0x14BA69B8 +0x14BA69C0 +0x14BA69C8 +0x14BA69D0 +0x098D9358 +0x098D9360 +0x098D9368 +0x098D9370 +0x18ECF1E0 +0x18ECF1E8 +0x18ECF1F0 +0x01E80400 +0x01E80400 +0x1347E6D0 +0x1347E6D0 +0x14876948 +0x14876948 +0x0636CC70 +0x0636CC78 +0x0636CC80 +0x0636CC88 +0x0636CC90 +0x0636CC98 +0x08D351F0 +0x08D351F0 +0x08A4D178 +0x08A4D180 +0x08A4D188 +0x08A4D190 +0x08A4D198 +0x06C00D80 +0x06C00D88 +0x06C00D90 +0x06C00D98 +0x07E9D028 +0x07E9D030 +0x07E9D038 +0x17F16FE0 +0x17F16FE8 +0x17F16FF0 +0x17F16FF8 +0x17F17000 +0x1D36FA70 +0x1D36FA70 +0x0B225680 +0x0B225688 +0x0B225690 +0x0B225698 +0x0B2256A0 +0x019FC340 +0x019FC348 +0x0BD017C8 +0x0BD017D0 +0x0BD017D8 +0x0BD017E0 +0x0BD017E8 +0x0BD017F0 +0x0BD017F8 +0x0BD01800 +0x161AEC98 +0x161AEC98 +0x092E9280 +0x092E9288 +0x092E9290 +0x092E9298 +0x092E92A0 +0x1D7CFB18 +0x1D7CFB18 +0x09F093F0 +0x09F093F0 +0x199AB398 +0x17ACAF60 +0x17ACAF68 +0x17ACAF70 +0x17ACAF78 +0x17ACAF80 +0x17ACAF88 +0x011D026A +0x011D026A +0x18AC3198 +0x18AC31A0 +0x18AC31A8 +0x18AC31B0 +0x18AC31B8 +0x18AC31C0 +0x15DEABC0 +0x15DEABC8 +0x03D247A4 +0x03D247A4 +0x019FC358 +0x019FC360 +0x019FC368 +0x019FC370 +0x019FC378 +0x1066A0E0 +0x1066A0E0 +0x167AED00 +0x167AED00 +0x0817D078 +0x0817D078 +0x10E2A200 +0x10E2A208 +0x10E2A210 +0x10E2A218 +0x10E2A220 +0x10E2A228 +0x1F52BEA8 +0x1F52BEA8 +0x0B6DD740 +0x09325260 +0x09325268 +0x09325270 +0x09325278 +0x09325280 +0x09325288 +0x09325290 +0x09325298 +0x1869B108 +0x1869B110 +0x1869B118 +0x1869B120 +0x1869B128 +0x0C3618B0 +0x0C3618B8 +0x0C3618C0 +0x0C3618C8 +0x0C3618D0 +0x0D6A5B00 +0x0D6A5B08 +0x0D6A5B10 +0x0D6A5B18 +0x0D6A5B20 +0x0D6A5B28 +0x06164C30 +0x06164C38 +0x06164C40 +0x0BA95758 +0x0BA95760 +0x0BA95768 +0x0BA95770 +0x0BA95778 +0x0BA95780 +0x1D91BB68 +0x1D91BB68 +0x16636CD8 +0x16636CE0 +0x16636CE8 +0x16636CF0 +0x16636CF8 +0x16636D00 +0x16636D08 +0x16636D10 +0x06A60D90 +0x06A60D98 +0x06A60DA0 +0x06A60DA8 +0x06A60DB0 +0x05A4CB48 +0x05A4CB50 +0x084B10A0 +0x084B10A8 +0x084B10B0 +0x084B10B8 +0x084B10C0 +0x084B10C8 +0x084B10D0 +0x0F9F5F68 +0x0F9F5F70 +0x0F9F5F78 +0x0F9F5F80 +0x0F9F5F88 +0x156C6B38 +0x156C6B40 +0x1195E320 +0x1195E328 +0x1195E330 +0x1195E338 +0x1195E340 +0x1195E348 +0x1B31F678 +0x1B31F680 +0x1B31F688 +0x1B31F690 +0x1B31F698 +0x1B31F6A0 +0x1B31F6A8 +0x06A2CD90 +0x06A2CD98 +0x06A2CDA0 +0x06A2CDA8 +0x191AF240 +0x191AF248 +0x191AF250 +0x111B2290 +0x111B2290 +0x173DAEB8 +0x173DAEC0 +0x173DAEC8 +0x173DAED0 +0x173DAED8 +0x173DAEE0 +0x173DAEE8 +0x09A8D360 +0x09A8D368 +0x09A8D370 +0x09A8D378 +0x09A8D380 +0x023F44B8 +0x023F44C0 +0x023F44C8 +0x023F44D0 +0x023F44D8 +0x023F44E0 +0x023DC4E4 +0x1F46BE80 +0x1F46BE88 +0x1F46BE90 +0x1F46BE98 +0x1F46BEA0 +0x1FA17F40 +0x1FA17F40 +0x1FABFF80 +0x1FABFF88 +0x1FABFF90 +0x1FABFF98 +0x1FABFFA0 +0x1FABFFA8 +0x1FABFFB0 +0x0A32D468 +0x0A32D468 +0x1A3AB488 +0x1A3AB490 +0x1A3AB498 +0x1A3AB4A0 +0x1A3AB4A8 +0x1A3AB4B0 +0x1A3AB4B8 +0x1A3AB4C0 +0x1A3AB4C8 +0x1B31F6A0 +0x1B31F6A8 +0x1666ECC0 +0x1666ECC8 +0x1666ECD0 +0x0B4816E0 +0x0B4816E8 +0x13926720 +0x13926728 +0x13926730 +0x13926738 +0x13926740 +0x13926748 +0x108C6158 +0x108C6160 +0x108C6168 +0x108C6170 +0x1E333C60 +0x1E333C68 +0x0CF85A00 +0x0CF85A00 +0x11792328 +0x11792328 +0x11ACE3A0 +0x11ACE3A8 +0x050E0A20 +0x050E0A28 +0x050E0A30 +0x050E0A38 +0x050E0A40 +0x050E0A48 +0x050E0A50 +0x09485290 +0x09485298 +0x094852A0 +0x094852A8 +0x094852B0 +0x07B34FA0 +0x07B34FA8 +0x07B34FB0 +0x07B34FB8 +0x07B34FC0 +0x07B34FC8 +0x1E2C7C60 +0x1E2C7C68 +0x0E8C9D40 +0x0E8C9D48 +0x0E8C9D50 +0x0E8C9D58 +0x0E8C9D60 +0x0E8C9D68 +0x0E8C9D70 +0x08E491D8 +0x08E491E0 +0x08E491E8 +0x08E491F0 +0x08E491F8 +0x187BB108 +0x187BB110 +0x187BB118 +0x187BB120 +0x187BB128 +0x187BB130 +0x13A4A788 +0x13A4A788 +0x08B31160 +0x08B31168 +0x08B31170 +0x08B31178 +0x08B31180 +0x08B31188 +0x05BF4B88 +0x05BF4B90 +0x05BF4B98 +0x05BF4BA0 +0x05BF4BA8 +0x05BF4BB0 +0x085A50F0 +0x085A50F0 +0x08E8D1E0 +0x08E8D1E8 +0x08E8D1F0 +0x08E8D1F8 +0x08E8D200 +0x08E8D208 +0x08E8D210 +0x08E8D218 +0x08E8D220 +0x10D5A1B0 +0x10D5A1B0 +0x06848D48 +0x06848D48 +0x1516EA60 +0x1516EA60 +0x103520A0 +0x103520A8 +0x103520B0 +0x103520B8 +0x1FBE7F80 +0x0188833A +0x01888342 +0x0188834A +0x01888352 +0x0188835A +0x01888362 +0x0188836A +0x025244CC +0x025244CC +0x11706330 +0x11706338 +0x11706340 +0x11706348 +0x16F4EDE0 +0x16F4EDE8 +0x16F4EDF0 +0x04E289F0 +0x04E289F8 +0x04E28A00 +0x04E28A08 +0x04E28A10 +0x1CD8F9C0 +0x1F8ABF80 +0x1F8ABF80 +0x1A41F480 +0x1A41F488 +0x1A41F490 +0x1A41F498 +0x1A41F4A0 +0x1A41F4A8 +0x1A41F4B0 +0x1582EB38 +0x1582EB38 +0x09F91430 +0x09F91438 +0x09F91440 +0x09F91448 +0x1C6AB8E0 +0x1C6AB8E8 +0x1C6AB8F0 +0x1C6AB8F8 +0x0E165C60 +0x0E165C60 +0x10752120 +0x10752120 +0x0DC35B98 +0x0DC35BA0 +0x0DC35BA8 +0x0DC35BB0 +0x0DC35BB8 +0x0DC35BC0 +0x0DC35BC8 +0x0DC35BD0 +0x059F8B40 +0x1FFF0058 +0x1FFF0058 +0x05DCCBE8 +0x05DCCBF0 +0x05DCCBF8 +0x05DCCC00 +0x05DCCC08 +0x05DCCC10 +0x1BC3B780 +0x1BC3B788 +0x1BC3B790 +0x1BC3B798 +0x1BC3B7A0 +0x1BC3B7A8 +0x126CE520 +0x126CE528 +0x126CE530 +0x036906D4 +0x036906DC +0x0FCD1FA0 +0x0FCD1FA8 +0x0FCD1FB0 +0x0FCD1FB8 +0x0FCD1FC0 +0x0FCD1FC8 +0x0FCD1FD0 +0x0FCD1FD8 +0x08FA9230 +0x08FA9230 +0x1C367898 +0x1C3678A0 +0x1C3678A8 +0x1C3678B0 +0x18BFF180 +0x18BFF188 +0x18BFF190 +0x18BFF198 +0x1D027A40 +0x1D027A48 +0x1D027A50 +0x07728EE8 +0x07728EF0 +0x07728EF8 +0x07728F00 +0x07728F08 +0x07728F10 +0x06C00D88 +0x06C00D90 +0x06C00D98 +0x06C00DA0 +0x06C00DA8 +0x06C00DB0 +0x06C00DB8 +0x06C00DC0 +0x06C00DC8 +0x08FD5230 +0x08FD5238 +0x08FD5240 +0x08FD5248 +0x08FD5250 +0x1C4838A0 +0x1C4838A8 +0x1C4838B0 +0x1C4838B8 +0x19113280 +0x0B3A5670 +0x0B3A5678 +0x0B3A5680 +0x0B3A5688 +0x0B3A5690 +0x1A91F568 +0x1A91F568 +0x12EA65F8 +0x12EA6600 +0x12EA6608 +0x12EA6610 +0x12EA6618 +0x12EA6620 +0x12EA6628 +0x1E3AFC80 +0x1BE4F7F8 +0x1BE4F800 +0x1BE4F808 +0x1BE4F810 +0x1BE4F818 +0x1BE4F820 +0x1BE4F828 +0x0C361870 +0x0C361878 +0x1F56FEC0 +0x1F56FEC8 +0x1F56FED0 +0x1F56FED8 +0x1F56FEE0 +0x186330D8 +0x186330E0 +0x186330E8 +0x186330F0 +0x186330F8 +0x18633100 +0x10FE2260 +0x10FE2260 +0x05404AA8 +0x05404AB0 +0x05404AB8 +0x05404AC0 +0x05404AC8 +0x05404AD0 +0x0A4AD490 +0x0A4AD498 +0x0A4AD4A0 +0x0A4AD4A8 +0x0A4AD4B0 +0x0A4AD4B8 +0x0A4AD4C0 +0x0A4AD4C8 +0x0A4AD4D0 +0x1C74B8E0 +0x1C74B8E8 +0x1C74B8F0 +0x1C74B8F8 +0x1C74B900 +0x1C74B908 +0x1C74B910 +0x1C74B918 +0x1C74B920 +0x07BF8FC8 +0x07BF8FC8 +0x16A56D68 +0x16A56D68 +0x0AB39598 +0x0AB395A0 +0x0AB395A8 +0x0AB395B0 +0x0AB395B8 +0x0AB395C0 +0x02C34588 +0x02C34590 +0x02C34598 +0x00880140 +0x00880140 +0x013E82C6 +0x013E82CE +0x013E82D6 +0x013E82DE +0x013E82E6 +0x1CF17A00 +0x1CF17A00 +0x16C4AD80 +0x16C4AD80 +0x1D49BAD8 +0x1D49BAE0 +0x1D49BAE8 +0x1D49BAF0 +0x1D49BAF8 +0x1D49BB00 +0x05B7CB70 +0x0A4AD4A0 +0x0A4AD4A8 +0x0A4AD4B0 +0x0A4AD4B8 +0x0A4AD4C0 +0x06E80DD0 +0x06E80DD0 +0x1380A718 +0x1380A718 +0x1590AB38 +0x1590AB40 +0x1590AB48 +0x1590AB50 +0x1590AB58 +0x1590AB60 +0x1590AB68 +0x00C401A0 +0x00C401A0 +0x01ADC384 +0x01ADC38C +0x01ADC394 +0x01ADC39C +0x01ADC3A4 +0x01ADC3AC +0x01ADC3B4 +0x0EEB5DD0 +0x0EEB5DD0 +0x1E3E7CC0 +0x1E3E7CC8 +0x1E3E7CD0 +0x15842B00 +0x15842B08 +0x1F18BE70 +0x1F18BE70 +0x04A38988 +0x04A38990 +0x04A38998 +0x04A389A0 +0x04A389A8 +0x10ACE160 +0x10ACE168 +0x10ACE170 +0x02368484 +0x0236848C +0x02368494 +0x0236849C +0x023684A4 +0x1A377470 +0x1A377470 +0x18CAB1D8 +0x18CAB1D8 +0x186B7140 +0x186B7140 +0x05B7CB90 +0x05B7CB90 +0x08CA51B0 +0x08CA51B8 +0x08CA51C0 +0x08CA51C8 +0x08CA51D0 +0x08CA51D8 +0x08CA51E0 +0x1D73BB20 +0x1D73BB28 +0x1D73BB30 +0x1D73BB38 +0x11FBE400 +0x11FBE408 +0x11FBE410 +0x11FBE418 +0x1F4F7EA0 +0x1F4F7EA8 +0x1F4F7EB0 +0x1F4F7EB8 +0x1F4F7EC0 +0x0A1B1460 +0x0A1B1468 +0x0A1B1470 +0x0A1B1478 +0x0A1B1480 +0x0B7616F0 +0x06E54E08 +0x06E54E08 +0x09FD1440 +0x09FD1440 +0x16C9EDC8 +0x16C9EDC8 +0x02C9459C +0x02C945A4 +0x02C945AC +0x02C945B4 +0x02C945BC +0x02C945C4 +0x02C945CC +0x196FF318 +0x196FF318 +0x07A8CF98 +0x07A8CFA0 +0x10936120 +0x10936128 +0x10936130 +0x1B09B658 +0x1B09B658 +0x1D5DFAF0 +0x1D5DFAF0 +0x0E971D78 +0x0E971D80 +0x0E971D88 +0x071ECE40 +0x071ECE48 +0x071ECE50 +0x071ECE58 +0x071ECE60 +0x071ECE68 +0x093A92C8 +0x093A92C8 +0x069D4D48 +0x069D4D48 +0x11796320 +0x11796328 +0x11796330 +0x11796338 +0x11796340 +0x01ED8404 +0x01ED8404 +0x12C6E590 +0x12C6E598 +0x12C6E5A0 +0x12C6E5A8 +0x12C6E5B0 +0x12C6E5B8 +0x12C6E5C0 +0x12C6E5C8 +0x12C6E5D0 +0x1798EF70 +0x1798EF78 +0x1798EF80 +0x1798EF88 +0x1798EF90 +0x1041E0A0 +0x1041E0A8 +0x1041E0B0 +0x1041E0B8 +0x1041E0C0 +0x1041E0C8 +0x0D4E5AA8 +0x0D4E5AB0 +0x0D4E5AB8 +0x0D4E5AC0 +0x0D4E5AC8 +0x0D4E5AD0 +0x15C6AB88 +0x15C6AB88 +0x0B4816D0 +0x0B4816D8 +0x0B4816E0 +0x0B4816E8 +0x13926720 +0x13926728 +0x13926730 +0x13926738 +0x13926740 +0x08111020 +0x08111020 +0x0C56D8F0 +0x0C56D8F8 +0x0C56D900 +0x06918D20 +0x06918D28 +0x06918D30 +0x08071038 +0x08071040 +0x08071048 +0x08071050 +0x08071058 +0x14992948 +0x14992950 +0x14992958 +0x14992960 +0x14992968 +0x14992970 +0x03154684 +0x1640EC80 +0x1640EC88 +0x1640EC90 +0x1640EC98 +0x001CC049 +0x001CC051 +0x001CC059 +0x001CC061 +0x001CC069 +0x08D311D0 +0x08D311D8 +0x08D311E0 +0x08D311E8 +0x08D311F0 +0x08D311F8 +0x1BC6B780 +0x1BC6B788 +0x04F40A08 +0x04F40A10 +0x04F40A18 +0x04F40A20 +0x04F40A28 +0x04F40A30 +0x04F40A38 +0x0FCC9FF0 +0x0FCC9FF0 +0x1D29FAB0 +0x1D29FAB8 +0x06B84D70 +0x06B84D78 +0x06B84D80 +0x06B84D88 +0x1F0DFE40 +0x1F0DFE40 +0x058C4B28 +0x058C4B28 +0x02854524 +0x02854524 +0x0AF2D628 +0x1B7C7700 +0x1B7C7708 +0x1B7C7710 +0x1B7C7718 +0x1B7C7720 +0x1F3D7EA0 +0x1F3D7EA8 +0x1F3D7EB0 +0x1F3D7EB8 +0x1F3D7EC0 +0x1F3D7EC8 +0x1F3D7ED0 +0x0DEF1C00 +0x0DEF1C08 +0x0DEF1C10 +0x0DEF1C18 +0x0DEF1C20 \ No newline at end of file From 327083e5c55680ff7263a84b8763ed19b5b21d4c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 11 Apr 2022 17:28:52 +0800 Subject: [PATCH 0739/2002] Committed 2022/04/11 --- Supplementary materials/pandas/Excel_sheet_shape.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Supplementary materials/pandas/Excel_sheet_shape.py b/Supplementary materials/pandas/Excel_sheet_shape.py index 462ccc4d..3c4b6e4f 100644 --- a/Supplementary materials/pandas/Excel_sheet_shape.py +++ b/Supplementary materials/pandas/Excel_sheet_shape.py @@ -2,5 +2,9 @@ df = pd.read_csv("trace.txt", delimiter="\t") +print(df.shape) + # Reference: # 1. https://stackoverflow.com/a/51067912/ +# 2. https://www.adamsmith.haus/python/answers/how-to-find-the-total-number-of-rows-and-columns-of-an-excel-spreadsheet-in-python +# 3. https://www.google.com/search?q=find+total+number+of+columns+in+excel+with+python From a144cdefecbffdc79130a9588ec6aacb6833160d Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 29 Apr 2022 09:15:50 +0800 Subject: [PATCH 0740/2002] Committed 2022/04/29 --- .../Monthly_total_job_openings_by_region/April2014.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014.py new file mode 100644 index 00000000..e69de29b From bff54758b196497975cc022a0d7fd3f5d2fa84fd Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 29 Apr 2022 09:23:35 +0800 Subject: [PATCH 0741/2002] Committed 2022/04/29 --- .../April2014.py | 0 .../April2014_metro.py | 27 +++++++++++++++++++ 2 files changed, 27 insertions(+) delete mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014.py deleted file mode 100644 index e69de29b..00000000 diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014_metro.py new file mode 100644 index 00000000..f35a5d41 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/April2014_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [96973, 39547, 26732+5221+1628, 1797+2514+11186, 15584+1740] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2014/04 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20140403201635/http://www.104.com.tw:80/jb/category/?cat=2") + +plt.ylim(10000, 100000) + +plt.show() From 8dcb0842711ce9c2133920ad34f97f41b37690c0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 29 Apr 2022 09:29:28 +0800 Subject: [PATCH 0742/2002] Committed 2022/04/29 --- .../2022/April/Metro_area.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area.py index e69de29b..701dd604 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [179197, 89380, 76630, 39687, 40032] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2022/04 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20220428163845/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(35000, 165000) + +plt.show() From 8f592b03aa5eb7eb2e7f4eb7a87574b01f031ddb Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 29 Apr 2022 23:40:30 +0800 Subject: [PATCH 0743/2002] Committed 2022/04/29 --- .../May2014.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py new file mode 100644 index 00000000..f35a5d41 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [96973, 39547, 26732+5221+1628, 1797+2514+11186, 15584+1740] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2014/04 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20140403201635/http://www.104.com.tw:80/jb/category/?cat=2") + +plt.ylim(10000, 100000) + +plt.show() From 7da960f26532500138b645bf1d191f64fc2305da Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 29 Apr 2022 23:55:22 +0800 Subject: [PATCH 0744/2002] Committed 2022/04/29 --- .../Monthly_total_job_openings_by_region/May2014.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py index f35a5d41..fb2366a3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5] -position_vacancies = [96973, 39547, 26732+5221+1628, 1797+2514+11186, 15584+1740] +position_vacancies = [102089, 41530, 27916+5399+1760, 1895+2715+12282, 16930+1882] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] @@ -17,10 +17,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2014/04 the number of job openings in Taiwan by metro") +plt.title("2014/05 the number of job openings in Taiwan by metro") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20140403201635/http://www.104.com.tw:80/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20140528071247/http://www.104.com.tw:80/jb/category/?cat=2") plt.ylim(10000, 100000) From 628677bae5eafa3a06fc7163cdc1a4ce1de48d10 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 30 Apr 2022 00:01:10 +0800 Subject: [PATCH 0745/2002] Committed 2022/04/29 --- .../Monthly_total_job_openings_by_region/July2014.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014.py new file mode 100644 index 00000000..e69de29b From 64e3b62fc7a78cd57e57ef9c63cecaf59236fcf3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 30 Apr 2022 00:02:04 +0800 Subject: [PATCH 0746/2002] Committed 2022/04/29 --- .../{July2014.py => July2014_metro.py} | 0 .../{May2014.py => May2014_metro.py} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/{July2014.py => July2014_metro.py} (100%) rename The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/{May2014.py => May2014_metro.py} (100%) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py similarity index 100% rename from The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014.py rename to The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014_metro.py similarity index 100% rename from The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014.py rename to The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/May2014_metro.py From 9d7f5c0f70c7fb3fbb3a9fda3970f72d0121fe81 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 30 Apr 2022 00:04:42 +0800 Subject: [PATCH 0747/2002] Committed 2022/04/29 --- .../July2014_metro.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py index e69de29b..7948da9e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [102089, 41530, 27916+5399+1760, 1895+2715+12282, 16930+1882] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2014/07 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20140528071247/http://www.104.com.tw:80/jb/category/?cat=2") + +plt.ylim(10000, 100000) + +plt.show() From 6752a3c41fc3968c46a9f5485264336c23b7246e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 30 Apr 2022 00:30:45 +0800 Subject: [PATCH 0748/2002] Committed 2022/04/29 --- .../Monthly_total_job_openings_by_region/July2014_metro.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py index 7948da9e..dfc744b6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/July2014_metro.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5] -position_vacancies = [102089, 41530, 27916+5399+1760, 1895+2715+12282, 16930+1882] +position_vacancies = [103968, 42281, 28171+5630+1821, 1903+2806+12377, 16746+1861] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] @@ -20,7 +20,7 @@ plt.title("2014/07 the number of job openings in Taiwan by metro") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20140528071247/http://www.104.com.tw:80/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20140702121714/http://www.104.com.tw:80/jb/category/?cat=2") plt.ylim(10000, 100000) From 48d40bdd4cf6aa30536158d23a33e357c7643bb9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 30 Apr 2022 00:32:58 +0800 Subject: [PATCH 0749/2002] Committed 2022/04/29 --- .../August2014_metro.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/August2014_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/August2014_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/August2014_metro.py new file mode 100644 index 00000000..dfc744b6 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/August2014_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [103968, 42281, 28171+5630+1821, 1903+2806+12377, 16746+1861] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2014/07 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20140702121714/http://www.104.com.tw:80/jb/category/?cat=2") + +plt.ylim(10000, 100000) + +plt.show() From 346d2cf4d5ce01eb4b8ef3d3d0035f1b4a50c471 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 30 Apr 2022 00:40:08 +0800 Subject: [PATCH 0750/2002] Committed 2022/04/29 --- .../August2014_metro.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/August2014_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/August2014_metro.py index dfc744b6..9e3eef2a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/August2014_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/August2014_metro.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5] -position_vacancies = [103968, 42281, 28171+5630+1821, 1903+2806+12377, 16746+1861] +position_vacancies = [102374, 41655, 27355+5579+1760, 1829+2691+11944, 16107+1852] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] @@ -17,10 +17,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2014/07 the number of job openings in Taiwan by metro") +plt.title("2014/08 the number of job openings in Taiwan by metro") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20140702121714/http://www.104.com.tw:80/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20140803070255/http://www.104.com.tw:80/jb/category/?cat=2") plt.ylim(10000, 100000) From f5a28f614bbbaf0c5840d361dc3db5bce93a2be2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 30 Apr 2022 00:46:27 +0800 Subject: [PATCH 0751/2002] Committed 2022/04/29 --- .../September2014_metro.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_metro.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_metro.py new file mode 100644 index 00000000..8f5a5668 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_metro.py @@ -0,0 +1,27 @@ +import matplotlib.pyplot as plt + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [104132, 42632, 27355+5579+1760, 1829+2691+11944, 16107+1852] + +label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", + "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2014/08 the number of job openings in Taiwan by metro") + +# plt.ylabel("") +plt.xlabel("Reference: https://web.archive.org/web/20140803070255/http://www.104.com.tw:80/jb/category/?cat=2") + +plt.ylim(10000, 100000) + +plt.show() From 562dfa6f6a3b05f7b0d255f289d87cba752fea6c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 30 Apr 2022 00:50:11 +0800 Subject: [PATCH 0752/2002] Committed 2022/04/29 --- .../September2014_metro.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_metro.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_metro.py index 8f5a5668..53536505 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_metro.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/September2014_metro.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt region_num = [1, 2, 3, 4, 5] -position_vacancies = [104132, 42632, 27355+5579+1760, 1829+2691+11944, 16107+1852] +position_vacancies = [104132, 42632, 27710+5539+1697, 1856+2674+12300, 16584+1827] label = ["Greater Taipei", "Taoyuan\nHsinchu\nMiaoli", "Taichung\nChanghua\nNantou", "Yunlin\nChiayi\nTainan", "Kaohsiung\nPingtung"] @@ -17,10 +17,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2014/08 the number of job openings in Taiwan by metro") +plt.title("2014/09 the number of job openings in Taiwan by metro") # plt.ylabel("") -plt.xlabel("Reference: https://web.archive.org/web/20140803070255/http://www.104.com.tw:80/jb/category/?cat=2") +plt.xlabel("Reference: https://web.archive.org/web/20140903150508/http://www.104.com.tw:80/jb/category/?cat=2") plt.ylim(10000, 100000) From f619a73147e8f2e3f0690305260f9ddfba4c3f39 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 30 Apr 2022 19:02:46 +0800 Subject: [PATCH 0753/2002] Committed 2022/04/30 --- .../2022/April/Metro_area_ZH_JP.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py index e69de29b..8bf4e257 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt +import matplotlib +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [179197, 89380, 76630, 39687, 40032] + +label = ["憭批啣", "獢\n啁姘\n", "唬葉T\n敶啣\n", + "脫\n蝢坼n啣", "擃\n撅"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom') + +plt.title("2022/04 啁瘣餃瑞撩貊絞閮\n the number of job openings in Taiwan by metro", fontproperties="MS Gothic") + +# plt.ylabel("") +plt.xlabel("鞈: https://web.archive.org/web/20220428163845/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(35000, 165000) + +plt.show() From 6759286a24261a372855bdcb7482ed5cc16d2b49 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 30 Apr 2022 19:07:21 +0800 Subject: [PATCH 0754/2002] Committed 2022/04/30 --- .../2022/April/Metro_area_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py index 8bf4e257..69c9c0f6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py @@ -8,7 +8,7 @@ region_num = [1, 2, 3, 4, 5] position_vacancies = [179197, 89380, 76630, 39687, 40032] -label = ["憭批啣", "獢\n啁姘\n", "唬葉T\n敶啣\n", +label = ["憭批啣", "獢\n啁姘\n", "唬葉\n敶啣\n", "脫\n蝢坼n啣", "擃\n撅"] fig, ax = plt.subplots(figsize=(9, 8)) From 7aee97fc333d0989b2b7cbc42c816f1a215381eb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 30 Apr 2022 19:10:11 +0800 Subject: [PATCH 0755/2002] Committed 2022/04/30 --- .../2022/April/Metro_area_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py index 69c9c0f6..da39a362 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py @@ -22,7 +22,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom') -plt.title("2022/04 啁瘣餃瑞撩貊絞閮\n the number of job openings in Taiwan by metro", fontproperties="MS Gothic") +plt.title("2022/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontproperties="MS Gothic") # plt.ylabel("") plt.xlabel("鞈: https://web.archive.org/web/20220428163845/https://www.104.com.tw/jb/category/?cat=2") From e160e06a91669181ee6ae082047d56f9e463ed14 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 30 Apr 2022 19:25:43 +0800 Subject: [PATCH 0756/2002] Committed 2022/04/30 --- .../2022/April/Metro_area_ZH_JP.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py index da39a362..1e6841fa 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py @@ -12,7 +12,7 @@ "脫\n蝢坼n啣", "擃\n撅"] fig, ax = plt.subplots(figsize=(9, 8)) -plt.xticks(region_num, labels=label, rotation=7) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plot = ax.bar(region_num, position_vacancies) @@ -20,9 +20,9 @@ for rect in plot: height = rect.get_height() ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, - '%d' % int(height), ha='center', va='bottom') + '%d' % int(height), ha='center', va='bottom', fontsize=12) # [1] -plt.title("2022/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontproperties="MS Gothic") +plt.title("2022/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] # plt.ylabel("") plt.xlabel("鞈: https://web.archive.org/web/20220428163845/https://www.104.com.tw/jb/category/?cat=2") @@ -30,3 +30,6 @@ plt.ylim(35000, 165000) plt.show() + +# Reference: +# 1. https://stackoverflow.com/a/12444777/ \ No newline at end of file From 4f8c96dc83709074a656e03f56601cde0f2e7bec Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 30 Apr 2022 20:51:59 +0800 Subject: [PATCH 0757/2002] Committed 2022/04/30 --- .../2022/April/Metro_area_ZH_JP.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py index 1e6841fa..051b45d4 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_ZH_JP.py @@ -14,6 +14,7 @@ fig, ax = plt.subplots(figsize=(9, 8)) plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] plot = ax.bar(region_num, position_vacancies) @@ -32,4 +33,5 @@ plt.show() # Reference: -# 1. https://stackoverflow.com/a/12444777/ \ No newline at end of file +# 1. https://stackoverflow.com/a/12444777/ +# 2. https://stackoverflow.com/a/11386056/ \ No newline at end of file From 88c42e25f88debf2e1078587045a38074c23af2d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 30 Apr 2022 21:04:25 +0800 Subject: [PATCH 0758/2002] Committed 2022/04/30 --- .../2022/April/Metro_area_EN_ZH_JP.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_EN_ZH_JP.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_EN_ZH_JP.py new file mode 100644 index 00000000..32c6e34e --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_EN_ZH_JP.py @@ -0,0 +1,37 @@ +import matplotlib.pyplot as plt +import matplotlib +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [179197, 89380, 76630, 39687, 40032] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 8)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) # [1] + +plt.title("2022/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220428163845/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(35000, 165000) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/a/12444777/ +# 2. https://stackoverflow.com/a/11386056/ \ No newline at end of file From d851ceb99717eceb4d80b976b6acdcbc6a0ed3ca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 30 Apr 2022 21:09:10 +0800 Subject: [PATCH 0759/2002] Committed 2022/04/30 --- .../2022/April/Metro_area_EN_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_EN_ZH_JP.py index 32c6e34e..d3ab00c3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/April/Metro_area_EN_ZH_JP.py @@ -11,7 +11,7 @@ label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] -fig, ax = plt.subplots(figsize=(9, 8)) +fig, ax = plt.subplots(figsize=(9, 9)) plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plt.tick_params(axis='y', labelsize=12) # [2] From 50579640ef937c7cd0be3b1f4ddddd92be62a72d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 3 May 2022 13:36:53 +0800 Subject: [PATCH 0760/2002] Committed 2022/05/03 --- ...osition in history 10 (2022_first_half).py | 169 ++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Population composition in history 10 (2022_first_half).py diff --git a/The attainments and realizations of my dreams/Historical population composition/Population composition in history 10 (2022_first_half).py b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 10 (2022_first_half).py new file mode 100644 index 00000000..e0d3e753 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Population composition in history 10 (2022_first_half).py @@ -0,0 +1,169 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + + +south = np.array(southTW) +central = np.array(centralTW) +north = np.array(northTW) +east = np.array(eastTW) +outlying = np.array(outlyingTW) + +print(south) +print(central) +print(north) +print(east) +print(outlying) + +Total1940 = south[0] + central[0] + north[0] + east[0] + outlying[0] +Total1956 = south[1] + central[1] + north[1] + east[1] + outlying[1] +Total1960 = south[2] + central[2] + north[2] + east[2] + outlying[2] +Total1970 = south[3] + central[3] + north[3] + east[3] + outlying[3] +Total1980 = south[4] + central[4] + north[4] + east[4] + outlying[4] +Total1990 = south[5] + central[5] + north[5] + east[5] + outlying[5] +Total2000 = south[6] + central[6] + north[6] + east[6] + outlying[6] +Total2010 = south[7] + central[7] + north[7] + east[7] + outlying[7] +Total2015 = south[12] + central[12] + north[12] + east[12] + outlying[12] +Total2020 = south[17] + central[17] + north[17] + east[17] + outlying[17] +Total2021 = south[18] + central[18] + north[18] + east[18] + outlying[18] + +totality = [Total1940, Total1956, Total1960, Total1970, Total1980, Total1990, Total2000, Total2010, Total2020, Total2021] + +print(totality) + +cm = 1 / 2.54 + +plt.figure(figsize=(28 * cm, 15 * cm)) + +plt.bar(year, south, color='g', label="South Taiwan", align='edge', + width=0.3) # Adjusting the spacing between bars. [1] +plt.bar(year, central, color='y', bottom=south, label="Central Taiwan", align='edge', width=0.3) +plt.bar(year, north, color='b', bottom=south + central, label="North Taiwan", align='edge', width=0.3) +plt.bar(year, east, color='r', bottom=south + central + north, label="Eastern Taiwan", align='edge', width=0.3) +plt.bar(year, outlying, color='k', bottom=south + central + north + east, label="Outlying Islands", align='edge', + width=0.3) + +# get the current axes and store it to ax +axes = plt.gca() + +axes.yaxis.set_major_locator(ticker.MultipleLocator(5000000)) +axes.yaxis.set_minor_locator(ticker.MultipleLocator(1000000)) + +plt.xticks(rotation=27) +plt.xlabel('Year') +plt.ylabel('Population (Unit: 10 millions)') +plt.title("The composition of Taiwan's population in history") +plt.legend() + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/40575741/14900011 From f4af6efb44ae47a3421218aebc4f46ac8e8b349b Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 9 May 2022 13:09:34 +0800 Subject: [PATCH 0761/2002] Committed 2022/05/09 --- NetworkX Altas/Primary_input_output.py | 120 +++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output.py diff --git a/NetworkX Altas/Primary_input_output.py b/NetworkX Altas/Primary_input_output.py new file mode 100644 index 00000000..c360d077 --- /dev/null +++ b/NetworkX Altas/Primary_input_output.py @@ -0,0 +1,120 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) From 8f51d7abf6e4f39524861e75edce86bd2a88c998 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 9 May 2022 13:19:17 +0800 Subject: [PATCH 0762/2002] Committed 2022/05/09 --- NetworkX Altas/Primary_input_output.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/NetworkX Altas/Primary_input_output.py b/NetworkX Altas/Primary_input_output.py index c360d077..b9018113 100644 --- a/NetworkX Altas/Primary_input_output.py +++ b/NetworkX Altas/Primary_input_output.py @@ -80,21 +80,16 @@ def _to_string(formula, root): circuit.add_edge(8, 11) # Layer 3 -circuit.add_node(13, label="I", layer=3) -circuit.add_node(14, label="PO1", layer=3) +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) -# Layer 4 -circuit.add_node(15, label="PO2", layer=4) - -circuit.add_edge(9, 15) +circuit.add_edge(9, 13) circuit.add_edge(10, 13) circuit.add_edge(11, 13) circuit.add_edge(11, 14) circuit.add_edge(12, 14) -circuit.add_edge(13, 15) - # Convert the circuit to an equivalent formula. formula = circuit_to_formula(circuit) print(formula_to_string(formula)) @@ -104,7 +99,7 @@ def _to_string(formula, root): options = { "node_size": 600, "alpha": 0.5, - "node_color": "blue", + "node_color": "aqua", "labels": labels, "font_size": 22, } From 8d11b0a34e6b7de6a4a46d5327f09f3926e1e5e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 9 May 2022 13:42:40 +0800 Subject: [PATCH 0763/2002] Committed 2022/05/09 --- NetworkX Altas/Primary_input_output.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/Primary_input_output.py b/NetworkX Altas/Primary_input_output.py index b9018113..157f3a90 100644 --- a/NetworkX Altas/Primary_input_output.py +++ b/NetworkX Altas/Primary_input_output.py @@ -107,7 +107,8 @@ def _to_string(formula, root): plt.figure(figsize=(8, 8)) pos = nx.multipartite_layout(circuit, subset_key="layer") nx.draw_networkx(circuit, pos, **options) -plt.title(formula_to_string(formula)) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') plt.axis("equal") plt.show() From 8bdb614078df9bb8b21f80c5b8ff949e589cd2fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 14 May 2022 01:42:56 +0800 Subject: [PATCH 0764/2002] Committed 2022/05/14 --- .../February2022_bar_table.py | 96 +++++++++++++++++++ .../Month_over_month_2022/__init__.py | 0 2 files changed, 96 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/__init__.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py new file mode 100644 index 00000000..b9066944 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py @@ -0,0 +1,96 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb"] + +month_as_of_now = ["Jan", "Feb"] + +deaths = [[14, 30, 18, 28, 31, 31], # January + [9, 25, 20, 18, 31, 39], # February + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-09)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [96, 187, 204, 213, 233, 237]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [96, 187, 204, 213, 233, 237], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/__init__.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/__init__.py new file mode 100644 index 00000000..e69de29b From b4cd30836141faf37557a1838b3d7d5c9c9b01d5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 14 May 2022 01:44:55 +0800 Subject: [PATCH 0765/2002] Committed 2022/05/14 --- .../Month_over_month_2022/February2022_bar_table.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py index b9066944..db0a1dcc 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py @@ -10,8 +10,8 @@ month_as_of_now = ["Jan", "Feb"] -deaths = [[14, 30, 18, 28, 31, 31], # January - [9, 25, 20, 18, 31, 39], # February +deaths = [[23, 30, 18, 28, 31, 31], # January + [16, 25, 20, 18, 31, 39], # February ] df = pd.DataFrame(data=deaths, @@ -68,9 +68,9 @@ axes.grid(True) # pyplot.grid [1][2] -axes2.bar(administrative_duty, [96, 187, 204, 213, 233, 237]) +axes2.bar(administrative_duty, [39, 187, 204, 213, 233, 237]) axes2.bar_label(axes2.containers[0], label_type='edge') -axes2.plot(administrative_duty, [96, 187, 204, 213, 233, 237], '-o', color='orange') +axes2.plot(administrative_duty, [39, 187, 204, 213, 233, 237], '-o', color='orange') figure.tight_layout() From b5e8730131b1b8d4a66001cfe6dc963684c177de Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 14 May 2022 01:47:30 +0800 Subject: [PATCH 0766/2002] Committed 2022/05/14 --- .../Month_over_month_2022/February2022_bar_table.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py index db0a1dcc..c9bd9de1 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py @@ -10,8 +10,8 @@ month_as_of_now = ["Jan", "Feb"] -deaths = [[23, 30, 18, 28, 31, 31], # January - [16, 25, 20, 18, 31, 39], # February +deaths = [[13, 23, 29, 28, 31, 31], # January + [7, 16, 20, 18, 31, 39], # February ] df = pd.DataFrame(data=deaths, @@ -68,9 +68,9 @@ axes.grid(True) # pyplot.grid [1][2] -axes2.bar(administrative_duty, [39, 187, 204, 213, 233, 237]) +axes2.bar(administrative_duty, [20, 39, 49, 213, 233, 237]) axes2.bar_label(axes2.containers[0], label_type='edge') -axes2.plot(administrative_duty, [39, 187, 204, 213, 233, 237], '-o', color='orange') +axes2.plot(administrative_duty, [20, 39, 49, 213, 233, 237], '-o', color='orange') figure.tight_layout() From d34d55bef7c802a209a483522496f150e19fa440 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 14 May 2022 01:49:55 +0800 Subject: [PATCH 0767/2002] Committed 2022/05/14 --- .../Month_over_month_2022/February2022_bar_table.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py index c9bd9de1..87979b2d 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py @@ -10,8 +10,8 @@ month_as_of_now = ["Jan", "Feb"] -deaths = [[13, 23, 29, 28, 31, 31], # January - [7, 16, 20, 18, 31, 39], # February +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 19, 30], # February ] df = pd.DataFrame(data=deaths, @@ -68,9 +68,9 @@ axes.grid(True) # pyplot.grid [1][2] -axes2.bar(administrative_duty, [20, 39, 49, 213, 233, 237]) +axes2.bar(administrative_duty, [20, 39, 49, 52, 43, 53]) axes2.bar_label(axes2.containers[0], label_type='edge') -axes2.plot(administrative_duty, [20, 39, 49, 213, 233, 237], '-o', color='orange') +axes2.plot(administrative_duty, [20, 39, 49, 52, 43, 53], '-o', color='orange') figure.tight_layout() From 0cd77393097b49b1ced1ea47c24156cdc4ea2f46 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 14 May 2022 01:50:24 +0800 Subject: [PATCH 0768/2002] Committed 2022/05/14 --- .../Road safety/Month_over_month_2022/February2022_bar_table.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py index 87979b2d..7f81d5ba 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/February2022_bar_table.py @@ -64,7 +64,7 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2021/01-09)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-02)") axes.grid(True) # pyplot.grid [1][2] From d7aa991b3fda0495707b5d7931c4424090b970da Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 17:05:00 +0800 Subject: [PATCH 0769/2002] Committed 2022/05/18 --- .../Percentage using data frame 5.py | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py new file mode 100644 index 00000000..db00b59b --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 5.py @@ -0,0 +1,132 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +transposed_df = df.transpose() + +ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + ax.bar_label(c, fmt='%.2f%', label_type='center') + + +plt.show() + From b86af16a07f1dce5aa2872816c87ad1b2b396f87 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 18:05:25 +0800 Subject: [PATCH 0770/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py new file mode 100644 index 00000000..db00b59b --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -0,0 +1,132 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +transposed_df = df.transpose() + +ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + ax.bar_label(c, fmt='%.2f%', label_type='center') + + +plt.show() + From 4103a8bb82c302b8de6942827cff5a3bb24c967f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 18:25:34 +0800 Subject: [PATCH 0771/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index db00b59b..7b5764eb 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -125,7 +125,11 @@ ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) for c in ax.containers: - ax.bar_label(c, fmt='%.2f%', label_type='center') + print(type(c)) + c = int(c) + totality = northTW + centralTW + southTW + eastTW + outlyingTW + percent = (c / totality) * 100 + ax.bar_label(percent, fmt='%.2f%', label_type='center') plt.show() From a487377b54fdb4bf2287ca876323c3d88881472c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 18:47:26 +0800 Subject: [PATCH 0772/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 7b5764eb..676983ed 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -120,6 +120,17 @@ print(df) +totality = [] + +for i in range(0, 19, 1): + totality.append(northTW[i] + centralTW[i] + southTW[i] + eastTW[i] + outlyingTW[i]) + + +print(totality) + +s = pd.Series(data=np.array(totality).T, index=["Total"]) +print(s) + transposed_df = df.transpose() ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) From 33c82ec96c5ff238266771360be405754538151a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 18:50:13 +0800 Subject: [PATCH 0773/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 676983ed..ac1c46b7 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -128,7 +128,7 @@ print(totality) -s = pd.Series(data=np.array(totality).T, index=["Total"]) +s = pd.Series(data=np.array(totality).T, index="Total") print(s) transposed_df = df.transpose() From d29826960845d1d45d257d6da6fbcd1ecc519ad7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 18:50:38 +0800 Subject: [PATCH 0774/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index ac1c46b7..676983ed 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -128,7 +128,7 @@ print(totality) -s = pd.Series(data=np.array(totality).T, index="Total") +s = pd.Series(data=np.array(totality).T, index=["Total"]) print(s) transposed_df = df.transpose() From 309856da4de13788fc73c92da047b507097f96c1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 18:52:27 +0800 Subject: [PATCH 0775/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 676983ed..6d5178f5 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -128,7 +128,7 @@ print(totality) -s = pd.Series(data=np.array(totality).T, index=["Total"]) +s = pd.Series(data=totality, index=["Total"]) print(s) transposed_df = df.transpose() From 4076949da62d20f8b065d90a8bb8cabfab177cd0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:06:33 +0800 Subject: [PATCH 0776/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 6d5178f5..a656203c 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -128,7 +128,7 @@ print(totality) -s = pd.Series(data=totality, index=["Total"]) +s = pd.DataFrame(data=totality, index=["Total"]) print(s) transposed_df = df.transpose() From edda021e0dc8358fe45c21f2bcd081dd6bb0e6cf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:09:03 +0800 Subject: [PATCH 0777/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index a656203c..3d7e3f5b 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -128,7 +128,8 @@ print(totality) -s = pd.DataFrame(data=totality, index=["Total"]) +s = pd.Series(data=totality) +s.name = "Total" print(s) transposed_df = df.transpose() From 957f11e459b29e4ac8fb5f96aff92756fefec303 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:10:07 +0800 Subject: [PATCH 0778/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 3d7e3f5b..66c2eee4 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -129,7 +129,7 @@ print(totality) s = pd.Series(data=totality) -s.name = "Total" +s.name = "Total" # The name of the Series becomes the index of the row in the DataFrame. print(s) transposed_df = df.transpose() @@ -146,3 +146,5 @@ plt.show() +# References: +# 1. https://stackoverflow.com/a/16824696/ From 38a875d608355d2bcdb010d96230b38b1cea7782 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:12:13 +0800 Subject: [PATCH 0779/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 66c2eee4..15f7f1e4 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -132,6 +132,10 @@ s.name = "Total" # The name of the Series becomes the index of the row in the DataFrame. print(s) +df = df.append(s) + +print(df) + transposed_df = df.transpose() ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) From 27e41f37097fffd79f4781f520ca30ab35ed38e5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:14:41 +0800 Subject: [PATCH 0780/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 15f7f1e4..b3b057bc 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -132,7 +132,7 @@ s.name = "Total" # The name of the Series becomes the index of the row in the DataFrame. print(s) -df = df.append(s) +df = df.append(s, ignore_index=True) print(df) From 56b6441e5bccc6ec53b9b26a54ddba007ad79127 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:15:05 +0800 Subject: [PATCH 0781/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index b3b057bc..15f7f1e4 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -132,7 +132,7 @@ s.name = "Total" # The name of the Series becomes the index of the row in the DataFrame. print(s) -df = df.append(s, ignore_index=True) +df = df.append(s) print(df) From db1142f5f741490e37b38e257fae76a7969cc0b7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:18:12 +0800 Subject: [PATCH 0782/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 15f7f1e4..327de79b 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -136,6 +136,10 @@ print(df) +df2 = pd.DataFrame(data=totality, index=["Total"], columns=year) + +print(df2) + transposed_df = df.transpose() ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) From 96275cd850c957adb40e294ee9c9c02c3dcc0060 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:21:42 +0800 Subject: [PATCH 0783/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 327de79b..7c0a232d 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -136,7 +136,7 @@ print(df) -df2 = pd.DataFrame(data=totality, index=["Total"], columns=year) +df2 = pd.DataFrame(data=np.array(totality).transpose(), index=["Total"], columns=year) print(df2) From 7aef29d90f3deb2987441c3da11bee9cc1eb83db Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:27:04 +0800 Subject: [PATCH 0784/2002] Committed 2022/05/18 --- .../Percentage using data frame 6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py index 7c0a232d..327de79b 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 6.py @@ -136,7 +136,7 @@ print(df) -df2 = pd.DataFrame(data=np.array(totality).transpose(), index=["Total"], columns=year) +df2 = pd.DataFrame(data=totality, index=["Total"], columns=year) print(df2) From 4a3ac4614fa84a9e7ecba5cac6e41e652049c2b0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:27:57 +0800 Subject: [PATCH 0785/2002] Committed 2022/05/18 --- .../Percentage using data frame 7.py | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py new file mode 100644 index 00000000..07df3444 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py @@ -0,0 +1,141 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +totality = [] + +for i in range(0, 19, 1): + totality.append(northTW[i] + centralTW[i] + southTW[i] + eastTW[i] + outlyingTW[i]) + + +print(totality) + +s = pd.Series(data=totality) +s.name = "Total" # The name of the Series becomes the index of the row in the DataFrame. +print(s) + +df = df.append(s) + +print(df) + +df2 = pd.DataFrame(data=totality, index=["Total"], columns=year) + +print(df2) From 8cea830b641cf04fd3ba1f7cee97701bdfeee3cb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:31:45 +0800 Subject: [PATCH 0786/2002] Committed 2022/05/18 --- .../Percentage using data frame 7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py index 07df3444..4f6f8ee1 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py @@ -136,6 +136,6 @@ print(df) -df2 = pd.DataFrame(data=totality, index=["Total"], columns=year) +df2 = pd.DataFrame(data=totality) print(df2) From 1f24780ad7ad4539d91a819b34b4dd15651d598b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:35:17 +0800 Subject: [PATCH 0787/2002] Committed 2022/05/18 --- .../Percentage using data frame 7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py index 4f6f8ee1..701706c6 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py @@ -136,6 +136,6 @@ print(df) -df2 = pd.DataFrame(data=totality) +df2 = pd.DataFrame(data=totality, index=year, columns=["Total"]) print(df2) From 7a5f58d06e349571b57f8207791fe8eb2549bf46 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:37:51 +0800 Subject: [PATCH 0788/2002] Committed 2022/05/18 --- .../Percentage using data frame 7.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py index 701706c6..170be657 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 7.py @@ -128,14 +128,10 @@ print(totality) -s = pd.Series(data=totality) -s.name = "Total" # The name of the Series becomes the index of the row in the DataFrame. -print(s) - -df = df.append(s) - -print(df) - df2 = pd.DataFrame(data=totality, index=year, columns=["Total"]) print(df2) + +df = df.append(df2.transpose()) + +print(df) From a199b4d41a65d1c2d937f98fca05950add836fe2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:39:10 +0800 Subject: [PATCH 0789/2002] Committed 2022/05/18 --- .../Percentage using data frame 8.py | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 8.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 8.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 8.py new file mode 100644 index 00000000..1823d7c1 --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 8.py @@ -0,0 +1,147 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +totality = [] + +for i in range(0, 19, 1): + totality.append(northTW[i] + centralTW[i] + southTW[i] + eastTW[i] + outlyingTW[i]) + + +print(totality) + +df2 = pd.DataFrame(data=totality, index=year, columns=["Total"]) + +print(df2) + +df = df.append(df2.transpose()) + +print(df) + +transposed_df = df.transpose() + +ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + ax.bar_label(c, fmt='%.2f%', label_type='center') + + +plt.show() \ No newline at end of file From 9e58ab077b2f03904b124e72d44b8ebddccef044 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:43:26 +0800 Subject: [PATCH 0790/2002] Committed 2022/05/18 --- .../Percentage using data frame 8.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 8.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 8.py index 1823d7c1..9efbeec9 100644 --- a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 8.py +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 8.py @@ -141,7 +141,7 @@ ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) for c in ax.containers: - ax.bar_label(c, fmt='%.2f%', label_type='center') + ax.bar_label(c, fmt='%.2f%%', label_type='center') plt.show() \ No newline at end of file From 236b4d12cb9a03edb996f784724752dc41eb10fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:44:42 +0800 Subject: [PATCH 0791/2002] Committed 2022/05/18 --- .../Percentage using data frame 9.py | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 9.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 9.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 9.py new file mode 100644 index 00000000..0b8e510c --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 9.py @@ -0,0 +1,147 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +totality = [] + +for i in range(0, 19, 1): + totality.append(northTW[i] + centralTW[i] + southTW[i] + eastTW[i] + outlyingTW[i]) + + +print(totality) + +df2 = pd.DataFrame(data=totality, index=year, columns=["Total"]) + +print(df2) + +df3 = df.append(df2.transpose()) + +print(df3) + +transposed_df = df.transpose() + +ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + ax.bar_label(c, fmt='%.2f%%', label_type='center') + + +plt.show() \ No newline at end of file From 5daae2f356486fa0a95617b66f4654e058d5387e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 18 May 2022 19:46:51 +0800 Subject: [PATCH 0792/2002] Committed 2022/05/18 --- .../Percentage using data frame 10.py | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 10.py diff --git a/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 10.py b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 10.py new file mode 100644 index 00000000..0937856c --- /dev/null +++ b/The attainments and realizations of my dreams/Historical population composition/Percentage using data frame 10.py @@ -0,0 +1,151 @@ +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker +import numpy as np +import pandas as pd + +year = ["1940", "56", "60", "70", "80", "90", "2000", "2010", + "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08"] + +northTW = [(458714 + 326407 + 210386 + 264786 + 256322 + 100151 + 44872), # 1940 + (668093 + 737029 + 303188 + 411575 + 409053 + 194006 + 86439), # 1956 + (829012 + 898655 + 339456 + 489676 + 464792 + 234442 + 108035), # 1960 + (1240576 + 1769568 + 412787 + 726750 + 587652 + 324040), # 1970 + (2258757 + 2220427 + 442988 + 1052800 + 641937 + 344867), # 1980 + (3048034 + 2719659 + 450943 + 1355175 + 374492 + 352919 + 324426), # 1990 + (3567896 + 2646474 + 465186 + 1732617 + 439713 + 388425 + 368439), # 2000 + (3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + ] + +centralTW = [(133301 + 357743 + 262308 + 570528 + 242137 + 394830), # 1940 + (247088 + 537387 + 395324 + 793858 + 357284 + 604484), # 1956 + (298119 + 605437 + 435084 + 880684 + 412942 + 672557), # 1960 + (448140 + 785903 + 524744 + 1050246 + 511040 + 800578), # 1970 + (593427 + 1013176 + 542745 + 1166352 + 524245 + 796276), # 1980 + (761802 + 1258157 + 547609 + 1245288 + 536479 + 753639), # 1990 + (965790 + 1494308 + 559703 + 1310531 + 541537 + 743368), # 2000 + (2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + ] + +southTW = [(173148 + 501777 + 152265 + 339163 + 418244 + 365786), # 1940 + (284200 + 708211 + 365159 + 534669 + 630382 + 568469), # 1956 + (337602 + 787203 + 467931 + 617380 + 710273 + 645400), # 1960 + (474835 + 934865 + 828191 + 830661 + 849914 + 828761), # 1970 + (583799 + 962827 + 1202123 + 1000645 + 825967 + 888270), # 1980 + (683251 + 1026983 + 1386723 + 1119263 + 257597 + 552277 + 893282), # 1990 + (734650 + 1107687 + 1490560 + 1234707 + 266183 + 562305 + 907590), # 2000 + (1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + ] + +eastTW = [(147744 + 86852), # 1940 + (219701 + 568469), # 1956 + (252264 + 208272), # 1960 + (335799 + 291761), # 1970 + (355178 + 281218), # 1980 + (352233 + 256803), # 1990 + (353630 + 245312), # 2000 + (338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + (322506 + 213956), # 2021/08 + ] + +outlyingTW = [(0 + 0 + 264786), # 1940 + (0 + 0 + 85886), # 1956 + (0 + 0 + 96986), # 1960 + (61305 + 16939 + 119153), # 1970 + (51883 + 9058 + 107043), # 1980 + (42754 + 5585 + 95932), # 1990 + (53832 + 6733 + 89496), # 2000 + (107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + (140004 + 13420 + 105645) # 2021/08 + ] + +df = pd.DataFrame(columns=year, index=["North", "Central", "South", "East", "Outlying"], + data=[northTW, + centralTW, + southTW, + eastTW, + outlyingTW]) + +print(df) + +totality = [] + +for i in range(0, 19, 1): + totality.append(northTW[i] + centralTW[i] + southTW[i] + eastTW[i] + outlyingTW[i]) + + +print(totality) + +df2 = pd.DataFrame(data=totality, index=year, columns=["Total"]) + +print(df2) + +df3 = df.append(df2.transpose()) + +print(df3) + +transposed_df = df.transpose() + +ax = transposed_df.plot(kind='barh', stacked=True, figsize=(8, 6)) + +for c in ax.containers: + print(type(c)) + c = int(c) + totality = northTW + centralTW + southTW + eastTW + outlyingTW + percent = (c / totality) * 100 + ax.bar_label(percent, fmt='%.2f%%', label_type='center') + + +plt.show() \ No newline at end of file From 20a7a9517c31ed4d745205c08eae9430fe2996c1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 May 2022 00:48:46 +0800 Subject: [PATCH 0793/2002] Committed 2022/05/21 --- .../2022/May/Metro_area_EN_ZH_JP.py | 37 +++++++++++++++++++ .../2022/May/__init__.py | 0 2 files changed, 37 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py new file mode 100644 index 00000000..0444a35b --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py @@ -0,0 +1,37 @@ +import matplotlib.pyplot as plt +import matplotlib +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [179197, 89380, 76630, 39687, 40032] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) # [1] + +plt.title("2022/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220428163845/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(35000, 165000) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/a/12444777/ +# 2. https://stackoverflow.com/a/11386056/ \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/__init__.py new file mode 100644 index 00000000..e69de29b From 82a79a5a2b00714f0a88e6d70ac5e19badf4f413 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 May 2022 00:50:42 +0800 Subject: [PATCH 0794/2002] Committed 2022/05/21 --- .../2022/May/Metro_area_EN_ZH_JP.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py index 0444a35b..aa3991c5 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py @@ -6,7 +6,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [179197, 89380, 76630, 39687, 40032] +position_vacancies = [176040, 87874, 74498, 39687, 40032] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] @@ -26,7 +26,7 @@ plt.title("2022/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] # plt.ylabel("") -plt.xlabel("鞈 Reference: https://web.archive.org/web/20220428163845/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220520164749/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(35000, 165000) From 90dbfba473f6f1c61e42080fa5ff717e43d7717d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 May 2022 01:09:10 +0800 Subject: [PATCH 0795/2002] Committed 2022/05/21 --- .../2022/May/Metro_area_EN_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py index aa3991c5..9cc57bca 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/May/Metro_area_EN_ZH_JP.py @@ -6,7 +6,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [176040, 87874, 74498, 39687, 40032] +position_vacancies = [176040, 87874, 74498, 38787, 39508] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From ca5784d5d802b9b8f8e5e27cfab25c1c7781e53f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 May 2022 12:05:41 +0800 Subject: [PATCH 0796/2002] Committed 2022/05/21 --- NetworkX Altas/isolates().ipynb | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 NetworkX Altas/isolates().ipynb diff --git a/NetworkX Altas/isolates().ipynb b/NetworkX Altas/isolates().ipynb new file mode 100644 index 00000000..dd8b09d5 --- /dev/null +++ b/NetworkX Altas/isolates().ipynb @@ -0,0 +1,39 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import networkx as nx" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 83c7550aff39ba11983dc9ee152693c5b8a7e7da Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 May 2022 12:24:56 +0800 Subject: [PATCH 0797/2002] Committed 2022/05/21 --- NetworkX Altas/isolates().ipynb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/NetworkX Altas/isolates().ipynb b/NetworkX Altas/isolates().ipynb index dd8b09d5..af66a6ff 100644 --- a/NetworkX Altas/isolates().ipynb +++ b/NetworkX Altas/isolates().ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "collapsed": true, "pycharm": { @@ -11,7 +11,11 @@ }, "outputs": [], "source": [ - "import networkx as nx" + "import networkx as nx\n", + "\n", + "G = nx.Graph()\n", + "G.add_nodes_from(\"ABCD\") # No edges -- all nodes are isolated\n", + "my_isolations = nx.isolates(G)" ] } ], From a6fdf756f95938b55885d501eccfffef06b356e7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 May 2022 12:55:59 +0800 Subject: [PATCH 0798/2002] Committed 2022/05/21 --- NetworkX Altas/isolates().ipynb | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/NetworkX Altas/isolates().ipynb b/NetworkX Altas/isolates().ipynb index af66a6ff..ddc61f83 100644 --- a/NetworkX Altas/isolates().ipynb +++ b/NetworkX Altas/isolates().ipynb @@ -2,20 +2,40 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "collapsed": true, "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ". at 0x0000019DF5AB6EC8>\n" + ] + }, + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import networkx as nx\n", + "import matplotlib as plt\n", "\n", "G = nx.Graph()\n", "G.add_nodes_from(\"ABCD\") # No edges -- all nodes are isolated\n", - "my_isolations = nx.isolates(G)" + "my_isolations = nx.isolates(G)\n", + "\n", + "nx.draw(G=G)\n", + "print(my_isolations)" ] } ], From cf8f42410f62f125a5ea02389fee42542718a50b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 13:20:06 +0800 Subject: [PATCH 0799/2002] Committed 2022/05/22 --- .../Primary_input_output_(shortest_paths).py | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(shortest_paths).py diff --git a/NetworkX Altas/Primary_input_output_(shortest_paths).py b/NetworkX Altas/Primary_input_output_(shortest_paths).py new file mode 100644 index 00000000..157f3a90 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(shortest_paths).py @@ -0,0 +1,116 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) From 5a618f9d398ece1ad2ac5193e00628d76c8c439c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 13:25:03 +0800 Subject: [PATCH 0800/2002] Committed 2022/05/22 --- NetworkX Altas/Primary_input_output_(shortest_paths).py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NetworkX Altas/Primary_input_output_(shortest_paths).py b/NetworkX Altas/Primary_input_output_(shortest_paths).py index 157f3a90..8ec253a7 100644 --- a/NetworkX Altas/Primary_input_output_(shortest_paths).py +++ b/NetworkX Altas/Primary_input_output_(shortest_paths).py @@ -114,3 +114,6 @@ def _to_string(formula, root): print(nx.algorithms.tree.is_tree(G=circuit)) print(nx.algorithms.tree.is_forest(G=circuit)) + +path = nx.shortest_simple_paths(G=circuit, source="PI4", target="PO2") +print(path) From 7a88a1f429f09dc673621668a67b5183b5171c67 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 13:25:48 +0800 Subject: [PATCH 0801/2002] Committed 2022/05/22 --- NetworkX Altas/Primary_input_output_(shortest_paths).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Primary_input_output_(shortest_paths).py b/NetworkX Altas/Primary_input_output_(shortest_paths).py index 8ec253a7..d0fb43e8 100644 --- a/NetworkX Altas/Primary_input_output_(shortest_paths).py +++ b/NetworkX Altas/Primary_input_output_(shortest_paths).py @@ -116,4 +116,4 @@ def _to_string(formula, root): print(nx.algorithms.tree.is_forest(G=circuit)) path = nx.shortest_simple_paths(G=circuit, source="PI4", target="PO2") -print(path) +print(next(path)) From f743f7c6eaa1775273f661e44530bdf01486cf86 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 13:28:09 +0800 Subject: [PATCH 0802/2002] Committed 2022/05/22 --- NetworkX Altas/Primary_input_output_(shortest_paths).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Primary_input_output_(shortest_paths).py b/NetworkX Altas/Primary_input_output_(shortest_paths).py index d0fb43e8..1efdfeae 100644 --- a/NetworkX Altas/Primary_input_output_(shortest_paths).py +++ b/NetworkX Altas/Primary_input_output_(shortest_paths).py @@ -115,5 +115,5 @@ def _to_string(formula, root): print(nx.algorithms.tree.is_tree(G=circuit)) print(nx.algorithms.tree.is_forest(G=circuit)) -path = nx.shortest_simple_paths(G=circuit, source="PI4", target="PO2") +path = nx.shortest_simple_paths(G=circuit, source=3, target=14) print(next(path)) From 96b577cf2affcc12c0ad60d1086eb67686275977 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 13:31:28 +0800 Subject: [PATCH 0803/2002] Committed 2022/05/22 --- NetworkX Altas/Primary_input_output_(shortest_paths).py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Primary_input_output_(shortest_paths).py b/NetworkX Altas/Primary_input_output_(shortest_paths).py index 1efdfeae..0bc000b9 100644 --- a/NetworkX Altas/Primary_input_output_(shortest_paths).py +++ b/NetworkX Altas/Primary_input_output_(shortest_paths).py @@ -117,3 +117,4 @@ def _to_string(formula, root): path = nx.shortest_simple_paths(G=circuit, source=3, target=14) print(next(path)) +print(next(path)) From 4a6bfa1bdf77b1a5f10eb922295e4f22d7d5fb82 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 13:45:42 +0800 Subject: [PATCH 0804/2002] Committed 2022/05/22 --- .../Primary_input_output_(eccentricity).py | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(eccentricity).py diff --git a/NetworkX Altas/Primary_input_output_(eccentricity).py b/NetworkX Altas/Primary_input_output_(eccentricity).py new file mode 100644 index 00000000..0bc000b9 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(eccentricity).py @@ -0,0 +1,120 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +path = nx.shortest_simple_paths(G=circuit, source=3, target=14) +print(next(path)) +print(next(path)) From b8dc7dda43e6012f640ebb9e335e0e18124c49ab Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 13:48:01 +0800 Subject: [PATCH 0805/2002] Committed 2022/05/22 --- NetworkX Altas/Primary_input_output_(eccentricity).py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/NetworkX Altas/Primary_input_output_(eccentricity).py b/NetworkX Altas/Primary_input_output_(eccentricity).py index 0bc000b9..a5eb560a 100644 --- a/NetworkX Altas/Primary_input_output_(eccentricity).py +++ b/NetworkX Altas/Primary_input_output_(eccentricity).py @@ -115,6 +115,5 @@ def _to_string(formula, root): print(nx.algorithms.tree.is_tree(G=circuit)) print(nx.algorithms.tree.is_forest(G=circuit)) -path = nx.shortest_simple_paths(G=circuit, source=3, target=14) -print(next(path)) -print(next(path)) +ecc = nx.eccentricity(G=circuit) +print(ecc) \ No newline at end of file From 9ce09cc1eb2d729c4df6e3f8d6474f3d92decf36 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 13:50:08 +0800 Subject: [PATCH 0806/2002] Committed 2022/05/22 --- NetworkX Altas/Primary_input_output_(eccentricity).py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NetworkX Altas/Primary_input_output_(eccentricity).py b/NetworkX Altas/Primary_input_output_(eccentricity).py index a5eb560a..2976368d 100644 --- a/NetworkX Altas/Primary_input_output_(eccentricity).py +++ b/NetworkX Altas/Primary_input_output_(eccentricity).py @@ -115,5 +115,5 @@ def _to_string(formula, root): print(nx.algorithms.tree.is_tree(G=circuit)) print(nx.algorithms.tree.is_forest(G=circuit)) -ecc = nx.eccentricity(G=circuit) -print(ecc) \ No newline at end of file +ecc = nx.eccentricity(G=circuit, v=13) +print(ecc) From ebdb3d6336e781f8bfcf362ef167a12f4cc32868 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 14:04:39 +0800 Subject: [PATCH 0807/2002] Committed 2022/05/22 --- .../Primary_input_output_(length).py | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(length).py diff --git a/NetworkX Altas/Primary_input_output_(length).py b/NetworkX Altas/Primary_input_output_(length).py new file mode 100644 index 00000000..9bd1e3b0 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(length).py @@ -0,0 +1,115 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(len(circuit)) From 4a345da14da8fea6a3e9ee5fdaf933202eaa57fa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 14:11:02 +0800 Subject: [PATCH 0808/2002] Committed 2022/05/22 --- NetworkX Altas/Primary_input_output_(length).py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Primary_input_output_(length).py b/NetworkX Altas/Primary_input_output_(length).py index 9bd1e3b0..c3c4223f 100644 --- a/NetworkX Altas/Primary_input_output_(length).py +++ b/NetworkX Altas/Primary_input_output_(length).py @@ -113,3 +113,4 @@ def _to_string(formula, root): plt.show() print(len(circuit)) +print(circuit.size()) From c1d21361dd49a36468a2ef0d5dd67c054787a680 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 14:12:42 +0800 Subject: [PATCH 0809/2002] Committed 2022/05/22 --- NetworkX Altas/Primary_input_output_(length).py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NetworkX Altas/Primary_input_output_(length).py b/NetworkX Altas/Primary_input_output_(length).py index c3c4223f..7737acdb 100644 --- a/NetworkX Altas/Primary_input_output_(length).py +++ b/NetworkX Altas/Primary_input_output_(length).py @@ -114,3 +114,5 @@ def _to_string(formula, root): print(len(circuit)) print(circuit.size()) +print(circuit.number_of_edges()) +print(circuit.number_of_nodes()) From 774adf8146de5d4cbb0c8e117cd98623c9123653 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 15:26:55 +0800 Subject: [PATCH 0810/2002] Committed 2022/05/22 --- .../January2022.py | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/January2022.py diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/January2022.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/January2022.py new file mode 100644 index 00000000..871668f3 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/January2022.py @@ -0,0 +1,128 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08", "'21/09"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + # (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + (), # 2021/12 + (), # 2022/06 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + # (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + # (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + # (322506 + 213956), # 2021/08 + (322260 + 213818), # 2021/09 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + # (140004 + 13420 + 105645), # 2021/08 + (140856 + 13429 + 106036), # 2021/09 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + (129.45 + 333.60) / 2, # 2021/04 + ] + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +axes.set_ylim(23400000, 23700000) +axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +axes.set_xlabel("Year\n" + "References:\n" + "1. https://www.ris.gov.tw/app/portal/346 \n" + "2. https://www.macromicro.me/collections/15/\n" + "tw-housing-relative/124/tw-housing-price-sinyi") + +axes.set_ylabel("Population (Unit: 10 millions)") + +axes2 = axes.twinx() +axes2.set_ylabel("Yearly Housing Price Index (2010/04 - 2021/04) \n" + "Method: (Guotai + Xinyi) / 2", color='goldenrod') + +axes2.plot(x, housing_index, color='gold') +axes2.tick_params(axis='y', labelcolor='goldenrod') + +plt.grid(linewidth=0.3) +plt.title("Taiwan's population change from 2010 - 2021/09 \n in relation to Annual Housing Price Index") + +figure.tight_layout() + +plt.show() + +# References: +# 1. https://www.macromicro.me/collections/15/tw-housing-relative/124/tw-housing-price-sinyi +# 2. From fcfd187db34d3c92c8897e9f2ae60164cb994955 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 16:28:23 +0800 Subject: [PATCH 0811/2002] Committed 2022/05/22 --- .../Primary_input_output_(isolation).py | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(isolation).py diff --git a/NetworkX Altas/Primary_input_output_(isolation).py b/NetworkX Altas/Primary_input_output_(isolation).py new file mode 100644 index 00000000..78243353 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(isolation).py @@ -0,0 +1,115 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(nx.isolates(G=circuit)) From 8280a61da86870d9c1b09f63355f0de3ee197efb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 16:35:15 +0800 Subject: [PATCH 0812/2002] Committed 2022/05/22 --- NetworkX Altas/Primary_input_output_(isolation).py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NetworkX Altas/Primary_input_output_(isolation).py b/NetworkX Altas/Primary_input_output_(isolation).py index 78243353..7382a4b5 100644 --- a/NetworkX Altas/Primary_input_output_(isolation).py +++ b/NetworkX Altas/Primary_input_output_(isolation).py @@ -113,3 +113,6 @@ def _to_string(formula, root): plt.show() print(nx.isolates(G=circuit)) + +isolations = nx.isolates(G=circuit) +print(isolations) From 973bf0c8941da848696ac536b69ac55146efbcf6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 16:42:28 +0800 Subject: [PATCH 0813/2002] Committed 2022/05/22 --- .../Chapter 11 - Unearthing the Network Structure/__init__.py | 0 .../make-figures.py | 4 ++++ Complex Network Analysis in Python/__init__.py | 0 3 files changed, 4 insertions(+) create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/__init__.py create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py create mode 100644 Complex Network Analysis in Python/__init__.py diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/__init__.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py new file mode 100644 index 00000000..74cfe001 --- /dev/null +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py @@ -0,0 +1,4 @@ +import networkx as nx +import matplotlib.pyplot as plt + +F = nx.DiGraph() diff --git a/Complex Network Analysis in Python/__init__.py b/Complex Network Analysis in Python/__init__.py new file mode 100644 index 00000000..e69de29b From 739b0987c93335a9590f22eb3bfc3dc789fc7499 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 16:55:10 +0800 Subject: [PATCH 0814/2002] Committed 2022/05/22 --- .../make-figures.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py index 74cfe001..45c8733f 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py @@ -2,3 +2,10 @@ import matplotlib.pyplot as plt F = nx.DiGraph() +F.add_node("C") + +F.add_edges_from([("B", "b0"), ("b0", "b1"), ("b1", "B")]) +F.add_edges_from([("A", "a0"), ("a0", "a1"), ("a1", "a2"), ("a1", "a3"), ("a3", "A")]) + +nx.draw_networkx(G=F, arrows=True, with_labels=True) + From 2f0cc410f20fe80e8f066c45609dd69619e1b897 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 22 May 2022 17:01:04 +0800 Subject: [PATCH 0815/2002] Committed 2022/05/22 --- .../make-figures.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py index 45c8733f..778df30f 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures.py @@ -9,3 +9,5 @@ nx.draw_networkx(G=F, arrows=True, with_labels=True) +plt.show() + From 1e768cda3e13ae9cae7bafe8e291cedca3220f4e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 12:39:02 +0800 Subject: [PATCH 0816/2002] Committed 2022/05/24 --- .../make-figures2.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures2.py diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures2.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures2.py new file mode 100644 index 00000000..82ba8955 --- /dev/null +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures2.py @@ -0,0 +1,17 @@ +import networkx as nx +import matplotlib.pyplot as plt +import random +random.seed(246) +import numpy as np +np.random.seed(4812) + +F = nx.DiGraph() +F.add_node("C") + +F.add_edges_from([("B", "b0"), ("b0", "b1"), ("b1", "B")]) +F.add_edges_from([("A", "a0"), ("a0", "a1"), ("a1", "a2"), ("a1", "a3"), ("a3", "A")]) + +nx.draw_networkx(G=F, arrows=True, with_labels=True) + +plt.show() + From b9aa35b95c44c81aeaa9882b2feee6a6e56e6294 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 12:42:26 +0800 Subject: [PATCH 0817/2002] Committed 2022/05/22 --- .../make-figures3.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures3.py diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures3.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures3.py new file mode 100644 index 00000000..7618d1b5 --- /dev/null +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures3.py @@ -0,0 +1,18 @@ +import networkx as nx +import matplotlib.pyplot as plt +import random +random.seed(246) +import numpy as np +np.random.seed(4812) + +F = nx.DiGraph() +F.add_node("C") + +F.add_edges_from([("B", "b0"), ("b0", "b1"), ("b1", "B")]) +F.add_edges_from([("A", "a0"), ("a0", "a1"), ("a1", "a2"), ("a1", "a3"), ("a3", "A")]) + +nx.draw_networkx(G=F, arrows=True, with_labels=True) + +plt.show() + +print(nx.strongly_connected_components(G=F)) From b8b80e5a8ee370c3a5c41cd2794eb20f5e29897b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 12:45:31 +0800 Subject: [PATCH 0818/2002] Committed 2022/05/22 --- .../make-figures3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures3.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures3.py index 7618d1b5..5c25dc4c 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures3.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures3.py @@ -15,4 +15,4 @@ plt.show() -print(nx.strongly_connected_components(G=F)) +print(list(nx.strongly_connected_components(G=F))) From 6e74339303f7b66f392ba469afde050c0b17edd3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 14:39:47 +0800 Subject: [PATCH 0819/2002] Committed 2022/05/24 --- .../make-figures4.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py new file mode 100644 index 00000000..0b208fcf --- /dev/null +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py @@ -0,0 +1,18 @@ +import networkx as nx +import matplotlib.pyplot as plt +import random +random.seed(1) +import numpy as np +np.random.seed(1) + +F = nx.DiGraph() +F.add_node("C") + +F.add_edges_from([("B", "b0"), ("b0", "b1"), ("b1", "B")]) +F.add_edges_from([("A", "a0"), ("a0", "a1"), ("a1", "a2"), ("a1", "a3"), ("a3", "A")]) + +nx.draw_networkx(G=F, arrows=True, with_labels=True) + +plt.show() + +print(list(nx.strongly_connected_components(G=F))) From 87b5ff4cec49c7a2e39cbef1f57e8900f7e9d41c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 14:42:17 +0800 Subject: [PATCH 0820/2002] Committed 2022/05/24 --- .../make-figures4.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py index 0b208fcf..2ceb8214 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py @@ -1,9 +1,9 @@ import networkx as nx import matplotlib.pyplot as plt import random -random.seed(1) +random.seed(2) import numpy as np -np.random.seed(1) +np.random.seed(2) F = nx.DiGraph() F.add_node("C") From b43718b1eea57cc3ed4fd51981587515e67ce50c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 14:44:28 +0800 Subject: [PATCH 0821/2002] Committed 2022/05/24 --- .../make-figures4.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py index 2ceb8214..1081cc4c 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py @@ -1,9 +1,9 @@ import networkx as nx import matplotlib.pyplot as plt import random -random.seed(2) +random.seed(3) import numpy as np -np.random.seed(2) +np.random.seed(3) F = nx.DiGraph() F.add_node("C") From ed1e2538c05f6b4a7149f194c332fa57bf3f834b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 14:52:13 +0800 Subject: [PATCH 0822/2002] Committed 2022/05/24 --- .../make-figures4.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py index 1081cc4c..66a0f970 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py @@ -1,9 +1,9 @@ import networkx as nx import matplotlib.pyplot as plt import random -random.seed(3) +random.seed(9) import numpy as np -np.random.seed(3) +np.random.seed(9) F = nx.DiGraph() F.add_node("C") From 12d2e123a77458e81bc41c138100e67c5f2e9df9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 14:53:08 +0800 Subject: [PATCH 0823/2002] Committed 2022/05/24 --- .../make-figures4.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py index 66a0f970..c6b1ce3a 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures4.py @@ -1,9 +1,9 @@ import networkx as nx import matplotlib.pyplot as plt import random -random.seed(9) +random.seed(10) import numpy as np -np.random.seed(9) +np.random.seed(10) F = nx.DiGraph() F.add_node("C") From 8a4b3965ed1b0d636eab9c13d3aa3e9cd57e86eb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 14:58:33 +0800 Subject: [PATCH 0824/2002] Committed 2022/05/24 --- .../Primary_input_output_(component).py | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(component).py diff --git a/NetworkX Altas/Primary_input_output_(component).py b/NetworkX Altas/Primary_input_output_(component).py new file mode 100644 index 00000000..bf2e3707 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(component).py @@ -0,0 +1,116 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(list(nx.strongly_connected_components(G=circuit))) + From 5d567ddd43dd94a26169d81486dd87a3c62b43bc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 15:01:26 +0800 Subject: [PATCH 0825/2002] Committed 2022/05/24 --- NetworkX Altas/Primary_input_output_(component).py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Primary_input_output_(component).py b/NetworkX Altas/Primary_input_output_(component).py index bf2e3707..42426f8d 100644 --- a/NetworkX Altas/Primary_input_output_(component).py +++ b/NetworkX Altas/Primary_input_output_(component).py @@ -113,4 +113,5 @@ def _to_string(formula, root): plt.show() print(list(nx.strongly_connected_components(G=circuit))) +print(list(nx.weakly_connected_components(G=circuit))) From 1071954477969e6f8be1692b84641f4e45d07be7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 15:04:19 +0800 Subject: [PATCH 0826/2002] Committed 2022/05/24 --- NetworkX Altas/Primary_input_output_(component).py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Primary_input_output_(component).py b/NetworkX Altas/Primary_input_output_(component).py index 42426f8d..3bb76dda 100644 --- a/NetworkX Altas/Primary_input_output_(component).py +++ b/NetworkX Altas/Primary_input_output_(component).py @@ -114,4 +114,5 @@ def _to_string(formula, root): print(list(nx.strongly_connected_components(G=circuit))) print(list(nx.weakly_connected_components(G=circuit))) +print(list(nx.connected_components(G=circuit))) From 3b97452a8142b9f70675d9d198b02699158bbbf2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 15:05:44 +0800 Subject: [PATCH 0827/2002] Committed 2022/05/24 --- NetworkX Altas/Primary_input_output_(component).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Primary_input_output_(component).py b/NetworkX Altas/Primary_input_output_(component).py index 3bb76dda..b0be156e 100644 --- a/NetworkX Altas/Primary_input_output_(component).py +++ b/NetworkX Altas/Primary_input_output_(component).py @@ -114,5 +114,5 @@ def _to_string(formula, root): print(list(nx.strongly_connected_components(G=circuit))) print(list(nx.weakly_connected_components(G=circuit))) -print(list(nx.connected_components(G=circuit))) +# print(list(nx.connected_components(G=circuit))) From 0561af2151c97340b020b6914e3f3442fe5eb276 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 15:20:32 +0800 Subject: [PATCH 0828/2002] Committed 2022/05/24 --- NetworkX Altas/Primary_input_output_(component).py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NetworkX Altas/Primary_input_output_(component).py b/NetworkX Altas/Primary_input_output_(component).py index b0be156e..e5dba968 100644 --- a/NetworkX Altas/Primary_input_output_(component).py +++ b/NetworkX Altas/Primary_input_output_(component).py @@ -115,4 +115,8 @@ def _to_string(formula, root): print(list(nx.strongly_connected_components(G=circuit))) print(list(nx.weakly_connected_components(G=circuit))) # print(list(nx.connected_components(G=circuit))) +print(nx.number_of_cliques(G=circuit)) +print(nx.number_connected_components(G=circuit)) +print(nx.number_strongly_connected_components(G=circuit)) +print(nx.number_weakly_connected_components(G=circuit)) From d2ddc532db5f48b009ec5dd0bc12cf183b1bf1c3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 15:26:48 +0800 Subject: [PATCH 0829/2002] Committed 2022/05/24 --- NetworkX Altas/Primary_input_output_(component).py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Primary_input_output_(component).py b/NetworkX Altas/Primary_input_output_(component).py index e5dba968..8467bac3 100644 --- a/NetworkX Altas/Primary_input_output_(component).py +++ b/NetworkX Altas/Primary_input_output_(component).py @@ -119,4 +119,5 @@ def _to_string(formula, root): print(nx.number_connected_components(G=circuit)) print(nx.number_strongly_connected_components(G=circuit)) print(nx.number_weakly_connected_components(G=circuit)) +print(nx.number_of_isolates(G=circuit)) From 80d4715ab668916e7724b9643adaa5fbdf0d2647 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 15:42:31 +0800 Subject: [PATCH 0830/2002] Committed 2022/05/24 --- NetworkX Altas/Primary_input_output_(component).py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NetworkX Altas/Primary_input_output_(component).py b/NetworkX Altas/Primary_input_output_(component).py index 8467bac3..be88c766 100644 --- a/NetworkX Altas/Primary_input_output_(component).py +++ b/NetworkX Altas/Primary_input_output_(component).py @@ -115,8 +115,8 @@ def _to_string(formula, root): print(list(nx.strongly_connected_components(G=circuit))) print(list(nx.weakly_connected_components(G=circuit))) # print(list(nx.connected_components(G=circuit))) -print(nx.number_of_cliques(G=circuit)) -print(nx.number_connected_components(G=circuit)) +# print(nx.number_of_cliques(G=circuit)) +# print(nx.number_connected_components(G=circuit)) print(nx.number_strongly_connected_components(G=circuit)) print(nx.number_weakly_connected_components(G=circuit)) print(nx.number_of_isolates(G=circuit)) From 200b3b6926309dc84532931ee848e2ba65a93e3d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 15:58:51 +0800 Subject: [PATCH 0831/2002] Committed 2022/05/24 --- .../make-figures5.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures5.py diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures5.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures5.py new file mode 100644 index 00000000..2ceb8214 --- /dev/null +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figures5.py @@ -0,0 +1,18 @@ +import networkx as nx +import matplotlib.pyplot as plt +import random +random.seed(2) +import numpy as np +np.random.seed(2) + +F = nx.DiGraph() +F.add_node("C") + +F.add_edges_from([("B", "b0"), ("b0", "b1"), ("b1", "B")]) +F.add_edges_from([("A", "a0"), ("a0", "a1"), ("a1", "a2"), ("a1", "a3"), ("a3", "A")]) + +nx.draw_networkx(G=F, arrows=True, with_labels=True) + +plt.show() + +print(list(nx.strongly_connected_components(G=F))) From d7dae96e306b70ca863ec872ff58d05b3ca7e10b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 24 May 2022 16:00:29 +0800 Subject: [PATCH 0832/2002] Committed 2022/05/24 --- .../make-figure6.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figure6.py diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figure6.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figure6.py new file mode 100644 index 00000000..1081cc4c --- /dev/null +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/make-figure6.py @@ -0,0 +1,18 @@ +import networkx as nx +import matplotlib.pyplot as plt +import random +random.seed(3) +import numpy as np +np.random.seed(3) + +F = nx.DiGraph() +F.add_node("C") + +F.add_edges_from([("B", "b0"), ("b0", "b1"), ("b1", "B")]) +F.add_edges_from([("A", "a0"), ("a0", "a1"), ("a1", "a2"), ("a1", "a3"), ("a3", "A")]) + +nx.draw_networkx(G=F, arrows=True, with_labels=True) + +plt.show() + +print(list(nx.strongly_connected_components(G=F))) From 24bd671ec8283333d2af85aa787d4a4d9fe2da70 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 10:53:46 +0800 Subject: [PATCH 0833/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py new file mode 100644 index 00000000..0e9196cc --- /dev/null +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -0,0 +1,6 @@ +import networkx as nx +import matplotlib.pyplot as plt + +G = nx.Graph((("Alpha", "Brazo"), ("Brazo", "Charlie"), ("Charlie", "Delta"), ("Charlie", "Echo"), + ("Charlie", "Foxtrot"), ("Delta", "Echo"), ("Delta", "Foxtrot"), ("Echo", "Foxtrot"), + ())) From d4625f6de25a6fa891a6ad83ce99a19020c54a70 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 11:00:51 +0800 Subject: [PATCH 0834/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index 0e9196cc..6931cddc 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -3,4 +3,11 @@ G = nx.Graph((("Alpha", "Brazo"), ("Brazo", "Charlie"), ("Charlie", "Delta"), ("Charlie", "Echo"), ("Charlie", "Foxtrot"), ("Delta", "Echo"), ("Delta", "Foxtrot"), ("Echo", "Foxtrot"), - ())) + ("Echo", "Golf"), ("Echo", "Hotel"), ("Foxtrot", "Golf"), ("Foxtrot", "Hotel"), + ("Delta", "Hotel"), ("Golf", "Hotel"), ("Delta", "India"), ("Charlie", "India"), + ("India", "Juliet"), ("Golf", "Kilo"), ("Alpha", "Kilo"), ("Bravo", "Lima"))) + +nx.draw_networkx(G=G, arrows=True, with_labels=True) + +plt.show() + From e6f4389ee646a5c27f7eef8cda9c81ae92576299 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 11:06:37 +0800 Subject: [PATCH 0835/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index 6931cddc..d2674d89 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -11,3 +11,4 @@ plt.show() +print(nx.k_core(G=G).nodes()) From f1d9a3903d8f784e464f3925b36c79658d6b57a2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 11:11:01 +0800 Subject: [PATCH 0836/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index d2674d89..0763b3a3 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -1,5 +1,7 @@ import networkx as nx import matplotlib.pyplot as plt +import random +import numpy as np G = nx.Graph((("Alpha", "Brazo"), ("Brazo", "Charlie"), ("Charlie", "Delta"), ("Charlie", "Echo"), ("Charlie", "Foxtrot"), ("Delta", "Echo"), ("Delta", "Foxtrot"), ("Echo", "Foxtrot"), From 6004d4cb467465c72e3d0dab1892a761d1a66a2f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 11:30:50 +0800 Subject: [PATCH 0837/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index 0763b3a3..e667e9a7 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -3,6 +3,9 @@ import random import numpy as np +random.seed(4) +np.random.seed(14) + G = nx.Graph((("Alpha", "Brazo"), ("Brazo", "Charlie"), ("Charlie", "Delta"), ("Charlie", "Echo"), ("Charlie", "Foxtrot"), ("Delta", "Echo"), ("Delta", "Foxtrot"), ("Echo", "Foxtrot"), ("Echo", "Golf"), ("Echo", "Hotel"), ("Foxtrot", "Golf"), ("Foxtrot", "Hotel"), From aa8eee592269b4b2a4cdbbcd8594b3d2644a61bd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 11:33:57 +0800 Subject: [PATCH 0838/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index e667e9a7..bd5a720c 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -3,8 +3,8 @@ import random import numpy as np -random.seed(4) -np.random.seed(14) +random.seed(5) +np.random.seed(15) G = nx.Graph((("Alpha", "Brazo"), ("Brazo", "Charlie"), ("Charlie", "Delta"), ("Charlie", "Echo"), ("Charlie", "Foxtrot"), ("Delta", "Echo"), ("Delta", "Foxtrot"), ("Echo", "Foxtrot"), @@ -17,3 +17,4 @@ plt.show() print(nx.k_core(G=G).nodes()) +print(nx.k_crust(G=G).nodes()) From 36da6b0c1997c535f4c30e11f6bc3a74d10f8d71 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 11:43:33 +0800 Subject: [PATCH 0839/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index bd5a720c..f3ef3290 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -3,8 +3,8 @@ import random import numpy as np -random.seed(5) -np.random.seed(15) +random.seed(8) +np.random.seed(19) G = nx.Graph((("Alpha", "Brazo"), ("Brazo", "Charlie"), ("Charlie", "Delta"), ("Charlie", "Echo"), ("Charlie", "Foxtrot"), ("Delta", "Echo"), ("Delta", "Foxtrot"), ("Echo", "Foxtrot"), @@ -18,3 +18,4 @@ print(nx.k_core(G=G).nodes()) print(nx.k_crust(G=G).nodes()) +print(nx.k_shell(G=G).nodes()) From 715ca938820f7bacc0b62f9a9d048552fa98276c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 11:45:46 +0800 Subject: [PATCH 0840/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index f3ef3290..f42e5959 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -3,7 +3,7 @@ import random import numpy as np -random.seed(8) +random.seed(9) np.random.seed(19) G = nx.Graph((("Alpha", "Brazo"), ("Brazo", "Charlie"), ("Charlie", "Delta"), ("Charlie", "Echo"), @@ -19,3 +19,4 @@ print(nx.k_core(G=G).nodes()) print(nx.k_crust(G=G).nodes()) print(nx.k_shell(G=G).nodes()) +print(nx.k_corona(G=G, k=3).nodes()) From eea28d5df0917643a12cc3068240018eba2f99ee Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 11:55:05 +0800 Subject: [PATCH 0841/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index f42e5959..96df03da 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -3,7 +3,7 @@ import random import numpy as np -random.seed(9) +random.seed(8) np.random.seed(19) G = nx.Graph((("Alpha", "Brazo"), ("Brazo", "Charlie"), ("Charlie", "Delta"), ("Charlie", "Echo"), From 52c6f06fede73533f9d318158ebd6a9f5ed0fb2c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 13:24:13 +0800 Subject: [PATCH 0842/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index 96df03da..dd51364f 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -20,3 +20,5 @@ print(nx.k_crust(G=G).nodes()) print(nx.k_shell(G=G).nodes()) print(nx.k_corona(G=G, k=3).nodes()) + +print(nx.k_core(G=G, k=2).nodes()) From cb846270d46ec3e3f5ce5e2e7aa43345a0a57028 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 13:24:57 +0800 Subject: [PATCH 0843/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index dd51364f..ab1cc48c 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -22,3 +22,4 @@ print(nx.k_corona(G=G, k=3).nodes()) print(nx.k_core(G=G, k=2).nodes()) +print(nx.k_crust(G=G, k=2).nodes()) From 00a3725a8723dad08e3c92101d76d6c98731aa69 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 13:30:06 +0800 Subject: [PATCH 0844/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index ab1cc48c..6f9af000 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -23,3 +23,4 @@ print(nx.k_core(G=G, k=2).nodes()) print(nx.k_crust(G=G, k=2).nodes()) +print(nx.k_shell(G=G, k=2).nodes()) From cff0c16239c72c389dba1bfb0cd61ca6b691ad59 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 13:31:13 +0800 Subject: [PATCH 0845/2002] Committed 2022/05/25 --- .../Separate_Cores, Shells, Coronas, & Crusts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py index 6f9af000..f8a69fd5 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Separate_Cores, Shells, Coronas, & Crusts.py @@ -24,3 +24,4 @@ print(nx.k_core(G=G, k=2).nodes()) print(nx.k_crust(G=G, k=2).nodes()) print(nx.k_shell(G=G, k=2).nodes()) +print(nx.k_corona(G=G, k=2).nodes()) From 6e4b708fc9aab5dc7440d06ab0da107bc4320e6c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 15:17:09 +0800 Subject: [PATCH 0846/2002] Committed 2022/05/25 --- .../Maximum_clique.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py new file mode 100644 index 00000000..98c86e10 --- /dev/null +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py @@ -0,0 +1,6 @@ +import networkx as nx +import matplotlib.pyplot as plt + +# Generate a 5-clique +G = nx.complete_graph(n=5, create_using=nx.Graph()) + From 44de2d4de38c53f8b20e6786dc023b58cd022c86 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 15:30:04 +0800 Subject: [PATCH 0847/2002] Committed 2022/05/25 --- .../Maximum_clique.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py index 98c86e10..39f95d14 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py @@ -4,3 +4,11 @@ # Generate a 5-clique G = nx.complete_graph(n=5, create_using=nx.Graph()) +nx.relabel_nodes(G=G, mapping=dict(enumerate(("Alpha", "Bravo", "Charlie", "Delta", "Echo"))), copy=False) + +# Attach a pigtail to it +G.add_edges_from([("Echo", "Foxtrot"), ("Foxtrot", "Golf"), ("Foxtrot", "Hotel"), ("Golf", "Hotel")]) + +nx.draw_networkx(G=G, arrows=True, with_labels=True) + +plt.show() From a53e5c1adb5eb078f6ad6c7a0868e61bca3167ab Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 15:57:35 +0800 Subject: [PATCH 0848/2002] Committed 2022/05/25 --- .../Maximum_clique.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py index 39f95d14..ab746a91 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py @@ -1,5 +1,10 @@ import networkx as nx import matplotlib.pyplot as plt +import random +import numpy as np + +random.seed(1) +np.random.seed(2) # Generate a 5-clique G = nx.complete_graph(n=5, create_using=nx.Graph()) From d2c5770191f5c57c949b833ea484c871cb98e81d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 25 May 2022 15:58:07 +0800 Subject: [PATCH 0849/2002] Committed 2022/05/25 --- .../Maximum_clique.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py index ab746a91..f7cd00a0 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Maximum_clique.py @@ -3,8 +3,8 @@ import random import numpy as np -random.seed(1) -np.random.seed(2) +# random.seed(1) +# np.random.seed(2) # Generate a 5-clique G = nx.complete_graph(n=5, create_using=nx.Graph()) From 9e89781b51ae05fa20f35512410b4c200bef709e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 27 May 2022 11:30:47 +0800 Subject: [PATCH 0850/2002] Committed 2022/05/27 --- .../Modularity.py | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Modularity.py diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Modularity.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Modularity.py new file mode 100644 index 00000000..e4d2a6c0 --- /dev/null +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Modularity.py @@ -0,0 +1,114 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + From fb3dd2f394851fff38ef031aaa21e16d88b7359d Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 27 May 2022 11:34:56 +0800 Subject: [PATCH 0851/2002] Committed 2022/05/27 --- .../Modularity.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Modularity.py b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Modularity.py index e4d2a6c0..223caf02 100644 --- a/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Modularity.py +++ b/Complex Network Analysis in Python/Chapter 11 - Unearthing the Network Structure/Modularity.py @@ -1,6 +1,7 @@ import matplotlib.pyplot as plt import networkx as nx import networkx.algorithms.approximation as approximate +import community def circuit_to_formula(circuit): @@ -112,3 +113,6 @@ def _to_string(formula, root): plt.axis("equal") plt.show() +part = community.best_partition(graph=circuit) + +print(part) From 51d82482e62bc9d9238406beb60e8ddf910d8aca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 12:24:43 +0800 Subject: [PATCH 0852/2002] Committed 2022/05/29 --- .../Primary_input_output_(bipartie).py | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(bipartie).py diff --git a/NetworkX Altas/Primary_input_output_(bipartie).py b/NetworkX Altas/Primary_input_output_(bipartie).py new file mode 100644 index 00000000..1a119d77 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(bipartie).py @@ -0,0 +1,115 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(nx.is_bipartite(G=circuit)) From 9f3c9efc22ad01f017e347140d8f3e89e1c3b7ef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 12:47:39 +0800 Subject: [PATCH 0853/2002] Committed 2022/05/29 --- .../Primary_input_output_(successor).py | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(successor).py diff --git a/NetworkX Altas/Primary_input_output_(successor).py b/NetworkX Altas/Primary_input_output_(successor).py new file mode 100644 index 00000000..e3b7286c --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(successor).py @@ -0,0 +1,115 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(circuit.successors(8)) From db2d83a89c759ee514d431975406e1cedd2d1ed2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 12:54:58 +0800 Subject: [PATCH 0854/2002] Committed 2022/05/29 --- NetworkX Altas/Primary_input_output_(successor).py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/Primary_input_output_(successor).py b/NetworkX Altas/Primary_input_output_(successor).py index e3b7286c..f7b39199 100644 --- a/NetworkX Altas/Primary_input_output_(successor).py +++ b/NetworkX Altas/Primary_input_output_(successor).py @@ -112,4 +112,7 @@ def _to_string(formula, root): plt.axis("equal") plt.show() -print(circuit.successors(8)) +print(list(circuit.successors(8))) # [1] + +# References: +# 1. https://stackoverflow.com/a/47161556 From 3ab460671421ce08a7e70bc56679d6bfc5a25d54 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 12:56:10 +0800 Subject: [PATCH 0855/2002] Committed 2022/05/29 --- NetworkX Altas/Primary_input_output_(successor).py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Primary_input_output_(successor).py b/NetworkX Altas/Primary_input_output_(successor).py index f7b39199..02e693ad 100644 --- a/NetworkX Altas/Primary_input_output_(successor).py +++ b/NetworkX Altas/Primary_input_output_(successor).py @@ -112,6 +112,7 @@ def _to_string(formula, root): plt.axis("equal") plt.show() +# print(circuit.successors(n=8)) print(list(circuit.successors(8))) # [1] # References: From 7141d781bf83381d4d4d23f46c6c4568fb943d80 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 12:57:33 +0800 Subject: [PATCH 0856/2002] Committed 2022/05/29 --- NetworkX Altas/Primary_input_output_(successor).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Primary_input_output_(successor).py b/NetworkX Altas/Primary_input_output_(successor).py index 02e693ad..adc2171e 100644 --- a/NetworkX Altas/Primary_input_output_(successor).py +++ b/NetworkX Altas/Primary_input_output_(successor).py @@ -113,7 +113,7 @@ def _to_string(formula, root): plt.show() # print(circuit.successors(n=8)) -print(list(circuit.successors(8))) # [1] +print(list(circuit.successors(n=8))) # [1] # References: # 1. https://stackoverflow.com/a/47161556 From 8e089b34309852694860004ef0b3769be305a9ed Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:03:52 +0800 Subject: [PATCH 0857/2002] Committed 2022/05/29 --- .../Primary_input_output_(predecessor).py | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(predecessor).py diff --git a/NetworkX Altas/Primary_input_output_(predecessor).py b/NetworkX Altas/Primary_input_output_(predecessor).py new file mode 100644 index 00000000..adc2171e --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(predecessor).py @@ -0,0 +1,119 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +# print(circuit.successors(n=8)) +print(list(circuit.successors(n=8))) # [1] + +# References: +# 1. https://stackoverflow.com/a/47161556 From b5e3a835f550155e314b1c8a84bf6372f0489976 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:07:46 +0800 Subject: [PATCH 0858/2002] Committed 2022/05/29 --- NetworkX Altas/Primary_input_output_(predecessor).py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/NetworkX Altas/Primary_input_output_(predecessor).py b/NetworkX Altas/Primary_input_output_(predecessor).py index adc2171e..b753a919 100644 --- a/NetworkX Altas/Primary_input_output_(predecessor).py +++ b/NetworkX Altas/Primary_input_output_(predecessor).py @@ -112,8 +112,10 @@ def _to_string(formula, root): plt.axis("equal") plt.show() -# print(circuit.successors(n=8)) -print(list(circuit.successors(n=8))) # [1] +# print(circuit.predecessors(n=8)) +print(list(circuit.predecessors(n=8))) # [1] +print(list(circuit.predecessors(n=10))) +print(list(circuit.predecessors(n=14))) # References: # 1. https://stackoverflow.com/a/47161556 From 34ad596d3b310a1abc447bd5adfb38ef5c76079d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:15:03 +0800 Subject: [PATCH 0859/2002] Committed 2022/05/29 --- NetworkX Altas/predecessors_of_a_path.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 NetworkX Altas/predecessors_of_a_path.py diff --git a/NetworkX Altas/predecessors_of_a_path.py b/NetworkX Altas/predecessors_of_a_path.py new file mode 100644 index 00000000..29544f8e --- /dev/null +++ b/NetworkX Altas/predecessors_of_a_path.py @@ -0,0 +1,6 @@ +import networkx as nx +import matplotlib.pyplot as plt + +G = nx.path_graph(n=4) + +print() From 457518a75280d7780ccb406b9eb185eeeba01a6a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:24:22 +0800 Subject: [PATCH 0860/2002] Committed 2022/05/29 --- NetworkX Altas/predecessors_of_a_path.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/predecessors_of_a_path.py b/NetworkX Altas/predecessors_of_a_path.py index 29544f8e..b94850f2 100644 --- a/NetworkX Altas/predecessors_of_a_path.py +++ b/NetworkX Altas/predecessors_of_a_path.py @@ -3,4 +3,8 @@ G = nx.path_graph(n=4) -print() +nx.draw(G=G, with_labels=True, node_color='y', node_size=800) + +plt.show() + +print(nx.predecessor(G=G, source=0, target=3)) From 082d0c228bf6201b42c43fd517ed406b53590262 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:26:33 +0800 Subject: [PATCH 0861/2002] Committed 2022/05/29 --- NetworkX Altas/predecessors_of_a_path.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NetworkX Altas/predecessors_of_a_path.py b/NetworkX Altas/predecessors_of_a_path.py index b94850f2..25065eff 100644 --- a/NetworkX Altas/predecessors_of_a_path.py +++ b/NetworkX Altas/predecessors_of_a_path.py @@ -8,3 +8,7 @@ plt.show() print(nx.predecessor(G=G, source=0, target=3)) +print(nx.predecessor(G=G, source=0, target=4)) + +# Reference: +# 1. https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.shortest_paths.unweighted.predecessor.html From 946861e5a987749e02ff2aa60ffe0eac6889145d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:27:51 +0800 Subject: [PATCH 0862/2002] Committed 2022/05/29 --- NetworkX Altas/predecessors_of_a_path.py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/predecessors_of_a_path.py b/NetworkX Altas/predecessors_of_a_path.py index 25065eff..9334b46d 100644 --- a/NetworkX Altas/predecessors_of_a_path.py +++ b/NetworkX Altas/predecessors_of_a_path.py @@ -9,6 +9,7 @@ print(nx.predecessor(G=G, source=0, target=3)) print(nx.predecessor(G=G, source=0, target=4)) +print(nx.predecessor(G=G, source=0, target=2)) # Reference: # 1. https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.shortest_paths.unweighted.predecessor.html From bfc5f2d5d790eed03fb46756ea8d7b0baa9adc21 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:30:58 +0800 Subject: [PATCH 0863/2002] Committed 2022/05/29 --- .../predecessors of a node in a path.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 NetworkX Altas/predecessors of a node in a path.py diff --git a/NetworkX Altas/predecessors of a node in a path.py b/NetworkX Altas/predecessors of a node in a path.py new file mode 100644 index 00000000..c459cc29 --- /dev/null +++ b/NetworkX Altas/predecessors of a node in a path.py @@ -0,0 +1,15 @@ +import networkx as nx +import matplotlib.pyplot as plt + +G = nx.path_graph(n=7) + +nx.draw(G=G, with_labels=True, node_color='y', node_size=800) + +plt.show() + +print(nx.predecessor(G=G, source=0, target=6)) +print(nx.predecessor(G=G, source=1, target=4)) +print(nx.predecessor(G=G, source=2, target=2)) + +# Reference: +# 1. https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.shortest_paths.unweighted.predecessor.html From ae24aae1bab20cc7258de5a72d45867203ea2618 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:31:57 +0800 Subject: [PATCH 0864/2002] Committed 2022/05/29 --- NetworkX Altas/predecessors of a node in a path.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/predecessors of a node in a path.py b/NetworkX Altas/predecessors of a node in a path.py index c459cc29..246e6616 100644 --- a/NetworkX Altas/predecessors of a node in a path.py +++ b/NetworkX Altas/predecessors of a node in a path.py @@ -9,7 +9,7 @@ print(nx.predecessor(G=G, source=0, target=6)) print(nx.predecessor(G=G, source=1, target=4)) -print(nx.predecessor(G=G, source=2, target=2)) +print(nx.predecessor(G=G, source=2, target=5)) # Reference: # 1. https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.shortest_paths.unweighted.predecessor.html From b3c151621942060a8baf4fc2bc21a8896c118b7f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:39:32 +0800 Subject: [PATCH 0865/2002] Committed 2022/05/29 --- .../Primary_input_output_(predecessors)2.py | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(predecessors)2.py diff --git a/NetworkX Altas/Primary_input_output_(predecessors)2.py b/NetworkX Altas/Primary_input_output_(predecessors)2.py new file mode 100644 index 00000000..14ba03f9 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(predecessors)2.py @@ -0,0 +1,115 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(nx.predecessor(G=circuit, source=0, target=14)) From 4103e8c6d0da8c7dbf091558b6fb4458ebc01719 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:43:08 +0800 Subject: [PATCH 0866/2002] Committed 2022/05/29 --- NetworkX Altas/Primary_input_output_(predecessors)2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Primary_input_output_(predecessors)2.py b/NetworkX Altas/Primary_input_output_(predecessors)2.py index 14ba03f9..ade273dd 100644 --- a/NetworkX Altas/Primary_input_output_(predecessors)2.py +++ b/NetworkX Altas/Primary_input_output_(predecessors)2.py @@ -113,3 +113,4 @@ def _to_string(formula, root): plt.show() print(nx.predecessor(G=circuit, source=0, target=14)) +print(nx.predecessor(G=circuit, source=1, target=14)) From b6460e06a92f1851b2f0efd5a8ed440eb15031a3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:50:42 +0800 Subject: [PATCH 0867/2002] Committed 2022/05/29 --- NetworkX Altas/Primary_input_output_(predecessors)2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Primary_input_output_(predecessors)2.py b/NetworkX Altas/Primary_input_output_(predecessors)2.py index ade273dd..3ddf942a 100644 --- a/NetworkX Altas/Primary_input_output_(predecessors)2.py +++ b/NetworkX Altas/Primary_input_output_(predecessors)2.py @@ -114,3 +114,4 @@ def _to_string(formula, root): print(nx.predecessor(G=circuit, source=0, target=14)) print(nx.predecessor(G=circuit, source=1, target=14)) +print(nx.predecessor(circuit, 10)) From 372861f3a7ad8664fa5c4d2cbe2068d188fee8d7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:54:06 +0800 Subject: [PATCH 0868/2002] Committed 2022/05/29 --- NetworkX Altas/Primary_input_output_(predecessors)2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Primary_input_output_(predecessors)2.py b/NetworkX Altas/Primary_input_output_(predecessors)2.py index 3ddf942a..2a3e10ff 100644 --- a/NetworkX Altas/Primary_input_output_(predecessors)2.py +++ b/NetworkX Altas/Primary_input_output_(predecessors)2.py @@ -115,3 +115,4 @@ def _to_string(formula, root): print(nx.predecessor(G=circuit, source=0, target=14)) print(nx.predecessor(G=circuit, source=1, target=14)) print(nx.predecessor(circuit, 10)) +print(nx.predecessor(circuit, 8)) From c90e88a975f84fc09689cbe4f84166fb64970877 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 13:57:39 +0800 Subject: [PATCH 0869/2002] Committed 2022/05/29 --- .../Primary_input_output_(successors)2.py | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(successors)2.py diff --git a/NetworkX Altas/Primary_input_output_(successors)2.py b/NetworkX Altas/Primary_input_output_(successors)2.py new file mode 100644 index 00000000..adc2171e --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(successors)2.py @@ -0,0 +1,119 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +# print(circuit.successors(n=8)) +print(list(circuit.successors(n=8))) # [1] + +# References: +# 1. https://stackoverflow.com/a/47161556 From a53f5bbb42da7018360f5275451079977963b8e3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 14:00:49 +0800 Subject: [PATCH 0870/2002] Committed 2022/05/29 --- NetworkX Altas/Primary_input_output_(successors)2.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/NetworkX Altas/Primary_input_output_(successors)2.py b/NetworkX Altas/Primary_input_output_(successors)2.py index adc2171e..3de21eb0 100644 --- a/NetworkX Altas/Primary_input_output_(successors)2.py +++ b/NetworkX Altas/Primary_input_output_(successors)2.py @@ -112,8 +112,5 @@ def _to_string(formula, root): plt.axis("equal") plt.show() -# print(circuit.successors(n=8)) -print(list(circuit.successors(n=8))) # [1] - -# References: -# 1. https://stackoverflow.com/a/47161556 +print(nx.bfs_successors(G=circuit, source=0)) +print(nx.dfs_successors(G=circuit, source=0)) From ae33c060aa47d018917e94bf6160c8c26db61da4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 14:06:18 +0800 Subject: [PATCH 0871/2002] Committed 2022/05/29 --- NetworkX Altas/Condensation.py | 115 +++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 NetworkX Altas/Condensation.py diff --git a/NetworkX Altas/Condensation.py b/NetworkX Altas/Condensation.py new file mode 100644 index 00000000..cb2d7588 --- /dev/null +++ b/NetworkX Altas/Condensation.py @@ -0,0 +1,115 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(nx.condensation(G=circuit)) From 6aa8dd6fd55016162ee951a8c37a028b982baa74 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 14:13:03 +0800 Subject: [PATCH 0872/2002] Committed 2022/05/29 --- NetworkX Altas/Condensation.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/NetworkX Altas/Condensation.py b/NetworkX Altas/Condensation.py index cb2d7588..577f5d5b 100644 --- a/NetworkX Altas/Condensation.py +++ b/NetworkX Altas/Condensation.py @@ -113,3 +113,9 @@ def _to_string(formula, root): plt.show() print(nx.condensation(G=circuit)) + +condensed = nx.condensation(G=circuit) + +nx.draw(G=condensed, with_labels=True, node_color='y', node_size=800) + +plt.show() From bb71e73392f0a6768cbccdd28b9af88fa0b70452 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 14:20:24 +0800 Subject: [PATCH 0873/2002] Committed 2022/05/29 --- .../Circuit's attracting components.py | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 NetworkX Altas/Circuit's attracting components.py diff --git a/NetworkX Altas/Circuit's attracting components.py b/NetworkX Altas/Circuit's attracting components.py new file mode 100644 index 00000000..1a81c8ff --- /dev/null +++ b/NetworkX Altas/Circuit's attracting components.py @@ -0,0 +1,122 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +subgraph = [circuit.subgraph(c).copy() for c in nx.attracting_components(G=circuit)] + +print(subgraph) + +nx.draw(G=subgraph, with_labels=True, node_color='y', node_size=800) + +plt.show() + From fc1e658bd413a50dc2036eeb7fcbb41307c1daa7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 14:25:22 +0800 Subject: [PATCH 0874/2002] Committed 2022/05/29 --- NetworkX Altas/Circuit's attracting components.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Circuit's attracting components.py b/NetworkX Altas/Circuit's attracting components.py index 1a81c8ff..6813fd93 100644 --- a/NetworkX Altas/Circuit's attracting components.py +++ b/NetworkX Altas/Circuit's attracting components.py @@ -112,7 +112,7 @@ def _to_string(formula, root): plt.axis("equal") plt.show() -subgraph = [circuit.subgraph(c).copy() for c in nx.attracting_components(G=circuit)] +subgraph = nx.attracting_components(G=circuit) print(subgraph) From 77fa23cfe33eb315bf99d188d5316e218336c646 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 14:27:28 +0800 Subject: [PATCH 0875/2002] Committed 2022/05/29 --- NetworkX Altas/Circuit's attracting components.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/NetworkX Altas/Circuit's attracting components.py b/NetworkX Altas/Circuit's attracting components.py index 6813fd93..7d8fa042 100644 --- a/NetworkX Altas/Circuit's attracting components.py +++ b/NetworkX Altas/Circuit's attracting components.py @@ -112,11 +112,6 @@ def _to_string(formula, root): plt.axis("equal") plt.show() -subgraph = nx.attracting_components(G=circuit) +subgraph = nx.number_attracting_components(G=circuit) print(subgraph) - -nx.draw(G=subgraph, with_labels=True, node_color='y', node_size=800) - -plt.show() - From 2bb47eacd918916ff14271b5d9bb7c62f21895bc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 14:34:57 +0800 Subject: [PATCH 0876/2002] Committed 2022/05/29 --- .../Circuit's attracting components2.py | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 NetworkX Altas/Circuit's attracting components2.py diff --git a/NetworkX Altas/Circuit's attracting components2.py b/NetworkX Altas/Circuit's attracting components2.py new file mode 100644 index 00000000..7d8fa042 --- /dev/null +++ b/NetworkX Altas/Circuit's attracting components2.py @@ -0,0 +1,117 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +subgraph = nx.number_attracting_components(G=circuit) + +print(subgraph) From ca96a894dc7890c2c4cc206912cbb0cf5f1a8c52 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 14:40:54 +0800 Subject: [PATCH 0877/2002] Committed 2022/05/29 --- NetworkX Altas/Circuit's attracting components2.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/NetworkX Altas/Circuit's attracting components2.py b/NetworkX Altas/Circuit's attracting components2.py index 7d8fa042..c8f0ba10 100644 --- a/NetworkX Altas/Circuit's attracting components2.py +++ b/NetworkX Altas/Circuit's attracting components2.py @@ -112,6 +112,8 @@ def _to_string(formula, root): plt.axis("equal") plt.show() -subgraph = nx.number_attracting_components(G=circuit) +for subgraph in nx.attracting_components(G=circuit): + subgraph_ = circuit.subgraph(nodes=subgraph).copy() -print(subgraph) + print(subgraph_.edges()) + print(subgraph_.nodes()) From 39bae314b6066054aa4fa58456598f94a8c77ca5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 14:42:01 +0800 Subject: [PATCH 0878/2002] Committed 2022/05/29 --- NetworkX Altas/Circuit's attracting components2.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NetworkX Altas/Circuit's attracting components2.py b/NetworkX Altas/Circuit's attracting components2.py index c8f0ba10..6eff7179 100644 --- a/NetworkX Altas/Circuit's attracting components2.py +++ b/NetworkX Altas/Circuit's attracting components2.py @@ -117,3 +117,8 @@ def _to_string(formula, root): print(subgraph_.edges()) print(subgraph_.nodes()) + + +# References: +# 1. https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.components.attracting_components.html#networkx.algorithms.components.attracting_components +# 2. https://stackoverflow.com/a/22180998/ From 2b4ce36a1b98ec31739c303d729daa89f5f6db90 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 15:02:41 +0800 Subject: [PATCH 0879/2002] Committed 2022/05/29 --- NetworkX Altas/topological sort.py | 116 +++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 NetworkX Altas/topological sort.py diff --git a/NetworkX Altas/topological sort.py b/NetworkX Altas/topological sort.py new file mode 100644 index 00000000..3be4073e --- /dev/null +++ b/NetworkX Altas/topological sort.py @@ -0,0 +1,116 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="PO1", layer=3) +circuit.add_node(14, label="PO2", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + + + From 09ec64126b6a2ed22017c7f4eeed7a048ca6777f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 15:04:52 +0800 Subject: [PATCH 0880/2002] Committed 2022/05/29 --- NetworkX Altas/topological sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/topological sort.py b/NetworkX Altas/topological sort.py index 3be4073e..b14b039e 100644 --- a/NetworkX Altas/topological sort.py +++ b/NetworkX Altas/topological sort.py @@ -112,5 +112,5 @@ def _to_string(formula, root): plt.axis("equal") plt.show() - +print(nx.topological_sort(G=circuit)) From 80e2ef4b01fab9c00a40982fdbaff5a35b1b9766 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 15:05:46 +0800 Subject: [PATCH 0881/2002] Committed 2022/05/29 --- NetworkX Altas/topological sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/topological sort.py b/NetworkX Altas/topological sort.py index b14b039e..81e79a66 100644 --- a/NetworkX Altas/topological sort.py +++ b/NetworkX Altas/topological sort.py @@ -112,5 +112,5 @@ def _to_string(formula, root): plt.axis("equal") plt.show() -print(nx.topological_sort(G=circuit)) +print(list(nx.topological_sort(G=circuit))) From 2b256caed7603d3f72a5df80c290ec551b5a7bec Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 15:06:41 +0800 Subject: [PATCH 0882/2002] Committed 2022/05/29 --- NetworkX Altas/topological sort.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/topological sort.py b/NetworkX Altas/topological sort.py index 81e79a66..17908161 100644 --- a/NetworkX Altas/topological sort.py +++ b/NetworkX Altas/topological sort.py @@ -113,4 +113,5 @@ def _to_string(formula, root): plt.show() print(list(nx.topological_sort(G=circuit))) - +print(list(nx.topological_sort(G=circuit))) +print(list(nx.topological_sort(G=circuit))) From e7873debcc7229998f048d8575797be89582ef99 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 May 2022 15:10:17 +0800 Subject: [PATCH 0883/2002] Committed 2022/05/29 --- NetworkX Altas/topological sort 2.py | 117 +++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 NetworkX Altas/topological sort 2.py diff --git a/NetworkX Altas/topological sort 2.py b/NetworkX Altas/topological sort 2.py new file mode 100644 index 00000000..8933c3ea --- /dev/null +++ b/NetworkX Altas/topological sort 2.py @@ -0,0 +1,117 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="0", layer=0) +circuit.add_node(1, label="1", layer=0) +circuit.add_node(2, label="2", layer=0) +circuit.add_node(3, label="3", layer=0) +circuit.add_node(4, label="4", layer=0) + +# Layer 1 +circuit.add_node(5, label="5", layer=1) +circuit.add_node(6, label="6", layer=1) +circuit.add_node(7, label="7", layer=1) +circuit.add_node(8, label="8", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="9", layer=2) +circuit.add_node(10, label="10", layer=2) +circuit.add_node(11, label="11", layer=2) +circuit.add_node(12, label="12", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="13", layer=3) +circuit.add_node(14, label="14", layer=3) + + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(list(nx.topological_sort(G=circuit))) +print(list(nx.topological_sort(G=circuit))) +print(list(nx.topological_sort(G=circuit))) From 062b2eed3389f1cbae5fbbb1c28c5e8a0ed1d9da Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 13:14:40 +0800 Subject: [PATCH 0884/2002] Committed 2022/05/29 --- .../Independent set & bipartite graphs/Independent set.py | 6 ++++++ .../Independent set & bipartite graphs/__init__.py | 0 2 files changed, 6 insertions(+) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/Independent set.py create mode 100644 NetworkX Altas/Independent set & bipartite graphs/__init__.py diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py new file mode 100644 index 00000000..e5f16e4b --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py @@ -0,0 +1,6 @@ +import networkx as nx +import matplotlib.pyplot as plt + +G = nx.path_graph(n=5) + + diff --git a/NetworkX Altas/Independent set & bipartite graphs/__init__.py b/NetworkX Altas/Independent set & bipartite graphs/__init__.py new file mode 100644 index 00000000..e69de29b From 6154b08776598b014e742347748156adf16d565b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 13:15:49 +0800 Subject: [PATCH 0885/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/Independent set.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py index e5f16e4b..6fb5ee26 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py @@ -3,4 +3,7 @@ G = nx.path_graph(n=5) +nx.draw(G=G, with_labels=True, node_color='y', node_size=800) + +plt.show() From 0c68042d981b82d7c8e11bddd4801fa52cb053da Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 13:26:20 +0800 Subject: [PATCH 0886/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/Independent set.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py index 6fb5ee26..095000df 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py @@ -7,3 +7,5 @@ plt.show() +print(nx.maximal_independent_set(G=G)) + From 1b20132d66086d376970e533076a0580cc3bd93d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 13:36:57 +0800 Subject: [PATCH 0887/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/Independent set.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py index 095000df..e8f20153 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py @@ -8,4 +8,4 @@ plt.show() print(nx.maximal_independent_set(G=G)) - +print(nx.maximal_independent_set(G=G)) From cc186460e220670899f143d14c8e617f08722e62 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 13:38:04 +0800 Subject: [PATCH 0888/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/Independent set.py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py index e8f20153..505106b2 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py @@ -9,3 +9,4 @@ print(nx.maximal_independent_set(G=G)) print(nx.maximal_independent_set(G=G)) +print(nx.maximal_independent_set(G=G)) \ No newline at end of file From 208b7789fe44925cc0122b797ba4398affb07947 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 13:59:26 +0800 Subject: [PATCH 0889/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/Independent set.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py index 505106b2..efab401a 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py @@ -9,4 +9,6 @@ print(nx.maximal_independent_set(G=G)) print(nx.maximal_independent_set(G=G)) -print(nx.maximal_independent_set(G=G)) \ No newline at end of file +print(nx.maximal_independent_set(G=G)) +print(nx.maximal_independent_set(G=G)) +print(nx.maximal_independent_set(G=G)) From 68c25e6291eaf4d202a11c6239b74a0552df948d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 14:24:36 +0800 Subject: [PATCH 0890/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/Independent set.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py index efab401a..69c50fe4 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py @@ -10,5 +10,8 @@ print(nx.maximal_independent_set(G=G)) print(nx.maximal_independent_set(G=G)) print(nx.maximal_independent_set(G=G)) -print(nx.maximal_independent_set(G=G)) -print(nx.maximal_independent_set(G=G)) +print(nx.maximal_independent_set(G=G, nodes=[1])) +print(nx.maximal_independent_set(G=G, nodes=[4])) + +# Reference: +# https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.mis.maximal_independent_set.html#networkx.algorithms.mis.maximal_independent_set From c373c9665e8907499f7e1cc0985874d82fda3d72 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 14:25:38 +0800 Subject: [PATCH 0891/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/Independent set.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py index 69c50fe4..240160ec 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py @@ -10,7 +10,10 @@ print(nx.maximal_independent_set(G=G)) print(nx.maximal_independent_set(G=G)) print(nx.maximal_independent_set(G=G)) +print(nx.maximal_independent_set(G=G, nodes=[0])) print(nx.maximal_independent_set(G=G, nodes=[1])) +print(nx.maximal_independent_set(G=G, nodes=[2])) +print(nx.maximal_independent_set(G=G, nodes=[3])) print(nx.maximal_independent_set(G=G, nodes=[4])) # Reference: From 328317b3fa379920b17a0fc94b807d319da7d88c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 14:26:04 +0800 Subject: [PATCH 0892/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/Independent set.py | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py index 240160ec..84fcd30c 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.py @@ -10,6 +10,7 @@ print(nx.maximal_independent_set(G=G)) print(nx.maximal_independent_set(G=G)) print(nx.maximal_independent_set(G=G)) +print(nx.maximal_independent_set(G=G)) print(nx.maximal_independent_set(G=G, nodes=[0])) print(nx.maximal_independent_set(G=G, nodes=[1])) print(nx.maximal_independent_set(G=G, nodes=[2])) From 68f86e04ac480354da1ad8e490d0cc2c12b6dbee Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 18:00:04 +0800 Subject: [PATCH 0893/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/Matching.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/Matching.py diff --git a/NetworkX Altas/Independent set & bipartite graphs/Matching.py b/NetworkX Altas/Independent set & bipartite graphs/Matching.py new file mode 100644 index 00000000..25f79f94 --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/Matching.py @@ -0,0 +1,8 @@ +import networkx as nx +import matplotlib.pyplot as plt + +G = nx.Graph(incoming_graph_data=[(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)]) + +nx.draw(G=G, with_labels=True, node_color='y', node_size=800) + +plt.show() From a0ac637255c126881f6fd300304fa3f47b732d06 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 18:20:44 +0800 Subject: [PATCH 0894/2002] Committed 2022/05/31 --- NetworkX Altas/Independent set & bipartite graphs/Matching.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Matching.py b/NetworkX Altas/Independent set & bipartite graphs/Matching.py index 25f79f94..e83ae39c 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Matching.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Matching.py @@ -6,3 +6,5 @@ nx.draw(G=G, with_labels=True, node_color='y', node_size=800) plt.show() + +print(nx.maximal_matching(G=G)) From 67aa5a98eca08809942c90497341e55340ae73d6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 18:22:19 +0800 Subject: [PATCH 0895/2002] Committed 2022/05/31 --- NetworkX Altas/Independent set & bipartite graphs/Matching.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Matching.py b/NetworkX Altas/Independent set & bipartite graphs/Matching.py index e83ae39c..9bad4e0e 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Matching.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Matching.py @@ -8,3 +8,7 @@ plt.show() print(nx.maximal_matching(G=G)) + +# Reference: +# https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.matching.maximal_matching.html + From 728f4c5244149c406fbbc96093bf47dc68d8bea7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 18:36:40 +0800 Subject: [PATCH 0896/2002] Committed 2022/05/31 --- .../is_matching().py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/is_matching().py diff --git a/NetworkX Altas/Independent set & bipartite graphs/is_matching().py b/NetworkX Altas/Independent set & bipartite graphs/is_matching().py new file mode 100644 index 00000000..fed37a74 --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/is_matching().py @@ -0,0 +1,12 @@ +import networkx as nx +import matplotlib.pyplot as plt + +G = nx.Graph(incoming_graph_data=[(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)]) + +nx.draw(G=G, with_labels=True, node_color='y', node_size=800) + +plt.show() + +print(nx.maximal_matching(G=G)) + +print(nx.is_matching(G=G, matching={(2, 4), (3, 5)})) From e7b8343b3a67f14fda0466537c861660c94a53fb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 18:39:27 +0800 Subject: [PATCH 0897/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/is_matching().py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/is_matching().py b/NetworkX Altas/Independent set & bipartite graphs/is_matching().py index fed37a74..261c51a4 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/is_matching().py +++ b/NetworkX Altas/Independent set & bipartite graphs/is_matching().py @@ -10,3 +10,6 @@ print(nx.maximal_matching(G=G)) print(nx.is_matching(G=G, matching={(2, 4), (3, 5)})) + +# Reference: +# https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.matching.is_matching.html#networkx.algorithms.matching.is_matching From 25807bbd154e7a4d29889cfba35c68787ccde826 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 18:56:13 +0800 Subject: [PATCH 0898/2002] Committed 2022/05/31 --- .../Matching & independent set.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/Matching & independent set.py diff --git a/NetworkX Altas/Independent set & bipartite graphs/Matching & independent set.py b/NetworkX Altas/Independent set & bipartite graphs/Matching & independent set.py new file mode 100644 index 00000000..15c44c30 --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/Matching & independent set.py @@ -0,0 +1,13 @@ +import networkx as nx +import matplotlib.pyplot as plt + +G = nx.Graph(incoming_graph_data=[(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)]) + +nx.draw(G=G, with_labels=True, node_color='y', node_size=800) + +plt.show() + +print(nx.maximal_matching(G=G)) + +print(nx.is_matching(G=G, matching={(2, 4), (3, 5)})) +print(nx.maximal_independent_set(G=G)) \ No newline at end of file From e0690f7b417abc2cf3a43ca20ffc9fd459c619cc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 19:03:38 +0800 Subject: [PATCH 0899/2002] Committed 2022/05/31 --- .../min_max_matching().py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py diff --git a/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py b/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py new file mode 100644 index 00000000..7603babb --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py @@ -0,0 +1,14 @@ +import networkx as nx +import matplotlib.pyplot as plt + +G = nx.Graph(incoming_graph_data=[(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)]) + +nx.draw(G=G, with_labels=True, node_color='y', node_size=800) + +plt.show() + +print(nx.maximal_matching(G=G)) + +print(nx.is_matching(G=G, matching={(2, 4), (3, 5)})) +print(nx.maximal_independent_set(G=G)) +print(nx.algorithms.min_weight_matching(G=G)) From 3bb80c74a542019c0fcc45385fc330154a4dbc4a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 19:06:20 +0800 Subject: [PATCH 0900/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/min_max_matching().py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py b/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py index 7603babb..7529ec63 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py +++ b/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py @@ -11,4 +11,4 @@ print(nx.is_matching(G=G, matching={(2, 4), (3, 5)})) print(nx.maximal_independent_set(G=G)) -print(nx.algorithms.min_weight_matching(G=G)) +print(nx.algorithms.approximation.min_maximal_matching(G=G)) From 2776c33ae857eb0cb1447a907b4078ed3f75ef28 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 19:08:14 +0800 Subject: [PATCH 0901/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/min_max_matching().py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py b/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py index 7529ec63..4ffe4057 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py +++ b/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py @@ -12,3 +12,6 @@ print(nx.is_matching(G=G, matching={(2, 4), (3, 5)})) print(nx.maximal_independent_set(G=G)) print(nx.algorithms.approximation.min_maximal_matching(G=G)) + +# Reference: +# https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.approximation.matching.min_maximal_matching.html#networkx.algorithms.approximation.matching.min_maximal_matching From 42c53d233f9ecdeea95bc12340d3d4ce8ac42316 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 31 May 2022 19:09:48 +0800 Subject: [PATCH 0902/2002] Committed 2022/05/31 --- .../Independent set & bipartite graphs/min_max_matching().py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py b/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py index 4ffe4057..15e8bde5 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py +++ b/NetworkX Altas/Independent set & bipartite graphs/min_max_matching().py @@ -11,6 +11,9 @@ print(nx.is_matching(G=G, matching={(2, 4), (3, 5)})) print(nx.maximal_independent_set(G=G)) + +# Returns the minimum maximal matching of G. +# That is, out of all maximal matchings of the graph G, the smallest is returned. print(nx.algorithms.approximation.min_maximal_matching(G=G)) # Reference: From 0d9d741bdfc63a38001c7eb4471888b5962caa7d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 3 Jun 2022 00:00:14 +0800 Subject: [PATCH 0903/2002] Committed 2022/06/02 --- .../2021/September_metro_EN_ZH.py | 37 +++++++++++++++++++ .../2021/__init__.py | 0 2 files changed, 37 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/September_metro_EN_ZH.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/September_metro_EN_ZH.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/September_metro_EN_ZH.py new file mode 100644 index 00000000..3623ecea --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/September_metro_EN_ZH.py @@ -0,0 +1,37 @@ +import matplotlib.pyplot as plt +import matplotlib +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [140966, 72721, 61138, 31208, 31440] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) # [1] + +plt.title("2021/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20210927094609/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(30000, 130000) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/a/12444777/ +# 2. https://stackoverflow.com/a/11386056/ \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/__init__.py new file mode 100644 index 00000000..e69de29b From 1999f17717fa99e34e9717c65f82abf4dead2c26 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 3 Jun 2022 18:32:16 +0800 Subject: [PATCH 0904/2002] Committed 2022/06/03 --- .../Independent set.ipynb | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb b/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb new file mode 100644 index 00000000..d8e41328 --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb @@ -0,0 +1,73 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "Independent set or stable set is a set of vertices in a graph, no two of which are adjacent.[1]\n", + "The size of an independent set is the number of vertices it contains.[1]" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "source": [ + "References:\n", + "1. https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.approximation.clique.maximum_independent_set.html" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 7c53cc714bb7ae865d09476ec9c1a8b71939e09a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 3 Jun 2022 18:37:44 +0800 Subject: [PATCH 0905/2002] Committed 2022/06/03 --- .../Independent set.ipynb | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb b/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb index d8e41328..887c0045 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb @@ -15,15 +15,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "collapsed": true, "pycharm": { "name": "#%%\n" } }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1, 5}\n" + ] + } + ], + "source": [ + "import networkx as nx\n", + "import matplotlib.pyplot as plt\n", + "\n", + "G = nx.Graph(incoming_graph_data=[(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)])\n", + "\n", + "nx.draw(G=G, with_labels=True, node_color='b', node_size=800)\n", + "\n", + "plt.show()\n", + "\n", + "print(nx.approximation.maximum_independent_set(G=G))" + ] }, { "cell_type": "markdown", From b9bb85bca6da14a90d9e4088de2c5211c4757b89 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 3 Jun 2022 18:42:03 +0800 Subject: [PATCH 0906/2002] Committed 2022/06/03 --- .../Independent set.ipynb | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb b/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb index 887c0045..a5da39d7 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 6, "metadata": { "collapsed": true, "pycharm": { @@ -26,7 +26,7 @@ { "data": { "text/plain": "
      ", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA0BElEQVR4nO3deVyVZd4G8OsgB1k0l9gU3NAEEdpUUBFFkM0yx1IrBU1tpmXaZumd6W0m67Wad6ZtWrW3RssDqVO2aMUqbizu4oqKQhIiW4oLoJzDed4/njgTGXj2+5zzXN/Px09T43meX84cL+/7dy8qSZIkEBERKYSb6AKIiIjsicFHRESKwuAjIiJFYfAREZGiMPiIiEhRGHxERKQoDD4iIlIUBh8RESkKg4+IiBSFwUdERIrC4CMiIkVh8BERkaIw+IiISFEYfEREpCgMPiIiUhQGHxERKYq76AKIiJRIqwXq6oC2NsDDAwgIANRq0VUpA4OPiMgOJAkoKgJWrQIKC4HKSjno3NwAvV4OwmHDgEmTgEWLgJgYQKUSXbVrUkmSJIkugojIVUkSkJEBLF0K1NcDLS3yP+uKSgV4ewP+/sALLwBpaQxAa2PwERHZSHU1MH8+sHcv0Nxs+ud9fIAxY4DMTCA42Pr1KRWDj4jIBgoLgenTgdZWQKcz/znu7oCXF5CVJU9/kuUYfEREVlZYCCQny9Oa1uLtDeTmMvysgcFHRGRF1dVAeDhw6ZL1n927N3D0KKc9LcV9fEREViJJwLx58vSmLbS2yj1DDlcsw+AjIrKSjAxg3z7Lenrd0enkhTKZmbZ5vlJwqpOIyAokCRg+XN6fZ2shIcDJk9zmYC6O+IiIrKCoSN6nZ7pyAJ4A0oz+RF0dUFxszrsIYPAREVnFqlXmruL8LYBxJn2ipQVYudKcdxHA4CMisorCQnMWnawF0BdAgkmf6jj+jMzD4CMispBWa05v7yKA5wC8btY7Kyrk95LpGHxERBaqqzPnZoW/AlgCwLxNeWq1/F4yHW9nICKyUFubfMuC8UoB5APYb/Y73dzk95LpGHxERBby8JCvFjLeFgDfARj8499fBtAO4CiAfUY9Qa+X30um4z4+IiILabXyTQrG99xaIPf4OrwKOQiXA/Az6glqtXzjAy+vNR17fEREFlKr5UtkjecNIPAnP3pB3stnXOgB8iZ2hp55ONVJRGSBtrY2ZGVl4epVHwBTAfQw4ynPm/SzVSre0mAJjviIiEwkSRJ27NiB3/72twgKCsJrr72GuXNb4O1tn99Svb2BxYvt8iqXxB4fEZGRKisrkZGRAY1GAwBYsGAB5s+fj2HDhvGsTifCqU4iom6cP38en376KTQaDY4dO4Z7770XGo0GUVFRUP0keVQq4IUXgEcekRed2IqPj/wehp75OOIjIvqZtrY2ZGdnQ6PRIDc3F4mJiUhPT0dqaio8utlDIElAXJx8gLQtriZyd5d7e5s3M/gsweAjIoLct9u1axc0Gg3WrVuHsLAwpKenY86cOejXr5/Rz7H1DexlZUBQkPWfrSSc6iQiRfvuu+8MfTu9Xo/09HTs3LkTISEhZj0vOBjIygKSksy9reGXeXvLz2XoWY4jPiJSnKamJkPfrqysDHPnzkV6ejqio6M79e0sUVQEpKYCra2WTXu6uwNeXnLocQuDdTD4iEgRtFqtoW+Xk5ODadOmIT09HdOnT++2b2eJ6mpg/nxg717zFrz4+ABjxwIZGfJIkqyDwUdELkuSJOzevdvQtxs5ciTS09Mxd+5ck/p2ltUAZGYCS5fKtym0tFzv3j49fHzcEBAgr96cP58LWayNwUdELuf06dOGvp1Op0N6ejrS0tIwfPhwYTVJkrzac+VKeRq0okI+cszNTT5wWqsFAgOb0dq6CV9+eRcmTmTg2QqDj4hcwoULFwx9uyNHjhj6duPHj7da386atFp5BNjWJt+yEBAAtLdfgZ+fH77//nv07dtXdIkui6s6ichpabVa5OTkQKPRIDs7GwkJCXjqqacwffp09OzZU3R53VKrr+3bqdWeGD9+PLZu3YqZM2eKKUwBGHxE5FQkScLevXuh0Wiwdu1ajBgxAunp6Vi+fDn69+8vujyLJSQkoKCggMFnQww+InIKp0+fRmZmJjQaDdra2pCeno6ioiKMGDFCdGlWlZCQgEWLFokuw6Wxx0dEDuvixYv47LPPsHr1ahw6dMjQt5swYYJD9u2sob29Hb6+vigrK0NgYKDoclwSryUiIoei1WrxzTff4L777sPgwYOxceNGPPHEE6ipqcHy5csxceJElw09AOjRowemTJmCgoIC0aW4LE51EpFwkiRh37590Gg0WLNmDYYPH4709HS8++67uPHGG0WXZ3cdfb558+aJLsUlMfiISJiqqipD3+7KlStIT09HYWEhbrrpJtGlCZWQkIDXX39ddBkuiz0+IrKrixcvYv369Vi9ejUOHjyIOXPmID093eWnME0hSRIGDhyIoqIisw/Lpq5xxEdENqfT6ZCbmwuNRoOsrCzExcXhsccewx133AFPT0/R5TkclUqF+Ph4bNq0icFnA1zcQkQ20dG3+93vfofg4GAsW7YMsbGxOHXqFL788kvcc889DL1udPT5yPo41UlEVvX9998b+natra1IS0tDWloaRo4cKbo0p3L69GlERUWhtraWU8BWxqlOIrLYpUuXsH79emg0GpSWluKee+7B+++/j5iYGP6mbaYhQ4agV69eOHz4MCIjI0WX41IYfERkFp1Oh7y8PGg0Gnz77beYMmUKHnnkEdx5552cwrSShIQEbNq0icFnZZzqJCKjSZKE0tJSw367wYMHY8GCBbj33nvh6+srujyXs27dOmRmZmLDhg2iS3EpDD4iuq7q6mpD3665udnQtwsNDRVdmkurr6/HyJEj0djYCHd3TtBZC38liegXXbp0CZ9//jk0Gg327duHe+65B8uXL0dMTAzc3Lgg3B78/f0xePBg7NmzB+PHjxddjstg8BGRgU6nQ35+PjQaDb755htMnjwZDz30EGbMmMG+nSAdfT4Gn/Xwj21ECtfRt/vDH/6AQYMG4bnnnsOECRNQXl6ODRs2YM6cOQw9gbifz/rY4yNSqDNnzuCTTz7B6tWrcenSJUPfLiwsTHRp9BMXL17EwIED0dDQAC8vL9HluAROdRIpyOXLlw19u7179+Luu+/GO++8g9jYWPbtHNQNN9yAyMhIFBcXIyEhQXQ5LoHBR+Ti2tvbsWnTJmg0GmzcuBGxsbH49a9/jQ0bNnAE4SQ6+nwMPutg8BG5qAMHDkCj0eCTTz5BUFAQFixYgNdffx1+fn6iSyMTJSQk4JlnnhFdhstgj4/IhdTU1Bj6dhcuXEBaWhrS09PZt3NyV65cgZ+fH6qrq9GnTx/R5Tg9TuoTObnLly9Do9EgKSkJERERKCsrw1tvvYXKykq89NJLDD0X4OnpiejoaGzdulV0KS6BU51ETqi9vR0FBQWGvl1MTAyWLFmCr776in07F9XR57vrrrtEl+L0GHxETuTgwYOGvt2AAQOQnp6OV199Ff7+/qJLIxtLSEjAkiVLRJfhEtjjI3JwZ8+exSeffAKNRoNz584Z+najRo0SXRrZkU6ng5+fH44dO4aAgADR5Tg19viIHFBzczMyMjKQnJyM8PBwHDlyBG+88Qa+++47vPzyyww9BXJ3d8fkyZN5iosVMPiIHER7ezvy8/OxcOFCBAcHY82aNVi0aBHOnDmDlStXYurUqdxkrnAdfT6yDKc6iQQ7dOiQoW8XEBCA9PR03H///ZzOomscOXIEM2bMQEVFhehSnBoXtxAJUFtba+jbNTY2Ii0tDbm5uQgPDxddGjmw8PBwtLS0oLKyEsOGDRNdjtPivAmRnbS0tOCTTz5BSkoKRo0ahUOHDuG1117D6dOn8be//Y2hR9elUqkQHx/P6U4LMfiIbKjjnMwHHngAQUFB0Gg0WLhwIc6cOYNVq1YhPj6efTsyCft8lmOPj8gGDh8+bOjb+fn5Gfp2gYGBoksjJ/fdd98hOjoatbW1UKlUostxSuzxEVlJbW0t1qxZA41Gg/r6eqSlpSE7OxujR48WXRq5kKFDh6JXr144cuQIIiIiRJfjlBh8RBZoaWnBV199hdWrV2PHjh2YOXMmXnnlFcTFxaFHjx6iyyMX1dHnY/CZh80FcmhaLVBdDVRUyH/VakVXBOj1ehQUFGDRokUICgrCxx9/jLS0NFRXV+Ojjz5CQkICQ49sin0+y7DHRw5FkoCiImDVKqCwEKisBNRqwM0N0Ovl4Bs2DJg0CVi0CIiJAezV5jh69Cg0Gg0yMzNx4403Gvp2AwYMsE8BRD+qr6/HyJEj0djYCHd3TtyZisFHDkGSgIwMYOlSoL4eaGmR/1lXVCrA2xvw9wdeeAFIS7NNANbV1Rn6drW1tZg/fz7S09MRGRlp/ZcRmeDmm2/GBx98gOjoaNGlOB0GHwlXXQ3Mnw/s3Qs0N5v+eR8fYMwYIDMTCA62vJ7W1lZD3664uBgzZ85Eeno6pk6dyilMchhPPfUU/P398d///d+iS3E6DD4SqrAQmD4daG0FdDrzn+PuDnh5AVlZ8vSnqfR6PbZu3QqNRoMvvvgCUVFRSE9Px6xZs+Dj42N+YUQ2snHjRvzzn/9kr88MDD4SprAQSE6WpzWtxdsbyM01PvzKysoMfbt+/fohPT0d8+bNY9+OHN7FixcRFBSEhoYGeHp6ii7HqXBVJwlRXS2P9KwZeoD8vNRU+fldqa+vx5tvvomxY8di2rRp0Gq12LhxI0pLS/GHP/yBoUdO4YYbbkBERASKi4tFl+J0GHxkd5IEzJsnT2/aQmur3DP86VxGa2sr1q1bhzvvvBMjR47E3r178be//Q1VVVV45ZVXcPPNN9umGCIb4rmd5mHwkd1lZAD79lnW0+uOTicvlMnI0GPLli1YsmQJgoKC8K9//Qv33nsvqqursXr1aiQmJnKxCjk17uczD3t8ZFeSBAwfLu/Ps7UePU4jPPwuLFgg9+0GDhxo+5cS2dGVK1fg5+eH6upq9OnTR3Q5ToMjPrKroiJ5n55xrgJYAmAIgN4AbgWQZfS7PDyCsXz5Afzxj39k6JFL8vT0RHR0NLZt2ya6FKfC4CO7WrXKlAUtOgCDAGwFcAHAiwDmAvjOqE9fudIDK1eaXiORM2Gfz3QMPrKrwsLuT2TpzAfA8wCGQv6/6p0AhgHYa9SnO44/I3Jl7POZjj0+shutVj5lxfyDpusgT3uWAggz6hNqtXwajFpt7juJHJtOp4Ovry+OHz+OgIAA0eU4BY74yG7q6iwJIC2A+QAWwtjQA+T31dWZ+04ix+fu7o4pU6Zg8+bNoktxGgw+spu2NvmWBdPpAaQD8ADwjkmfdHOT30vkytjnMw2Dj+zGw0O+Wsg0EuSVnXUA1gMwbcio18vvJXJl7POZhsFHdhMQYE5/7xEAZQA2AvAy+Z1arfxeIlc2evRotLS0oNIeG2RdAIOP7Eatli+RNd5pAO9DXswSCKDXjz8yjX5CSAgXtpDrU6lUiI+PR0FBgehSnAKDj+xq0iRTLowdAnmq8wqAyz/5Md+oT6tU5l1RROSM2OczHoOP7GrRIvnqIHvw9gYWL7bPu4hES0hIQEFBAbhD7foYfGRXMTGAv7993hUQAEycaJ93EYk2bNgweHt74+jRo6JLcXgMPrIrlQp44QV5I7st+fjI7zF+WpXI+XF1p3EYfGR3aWnAmDGAu7ttnu/uDowdK9/JR6Qk7PMZh0eWkRDV1UBoqA4tLdZPv969gbIyICjI6o8mcmh1dXUICwtDQ0MD3G31J0sXwBEfCfHDDwfg4fEr9Oxp3dtovb2BrCyGHilTQEAAgoODsW/fPtGlODQGH9ldeXk5UlNT8f77C7Bpkzt697Z82tPdXR7p5eZyCwMpG/t818fgI7uqqqpCYmIili1bhrlz5yImBjh6VF59ae6CFx8fGJ7D0COlY5/v+tjjI7upr69HbGwsHnroIfz+97/v9N9JEpCZCSxdKt+m0NLS/b19KpUEb28VAgLk1Zvz53MFJxEAXLhwAcHBwWhoaICnp6fochwSR3xkF01NTUhOTsZ99913TegBcmilpQEnTwI5OfJG99BQ+bgxb2+gVy/5r2q1BHf3k5g1qwk5OfLPT0tj6BF16NOnD0aPHo2SkhLRpTgsjvjI5pqbm5GUlISxY8fin//8J1QmpJRWK48A29rkWxYCAoCHH16CW2+9FY8//rgNqyZyXs8++yxUKhVefPFF0aU4JI74yKauXr2KWbNmYeTIkXjjjTdMCj1AHvEFB8uHTQcHy3/fcTQTEf0y9vm6xxEf2YxOp8O9994LlUqFtWvXWm1fUW1tLUaNGoXGxkb06NHDKs8kciWtra3w8/NDTU0NbrjhBtHlOByO+Mgm9Ho9HnzwQVy+fBmZmZlW3UwbGBiIgQMHcq8SURe8vLwQHR2Nbdu2iS7FITH4yOokScJTTz2FkydP4vPPP0fPnj2t/g7uVSLqHr8jXWPwkdUtXboU27dvx9dffw0fG51GzT4fUffY5+sae3xkVa+99ho++OADbNu2Df42vH+oqakJgwYNQmNjo01GlETOTqfTwdfXFydOnLDpd9EZccRHVvPhhx/i7bffRl5ens2/aH379sWoUaO4V4moC+7u7pg8eTI2b94suhSHw+Ajq1i3bh2WLl2KvLw8DBo0yC7vZA+DqHv8jvwyBh9Z7Ntvv8UTTzyBrKws3HTTTXZ7L/t8RN1j8P0y9vjIItu2bcPs2bOxYcMGjB8/3q7v7tirdPbsWfTu3duu7yZyBpIkITAwEDt37sTQoUNFl+MwOOIjs+3ZswezZ8/GmjVr7B56gLxXady4cdyrRNQFlUqF+Ph4zoz8DIOPzHL06FHceeed+OCDD5CQkCCsDk7lEHWP35FrMfjIZJWVlUhOTsarr76KmTNnCq2FfT6i7nV8R9jV+g8GH5mkpqYG06ZNwzPPPIO0tDTR5WDcuHGorKxEQ0OD6FKIHNKwYcPg6emJsrIy0aU4DAYfGe2HH35AYmIiHnzwQTz66KOiywEg71WKjY3lXiWibnC6szMGHxnl4sWLSElJwYwZM/DMM8+ILqcTfqmJusfvSGfczkDX1draitTUVIwaNQrvvfeeyXfq2drBgwdxzz33oLy8XHQpRA6prq4OYWFhaGhosOpNKc6KIz7qVltbG+bMmYOgoCC8++67Dhd6ABAREYELFy6gqqpKdClEDikgIABBQUHYv3+/6FIcAoOPutTe3o4FCxbAzc0NH330EdzcHPP/Lm5ubjyJnug6ON35H475OxkJJ0kSHnnkEdTX1+Pf//431Gq16JK6xeAj6h6D7z/Y46NrSJKE//qv/8K2bduQn5/vFMeBnTp1CpMmTUJNTY1DTscSiXbhwgUEBwejoaEBnp6eossRiiM+usbLL7+M7OxsZGVlOUXoAUBISAh69uyJY8eOiS6FyCH16dMH4eHh2LFjh+hShGPwUSfvvPMOVq1ahdzcXPTv3190OUZTqVScyiG6Dn5HZAw+Mli9ejX+8Y9/ID8/HwMGDBBdjsnY5yPqHoNPxh4fAQC++OILPProoygoKMCoUaNEl2OWs2fPIjw8HI2NjejRo4focogcTsdVXjU1NbjhhhtElyMMR3yEvLw8PPTQQ/jmm2+cNvQAYMCAARg4cCD3KhF1wcvLC1FRUdi+fbvoUoRi8ClcSUkJ5s2bh/Xr1+P2228XXY7FOJVD1D1+Rxh8inbgwAH86le/gkajQWxsrOhyrIJ9PqLuMfjY41OsEydOIC4uDm+++SbmzJkjuhyraWpqwqBBg9DY2IiePXuKLofI4eh0Ovj6+uLEiRPw9/cXXY4QHPEpUFVVFRITE/Hiiy+6VOgBQN++fTFq1CjuVSLqQsdVXlu2bBFdijAMPoWpq6tDYmIifve732Hx4sWiy7EJTuUQdU/p3xEGn4KcP38eycnJuP/++/HUU0+JLsdm2Ocj6p7Sg489PoW4fPkykpKSEB0djddff92lz7NsaWmBv78/zp496zRHrhHZkyRJCAwMxK5duzBkyBDR5dgdR3wKcPXqVcyaNQujRo1y+dADAG9vb4wbN07xe5WIuqJSqTB16lQUFBSILkUIBp+L0+l0uP/++9G3b1/83//9n8uHXgelT+UQXY+SvyMMPhem1+uxZMkStLa2IjMzU1HHeLHPR9S9juBTYreLweeiJEnCk08+iYqKCqxfvx4eHh6iS7KrcePGobKyEg0NDaJLIXJIISEh8PT0RFlZmehS7I7B56Kee+45FBUV4euvv4a3t7focuxOrVYrfq8S0fXEx8crss/H4HNBr776Kj777DPk5OSgT58+ossRRsk9DCJjKPU7wuBzMR988AHeffdd5OXlwc/PT3Q5Qin1S01krPj4eGzduhXt7e2iS7ErBp8LWbt2LZ5//nnk5eUhODhYdDnCRUREoKmpCVVVVaJLIXJIgYGBGDhwIPbt2ye6FLti8LmIb775Bk8++SSys7MxYsQI0eU4BDc3N67uJLoOJfb5GHwuYOvWrVi0aBE2bNiAyMhI0eU4lISEBMV9qYlMocSWAI8sc3K7d+/GHXfcgXXr1mHq1Kmiy3E4p06dQmxsLM6cOaOYzftEplDiVV4c8TmxI0eOYMaMGfjwww8Zel0ICQmBWq3GsWPHRJdC5JD69u2L8PBwlJSUiC7Fbhh8TqqiogLJycl4/fXXcdddd4kux2GpVCpFTuUQmUJpfT4GnxM6c+YMEhMT8Ze//AXz5s0TXY7DY5+PqHtK+8Mhe3xOprGxEVOmTMGCBQvwpz/9SXQ5TuHs2bMYPXo0GhoaFHVeKZGxWltb4e/vj5qaGkVc5cURnxO5ePEiUlJSMHPmTIaeCQYMGIDAwEDs379fdClEDsnLywvjxo3Dtm3bRJdiFww+J9HS0oIZM2YgOjoaL730kuhynI7SpnKITKWkPh+Dzwm0tbVh9uzZGDx4MN5++20uyzcD+3xE3VPSHw7Z43Nw7e3tmDdvHq5evYpPP/0UarVadElOSYl7lYhModPp4Ovri/Lycpc/55cjPgcmSRIefvhhNDY2Yu3atQw9C/Tt2xdhYWHYsWOH6FKIHJK7uztiY2OxefNm0aXYHIPPQUmShKeffhqHDh3CV199BU9PT9ElOT0lTeUQmUMpfT4Gn4N66aWXkJubi2+//Ra9evUSXY5LYJ+PqHtK+cMhe3wO6K233sLbb7+N7du3IzAwUHQ5LqOlpQX+/v6ora3lHyaIfoFer0dgYCD27NmDwYMHiy7HZjjiczAff/wxXn31VeTn5zP0rMzb2xtjx45VzF4lIlMp5SovBp8D+fzzz/HnP/8Zubm5GDJkiOhyXJJSpnKIzKWEPh+Dz0Hk5ubi4YcfxrfffouwsDDR5bgs9vmIutfxh0NX7oIx+BxAUVER0tLS8Pnnn+O2224TXY5LGzduHCoqKtDY2Ci6FCKHFBISAg8PD5e+yovBJ1hpaSlmzZoFjUaDSZMmiS7H5anVasXsVSIyhxKu8mLwCXT8+HFMnz4dy5cvR3JysuhyFEMJzXsiS7h6n4/BJ0hVVRWSkpLw8ssv45577hFdjqK4+p9miSwVHx+PLVu2oL29XXQpNsHgE6Curg7Tpk3D73//ezzwwAOiy1GcyMhINDU1oaqqSnQpRA5pwIABGDBggMte5cXgs7Pz588jKSkJaWlpePLJJ0WXo0gde5VceSqHyFKuPDPC4LOjy5cvY/r06Zg2bRr++te/ii5H0djnI+qeK//hkEeW2cmVK1dw5513YujQofjggw94p55gJ0+exOTJk3HmzBn+b0H0C5qamjB48GA0NDS43FVeHPHZgU6nw/3334/+/fvj/fff52+0DmD48OFQq9U4fvy46FKIHJIrX+XF4LMxvV6PxYsX4+rVq8jIyECPHj1El0RQxl4lIku56neEwWdDkiThiSeewHfffYfPPvsMHh4eokuin2Cfj6h7rtrnY4/Php599llkZ2ejoKAAffr0EV0O/UxNTQ0iIiLQ0NDAkTjRL2hpaUFAQADOnj3rUld5ccRnI//4xz/wxRdfICcnh6HnoAYOHIjAwECUlpaKLoXIIbnqVV4MPht4//33sWLFCuTl5cHX11d0OdQNV+1hEFmLK35HGHxWtmbNGixbtgx5eXkICgoSXQ5dB/t8RN1zxT4fe3xW9PXXX+PBBx9Efn4+IiIiRJdDRjh//jwGDx6MxsZGl9urRGQNWq0Wvr6+OHXqlMvMYHHEZyVbtmzB4sWLsWHDBoaeE+nXrx/CwsKwc+dO0aUQOSRXvMqLwWcFu3btwty5c/Hvf/8bUVFRosshE7liD4PImlztO8Lgs9Dhw4dx1113YeXKlYiLixNdDpmBfT6i7rlan489PgucOnUKU6ZMwSuvvIL7779fdDlkppaWFvj7+6O2ttal9ioRWYter0dgYCD27t2LQYMGiS7HYhzxmenMmTNITEzEc889x9Bzch17lbZv3y66FCKH5ObmhqlTp7rMzAiDzwwNDQ1ITEzEI488gt/85jeiyyErcLUeBpG1udJ3hMFnogsXLiAlJQWzZs3C008/LbocshJX+lIT2UJHn88VumMMPhO0tLRgxowZmDBhAl588UXR5ZAVjRs3DhUVFWhsbBRdCpFDGj58ONzd3V3iKi8Gn5Ha2towe/ZsDB06FG+99Rbv1HMxarUakyZNcqm9SkTW5EpXeTH4jNDe3o60tDT07NkTK1euhJsbf9lcUUJCgkst2SayNgafQkiShIceegjnzp3DmjVr4O7uLrokshFX+VIT2crUqVOxZcsWtLe3iy7FIgy+bkiShD/+8Y84cuQIvvzyS3h6eoouiWwoMjIS58+fx/fffy+6FCKH5CpXeTH4urFs2TLk5+fj22+/5cZmBXC1vUpEtvDTmRGtFqiuBioq5L9qtYKLMxKDrwtvvvkmMjIykJubi379+okuh+yEfT6irkkSMGDAHLz11s0IDQV8fIDQUOCWW9Dp75csAQoL5Z/viHhk2S9YtWoVnn/+eWzbtg1DhgwRXQ7Z0cmTJzFlyhRUV1dz5S7RjyQJyMgAli4F6uoktLToAfTo8uerVIC3N+DvD7zwApCWJv8zR8Hg+5n169fjsccew5YtWxAaGiq6HLIzSZIwZMgQ5ObmIiwsTHQ5RMJVVwPz5wN79wLNzaZ/3scHGDMGyMwEgoOtX585ONX5Ezk5OXj00UeRlZXF0FMoV9qrRGSpwkIgPBwoLjYv9AD5c8XF8nOKiqxbn7kYfD8qLCxEeno6vvjiC9x6662iyyGB2OcjkkMvORm4dAnQ6Sx7lk4nPycpyTHCj1OdAPbv34+UlBRkZGQgMTFRdDkkWE1NDSIjI1FfX48ePbruYxC5qupqeYR26ZL1n927N3D0qNhpT8WP+I4dO4bp06dj+fLlDD0CIO9V8vf3d/q9SkTmkCRg3jygtdU2z29tlXuGIodcig6+06dPIykpCf/7v/+Lu+++W3Q55EDY5yOlysgA9u2zfHqzKzqdvFAmM9M2zzeGYoOvtrYW06ZNw9NPP42FCxeKLoccDPt8pESSJG9ZMHchi7Gam+X3iBr1KTL4zp07h6SkJCxcuBCPP/646HLIAcXFxaG4uBhtbW2iSyGym6IioL7elE/EAfAE0OvHH8avhq+rk1d7iqC44Lt8+TKmT5+OpKQkPPvss6LLIQfVr18/jBw5Ejt27BBdCpHdrFoFtLSY+ql3AFz+8Yfxd/W1tAArV5r6LutQVPBduXIFM2fORGRkJF555RWezEHdYp+PlMaex4xJkritDYoJPq1Wi/vuuw9+fn5YsWIFQ4+ui30+UhKtFqisNOeTzwDwBRADYItJn6yoEHOwtSKCT6/XY/HixdBqtVi9ejX3ZpFRJk2ahNLSUly+fFl0KUQ2V1cHqNWmfurvACoAnAHwGwAzAJwy+tNqtfxee3Oq4DPnCgxJkvD444+jqqoKn376KTw8PGxfKLkEb29vjBkzBtu3bxddCpHNtbUBbiYnQjSA3gB6AlgIedT3rdGfdnOT32tvDh18kiTPOS9ZArOvwHj22Wexc+dObNy4Ed7e3vb/lyCnFh8fzz4fKYKHB6DXW/oUFQDjm4R6vfxee3PII8t+egVGfb28+qe7Kru6AuPvf/87Vq9eja1bt8LX19d+/wLkMoqKivDYY49h//79okshsimtVh5MGN9zawKwE8AUAO4A1kGe7twPYKRRT1Cr5T19pk+xWsbhgs9aV2CkpGjw4YfPY/v27Rg4cKD1CyVF0Gq18PX1RUVFBW688UbR5RBZXWtrK7Zt24asrCy8994T0GpDjPxkA4DpAI5BvpsvDMAyAMYf/RgaChw7ZmrFlnO3/yu7VlgITJ8un+Vm7nE5zc1AUVE7tm//FdaujWfokUXUajUmTZqEzZs3Y/bs2aLLIbKYJEkoLy9HVlYWsrOzUVhYiFtvvRUpKSlITe2NjRslSJIxq979AOw2uw6VCoiJMfvjFnGYEV/HFRimb57smrc3kJsr7heXXMNrr72GkydPYvny5aJLITLL5cuXUVBQgOzsbGRnZ6OtrQ0pKSlISUnBtGnT0LdvXwDy78MpKbY/sgyQZ+dycsT8/uwQwefqV2CQcystLcXcuXNx4sQJ0aUQGUWSJBw+fNgQdLt27UJUVJQh7CIiIn5xL7MkAcOHm7ufzzQhIcDJk/LIz96EB58kAVOmACUltjkN3N0dmDgR2LJFzC8wOT+9Xo+AgADs27cPgwYNEl0O0S9qampCfn6+IezUajVSU1ORmpqKqVOnolevXkY9R6MBHnnEtqM+Hx9gxQp5IaIIwoNPCb/I5Pzmzp2LO+64gzd5kMPQ6/XYv3+/IehKS0sxadIkpKamIiUlBTfddJNZJ1RJEhAXJx8gbavBSEwMsHmzuMGI0OBTyrCanN+KFStQXFyM1atXiy6FFKyhoQF5eXnIyspCTk4O+vfvbwi6yZMnw8vLyyrvsXX7qawMCAqy/rONJTT4TGukvgPgIwCHANz/4382nshGKjm/8vJyxMXFobq6mue8kt20t7dj165dhhWYx48fx9SpU5GSkoLk5GQMGzbMZu8uKgKSklxzwaHQ7QymXYExEMBfAOQAaDX5XR1XYIj+BSfnNGLECPTo0QMnTpxAaKjxd44Rmers2bOG6cv8/HwEBwcjJSUFf//73xETE2O3YxdjYuSQSk21bIsZIE9venkBWVmO8Xuw0OAz7QqMu3/86x4A1Sa/S+QVGOT8VCqV4ZoiBh9ZU1tbG4qLiw1hV1VVhWnTpiElJQWvv/46ggTOCcbEyKviLT1UZOxY+TQuR1ldL2yq0/TjcTr8BXLwfWTyO0Udj0OuQaPR4Msvv8T69etFl0JO7vTp04ag27x5M2666SbDVoPo6Gi4uzvU2SKQJCAzUz5Gsq7O+GMkAwLkYyTnz3es9RXCgq+6Wj6uxvT5Y/ODz9sbOH7ccf7UQc6lpqYGkZGRqK+v59VWZJIrV65g27ZthrBraGhAcnIyUlNTkZiYCH9/f9ElGkWS5NWeK1fKM2gVFfJAws1NPnBaq5UXEsbEAIsXy1vJHCnwOgj7Y4V5V2BYRtQVGOQaBg4cCH9/fxw4cAC333676HLIwZWXlxuCbvv27YiMjERqaipWr16N22+/HW72/g3QCjqOGevo02m18giwrU2+ZSEgwDlm1IQFn3WuwDCNqCswyHV09PkYfPRzzc3N2Lx5syHsWltbkZKSggceeAAZGRno16+f6BKtTq12zhk0YcEXEGBqf0/344/2H39cgVy+8f8KV6+248yZAwgMvNnh5tDJOSQkJOD999/H008/LboUEkySJBw9etSw1WDnzp0YN24cUlJS8PnnnyMyMpJbXxyU0H18oaGA8ccfPg/ghZ/9s6U//nPj9OlzFkFB01BVVYWxY8diwoQJhh+8r4+Mce7cOQwdOhSNjY12W1ZOjuPChQvYtGmTIex69Ohh2EAeHx+P3r17iy6RjCA0+JYskffy2aMClQpYtAj417+A8+fPY+fOnSgpKUFxcTF27dqFgIAATJw40RCEo0eP5gIG+kVjx47FG2+8gdjYWNGlkI3p9XocOHDAEHT79+9HTEyMYQVmaGgoR3VOyIlObrFMdye3tLe348iRIygpKTGEYV1dHaKiogxhOH78eMPVHaRsf/rTn+Dl5YXnn39edClkAz/88ANyc3ORnZ2NnJwc9OnT58e76lIxefJkeHt7iy6RLMSzOrvQ2NiIHTt2oLi4GCUlJdizZw8GDx5sGBFOnDgRoaGhTrkyiyyTm5uLZcuWYfv27aJLIStob2/H7t27DYtSjh49iri4OKSmpiI5ORkhIcbeSE7OgrczGEmn0+HgwYOdRoVNTU2Ijo42jAqjoqJwww03WK9wckjNzc0ICAhAbW2t0Ve9kGOpra1FTk4OsrOzkZeXhwEDBhh6dTExMejZs6foEsmGhAefM1+BUVtbawjCkpIS7N+/H8OHDzeMCCdMmIARI0awB+CCpkyZgj//+c9ITU0VXQoZQavVoqSkxDCqq6ysREJCgmFUF+yMa/LJbMKDD3CdKzDa2tpQWlpqGBGWlJSgtbW10+rRcePGwcfHx/bFkE39z//8Dy5duoRXXnlFdCnUhaqqKsOobtOmTRg+fLhhVBcdHQ21M+y0JptwiOADXPcKjOrq6k7To4cOHUJYWFinUeHQoUM5KnQyRUVFePzxx7Fv3z7RpdCPrl69iu3btxtWYNbX1yMpKQkpKSlISkpCQECA6BLJQThM8AFy+LniFRg/deXKFezbt88wIiwuLgaATotmxowZA09PT8GVUnfa2trg6+uLyspK3HjjjaLLUaxTp04Zgm7btm2IiIgwbDUYM2YMtyTRL3Ko4APkaU9XuwKjO5Ik4fTp052mR8vKyhAREdFpX+GgQYNEl0o/M336dCxevBizZ88WXYpitLS0dDoW7PLly4agS0xMRP/+/UWXSE7A4YIPcL0rMEzV3NyMPXv2dJoi9fT07DQ9etttt/HkEMFee+01nDp1Cu+9957oUlyWJEkoKyszBF1JSQnGjBlj2Fd38803s01AJnPI4OvgKldgWEqSJJw6darTqLC8vBy33XZbp4UzAwYMEF2qopSWluLee+/F8ePHRZfiUi5evIhNmzYZwg6AIeji4+O5ZYgs5tDB93POegWGLVy6dAm7du0yhOGOHTvQp0+fTqPCm2++mSvXbEiv18Pf3x+lpaVcDm8BSZJw4MABQ9Dt3bsXEyZMMKzADAsL46iOrMqpgo+6ptfrceLECcOIsKSkBKdPn8aYMWM6hSEP47auOXPm4M4778TChQtFl+JUzp07h7y8PEPY9e7d29CrmzJlCrf8kE0x+FxYU1NTp8O4d+7cCX9//06LZiIiIrjyzQIrVqxASUkJPv74Y9GlOLT29nbs3bvXEHSHDx/GlClTDGE3fPhw0SWSgjD4FKS9vR1Hjx7ttGimtrYW48aN63QYtytemGkr5eXlmDp1Kr7//ntOx/1MXV0dcnNzkZWVhdzcXAQGBhqCLjY2lseCkTAMPoX74YcfOh3GvXv3bgwaNKjTvsKwsDAext0FSZIwePBg5OfnIzQ0VHQ5Qul0OuzYscOwr+7UqVNISEgwhB235JCjYPBRJzqdDocOHeq0gvTcuXOdDuOOjo7myrqfeOCBBxAVFYVHH31UdCl2V11dbZi+3LRpE4YNG2ZYgTl+/HguriKHxOCj66qrq+t0GPe+ffsQEhLSadHMTTfdpNipPo1Gg6+++gqfffaZ6FJs7urVqygsLDSE3dmzZzsdCxYYGCi6RKLrYvCRydra2nDgwIFOo8Lm5uZO06NKOoy7pqYGkZGRaGhocMkp4YqKCkPQbd26FeHh4Ybpy7Fjx3JxFDkdBh9ZxZkzZzotmjl48CBCQ0M7rSAdNmyYy44KR40ahczMTERG3u70e01bWlqwdetWQ9hduHCh07FgPJuUnB2Dj2ziypUr2L9/f6fDuPV6/TWHcXt5eYku1SKSJJ8q9OtfF+OHH8LQ1NT/mtOFhg0DJk0CFi2STxlytOyXJAnHjx83BF1RURFuv/12Q9jdcsstLjmSJeVi8JFdSJKEqqqqTtOjR48exejRow2jwokTJzrNyj9Jkg9CX7oUqK8HWlr0kKSuw6HjPFl/f/k82bQ0sQF46dIlFBQUGMJOp9MZTkpJSEhAnz59xBVHZGMMPhKmpaXlmsO4PTw8rjmM29H2e1njBpExY+SD2O110pkkSTh06BCys7ORlZWFPXv2YPz48YZRXXh4uMtOQxP9HIOPHIYkSaioqOh07NqJEydw6623dgpDkYdxFxYC06c7x52R58+f73QsmJeXF1JTU5Gamoq4uDjFLD4i+jkGHzm0S5cuYffu3Z0O4+7du3enRTO33HKLXfaLFRYCycnyNVnW4u0N5OZaJ/z0en2nY8EOHTqE2NhYwxTmiBEjLH8JkQtg8JFTkSTpmsO4KysrrzmM28/Pz6rvra4GwsOBS5es+lgAQO/ewNGj5k171tfXIzc3F9nZ2cjNzYWvr68h6GJjY+Hp6Wn9gomcHIOPnN6FCxewc+dOQxju3LkTfn5+nVaQWnIYtyQBU6YAJSWWTW92xd1dvktyy5brL3jR6XTYuXOnYVRXXl6O+Ph4pKSkIDk5GUOGDLF+gUQuhsFHLkev119zGHdNTc01h3H379/fqOdpNMAjj5i3kMVYPj7AihXyas+fO3PmDHJycpCdnY38/HwMGTLEsChlwoQJ8PDwsF1hRC6IwUeK8MMPP3QaFe7atQvBwcGdpkdHjRp1zX41SQKGDwcqK21fY0gIcPIkoNW2oaioyDCqq66uRmJiomFUJ3JxD5ErYPCRIul0Ohw+fLjTvsLGxkaMHz/eMEUaHR2NQ4f6ICXFlNFeGoBNAJoBBAL4LwAPGvVJDw8toqL+ioMHlyMsLMwwqouKiuKxYERWxOAj+lF9fX2nw7j37t0LtfpjNDXNAmDsySVHAIwA0BPAMQBxAL4BMMaIz+oRF1eJTz/tA19fX3P+FYjICAw+oi5otVqMGNGOqipzV0Yehxx8bwKYa9QnQkOBY8fMfB0RGYUH8BF1SY2zZ80JvUcBeAMIAzAAwHSjP1lRIZ/vSUS2w+Aj6kJdnbk3K7wH4BKA7QDuhjztaRy1Wn4vEdkOg4+oC21t8i0L5ukBYBKAagDLjf6Um5v8XiKyHQYfURc8POSrhSyjA3DK6J+t18vvJSLbYfARdSEgwNR+Wz2AtQAuA2gHkANgDYAEo5+g1crvJSLbYfARdUGtli+RNZ4K8rRmMIB+AP4I4J8A7jL6CSEhzndjO5GzcRddAJEjmzQJKC+XT3C5Pj8AW81+l0pluyuKiOg/OOIj6saiRfLVQfbg7Q0sXmyfdxEpGTewE3VDxFmdvAidyLY44iPqhkoFvPCCfHuCLfn4yO9h6BHZHkd8RNchSUBcHFBcbLv7+GJigM2bGXxE9sDgIzKCrW9gLysDgoKs/2wiuhanOomMEBwMZGVZf6GLt7f8XIYekf0w+IiMFBMD5ObKIzR3CzcCubvLz8nN5RYGIntj8BGZICYGOHoUmDjR/AUvPj7/eQ5Dj8j+GHxEJgoOBrZsAVaskLcg+Phcf1GKSiX/vJAQ+XObN8vPISL74+IWIgtIkrzac+VKoKhIvk9PrZZvWdDr5bM3Q0Lkkd3ixfJIkSs3icRi8BFZkVYr36fX1ibfshAQwLM3iRwNg4+IiBSFPT4iIlIUBh8RESkKg4+IiBSFwUdERIrC4CMiIkVh8BERkaIw+IiISFEYfEREpCgMPiIiUhQGHxERKQqDj4iIFIXBR0REisLgIyIiRWHwERGRojD4iIhIUf4fEdHd9ycCm1AAAAAASUVORK5CYII=\n" + "image/png": "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\n" }, "metadata": {}, "output_type": "display_data" @@ -65,6 +65,49 @@ } } }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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Iysry3ScPDt79iwPPPAAK1asYNu2bSo9kTxq3rw527Zto3v37tx1111ER0dz6tQp07FcnorPybRv354qVaowe/Zs01Hy5KuvviI8PJyKFSuydu1arrvuOtORREoVT0/PX+/xX7x4kYCAAGbOnKl3dhYjTXU6oS1btvDAAw+wf/9+KlSoYDrOZa1du5Zu3brx3HPPMWjQIC3RFikC27dvJyoqCk9PT2JjY2ncuLHpSC5HIz4ndOutt9KkSRMmT55sOspfsiyL2NhYunXrxrx583j88cdVeiJFpFmzZmzevJnevXvTvn17BgwYwIkTJ0zHcikqPic1evRoxo4d63Tz/ZcuXeLRRx9l6tSpbNq0iTvvvNN0JBGX4+HhQe/evUlJScHT05OAgACmT59Odna26WguQVOdTqx37974+voyevRo01EAOHLkCPfddx++vr7Mnj2bihUrmo4k4hZ2795NVFQUGRkZTJ48WQvICknF58S+/fZbbrnlFpKSkqhevbrRLDt27KBz58707t2bF154AQ8PTRaIlCTLspgzZw5DhgyhQ4cOjB49mipVqpiOVSrpu5cTu+GGG4iMjGTEiBFGc8ydO5d27doxceJEhg8frtITMcDhcPDII4+QmppKxYoVCQwMZMqUKZr+LACN+JzciRMnqFu3Lhs3bizxV5tkZ2czZMgQlixZwrJlywgKCirR64vI5SUlJREVFcXp06eZPHkyYWFhpiOVGiq+UiAmJoZdu3axcOHCErvmyZMn6datG1lZWbz//vtce+21JXZtEckby7KYP38+Tz/9NHfddRdjxozB19fXdCynpzmrUiA6OppNmzaxffv2ErleamoqoaGhBAQEsHr1apWeiJNyOBx069aN1NRUqlatSsOGDZk4cWKp2vnJBI34SompU6eyYMECPv3001zPzGVmwtGjkJEBZcuCry+UKVOw63z00UdERkYyduxYevbsWfjgIlJiUlNTGTRoEEePHiU2NpZWrVqZjuSUVHylRGZmJoGBgcTGxnL33W3YuBFmzICEBPjqK7voPDwgJ8cuwlq1oEUL6NULwsPhn54vtyyLmJgYpkyZwqJFi7j11ltL5gsTkSJlWRaLFy9m8ODBtGjRgldffdX4qnBno+IrRRYsWMjTT+/F0/MlfvjBwfnz8Hf/9xwO8PaGqlVhxAjo0eOvC/DcuXNERkby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BPXr1+fNN9+katWqpiOVSqdPn+bhhx/m5MmTLFq0SP8d5S9pxCfiBJo2bcrOnTupU6cOwcHBLFq0yHSkUufLL7+kefPmVK9enU8//VSlJ5elEZ+Ik9myZQsRERE0btyY2NhYrr32WtORnF58fDwPP/wwI0aMoH///qbjiJPTiE/Eydx6663s3r2b6667jqCgID744APTkZyWZVlMmDCBnj17smjRIpWe5IlGfCJObP369fTq1YsWLVowceJErrrqKtORnMbFixfp168fSUlJLFu2jBtvvNF0JCklNOITcWK33XYbe/fupWLFigQFBbF69WrTkZzCd999x2233calS5dISEhQ6Um+qPhEnFzFihWZPHkyM2fOpH///vTt25fTp0+bjmXM5s2bCQkJoXPnzrz33nt4e3ubjiSljIpPpJS48847SUxMxLIsgoODWbNmjelIJW7GjBl07NiRadOmMWTIEBwOh+lIUgrpHp9IKbRq1Sr69u1Lx44dGTNmDD4+PqYjFausrCyeeuopVq1axfLly6lfv77pSFKKacQnUgq1a9eOxMREzpw5w80338yGDRtMRyo2x48fp23bthw4cICtW7eq9KTQVHwipdTVV1/NrFmzGD9+PA8++CCDBw/mwoULpmMVqaSkJEJCQmjatCkffvihVrVKkVDxiZRy//73v0lKSuL777+nUaNGbN261XSkIrFkyRLuuOMOXnrpJcaMGYOnp6fpSOIidI9PxIUsXLiQQYMG0atXL/73v/9Rrlw505HyLScnh5EjRxIXF8fSpUtp0qSJ6UjiYjTiE3EhXbp0ITExkf3799OkSRN27txpOlK+nDlzhvvvv59PP/2U7du3q/SkWKj4RFxM1apVWbx4Mc899xzt27dn+PDhZGRkmI71j9LS0ggLC6Ny5cqsWbMGX19f05HERan4RFyQw+Gge/fu7N69m507dxIaGkpiYqLpWJf12WefERYWxsCBA5k6dSply5Y1HUlcmIpPxIVVr16dDz/8kMcff5w777yTUaNGkZWVVSTnzsyE9HRIS7P/mZmZ/3NYlsXEiRPp0aMH77//PgMGDNBD6VLstLhFxE18++239O7dm5MnTzJr1iwaNGiQr+MtCzZuhBkzICEBvvoKypQBDw/IybGLr1YtaNECevWC8HD4uw67ePEiAwYMYPfu3SxbtoyaNWsW7gsUySMVn4gbsSyLadOmMWzYMJ555hkGDx78j48JWBbMnQvDh8MPP8D58/bvXY7DAd7eULUqjBgBPXrkLsD/+7//o3Pnztx4443MmDHD5XeeEeei4hNxQ1999RWRkZFkZGQwc+ZM6tSp85efl54ODz0EO3fCuXP5v46PDzRpAvPmgZ+f/Xtbt27lvvvuY+DAgQwdOlRTm1LiVHwibionJ4fJkyczYsQIXnjhBQYNGoSHx2+3/RMSoH17uHABCnNb0MsLKlSAVavg0KHZPPXUU7zzzjv861//KoKvQiT/VHwibu7gwYP07NmTMmXKEBcXh7+/PwkJ0LatPa1ZVLy8LlGtWgTx8cMJCAgouhOL5JNWdYq4uTp16rB+/Xr+9a9/ERoaSkzMHNq3t4q09ACysspx6tR7XHGFSk/M0ohPRH6VkpJKaOgFzp0LwrLKFPn5vbwgLAzWrfv7FZ8ixUkjPhH51c6dAVhWo2IpPbDvFe7caS92ETFFIz4RAexHFGrXtp/PK27+/vDllxr1iRka8YkIYD+c/sMP+TmiNVAeqPjzR708H3n0KGzalJ9riRQdFZ+IAPaOLPlf0BILnP35Y3+ejzp/HuLi8nstkaKh4hMRwH5ur6RufPyy/ZmICSo+ESEzs6D39oYClYFwYF2+jkxLK9jG1iKFpeITEY4etTeczp8xQBrwHdAX+BdwKM9HlyljX1ekpKn4RISMDPstC/kTClwBlAMisEd9K/N8tIeHfV2RkqbiExHKlrVfLVQ4DiDvNwlzcuzripQ0FZ+I4Oub3/ttp4CPgYtAFjAPWA/ck+czZGba1xUpaSo+EaFMGfslsnmXCQwDqmAvbpkELAPq5vkM/v4Fua8oUnhepgOIiHNo0QIOHszrIw1VgO0FvpbDYb+hXcQEjfhEBIBevew3p5cEb2+IjCyZa4n8mfbqFBFAe3WK+9CIT0QAu4RGjAAfn+K9jo+PfR2VnpiiEZ+I/MqyoHVrewPprKyiP7+Xl31vb+1aFZ+Yo+ITkT9IT4cGDeDMmaI/9xVXQGoqXH990Z9bJK801Skif+DnB6tWFf1CF29v+7wqPTFNxSciuYSHQ3y8PULzKuRDT15e9nni4/UIgzgHFZ+I/KXwcEhJgbCwgi948fH57TwqPXEWKj4RuSw/P1i3Dt56y34EwcfnnxelOBz25/n728etXWufR8RZaHGLiOSJZdmrPePi7JfIpqXZW455eNgbTmdm2mUXHm4/nB4WppWb4pxUfCJSIJmZ9vv0MjLstyz4+mrvTSkdVHwiIuJWdI9PRETciopPRETciopPRETciopPRETciopPRETciopPRETciopPRETciopPRETciopPRETciopPRETciopPRETciopPRETciopPRETciopPRETciopPRETcyv8DgR53ae4z3pUAAAAASUVORK5CYII=\n" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1, 5}\n", + "{1, 5}\n", + "{1, 5}\n" + ] + } + ], + "source": [ + "import networkx as nx\n", + "import matplotlib.pyplot as plt\n", + "\n", + "G = nx.Graph(incoming_graph_data=[(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)])\n", + "\n", + "nx.draw(G=G, with_labels=True, node_color='b', node_size=800)\n", + "\n", + "plt.show()\n", + "\n", + "print(nx.approximation.maximum_independent_set(G=G))\n", + "print(nx.approximation.maximum_independent_set(G=G))\n", + "print(nx.approximation.maximum_independent_set(G=G))" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "markdown", "source": [], From daa5f7e394dbdf87bae69e74624c50ecd692aa95 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 3 Jun 2022 18:48:00 +0800 Subject: [PATCH 0907/2002] Committed 2022/06/03 --- .../Independent set.ipynb | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb b/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb index a5da39d7..2e08c9cd 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb +++ b/NetworkX Altas/Independent set & bipartite graphs/Independent set.ipynb @@ -108,9 +108,59 @@ } } }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1, 5}\n", + "{1, 5}\n", + "[3, 4]\n", + "[1, 5]\n" + ] + } + ], + "source": [ + "import networkx as nx\n", + "import matplotlib.pyplot as plt\n", + "\n", + "G = nx.Graph(incoming_graph_data=[(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)])\n", + "\n", + "nx.draw(G=G, with_labels=True, node_color='b', node_size=800)\n", + "\n", + "plt.show()\n", + "\n", + "print(nx.approximation.maximum_independent_set(G=G))\n", + "print(nx.approximation.maximum_independent_set(G=G))\n", + "print(nx.maximal_independent_set(G=G))\n", + "print(nx.maximal_independent_set(G=G))" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "markdown", - "source": [], + "source": [ + "A maximal independent set is an independent set such that it is not possible to add a new node and still get an independent set.[2]\n", + "\n", + "Reference:\n", + "2. https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.mis.maximal_independent_set.html" + ], "metadata": { "collapsed": false, "pycharm": { From 08e12527cff7289ea7353dbce94c74d587cf870d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 9 Jun 2022 18:48:14 +0800 Subject: [PATCH 0908/2002] Committed 2022/06/09 --- .../March2022_bar_table.py | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py new file mode 100644 index 00000000..1ae1c034 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py @@ -0,0 +1,94 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month_as_of_now = ["Jan", "Feb", "Mar"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 19, 30], # February + ] + +df = pd.DataFrame(data=deaths, + index=month_as_of_now, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month_as_of_now, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-02)") + +axes.grid(True) # pyplot.grid [1][2] + +axes2.bar(administrative_duty, [20, 39, 49, 52, 43, 53]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [20, 39, 49, 52, 43, 53], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From adbf3a45a3c911ab4a61ee1641752c2817f0fa55 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 9 Jun 2022 19:10:15 +0800 Subject: [PATCH 0909/2002] Committed 2022/06/09 --- .../Month_over_month_2022/March2022_bar_table.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py index 1ae1c034..488e774c 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py @@ -6,14 +6,15 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month_as_of_now = ["Jan", "Feb", "Mar"] +month = ["Jan", "Feb", "Mar"] deaths = [[13, 23, 29, 28, 24, 23], # January - [7, 16, 20, 24, 19, 30], # February + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March ] df = pd.DataFrame(data=deaths, - index=month_as_of_now, + index=month, columns=administrative_duty) print(df) @@ -21,7 +22,7 @@ # Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] -colors = cmap(np.linspace(0, 0.5, len(month_as_of_now))) +colors = cmap(np.linspace(0, 0.5, len(month))) n_rows = len(deaths) index = np.arange(len(administrative_duty)) + 0.3 @@ -52,7 +53,7 @@ # Add a table at the bottom of the axes the_table = axes.table(cellText=cell_text, - rowLabels=month_as_of_now, + rowLabels=month, rowColours=colors, colLabels=administrative_duty, loc='bottom') From 88354594d4453ce57e472f47ead0fe1ba31db9fa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 9 Jun 2022 19:11:19 +0800 Subject: [PATCH 0910/2002] Committed 2022/06/09 --- .../Road safety/Month_over_month_2022/March2022_bar_table.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py index 488e774c..b7012e1a 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py @@ -63,7 +63,7 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-02)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-03)") axes.grid(True) # pyplot.grid [1][2] From c2f642a814c727ab854c0a9b59dc0679c30f62a2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 9 Jun 2022 19:36:51 +0800 Subject: [PATCH 0911/2002] Committed 2022/06/09 --- .../Month_over_month_2022/March2022_bar_table.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py index b7012e1a..3f20c142 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/March2022_bar_table.py @@ -67,9 +67,18 @@ axes.grid(True) # pyplot.grid [1][2] -axes2.bar(administrative_duty, [20, 39, 49, 52, 43, 53]) +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) axes2.bar_label(axes2.containers[0], label_type='edge') -axes2.plot(administrative_duty, [20, 39, 49, 52, 43, 53], '-o', color='orange') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') figure.tight_layout() From 20618799e795304cfb4a2513a4f8c59f95842fbf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 14 Jun 2022 23:21:22 +0800 Subject: [PATCH 0912/2002] Committed 2022/06/14 --- .../December (year-over-year comparisons).py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py index 59d9624c..5808a184 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py @@ -1 +1,64 @@ # Reference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/hat_graph.html#sphx-glr-gallery-lines-bars-and-markers-hat-graph-py +import numpy as np +import matplotlib.pyplot as plt + + +def hat_graph(ax, xlabels, values, group_labels): + """ + Create a hat graph. + + Parameters + ---------- + ax : matplotlib.axes.Axes + The Axes to plot into. + xlabels : list of str + The category names to be displayed on the x-axis. + values : (M, N) array-like + The data values. + Rows are the groups (len(group_labels) == M). + Columns are the categories (len(xlabels) == N). + group_labels : list of str + The group labels displayed in the legend. + """ + + def label_bars(heights, rects): + """Attach a text label on top of each bar.""" + for height, rect in zip(heights, rects): + ax.annotate(f'{height}', + xy=(rect.get_x() + rect.get_width() / 2, height), + xytext=(0, 4), # 4 points vertical offset. + textcoords='offset points', + ha='center', va='bottom') + + values = np.asarray(values) + x = np.arange(values.shape[1]) + ax.set_xticks(x, labels=xlabels) + spacing = 0.3 # spacing between hat groups + width = (1 - spacing) / values.shape[0] + heights0 = values[0] + for i, (heights, group_label) in enumerate(zip(values, group_labels)): + style = {'fill': False} if i == 0 else {'edgecolor': 'black'} + rects = ax.bar(x - spacing/2 + i * width, heights - heights0, + width, bottom=heights0, label=group_label, **style) + label_bars(heights, rects) + + +# initialise labels and a numpy array make sure you have +# N labels of N number of values in the array +xlabels = ['I', 'II', 'III', 'IV', 'V'] +playerA = np.array([5, 15, 22, 20, 25]) +playerB = np.array([25, 32, 34, 30, 27]) + +fig, ax = plt.subplots() +hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B']) + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_xlabel('Games') +ax.set_ylabel('Score') +ax.set_ylim(0, 60) +ax.set_title('Scores by number of game and players') +ax.legend() + +fig.tight_layout() +plt.show() \ No newline at end of file From 0ff047abbda98e84aab04ad181f5f745a1da6cb9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 14 Jun 2022 23:34:17 +0800 Subject: [PATCH 0913/2002] Committed 2022/06/14 --- .../December (year-over-year comparisons).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py index 5808a184..aa8ccc7d 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py @@ -46,7 +46,7 @@ def label_bars(heights, rects): # initialise labels and a numpy array make sure you have # N labels of N number of values in the array -xlabels = ['I', 'II', 'III', 'IV', 'V'] +xlabels = ['2017', '\'18', '\'19', '\'20', '\'21'] playerA = np.array([5, 15, 22, 20, 25]) playerB = np.array([25, 32, 34, 30, 27]) From 7dc1e8d79eb6e0dad7bd4d140c48a0fd001ad9bc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 14 Jun 2022 23:37:56 +0800 Subject: [PATCH 0914/2002] Committed 2022/06/14 --- .../December (year-over-year comparisons).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py index aa8ccc7d..247939dd 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py @@ -57,7 +57,7 @@ def label_bars(heights, rects): ax.set_xlabel('Games') ax.set_ylabel('Score') ax.set_ylim(0, 60) -ax.set_title('Scores by number of game and players') +ax.set_title('The # of Days under dangerous PM2.5 Level') ax.legend() fig.tight_layout() From 70ecad3babb9489f5e035969976afcbbf130f3a8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 14 Jun 2022 23:40:24 +0800 Subject: [PATCH 0915/2002] Committed 2022/06/14 --- .../December (year-over-year comparisons).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py index 247939dd..1aa017ad 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py @@ -57,7 +57,7 @@ def label_bars(heights, rects): ax.set_xlabel('Games') ax.set_ylabel('Score') ax.set_ylim(0, 60) -ax.set_title('The # of Days under dangerous PM2.5 Level') +ax.set_title('The # of Days under Dangerous PM2.5 Level') ax.legend() fig.tight_layout() From c4ce51725ab6a31c0c19cedd2110fcc33ba563a9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 14 Jun 2022 23:53:47 +0800 Subject: [PATCH 0916/2002] Committed 2022/06/14 --- .../December (year-over-year comparisons).py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py index 1aa017ad..e6e420e0 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py @@ -54,10 +54,10 @@ def label_bars(heights, rects): hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B']) # Add some text for labels, title and custom x-axis tick labels, etc. -ax.set_xlabel('Games') -ax.set_ylabel('Score') +ax.set_xlabel('Year') +ax.set_ylabel('Days polluted by the perilous levels of PM2.5') ax.set_ylim(0, 60) -ax.set_title('The # of Days under Dangerous PM2.5 Level') +ax.set_title('The # of Days under Hazardous PM2.5 Level') ax.legend() fig.tight_layout() From 64ecfef60859ff5a5b026745b9e41ee715745cdf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 15 Jun 2022 00:40:11 +0800 Subject: [PATCH 0917/2002] Committed 2022/06/14 --- .../December (year-over-year comparisons).py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py index e6e420e0..53998dee 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py @@ -54,10 +54,10 @@ def label_bars(heights, rects): hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B']) # Add some text for labels, title and custom x-axis tick labels, etc. -ax.set_xlabel('Year') -ax.set_ylabel('Days polluted by the perilous levels of PM2.5') +ax.set_xlabel('Year\nReference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx') +ax.set_ylabel('Days polluted by the perilous levels of PM 2.5') ax.set_ylim(0, 60) -ax.set_title('The # of Days under Hazardous PM2.5 Level') +ax.set_title('The number of Days under Hazardous (carcinogenic) PM2.5 Level') ax.legend() fig.tight_layout() From 3ede4f8c4409af2a7f77da2c0f6b48bde815ea83 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 15 Jun 2022 00:45:07 +0800 Subject: [PATCH 0918/2002] Committed 2022/06/14 --- .../December (year-over-year comparisons).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py index 53998dee..75f4613a 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py @@ -51,7 +51,7 @@ def label_bars(heights, rects): playerB = np.array([25, 32, 34, 30, 27]) fig, ax = plt.subplots() -hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B']) +hat_graph(ax, xlabels, [playerA, playerB], ['Taipei', 'Kaohsiung']) # Add some text for labels, title and custom x-axis tick labels, etc. ax.set_xlabel('Year\nReference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx') From e74c1c51101ae4578890eaef21e24cdcc15e56e4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 15 Jun 2022 00:50:53 +0800 Subject: [PATCH 0919/2002] Committed 2022/06/14 --- .../December (year-over-year comparisons).py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py index 75f4613a..f45f3034 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December (year-over-year comparisons).py @@ -47,11 +47,11 @@ def label_bars(heights, rects): # initialise labels and a numpy array make sure you have # N labels of N number of values in the array xlabels = ['2017', '\'18', '\'19', '\'20', '\'21'] -playerA = np.array([5, 15, 22, 20, 25]) -playerB = np.array([25, 32, 34, 30, 27]) +Taipei = np.array([5, 15, 22, 20, 25]) +Kaohsiung = np.array([25, 32, 34, 30, 27]) fig, ax = plt.subplots() -hat_graph(ax, xlabels, [playerA, playerB], ['Taipei', 'Kaohsiung']) +hat_graph(ax, xlabels, [Taipei, Kaohsiung], ['Taipei', 'Kaohsiung']) # Add some text for labels, title and custom x-axis tick labels, etc. ax.set_xlabel('Year\nReference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx') From 01b59637c7d30d33d117bdf95f3d6d4b3ab0c70a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 15 Jun 2022 01:02:58 +0800 Subject: [PATCH 0920/2002] Committed 2022/06/14 --- ...ecember2021 (year-over-year comparison).py | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py diff --git a/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py b/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py new file mode 100644 index 00000000..50dedc59 --- /dev/null +++ b/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py @@ -0,0 +1,64 @@ +# Reference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/hat_graph.html#sphx-glr-gallery-lines-bars-and-markers-hat-graph-py +import numpy as np +import matplotlib.pyplot as plt + + +def hat_graph(ax, xlabels, values, group_labels): + """ + Create a hat graph. + + Parameters + ---------- + ax : matplotlib.axes.Axes + The Axes to plot into. + xlabels : list of str + The category names to be displayed on the x-axis. + values : (M, N) array-like + The data values. + Rows are the groups (len(group_labels) == M). + Columns are the categories (len(xlabels) == N). + group_labels : list of str + The group labels displayed in the legend. + """ + + def label_bars(heights, rects): + """Attach a text label on top of each bar.""" + for height, rect in zip(heights, rects): + ax.annotate(f'{height}', + xy=(rect.get_x() + rect.get_width() / 2, height), + xytext=(0, 4), # 4 points vertical offset. + textcoords='offset points', + ha='center', va='bottom') + + values = np.asarray(values) + x = np.arange(values.shape[1]) + ax.set_xticks(x, labels=xlabels) + spacing = 0.3 # spacing between hat groups + width = (1 - spacing) / values.shape[0] + heights0 = values[0] + for i, (heights, group_label) in enumerate(zip(values, group_labels)): + style = {'fill': False} if i == 0 else {'edgecolor': 'black'} + rects = ax.bar(x - spacing/2 + i * width, heights - heights0, + width, bottom=heights0, label=group_label, **style) + label_bars(heights, rects) + + +# initialise labels and a numpy array make sure you have +# N labels of N number of values in the array +xlabels = ['2018', '\'19', '\'20', '\'21', '\'22'] +Taipei = np.array([5, 15, 22, 20, 25]) +Kaohsiung = np.array([25, 32, 34, 30, 27]) + +fig, ax = plt.subplots() +hat_graph(ax, xlabels, [Taipei, Kaohsiung], ['Taipei', 'Kaohsiung']) + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_xlabel('Year\nReference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx') +ax.set_ylabel('Days polluted by the unsafe levels of AQI') +ax.set_ylim(0, 60) +ax.set_title('The number of Days with Air Quality Index > 100') +ax.legend() + +fig.tight_layout() +plt.show() \ No newline at end of file From e814055429fd4bfed2167b4469e817dbc9b9f7df Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 15 Jun 2022 01:07:09 +0800 Subject: [PATCH 0921/2002] Committed 2022/06/14 --- .../December2021 (year-over-year comparison).py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py b/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py index 50dedc59..32f31615 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py @@ -47,8 +47,8 @@ def label_bars(heights, rects): # initialise labels and a numpy array make sure you have # N labels of N number of values in the array xlabels = ['2018', '\'19', '\'20', '\'21', '\'22'] -Taipei = np.array([5, 15, 22, 20, 25]) -Kaohsiung = np.array([25, 32, 34, 30, 27]) +Taipei = np.array([5, 15, 22, 20, 25]) # Taipei + New Taipei +Kaohsiung = np.array([25, 32, 34, 30, 27]) # Kaohsiung fig, ax = plt.subplots() hat_graph(ax, xlabels, [Taipei, Kaohsiung], ['Taipei', 'Kaohsiung']) From c9ddd34cb20d58f72f62939aef54eaeba95747d7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 15 Jun 2022 01:20:05 +0800 Subject: [PATCH 0922/2002] Committed 2022/06/14 --- .../December2021 (year-over-year comparison).py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py b/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py index 32f31615..12adcf90 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py @@ -47,8 +47,8 @@ def label_bars(heights, rects): # initialise labels and a numpy array make sure you have # N labels of N number of values in the array xlabels = ['2018', '\'19', '\'20', '\'21', '\'22'] -Taipei = np.array([5, 15, 22, 20, 25]) # Taipei + New Taipei -Kaohsiung = np.array([25, 32, 34, 30, 27]) # Kaohsiung +Taipei = np.array([3, 0, 1, 0, 0]) # Taipei + New Taipei +Kaohsiung = np.array([22, 8, 9, 15, 0]) # Kaohsiung fig, ax = plt.subplots() hat_graph(ax, xlabels, [Taipei, Kaohsiung], ['Taipei', 'Kaohsiung']) @@ -57,7 +57,7 @@ def label_bars(heights, rects): ax.set_xlabel('Year\nReference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx') ax.set_ylabel('Days polluted by the unsafe levels of AQI') ax.set_ylim(0, 60) -ax.set_title('The number of Days with Air Quality Index > 100') +ax.set_title('The number of Days of December with Air Quality Index > 100') ax.legend() fig.tight_layout() From ea904e267c17887128bf1512086262d38d65bddb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 15 Jun 2022 01:31:23 +0800 Subject: [PATCH 0923/2002] Committed 2022/06/14 --- .../December2021 (year-over-year comparison).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py b/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py index 12adcf90..e904ee81 100644 --- a/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py +++ b/The attainments and realizations of my dreams/Days under air pollution/December2021 (year-over-year comparison).py @@ -56,7 +56,7 @@ def label_bars(heights, rects): # Add some text for labels, title and custom x-axis tick labels, etc. ax.set_xlabel('Year\nReference: https://airtw.epa.gov.tw/CHT/Query/Bad_Day.aspx') ax.set_ylabel('Days polluted by the unsafe levels of AQI') -ax.set_ylim(0, 60) +ax.set_ylim(0, 31) ax.set_title('The number of Days of December with Air Quality Index > 100') ax.legend() From afecc2ec6e323b7938bc358957956414bc01348f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 Jun 2022 12:39:43 +0800 Subject: [PATCH 0924/2002] Committed 2022/06/24 --- .../Average temperatures of Kaohsiung in June as of 2022.py | 0 .../Climate change/How warm is Kaohsiung in July.py | 0 .../Climate change/Is December a good time to visit Kaohsiung.py | 0 .../What is the average temperature of Kaohsiung in August.py | 0 .../What is the average temperature of Kaohsiung in the summer.py | 0 .../Climate change/__init__.py | 0 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Climate change/Average temperatures of Kaohsiung in June as of 2022.py create mode 100644 The attainments and realizations of my dreams/Climate change/How warm is Kaohsiung in July.py create mode 100644 The attainments and realizations of my dreams/Climate change/Is December a good time to visit Kaohsiung.py create mode 100644 The attainments and realizations of my dreams/Climate change/What is the average temperature of Kaohsiung in August.py create mode 100644 The attainments and realizations of my dreams/Climate change/What is the average temperature of Kaohsiung in the summer.py create mode 100644 The attainments and realizations of my dreams/Climate change/__init__.py diff --git a/The attainments and realizations of my dreams/Climate change/Average temperatures of Kaohsiung in June as of 2022.py b/The attainments and realizations of my dreams/Climate change/Average temperatures of Kaohsiung in June as of 2022.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Climate change/How warm is Kaohsiung in July.py b/The attainments and realizations of my dreams/Climate change/How warm is Kaohsiung in July.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Climate change/Is December a good time to visit Kaohsiung.py b/The attainments and realizations of my dreams/Climate change/Is December a good time to visit Kaohsiung.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Climate change/What is the average temperature of Kaohsiung in August.py b/The attainments and realizations of my dreams/Climate change/What is the average temperature of Kaohsiung in August.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Climate change/What is the average temperature of Kaohsiung in the summer.py b/The attainments and realizations of my dreams/Climate change/What is the average temperature of Kaohsiung in the summer.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Climate change/__init__.py b/The attainments and realizations of my dreams/Climate change/__init__.py new file mode 100644 index 00000000..e69de29b From 9933f2f2ecedb13c3928f225fa5fc807cd1f0ebb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Jun 2022 00:16:49 +0800 Subject: [PATCH 0925/2002] Committed 2022/06/25 --- .../2022/June/Metro_area_EN_ZH_JP.py | 37 +++++++++++++++++++ .../2022/June/__init__.py | 0 2 files changed, 37 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/June/Metro_area_EN_ZH_JP.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/June/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/June/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/June/Metro_area_EN_ZH_JP.py new file mode 100644 index 00000000..5c746ab7 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/June/Metro_area_EN_ZH_JP.py @@ -0,0 +1,37 @@ +import matplotlib.pyplot as plt +import matplotlib +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [178202, 89216, 74059, 39413, 40549] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) # [1] + +plt.title("2022/06 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220624160139/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(35000, 165000) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/a/12444777/ +# 2. https://stackoverflow.com/a/11386056/ \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/June/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/June/__init__.py new file mode 100644 index 00000000..e69de29b From cbc7db18a38f3decc7c9424187ce3081090a1e32 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 28 Jun 2022 12:05:27 +0800 Subject: [PATCH 0926/2002] Committed 2022/06/27 --- .../Average life expectancy/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/__init__.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/__init__.py b/The attainments and realizations of my dreams/Average life expectancy/__init__.py new file mode 100644 index 00000000..e69de29b From 02521f89ff56f03da9d552eba657f1b94fedd014 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Jun 2022 18:05:29 +0800 Subject: [PATCH 0927/2002] Committed 2022/06/30 --- .../Chapter1 - Sounds and Signals/stop_band.ipynb | 5 ++++- .../Complex Exponentials.py | 7 +++++++ .../Chapter7 - Discrete Fourier Transform/__init__.py | 0 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/Complex Exponentials.py create mode 100644 Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/__init__.py diff --git a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb index 253cd0ad..08c5595a 100644 --- a/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb +++ b/Digital Signal Processing/Think DSP/Chapter1 - Sounds and Signals/stop_band.ipynb @@ -4,7 +4,10 @@ "cell_type": "code", "execution_count": 42, "metadata": { - "collapsed": true + "collapsed": true, + "pycharm": { + "name": "#%%\n" + } }, "outputs": [ { diff --git a/Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/Complex Exponentials.py b/Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/Complex Exponentials.py new file mode 100644 index 00000000..13eb7c8b --- /dev/null +++ b/Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/Complex Exponentials.py @@ -0,0 +1,7 @@ +import numpy as np + +phi = 1.5; + +z = np.exp(1j * phi) + + diff --git a/Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/__init__.py b/Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/__init__.py new file mode 100644 index 00000000..e69de29b From e05b104dd92cfd204e1eafc7e60ee5b8386c685b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 30 Jun 2022 18:08:29 +0800 Subject: [PATCH 0928/2002] Committed 2022/06/30 --- .../Complex Exponentials.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/Complex Exponentials.py b/Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/Complex Exponentials.py index 13eb7c8b..2159cdd1 100644 --- a/Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/Complex Exponentials.py +++ b/Digital Signal Processing/Think DSP/Chapter7 - Discrete Fourier Transform/Complex Exponentials.py @@ -4,4 +4,9 @@ z = np.exp(1j * phi) +print(z) +print(z.real) +print(z.imag) + +print(np.absolute(z)) From f64d0460148c33285a9b3f1151087305875e794e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 1 Jul 2022 14:10:45 +0800 Subject: [PATCH 0929/2002] Committed 2022/06/27 --- .../Impulse and Step.ipynb | 41 +++++++++++++++++++ .../Chapter5 - Data Filter/__init__.py | 0 .../__init__.py | 0 3 files changed, 41 insertions(+) create mode 100644 Hands-on Signal Analysis with Python/Chapter5 - Data Filter/Impulse and Step.ipynb create mode 100644 Hands-on Signal Analysis with Python/Chapter5 - Data Filter/__init__.py create mode 100644 Hands-on Signal Analysis with Python/__init__.py diff --git a/Hands-on Signal Analysis with Python/Chapter5 - Data Filter/Impulse and Step.ipynb b/Hands-on Signal Analysis with Python/Chapter5 - Data Filter/Impulse and Step.ipynb new file mode 100644 index 00000000..651e28c4 --- /dev/null +++ b/Hands-on Signal Analysis with Python/Chapter5 - Data Filter/Impulse and Step.ipynb @@ -0,0 +1,41 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Hands-on Signal Analysis with Python/Chapter5 - Data Filter/__init__.py b/Hands-on Signal Analysis with Python/Chapter5 - Data Filter/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Hands-on Signal Analysis with Python/__init__.py b/Hands-on Signal Analysis with Python/__init__.py new file mode 100644 index 00000000..e69de29b From ba36ab0c4badbc960e32f4856652c1facb7a5466 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 1 Jul 2022 14:25:47 +0800 Subject: [PATCH 0930/2002] Committed 2022/07/01 --- .../Impulse and Step.ipynb | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/Hands-on Signal Analysis with Python/Chapter5 - Data Filter/Impulse and Step.ipynb b/Hands-on Signal Analysis with Python/Chapter5 - Data Filter/Impulse and Step.ipynb index 651e28c4..30338583 100644 --- a/Hands-on Signal Analysis with Python/Chapter5 - Data Filter/Impulse and Step.ipynb +++ b/Hands-on Signal Analysis with Python/Chapter5 - Data Filter/Impulse and Step.ipynb @@ -2,18 +2,46 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "collapsed": true, "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "\n" + "\n", + "# Definition of \"Impulse\"\n", + "impulse = np.zeros(50)\n", + "impulse[10] = 1\n", + "\n", + "# Definition of \"Step\"\n", + "step = np.zeros(50)\n", + "step[10:] = 1\n", + "\n", + "# Show impulse and step\n", + "figure, axes = plt.subplots(1, 2)\n", + "axes[0].plot(impulse)\n", + "axes[0].set_title(\"Impulse\")\n", + "\n", + "axes[1].plot(step)\n", + "axes[1].set_title(\"Step\")\n", + "\n", + "plt.show()\n" ] } ], From ce2ecff9342876ee4018f0b83170354340c6a82e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:08:31 +0800 Subject: [PATCH 0931/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 41 +++++++++++++++++++ .../__init__.py | 0 .../Python for Signal Processing/__init__.py | 0 3 files changed, 41 insertions(+) create mode 100644 Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb create mode 100644 Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/__init__.py create mode 100644 Digital Signal Processing/Python for Signal Processing/__init__.py diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb new file mode 100644 index 00000000..2306f952 --- /dev/null +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -0,0 +1,41 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from scipy import signal\n", + "\n", + "Ns=30 # length of input sequence\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/__init__.py b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Digital Signal Processing/Python for Signal Processing/__init__.py b/Digital Signal Processing/Python for Signal Processing/__init__.py new file mode 100644 index 00000000..e69de29b From 9fa83602c9bcffc3165f6f31c7dfeb99a9a197eb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:14:17 +0800 Subject: [PATCH 0932/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index 2306f952..1feb7c9d 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -11,9 +11,24 @@ }, "outputs": [], "source": [ + "from numpy import arange, cos, pi\n", "from scipy import signal\n", + "import matplotlib.pyplot as plt\n", "\n", - "Ns=30 # length of input sequence\n" + "Ns=30 # length of input sequence\n", + "n= arange(Ns) # sample index\n", + "x = cos(arange(Ns)*pi/2.)\n", + "y= signal.lfilter([1/2.,1/2.],1,x)\n", + "\n", + "fig,ax = plt.subplots(1,1)\n", + "fig.set_size_inches(12,5)\n", + "\n", + "ax.stem(n,x,label='input', basefmt='b-')\n", + "ax.plot(n,x,':')\n", + "ax.stem(n[1:],y[:-1],markerfmt='ro', linefmt='r-', label='output')\n", + "ax.plot(n[1:],y[:-1], 'r:')\n", + "ax.set_ylim(ymin=-1.1,ymax=1.1)\n", + "ax.set_xlabel(\"n\",fontsize=22)\n" ] } ], From 0f8e3e5cfe6314b0a7349a52b1f7dc39cbd8cc23 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:16:51 +0800 Subject: [PATCH 0933/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index 1feb7c9d..ab0b0461 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -28,7 +28,13 @@ "ax.stem(n[1:],y[:-1],markerfmt='ro', linefmt='r-', label='output')\n", "ax.plot(n[1:],y[:-1], 'r:')\n", "ax.set_ylim(ymin=-1.1,ymax=1.1)\n", - "ax.set_xlabel(\"n\",fontsize=22)\n" + "ax.set_xlabel(\"n\",fontsize=22)\n", + "ax.legend(loc=0,fontsize=18)\n", + "ax.set_xticks(n)\n", + "ax.set_xlim(xmin=-1.1,xmax=20)\n", + "ax.set_ylabel(\"Amplitude\",fontsize=22)\n", + "\n", + "plt.show()" ] } ], From ed6c9c0dd62e6bf5eb77d51fc185e60e7a96fa5b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:18:49 +0800 Subject: [PATCH 0934/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index ab0b0461..715f9ca2 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -2,14 +2,25 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": true, "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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AMQaHP9K7XYtgBMAlhoYOxeO+U5nznt6VntpLv4n2v/eDgCfA+hsZPyz7j8EfavNNPf83wGwU3v+SwAkGRg7CMC72t9/G4AJRv/tAbwF4E694rby/McC2KqdezYCGGZg7PvgyLf2AXge2gKmOsVvNr9x9rzHFVaJiIiIiEyCw2aIiIiIiEyCyTsRERERkUkweSciIiIiMgkm70REREREJsHknYiIiIjIJJi8ExERERGZBJN3IiIiIiKTYPJORERERGQSTN6JiIiIiEyCyTsRETlNRJSIKO32L0RkvYicFpEKEVkpImM93UYiIl/E5J2IiFwmIk8DeB9AHYAvAeQBmABgpYiM8mTbiIh8kSilPN0GIiIymTO97gBKAExWSm3VtlsAvAbgdgArlFIXe6iJREQ+ick7ERE5rVHy/jul1Lyz7ksEcBxALYBIpVS90e0jIvJVHDZDRETt8cXZG5RSJwCcAhAMIM7wFhER+TAm70RE1B5HWthern0PMaohRET+gMk7ERG5TCll93QbiIj8CZN3IiIiIiKTYPJORERERGQSTN6JiIiIiEyCyTsRERERkUkweSciIiIiMgku0kREREREZBLseSciIiIiMgkm70REREREJsHknYiIiIjIJJi8ExERERGZBJN3IiIiIiKTYPJORERERGQSTN6JiIiIiEyCyTsRERERkUkweSciIiIiMgkm70REREREJvH/9/AraNtWFy8AAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "from numpy import arange, cos, pi\n", "from scipy import signal\n", From a3de371fd2785c925371ac1d75eef422a18ce00a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:25:40 +0800 Subject: [PATCH 0935/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index 715f9ca2..82aeea39 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -47,6 +47,41 @@ "\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from numpy.dual import fft\n", + "from numpy import sinc\n", + "\n", + "wc = pi/4\n", + "M=20\n", + "N = 512 # DFT size\n", + "n = arange(-M,M)\n", + "win = signal.windows.hamming(len(n))\n", + "h = wc/pi * sinc(wc*(n)/pi)*win # see definition of np.sinc()\n", + "\n", + "w,Hh = signal.freqz(h,1,whole=True, worN=N) # get entire frequency domain\n", + "wx = fft.fftfreq(len(w)) # shift to center for plotting\n", + "\n", + "fig,axs = plt.subplots(3,1)\n", + "fig.set_size_inches((8,8))\n", + "plt.subplots_adjust(hspace=0.3)\n", + "\n", + "ax=axs[0]\n", + "ax.stem(n+M,h,basefmt='b-')\n", + "ax.set_xlabel(\"$n$\",fontsize=24)\n", + "ax.set_ylabel(\"$h_n$\",fontsize=24)\n", + "ax=axs[1]\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { From d4fc9e88c62910260c2359e32dd9af474e518bc6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:26:31 +0800 Subject: [PATCH 0936/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index 82aeea39..df999384 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -74,7 +74,11 @@ "ax.stem(n+M,h,basefmt='b-')\n", "ax.set_xlabel(\"$n$\",fontsize=24)\n", "ax.set_ylabel(\"$h_n$\",fontsize=24)\n", - "ax=axs[1]\n" + "ax=axs[1]\n", + "ax.plot(w-pi,abs(fft.fftshift(Hh)))\n", + "ax.axis(xmax=pi/2,xmin=-pi/2)\n", + "ax.vlines([-wc,wc],0,1.2,color='g',lw=2., linestyle='--',)\n", + "\n" ], "metadata": { "collapsed": false, From 805ec5f377f9a6fcfad90667499f9b983c745b54 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:29:21 +0800 Subject: [PATCH 0937/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index df999384..cb915cb1 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -54,7 +54,7 @@ "outputs": [], "source": [ "from numpy.dual import fft\n", - "from numpy import sinc\n", + "from numpy import sinc, log10\n", "\n", "wc = pi/4\n", "M=20\n", @@ -78,7 +78,20 @@ "ax.plot(w-pi,abs(fft.fftshift(Hh)))\n", "ax.axis(xmax=pi/2,xmin=-pi/2)\n", "ax.vlines([-wc,wc],0,1.2,color='g',lw=2., linestyle='--',)\n", - "\n" + "\n", + "ax.hlines(1,-pi,pi,color='g',lw=2., linestyle='--',)\n", + "ax.set_xlabel(r\"$\\omega$\",fontsize=22)\n", + "ax.set_ylabel(r\"$|H(\\omega)| $\",fontsize=22)\n", + "\n", + "ax=axs[2]\n", + "ax.plot(w-pi,20*log10(abs(fft.fftshift(Hh))))\n", + "ax.axis(ymin=-80,xmax=pi/2,xmin=-pi/2)\n", + "ax.vlines([-wc,wc],10,-80,color='g', lw=2., linestyle='--',)\n", + "ax.hlines(0,-pi,pi,color='g', lw=2., linestyle='--',)\n", + "ax.set_xlabel(r\"$\\omega$\",fontsize=22)\n", + "ax.set_ylabel(r\"$20\\log_{10}|H(\\omega)| $\",fontsize=18)\n", + "\n", + "plt.show()\n" ], "metadata": { "collapsed": false, From 727d52a9b081507ded91a00e323d10843da8caeb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:31:38 +0800 Subject: [PATCH 0938/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index cb915cb1..2d8bf419 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 4, "metadata": { "collapsed": true, "pycharm": { @@ -50,10 +50,23 @@ }, { "cell_type": "code", - "execution_count": null, - "outputs": [], + "execution_count": 5, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'functools.partial' object has no attribute 'fftfreq'", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mAttributeError\u001B[0m Traceback (most recent call last)", + "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_25632\\4199974367.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 11\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 12\u001B[0m \u001B[0mw\u001B[0m\u001B[1;33m,\u001B[0m\u001B[0mHh\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0msignal\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mfreqz\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mh\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;36m1\u001B[0m\u001B[1;33m,\u001B[0m\u001B[0mwhole\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;32mTrue\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mworN\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mN\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;31m# get entire frequency domain\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 13\u001B[1;33m \u001B[0mwx\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mfft\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mfftfreq\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mlen\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mw\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;31m# shift to center for plotting\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 14\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 15\u001B[0m \u001B[0mfig\u001B[0m\u001B[1;33m,\u001B[0m\u001B[0maxs\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mplt\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0msubplots\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;36m3\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;36m1\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", + "\u001B[1;31mAttributeError\u001B[0m: 'functools.partial' object has no attribute 'fftfreq'" + ] + } + ], "source": [ - "from numpy.dual import fft\n", + "from scipy.fft._pocketfft import fft\n", + "# from numpy.dual import fft\n", "from numpy import sinc, log10\n", "\n", "wc = pi/4\n", From 4a3909c2fd91e1b830d6d248e135336f8b41fd15 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:35:34 +0800 Subject: [PATCH 0939/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index 2d8bf419..6563d0b4 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "collapsed": true, "pycharm": { @@ -50,24 +50,23 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "outputs": [ { - "ename": "AttributeError", - "evalue": "'functools.partial' object has no attribute 'fftfreq'", - "output_type": "error", - "traceback": [ - "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[1;31mAttributeError\u001B[0m Traceback (most recent call last)", - "\u001B[1;32m~\\AppData\\Local\\Temp\\ipykernel_25632\\4199974367.py\u001B[0m in \u001B[0;36m\u001B[1;34m\u001B[0m\n\u001B[0;32m 11\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 12\u001B[0m \u001B[0mw\u001B[0m\u001B[1;33m,\u001B[0m\u001B[0mHh\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0msignal\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mfreqz\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mh\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;36m1\u001B[0m\u001B[1;33m,\u001B[0m\u001B[0mwhole\u001B[0m\u001B[1;33m=\u001B[0m\u001B[1;32mTrue\u001B[0m\u001B[1;33m,\u001B[0m \u001B[0mworN\u001B[0m\u001B[1;33m=\u001B[0m\u001B[0mN\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;31m# get entire frequency domain\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[1;32m---> 13\u001B[1;33m \u001B[0mwx\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mfft\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0mfftfreq\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mlen\u001B[0m\u001B[1;33m(\u001B[0m\u001B[0mw\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m)\u001B[0m \u001B[1;31m# shift to center for plotting\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0m\u001B[0;32m 14\u001B[0m \u001B[1;33m\u001B[0m\u001B[0m\n\u001B[0;32m 15\u001B[0m \u001B[0mfig\u001B[0m\u001B[1;33m,\u001B[0m\u001B[0maxs\u001B[0m \u001B[1;33m=\u001B[0m \u001B[0mplt\u001B[0m\u001B[1;33m.\u001B[0m\u001B[0msubplots\u001B[0m\u001B[1;33m(\u001B[0m\u001B[1;36m3\u001B[0m\u001B[1;33m,\u001B[0m\u001B[1;36m1\u001B[0m\u001B[1;33m)\u001B[0m\u001B[1;33m\u001B[0m\u001B[1;33m\u001B[0m\u001B[0m\n", - "\u001B[1;31mAttributeError\u001B[0m: 'functools.partial' object has no attribute 'fftfreq'" - ] + "data": { + "text/plain": "
      ", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgcAAAHqCAYAAACQk+36AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABwzUlEQVR4nO3dd5xU1f3/8ddnG0tfYOm9CaJ0BMUSsXfUmET9xtghRpMYE5NoElt+iSYmURNNIvYSW4wiGiP2LsguIEiTpbP03hbY8vn9MXdxd9kyuzt19/18MMzMvWfu/cyduXc+e+6555i7IyIiIlIqJd4BiIiISGJRciAiIiLlKDkQERGRcpQciIiISDlKDkRERKQcJQciIiJSTlq8A0gU2dnZ3qtXr3iHISIiEhO5ubmb3L19ZfOUHAR69epFTk5OvMMQERGJCTNbUdU8JQcikjAmz8rn7qmLWLOtgC5ZTbnx1AGcO7xrvMMSaXSUHIhIQpg8K5+bXppLQWExAPnbCrjppbkAShBEYkwNEkUkIdw9ddGBxKBUQWExd09dFKeIRBovJQcikhDWbCuo1XQRiR4lByKSELpkNa3VdBGJHiUHIpIQbjx1AE3TU8tNa5qeyo2nDohTRCKNlxokikhCKG10+PMX57C/uISuulpBJG6UHIhIwjh3eFee/XwlAM9PPCrO0Yg0XjqtICIiIuUoORAREZFydFpBRKJOPR+KJBclByISVdHo+VDJhkh06bSCiERVpHs+LE028rcV4HydbEyelR+BaEUElByISJRFuudDdbMsEn1KDkQkqiLd86G6WRaJPiUHIhJVke75UN0si0SfkgMRiapzh3flzvMHk5EaOtx0zWrKnecPrnMDQnWzLBJ9ulpBRKIukj0fqptlkehLupoDMzvNzBaZWZ6Z/bKS+TeY2Xwzm2Nm75hZz3jEKSLRc+7wrgzvkcWY3m355JcnKDEQibCkSg7MLBV4ADgdGARcZGaDKhSbBYxy9yHAi8AfYxuliIhIckuq5AAYDeS5+1J33w88B4wvW8Dd33P3PcHTaUC3GMcoIiKS1JItOegKrCrzfHUwrSpXAv+LakQiIiINTINtkGhm3wVGAd+opswEYAJAjx49YhSZiIhIYku2moN8oHuZ592CaeWY2UnAr4Bz3H1fVQtz90nuPsrdR7Vv3z7iwYqIiCSjZEsOZgD9zay3mWUAFwJTyhYws+HAg4QSgw1xiFFERCSpJVVy4O5FwHXAVGAB8IK7zzOzO8zsnKDY3UAL4N9mNtvMplSxOBEREalE0rU5cPfXgdcrTLulzOOTYh6UiIhIA5JUNQciIiISfUoOREREpBwlByIiIlKOkgMREREpR8mBiIiIlKPkQERERMpRciAiIiLlKDkQERGRcpKuEyQRSQyTZ+Vz99RFrNlWQJesptx46gDOHV7dIKkikiyUHIhIrU2elc9NL82loLAYgPxtBdz00lyAhEsQlMSI1J5OK4hIrd09ddGBxKBUQWExd09dFKeIKleaxORvK8D5OomZPOugwVxFpAwlByJSa2u2FdRqerwkSxIjkmiUHIhIrXXJalqr6fGSLEmMSKJRciAitXbjqQNomp5ablrT9FRuPHVAnCKqXLIkMSKJRsmBiNTaucO7cuf5g8lIDR1CumY15c7zBydcQ79kSWJEEo2uVhCROjl3eFee/XwlAM9PPCrO0VSuNFn5+Ytz2F9cQlddrSASFiUHItKgJUMSI5JodFpBREREylFyICIiIuUoORAREZFyYtbmwMyOAUYBe4BFwBx33xqr9YuIiEh4YpIcmNnNwG8BKzPZzWwNMCe4feHuz8UiHhEREalarGoOfgh8ClwEFAIDgaHAkOD+x0ATQMmBiIhInMUqOWgGPOnuq4Pn64EPSmeaWQpwSIxiERERkWrEKjn4EOhV1Ux3LwEWxigWERERqUasrla4GbjMzHrGaH0iIiJSR7FKDh4ENgO5ZvZjM+sRo/WKiIhILcXqtMJuoDfQFrgH+IuZbQK+KHtz97kxikdERESqEJPkwN1PBjCzbGBwcBsS3F9DqMGiA6lVLUNERERiI6Y9JLr7Jnd/z93/6u5XufsYoCXQH/hmOMsws9PMbJGZ5ZnZLyuZf5yZzTSzIjO7IMJvQUREpMGLe/fJHrLE3SfXVNbMUoEHgNOBQcBFZjaoQrGVwGXAMxEOVUREpFGI2GkFM2sGfIdQfwUOLAe+JNSWYHeEVjMayHP3pcE6nwPGA/NLC7j78mBeSYTWKSIi0qhEJDkws97A+0C3Sma7mS0DZhNqeDibUMKwqg6r6gqUfd1qYEwdlgOAmU0AJgD06KELKERERCByNQd/AroDRcBrwFagD6EGh22BvsHt/NIXmNlWd8+O0PrrxN0nAZMARo0a5fGMRUREJFFEKjkYS+hUwoXu/lLZGWbWHRhGaAyFYcGtN9CmDuvJJ5SElOoWTBMREZEIiVRy0AwoqJgYAASnD1YBr5ZOM7OWhC5lrK0ZQP/gNEY+cCFwcZ0iFhERkUpF6mqFhYRqDsLi7jvd/ZParsTdi4DrgKnAAuAFd59nZneY2TkAZnaEma0GvgU8aGbzarseERGRxixSNQdPA/ea2Rh3nx6hZVbK3V8HXq8w7ZYyj2dQecNIERERCUOtaw7M7AYzO8HM2paZ/A9Cly3+2cxi1SWziIiIREFdfsj/RHAKwczyCV2aOBt4GLgVeN/MLqrjpYoiIiISZ3VJDl4ndOVBV0LV992AM8vMPwpYbGZvEbqsMRf40t331jNWEYmBybPyuXvqItZsK6BLVlNuPHUA5w7vGu+wRCSGap0cuPtZAGbWjoMvURwYLDODUMJwRvCyEjP7iq9rGWYDs919Y91DF5FImzwrn5temktBYTEA+dsKuOml0GCpDT1BUFIk8rU6tw9w983AO8ENADPLAA6nfMIwBGgNHBrcLixdRH3WLyKRd/fURQcSg1IFhcXcPXVRg/6hbMxJkUhlIvrj7O77gZnB7YCgX4KyCcNwyndmJCIJYM22glpNbygaa1IkUpWY/OXu7suAZcDk0mlm1joW6xaR8HXJakp+JYlAl6ymcYgmdhprUiRSlbgN2ezu2+O1bhGp3I2nDqBpemq5aU3TU7nx1AFxiig2qkp+GnpSJFKVuCUHIpJ4zh3elTvPH0xGaujQ0DWrKXeeP7jBV6031qRIpCpqECgi5Zw7vCvPfr4SgOcnHhXnaGKjNPn5+Ytz2F9cQlddrSCNnJIDEREaZ1IkUhWdVhAREZFylByIiIhIOUoOREREpBwlByIiIlKOkgMREREpR8mBiIiIlKPkQERERMpRciAiIiLlKDkQERGRcpQciIiISDlKDkRERKQcja0gjcrkWfncPXURa7YV0EWD64iIVErJgTQak2flc9NLcykoLAYgf1sBN700F+CgBEFJhMjBtF80HkoOpNG4e+qiA4lBqYLCYu6euqjcAa42SYRIQxDOj772i8ZFbQ6kQZg8K5+j73qX3r/8L0ff9S6TZ+UfVGbNtoJKX1txenVJhEhDU/qjn7+tAOfrH/2K+5D2i8ZFyYEkvXAPbl2ymlb6+orTw00iRBqCcH/0a7NfhJOsS2JTciBJL9yD242nDqBpemq5aU3TU7nx1AHlpoWbRIg0BOH+6Ie7X4SbrEtiS7o2B2Z2GnAfkAo87O53VZjfBHgSGAlsBr7j7stjHWdNatOwJ9yyjbWxULgHt9Jt8fMX57C/uISuVWyjG08dUO7cKlSeRIg0BF2ympJfyT5U8Uc/3P0i3LY9DVU0jtfxOLYnVXJgZqnAA8DJwGpghplNcff5ZYpdCWx1935mdiHwB+A7sYox0g17wi3bEFvihxtnuAc3CG2LZz9fCcDzE4+qdL3hJhG1jTOekiHGZJIM2zPcGMP90Q93v6jtabmGtC2jdbyOR0PQZDutMBrIc/el7r4feA4YX6HMeOCJ4PGLwIlmZrEILhoNe8ItG2652lb5xevcYW3iDPd0QW2cO7wrw3tkMaZ3Wz755QnVJgaJXoWaDDEmk2TYnrWJ8dzhXbnz/MFkpIZ+DrpmNeXO8wdX+p0PZ7+ozWm5eG/LcI5vtYkx0sfr2paNJHP3qK4gkszsAuA0d78qeH4JMMbdrytT5sugzOrg+ZKgzKbqlj1q1CjPycmpV3xH3/Uu+dsK2PL2IPZvaHVgepO0FIb3aHPg+bSlm6tcxpF92pV7Hm7ZcMvNWrmVfUUlB5WpGCPApl37WLpxNyVlviMpZvRp35zsFk0OKrtqyx72FZXQJC2F7m2bHVSmNmVrE+fXse6ixKlx/fPXbAdgUJfWlc6vTbnaxhkPdYkxktsoWsuM17r1mVdfrjbHjdoejyJ5jAk3ztrEGOnjdcWyGR120PakUEW5AcvuOrPK5YTDzHLdfVRl85LqtEKkmdkEYAJAjx496r28qqrNKn6xmqSlVPllq2xaOGXDLVdZmaqmr9qyp9yOA1Dizqote8rtPBV3sn1FJSzduBugxh2yqrK1ibP0tVUdKCoK58ck3HK1jTMeP2i1jTHc+GpTLhrLjNe6o/WZR/K7Ec/PvHQ/DOeHPNw4o3GMCff4VpttGenjdXVlo91AOtmSg3yge5nn3YJplZVZbWZpQGtCDRMP4u6TgEkQqjmob3Cl575LM7tSXbOa8v4vTzjwfPKsPZWe4wtV5ZXPRMMtG265o+/6otLz8xVjBOj9y0+pbKMY8H6ZjPXouz6hQyXLbF3JMsMtW5s446m2cX7nwdB3o6r2DnUpW1O5ZNmWySJan3kkvxvx/8ybBLfqhRtnNI4x4R/fwt+WkT5eV1c22g2kk63NwQygv5n1NrMM4EJgSoUyU4BLg8cXAO96jM6dhHvuu/QcX9esphg1n+MLp2y45Wpzfj4a/QKEWzYa7QiiIRniTIYYk0kybM9kiBHCjzMax5hwj2+12ZaRPl7XtmwkJVXNgbsXmdl1wFRClzI+6u7zzOwOIMfdpwCPAE+ZWR6whVACEROlH1Y4rVrPHd417A833LLhlKtNjOG2Yq7N1QLhlq1NnPGUDHEmQ4zJJBm2ZzLECOHHGY1jTG2v0gh3W0byeF2XspGSVMkBgLu/DrxeYdotZR7vBb4V67hKxeNDrK3afHmh5p2iNv0C1KZsMmxLSI44kyHGZJIM2zMZYoTw4ozGMSZaf8w1FEmXHEhsRbo2Iln+ohFJVJNn5TNr5Tb2F5dw9F3vNor9J1rHmMb4ox8uJQcSEYleRZYIGuNBXSKr9Jr7/cWh1uuNaWREHWNiK9kaJIokpaoO6onUcY4kPo2MKLGi5EAkBnRQl0jQiKESK0oORGJAB3WJBI0YKrGi5EAkBnRQl0hIlv4LJPkpORCJAR3UG6fSRqjTl22JyMBl8eoQRxofXa0gEgPRuoRTV0AkrtpcWVCbz1Et8SUWkmpUxmiKxKiMIpEyeVY+P39xDvuLS+haRSJRcZx3KNs/u3484q10lNaKumY15ZNyY63oc5T4qG5URp1WEEkw4V72qCsgElu4jVD1OUoiUnIgkmDC/bHQFRCJLRoDl4nEipIDkQQT6VHlJD7CbYSqz1ESkZIDkQQTjaFkJfaiMYy6SKzoagWRBBOtoWQl9iI9cJlIrOhqhYCuVpBEMnlWvn4sRCSqqrtaQTUHIglI17KLSDypzYGIiIiUo9MKATPbCKyI4CKzgU0RXF686f0kNr2fxKb3k9ga6/vp6e7tK5uh5CBKzCynqnM5yUjvJ7Hp/SQ2vZ/EpvdzMJ1WEBERkXKUHIiIiEg5Sg6iZ1K8A4gwvZ/EpveT2PR+EpveTwVqcyAiIiLlqOZAREREylFyEGFmdpqZLTKzPDP7ZbzjiQQzW25mc81stpklXTeSZvaomW0wsy/LTGtrZm+Z2eLgvk08Y6yNKt7PbWaWH3xGs83sjHjGGC4z625m75nZfDObZ2Y/DqYn5edTzftJys8HwMwyzexzM/sieE+3B9N7m9n04Fj3vJllxDvWmlTzXh43s2VlPp9hcQ61Vsws1cxmmdlrwfN6fzZKDiLIzFKBB4DTgUHARWY2KL5RRcw4dx+WpJf7PA6cVmHaL4F33L0/8E7wPFk8zsHvB+Ce4DMa5u6vxzimuioCfurug4AjgWuDfSZZP5+q3g8k5+cDsA84wd2HAsOA08zsSOAPhN5TP2ArcGX8QgxbVe8F4MYyn8/seAVYRz8GFpR5Xu/PRslBZI0G8tx9qbvvB54Dxsc5pkbP3T8EtlSYPB54Inj8BHBuLGOqjyreT1Jy97XuPjN4vJPQAa4rSfr5VPN+kpaH7Aqepgc3B04AXgymJ8VnVM17SVpm1g04E3g4eG5E4LNRchBZXYFVZZ6vJskPDAEH3jSzXDObEO9gIqSju68NHq8DOsYzmAi5zszmBKcdkqIaviwz6wUMB6bTAD6fCu8HkvjzCaqtZwMbgLeAJcA2dy8KiiTNsa7ie3H30s/nd8Hnc4+ZNYlfhLV2L/BzoCR43o4IfDZKDiQcx7j7CEKnS641s+PiHVAkeeiSnaT+6wH4B9CXUFXpWuDPcY2mlsysBfAf4Hp331F2XjJ+PpW8n6T+fNy92N2HAd0I1ZAOjG9EdVfxvZjZ4cBNhN7TEUBb4BfxizB8ZnYWsMHdcyO9bCUHkZUPdC/zvFswLam5e35wvwF4mdDBIdmtN7POAMH9hjjHUy/uvj446JUAD5FEn5GZpRP6If2Xu78UTE7az6ey95PMn09Z7r4NeA84Csgys9KRfZPuWFfmvZwWnA5yd98HPEbyfD5HA+eY2XJCp7FPAO4jAp+NkoPImgH0D1qKZgAXAlPiHFO9mFlzM2tZ+hg4Bfiy+lclhSnApcHjS4FX4hhLvZX+kAbOI0k+o+D86CPAAnf/S5lZSfn5VPV+kvXzATCz9maWFTxuCpxMqC3Fe8AFQbGk+IyqeC8LyySiRuj8fFJ8Pu5+k7t3c/dehH5v3nX3/yMCn406QYqw4BKle4FU4FF3/118I6ofM+tDqLYAIA14Jtnek5k9CxxPaKSy9cCtwGTgBaAHodE4v+3uSdHIr4r3czyhKmsHlgMTy5yzT1hmdgzwETCXr8+Z3kzoPH3SfT7VvJ+LSMLPB8DMhhBq1JZK6A/KF9z9juDY8ByhavhZwHeDv7wTVjXv5V2gPWDAbOD7ZRouJgUzOx74mbufFYnPRsmBiIiIlKPTCiIiIlKOkgMREREpR8mBiIiIlKPkQERERMpRciAiIiLlKDkQERGRcpQciIiISDlKDkRERKQcJQciIiJSjpIDERERKUfJgYjElJm9amZuZjeaWYaZ/dDMppvZDjNbZ2YvBX3Di0icpNVcREQkooYG91uAHGAwsIfQoDcdCY1aeISZHZpsg9+INBSqORCRmDGzNkD34OkfgJ3AWKAF0Bz4FlBEaAz678QjRhFRciAisTWkzOM8YJy7f+ZfexF4LZh/SOzDExFQciAisVV6SqEIuNjd91dSZmtwr/HkReJEyYGIxFJpzcF77r60ijKljRGXRz8cEamMkgMRiaXSmoNXqykzOLj/MsqxiEgVEjI5MLNHzWyDmVV6cDCz/zOzOWY218w+NbOhZeYtD6bPNrOc2EUtItUxs1TgsOBpbhVlegBtCZ1S+CJGoYlIBQmZHACPA6dVM38Z8A13Hwz8FphUYf44dx/m7qOiFJ+I1F5/oClQQtU//MOC+2XuvjMWQYnIwRKynwN3/9DMelUz/9MyT6cRuuxJRBJbaQ1fnrvvrqHM7OiHIyJVMffEbBAcJAevufvhNZT7GTDQ3a8Kni8j1NrZgQfdvWKtQqWys7O9V69e9YpZREQkWeTm5m5y9/aVzUvImoNwmdk44ErgmDKTj3H3fDPrALxlZgvd/cMqXj8BmADQo0cPcnLUREFERBoHM1tR1bxEbXNQIzMbAjwMjHf3zaXT3T0/uN8AvAyMrmoZ7j7J3Ue5+6j27StNnkRERBqdpEwOghbNLwGXuPtXZaY3N7OWpY+BU9DlUCIiIrWSkKcVzOxZ4Hgg28xWA7cC6QDu/k/gFqAd8HczAygKrkzoCLwcTEsDnnH3N2L+BkRERJJYQiYH7n5RDfOvAq6qZPpSvm7tLI2A3W4A+K2J2bBWpKHSvtewJeVpBREREYkeJQciIiJSjpIDERERKSch2xyIhEvnO0XiQ/tew6aaAxERESlHyYGIiIiUo+RAktrISSMZOWlkvMMQaXS07zVsanMgSW3m2pnxDkGkUdK+17Cp5kBERETKUXIgIiIi5Sg5EBERkXKUHIiIiEg5Sg5ERESkHF2tIEnt6hFXxzsEkUZJ+17DZu6J2QWmmT0KnAVscPfDK5lvwH3AGcAe4DJ3nxnMuxT4dVD0/7n7EzWtb9SoUZ6TkxOp8EVERBKameW6+6jK5iXyaYXHgdOqmX860D+4TQD+AWBmbYFbgTHAaOBWM2sT1UhFREQakIQ9reDuH5pZr2qKjAee9FDVxzQzyzKzzsDxwFvuvgXAzN4ilGQ8G+WQJQ5y1+QCMLJLw++pzd0prejz0ueAOzhfzzOD9JQUUlIsXqFWyt0pLnEKi539xSWUlDgpZlgKGJBiFnpuocfpqUaogjAxuDslDoXFJeW2dem9YcE9mFlwT0K9h0hqTPteY5SwyUEYugKryjxfHUyranq1ctfkYrd/vROXHXFs5KSRVfYGdvWIq5l09qQDyxj1UKU1NADkXJ1zYEea8OoEHpr5UKXlRnQeQe6E3APPy8ZV0YNnPciEkRMAmJQ7iYmvTayybEN8T6X8Vk/o9zSo6U9pb2eyt7CE/MJXWc19VZbts++/lJ7uy8/4MftTllRarkXRqbQr/CEA+yyPdZnXV7nM/txPq9QBZKQay4rvYV3xfyst1yZ9AGd2fIK0FCM1JYVHlh9R5TJHZ/2CXpnjKS5x8vZM5otdd1e9/sLXD/yorm0Smfc0quk/aZt+KGmpxrw9d7Ni36uVlmvfZCDnd32aopISCoudJ1eNqXKZ/dJ/QradSVGJs67otWo/p54Frx14HM57MoP9lseaJlW/p4Ep99M2/VAy01NYXPgXVlXxnhLhGFG6X+RcnZPQx4iGeNyLxnuqKJmTg3ozswmETklA5/jGIslp3fa9vDl/HR8s2lhtubbNMhjSLovM9BTmb2/N6tVVl/3+N/oc+Cv0njlNyN9debnBXVtzUf9DMINVuwr546yql/mNQ7LJbtKRouISduZnsG575eXcYefeIopLnKKS6tsjFRaHai6apKeQmZZabdkrju5NRqqRnprC3bMzWbWr8nLDumdxYf8BlJQ4S3fs4945VS+zV3YL2qY3o6jY+Wp/CuyrvFxBYTFLN+0iLSWF9NTq/4rv2a45w9tmk5aawpyt1X9Ovzht4IEamz/MrPo9Hd61Nd/q0w8HVu3cy31fVr3MI/tk0ya9LfsKS1i9LrXK95S3fhe/njyXUwZ14qi+7ap9TyJ1kbANEgGC0wqvVdEg8UHgfXd/Nni+iNApheOB4919YmXlqqIGicmpNBOP5djy7s77X23kyU+X8/5XG3GH3tnNGdmzDcO6ZzGsexZ92jenWUajzr0lgkpKnE279jFvzQ5mrdrG7FXbyFm+hT37i8lu0YTvHNGN7x3Vi46tMmMWUzz2PYms6hokJvPRawpwnZk9R6jx4XZ3X2tmU4Hfl2mEeApwU7yClIbl07xN/OGNhXyxejsdWjbhunH9GD+sC/06tIx3aNKApaQYHVpl0qFVJuMGdgBgb2ExH361kRdyVvOP95fw0EfL+O6YnvzoxH5kNcuIc8SS7BI2OTCzZwnVAmSb2WpCVyCkA7j7P4HXCV3GmEfoUsbLg3lbzOy3wIxgUXeUNk4UqavNu/Zxx2vzeWX2GrpmNeWP3xzCeSO6kp6ayBf8SEOWmZ7KKYd14pTDOrFy8x7uf28xT3y2nFdm5/Prsw7l3GFdG2xjSIm+hD6tEEs6rZCcYlG1+UneJq5/fjbb9xRyzfF9ueb4vmSmV3+OXSQeFqzdwa9ensvMlds4e2gXfnfe4bTKTI/KunRaIfklaz8HInHl7jzy8TK++8h0WmWm8cp1R/OTkw9RYiAJ69DOrfj398dy46kDeH3uWs594BNWbK6iRatINWo8rRD0VBhpk919ShSWK41MztXRqe0pKXHueG0+j3+6nNMO68RfvjNUDQwlKaSmGNeO68eonm2Y+HQu5/39Ux697AiGdc+K6Hqite9JYqjxtIKZlURhvbe5+x1RWG6d6bSClCopcW5+eS7PzVjFVcf05uYzDk24DoVEwrFs024uffRztu7ez+NXjGZkT3UWK1+r7rRCOMnBN6IQ03J3XxGF5daZkgOB0KmEX03+kmemr+SHJ/TjhpMPUaMuSWprtxdw4aRpbN61n2evPpLB3VrHOyRJEPVKDhoLJQfJacKrQY9iQS9g9fXXdxbzl7e+4vvf6MsvThugxEAahLXbC7jgH5+xr6iEl38wlu5tm9V7mZHe9yT21CBRGqyHZj5UZdeltTV5Vj5/eesrzh/RVYmBNCidWzfliSuOoLC4hEsf+5wdewvrvcxI7nuSeJQciADz1mznly/NYUzvttx1/hAlBtLg9OvQkgcvGcnKzXu44fkvKKmhe2xp3JQcSKO3fU8h3386l6ymGTzwfyPISNNuIQ3TkX3a8aszD+XtBev5+/t58Q5HElidrs0ys3bAOGA40BHIArYCG4CZhMYy2ByhGEWixt25efJc1m7by7+/fxTZLZrEOySRqLpsbC9mrdzGPW8v5qi+2bqCQSoVdnJgZmnAt4AfAEcRDFteSVEH3Mw+Bf4OvOjuRRGIVSTi/jMzn//OWcuNpw5geA8dJKXhMzP+33mHM3PlVq5/fhav/+hYWkapF0VJXmHVn5rZJcAy4GngaGAj8Arwe+BnhIY9/hlwJ6EBkTYBxwD/Apaa2XcjHrlIPa3ZVsBtU+Yxpndbvv+NvvEORyRmWmWmc9+Fw8jfWsDv/rsg3uFIAgqnh8TpwChgPfBn4Al3nxfG6w4HLgMuBp4ws+vc/cj6hStS3ojOI+r0OnfnVy/PpbjE+dO3hpKqTo6kkRnZsy1XH9eHBz9YyjlDuzC2X3atXl/XfU+SQzidIK0BfgdMcvdaX/9iZunAROBmd+9SpyhjQP0cNC6TZ+Vz/fOzufXsQVx+dO94hyMSF3sLizn9vo8oKilh6vXHqYvwRqa+/Rz0dfcH6pIYALh7obvfD6jeVhLCzr2F/L//LmB4jyy+d1SveIcjEjeZ6ancef5gVm0p4J/vL4l3OJJAakwO3L0gEiuq7XLM7DQzW2RmeWb2y0rm32Nms4PbV2a2rcy84jLzNMCTlPO3d/PYvHsft59zmE4nSKN3ZJ92nD20Cw9+uJRVW/bEOxxJEHW+oNtCss2so0W4xxgzSwUeAE4HBgEXmdmgsmXc/SfuPszdhwF/A14qM7ugdJ67nxPJ2CSx2O12YFz5cCzduIvHPlnGt0Z2Y0i3rOgFJpJEbjp9IGbw+9fDb5xY231PkkutkwMz+6uZzQb2EGqkuAbYa2bTzexWM+sTgbhGA3nuvtTd9wPPAeOrKX8R8GwE1isN3G9fm09mWio3njow3qGIJIwuWU35wfH9+N+X6/h0yaZ4hyMJoC41B9cBQ4AmfN3XQTpwBHALsMjM/mlmTesRV1dgVZnnq4NpBzGznkBv4N0ykzPNLMfMppnZufWIQxqQ9xZu4L1FG/nRif1p31KdHYmUNeG4PnRr05Tbp8ynqLgk3uFInNUlOfgrcAmh/g4OAQYCJwA/JfQDnQJcDbxjZrE4Al9IqKOl4jLTegYtMC8G7jWzShtDmtmEIInI2bhxYwxClXjZX1TCb1+bT5/2zbl0bK94hyOScDLTU/nVGYeyaP1Onvl8ZbzDkTirdXLg7te7+7/c/TN3z3P3r9z9fXe/x91PBg4DpgNjCCUMdZEPdC/zvFswrTIXUuGUgrvnB/dLgfcJdfNc2XuZ5O6j3H1U+/bt6xiqJIMXclaxdNNufn3moRo7QaQKpx3eiSP7tOWv7yxmz351bNuYRfwo6e4LgVOAtUBde0acAfQ3s95mlkEoATjoqgMzGwi0AT4rM61NaY2FmWUTquGYX8c4pAHYW1jM395dzKiebRg3oEO8wxFJWGbGjacOZNOu/Tz2yfJ4hyNxFJU/odx9F/Ax0KuOry8i1LZhKrAAeMHd55nZHWZW9uqDC4HnvHxPTocCOWb2BfAecJe7KzloxJ6etoL1O/bxs1MHaChmkRqM7NmGEwZ24MEPlrC9oE7d20gDUO/usMysDaEGgYvcfXcwbRTwDUKjNNaJu78OvF5h2i0Vnt9Wyes+BQbXdb2SXB4868Fq5+/aV8Tf31/CMf2yObJPuxhFJZLcfnrKIZz514955KOl3HDKgErL1LTvSXKLRF+Zg4CPCI3EWACkAhmErmL4WQSWL1KlCSMnVDv/sY+XsWX3fn52auUHOBE52GFdWnPm4M488vEyLh3bi3aVDGVe074nyS0SpxVWEmoQuBpoRugSx5eBke7+lwgsX6ROtu8pZNJHSznp0I4M654V73BEkspPTj6EgsJi/vmBulVujOqdHLj7Knf/P3fvCYwEHiHUYdHvzKxZfZcvUp1JuZOYlDup0nkPfbSUnXuLuOHkQ2IclUjy69ehBecN78aTn61gw469B82vbt+T5FeXHhKr7FrO3We5+9WErlY4gVCnSCJRM/G1iUx8beJB03fuLeSJz5Zz+uGdGNSlVRwiE0l+Pz6xP0UlzkMfLT1oXlX7njQMdak5mG1mvzOzllUVcPf3CDUmvLDOkYnUw7+mr2Tn3iKuOV6DgYrUVY92zThnaBeenraSLbv3xzsciaG6JAe7gF8Cy8zsdjPrXkW57oAuKpeY21tYzCMfL+OYftkaXEmknn5wfF8KCot57JNl8Q5FYqguycGhwPNAW+DXwHIzm2Nmj5jZbUFfBJ8AIwC1ZJGY+8/M1WzcuY8fqNZApN76d2zJ6Yd34vFPl7Njr/o9aCzq0n3yRne/GDgKeCOYfDhwOfAb4FfBPAPuilCcImEpKi7hwQ+WMrRba47qq34NRCLh2nH92Lm3iKc+WxHvUCRG6tzPgbtPB840sx7AGYSuVOhJaITGFcATQdsDkZh5/ct1rNyyh5vPGKneEEUi5PCurTl+QHse+XgZlx/di2YZkegiRxJZvT9hd18J/DMCsYjUi7vzj/eX0Kd9c04Z1DHe4Yg0KNeN68cF//yMZ6av5Kpj+8Q7HIkypX+S1PzWr4fV+OCrjSxYu4M/XjCElBTVGohE0qhebRnTuy0Pf7SMS47qWW7fk4ZHY9dKg/H395fQuXUm5w7rGu9QRBqkH4zrx7ode3ll1pp4hyJRVmNyYGa/N7PW9VmJmbU2s9/XZxki1cldsYXPl23hqmP7kJGmnFckGo7rn81hXVrxzw+WUFyimoOGLJyj6C+ApWZ2a9D4MGxm1sPMbgOWAj+vQ3wi1Ro5aSQjJ43kH+8vJatZOheNrqrbDRGpLzPjmuP7snTTbgb8bSgjJ42Md0gSJeEkB0cT6q/gVkJJwttmdpOZHW9mHc0sDcDM0oLn48zsZjN7l1BScAuwGBhbm8DM7DQzW2RmeWb2y0rmX2ZmG81sdnC7qsy8S81scXC7tDbrleQyc+1MZq6dydsL1nPZWLWiFom20w/vTK92zViybS4z186MdzgSJTUeSd19GjDazC4Gric0ZsK4smXMbB+h0RgPTArupwH3ufvztQnKzFKBB4CTCY32OMPMprj7/ApFn3f36yq8ti2hRGYU4EBu8NqttYlBkkuzjFQuPapXvMMQafBSU4yJ3+jLB/+LdyQSTWGfnHX3Z9x9NDAauBP4DCgglAhkBvd7gI+BO4AR7j62tolBYDSQ5+5L3X0/8ByhkR7DcSrwlrtvCRKCt4DT6hCDJJGLRvegTfOMeIch0iicP0KNfhu6WtfBunsOkFP6PBiWuTWwzd0LIhRXV2BVmeergTGVlPummR0HfAX8xN1XVfFafZMbuKuO7R3vEEQajSZpqQcez161jWHds+IXjERFvZt1u/sed18bwcQgXK8Cvdx9CKHagSdquwAzm2BmOWaWs3HjxogHKNG1ade+A487t24ax0hEGq+/v5cX7xAkCsK5lHGRmT1jZjea2Ylm1iYGceUTGtWxVLdg2gHuvtndS38dHibUfXNYry2zjEnuPsrdR7Vv3z4igUvsPP7J8niHINLovTl/PXkbdsY7DImwcE4r9A9u3ymdYGYrgZllb+6+PoJxzQD6m1lvQj/sFwIXly1gZp3dfW3w9BxgQfB4KvD7MknMKcBNEYxNEsDOvYU8+dlyDm11Hsf0z453OCKNztUjrmZvYTGfz0rhH+8v5c/fHhrvkCSCwkkOLgCGAkOCWy9CAyz1BM4tLWRm6zg4YVhFHbh7kZldR+iHPhV41N3nmdkdQI67TwF+ZGbnAEXAFuCy4LVbzOy3hBIMgDvcfUtd4pDE9cz0lezYW8SUqx5lSLeseIcj0uhMOnsSALelzePpaSu44ZRD6Jql03sNhbnXrpcrM2sJDCaUMDwA7Cd0pUJ6UKTsAje5e1KMgDNq1CjPycmpuaDE3d7CYo7943sM6NiSp6+qrJ2qiMRK/rYCvvHH9/jukT257ZzD4h2O1IKZ5br7qMrm1bpBorvvdPdP3f0fwaSZQEvgKOBHwNPAomCe6nsl4l6elc/Gnfu45vi+5K7JJXdNbrxDEml0Sve9rllNGT+sK8/NWMmW3fvjHZZESES6kwv6Ipge3IADNQzqW1MiqrjEefCDJQzt1pqxfduRckeoIalGiBOJrVEPhf7g9Fuda47vw39mrubxT5ZxwykD4hyZRELURqgJahjej9bypXF6bc4alm/ewzXH98VMwzKLJIJ+HVpyyqCOPP7pcnbtK4p3OBIBGr5OkkZJifP395ZwSMcWnDKoU7zDEZEyfjCuHzv2FvHs9JXxDkUiQMmBJI23Fqxn0fqdXDuuHykpqjUQSSTDumcxtm87Hv54KfuKiuMdjtSTkgNJCu7O/e/m0atdM84c3Dne4YhIJa45vi/rd+zj5ZmV9jsnSSScHhJnmtljZnZ9MBxz21gEJlLWB19tZG7+dn5wfD/SUpXTiiSiY/plM7hrax78cCnFJWoknMzCOcoOA74H/Bl4G9hoZqvM7L/B/JZm1iVK8Yng7vzt3Ty6tM7k3OEaQ0skUZkZ1xzfl2WbdvO/L9fW/AJJWOFcyngFMCK4DQWaExrlsPQoPQhYFfSQOKPMLUc9E0okTFu6hdwVW7lj/GFkpJXPZ3OuVsdVIvFQ1b536mGd6JPdnH+8v4QzB3fWVUVJqsbkwN0fBx4HsNCnPICvk4URhGoWsoDOhMY4OLv0tWa21N37RzZkaUzcnXve+or2LZvw7VHdD5o/sou60hCJh6r2vdQU4/vH9+XnL87h7QUbOHlQUnSSKxXU6uSthyx092fc/WfufoK7twX6Ad8G7iI0fPImQl0q94l4xNKofLh4E58v38IPT+hHZnpqzS8Qkbg7b3hXemc3589vLqJEbQ+SUkRadrn7Und/0d1vdvfTgvEUegDnRWL50ji5O3+auohubZpy4RE9Ki0z4dUJTHh1QowjE5Hq9r301BSuP6k/C9ft5NU5a2IcmURCNHtIXB2MnihSJ1PnrWNu/nauP+mQg9oalHpo5kM8NPOhGEcmIjXte2cP6cLATi25562vKCwuiWFkEgm6JkwSUnGJ86c3v6JfhxacpysURJJOSorx01MGsHzzHv6Tuzre4Ugt1dgg0cwejcJ6J9dUq2BmpwH3AanAw+5+V4X5NwBXAUXARuAKd18RzCsG5gZFV7r7ORGOX6Js8qx88jbs4h//N4JU9YYokpROOrQDw7pncd87izl3eFe1G0oi4VzKeFkU1rscqDI5MLNU4AHgZGA1MMPMprj7/DLFZgGj3H2PmV0D/BH4TjCvwN2HRSFuiYF9RcXc8/ZXDO7amtMO1xgKIsnKzPj5qQO4+OHpPD1tBVcdqzbqySKc5GBcFNa7vIb5o4E8d18KYGbPAeOBA8mBu79Xpvw04LsRjlHi5JGPl7F6awF3nj9Y10iLJLmx/bI5tn82f31nMecN70q7Fk3iHZKEIZx+Dj6IRSAVdAVWlXm+GhhTTfkrgf+VeZ5pZjmETjnc5e6TK3uRmU0AJgD06FF5a3iJrXXb93L/u3mcMqgjx/ZvH+9wRCQCbj17EKfd+xF/enMRd54/JN7hSBjCqTlIaGb2XWAU8I0yk3u6e76Z9QHeNbO57r6k4mvdfRIwCWDUqFG6GDcB3Pm/BRSVOL8+c1BY5Ud0HhHliESkMrXZ9/p1aMllY3vxyCfLuHh0TwZ3ax3FyCQSEjU5yAfKdofXLZhWjpmdBPwK+Ia77yud7u75wf1SM3sfGA4clBxIYpmxfAuvzF7DD0/oR492zcJ6Te6E3ChHJSKVqe2+96OT+jN5dj63TvmS/1wzVqcME1yiXso4A+hvZr3NLAO4kAoNGM1sOPAgcI67bygzvY2ZNQkeZwNHU6atgiSm4hLn1lfm0aV1Jtcc3zfe4YhIhLXKTOfnpw1k5sptTJ6tIZ0TXUImB+5eBFwHTAUWAC+4+zwzu8PMSi9LvBtoAfzbzGabWWnycCiQY2ZfAO8RanOg5CDBPTN9BfPX7uDmMw+lWUaiVmiJSH1cMKIbQ7tncefrC9mxtzDe4Ug1zF2n2iHU5iAnRyP8xUP+tgJOvedDhnZvzdNXjqlVdaPdHirrt+p7LBJLdd335qzexrkPfMK3R3Xnrm+qcWI8mVmuu4+qbF5C1hxI4+Hu3PzSXErcuev8IToPKdLADemWxdXH9eG5Gav4aPHGeIcjVVByIHH13IxVfPDVRn5x2kC6tw2vEaKIJLefnHQIfdo35xcvzmH7Hp1eSERKDiRu8jbs4vZX53Fs/2wuObJnvMMRkRjJTE/lL98exoad+7h58lx0ejvxKDmQuNhbWMyPnp1Fs4w0/vytoaRo/ASRRmVY9yxuOOUQ/jtnLS/krKr5BRJTSg4k5tydX738JfPX7uDuC4bQoVVmvEMSkTiYeFxfjumXzW9emcec1dviHY6UoeRAYu7Jz1bwn5mruf6k/px4aMd4hyMicZKaYvz1ouG0b9GE7z+Vy8ad+2p+kcSELiiXmHpr/npuf3UeJx3akR+d0L/ey3vwrAcjEJWI1Fak9r22zTN48JKRXPDPT7nyiRk8e/WRNG+in6Z4Uz8HAfVzEH25K7bwfw9PZ0DHljw74Uh1diQiB7w9fz0TnsrhuEPaM+mSUWSkqWI72tTPgcRd7ootXProDDq1yuSRy45QYiAi5Zw0qCO/O28w7y/ayA/+NZN9RcXxDqlRU3IgUfdJ3ia+98jntG/ZhOcmHEV2BMdzn5Q7iUm5kyK2PBEJTzT2vYtG9+C34w/j7QXrmfBkLrv3FUV0+RI+nVYI6LRCdLyQs4qbX5pL3/YtePLK0XSM8JUJ6j5ZJD6iue899/lKbn55Lod2bsUjlx5Bp9a6oikadFpBYq5gfzG/eHEOP39xDkf1bce/rzkq4omBiDRMF47uwSOXHcHyTbs5868f8cFX6mY51pQcSMR9umQTZ/71I17IXcW14/ry2GVH0CozPd5hiUgSGTegA69cdzTZLZpw6aOf86uX57K9QF0tx4pahUnELNm4i7+89RX/nbOWHm2b8fSVYzi6X3a8wxKRJNWvQ0teue5o7p66iMc+WcbUeeu4blw/LhrTgyZpqfEOr0FL2JoDMzvNzBaZWZ6Z/bKS+U3M7Plg/nQz61Vm3k3B9EVmdmpMA29kikucjxZvZMKTOZz8lw94b+EGfnRif6Zef5wSAxGpt8z0VH5z1iCmXHcMfdu34LZX53PsH97jvrcXs3Z7QbzDa7ASsubAzFKBB4CTgdXADDOb4u7zyxS7Etjq7v3M7ELgD8B3zGwQcCFwGNAFeNvMDnF3XRcTASUlTv62Ar5YvY2PF2/i7QUb2LRrH22apfP9b/TlimN6R/RqBBERgMO7tua5CUfySd5mHvpoKfe8/RX3vP0VI3u2YWzfdozq1ZYRPbJoqVOYEZGQyQEwGshz96UAZvYcMB4omxyMB24LHr8I3G9mFkx/zt33AcvMLC9Y3mfVrXD9jr38+c1FB02vbDigEgfHcf/6cfCvnIpXgtT2whCrZiwiL7M+LxNP2XV7mXWWzi/7Gsq8puIyHEgxDvRHsG3PfpZt3sPi9TvZsz+UZ7XMTOPY/tmcNaQLJwzsQGa6qvlEJHrMjGP6Z3NM/2yWb9rNa3PWMHXeeh54L48SDx2zerVrTq/s5nRo2YQWTdIoLC5hb2EJ+4qKD9yHjm9GipXeGykpoeWXnW6l96XlgzJW5vVWptyB52ViLnvYL/ubUNPvQcXjv1X3gxAFiZocdAXKDtO1GhhTVRl3LzKz7UC7YPq0Cq/tWtlKzGwCMAEgo1M/Hngvr9z8yj47D76AVvpFwAj+YaXPy62jwjorC6Sy9VQ3z0vX9fUXxoL/Spdf+oWtWMbsQOky80tj+/o1EEp8du8PXWfcumk6Pdo249ujujOgU0sGdW7FYV1akZYa3zNTuoRRJD7ive/1ym7OdSf057oT+rNrXxGzV25jxvItLFq3k+WbdzM3fzu79haRkZZCZnoKTdJSD9ynWOj4VlzilHjpH3oe3Cg3reJ9iX/9x1eJOyUlX/8hVrqM0mN0qbK/C+WnV+7gPzQrzveDfmtqy6v9lUnc5CAm3H0SMAmCfg7uPDPOEYmISG21aJJ2oEZBwmf/r+p5idogMR/oXuZ5t2BapWXMLA1oDWwO87UiIiJShURNDmYA/c2st5llEGpgOKVCmSnApcHjC4B3PXRCZwpwYXA1Q2+gP/B5jOIWERFJegl5WiFoQ3AdMBVIBR5193lmdgeQ4+5TgEeAp4IGh1sIJRAE5V4g1HixCLhWVyqIiIiET2MrBDS2goiINCbVja2g5CBgZhuBFWEUzQY2RTmcZKVtUzVtm6pp21RN26Zq2jZVC3fb9HT39pXNUHJQS2aWU1Wm1dhp21RN26Zq2jZV07apmrZN1SKxbRK1QaKIiIjEiZIDERERKUfJQe1NincACUzbpmraNlXTtqmatk3VtG2qVu9tozYHIiIiUo5qDkRERKQcJQc1MLNvmdk8Mysxsypbf5rZcjOba2azzaxRdJhQi21zmpktMrM8M/tlLGOMFzNra2Zvmdni4L5NFeWKg+/MbDOr2Atog1LT9yDo1fT5YP50M+sVhzDjIoxtc5mZbSzzXbkqHnHGmpk9amYbzOzLKuabmf012G5zzGxErGOMlzC2zfFmtr3Md+aW2ixfyUHNvgTOBz4Mo+w4dx/WiC6vqXHbmFkq8ABwOjAIuMjMBsUmvLj6JfCOu/cH3gmeV6Yg+M4Mc/dzYhdebIX5PbgS2Oru/YB7gD/ENsr4qMU+8nyZ78rDMQ0yfh4HTqtm/umEusjvT2iE3X/EIKZE8TjVbxuAj8p8Z+6ozcKVHNTA3Re4+6J4x5GIwtw2o4E8d1/q7vuB54Dx0Y8u7sYDTwSPnwDOjV8oCSGc70HZbfYicKLFehD7+Gis+0iN3P1DQt3jV2U88KSHTAOyzKxzbKKLrzC2Tb0oOYgcB940s1wzmxDvYBJIV2BVmeerg2kNXUd3Xxs8Xgd0rKJcppnlmNk0Mzs3NqHFRTjfgwNl3L0I2A60i0l08RXuPvLNoOr8RTPrXsn8xqixHl/CdZSZfWFm/zOzw2rzwoQceCnWzOxtoFMls37l7q+EuZhj3D3fzDoAb5nZwiCzS2oR2jYNUnXbpuwTd3czq+qyoJ7B96YP8K6ZzXX3JZGOVZLeq8Cz7r7PzCYSqmE5Ic4xSWKbSej4ssvMzgAmEzr9EhYlB4C7nxSBZeQH9xvM7GVCVYVJnxxEYNvkA2X/yukWTEt61W0bM1tvZp3dfW1QzbmhimWUfm+Wmtn7wHCgISYH4XwPSsusNrM0oDWwOTbhxVWN28bdy26Hh4E/xiCuZNBgjy/15e47yjx+3cz+bmbZ7h7WeBQ6rRABZtbczFqWPgZOIdRYT2AG0N/MeptZBqGhtRt0q/zAFODS4PGlwEG1LGbWxsyaBI+zgaMJDTXeEIXzPSi7zS4A3vXG0RFLjdumwnn0c4AFMYwvkU0BvhdctXAksL3M6bxGzcw6lbbZMbPRhH7vw0+23V23am7AeYTOY+0D1gNTg+ldgNeDx32AL4LbPEJV7nGPPRG2TfD8DOArQn8RN5Zt047QVQqLgbeBtsH0UcDDweOxwNzgezMXuDLecUd5mxz0PQDuAM4JHmcC/wbygM+BPvGOOYG2zZ3BseUL4D1gYLxjjtF2eRZYCxQGx5orge8D3w/mG6ErPZYE+9CoeMecQNvmujLfmWnA2NosXz0kioiISDk6rSAiIiLlKDkQERGRcpQciIiISDlKDkRERKQcJQciIiJSjpIDERERKUfJgYiIiJSj5EBERETKUXIgIiIi5Sg5EJGYMLMOZrbJzPab2aAayt5nZm5m98cqPhH5mpIDEYmVewmNOfEXd69pgKkZwf1xUY1IRCqlsRVEJOrMbAyhwV+2Ar3dfXsN5ccCnwD7gWbuXhz9KEWklGoORCQWbgnu/15TYhDYGNxnEKptEJEYUnIgIlFlZj2B04OnD1WY18PMjjGziglA2WNTajTjE5GDKTkQkWg7AzBgnruvqDDvTuAjoHeF6V2C+yJgQ3TDE5GKlByISLSNDO5nVDLv2OB+UYXpw4P72WpvIBJ7Sg5EJNp6Bveryk40sxFAd6DA3XdWeM0Zwf3/ohybiFRCyYGIRFt6cF/xeHNNcF+uTYGZDQROAEqAJ6MbmohURsmBiERbaTuDE80sBcDMxgGXAy8DGWY2OpjeAniUUBuFR909Lw7xijR66udARKLKzE4A3gme5hI6vXAG8D5wM5ADrAc+AI4h1Bjxc+AEd98d63hFRMnBAdnZ2d6rV694hyEiIhITubm5m9y9fWXz0mIdTKLq1asXOTk58Q5DREQkJsys4qXFB9QpOTCzd+sezgHu7idGYDnSiE3KnQTAhJET4hyJSOOifa9hq2uDxBRCDYbqc4tqY0gzO83MFplZnpn9MprrkviZ+NpEJr42Md5hiDQ62vcatjrVHLj78RGOI6LMLBV4ADgZWA3MMLMpYYwEJyIi0ug11DYHo4E8d18KYGbPAeMBJQcSde5OcYlTWOwUlpRQVOwHpgP4gXLBPWUaBTuVlgmHWQ3z6zwTrIYC9Vm31fDiGhZ9wNfbzA+aFppetqwfVKCqsgfFUyGgg+I7aH75CTW9vuz2SDFIS00hPdVIT0khJSXcrSFSPw01OehK+d7YVgNjqntB7ppc7Pavdzy/9eujw8hJI5m5dmalr7t6xNVMOnvSgWWMemhUlevIuTqHkV1CPclOeHUCD818qNJyIzqPIHdC7oHnZeOq6MGzHjxwzm9S7qRqq/ka4nsqK9LvaW9hMZdPvorn5j9eabmstAGMbjaJXfuK2LWviDmcWuUy2+6/jpbFpwGwM/UNtmTcX2XZngWvHXi8tsmP2Z+ypNJyLYpOpV3hDwHYZ3msy7y+ymV22nsvTbwfAJvT/8autKmVlsso6UvnffcdeL6i6VlVLlPvKX7vKdP7cVja32nRJI2Wmem8tuXYSssB3H3S/fx07A8ws4geI0ol+jGiIR73ovGeKopYcmBmhwCHAR0IJeEbgS/dfXGk1hFpZjYBCH0aneMbiySO21+dx7btO1i1dQ+b0tZWuZcY0LNdM1pmptO8SSpzZle9zHOGdub4bodhBu+t/oLHq6nD+t15hwfLN371aVOW76i83BG923L14YMBWLoNfv1Z1cu8dlxfercOLfeRL9vy3urKy3XJaspvjzr8wPNLKv9tAmD8sC6M6344uPPe6i94rJr3dMf4ww48vuWzpqyo2FlyYGTPNlw+KFR2+Y4Sbpte9TInHtebnq0GYcDjC9rwQX7l5bq0bsodRwXrN+N71byn84Z35YTuoW367qq5PDKv6rK/P2/wgRqIX1fzOY3q1ZYrDgtt02XbS7h1WtXL/P43+tCrVSjWx+ZX/Z7aNMvg5H6d2LWviJ17C2FL1cu88/WFPDZ1Kn07tGBP+qqqC4qUUa9+DszsUOD7wAVAp9LJwX3pgtcDLwAPuvuCOq+sdnEdBdzm7qcGz28CcPc7q3rNqFGjXJcyJp/STLxsJl0Tdydvwy4+WryJj/M2MXPlVrbtKQQgIy2FPtnN6dehBf06tKB7m2Z0ap1Jx1aZdGqdSYsmDbWyTRqK4hJn8659rNuxl3Xb97Jux16WbtzNko27yNuwi7Xb9wKh0xv9O7RgTO92HNM/m6P6tqNVZnoNS/9aXfY9SSxmluvulVYn1PVSxr7AH4DzgAJCQ64+CCwBNhNKENoC/YAjgauAH5rZS8AvStsCRNEMoL+Z9QbygQuBi6O8TklgJSVOzoqt/HfOGt6cv/7AAbJ3dnNOGdSRYd3bMKx7Fod0bEFaqnoVl+SVmmJ0aJVJh1aZDOl28Pytu/fzxeptfLFqOzNXbuXF3NU8NW0FqSnGyJ5tOHNwZ04f3IkOLTNjH7wkjDrVHJjZPmAucB/wUk1dnJpZc0K1Cz8GBrl71L91ZnYGcC+hQV0edfffVVdeNQcN07JNu3lm+gqmfLGG9Tv20SQtheMHtOf4AR04pl823ds2i3eIInG1v6iEmSu38tHijbw9fwOL1u/EDMb0bsu3R3XnjMGdyUxPrXlBknSqqzmoa3JwjrtPqWMw4939lbq8NpqUHDQcxSXOOwvW89S0FXy0eBNpKcbxAzpw9tDOnHhoR50aEKnGV+t38t85a5nyxRqWbdpNm2bpfPuI7nx3TE8l0w1MxJODhkjJQfIrLnFem7OGv76zmCUbd9O5dSYXj+7Bd47oTodWqiIVqQ1359Mlm3nqsxW8tWA9AOcO68oPT+hHr+zmcY5OIiHibQ5EEsXISaHLiW4d8yr3vv0VSzfuZkDHltx/8XBOO6yT2g+I1JGZcXS/bI7ul83a7QU89OEy/jV9BS/PWs25w7ry1ubLyUhLKXepnjQcEak5MLMHgKOAvkAzQpcxzgReBZ519you8kkcqjlITqUtpnsWvMbATi358Yn9OfWwTuosRiQKNuzcy6QPlvL09BUsSjsDgIKbi9QmIUlF/bSCmZUA+4E1wX274AawFbjW3Z+r94qiSMlBctleUMgf31jI7+cMAeC5M1bwrZHdlRSIxMCabQV0vS/U/mBsk3e45exBnHpYpxpeJYmmuuQgUnWuQ4Bm7t7H3QcG40P3A24A9gBPB1cPiNTbx4s3cdq9H/LcjK87dPnOET2UGIjESJespgcet8xMY+JTufzk+dlsLyiMY1QSSRFJDtz9S3cvqTBtqbvfCwwCvgRujcS6pPEq2F/MbVPm8d1HptM0I5WXrhkb75BEGr1Xf3gMPz6xP1O+WMNp937Ix4s3xTskiYCot9Zy953Aw8DgaK9LGq5lm3Zzzv0f8/iny7n86F68/qNjGdo9K95hiTR66akp/OTkQ3jpmrE0zUjlu49M5+6pCyku0ZVwySziVyuYWRqhHgkXEeotsQPwLULdKIvU2nsLN/Cj52aRlmI8deVoju3fPt4hiUgFQ7tn8fqPjuW2KfN44L0lzFuzg/suHE7rpuF3ySyJIxqXMjYBnuTrsRX2EhoV8YdRWJc0YO7OA+/l8ee3vuLQTq148JKRB3XCUnZ0OBGJncr2vcz0VO765hAGd2vNbVPmMf7+j5n0vVEc0rFlHCKU+ohKJ0hm1h/4BnA+oaGS/+zuv4/4iiJIVysklqLiEm5+eS4v5Kxm/LAu3HX+EJpm6HIpkWSRs3wL3396JvuKinn0siM4olfbeIckFUT9agUza1X2ubsvdveH3f0M4GTgGjO7JRLrkoZvb2Ex1z4zkxdyVvOjE/tz73eGKTEQSTKjerVlynVH075lEy55ZDrvLdwQ75CkFiLVIHGRmV1mZgctz91nEhrBcUKE1iUN2K59RVzx+AymzlvPLWcN4oaTD8Gs6ksUc9fkkrtGPbSJxFo4+16XrKb8e+JR9OvQgqufzOGV2fkxik7qK1LJwXLgUeArM/uZmQ0onRE0UDweaBOhdUkDtXtfEd97ZDrTl23hz98ayhXH9K7xNaMeGsWohyqtFRORKAp332vXognPXn0kI3u24frnZ/Ni7uoYRCf1FankYCxwDaGuk/8IzDezPWa2lFAPiecBH0VoXdIA7Ssq5vtP5zJ71Tbuv2g43xxZyUD0IpKUWmam88QVozmmXzY/f/EL3vhyXbxDkhpEqhMkd/cHgd7A5YTGVNgIdCN01cKrwJWRWJc0PEXFJfz42dl8tHgTf7xgKKcP7hzvkEQkwjLTU/nnd0cytHsWP3p2ljpLSnAR7QTJ3fe5+xPufq6793T3DHdvFTzXySY5SEmJc9NLc3lj3jpuOWsQF6jGQKTBat4kjccvG02f9s2Z8FQOM1dujXdIUgWNZytx9bd38/h37mp+fGL/sNoYiEhya90snSevHE37lk248vEZrNqyJ94hSSXqlByY2Yl1XaGZnVTX10rD8tb89dzz9lecP6Ir15/UP97hiEiMdGiZyWOXHUFRiTPxqVwK9hfHOySpoK41B2+Y2btmdpaZ1XgBupmlm9l5ZvYB8Hod1ykNSN6Gnfzk+dkM6daa3583uNrLFUWk4enTvgV/vXA4C9bt4Of/mUM0OuSTuqtr98nDgb8AU4CNZvY28DmwBNgCGNAW6A8cCZwIZAFvAsPqFXHAzO4Gzgb2B+u93N23BfNuItQAshj4kbtPjcQ6JTK2FxRy9ZO5ZKan8OAlI8lMr3sHRzlXq1dLkXiIxL43bmAHbjx1AH98YxGHd2nFxG/0jUBkEgn16j7ZzI4CfgCMB1rw9XgKB4oAO4CXgH+4+4w6r+zgdZ8CvOvuRWb2BwB3/4WZDQKeBUYDXYC3gUPcvdp6K3WfHBvuztVP5vDBVxt55uoj1aWqSCPn7lz37Cz+N3ctT105hqP7Zcc7pEajuu6T6zXwkrt/BnwWnFoYCQwC2hNKEjYCXwKz3L2kPuupYt1vlnk6DbggeDweeM7d9wHLzCyPUKLwWaRjkNp79vNVvL1gA785a5ASAxHBzLj7giEsWhc61fi/Hx9LuxZN4h1Woxepfg6K3f1zd3/c3e929z8FlzTmRiMxqMQVwP+Cx12BVWXmrQ6mSZwt37Sb//ff+RzTL5vLx/aKyDInvDqBCa+qZ26RWIvkvtcsI42/XjicbXsK+fmLan+QCOqcHJjZVjN7x8z+ZGYXm9nASAYWrONtM/uyktv4MmV+BRQB/6rD8ieYWY6Z5WzcuDGSoUsFRcUl3PDCbNJSjLu/NYSUlMg0QHxo5kM8NPOhiCxLRMIX6X1vUJdW/OL0gbyzcAP/zlEXy/FWn9MK6wmNmTCOoK2Bme0BZgMzy9zm1bX2wN2rvezRzC4DzgJO9K9TzXyge5li3YJplS1/EjAJQm0O6hKjhOefHyxh5spt3HfhMDq3bhrvcEQkAV0+thdvzlvHb1+bzzH9s+mSpWNFvNS55sDdBxK6IuFU4FbgHaA5cDTwQ0IDMc0GdpnZdDP7e72jLcPMTgN+Dpzj7mV70ZgCXGhmTcysN6ErJj6P5Lqlduav2cG9by/m7KFdGD9MZ3hEpHIpKcbdFwylqMS5+eW5Or0QR/Vqc+Du2939LXf/f4SuWoDQAEynAb8EngHyCF36OLE+66rE/UBL4C0zm21m/wximge8AMwH3gCurelKBYmekhLnV5Pn0rppOr8df1i8wxGRBNejXTNuPHUA7y/ayOtzNUBTvNTraoUKSlO8jcGVBAeuJjCzDEJXMkRuZe79qpn3O+B3kVyf1M1zM1Yxa+U2/vLtoWQ1y4h3OCKSBL53VE/+M3M1d7w2j+MOyaZlZnq8Q2p0YjK2grvvd/fZsViXJI6tu/fzhzcWcmSftpw3XKcTRCQ8aakp/O68wWzYuY/73l4c73AapUjWHIiUc987i9m5t5Dbzzk8at0jj+g8IirLFZHqRXvfG9Y9i2+P7M4Tny3n/47sSe/s5lFdn5Sn5ECiIm/DLp6atoILR/dgQKeWUVtP7oTcqC1bRKoWi33vp6ccwqtz1nDX/xbw4CWVduQnUVKffg5eN7PfmNmpZtYmkkFJ8vvDGwtplp7KDScfEu9QRCRJdWiVyQ+O78vUeev5fNmWeIfTqNSnzcFpwO2ERlncBLxHqFHiaWZ2gpmpg+xGavaqbbw1fz0TjutDtrpBFZF6uOrYPnRo2YQ/TV2kSxtjqD7JQWtCHSD9jNBAR7sIJQdXAW8B680sP6hhuNPMLqx3tJIU/vzmIto2z+DyY3pHfV12u2G3a7hnkViL1b6XmZ7KdSf04/PlW/g4b1PU1ychdW5z4O47gQ+CGwBm1pzQkMwjgRHB/cmEahkceK4esUoS+HzZFj5avIlfnXEoLZqoSYuI1N93jujOgx8s5U9vfsUx/bKj1sBZvhbRo7e77wY+CW4AmFlTYCihZEEauPvfyyO7RQbfPbJnvEMRkQaiSVqo9uCml+bySd5mjumvs9bRFvV+Dty9wN2nuXtEu0+WxDNvzXY+/Gojlx/dm6YZqfEOR0QakPNHdKVDyyb884Ml8Q6lUYhJJ0jSODz4wVKaZ6Sq1kBEIq5JWipXHNObj/M2MXf19niH0+DV6bSCmb0bgXW7u58YgeVIAli1ZQ//nbuWK47uReum6upURCLv4jE9eODdPB78cAn3X6wz1dFU15qDFMDqeVOtRQPyr+krcXcuPzr6VyiISOPUKjOd7xzRnTe+XMeGHXvjHU6DVqeaA3c/PsJxSBLbV1TMCzmrOOnQjjEff/3Bsx6M6fpEJCRe+97/HdmThz9exnMzVvGjE/vHJYbGQNeaSb39b+46tuzezyVHxb6twYSRE2K+ThGJ377XO7s5x/bP5pnpK/nB8X1JS1UldDRoq0q9PTVtBb3aNePovrq8SESi77tH9mTdjr28vWBDvENpsKKaHFhIbzMbEtyr54oGZunGXeSu2MpFo3uQkhL7j3dS7iQm5U6K+XpFGrt47nsnDuxAx1ZNeDF3dVzW3xhEJTkwswwzuxfYCiwBZgf3W83sHjNTh/sNxOTZazCDc4d3jcv6J742kYmvTYzLukUas3jue2mpKYwf1pX3F21gy+79cYmhoYtWzcEDwGjg20AHICO4/3Yw/W9RWq/EkLszeVY+Y/u2o2OrzHiHIyKNyPhhXSgqcf47d228Q2mQopUcfBM4293fdPdN7l4U3L8JnAt8K0rrlRiauXIbK7fs4dxh8ak1EJHGa1DnVhzSsQWvzMqPdygNUrSSAweq6gknLZgvSe6V2fk0SUvhtMM7xTsUEWlkzIxzh3clZ8VWVm3ZE+9wGpxoJQdPA2+Y2bfM7BAz62Bm/c3sW8B/gScjtSIz+6mZuZllB8/NzP5qZnlmNsfM1I1WFLg7b85bz7gBHWiZqR4RRST2zh7SBYCp89bFOZKGJ1rJwQ3AS8CfgIXAWmBR8Pxl4KeRWImZdQdOAVaWmXw60D+4TQD+EYl1SXnz1uxg3Y69nHhoh3iHIiKNVPe2zTikYwve0SWNEReV5MDdi939DnfvCbQBegJt3L2nu//W3YsjtKp7gJ9T/jTFeOBJD5kGZJlZ5witTwJvL1iPGYwbqORAROLnxEM7MmP5FrYXFMY7lAYlFkM2b3f31e4e0WG0zGw8kO/uX1SY1RVYVeb56mCaRNA7CzYwvHsW2S3ie1Wq3+r4rWrCIhJribLvnXRoB4pKnA++2hjvUBqUmPeQGPSBsDTMsm+b2ZeV3MYDNwO31DOWCWaWY2Y5GzfqixWu9Tv2Mjd/Oyce2jHeoYhIIzesexvaNs/gnQXr4x1KgxKPsRUM6BVOQXc/qdIFmA0GegNfBJ0udgNmmtloIB/oXqZ4t2BaZcufBEwCGDVqVPxT4CTx3sLQ+b2TlByISJylphjjBnTg7QXrKS5xUuPQU2tDFJXkoIaagRTqeSmju88l1KlS6fqWA6PcfZOZTQGuM7PngDHAdndXLxkRNH3ZFtq3bMIhHVvEOxRGThoJQO6E3DhHItK4JNK+d0z/dvxn5moWrdvJoC6t4h1OgxCtmoP2hKr9V1YyLwN4LkrrBXgdOAPIA/YAl0dxXY3SjOVbOKJXGxJhqIyZa2fGOwSRRimR9r1RPdsCkLNii5KDCIlWcjAbWO/ur1ScEYyrENFfFXfvVeaxA9dGcvnytbXbC1i9tYArju4d71BERADo1qYpnVplMmP5Vr53VK94h9MgRKtB4l+BzVXMK0R/zSetnOVbATiiV9s4RyIiEmJmjOrVhhnLthD6+1DqK1r9HPzb3d+pYl6Juz8RjfVK9OUs30KzjFQO7dwy3qGIiBwwundb1u3YS/62gniH0iDE/FJGSW4zlm9lRI82pKXqqyMiieNAu4OgdlPqR0d4CduOvYUsXLeDUb3axDsUEZFyBnRqScsmacxYviXeoTQIEWmQaGbv1lDEgQJCVy+8CbziOjGUdOav2UGJw7DuWfEO5YCrR1wd7xBEGqVE2/dSU4yh3bOYszqinfE2WpG6WqEP0JTQJYwA24L7rOB+I6FaijOAicAnZna6u++O0PolBpZs3AVA/46J095g0tmT4h2CSKOUiPtevw4t+HfOKtw9IS61TmaROq1wPKE+Be4GOrp7W3dvC3QkNBLjbmAUkA38BTiGenZ9LLG3ZMNummWk0rlVZrxDERE5SN8OLdi9v5j1O/bFO5SkF6nk4B7gE3f/hbsfGKTA3Te6+8+Bz4B73H2Lu98I/Bf4ZoTWLTGyZOMu+rRvTkoCdU+auyaX3DXx76FNpLFJxH2vb/vmwNe1nFJ3kUoOTgA+qmb+R0GZUm8TGvNAkkjehl30bR//LpPLGvXQKEY9NCreYYg0Oom47/ULjk95G5Qc1Fckr1YYWMO8sn9ulhBqoChJomB/MfnbChIuORARKdW+ZRNaNklTzUEERKpB4tvANWY23d3LjZtgZhcB3wdeKzN5BLA8QuuWetixt5D3Fm5g6+79DOzcipE925BeSR8GSzeFdjYlByKSqMyMPh1aVJscrN1ewMwV21izrYDRvdsypFtrNV6sRKSSgxuA0cC/zOxPhAY9AugHdAbWAj8FMLNMoCfwZITWLXVQsL+Ye97+isc+WUZh8ddXlY7q2YbHrxhNiyblvxpLNoYuLOnXQcmBiCSufu1b8EnepkrnvbNgPdc8PZP9xSUHpvXObs7vzjucsX2zYxViUojIaQV3XwEMBf4M7CA0VPIYYGcwbWhQBnff6+4nuPs9kVi31F7ehp2c8dePmPThUs4b3pX/XHMUn998IneeP5hZq7Zx+WOfs2d/UbnXLNmwixSDnu2axSlqEZGa9e3QnHU79rJrX/lj2PuLNnDN0zMZ2Lklr153DJ/ffCJ/+tZQ3J2LH5rOb1+bT3GJut8pFbFRGd19C/Dz4CYJKnfFFq54PIf01BSeuXpMuWz5otE9aJmZxnXPzOKZ6Su56tg+B+blbdxF97bNyExPjUfYIiJhKT31uWTDLoYGHbYVlzg3vTSXPu2b89QVY2jdLB2AC0Z248zBnbnrfwt45ONlrNlWwD3fGabjHOo+uVGZvWoblzzyOW2bZ/DSNWMrrUY7a0gXhnRrzUsz88tNX5KAVyqIiFR0IDko0+5g2tLNrN2+l2vH9TuQGJRqmpHK7eMP59dnHsr/vlzHdc/MpKjMaYfGKmLJgZk1N7PbzWyOme0KbnPM7DYzax6p9Ujd5G3YxeWPfU67Fhk8P+FIelRzeuCbI7oxf+0OFqzdAYC7s3zzbnpnJ97HmHN1DjlX58Q7DJFGJ1H3vZ7tmpFisGzT1x3w/id3NS0z0zh5UMcqX3fVsX347bmH8/aCDfziP3MpaeSnGCKSHJhZW+Bz4DeEekWcFdw6EuoJ8fOgjMTB2u0FXPro56SmGE9dMYYONfRwePbQLqSlGC/NXA3Alt372VtYQrc2TWMRbq2M7DKSkV1GxjsMkUYnUfe99NQUOrXKPDB08+59Rfzvy3WcNaRzjacLLjmyJz856RD+M3M1d72xMBbhJqxI1RzcQagvg+uALu5+rLsfC3QBrgUGALdFaF1SC9v27OfSRz9ne0Ehj18+ml5h/PXftnkG4wZ2YPLsNRSX+IGdrGtW4iUHIiIVdW3TlPytoePWG1+uo6CwmPNHhNfv3o9O7MelR/Vk0odL+ecHS6IZZkKLVHJwDvCwu//d3YtLJ7p7sbv/A3gUODdC65IwFewv5soncli+aQ+TvjeSw7u2Dvu1Jw/qyMad+1i5Zc+BnaxrAtYcTHh1AhNenRDvMEQanUTe97pmNT3wR03Oiq1kNUtnVM/whpo3M249+zDOHtqFu/63kBdzV0cz1IQVqeSg9FRCVWYGZSRG9heVcO0zM5m5civ3XTis1tfwlvZRvmzTroSuOXho5kM8NPOheIch0ugk8r7XJasp67bvpbjEWbZpF32ym9eqo6OUFOPP3xrKMf2y+cV/5vDewg1RjDYxRSo5WA8Mr2b+8KBMRJnZD81soZnNM7M/lpl+k5nlmdkiMzs10utNdPuLSrjumZm8u3AD/+/cwzl9cOdaL6N3dqjF77JNe8jfVkDzjFRaN02v4VUiIvHXtU1TikqcDTv3snzTngPHs9rISEvhn5eMZFDnVkx8Opf3FzWuBCFSycGrwJVmNtHMDizTzFLMbAJwBTAlQusqXfY4YDyhDpYOIzQ0NGY2CLgQOAw4Dfi7mTWai1Z37Svi+0/n8ub89dx+zmH835iedVpOm2bptG6aHqo52FpAl6ym6mJURJJCl6CWc/H6XazbsZc+7et2pVWLJmk8deVo+ndowYQnc3l97tpIhpnQItUJ0i3AycDfgdvNbFEwfQDQnlB3yrdGaF2lrgHucvd9AO5emtaNB54Lpi8zszxCXTt/Vt3C3GFfUTFN0iKXR0xbupmp89axdtteWjVN46i+7ThlUCeaN4lY31PlLNm4i2uezmXJxt387rzD65wYQOi8W6/s5izbtJvtBYUJ2d5ARKQy3YLk4JMloW6Ue7Wr+2XYWc0y+NdVY7ji8Rn84F8zuW5cP64/qT9plYxBEwkL1+3gnQUbmL1qG60y0+nXoQUXHtGdNs0zIrJ8d6egsJiMGuKPyK+Uu282s1HALwg1PDwimLUUeBj4o7vviMS6yjgEONbMfgfsBX7m7jOArsC0MuVWB9MOEtRqTADI6NSPwbe+ycmHdeSKo3szMszGK5XJ31bAT1+YzbSlW2iankrXNk3ZuHMfL+SspkvrRdwx/nBOquZ629oq2F/M39/P48EPltKsSSpPXjGao/vVv5/wPtnN+XzZFvbsL2Jot6z6ByoiEgOlNQelYyzUt4+WrGYZPDvhSG6ZPI/738vj/a82cNf5Q2rVyLsmO/YW8sc3FvKv6StxDx1/9xYW85+Zq7n/3cX88MT+TDyuT51rcPcVFfPUZyt4fsYqFocxpHUku0/eAfwquEWEmb0NdKpk1q8Ixd4WOJJQMvKCmfWppGyV3H0SMAmgx4DBfuHo7kz5Yg1vfLmO2885jO8eWfu/vFds3s3FD01nx95Cbj17EBeN7kFmeiolJc60ZZu5bco8rnoyh1+feWi57onrwt15a/56bn91PvnbCjhveFduOn1gjf0YhKt3dnNenhXqKbFLAjZGFBGpTPMmaWQ1S2femtDfpL2y6z8mTJO0VO765mCOO6Q9t06Zxzn3f8xFo3vw01MG0Laef9Vv3b2fCydNY/GGnVw+tjfXjutLuxZNAFi8fid/nLqIu/63kA079vGbsw6tdYKwZfd+Jj6Vw4zlWxnRI4ufnXIIhcXODX+o+jXRqd+OEHc/qap5ZnYN8JK7O6FOlkqAbCAf6F6maLdgWrU6tGzCHeMP5+enDeSHz8zk15O/ZM/+IiYc1zfseLfvKeTCSdPYW1jMs1cfWS6rTEkxxvbN5rUfHsv1z8/i//13AZnpqXVKQABWbt7DrVO+5L1FGzmkYwuem3AkR/ZpV6dlVaVsnwiJ2AESwIjOI+IdgkijlOj7XtespmzbU0inVpk0y4jMT52ZceaQzhzTL5t73v6Kp6at4NUv1nDDyYfw3SN71ulUw469hVzy6HSWbd7Nk1eM4Zj+5Wt9+3dsyaRLRnLHa/N59JNltMxM4ycnH1Kr5X/zH5+Sv62Av100nLOHdjkw74ZqXlenLWZm36vL69w9ksM0TwbGAe+Z2SFABrCJUMPHZ8zsL4Q6YepPqPfGsLRoksZD3xvFD5+dxR/fWMTYvtlhVx39/vUFbNi5j5d/MLbK12SkpXDvd4azrzCXW6fMY0i31gypZZX91HnruOH52QD8+sxDuXRsL9KjcP6rT5nkIBEvYwTInZAb7xBEGqVE3/e6ZjVl3podUen2vXWzdG475zAuHtODO16dz22vzuftBRv420XDa9024JbJX7Jw7U4e+t6ogxKDUmbGLWcNYtueQh54L4/TB3diYKdWYS3/9inzWbF5N89cXbs/IOv6i/I48FhwH+7tsTquqyqPAn3M7EvgOeBSD5kHvADMB94Ari3bMVM40lJTuPP8wbRrkcFPnp/N3sKaX/7pkk08n7OKq47tXeOPfUZaCn/5zjCyW2Rw47/nsL8o/EE+Hvl4GROfyqVfhxa8ecM3uOrYPlFJDKB8zYFOK4hIMik9ZvWu45UK4TikY0ueunI0f/zmED5ftoVzHvj4QL8w4Xh7/nomz17DteP6MW5gh2rLliYIrZum84v/zA1reOk3vlzHf2au5tpx/Wpds1zXX5VxwAnBfbi3E+q4rkq5+353/667H+7uI9z93TLzfufufd19gLv/ry7Lz2qWwR++OYTFG3bx/IxVNZa/8/WF9GjbjOtPDK+6p3XTdH5/3mAWrd/JP94Pr4vOV2bn89vX5nP64Z14fuJRUf9rvkWTNDq0bEJqitExQu0YRERiofRUaJ8oDxhnZnz7iO48P/FItu0u5PLHQt3V12Tn3kJ+NXkuAzu15Npx/cJaV5vmGdxy9iC+WLWN1+asqbZscYnzu9fnM6hzK350Yv+wll9WnZIDd/+gLre6rCuejh/QgaHds3jis+XVjtA1d/V25uZv5+pje9M0I/xLIU88tCNnDO7EpA+XsG3P/mrLzl61jRv/PYcxvdty74WxG2+8V3ZzOrXKJDUlMfs4sNsNuz0xYxNpyBJ93yutOajPZYy1MbxHGx68ZCTLNu3m2n/NrHFUx6emrWD9jn38/vzBZKSF/1N89pAu9GjbjGc/X1ltufcWbmDVlgKuHdevTrXLEa2PNrM0M2tlZgnd0LE2Lhvbk6Ubd/NxcElMZZ75fAWZ6SmMH17pFZPV+tGJ/dm9v5jHP11eZZnC4hJ++Z85tGuRwaRLRkW0L4aaXPONvtxQi8YvIiKJ4Nj+2VxxdG/G9otsQ+3qjO2XzW3nHMbHeZuqHZOhYH8xj3y0jOMOac+IHrW7bD4lxbhwdHemLd3Cko1VX5L4+KfL6dQqk1MOq9tl8/VODszsQjN7zczWA/uArcA+M1tvZv81s4vqu454OmNwZ7JbZPBEFT/eu/YV8crsNZw9pAutMmvfvfDATq046dCOPPbJcnbtK6q0zCMfL2Phup3cfs5htG4W2y6Mxw3swDdHhjeamYhIomiZmc4tZw+K2JUK4broiB6M7tWW372+gE279lVa5rkZK9m8ez8/PCG80wkVXTCyG2kpxnNV1B7kbdjJx3mb+O6RPercJq3OyYGZNQv6IXgGOB5YDLwIPB3cLwa+ATxtZu+YWf0vNI2DJmmpXHhED95dtIHNlXzQ/52zhj37i7loTI86r+O6E/qxvaCw0g96w4693Pv2V5wyqCOnHFZZlw8iIpIoUlKM3513OHv2F/GnqYsOml9UXMJDHy5ldO+2HNGrbZ3W0aFlJicP6siLuaspKj64QftLM/NJSzEuHF3336X61BzcARwH/Aho5+7HuPt33P3S4P4YoB1wPXAscHs91hVX4wZ2wB0+X7bloHkf522mU6tMhnfPqvPyh3XP4ohebXh62oqDzlM9+OFSCoudX515aJ2XLyIisdO/Y0suHt2DF3NXs2rLnnLz3lm4gTXb93LVMb3rtY7TB3dm655CFqzdedC8z5ZuZmj3LLKDjpTqoj7JwbeBv7r7/aXjG1Tk7vvc/W/A3wgNhpSUhnRrTdP0VKZXkhzkLt/CyF5t6j0o0XeP7MnyzXvKtW3YtGsf/5q+gvFDu9AzRo1qRESk/iZ+oy9m8M8Pyl+N9vS0FXRpnckJNVy6WJNRQRf/OSvK/y7t2V/E3NXbGdO7brUSpeqTHLQHFoRZdj6h3guTUnpqCiN7tmHa0s3lpudvK2DN9r0HPqT6OO3wTrRrnsFT01YcmPbwR8vYV1TCD8K8zEVERBJDl6ymXDCyO//OWc3a7aG+D5Zu3MVHizdx8Zge9R64qUtWU7q0ziRn+dZy03NXbKWoxBlTzx5z6xPdckJDIofjjKB80hrTuy0L1+1k6+6vLznMWR7K2Eb1rF+GBqG2Dd85ojvvLFjPwnU7yNuwk0c/WcY5Q7vQr0PtxyJvLB4860EePOvBeIch0uho36vZD44Pdb9/+5T5uDv/eH8JaSmhfhEiYWSvtuSs2EJoFIGQaUs3k5pi9f6jtT7NOCcBfzazF4B7gRnufqDnBzNLJzRU8vWERmr8WT3WFXelWdjny7dwatAwMHfFVpplpHJo55YRWcdlR/fixdzVXP7YDNq1yKB5Riq/PnNQRJbdUE0YOSHeIYg0Str3ata9bTN+cvIh/OGNhUx8Kpc3569n4nF96NAyMp3KHdGrDa9+sYbVWwvo3jbU5n/60i0M7tqa5k3qd5VGfWoO7iXUluCbwEfAHjNba2bLzWwtsAf4EDgfeCAon7SGdm9Nk7QUpi/9+vxOzvKtDO+RFbFxvTu0zOSxy49gR0EhX+bv4I7xh9O+Zd0blIiISHxdfWxvhnXP4s356zn98E784rSBEVv2yKB2IHdF6NRCwf5ivli9jTF96l+bXefUIhgN8cdm9iBwMTCK0EBHzYAdwBfADOB5d/+y3pHGWZO0VIZ1zyI3aPyxc28hC9ft4LoTat8tZXUO69KaJ68czdzV2zlrSOeILrshmpQ7CdBfMSKxpn0vPGmpKfztouG8NDOfid/oQ0oEe5sd2KkVLZqkkbNiC+cO78qc1dsoLPZ6N0aECAzZ7O7zgV/XO5IkcGjnVryQs4qSEmfu6u2UOIzokRXx9Yzs2ZaREWjH0BhMfG0ioAOUSKxp3wtf97bN+PFJkf1DEiA1xRjWPYtZK7cB8NWGUI+Jh3YOb8TG6kRnOL8Gqn/HFuzZX8ya7QUsWBe6tvSwLuEN5ywiIhJpg7q0YvGGXRQVl5C3fictmqTRKQID5dUrOTCzJmb2AzP7u5ndamaVpkZmdpKZvVvZvGTSv0Oo4WHehl0sWreDds0z1CZARETiZkDHluwvKmH55t3kbdxFvw4t6t3vDtTjtELQHfInwBCgNJKbzew37v7HCsU7EupKOan1Dy4pzNuwi4XrdjIwQlcpiIiI1EXp79CCtTtZvH4Xxx3SPiLLrU/NwfXAUOD3hBKEM4Fc4E4z+3v9Q0s8bZpnkN0ig0XrdvLV+p0M6Fj/8zoiIiJ11a9DC1JTjBnLt7Bh574Df8TWV30aJH6L0JUIvwmef2lmU4H7gGvNLN3dr653hAmmb/sWvLdoI3sLS1RzICIicdUkLZU+2c15fe46INQ2LhLqU3PQF3iv7AR3L3H3HwK/A640s0fqE1wi6t+xxYFhOAd2UnIgIiLxNaBTywO/S6Vt4+qrPjUHe4H0yma4+2/MrBi4xcxSgKRvjFiqdMOnWOQ+BKk7v9VrLiQiEad9L3Ec2rkVr81ZS2Z6Cl2zmkZkmfWpOVgCHFnVTHe/jdCwzpcG9xFlZsPMbJqZzTazHDMbHUw3M/urmeWZ2RwzGxHJ9Zaez+nVrjlNM1IjuWgREZFaG9Ax9Idq3/YtItbJUn2Sg7eAc8ysyj+fgwThNqBnPdZTlT8Ct7v7MOCW4DnA6UD/4DYB+EckV9ovOJ+j9gYiIpIISn+PItUYEep3WuEpQqcV+gMzqyrk7neY2WZC3StHkgOllwu0BtYEj8cDTwbdO08zsywz6+zuayOx0vYtmjC2bztOHtQxEouTeho5aSQAuRNy4xyJSOOifS9xdM1qypjebRk3sEPEllmfsRUWAzeFWfaBuq6nGtcDU83sT4RqQMYG07sCq8qUWx1Mi0hyYGY8c3WVZ1MkxmaurTIvFZEo0r6XOMyM5yceFdFl1ntshWgys7eBTpXM+hVwIvATd/+PmX0beAQ4qZbLn0Do1APALjNbFMbLsoFNtVlPIxK3bWO3RW4wkyjR96Zq2jZVS/htE8d9L+G3TRyFu22qPOVvodr35GNm24Esd3cL9RW53d1bBaNEvu/uzwblFgHHR+q0gpnluHukT5E0CNo2VdO2qZq2TdW0baqmbVO1SGybZB54aQ1fd8l8ArA4eDwF+F5w1cKRhJKGiCQGIiIijUFCn1aowdXAfWaWRqjPhdLTA68DZwB5wB7g8viEJyIikpySNjlw94+BkZVMd+DaKK56UhSXney0baqmbVM1bZuqadtUTdumavXeNknb5kBERESiI5nbHIiIiEgUKDmogZl9y8zmmVmJmVXZ+tPMlpvZ3NLunGMZY7zUYtucZmaLgi6tfxnLGOPFzNqa2Vtmtji4b1NFueLgOzPbzKbEOs5Yqul7YGZNzOz5YP50M+sVhzDjIoxtc5mZbSzzXbkqHnHGmpk9amYbzOzLKuZHtbv8RBbGtjnezLaX+c7cUpvlKzmo2ZfA+cCHYZQd5+7DGtHlNTVuGzNLBR4g1K31IOAiMxsUm/Di6pfAO+7eH3gneF6ZguA7M8zdz4ldeLEV5vfgSmCru/cD7gH+ENso46MW+8jzZb4rD8c0yPh5HDitmvlR7S4/wT1O9dsG4KMy35lajXGk5KAG7r7A3cPpHKnRCXPbjAby3H2pu+8HniPUxXVDNx54Inj8BHBu/EJJCOF8D8pusxeBE4M+TBq6xrqP1MjdPwS2VFPkQHf57j4NyDKzzrGJLr7C2Db1ouQgchx408xyg54XJaSq7qwbuo5l+tdYB1Q1GEdmMKroNDM7NzahxUU434MDZdy9CNgOtItJdPEV7j7yzaDq/EUz6x6b0BJeYz2+hOsoM/vCzP5nZofV5oVJeyljJFXXTbO7vxLmYo5x93wz6wC8ZWYLg8wuqUVo2zRINXTvfUDQi2dVlwX1DL43fYB3zWyuuy+JdKyS9F4FnnX3fWY2kVANywlxjkkS20xCx5ddZnYGMJnQ6ZewKDkA3L1WYzJUsYz84H6Dmb1MqKow6ZODCGybfKDsXzndgmlJr7ptY2brS0cDDao5N1SxjNLvzVIzex8YDjTE5CCc70FpmdVB52atgc2xCS+uatw27l52OzzM10PUN3YN9vhSX+6+o8zj183s72aW7e5hjUeh0woRYGbNzaxl6WPgFEKN9QRmAP3NrLeZZQAXEuriuqGbAlwaPL4UOKiWxczamFmT4HE2cDQwP2YRxlY434Oy2+wC4F1vHB2x1LhtKpxHPwdYEMP4Epm6y6+CmXUqbbNjZqMJ/d6Hn2y7u27V3IDzCJ3H2gesB6YG07sArweP+wBfBLd5hKrc4x57Imyb4PkZwFeE/iJuLNumHaGrFBYDbwNtg+mjgIeDx2OBucH3Zi5wZbzjjvI2Oeh7ANwBnBM8zgT+Tajr88+BPvGOOYG2zZ3BseUL4D1gYLxjjtF2eRZYCxQGx5orge8D3w/mG6ErPZYE+9CoeMecQNvmujLfmWnA2NosXz0kioiISDk6rSAiIiLlKDkQERGRcpQciIiISDlKDkRERKQcJQciIiJSjpIDERERKUfJgYiIiJSj5EBERETKUXIgIiIi5Sg5EJGYMLMOZrbJzPab2aAayt5nZm5m98cqPhH5mpIDEYmVewmNOfEXd69pgKkZwf1xUY1IRCqlsRVEJOrMbAyhwV+2Ar3dfXsN5ccCnwD7gWbuXhz9KEWklGoORCQWbgnu/15TYhDYGNxnEKptEJEYUnIgIlFlZj2B04OnD1WY18PMjjGziglA2WNTajTjE5GDKTkQkWg7AzBgnruvqDDvTuAjoHeF6V2C+yJgQ3TDE5GKlByISLSNDO5nVDLv2OB+UYXpw4P72WpvIBJ7Sg5EJNp6Bveryk40sxFAd6DA3XdWeM0Zwf3/ohybiFRCyYGIRFt6cF/xeHNNcF+uTYGZDQROAEqAJ6MbmohURsmBiERbaTuDE80sBcDMxgGXAy8DGWY2OpjeAniUUBuFR909Lw7xijR66udARKLKzE4A3gme5hI6vXAG8D5wM5ADrAc+AI4h1Bjxc+AEd98d63hFRDUHIhJl7v4u8D1gPnA4oQaKfwW+6e65wI2EOjsaD+wk1CfC8UoMROJHNQciIiJSjmoOREREpBwlByIiIlKOkgMREREpR8mBiIiIlKPkQERERMpRciAiIiLlKDkQERGRcpQciIiISDlKDkRERKQcJQciIiJSzv8HbSnBBwOkL70AAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "from scipy.fft._pocketfft import fft\n", + "# from scipy.fft._pocketfft import fft\n", "# from numpy.dual import fft\n", - "from numpy import sinc, log10\n", + "from numpy import sinc, log10, fft\n", "\n", "wc = pi/4\n", "M=20\n", From 1ca698e2c8bdd736e2d4ac6b527b1d1e9e98c50d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:40:02 +0800 Subject: [PATCH 0940/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index 6563d0b4..e39f8766 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -111,6 +111,58 @@ "name": "#%%\n" } } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from numpy import sinc, log10, fft\n", + "import matplotlib.pyplot as plt\n", + "\n", + "wc = pi/4\n", + "M = 30\n", + "N = 512 # DFT size\n", + "n = arange(-M,M)\n", + "win = signal.windows.hamming(len(n))\n", + "h = wc/pi * sinc(wc*(n)/pi)*win # see definition of np.sinc()\n", + "\n", + "w,Hh = signal.freqz(h,1,whole=True, worN=N) # get entire frequency domain\n", + "wx = fft.fftfreq(len(w)) # shift to center for plotting\n", + "\n", + "fig,axs = plt.subplots(3,1)\n", + "fig.set_size_inches((8,8))\n", + "plt.subplots_adjust(hspace=0.3)\n", + "\n", + "ax=axs[0]\n", + "ax.stem(n+M,h,basefmt='b-')\n", + "ax.set_xlabel(\"$n$\",fontsize=24)\n", + "ax.set_ylabel(\"$h_n$\",fontsize=24)\n", + "ax=axs[1]\n", + "ax.plot(w-pi,abs(fft.fftshift(Hh)))\n", + "ax.axis(xmax=pi/2,xmin=-pi/2)\n", + "ax.vlines([-wc,wc],0,1.2,color='g',lw=2., linestyle='--',)\n", + "\n", + "ax.hlines(1,-pi,pi,color='g',lw=2., linestyle='--',)\n", + "ax.set_xlabel(r\"$\\omega$\",fontsize=22)\n", + "ax.set_ylabel(r\"$|H(\\omega)| $\",fontsize=22)\n", + "\n", + "ax=axs[2]\n", + "ax.plot(w-pi,20*log10(abs(fft.fftshift(Hh))))\n", + "ax.axis(ymin=-80,xmax=pi/2,xmin=-pi/2)\n", + "ax.vlines([-wc,wc],10,-80,color='g', lw=2., linestyle='--',)\n", + "ax.hlines(0,-pi,pi,color='g', lw=2., linestyle='--',)\n", + "ax.set_xlabel(r\"$\\omega$\",fontsize=22)\n", + "ax.set_ylabel(r\"$20\\log_{10}|H(\\omega)| $\",fontsize=18)\n", + "\n", + "plt.show()\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { From 37f22aba820b1ca6dee2521260b5403ead288a93 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 19:41:15 +0800 Subject: [PATCH 0941/2002] Committed 2022/07/03 --- .../Listing 5-6.ipynb | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb index e39f8766..2d018ead 100644 --- a/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb +++ b/Digital Signal Processing/Python for Signal Processing/Chapter5 - Finite Impulse Response Filters/Listing 5-6.ipynb @@ -114,8 +114,19 @@ }, { "cell_type": "code", - "execution_count": null, - "outputs": [], + "execution_count": 8, + "outputs": [ + { + "data": { + "text/plain": "
      ", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "from numpy import sinc, log10, fft\n", "import matplotlib.pyplot as plt\n", @@ -155,7 +166,7 @@ "ax.set_xlabel(r\"$\\omega$\",fontsize=22)\n", "ax.set_ylabel(r\"$20\\log_{10}|H(\\omega)| $\",fontsize=18)\n", "\n", - "plt.show()\n" + "plt.show()" ], "metadata": { "collapsed": false, @@ -163,6 +174,18 @@ "name": "#%%\n" } } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { From 03f0bdb9d9702177ce37527c7349d203aed6de60 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 22:05:12 +0800 Subject: [PATCH 0942/2002] Committed 2022/07/03 --- ...O-Y comparison of average temperatures of Kaohsiung in Q1.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 The attainments and realizations of my dreams/Climate change/Y-O-Y comparison of average temperatures of Kaohsiung in Q1.py diff --git a/The attainments and realizations of my dreams/Climate change/Y-O-Y comparison of average temperatures of Kaohsiung in Q1.py b/The attainments and realizations of my dreams/Climate change/Y-O-Y comparison of average temperatures of Kaohsiung in Q1.py new file mode 100644 index 00000000..a57be88f --- /dev/null +++ b/The attainments and realizations of my dreams/Climate change/Y-O-Y comparison of average temperatures of Kaohsiung in Q1.py @@ -0,0 +1,2 @@ +# Year-over-year comparison of average temperature of Kaohsiung from January to March + From 0b4b3275f48085b12820c0fecbb14600763e7996 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Jul 2022 22:26:02 +0800 Subject: [PATCH 0943/2002] Committed 2022/07/03 --- ...parison of average temperatures of Kaohsiung in Q1.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/The attainments and realizations of my dreams/Climate change/Y-O-Y comparison of average temperatures of Kaohsiung in Q1.py b/The attainments and realizations of my dreams/Climate change/Y-O-Y comparison of average temperatures of Kaohsiung in Q1.py index a57be88f..bdb78abf 100644 --- a/The attainments and realizations of my dreams/Climate change/Y-O-Y comparison of average temperatures of Kaohsiung in Q1.py +++ b/The attainments and realizations of my dreams/Climate change/Y-O-Y comparison of average temperatures of Kaohsiung in Q1.py @@ -1,2 +1,11 @@ # Year-over-year comparison of average temperature of Kaohsiung from January to March +# In comparison with comparing average temperature on month-over-month basis, +# lengthen the counting period has the benefit of attenuating the impact of short-lived noise. + +# For example, although the average number of typhoons that intruded Taiwan in summer over past few +# years is not volatile, + + +# In other words, there might be a heavy concentration of typhoon moving in August than +# July in this year, compared to last year, making this year's August cooler than that of last year. From d634b8bbd45dd5f9266ed336948a064f11054c65 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 4 Jul 2022 23:32:29 +0800 Subject: [PATCH 0944/2002] Committed 2022/07/03 --- .../NUK/DSP_final_No3.ipynb | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Digital Signal Processing/NUK/DSP_final_No3.ipynb diff --git a/Digital Signal Processing/NUK/DSP_final_No3.ipynb b/Digital Signal Processing/NUK/DSP_final_No3.ipynb new file mode 100644 index 00000000..48619d49 --- /dev/null +++ b/Digital Signal Processing/NUK/DSP_final_No3.ipynb @@ -0,0 +1,39 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 67df0d0812999aaf42f7a5e2d14deb2648cb6d4a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 10 Jul 2022 13:20:27 +0800 Subject: [PATCH 0945/2002] Committed 2022/07/10 --- .../Total_difference_2021.jpg | Bin 45896 -> 28210 bytes .../Total_difference_2021_.jpg | Bin 46018 -> 28274 bytes .../Total_difference_2021__.jpg | Bin 49595 -> 30412 bytes ...lloting higher education resources 2022.py | 88 ++++++++++++++++++ 4 files changed, 88 insertions(+) diff --git a/The attainments and realizations of my dreams/Total_difference_2021.jpg b/The attainments and realizations of my dreams/Total_difference_2021.jpg index 3588f57d214e9dc2ee46145857c94814abe9db8e..2170fc438eb56e912712c14ecc5883f6675d7e3c 100644 GIT binary patch literal 28210 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 literal 45896 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 WlI1djvtFX@xg}}II8?9w|C<2Cl=;a3 diff --git a/The attainments and realizations of my dreams/Total_difference_2021_.jpg b/The attainments and realizations of my dreams/Total_difference_2021_.jpg index 586533a1c6bc946474300518c0d388a16706f4cf..966d311aace5145501f6760644e7f665ee7ad2bd 100644 GIT binary patch literal 28274 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 M{qN;)q5qiw4>?tj@c;k- literal 49595 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 diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py index e69de29b..4b17af65 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py @@ -0,0 +1,88 @@ +import numpy as np +import pandas as pd +from sklearn.preprocessing import LabelEncoder +import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + + +# Convert wiki-table in the article 擃蝑脫楛閮俎4] to csv.[2][3] + +public_research_centric_university = pd.DataFrame(data=[ + [1, "蝡箇憭批飛", "National Taiwan University", 232673, "North", ], + [2, "蝡憭批飛", "National Cheng Kung University", 141284, "South", ], + [3, "蝡皜臬之摮", "National Tsing Hua University", 121202, "North", "Derived from Beijing, China's Tsing Hua University"], + [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 104500, "North", "Derived from Shanghai, China's ChiaoTung University"], + [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43582, "North", ], + [6, "蝡銝剖亢憭批飛", "National Central University", 41463, "North", ], + [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 34407, "North", ], + [8, "蝡踵祥憭批飛", "National Chengchi University", 32164, "North", "Literally, 'National Politics University'"], + [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 31954, "South", ], + [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 22734, "North", ], + [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 15521, "South", "Literally, National Chiang Chung-cheng University"], + [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 14393, "North", ], + [13, "蝡箏憭批飛", "National Taipei University", 8778, "North", ], + [14, "蝡典憭批飛", "National Chi Nan University", 7859, "North", ], + [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 7615, "North", ], + [16, "蝡梯臬之摮", "National Dong Hwa University", 6930, "Hualien County", ], + [17, "蝡蝢拙之摮", "National Chiayi University", 6093, "South", ], + [18, "蝡摰剖之摮", "National Ilan University", 6604, "North", ], + [19, "蝡撅勗之摮", "National Pingtung University", 6555, "South", ], + [20, "蝡箸勗之摮", "National Taitung University", 6331, "Taitung County", ], + [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5955, "North", ], + [22, "蝡箏脣之摮", "National Taipei University of Education", 5186, "North", ], + [23, "蝡擃憭批飛", "National University of Kaohsiung", 5450, "South", ], + [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 5449, "North", ], + [25, "蝡箔葉脣之摮", "National Taichung University of Education", 5427, "North", ], + [26, "蝡箏憭批飛", "National University of Tainan", 5069, "South", ], + [27, "箏撣蝡憭批飛", "University of Taipei", 5031, "North", ], + [28, "蝡擃脣之摮", "National Taiwan Sport University", 4749, "North", ], + [29, "蝡臬憭批飛", "National United University", 4652, "North", ], + [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 4511, "South", ], + [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3319, "North", ], + [32, "蝡憭批飛", "National Quemoy University", 3240, ], + # [33, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3226, "North", ], + [33, "蝡箏銵憭批飛", "Tainan National University of the Arts", 2034, "South", ], +]) + +print(public_research_centric_university) + +header = ['Number', 'Chinese name', 'English name', 'Budget_received', 'Location', 'Note'] + +# Adding a header to National universities of R&D +public_research_centric_university.columns = header +print(public_research_centric_university) + +# Filter the universities in the north. +condition = public_research_centric_university['Location'] == "North" +north_public_research = public_research_centric_university[condition] +print(north_public_research) + +# Sum of the budget in the north. +total_north_public_research = north_public_research['Budget_received'].sum() +print(total_north_public_research) + +# Filter the universities in the south. +condition = public_research_centric_university['Location'] == "South" +south_public_research = public_research_centric_university[condition] +print(south_public_research) + +# Sum of the budget inn the south. +total_south_public_research = south_public_research['Budget_received'].sum() +print(total_south_public_research) + +# The histogram of the data +plt.bar(['Northern Taiwan', 'Southern Taiwan'], [total_north_public_research, total_south_public_research]) + +plt.xlabel('Location (divided by Zhuoshui River)\n\n' + 'Dataset: https://sprout.moe.edu.tw/SproutWeb/Project/DocDownload', + fontproperties="Arial", fontsize=9) + +plt.ylabel('Unit: 10 thousands of New Taiwan Dollar') +plt.title('Government budget support for public research universities (蝡憭批飛)\n' + 'in North vs South in 2021', fontproperties="MS Gothic") + +# Tweak spacing to prevent clipping of ylabel +plt.tight_layout() + +plt.show() \ No newline at end of file From 49e36b0f96a4cb6451b90ffd8ccee60f77ba9cae Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:26:33 +0800 Subject: [PATCH 0946/2002] Committed 2022/07/11 --- .../year2022.csv | 436 ++++++++++++++++++ 1 file changed, 436 insertions(+) create mode 100644 The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/year2022.csv diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/year2022.csv b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/year2022.csv new file mode 100644 index 00000000..112fdaad --- /dev/null +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/year2022.csv @@ -0,0 +1,436 @@ +,高等教育深耕計畫核定經費 (一般大學),,單位:元,, +類別,學校代碼,學校名稱,核定經費,, +一般大學,1,國立政治大學,"315,791,943",, +一般大學,2,國立清華大學,"1,203,942,483",, +一般大學,3,國立臺灣大學,"2,325,871,292",, +一般大學,4,國立臺灣師範大學,"220,200,224",, +一般大學,5,國立成功大學,"1,411,784,677",, +一般大學,6,國立中興大學,"437,457,125",, +一般大學,7,國立陽明交通大學,"1,390,785,357",, +一般大學,8,國立中央大學,"422,280,540",, +一般大學,9,國立中山大學,"320,686,779",, +一般大學,12,國立臺灣海洋大學,"142,330,024",, +一般大學,13,國立中正大學,"153,617,924",, +一般大學,14,國立高雄師範大學,"43,477,638",, +一般大學,15,國立彰化師範大學,"75,808,953",, +一般大學,17,國立臺北大學,"87,719,266",, +一般大學,18,國立嘉義大學,"59,276,436",, +一般大學,19,國立高雄大學,"55,029,953",, +一般大學,20,國立東華大學,"69,656,595",, +一般大學,21,國立暨南國際大學,"80,303,430",, +一般大學,28,國立臺北藝術大學,"54,781,643",, +一般大學,29,國立臺灣藝術大學,"59,741,341",, +一般大學,30,國立臺東大學,"61,781,100",, +一般大學,31,國立宜蘭大學,"67,994,462",, +一般大學,32,國立聯合大學,"46,768,772",, +一般大學,35,國立臺南藝術大學,"19,973,297",, +一般大學,36,國立臺南大學,"52,039,141",, +一般大學,37,國立臺北教育大學,"52,345,081",, +一般大學,39,國立臺中教育大學,"55,497,697",, +一般大學,44,國立體育大學,"47,320,991",, +一般大學,48,國立金門大學,"33,199,440",, +一般大學,49,國立臺灣體育運動大學,"32,297,953",, +一般大學,52,國立屏東大學,"66,198,967",, +一般大學,1001,東海大學,"115,049,576",, +一般大學,1002,輔仁大學,"95,699,326",, +一般大學,1003,東吳大學,"91,946,716",, +一般大學,1004,中原大學,"145,368,491",, +一般大學,1005,淡江大學,"92,789,805",, +一般大學,1006,中國文化大學,"68,356,667",, +一般大學,1007,逢甲大學,"142,977,350",, +一般大學,1008,靜宜大學,"94,215,888",, +一般大學,1009,長庚大學,"158,314,094",, +一般大學,1010,元智大學,"105,816,364",, +一般大學,1011,中華大學,"48,565,971",, +一般大學,1012,大葉大學,"54,713,306",, +一般大學,1013,華梵大學,"28,828,807",, +一般大學,1014,義守大學,"94,154,447",, +一般大學,1015,世新大學,"63,264,924",, +一般大學,1016,銘傳大學,"73,644,173",, +一般大學,1017,實踐大學,"64,169,045",, +一般大學,1019,高雄醫學大學,"144,516,638",, +一般大學,1020,南華大學,"58,187,353",, +一般大學,1021,真理大學,"16,040,267",, +一般大學,1022,大同大學,"44,777,226",, +一般大學,1027,慈濟大學,"58,554,909",, +一般大學,1028,臺北醫學大學,"269,976,144",, +一般大學,1029,中山醫學大學,"60,501,274",, +一般大學,1033,長榮大學,"59,979,574",, +一般大學,1035,中國醫藥大學,"196,225,677",, +一般大學,1039,玄奘大學,"25,511,975",, +一般大學,1048,亞洲大學,"64,144,533",, +一般大學,1049,開南大學,"16,598,052",, +一般大學,1050,佛光大學,"44,011,810",, +一般大學,1058,明道大學,"2,716,000",, +一般大學,1067,台灣首府大學,"7,272,943",, +一般大學,1079,康寧大學,"2,175,100",, +一般大學,1125,中信金融管理學院,"20,282,608",, +一般大學,1176,稻江科技暨管理學院,0,, +一般大學,1195,馬偕醫學院,"37,845,308",, +一般大學,1196,法鼓文理學院,"1,482,385",, +一般大學,1R04,一貫道天皇學院,"2,500,000",, +一般大學,3002,臺北市立大學,"52,478,041",, +一般大學,"【備註】 + 1. 學校排序依教育部統計處學校代碼排序呈現。 + 2. 以上含深耕計畫第一部分(主冊、附冊USR、附錄1-就學協助、附錄2-原住民輔導)及 第二部分(全校型、特色領域研究中心之經費。",,,, +,,,,, +,高等教育深耕計畫核定經費 (技專校院),,單位:元,, +類別,學校代碼,學校名稱,核定經費,, +技專校院,22,國立臺灣科技大學,"314,294,000",, +技專校院,23,國立雲林科技大學,"214,976,000",, +技專校院,24,國立屏東科技大學,"160,104,000",, +技專校院,25,國立臺北科技大學,"246,335,000",, +技專校院,33,國立虎尾科技大學,"237,437,000",, +技專校院,42,國立澎湖科技大學,"27,559,992",, +技專校院,43,國立勤益科技大學,"137,820,000",, +技專校院,46,國立臺北護理健康大學,"85,177,000",, +技專校院,47,國立高雄餐旅大學,"81,184,808",, +技專校院,50,國立臺中科技大學,"39,478,000",, +技專校院,51,國立臺北商業大學,"46,907,000",, +技專校院,53,國立高雄科技大學,"397,596,000",, +技專校院,144,國立臺灣戲曲學院,"30,320,000",, +技專校院,221,國立臺南護理專科學校,"22,333,000",, +技專校院,222,國立臺東專科學校,"35,930,648",, +技專校院,1018,朝陽科技大學,"76,507,000",, +技專校院,1023,南臺科技大學,"158,222,000",, +技專校院,1024,崑山科技大學,"211,909,000",, +技專校院,1025,嘉南藥理大學,"90,378,000",, +技專校院,1026,樹德科技大學,"80,828,000",, +技專校院,1030,龍華科技大學,"131,530,000",, +技專校院,1031,輔英科技大學,"39,119,109",, +技專校院,1032,明新科技大學,"53,907,000",, +技專校院,1034,弘光科技大學,"119,671,000",, +技專校院,1036,健行科技大學,"58,087,000",, +技專校院,1037,正修科技大學,"195,553,000",, +技專校院,1038,萬能科技大學,"26,787,256",, +技專校院,1040,建國科技大學,"23,684,000",, +技專校院,1041,明志科技大學,"101,166,000",, +技專校院,1042,高苑科技大學,"6,842,553",, +技專校院,1043,大仁科技大學,"45,767,000",, +技專校院,1045,嶺東科技大學,"55,559,996",, +技專校院,1046,中國科技大學,"73,550,000",, +技專校院,1047,中臺科技大學,"52,594,000",, +技專校院,1051,台南應用科技大學,"41,928,000",, +技專校院,1052,遠東科技大學,"70,025,000",, +技專校院,1053,元培醫事科技大學,"31,912,000",, +技專校院,1054,景文科技大學,"51,488,000",, +技專校院,1055,中華醫事科技大學,"53,508,000",, +技專校院,1056,東南科技大學,"23,226,000",, +技專校院,1057,德明財經科技大學,"41,750,000",, +技專校院,1060,南開科技大學,"34,673,000",, +技專校院,1061,中華科技大學,"28,725,000",, +技專校院,1062,僑光科技大學,"26,776,000",, +技專校院,1063,育達科技大學,"11,653,000",, +技專校院,1064,美和科技大學,"39,765,000",, +技專校院,1065,吳鳳科技大學,"27,853,000",, +技專校院,1066,環球科技大學,"7,670,000",, +技專校院,1068,中州科技大學,"5,144,000",, +技專校院,1069,修平科技大學,"51,579,000",, +技專校院,1070,長庚科技大學,"59,378,000",, +技專校院,1071,臺北城市科技大學,"27,922,000",, +技專校院,1072,敏實科技大學,"6,716,600",, +技專校院,1073,醒吾科技大學,"68,619,000",, +技專校院,1075,文藻外語大學,"65,159,000",, +技專校院,1076,華夏科技大學,"30,311,000",, +技專校院,1077,慈濟科技大學,"48,609,750",, +技專校院,1078,致理科技大學,"79,346,000",, +技專校院,1080,宏國德霖科技大學,"23,148,000",, +技專校院,1082,崇右影藝科技大學,"13,380,000",, +技專校院,1083,台北海洋科技大學,"24,625,000",, +技專校院,1148,大漢技術學院,"9,936,550",, +技專校院,1166,亞東技術學院,"28,000,000",, +技專校院,1168,南亞技術學院,"13,892,000",, +技專校院,1182,蘭陽技術學院,"716,154",, +技專校院,1183,黎明技術學院,"19,600,000",, +技專校院,1185,經國管理暨健康學院,"10,920,000",, +技專校院,1188,大同技術學院,"2,527,000",, +技專校院,1282,馬偕醫護管理專科學校,"25,795,000",, +技專校院,1283,仁德醫護管理專科學校,"26,572,000",, +技專校院,1284,樹人醫護管理專科學校,"32,620,000",, +技專校院,1285,慈惠醫護管理專科學校,"25,062,000",, +技專校院,1286,耕莘健康管理專科學校,"34,429,000",, +技專校院,1287,敏惠醫護管理專科學校,"15,804,723",, +技專校院,1289,育英醫護管理專科學校,"10,477,096",, +技專校院,1290,崇仁醫護管理專科學校,"17,042,000",, +技專校院,1291,聖母醫護管理專科學校,"11,860,000",, +技專校院,1292,新生醫護管理專科學校,"21,214,000",, +,,,,, +,"備註: +1. 學校排序係依教育部統計處學校代碼呈現。 +2. 不含聖約翰科技大學、東方設計大學(2校預定於7-8月核定);臺灣觀光學院、和春技術學院無申請補助。 +3. 以上經費含第一部分(主冊、附冊USR、附錄一就學協助、附錄二原住民輔導)及第二部分研究中心經費。",,,, +,,,,, +,大學社會責任補助計畫(USR)-一般大學,,,, +類別,序號,分區,學校,計畫類型,計畫名稱 +一般大學,1,北北基,國立臺灣大學,大學特色類萌芽型,大學PLUStotheGalaxy:邁向全球在地學習基地的共學生態系 +一般大學,,,,大學特色類萌芽型,永續【雲•林】與食農共榮-社會創新實踐計畫 +一般大學,,,,大學特色類萌芽型,全球衛生的在地參與 +一般大學,2,北北基,國立陽明交通大學,大學特色類萌芽型,部落之星:智慧偏鄉健康培力計畫Tribalstarincubation:IntelligentHEAlthforRemoTeareas(iHEART) +一般大學,,,,大學特色類萌芽型,社區高齡活化大行動-強化體能、智能、技能之社會實踐 +一般大學,3,北北基,國立臺灣師範大學,大學特色類萌芽型,深耕偏鄉教育:加廣、加深、無縫 +一般大學,,,,大學特色類萌芽型,高齡者長健全方位系統升級計畫—營造永續高齡友善社區 +一般大學,4,北北基,臺北市立大學,大學特色類萌芽型,推動活躍老化運動學院•點亮都會健康樂齡活力 +一般大學,,,,大學特色類萌芽型,Vision2025-TAIPEIWAY社區共生網路 +一般大學,5,北北基,國立政治大學,大學特色類深耕型,「興隆安康.共好文山」大學與社區共善計畫 +一般大學,,,,大學特色類萌芽型,偏鄉K-12人文藝術與科技素養提升計畫 +一般大學,6,北北基,臺北醫學大學,大學特色類萌芽型,都會長照青銀共榮共享:建構高齡健康友善的101國際宜居城 +一般大學,,,,大學特色類萌芽型,輔助科技點亮身障族群生活 +一般大學,,,,大學特色類萌芽型,以食為TEN:從山上到平地(Territory),從源頭到餐桌(Enterprise),從學童到老人(Net) +一般大學,,,,大學特色類萌芽型,智齡質感生活聚落示範計畫 +一般大學,7,北北基,淡江大學,大學特色類萌芽型,「農」情「食課」-無毒、有機印象淡水 +一般大學,,,,大學特色類萌芽型,淡蘭海陸輕旅遊、智慧互動趴趴走 +一般大學,,,,國際連結類萌芽型,淡水好生活—學習型城鄉建構計畫 +一般大學,8,北北基,國立臺灣海洋大學,大學特色類萌芽型,打造國際旅遊島:和平島及其周邊之地域創生與永續發展 +一般大學,,,,大學特色類萌芽型,逗陣來貢寮-打造共生共存共享的山海美境 +一般大學,,,,大學特色類萌芽型,智慧樂活水產村 +一般大學,,,,國際連結類萌芽型,三漁興旺-國際藍色經濟示範區 +一般大學,9,北北基,國立臺北大學,大學特色類萌芽型,臺北大學城社會實踐萌芽計畫:邁向共學、共融與公共化 +一般大學,,,,大學特色類萌芽型,環抱海山.深耕三峽:北大文化城的創生與活化 +一般大學,10,北北基,國立臺北藝術大學,大學特色類萌芽型,Hi-FivePlus:從北投平埔族群到屏東原住民的國際藝術對話 +一般大學,11,北北基,大同大學,大學特色類萌芽型,差異群體友善環境之建構與精進—以啟明學校之需求為關懷核心 +一般大學,12,北北基,中國文化大學,大學特色類萌芽型,共創光明頂:陽明山綠能創生與社區轉型行動計畫 +一般大學,13,北北基,國立臺灣藝術大學,大學特色類萌芽型,以大觀創藝聚落開展社區美學實踐計畫 +一般大學,,,,大學特色類萌芽型,社會企業的藝術設計應援團 +一般大學,,,,大學特色類萌芽型,文化河流文資串流-淡水河區域歷史紋理與文化資產保存計畫 +一般大學,14,北北基,東吳大學,大學特色類萌芽型,老士林新共生-跨世代社區慢老計畫 +一般大學,,,,大學特色類萌芽型,前世與今生—再現士林昔日百年風華 +一般大學,15,桃竹苗宜花,國立聯合大學,大學特色類萌芽型,石椄黥ヵS色生活共享模式建構計畫 +一般大學,16,桃竹苗宜花,長庚大學,大學特色類萌芽型,社區兒少創新實踐計畫--早期療育與兒少健康促進 +一般大學,,,,大學特色類萌芽型,偏鄉與人口老化社區健康照護體系建構 +一般大學,17,桃竹苗宜花,國立清華大學,大學特色類萌芽型,新竹區域接地支持實驗室 +一般大學,,,,大學特色類萌芽型,〝S+T+ARTS〞跨學科教育與在地自然生態文創活氧計畫 +一般大學,18,桃竹苗宜花,中華大學,大學特色類萌芽型,驛動新埔–啟動霄裡溪沿線聚落的三生創新 +一般大學,19,桃竹苗宜花,元智大學,大學特色類萌芽型,艾妲資訊培力 +一般大學,,,,大學特色類萌芽型,桃園文化廊道-導覽?記錄?共生 +一般大學,,,,大學特色類萌芽型,寰宇文化領航 +一般大學,20,桃竹苗宜花,國立中央大學,大學特色類萌芽型,從閱讀泰雅到興趣驅動部落學習 +一般大學,,,,大學特色類萌芽型,永續「復興」-打造智慧韌性部落 +一般大學,,,,大學特色類萌芽型,楊梅社會影響力工程再造計畫 +一般大學,,,,大學特色類萌芽型,藝文浸潤永續社區—中壢平鎮在地文化的紮根與共榮 +一般大學,,,,國際連結類深耕型,桃海三生-型塑桃園海岸環境與人文發展永續共生 +一般大學,21,桃竹苗宜花,中原大學,大學特色類深耕型,大梨救小校農創社企新生命-卓蘭「雙連梨」農產興業計畫(二) +一般大學,,,,大學特色類萌芽型,團結經濟、文化夥伴-桃園大海社區文化創生計畫II-台日軍事文化創生連結 +一般大學,,,,國際連結類萌芽型,從霄裡鏈接桃園兩圳文化綠廊之永續經營計畫 +一般大學,22,桃竹苗宜花,國立宜蘭大學,大學特色類萌芽型,實踐里山精神?建構永續農村 +一般大學,,,,大學特色類萌芽型,Tayal(大同、南澳)原鄉部落產業亮點計畫 +一般大學,23,桃竹苗宜花,國立東華大學,大學特色類深耕型,比鄰共好─在地韌性之永續培力行動計畫 +一般大學,,,,大學特色類萌芽型,科技翻轉、永續培力:洄瀾共好在地創新計畫 +一般大學,24,桃竹苗宜花,國立體育大學,大學特色類萌芽型,健身指導讓卓蘭地區健康樂齡,運動科學為桃園地區競技育才 +一般大學,25,桃竹苗宜花,慈濟大學,大學特色類萌芽型,『生活生產觀光合一』光復鄉地方創生培力計畫 +一般大學,26,中彰投,大葉大學,大學特色類萌芽型,實踐里山精神-八卦台地聚落產業共創共學計畫 +一般大學,,,,大學特色類萌芽型,「食尚管理、農法自然」(第二期)-台灣茶(TWT)產業鑫人才培育2.0計畫 +一般大學,27,中彰投,中山醫學大學,大學特色類萌芽型,宜居石岡,永續健康 +一般大學,28,中彰投,中國醫藥大學,大學特色類萌芽型,預防與照護雙軌續航:以人為本的智慧長照x具溫度的科技中醫 +一般大學,29,中彰投,亞洲大學,大學特色類萌芽型,打造高齡失智友善城鎮:失智識能x瑞智升級x智能輔助 +一般大學,30,中彰投,東海大學,大學特色類深耕型,社區高齡服務支持系統的實踐:大學社區共作與國際連結 +一般大學,,,,大學特色類萌芽型,大肚山地方教育創生 +一般大學,31,中彰投,國立中興大學,大學特色類深耕型,浪愛齊步走:流浪動物減量與福祉實踐 +一般大學,,,,大學特色類萌芽型,清流部落賽德克族風華再現計畫 +一般大學,32,中彰投,靜宜大學,大學特色類深耕型,建構幸福銀髮生態圈 +一般大學,33,中彰投,逢甲大學,大學特色類萌芽型,大學伴•偏鄉善:打造銀享智融的移動服務影響圈 +一般大學,,,,大學特色類萌芽型,綠色諧能?循環永續之國際共好計畫 +一般大學,,,,大學特色類萌芽型,部落創生的參與者共保系統計畫 +一般大學,,,,大學特色類萌芽型,臺中市文化城中城地方創生計畫 +一般大學,34,中彰投,國立彰化師範大學,大學特色類萌芽型,深耕芳苑攜手大城:彰化雙城之產業與環境永續計畫 +一般大學,,,,大學特色類萌芽型,白沙×共好教育:十二年國教深耕偏鄉教育計畫 +一般大學,,,,大學特色類萌芽型,社頭織襪-創新、創業、創生 +一般大學,35,中彰投,國立暨南國際大學,大學特色類深耕型,永續環境推動與人才培育計畫:深耕水沙連x開拓東南亞x邁向SDGs +一般大學,,,,大學特色類萌芽型,翻轉偏鄉教育的方法—建構鄉村教育協力隊網絡平台與行動策略 +一般大學,,,,國際連結類萌芽型,地方產業創生與永續發展--南投縣鄉村旅遊深耕計畫 +一般大學,36,中彰投,國立臺中教育大學,大學特色類萌芽型,新生活實驗室.舊城區永續-社企實踐創新育成國際平台計畫 +一般大學,,,,大學特色類萌芽型,〈世代攜手•城市共榮──中教「大學城」之大學社會責任實踐計畫〉 +一般大學,37,雲嘉南,國立中正大學,大學特色類萌芽型,重構大學路:認識、認同與共同行動 +一般大學,,,,大學特色類萌芽型,植種•結晶•昇華—雲嘉地區中小學科學教育揚升計畫 +一般大學,,,,國際連結類萌芽型,竹光發熱綠金計畫-臺灣竹業展風華 +一般大學,38,雲嘉南,國立成功大學,大學特色類萌芽型,農牧共好與農綠共生:以科技民主為行動核心的技術與價值創新 +一般大學,,,,大學特色類萌芽型,惡地協作:淺山地區之區域創生與跨域實踐 +一般大學,,,,大學特色類萌芽型,以微生物科技導入台南市農業區的智慧新農業 +一般大學,,,,國際連結類深耕型,相伴2026:齡感生活微社群行動網 +一般大學,39,雲嘉南,國立臺南大學,大學特色類萌芽型,為偏鄉而教─打造七股偏鄉教育補給站 +一般大學,40,雲嘉南,國立臺南藝術大學,大學特色類萌芽型,臺南山區地方弱勢產業振興計畫—行銷、文創、有機 +一般大學,41,雲嘉南,長榮大學,大學特色類萌芽型,相約檨仔腳-走向整全的社區經濟與照顧之路 +一般大學,,,,大學特色類萌芽型,惡地護老在龍崎—青銀共好AgeLong +一般大學,,,,大學特色類萌芽型,打造台南「社創矽谷」-佈建新化歷史街區社會創新與經濟永續 +一般大學,,,,國際連結類萌芽型,綠色社區根與芽行動計畫-從在地到國際 +一般大學,42,雲嘉南,南華大學,國際連結類萌芽型,以慢城意涵推動宜居城鎮生活 +一般大學,43,高屏澎東,高雄醫學大學,大學特色類深耕型,那瑪夏地區及高雄原鄉永續發展計畫 +一般大學,,,,大學特色類萌芽型,樂活高雄˙健康城市-小港區環境教育與健康促進永續發展計畫 +一般大學,44,高屏澎東,國立中山大學,大學特色類萌芽型,產學合創?在地共融-建構大學合作式培力推廣服務計畫 +一般大學,,,,大學特色類深耕型,城市是一座共事館-鑲嵌於社會紋理的社區實踐TheCityasaCommuseum-SociallyEmbeddedCommunityEngagement +一般大學,,,,國際連結類萌芽型,教育知識在地化與實踐場域全球化:由高雄舊港新灣出發 +一般大學,45,高屏澎東,國立屏東大學,大學特色類萌芽型,搖滾社會力:在地關懷為導向的社會企業與公益實踐培力計畫 +一般大學,,,,大學特色類萌芽型,讓生命不同凡「想」-屏東身心障礙成人服務友善環境的建置 +一般大學,,,,大學特色類萌芽型,朱雀先驅:屏東偏鄉三師共學模式 +一般大學,,,,大學特色類萌芽型,多元文化產業推進器-屏東地方創生實踐計畫 +一般大學,46,高屏澎東,國立高雄師範大學,大學特色類萌芽型,小民再造市集再生 +一般大學,47,高屏澎東,國立臺東大學,大學特色類萌芽型,臺東Y計畫-共創部落好旅遊 +一般大學,,,,大學特色類萌芽型,都蘭之蘭調創生 +一般大學,48,高屏澎東,義守大學,大學特色類萌芽型,義守原鄉攜手共進∼幸福、健康、宜居新莊園 +一般大學,,,,大學特色類萌芽型,以智慧生技導入健康創客小將養成計畫 +,,,,, +,大學社會責任補助計畫(USR)-技專校院,,,, +類別,序號,分區,學校,計畫類型,計畫名稱 +技專校院,1,北北基,明志科技大學,大學特色類萌芽型,北臺首學帶狀文物館行動計畫 +技專校院,,,,大學特色類萌芽型,新北產業鏈結經濟永續發展計畫 +技專校院,2,北北基,東南科技大學,大學特色類萌芽型,淡蘭古道南路綠色旅遊培力起飛計畫 +技專校院,3,北北基,致理科技大學,大學特色類萌芽型,女王的呼召—野柳國際旅遊實驗基地 +技專校院,,,,大學特色類萌芽型,駐點滬尾共創綠色旅遊新價值 +技專校院,,,,大學特色類萌芽型,攜手共構活躍老化與智慧樂活永續社區 +技專校院,,,,大學特色類萌芽型,全通路在地關懷銀髮就醫陪伴媒合服務心價值推動計畫 +技專校院,4,北北基,國立臺北科技大學,大學特色類萌芽型,木創文化攪動深根計畫 +技專校院,,,,國際連結類萌芽型,原住民部落安居構築與綠色樂業推動計畫 +技專校院,5,北北基,國立臺北護理健康大學,大學特色類萌芽型,鏈結區域資源升級長照專業-「北護護你健康、青銀共好標竿計畫」 +技專校院,,,,大學特色類萌芽型,攜手共創萬華失智友善社區 +技專校院,6,北北基,國立臺灣科技大學,大學特色類萌芽型,社區更新活化與韌性提升-以公館城南聚落為例 +技專校院,,,,大學特色類萌芽型,i設計愛學習-營造老少共學的多媒體互動智慧生活環境 +技專校院,,,,大學特色類萌芽型,共好2.0:走在我的身邊,成為我的夥伴 +技專校院,,,,大學特色類深耕型,I-VillagesPlus城鄉牽手深化計畫 +技專校院,,,,國際連結類深耕型,行動工程師培育計畫 +技專校院,7,北北基,中國科技大學,大學特色類萌芽型,萬芳商圈在地產業之活化與升級-智慧城市前導實踐 +技專校院,8,北北基,華夏科技大學,大學特色類萌芽型,華夏南勢在地紮根Plus +技專校院,9,桃竹苗宜花,亞東技術學院,大學特色類萌芽型,USR服務學習實踐模式應用於12年國教課程綱要之研究 +技專校院,10,桃竹苗宜花,長庚科技大學,大學特色類萌芽型,多元在嘉與文化融滲:新住民社區深耕計畫 +技專校院,,,,大學特色類萌芽型,在地扎根•社會共生-健康、就業、教養賦能計畫 +技專校院,,,,大學特色類萌芽型,破繭而出的形象曙光 +技專校院,11,桃竹苗宜花,龍華科技大學,大學特色類萌芽型,樂生生樂—場域重現樂生院區風貌及促進文化振興計畫 +技專校院,,,,大學特色類萌芽型,守護火金姑•最愛塔寮坑 +技專校院,12,桃竹苗宜花,耕莘健康管理專科學校,大學特色類萌芽型,宜蘭三星鄉農棄物六級產業與農村創生 +技專校院,,,,大學特色類萌芽型,「愛在莘裡口常開」~健康護牙支持網絡與服務培力計畫 +技專校院,13,桃竹苗宜花,明新科技大學,大學特色類萌芽型,一三延續、小農永續在地實踐計畫 +技專校院,,,,大學特色類萌芽型,在地實踐•社區連結-明新科技大學以社區為基礎之區域認同發展計畫 +技專校院,14,桃竹苗宜花,仁德醫護管理專科學校,大學特色類萌芽型,融合長照2.0之慢城銀髮優活與地方深耕計畫II +技專校院,15,桃竹苗宜花,慈濟科技大學,大學特色類萌芽型,共創失智友善及高齡健康促進支持網絡 +技專校院,16,桃竹苗宜花,萬能科技大學,大學特色類萌芽型,桃園食品安全及社區健康營造計畫 +技專校院,17,中彰投,中臺科技大學,大學特色類萌芽型,場域永續與人才培育-大坑后里食農與國高中小學食安食育的社會實踐 +技專校院,,,,大學特色類萌芽型,文資蘊生-深耕文化資產與人才培育計畫 +技專校院,18,中彰投,弘光科技大學,大學特色類萌芽型,中部沿海敏感族群之低碳宜居環境共築計畫 +技專校院,19,中彰投,南開科技大學,大學特色類萌芽型,形塑青銀共好場域實現在地永續長照-打造南投不老城鎮 +技專校院,,,,大學特色類深耕型,南投百香果資源永續之煉銀網平台 +技專校院,20,中彰投,修平科技大學,大學特色類萌芽型,再現田頭水-田中、社頭、二水區域整合計畫 +技專校院,,,,大學特色類萌芽型,文蛤智慧養殖與科學管理永續發展計畫 +技專校院,,,,大學特色類深耕型,農業地方創生系統 +技專校院,21,中彰投,國立勤益科技大學,大學特色類萌芽型,中部菇類產業創生與永續經營提升計畫 +技專校院,,,,大學特色類萌芽型,智慧創新在地實踐─枇杷荔枝共譜太平盛世 +技專校院,22,中彰投,國立臺中科技大學,大學特色類萌芽型,啟動山城濁水台3線智慧創新商業模式-產學攜手共伴與地方產業鏈結 +技專校院,23,中彰投,朝陽科技大學,大學特色類萌芽型,新農復穀-雜糧壯遊-同耕共學-擴散計畫 +技專校院,,,,大學特色類萌芽型,幼老共和國之幼老共園在地老化社會創新的實踐 +技專校院,,,,大學特色類萌芽型,八卦山下的科技大花現 +技專校院,,,,大學特色類萌芽型,智慧商務與行銷塑造南投中寮石虎與農業優化創生社會實踐模式 +技專校院,24,中彰投,嶺東科技大學,大學特色類萌芽型,人才留鄉協力創新林下經濟價值 +技專校院,,,,大學特色類萌芽型,STEM科教隊,在地攜手創作優質課程計畫 +技專校院,,,,大學特色類萌芽型,烏日高鐵特區社區觀光資源整合與行銷 +技專校院,,,,大學特色類萌芽型,中區綠時尚循環經濟深耕計畫 +技專校院,25,雲嘉南,吳鳳科技大學,大學特色類萌芽型,諸羅桃城好厝邊、安全享壽呷百二 +技專校院,,,,大學特色類萌芽型,幼見幸福嘉園-嘉義非營利性幼兒園的代間共融 +技專校院,26,雲嘉南,中華醫事科技大學,大學特色類萌芽型,南關線智慧健康幸福扎根計畫 +技專校院,,,,國際連結類萌芽型,臺南溪北淺山地區培青富老戰略計畫暨MakeMandaluyong’shealthandwell-beingstrongagain. +技專校院,27,雲嘉南,台南應用科技大學,大學特色類萌芽型,志在琉鄉-青銀共創?價值再造 +技專校院,,,,大學特色類萌芽型,消失的針線-刺繡技藝傳承與記憶延伸 +技專校院,,,,大學特色類深耕型,臺南農安樂活好食在 +技專校院,28,雲嘉南,南臺科技大學,大學特色類萌芽型,文化底蘊的在地創生與傳播府城vs月津 +技專校院,,,,大學特色類深耕型,青銀共創攜手在地共築智慧高齡友善社區 +技專校院,29,雲嘉南,國立虎尾科技大學,大學特色類萌芽型,深耕虎尾溪流域—他里霧平原螢光計畫 +技專校院,,,,大學特色類萌芽型,在地固著、國際流動–文化永續跨域實踐 +技專校院,,,,大學特色類深耕型,永續環境-傳續師徒精神-承續農業區域優勢 +技專校院,30,雲嘉南,國立雲林科技大學,大學特色類萌芽型,雲林養雞產業之社會實踐計畫:溯源供應鏈之塑造與永續營運 +技專校院,,,,大學特色類萌芽型,淺山農村的社會設計培力共構計畫 +技專校院,31,雲嘉南,崑山科技大學,大學特色類萌芽型,既培力也使力-以人才培育為底蘊創生新官田 +技專校院,,,,大學特色類萌芽型,南關線的飲食文化學堂–慢.食.行.旅計畫 +技專校院,,,,國際連結類萌芽型,永康工業區及鄰近區域暨國際化綠色需求和永續發展 +技專校院,32,雲嘉南,嘉南藥理大學,大學特色類萌芽型,濃濃香洋風,再造關廟情 +技專校院,,,,大學特色類萌芽型,營造Alia(e)n宜居地 +技專校院,,,,大學特色類萌芽型,永續安南環境生態與綠色產業 +技專校院,33,高屏澎東,大仁科技大學,大學特色類萌芽型,社區食品安全防護網與永續環境經營 +技專校院,,,,大學特色類萌芽型,長照知識整合與實踐-營造屏東在地幸福活躍老化新願景 +技專校院,,,,大學特色類萌芽型,台9線原鄉特色加值發展-獅子鄉文化資產永續 +技專校院,,,,大學特色類萌芽型,書香舒活宜居城:田園趣產業的推動與實踐 +技專校院,34,高屏澎東,樹德科技大學,大學特色類萌芽型,城鄉資訊能力深化培育與應用推廣計畫 +技專校院,,,,大學特色類深耕型,橫山USR綠色內涵整體實踐行動計畫 +技專校院,35,高屏澎東,樹人醫護管理專科學校,大學特色類萌芽型,青銀攜手銀髮樂活、跨界整合實踐計畫 +,36,高屏澎東,輔英科技大學,大學特色類萌芽型,大發工業區鄰近敏感區域永續健康大氣環境營造與環境教育拓展計畫 +,,,,大學特色類萌芽型,永續健康促進人才培育-深耕在地時間銀行及失智照護~輔英憶路共老守護,營造共生共好社區~ +技專校院,37,高屏澎東,國立澎湖科技大學,大學特色類萌芽型,文化、食安、長照—澎湖健康福祉營造工程計畫 +技專校院,38,高屏澎東,高苑科技大學,大學特色類萌芽型,高雄市大岡山地區東亞多元文化融合總體營造 +技專校院,39,高屏澎東,國立屏東科技大學,大學特色類萌芽型,從共森到創生之路--里山林下經濟網絡推動計畫 +技專校院,40,高屏澎東,國立高雄科技大學,大學特色類萌芽型,安居桃花源.港都山線韌性城鄉營建計畫 +技專校院,,,,大學特色類萌芽型,「智慧守望,環境再生」計畫(e-WATCHER) +技專校院,,,,大學特色類深耕型,海岸創生鑽石魚鄉-高雄永安漁村實踐計畫 +技專校院,,,,大學特色類深耕型,「春燕築巢.地方創生」從新農業出發 +技專校院,,,,國際連結類深耕型,鄰家好漁形塑計畫 +技專校院,41,高屏澎東,國立高雄餐旅大學,大學特色類萌芽型,台灣風土在地酒文化復育、教育及推廣發展實踐計畫 +技專校院,42,高屏澎東,文藻外語大學,大學特色類萌芽型,「溫暖白色巨塔的小螺絲釘-文藻國際志工共創就醫無障礙」USR社會實踐計畫 +技專校院,,,,大學特色類萌芽型,藻到新力亮~文藻USR新住民(新移工)關懷增能計畫 +技專校院,43,高屏澎東,正修科技大學,大學特色類萌芽型,蕉傲?大旗山典範創新合作生產推動計畫 +技專校院,,,,大學特色類萌芽型,食在安心,銀向健康,攜手樂活新林園 +技專校院,,,,大學特色類萌芽型,高山秘境、市外桃源-偏鄉產業升級暨品牌加值實踐計畫 +技專校院,,,,大學特色類萌芽型,沁透新埤-打造新埤社會責任學習大學協助偏鄉地方產業升級計畫 +技專校院,44,高屏澎東,美和科技大學,大學特色類萌芽型,屏東可可孵夢.產業破殼之創生實踐計畫 +,,,,, +深耕計畫第二部分 全球鏈結核定學校,,,,, +一、Global Taiwan 全校型學校,,,,, +學校代碼,學校名稱,,,, +2,國立清華大學,,,, +3,國立臺灣大學,,,, +5,國立成功大學,,,, +7,國立交通大學,,,, +二、Global Taiwan 研究中心,,,,, +學校名稱,領域,計畫名稱,,, +中國醫藥大學,醫學,新藥開發研究中心,,, +中國醫藥大學,醫學,中醫藥研究中心,,, +長庚大學,生命科學/農學,新興病毒感染研究中心,,, +長庚大學,生命科學/農學,健康老化研究中心,,, +長庚大學,醫學,分子醫學研究中心,,, +高雄醫學大學,生命科學/農學,環境醫學研究中心,,, +國立中山大學,社會科學,智慧電子商務研究中心,,, +國立中山大學,理學,晶體研究中心,,, +國立中央大學,理學,地震災害鏈風險評估及管理中心,,, +國立中央大學,理學,高能與強場物理研究中心,,, +國立中央大學,理學,太空科學與科技研究中心,,, +國立中正大學,工學(一般),前瞻製造系統頂尖研究中心,,, +國立中正大學,社會科學,高齡跨域創新研究中心,,, +國立中興大學,生命科學/農學,前瞻植物生技研究中心,,, +國立中興大學,生命科學/農學,永續農業創新發展中心,,, +國立中興大學,生命科學/農學,鳥禽遺傳資源暨動物生技研究中心,,, +國立陽明交通大學,工學(一般),智慧半導體奈米系統技術研究中心,,, +國立陽明交通大學,工學(一般),開源智能聯網研究中心,,, +國立陽明交通大學,工學(一般),神經調控醫療電子系統研究中心,,, +國立陽明交通大學,生命科學/農學,智慧型藥物與智能生物裝置研究中心,,, +國立陽明交通大學,社會科學,文化研究國際中心,,, +國立陽明交通大學,理學,新世代功能性物質研究中心,,, +國立陽明交通大學,醫學,腦科學研究中心,,, +國立陽明交通大學,醫學,腫瘤惡化卓越研究中心,,, +國立成功大學,工學(一般),前瞻醫療器材科技中心,,, +國立成功大學,工學(一般),智慧製造研究中心,,, +國立成功大學,工學(一般),跨維綠能材料研究中心,,, +國立成功大學,生命科學/農學,國際傷口修復與再生中心,,, +國立成功大學,生命科學/農學,前瞻蝦類養殖國際研發中心,,, +國立成功大學,社會科學,Fintech商創研究中心,,, +國立成功大學,醫學,奈米醫學研究中心,,, +國立政治大學,人文藝術,華人文化主體性研究中心,,, +國立政治大學,社會科學,臺灣政經傳播研究中心,,, +國立清華大學,工學(一般),高熵材料研發中心,,, +國立清華大學,理學,前瞻物質基礎與應用科學中心,,, +國立清華大學,理學,前瞻量子科技研究中心,,, +國立清華大學,醫學,腦科學研究中心,,, +國立臺灣大學,工學(一般),前瞻綠色材料高值化研究中心,,, +國立臺灣大學,社會科學,計量理論與應用研究中心,,, +國立臺灣大學,理學,新穎材料原子級科學研究中心,,, +國立臺灣大學,理學,永續地球尖端科學研究中心,,, +國立臺灣大學,醫學,精準醫學研究中心,,, +國立臺灣師範大學,人文藝術,華語文與科技研究中心計畫,,, +國立臺灣師範大學,社會科學,學習科學跨國頂尖研究中心計畫,,, +國立臺灣海洋大學,工學(一般),海洋工程科技中心,,, +國立臺灣海洋大學,理學,海洋中心,,, +臺北醫學大學,醫學,癌症轉譯研究中心,,, +正修科技大學,生命科學/農學,環境毒物與新興汙染物研究中心,,, +國立虎尾科技大學,工學(技職),智能機械與智慧製造研究中心,,, +國立屏東科技大學,生命科學/農學,動物製劑研究中心,,, +國立高雄科技大學,工學(技職),前瞻模具技術研究發展中心,,, +國立雲林科技大學,人文藝術,智能地域設計服務研究中心,,, +國立雲林科技大學,工學(技職),智慧辨識產業服務研究中心,,, +國立臺北科技大學,工學(技職),智慧紡織科技研發中心,,, +國立臺北科技大學,工學(技職),新世代住商與工業節能研究中心,,, +國立臺灣科技大學,工學(技職),臺灣建築科技中心,,, +國立臺灣科技大學,工學(技職),高速3D列印研究中心,,, +國立臺灣科技大學,工學(技職),網宇實體系統創新中心,,, +崑山科技大學,工學(技職),綠能科技研究中心,,, From 4b9ac61ca4e4ab98c3b0c94a07db14da2701053e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:33:29 +0800 Subject: [PATCH 0947/2002] Committed 2022/07/11 --- .idea/encodings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 5485132d..fb17512f 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -4,6 +4,7 @@ + From f6ec8e2ffbb212dca7cc26ccf213e4edf856c3f4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:36:28 +0800 Subject: [PATCH 0948/2002] Committed 2022/07/11 --- .../Alloting higher education resources 2022.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py index 4b17af65..05b7fcac 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py @@ -9,8 +9,8 @@ # Convert wiki-table in the article 擃蝑脫楛閮俎4] to csv.[2][3] public_research_centric_university = pd.DataFrame(data=[ - [1, "蝡箇憭批飛", "National Taiwan University", 232673, "North", ], - [2, "蝡憭批飛", "National Cheng Kung University", 141284, "South", ], + [1, "蝡箇憭批飛", "National Taiwan University", 232587, "North", ], + [2, "蝡憭批飛", "National Cheng Kung University", 141178, "South", ], [3, "蝡皜臬之摮", "National Tsing Hua University", 121202, "North", "Derived from Beijing, China's Tsing Hua University"], [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 104500, "North", "Derived from Shanghai, China's ChiaoTung University"], [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43582, "North", ], From 35a16aab5056d5f80e90542361430adf46cb40e2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:39:14 +0800 Subject: [PATCH 0949/2002] Committed 2022/07/11 --- .../Alloting higher education resources 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py index 05b7fcac..70e0e5f3 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py @@ -11,7 +11,7 @@ public_research_centric_university = pd.DataFrame(data=[ [1, "蝡箇憭批飛", "National Taiwan University", 232587, "North", ], [2, "蝡憭批飛", "National Cheng Kung University", 141178, "South", ], - [3, "蝡皜臬之摮", "National Tsing Hua University", 121202, "North", "Derived from Beijing, China's Tsing Hua University"], + [3, "蝡皜臬之摮", "National Tsing Hua University", 120394, "North", "Derived from Beijing, China's Tsing Hua University"], [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 104500, "North", "Derived from Shanghai, China's ChiaoTung University"], [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43582, "North", ], [6, "蝡銝剖亢憭批飛", "National Central University", 41463, "North", ], From 70d0cb5f5c1f612d36f8860852fc18d683e69b64 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:40:18 +0800 Subject: [PATCH 0950/2002] Committed 2022/07/11 --- .../Alloting higher education resources 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py index 70e0e5f3..d2ad24d0 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py @@ -80,7 +80,7 @@ plt.ylabel('Unit: 10 thousands of New Taiwan Dollar') plt.title('Government budget support for public research universities (蝡憭批飛)\n' - 'in North vs South in 2021', fontproperties="MS Gothic") + 'in North vs South in 2022', fontproperties="MS Gothic") # Tweak spacing to prevent clipping of ylabel plt.tight_layout() From f43f5d574f654900029145baed085f8f3f66e5a1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 15 Jul 2022 11:32:52 +0800 Subject: [PATCH 0951/2002] Committed 2022/07/15 --- .../Alloting higher education resources 2022.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py index d2ad24d0..2c8a5d6b 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py @@ -12,10 +12,10 @@ [1, "蝡箇憭批飛", "National Taiwan University", 232587, "North", ], [2, "蝡憭批飛", "National Cheng Kung University", 141178, "South", ], [3, "蝡皜臬之摮", "National Tsing Hua University", 120394, "North", "Derived from Beijing, China's Tsing Hua University"], - [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 104500, "North", "Derived from Shanghai, China's ChiaoTung University"], - [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43582, "North", ], + [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 138078, "North", "Derived from Shanghai, China's ChiaoTung University"], + [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43745, "North", ], [6, "蝡銝剖亢憭批飛", "National Central University", 41463, "North", ], - [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 34407, "North", ], + [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], [8, "蝡踵祥憭批飛", "National Chengchi University", 32164, "North", "Literally, 'National Politics University'"], [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 31954, "South", ], [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 22734, "North", ], From 3d03f90a85cb112025fb57f25dfda54e5bcaba7c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 15 Jul 2022 11:34:30 +0800 Subject: [PATCH 0952/2002] Committed 2022/07/15 --- .../Alloting higher education resources 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py index 2c8a5d6b..aac31178 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py @@ -14,7 +14,7 @@ [3, "蝡皜臬之摮", "National Tsing Hua University", 120394, "North", "Derived from Beijing, China's Tsing Hua University"], [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 138078, "North", "Derived from Shanghai, China's ChiaoTung University"], [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43745, "North", ], - [6, "蝡銝剖亢憭批飛", "National Central University", 41463, "North", ], + [6, "蝡銝剖亢憭批飛", "National Central University", 42228, "North", ], [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], [8, "蝡踵祥憭批飛", "National Chengchi University", 32164, "North", "Literally, 'National Politics University'"], [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 31954, "South", ], From 0344774008863f6349382b367b625b1b1f75ba8c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 15 Jul 2022 11:35:28 +0800 Subject: [PATCH 0953/2002] Committed 2022/07/15 --- .../Alloting higher education resources 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py index aac31178..334d94ef 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py @@ -16,7 +16,7 @@ [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43745, "North", ], [6, "蝡銝剖亢憭批飛", "National Central University", 42228, "North", ], [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], - [8, "蝡踵祥憭批飛", "National Chengchi University", 32164, "North", "Literally, 'National Politics University'"], + [8, "蝡踵祥憭批飛", "National Chengchi University", 31579, "North", "Literally, 'National Politics University'"], [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 31954, "South", ], [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 22734, "North", ], [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 15521, "South", "Literally, National Chiang Chung-cheng University"], From 2c8931b789fbbe52ef78dab68612c23fa40e3264 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 15 Jul 2022 11:50:50 +0800 Subject: [PATCH 0954/2002] Committed 2022/07/15 --- ...lloting higher education resources 2022.py | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py index 334d94ef..74123c01 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py @@ -17,32 +17,32 @@ [6, "蝡銝剖亢憭批飛", "National Central University", 42228, "North", ], [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], [8, "蝡踵祥憭批飛", "National Chengchi University", 31579, "North", "Literally, 'National Politics University'"], - [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 31954, "South", ], - [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 22734, "North", ], - [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 15521, "South", "Literally, National Chiang Chung-cheng University"], - [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 14393, "North", ], - [13, "蝡箏憭批飛", "National Taipei University", 8778, "North", ], - [14, "蝡典憭批飛", "National Chi Nan University", 7859, "North", ], - [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 7615, "North", ], - [16, "蝡梯臬之摮", "National Dong Hwa University", 6930, "Hualien County", ], - [17, "蝡蝢拙之摮", "National Chiayi University", 6093, "South", ], - [18, "蝡摰剖之摮", "National Ilan University", 6604, "North", ], - [19, "蝡撅勗之摮", "National Pingtung University", 6555, "South", ], - [20, "蝡箸勗之摮", "National Taitung University", 6331, "Taitung County", ], - [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5955, "North", ], - [22, "蝡箏脣之摮", "National Taipei University of Education", 5186, "North", ], - [23, "蝡擃憭批飛", "National University of Kaohsiung", 5450, "South", ], - [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 5449, "North", ], - [25, "蝡箔葉脣之摮", "National Taichung University of Education", 5427, "North", ], - [26, "蝡箏憭批飛", "National University of Tainan", 5069, "South", ], - [27, "箏撣蝡憭批飛", "University of Taipei", 5031, "North", ], - [28, "蝡擃脣之摮", "National Taiwan Sport University", 4749, "North", ], - [29, "蝡臬憭批飛", "National United University", 4652, "North", ], - [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 4511, "South", ], - [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3319, "North", ], - [32, "蝡憭批飛", "National Quemoy University", 3240, ], + [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 32068, "South", ], + [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 14233, "North", ], + [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 15361, "South", "Literally, National Chiang Chung-cheng University"], + [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 14233, "North", ], + [13, "蝡箏憭批飛", "National Taipei University", 8771, "North", ], + [14, "蝡典憭批飛", "National Chi Nan University", 8030, "North", ], + [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 7580, "North", ], + [16, "蝡梯臬之摮", "National Dong Hwa University", 6965, "Hualien County", ], + [17, "蝡蝢拙之摮", "National Chiayi University", 5927, "South", ], + [18, "蝡摰剖之摮", "National Ilan University", 6799, "North", ], + [19, "蝡撅勗之摮", "National Pingtung University", 6619, "South", ], + [20, "蝡箸勗之摮", "National Taitung University", 6178, "Taitung County", ], + [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5974, "North", ], + [22, "蝡箏脣之摮", "National Taipei University of Education", 5234, "North", ], + [23, "蝡擃憭批飛", "National University of Kaohsiung", 5502, "South", ], + [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 5478, "North", ], + [25, "蝡箔葉脣之摮", "National Taichung University of Education", 5549, "North", ], + [26, "蝡箏憭批飛", "National University of Tainan", 5203, "South", ], + [27, "箏撣蝡憭批飛", "University of Taipei", 5247, "North", ], + [28, "蝡擃脣之摮", "National Taiwan Sport University", 4732, "North", ], + [29, "蝡臬憭批飛", "National United University", 4676, "North", ], + [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 4347, "South", ], + [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3229, "North", ], + [32, "蝡憭批飛", "National Quemoy University", 3319, ], # [33, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3226, "North", ], - [33, "蝡箏銵憭批飛", "Tainan National University of the Arts", 2034, "South", ], + [33, "蝡箏銵憭批飛", "Tainan National University of the Arts", 1997, "South", ], ]) print(public_research_centric_university) From 8dc598e9a8c9601f0ee4ea118a2391186661fddb Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 15 Jul 2022 11:51:14 +0800 Subject: [PATCH 0955/2002] Committed 2022/07/15 --- .../Alloting higher education resources 2022.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py index 74123c01..f1f1cf67 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/Alloting higher education resources 2022.py @@ -1,6 +1,4 @@ -import numpy as np import pandas as pd -from sklearn.preprocessing import LabelEncoder import matplotlib.pyplot as plt # Using the magic encoding # -*- coding: utf-8 -*- From 8e7c3a38ea13d046799f17bda130a6508f57d945 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 16 Jul 2022 15:01:44 +0800 Subject: [PATCH 0956/2002] Committed 2022/07/16 --- .../April2022_bar_table.py | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py new file mode 100644 index 00000000..3f20c142 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py @@ -0,0 +1,104 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-03)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 4a888123ac92b34e69088107865f1f2bdbb8e6e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 16 Jul 2022 15:04:59 +0800 Subject: [PATCH 0957/2002] Committed 2022/07/16 --- .../Road safety/Month_over_month_2022/April2022_bar_table.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py index 3f20c142..5b823070 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py @@ -6,11 +6,12 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month = ["Jan", "Feb", "Mar"] +month = ["Jan", "Feb", "Mar", "Apr"] deaths = [[13, 23, 29, 28, 24, 23], # January [7, 16, 20, 24, 20, 30], # February [9, 29, 14, 27, 34, 43], # March + [8, 23, 23, 23, 27, 30], # April ] df = pd.DataFrame(data=deaths, @@ -63,7 +64,7 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-03)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-04)") axes.grid(True) # pyplot.grid [1][2] From 1e50afa763eefbb935ecb391497c30058b956697 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 16 Jul 2022 15:07:43 +0800 Subject: [PATCH 0958/2002] Committed 2022/07/16 --- .../Month_over_month_2022/April2022_bar_table.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py index 5b823070..b4f5ee30 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/April2022_bar_table.py @@ -69,12 +69,12 @@ axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From f43aec00b7991e4bddf87cfe89a357a82e6a6789 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 16 Jul 2022 15:16:00 +0800 Subject: [PATCH 0959/2002] Committed 2022/07/16 --- .../Maximum flow and minimum cut.py | 3 +++ .../__init__.py | 0 Master Python Data Visualization/__init__.py | 0 3 files changed, 3 insertions(+) create mode 100644 Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py create mode 100644 Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/__init__.py create mode 100644 Master Python Data Visualization/__init__.py diff --git a/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py b/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py new file mode 100644 index 00000000..9109dc3b --- /dev/null +++ b/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py @@ -0,0 +1,3 @@ +import networkx as nx + +G = nx.DiGraph() diff --git a/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/__init__.py b/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Master Python Data Visualization/__init__.py b/Master Python Data Visualization/__init__.py new file mode 100644 index 00000000..e69de29b From e2c810d9dff5ef083c05368dde5ba4f81e3eac15 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 16 Jul 2022 15:18:13 +0800 Subject: [PATCH 0960/2002] Committed 2022/07/16 --- .../Maximum flow and minimum cut.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py b/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py index 9109dc3b..a9170f60 100644 --- a/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py +++ b/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py @@ -1,3 +1,5 @@ import networkx as nx +import matplotlib.pyplot as plt G = nx.DiGraph() +G.add_edge('p', 'y', capacity=5.0) \ No newline at end of file From 561c08061be276bf0ee9b704cd72eee178ba6534 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 16 Jul 2022 15:18:35 +0800 Subject: [PATCH 0961/2002] Committed 2022/07/16 --- .../Maximum flow and minimum cut.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py b/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py index a9170f60..edff5d8d 100644 --- a/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py +++ b/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py @@ -2,4 +2,6 @@ import matplotlib.pyplot as plt G = nx.DiGraph() -G.add_edge('p', 'y', capacity=5.0) \ No newline at end of file +G.add_edge('p', 'y', capacity=5.0) + + From 69bd25bd0b7a358b820f4c3a44029f395ad4ada4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 16 Jul 2022 15:23:04 +0800 Subject: [PATCH 0962/2002] Committed 2022/07/16 --- .../Maximum flow and minimum cut.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py b/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py index edff5d8d..5dcf4411 100644 --- a/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py +++ b/Master Python Data Visualization/Chapter 7 - Bioinformatics, Genetics, and Network Models/Maximum flow and minimum cut.py @@ -3,5 +3,15 @@ G = nx.DiGraph() G.add_edge('p', 'y', capacity=5.0) +G.add_edge('p', 's', capacity=4.0) +G.add_edge('y', 't', capacity=3.0) +G.add_edge('s', 'h', capacity=5.0) +G.add_edge('s', 'o', capacity=4.0) +flow_value = nx.maximum_flow_value(flowG=G, _s='p', _t='o') +print("Flow value", flow_value) + +nx.draw(G=G, node_color='#a0cbe2') + +plt.show() From 49636a33fb76922d09839927f287deedfc713709 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 30 Jul 2022 17:55:14 +0800 Subject: [PATCH 0963/2002] Committed 2022/07/30 --- .../2022/July/Metro_area_EN_ZH_JP.py | 37 +++++++++++++++++++ .../2022/July/__init__.py | 0 2 files changed, 37 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/Metro_area_EN_ZH_JP.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/Metro_area_EN_ZH_JP.py new file mode 100644 index 00000000..0842ab3d --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/Metro_area_EN_ZH_JP.py @@ -0,0 +1,37 @@ +import matplotlib.pyplot as plt +import matplotlib +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [180263, 89216, 74059, 39413, 40549] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) # [1] + +plt.title("2022/07 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220730070406/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(35000, 165000) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/a/12444777/ +# 2. https://stackoverflow.com/a/11386056/ \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/__init__.py new file mode 100644 index 00000000..e69de29b From db1418421b4f6a933d7c72f6349e2ef7916bc2b4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 30 Jul 2022 17:58:52 +0800 Subject: [PATCH 0964/2002] Committed 2022/07/30 --- .../2022/July/Metro_area_EN_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/Metro_area_EN_ZH_JP.py index 0842ab3d..083050aa 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/Metro_area_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/July/Metro_area_EN_ZH_JP.py @@ -6,7 +6,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [180263, 89216, 74059, 39413, 40549] +position_vacancies = [180263, 89334, 74194, 39046, 41424] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 2147d9f9430b49821f40bf7b9624514e3cc1c2e8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 31 Jul 2022 18:35:55 +0800 Subject: [PATCH 0965/2002] Committed 2022/07/31 --- .../Month_over_month_2022/May_bar_table.py | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table.py new file mode 100644 index 00000000..4cf31101 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table.py @@ -0,0 +1,106 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March + [8, 25, 23, 23, 27, 31], # April + [7, 33, 16, 27, 27, 27], # May + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-04)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 04326d5dbc203f3d1aed2198d2d5ab5afcf52349 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 31 Jul 2022 18:39:41 +0800 Subject: [PATCH 0966/2002] Committed 2022/07/31 --- .../Month_over_month_2022/May_bar_table.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table.py index 4cf31101..b428a4e3 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table.py @@ -65,17 +65,17 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-04)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-05)") axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From 95ff007b84c0ce687dfc6ff4202cc9c896ff8465 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 6 Aug 2022 16:32:18 +0800 Subject: [PATCH 0967/2002] Committed 2022/08/06 --- .../Year allocation of centrally-funded tax revenues/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Year allocation of centrally-funded tax revenues/__init__.py diff --git a/The attainments and realizations of my dreams/Year allocation of centrally-funded tax revenues/__init__.py b/The attainments and realizations of my dreams/Year allocation of centrally-funded tax revenues/__init__.py new file mode 100644 index 00000000..e69de29b From 9f17ec86aec6e3f2360360fc1283c152dbf8cd24 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 13 Aug 2022 17:05:40 +0800 Subject: [PATCH 0968/2002] Committed 2022/08/13 --- .../Road safety/Year_over_year_2008-2021.py | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021.py new file mode 100644 index 00000000..9a27624e --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021.py @@ -0,0 +1,122 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + [132, 266, 269, 283, 295, 333], # 2021 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2021)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary, color=colour.CSS4_COLORS.get('palegreen'), linewidth=1, ecolor=colour.CSS4_COLORS.get('dodgerblue')) # Create a bar chart and its format. [7][11][12] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html +# 11. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar.html#matplotlib.axes.Axes.bar +# 12. https://matplotlib.org/stable/gallery/color/named_colors.html From f281d2bab4486923594011bbc113802bae8af32e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 13 Aug 2022 17:09:18 +0800 Subject: [PATCH 0969/2002] Committed 2022/08/13 --- .../Road safety/Year_over_year_2008-2021.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021.py index 9a27624e..918dd5e1 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021.py @@ -7,7 +7,8 @@ year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] -death = [[133, 254, 198, 318, 340, 402], # 2009 +death = [[115, 261, 226, 371, 371, 398], # 2008 + [133, 254, 198, 318, 340, 402], # 2009 [152, 255, 227, 373, 319, 388], # 2010 [140, 264, 195, 382, 346, 373], # 2011 [130, 252, 195, 370, 288, 417], # 2012 @@ -42,7 +43,7 @@ print(summary) cumulative_sum = pd.DataFrame(data=summary, - columns=["Accumulative Deaths (2009-2021)"], + columns=["Accumulative Deaths (2008-2021)"], index=administrative_duty) print(cumulative_sum) @@ -84,7 +85,7 @@ colour.CSS4_COLORS.get('lightskyblue'), colour.CSS4_COLORS.get('lightskyblue')], loc='center', - url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + url='Reference:\nhttps://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100' ) # Scale column widths by xscale and row heights by yscale.[4] @@ -97,7 +98,7 @@ # matplotlib text [1][2] text = figure.text(0.5, 0.04, - 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', horizontalalignment='center', verticalalignment='center', size=13, From 6997f66da18e6be7e1379e5e4438be8d9eab4128 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 15:08:51 +0800 Subject: [PATCH 0970/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP.py | 37 +++++++++++++++++++ .../2022/August/__init__.py | 0 2 files changed, 37 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py new file mode 100644 index 00000000..81d07773 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py @@ -0,0 +1,37 @@ +import matplotlib.pyplot as plt +import matplotlib +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [180263, 89334, 74194, 39046, 41424] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) # [1] + +plt.title("2022/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220730070406/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(35000, 165000) + +plt.show() + +# Reference: +# 1. https://stackoverflow.com/a/12444777/ +# 2. https://stackoverflow.com/a/11386056/ \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/__init__.py new file mode 100644 index 00000000..e69de29b From 5a471de296268228667f8b76e25e3b37687e55c3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 15:12:38 +0800 Subject: [PATCH 0971/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py index 81d07773..ef1b3911 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py @@ -6,7 +6,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [180263, 89334, 74194, 39046, 41424] +position_vacancies = [180741, 89132, 74250, 38822, 41736] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] @@ -26,7 +26,7 @@ plt.title("2022/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] # plt.ylabel("") -plt.xlabel("鞈 Reference: https://web.archive.org/web/20220730070406/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220820070855/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(35000, 165000) From 0f2b7e48b031187260cd6912ca681f7b597ce6ed Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 15:17:40 +0800 Subject: [PATCH 0972/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py index ef1b3911..b77fe00d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py @@ -28,7 +28,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://web.archive.org/web/20220820070855/https://www.104.com.tw/jb/category/?cat=2") -plt.ylim(35000, 165000) +plt.ylim(38000, 165000) plt.show() From 1363a3c090625783f0b8495714b336af043e251d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 15:18:28 +0800 Subject: [PATCH 0973/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py index b77fe00d..38478aef 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP.py @@ -6,7 +6,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [180741, 89132, 74250, 38822, 41736] +position_vacancies = [180741, 89132, 74250, 38822, 41763] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 0673d873302f62feeb16f44edb8a3fec72ec68ed Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:04:25 +0800 Subject: [PATCH 0974/2002] Committed 2022/08/20 --- .../2022/August/CC-BY.png | Bin 0 -> 1283 bytes .../August/Metro_areas_EN_ZH_JP_watermark.py | 39 ++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/CC-BY.png create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Sat, 20 Aug 2022 16:20:38 +0800 Subject: [PATCH 0975/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_watermark.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py index 568e00f7..c7e72ba0 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py @@ -14,7 +14,7 @@ "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] fig, ax = plt.subplots(figsize=(9, 9)) -plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plt.tick_params(axis='y', labelsize=12) # [2] @@ -23,17 +23,21 @@ for rect in plot: height = rect.get_height() ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, - '%d' % int(height), ha='center', va='bottom', fontsize=12) # [1] + '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2022/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] +plt.title("2022/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference: https://web.archive.org/web/20220820070855/https://www.104.com.tw/jb/category/?cat=2") plt.ylim(38000, 165000) +with cbook.get_sample_data('CC-BY.png') as file: + img = image.imread(file) + + +plt.figimage(X=img, xo=20, yo=20, alpha=0.5) + plt.show() # Reference: -# 1. https://stackoverflow.com/a/12444777/ -# 2. https://stackoverflow.com/a/11386056/ \ No newline at end of file From 1e1361f85d71eaeab711f4bf296b4d7c20024a3f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:28:29 +0800 Subject: [PATCH 0976/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_watermark.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py index c7e72ba0..1cde7d74 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py @@ -32,12 +32,11 @@ plt.ylim(38000, 165000) -with cbook.get_sample_data('CC-BY.png') as file: - img = image.imread(file) - +img = image.imread('CC-BY.png') # Load image. [1] plt.figimage(X=img, xo=20, yo=20, alpha=0.5) plt.show() # Reference: +# 1. https://matplotlib.org/stable/tutorials/introductory/images.html \ No newline at end of file From 4d68954684c748973fcf4b87d8780009e22d75f5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:31:13 +0800 Subject: [PATCH 0977/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_watermark.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py index 1cde7d74..88f7d8f8 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py @@ -34,9 +34,10 @@ img = image.imread('CC-BY.png') # Load image. [1] -plt.figimage(X=img, xo=20, yo=20, alpha=0.5) +plt.figimage(X=img, xo=20, yo=20, alpha=0.5) # Insert watermark image. [2] plt.show() # Reference: -# 1. https://matplotlib.org/stable/tutorials/introductory/images.html \ No newline at end of file +# 1. https://matplotlib.org/stable/tutorials/introductory/images.html +# 2. https://matplotlib.org/stable/gallery/images_contours_and_fields/watermark_image.html \ No newline at end of file From c07686093413ce8fcaf403cc93e044f6e40a5e83 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:32:16 +0800 Subject: [PATCH 0978/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py index 88f7d8f8..8cce454b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py @@ -34,7 +34,7 @@ img = image.imread('CC-BY.png') # Load image. [1] -plt.figimage(X=img, xo=20, yo=20, alpha=0.5) # Insert watermark image. [2] +plt.figimage(X=img, xo=20, yo=20, alpha=0.9) # Insert watermark image. [2] plt.show() From 38f6173c969e8173fb9c77f4cc4649995a178632 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:34:51 +0800 Subject: [PATCH 0979/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py index 8cce454b..2d70c632 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py @@ -34,7 +34,7 @@ img = image.imread('CC-BY.png') # Load image. [1] -plt.figimage(X=img, xo=20, yo=20, alpha=0.9) # Insert watermark image. [2] +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert watermark image. [2] plt.show() From a31895f53262cad5369f73658382da2e4d752e27 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:37:42 +0800 Subject: [PATCH 0980/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_watermark.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py index 2d70c632..794e7d8d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_watermark.py @@ -40,4 +40,8 @@ # Reference: # 1. https://matplotlib.org/stable/tutorials/introductory/images.html -# 2. https://matplotlib.org/stable/gallery/images_contours_and_fields/watermark_image.html \ No newline at end of file +# 2. https://matplotlib.org/stable/gallery/images_contours_and_fields/watermark_image.html + +# Handy websites for choosing the CC license (image). +# 1. https://commons.wikimedia.org/wiki/Commons:Licensing#Well-known_licenses +# 2. https://creativecommons.org/choose/ \ No newline at end of file From 6d4adf25a57bc291fc699d7207fe13e0720ccc6b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:48:41 +0800 Subject: [PATCH 0981/2002] Committed 2022/08/20 --- .../Metro_areas_EN_ZH_JP_text watermark.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py new file mode 100644 index 00000000..4d2f9b65 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -0,0 +1,44 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [180741, 89132, 74250, 38822, 41763] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220820070855/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +plt.text(x=0.5, y=0.5, s="CC-BY 4.0 @Beipiao", transform=fig.transAxes, fontsize=40, color='grey', + alpha=0.9, ha='center', va='center', rotation='30') + +plt.show() + +# Reference: From 40589da15c35aacc179be4ad8267c6ea83e52bb8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:49:55 +0800 Subject: [PATCH 0982/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_text watermark.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index 4d2f9b65..7a7d619c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -36,9 +36,11 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) +# Insert text watermark [1] plt.text(x=0.5, y=0.5, s="CC-BY 4.0 @Beipiao", transform=fig.transAxes, fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30') plt.show() # Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html \ No newline at end of file From ee5679f2cc54fa0623c249e61f740f39c903ee48 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:53:31 +0800 Subject: [PATCH 0983/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_text watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index 7a7d619c..d5aa7561 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -37,7 +37,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.5, y=0.5, s="CC-BY 4.0 @Beipiao", transform=fig.transAxes, fontsize=40, color='grey', +plt.text(x=0.5, y=0.5, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30') plt.show() From 9fc3ec9351f08656ebaa84edda017a787434d6e7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:54:00 +0800 Subject: [PATCH 0984/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_text watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index d5aa7561..7d95a51a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -37,7 +37,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.5, y=0.5, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', +plt.text(x=450, y=450, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30') plt.show() From f647e8e01f5d2cb665bbb27cdbf130e45b45ab32 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:56:55 +0800 Subject: [PATCH 0985/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_text watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index 7d95a51a..a39fdb1d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -37,7 +37,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=450, y=450, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', +plt.text(x=1, y=1, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30') plt.show() From a0e352ea9f7b498fee76b9092a6069c0cb34783c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 16:58:03 +0800 Subject: [PATCH 0986/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_text watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index a39fdb1d..dbd1db55 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -37,7 +37,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=1, y=1, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', +plt.text(x=10, y=10, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30') plt.show() From ba2b395d469ec5228c4ecf278e90e2d155de9f20 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 17:08:17 +0800 Subject: [PATCH 0987/2002] Committed 2022/08/20 --- .../August/Metro_areas_EN_ZH_JP_text watermark.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index dbd1db55..f0990188 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -4,6 +4,7 @@ import matplotlib.image as image # Using the magic encoding # -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform matplotlib.rc('font', family="MS Gothic") @@ -37,10 +38,16 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=10, y=10, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', - alpha=0.9, ha='center', va='center', rotation='30') +plt.text(x=2, y=1, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=IdentityTransform()) # data coordinates [2] [Note1] plt.show() # Reference: -# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html \ No newline at end of file +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] From 9b691b086bbcee9f031f2afaf8cfb41a2432efbe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 17:12:30 +0800 Subject: [PATCH 0988/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_text watermark.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index f0990188..906b405d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -40,14 +40,19 @@ # Insert text watermark [1] plt.text(x=2, y=1, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30', - transform=IdentityTransform()) # data coordinates [2] [Note1] + transform=IdentityTransform()) # data coordinates [2] [Note1] [3] [Note2] plt.show() # Reference: # 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html # 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text # Notes: # 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, # and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 8e3931258693f9bb9d695ff8d00a013d2355bde6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 17:25:11 +0800 Subject: [PATCH 0989/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_text watermark.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index 906b405d..41f8f5ef 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -38,9 +38,9 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=2, y=1, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.5, y=0.5, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30', - transform=IdentityTransform()) # data coordinates [2] [Note1] [3] [Note2] + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] plt.show() From 9f92fe706f5671d63fa04f1efae9412108fc677b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 17:26:27 +0800 Subject: [PATCH 0990/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_text watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index 41f8f5ef..a4d5db08 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -38,7 +38,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.5, y=0.5, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.6, y=0.6, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30', transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From 0fa566820350701a378a9a74b6b0deef8ca2bf4a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 17:27:39 +0800 Subject: [PATCH 0991/2002] Committed 2022/08/20 --- .../2022/August/Metro_areas_EN_ZH_JP_text watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py index a4d5db08..c7f0a837 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_text watermark.py @@ -38,7 +38,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.6, y=0.6, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.6, y=0.7, s="CC-BY 4.0 @Beipiao", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30', transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From 85bbbee5f517b0c485ad7a0f60c246f5e0d311ad Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 18:12:30 +0800 Subject: [PATCH 0992/2002] Committed 2022/08/20 --- .../Hierachical_clustering_on_dummy_data.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data.py diff --git a/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data.py b/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data.py new file mode 100644 index 00000000..74d14f7e --- /dev/null +++ b/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data.py @@ -0,0 +1,19 @@ +import numpy as np +import pandas as pd +from sklearn.datasets._samples_generator import make_blobs +from matplotlib import pyplot as plt + +# generating dummy data of 10 records with 2 clusters. +features, labels = make_blobs(n_samples=10, centers=2, cluster_std=2.00) + +# plotting the dummy data +plt.scatter(x=features[:, 0], y=features[:, 1], color='r') + +# adding numbers to data points +annots = range(1, 11) + +for label, x, y in zip(annots, features[:, 0], features[:, 1]): + plt.annotate(text=label, xy=(x, y), xytext=(-3, 3), textcoords='offset points', ha='right', va='bottom') + + +plt.show() From 82b8d9921745426b01cffccf7782a6f0fb40e87f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 18:42:40 +0800 Subject: [PATCH 0993/2002] Committed 2022/08/20 --- .../Hierachical_clustering_on_dummy_data_2.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py diff --git a/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py b/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py new file mode 100644 index 00000000..4495efa1 --- /dev/null +++ b/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py @@ -0,0 +1,27 @@ +import numpy as np +import pandas as pd +from sklearn.datasets._samples_generator import make_blobs +from matplotlib import pyplot as plt +from scipy.cluster.hierarchy import linkage, dendrogram + +# generating dummy data of 10 records with 2 clusters. +features, labels = make_blobs(n_samples=10, centers=2, cluster_std=2.00) + +# plotting the dummy data +plt.scatter(x=features[:, 0], y=features[:, 1], color='r') + +# adding numbers to data points +annots = range(1, 11) + +for label, x, y in zip(annots, features[:, 0], features[:, 1]): + plt.annotate(text=label, xy=(x, y), xytext=(-3, 3), textcoords='offset points', ha='right', va='bottom') + + +plt.show() + +# Pass features to the constructor of linkage class. +dendros = linkage(y=features, method='single') + +dendrogram(Z=dendros, orientation='top', labels=annots, distance_sort='descending', show_leaf_counts=True) + +plt.show() From bd06faf55799e26c8f25d88413afec2730493fc0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 18:44:07 +0800 Subject: [PATCH 0994/2002] Committed 2022/08/20 --- .../Hierachical_clustering_on_dummy_data_2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py b/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py index 4495efa1..ac6ae134 100644 --- a/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py +++ b/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py @@ -11,7 +11,7 @@ plt.scatter(x=features[:, 0], y=features[:, 1], color='r') # adding numbers to data points -annots = range(1, 11) +annots = np.range(1, 11) for label, x, y in zip(annots, features[:, 0], features[:, 1]): plt.annotate(text=label, xy=(x, y), xytext=(-3, 3), textcoords='offset points', ha='right', va='bottom') From d6d6d037d210dfdb4d658e06faa6baa1c8ec52e1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 20 Aug 2022 18:46:13 +0800 Subject: [PATCH 0995/2002] Committed 2022/08/20 --- .../Hierachical_clustering_on_dummy_data_2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py b/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py index ac6ae134..0ffa9c83 100644 --- a/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py +++ b/Python Machine Learning For Beginners/Chapter8 - Unsupervised Learning/Hierachical_clustering_on_dummy_data_2.py @@ -11,7 +11,7 @@ plt.scatter(x=features[:, 0], y=features[:, 1], color='r') # adding numbers to data points -annots = np.range(1, 11) +annots = np.arange(1, 11) for label, x, y in zip(annots, features[:, 0], features[:, 1]): plt.annotate(text=label, xy=(x, y), xytext=(-3, 3), textcoords='offset points', ha='right', va='bottom') From d139f4a1491e33c248c827432f8932b6c2512d1d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Aug 2022 14:54:55 +0800 Subject: [PATCH 0996/2002] Committed 2022/08/20 --- .../Road safety/CC-BY.png | Bin 0 -> 1283 bytes .../Road safety/Month_over_month_2022/CC-BY.png | Bin 0 -> 1283 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/CC-BY.png create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/CC-BY.png diff --git a/The attainments and realizations of my dreams/Road safety/CC-BY.png b/The attainments and realizations of my dreams/Road safety/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Fri, 26 Aug 2022 15:56:18 +0800 Subject: [PATCH 0997/2002] Committed 2022/08/26 --- ...Metro_areas_EN_ZH_JP_humbling_watermark.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_humbling_watermark.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_humbling_watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_humbling_watermark.py new file mode 100644 index 00000000..b63bd005 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/August/Metro_areas_EN_ZH_JP_humbling_watermark.py @@ -0,0 +1,58 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [180741, 89132, 74250, 38822, 41763] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220820070855/https://www.104.com.tw/jb/category/?cat=2") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From c2fbe6ac19cc28d6f23179a677e9ac2bd61d7bda Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:00:32 +0800 Subject: [PATCH 0998/2002] Committed 2022/08/26 --- .../Year_over_year_2008-2021_watermark.py | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021_watermark.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021_watermark.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021_watermark.py new file mode 100644 index 00000000..25b418bd --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021_watermark.py @@ -0,0 +1,124 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] + +death = [[115, 261, 226, 371, 371, 398], # 2008 + [133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + [132, 266, 269, 283, 295, 333], # 2021 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2008-2021)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary, color=colour.CSS4_COLORS.get('palegreen'), linewidth=1, ecolor=colour.CSS4_COLORS.get('dodgerblue')) # Create a bar chart and its format. [7][11][12] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html +# 11. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar.html#matplotlib.axes.Axes.bar +# 12. https://matplotlib.org/stable/gallery/color/named_colors.html From be62e3fec7a7d921d812d8802fb9afa5b7aeb06e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:02:19 +0800 Subject: [PATCH 0999/2002] Committed 2022/08/26 --- .../Road safety/Year_over_year_2008-2021_watermark.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021_watermark.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021_watermark.py index 25b418bd..573fabf7 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2021_watermark.py @@ -107,6 +107,10 @@ text.set_path_effects([path_effects.Normal()]) +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + plt.show() # References: From 4f01ef00aaa1e8bb0eca4e315fd972abcb6fb6ef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:10:28 +0800 Subject: [PATCH 1000/2002] Committed 2022/08/26 --- .../May_bar_table_watermark.py | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py new file mode 100644 index 00000000..fdd0ea99 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py @@ -0,0 +1,107 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March + [8, 25, 23, 23, 27, 31], # April + [7, 33, 16, 27, 27, 27], # May + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-05)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 4be504bbf9b87ad5a8bba2b20cbf4dcca83434dd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:14:42 +0800 Subject: [PATCH 1001/2002] Committed 2022/08/26 --- .../Month_over_month_2022/May_bar_table_watermark.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py index fdd0ea99..deab5201 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py @@ -95,6 +95,10 @@ text.set_path_effects([path_effects.Normal()]) +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + plt.show() # References: From ae5f9025f8e8e3972ee58a3e4c9fa2471532a95a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:18:04 +0800 Subject: [PATCH 1002/2002] Committed 2022/08/26 --- .../Month_over_month_2022/May_bar_table_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py index deab5201..b7597ca5 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark.py @@ -97,7 +97,7 @@ img = image.imread('CC-BY.png') -plt.figimage(X=img, xo=800, yo=800, alpha=0.9) +plt.figimage(X=img, xo=700, yo=700, alpha=0.9) plt.show() From f1f43bac204f429a5bcfd9057ff7c94f976eea92 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:23:33 +0800 Subject: [PATCH 1003/2002] Committed 2022/08/26 --- .../May_bar_table_watermark2.py | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark2.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark2.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark2.py new file mode 100644 index 00000000..ed2da31b --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/May_bar_table_watermark2.py @@ -0,0 +1,111 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March + [8, 25, 23, 23, 27, 31], # April + [7, 33, 16, 27, 27, 27], # May + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-05)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From ecb221ec12e5e020f30ae058e93eabcad9fd9d1e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:29:34 +0800 Subject: [PATCH 1004/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py new file mode 100644 index 00000000..4b9c8981 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -0,0 +1,3 @@ +import pandas as pd +import matplotlib.pyplot as plt + From 70792794c74a9627c7888282dd79d0d655b783bd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 18:54:19 +0800 Subject: [PATCH 1005/2002] Committed 2022/08/26 --- .../April2022.py | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py new file mode 100644 index 00000000..e2ba0c82 --- /dev/null +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py @@ -0,0 +1,134 @@ +import matplotlib.pyplot as plt + +year = ["2010", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21/08", "'21/09"] + +northTW = [(3897367 + 2618772 + 460486 + 2002060 + 513015 + 384134 + 415344), # 2010 + (3916451 + 2650968 + 459061 + 2013305 + 517641 + 379927 + 420052), # 2011 + (3939305 + 2673226 + 458595 + 2030161 + 523993 + 377153 + 425071), # 2012 + (3954929 + 2686516 + 458456 + 2044023 + 530486 + 374914 + 428483), # 2013 + (3966818 + 2702315 + 458777 + 2058328 + 537630 + 373077 + 431988), # 2014 + (3970644 + 2704810 + 458117 + 2105780 + 542042 + 372105 + 434060), # 2015 + (3979208 + 2695704 + 457538 + 2147763 + 547481 + 372100 + 437337), # 2016 + (3986689 + 2683257 + 456607 + 2188017 + 552169 + 371458 + 441132), # 2017 + (3995717 + 2668572 + 455221 + 2220872 + 557010 + 370155 + 445635), # 2018 + (4018696 + 2645041 + 454178 + 2249037 + 563933 + 368893 + 448803), # 2019 + (4030954 + 2602418 + 453087 + 2268807 + 570775 + 367577 + 451412), # 2020 + # (4019898 + 2553798 + 451635 + 2272976 + 573858 + 365591 + 452781), # 2021/08 + # (4017632 + 2544720 + 451422 + 2272812 + 574512 + 365117 + 452882), # 2021/09 + (4011586 + 2531659 + 450944 + 2272452 + 575131 + 364350 + 452665), # 2021/11 + ] + +centralTW = [(2648419 + 560968 + 1307286 + 526491 + 717653), # 2010 + (2664394 + 562010 + 1303039 + 522807 + 713556), # 2011 + (2684893 + 563976 + 1299868 + 520196 + 710991), # 2012 + (2701661 + 565554 + 1296013 + 517222 + 707792), # 2013 + (2719835 + 567132 + 1291474 + 514315 + 705356), # 2014 + (2744445 + 563912 + 1289072 + 509490 + 699633), # 2015 + (2767239 + 559189 + 1287146 + 505163 + 694873), # 2016 + (2787070 + 553807 + 1282458 + 501051 + 690373), # 2017 + (2803894 + 548863 + 1277824 + 497031 + 686022), # 2018 + (2815261 + 545459 + 1272802 + 494112 + 681306), # 2019 + (2820787 + 542590 + 1266670 + 490832 + 676873), # 2020 + # (2818139 + 539879 + 1259246 + 487185 + 672557), # 2021/08 + # (2816393 + 539361 + 1257991 + 486455 + 671686), # 2021/09 + (2814422 + 538568 + 1256062 + 485479 + 670664), # 2021/11 + ] + +southTW = [(1873794 + 2773483 + 543248 + 873509 + 272390), # 2010 + (1876960 + 2774470 + 537942 + 864529 + 271526), # 2011 + (1881645 + 2778659 + 533723 + 858441 + 271220), # 2012 + (1883208 + 2779877 + 529229 + 852286 + 270872), # 2013 + (1884284 + 2778992 + 524783 + 847917 + 270883), # 2014 + (1885541 + 2778918 + 519839 + 841253 + 270366), # 2015 + (1886033 + 2779371 + 515320 + 835792 + 269874), # 2016 + (1886522 + 2776912 + 511182 + 829939 + 269398), # 2017 + (1883831 + 2773533 + 507068 + 825406 + 268622), # 2018 + (1880906 + 2773198 + 503113 + 819184 + 267690), # 2019 + (1874917 + 2765932 + 499481 + 812658 + 266005), # 2020 + # (1867554 + 2753530 + 495662 + 807159 + 264858), # 2021/08 + # (1866073 + 2751317 + 494868 + 806305 + 265002), # 2021/09 + (1863435 + 2746939 + 493855 + 805177 + 264954), # 2021/11 + ] + +eastTW = [(338805 + 230673), # 2010 + (336838 + 228290), # 2011 + (335190 + 226252), # 2012 + (333897 + 224821), # 2013 + (333392 + 224470), # 2014 + (331945 + 222452), # 2015 + (330911 + 220802), # 2016 + (329237 + 219540), # 2017 + (327968 + 218919), # 2018 + (326247 + 216781), # 2019 + (324372 + 215261), # 2020 + # (322506 + 213956), # 2021/08 + # (322260 + 213818), # 2021/09 + (321697 + 213534), # 2021/11 + ] + +outlyingTW = [(107308 + 96918), # 2010 Fujian + Penghu + (113989 + 97157), # 2011 + (124421 + 98843), # 2012 + (132878 + 100400), # 2013 + (140229 + 101758), # 2014 + (145346 + 102304), # 2015 + (147709 + 103263), # 2016 + (150336 + 104073), # 2017 + (152329 + 104440), # 2018 + (153274 + 105207), # 2019 + (153876 + 105952), # 2020 + # (140004 + 13420 + 105645), # 2021/08 + # (140856 + 13429 + 106036), # 2021/09 + (141327 + 13577 + 106310), # 2021/11 + ] + +x = range(10, 22) + +date = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] +index = [(330.60 + 129.45) / 2] +housing_index = [(91.03 + 191.07) / 2, # 2010/04 (Guotai index + Xinyi index) / 2 + (102.42 + 218.72) / 2, # 2011/04 + (109.85 + 241.27) / 2, # 2012/04 + (117.29 + 278.51) / 2, # 2013/04 + (124.60 + 297.78) / 2, # 2014/04 + (124.61 + 289.3) / 2, # 2015/04 + (95.92 + 279.74) / 2, # 2016/04 + (101.89 + 282.36) / 2, # 2017/04 + (107.48 + 285.55) / 2, # 2018/04 + (114.48 + 294.46) / 2, # 2019/04 + (125.22 + 302.61) / 2, # 2020/04 + # (129.45 + 333.60) / 2, # 2021/04 + (134.69 + 341.62) / 2, # 2021/07 + (128.33 + ) + ] + +figure, axes = plt.subplots() + +axes.stackplot(x, northTW, centralTW, southTW, eastTW, outlyingTW, labels=year) +axes.set_ylim(23350000, 23700000) +axes.ticklabel_format(style='sci', axis='y', scilimits=(0, 0)) +axes.set_xlabel("Year\n" + "References:\n" + "1. https://www.ris.gov.tw/app/portal/346 \n" + "2. https://www.macromicro.me/collections/15/\n" + "tw-housing-relative/124/tw-housing-price-sinyi") + +axes.set_ylabel("Population (Unit: 10 millions)") + +axes2 = axes.twinx() +axes2.set_ylabel("Yearly Housing Price Index (2010/04 - 2021/07) \n" + "Method: (Guotai + Xinyi) / 2", color='goldenrod') + +axes2.plot(x, housing_index, color='gold') +axes2.tick_params(axis='y', labelcolor='goldenrod') + +plt.grid(linewidth=0.3) +plt.title("Taiwan's population change from 2010 - 2021/11 \n in relation to Annual Housing Price Index") + +figure.tight_layout() + +plt.show() + +# References: +# 1. https://pip.moi.gov.tw/V3/E/SCRE0201.aspx +# 2. https://www.cathay-red.com.tw/tw/About/House From 3bc0b2a3ff285bdc514cfa90dd960cf425195f68 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 18:57:14 +0800 Subject: [PATCH 1006/2002] Committed 2022/08/26 --- .../Population_versus_housing_price_index/April2022.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py index e2ba0c82..5c01ff92 100644 --- a/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py @@ -132,3 +132,4 @@ # References: # 1. https://pip.moi.gov.tw/V3/E/SCRE0201.aspx # 2. https://www.cathay-red.com.tw/tw/About/House +# 3. https://www.sinyinews.com.tw/quarterly From 267505ce329272ff020ffd6d748115d8a4f5d0c8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:10:20 +0800 Subject: [PATCH 1007/2002] Committed 2022/08/26 --- .../Population_versus_housing_price_index/2022_Quarter1.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 The attainments and realizations of my dreams/Population_versus_housing_price_index/2022_Quarter1.py diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/2022_Quarter1.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/2022_Quarter1.py new file mode 100644 index 00000000..133c42ae --- /dev/null +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/2022_Quarter1.py @@ -0,0 +1,4 @@ +import matplotlib.pyplot as plt + +year = ["2000", "'01", "'02", "'03", "'04", "'05", "'06", "'07", "'08", "'09", "'10", "'11", "'12", + "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21"] \ No newline at end of file From 128dd27744d837b50df133a0f955d6579918b3db Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:11:18 +0800 Subject: [PATCH 1008/2002] Committed 2022/08/26 --- .../Population_versus_housing_price_index/April2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py b/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py index 5c01ff92..8e780101 100644 --- a/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py +++ b/The attainments and realizations of my dreams/Population_versus_housing_price_index/April2022.py @@ -99,7 +99,7 @@ (125.22 + 302.61) / 2, # 2020/04 # (129.45 + 333.60) / 2, # 2021/04 (134.69 + 341.62) / 2, # 2021/07 - (128.33 + ) + # (128.33 + ) ] figure, axes = plt.subplots() From 2bfb1c7173fe60f2524f60188ae8f559a0a98970 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:23:29 +0800 Subject: [PATCH 1009/2002] Committed 2022/08/26 --- .../Annual 2022.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py new file mode 100644 index 00000000..afb6e6da --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py @@ -0,0 +1,20 @@ +import matplotlib.pyplot as plt +import numpy as np + +plt.rcdefaults() + +fig, ax = plt.subplots() + +# Example data +city = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') +y_pos = np.arange(len(city)) +performance = 3 + 10 * np.random.rand(len(city)) +error = np.random.rand(len(city)) + +ax.barh(y_pos, performance, xerr=error, align='center') +ax.set_yticks(y_pos, labels=city) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel('Performance') +ax.set_title('How fast do you want to go today?') + +plt.show() \ No newline at end of file From 400213ee98005d42d9cd875c3cebced027f474be Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:29:26 +0800 Subject: [PATCH 1010/2002] Committed 2022/08/26 --- .../Annual number of births in Taiwan/Annual 2022.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py index afb6e6da..facaf569 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py @@ -6,15 +6,15 @@ fig, ax = plt.subplots() # Example data -city = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') +city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung') y_pos = np.arange(len(city)) -performance = 3 + 10 * np.random.rand(len(city)) +births = [8297, 12111, 10216, 9955, 5078, 9013] error = np.random.rand(len(city)) -ax.barh(y_pos, performance, xerr=error, align='center') +ax.barh(y_pos, births, xerr=error, align='center') ax.set_yticks(y_pos, labels=city) ax.invert_yaxis() # labels read top-to-bottom -ax.set_xlabel('Performance') -ax.set_title('How fast do you want to go today?') +ax.set_xlabel("# of births\nReference: https://statis.moi.gov.tw/micst/stmain.jsp?sys=100") +ax.set_title('The number of births by city (2022-01-07) ') -plt.show() \ No newline at end of file +plt.show() From 23b3f0221e31f28c9f7553120ecf5eaa16bf1bd7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:31:09 +0800 Subject: [PATCH 1011/2002] Committed 2022/08/26 --- .../Annual number of births in Taiwan/Annual 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py index facaf569..a7bb7aae 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py @@ -3,7 +3,7 @@ plt.rcdefaults() -fig, ax = plt.subplots() +fig, ax = plt.subplots(figsize=(9, 8)) # Example data city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung') From 42e31c52523939815d0ab9296b072193e211c384 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:32:37 +0800 Subject: [PATCH 1012/2002] Committed 2022/08/26 --- .../Annual number of births in Taiwan/Annual 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py index a7bb7aae..a45c39af 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py @@ -3,7 +3,7 @@ plt.rcdefaults() -fig, ax = plt.subplots(figsize=(9, 8)) +fig, ax = plt.subplots(figsize=(8, 8)) # Example data city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung') From 0f53709e085c3ec11bc25ae5b793355ef3f7fade Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:42:38 +0800 Subject: [PATCH 1013/2002] Committed 2022/08/26 --- .../Annual number of births in Taiwan/Annual 2022.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py index a45c39af..0f887c4f 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py @@ -11,10 +11,14 @@ births = [8297, 12111, 10216, 9955, 5078, 9013] error = np.random.rand(len(city)) -ax.barh(y_pos, births, xerr=error, align='center') +horizontal_bar = ax.barh(y_pos, births, xerr=error, align='center') ax.set_yticks(y_pos, labels=city) ax.invert_yaxis() # labels read top-to-bottom ax.set_xlabel("# of births\nReference: https://statis.moi.gov.tw/micst/stmain.jsp?sys=100") -ax.set_title('The number of births by city (2022-01-07) ') +ax.set_title('The number of births by city (2022/01-07) ') + +# Label with given captions, custom padding and annotate options +ax.bar_label(horizontal_bar, labels=['簣%.2f' % e for e in error], + padding=8, color='b', fontsize=14) plt.show() From c740799ea668aafd29c38daf16f907c93ea52299 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:44:07 +0800 Subject: [PATCH 1014/2002] Committed 2022/08/26 --- .../Annual number of births in Taiwan/Annual 2022.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py index 0f887c4f..c19022ae 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py @@ -18,7 +18,6 @@ ax.set_title('The number of births by city (2022/01-07) ') # Label with given captions, custom padding and annotate options -ax.bar_label(horizontal_bar, labels=['簣%.2f' % e for e in error], - padding=8, color='b', fontsize=14) +ax.bar_label(horizontal_bar, labels=['簣%.2f' % e for e in error], padding=8, color='b', fontsize=14) plt.show() From da1491deaca583d06a1b8a7393544e6aa6bad75f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:45:56 +0800 Subject: [PATCH 1015/2002] Committed 2022/08/26 --- .../Annual number of births in Taiwan/Annual 2022.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py index c19022ae..2cd19780 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py @@ -5,7 +5,6 @@ fig, ax = plt.subplots(figsize=(8, 8)) -# Example data city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung') y_pos = np.arange(len(city)) births = [8297, 12111, 10216, 9955, 5078, 9013] @@ -21,3 +20,6 @@ ax.bar_label(horizontal_bar, labels=['簣%.2f' % e for e in error], padding=8, color='b', fontsize=14) plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html From 8c5ccce7de0c0a3e4eb02734cb7ee039dee1803f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:46:33 +0800 Subject: [PATCH 1016/2002] Committed 2022/08/26 --- .../Annual number of births in Taiwan/Annual 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py index 2cd19780..17d1edf4 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py @@ -17,7 +17,7 @@ ax.set_title('The number of births by city (2022/01-07) ') # Label with given captions, custom padding and annotate options -ax.bar_label(horizontal_bar, labels=['簣%.2f' % e for e in error], padding=8, color='b', fontsize=14) +ax.bar_label(horizontal_bar, labels=births, padding=8, color='b', fontsize=14) plt.show() From 52a657023f9abb53dd20350e97cc6b2ff5ad2bd3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:49:16 +0800 Subject: [PATCH 1017/2002] Committed 2022/08/26 --- .../Annual number of births in Taiwan/Annual 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py index 17d1edf4..944e3cac 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022.py @@ -3,7 +3,7 @@ plt.rcdefaults() -fig, ax = plt.subplots(figsize=(8, 8)) +fig, ax = plt.subplots(figsize=(7, 7)) city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung') y_pos = np.arange(len(city)) From 899299415a9170ee2938d3f05d30e35dd5a6840f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:53:20 +0800 Subject: [PATCH 1018/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 4b9c8981..207f0d91 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -1,3 +1,69 @@ import pandas as pd import matplotlib.pyplot as plt +import numpy as np + +np.random.seed(19680801) + + +def gradient_image(ax, extent, direction=0.3, cmap_range=(0, 1), **kwargs): + """ + Draw a gradient image based on a colormap. + + Parameters + ---------- + ax : Axes + The axes to draw on. + extent + The extent of the image as (xmin, xmax, ymin, ymax). + By default, this is in Axes coordinates but may be + changed using the *transform* keyword argument. + direction : float + The direction of the gradient. This is a number in + range 0 (=vertical) to 1 (=horizontal). + cmap_range : float, float + The fraction (cmin, cmax) of the colormap that should be + used for the gradient, where the complete colormap is (0, 1). + **kwargs + Other parameters are passed on to `.Axes.imshow()`. + In particular useful is *cmap*. + """ + phi = direction * np.pi / 2 + v = np.array([np.cos(phi), np.sin(phi)]) + X = np.array([[v @ [1, 0], v @ [1, 1]], + [v @ [0, 0], v @ [0, 1]]]) + a, b = cmap_range + X = a + (b - a) / X.max() * X + im = ax.imshow(X, extent=extent, interpolation='bicubic', + vmin=0, vmax=1, **kwargs) + return im + + +def gradient_bar(ax, x, y, width=0.5, bottom=0): + for left, top in zip(x, y): + right = left + width + gradient_image(ax, extent=(left, right, bottom, top), + cmap=plt.cm.Blues_r, cmap_range=(0, 0.8)) + + +xmin, xmax = xlim = 0, 10 +ymin, ymax = ylim = 0, 1 + +fig, ax = plt.subplots() +ax.set(xlim=xlim, ylim=ylim, autoscale_on=False) + +# background image +gradient_image(ax, direction=1, extent=(0, 1, 0, 1), transform=ax.transAxes, + cmap=plt.cm.RdYlGn, cmap_range=(0.2, 0.8), alpha=0.5) + +N = 10 +x = np.arange(N) + 0.15 +y = np.random.rand(N) +gradient_bar(ax, x, y, width=0.7) +ax.set_aspect('auto') + + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/gradient_bar.html From b533ab39b561283b357684a540bd5ba342c586c6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:03:11 +0800 Subject: [PATCH 1019/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 207f0d91..d2d51f13 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -46,15 +46,15 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): cmap=plt.cm.Blues_r, cmap_range=(0, 0.8)) -xmin, xmax = xlim = 0, 10 -ymin, ymax = ylim = 0, 1 +# xmin, xmax = xlim = 0, 10 +ymin, ymax = ylim = 150000, 330000 fig, ax = plt.subplots() -ax.set(xlim=xlim, ylim=ylim, autoscale_on=False) +ax.set(ylim=ylim, autoscale_on=False) # background image -gradient_image(ax, direction=1, extent=(0, 1, 0, 1), transform=ax.transAxes, - cmap=plt.cm.RdYlGn, cmap_range=(0.2, 0.8), alpha=0.5) +gradient_image(ax, direction=1, extent=(0, 1, 0, 1), transform=ax.transAxes, cmap=plt.cm.RdYlGn, + cmap_range=(0.2, 0.8), alpha=0.5) N = 10 x = np.arange(N) + 0.15 From cdd51f827ada01b61644dab409e95f4ffe764bb8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:16:26 +0800 Subject: [PATCH 1020/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index d2d51f13..9daea2ab 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -1,9 +1,9 @@ import pandas as pd import matplotlib.pyplot as plt - +import matplotlib import numpy as np -np.random.seed(19680801) +matplotlib.rc('font', family="MS Gothic") def gradient_image(ax, extent, direction=0.3, cmap_range=(0, 1), **kwargs): @@ -42,9 +42,17 @@ def gradient_image(ax, extent, direction=0.3, cmap_range=(0, 1), **kwargs): def gradient_bar(ax, x, y, width=0.5, bottom=0): for left, top in zip(x, y): right = left + width - gradient_image(ax, extent=(left, right, bottom, top), - cmap=plt.cm.Blues_r, cmap_range=(0, 0.8)) + gradient_image(ax, extent=(left, right, bottom, top), cmap=plt.cm.Blues_r, cmap_range=(0, 0.8)) + + + +year_num = np.arange(0, 29, 1) +print(year_num) + +year_num2 = range(0, 29, 1) +print(year_num2) +position_vacancies = [176040, 87874, 74498, 38787, 39508] # xmin, xmax = xlim = 0, 10 ymin, ymax = ylim = 150000, 330000 From 5d45ca63a38c2b19d42c90307999303b0fa3e2ea Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:22:51 +0800 Subject: [PATCH 1021/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 9daea2ab..e3fb57b8 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -45,14 +45,14 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): gradient_image(ax, extent=(left, right, bottom, top), cmap=plt.cm.Blues_r, cmap_range=(0, 0.8)) - +# arange automatically balloons into a list with 29 elements from 1 to 28. [2] year_num = np.arange(0, 29, 1) print(year_num) year_num2 = range(0, 29, 1) print(year_num2) -position_vacancies = [176040, 87874, 74498, 38787, 39508] +number_of_births = [176040, 87874, 74498, 38787, 39508] # xmin, xmax = xlim = 0, 10 ymin, ymax = ylim = 150000, 330000 @@ -75,3 +75,4 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): # References: # 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/gradient_bar.html +# 2. https://numpy.org/doc/stable/reference/generated/numpy.arange.html From 37ca9879881be0c355bb78eeab980e4ff383c5fd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:24:48 +0800 Subject: [PATCH 1022/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index e3fb57b8..06cb19ea 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -54,6 +54,9 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): number_of_births = [176040, 87874, 74498, 38787, 39508] +label = np.arange(1994, 2021, 1) +print(label) + # xmin, xmax = xlim = 0, 10 ymin, ymax = ylim = 150000, 330000 From f24be2f84c7fb3f7d63264a85890bbe1067bfea6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:25:09 +0800 Subject: [PATCH 1023/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 06cb19ea..4de40c46 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -54,7 +54,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): number_of_births = [176040, 87874, 74498, 38787, 39508] -label = np.arange(1994, 2021, 1) +label = np.arange(1994, 2022, 1) print(label) # xmin, xmax = xlim = 0, 10 From fc1d2f7cc098cdf18cc10082440909809fa3d216 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:43:55 +0800 Subject: [PATCH 1024/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 4de40c46..5d9f0e31 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -52,7 +52,9 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): year_num2 = range(0, 29, 1) print(year_num2) -number_of_births = [176040, 87874, 74498, 38787, 39508] +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820] label = np.arange(1994, 2022, 1) print(label) @@ -79,3 +81,5 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): # References: # 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/gradient_bar.html # 2. https://numpy.org/doc/stable/reference/generated/numpy.arange.html + +# Data: https://statis.moi.gov.tw/micst/stmain.jsp?sys=220&ym=8300&ymt=11000&kind=21&type=1&funid=c0120101&cycle=4&outmode=0&compmode=0&outkind=1&fld0=1&cod00=1&rdm=fu0Necq9 From 9573daa0751a112661797bece233d61de89e72f8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:44:42 +0800 Subject: [PATCH 1025/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 5d9f0e31..748d97b5 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -49,14 +49,14 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): year_num = np.arange(0, 29, 1) print(year_num) -year_num2 = range(0, 29, 1) +year_num2 = range(0, 30, 1) print(year_num2) number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820] -label = np.arange(1994, 2022, 1) +label = np.arange(1994, 2023, 1) print(label) # xmin, xmax = xlim = 0, 10 From 9b7e439a74a7562137750a78a376ff7d7b0fd2f0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:47:06 +0800 Subject: [PATCH 1026/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 748d97b5..844ffc9b 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -54,7 +54,8 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, - 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820] + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137, 9617, 12788, 11222, 9442, 10943, 10950)] label = np.arange(1994, 2023, 1) print(label) From 409a759d6a69de56a506d7a67228d34d8e4fca0a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:51:02 +0800 Subject: [PATCH 1027/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 844ffc9b..01fc272e 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -73,7 +73,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): N = 10 x = np.arange(N) + 0.15 y = np.random.rand(N) -gradient_bar(ax, x, y, width=0.7) +gradient_bar(ax=ax, x=x, y=y, width=0.7) ax.set_aspect('auto') From d58f6c117573a3c8fe814961b421866624000c75 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:53:56 +0800 Subject: [PATCH 1028/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 01fc272e..3510429a 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -73,7 +73,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): N = 10 x = np.arange(N) + 0.15 y = np.random.rand(N) -gradient_bar(ax=ax, x=x, y=y, width=0.7) +gradient_bar(ax=ax, x=x, y=number_of_births, width=0.7) ax.set_aspect('auto') From c1f9bb59daced9cdcac258074a2721323b95f5bc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:55:21 +0800 Subject: [PATCH 1029/2002] Committed 2022/08/26 --- Matplotlib Official Primer/Multiple Yaxis With Spines.py | 6 +++--- .../The number of births till 2021.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Matplotlib Official Primer/Multiple Yaxis With Spines.py b/Matplotlib Official Primer/Multiple Yaxis With Spines.py index c149e1a7..18348cdf 100644 --- a/Matplotlib Official Primer/Multiple Yaxis With Spines.py +++ b/Matplotlib Official Primer/Multiple Yaxis With Spines.py @@ -25,9 +25,9 @@ twin1.set_ylabel("Temperature") twin2.set_ylabel("Velocity") -ax.yaxis.label.set_color(p1.get_color()) -twin1.yaxis.label.set_color(p2.get_color()) -twin2.yaxis.label.set_color(p3.get_color()) +ax.yaxis.label_year.set_color(p1.get_color()) +twin1.yaxis.label_year.set_color(p2.get_color()) +twin2.yaxis.label_year.set_color(p3.get_color()) tkw = dict(size=4, width=1.5) ax.tick_params(axis='y', colors=p1.get_color(), **tkw) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 3510429a..1370bdb9 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -57,8 +57,8 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, (13137, 9617, 12788, 11222, 9442, 10943, 10950)] -label = np.arange(1994, 2023, 1) -print(label) +label_year = np.arange(1994, 2023, 1) +print(label_year) # xmin, xmax = xlim = 0, 10 ymin, ymax = ylim = 150000, 330000 @@ -73,7 +73,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): N = 10 x = np.arange(N) + 0.15 y = np.random.rand(N) -gradient_bar(ax=ax, x=x, y=number_of_births, width=0.7) +gradient_bar(ax=ax, x=label_year, y=number_of_births, width=0.7) ax.set_aspect('auto') From f8b0c5db9e003742c7fd99bbe089c56a1e018b91 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 20:57:39 +0800 Subject: [PATCH 1030/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 1370bdb9..2d10ffc2 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -70,9 +70,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): gradient_image(ax, direction=1, extent=(0, 1, 0, 1), transform=ax.transAxes, cmap=plt.cm.RdYlGn, cmap_range=(0.2, 0.8), alpha=0.5) -N = 10 -x = np.arange(N) + 0.15 -y = np.random.rand(N) + gradient_bar(ax=ax, x=label_year, y=number_of_births, width=0.7) ax.set_aspect('auto') From 950275820d5e2228adedb8158be60d78f28092b3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 21:00:55 +0800 Subject: [PATCH 1031/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 2d10ffc2..22a257f9 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -74,6 +74,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): gradient_bar(ax=ax, x=label_year, y=number_of_births, width=0.7) ax.set_aspect('auto') +plt.title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) plt.show() From 2474ccb3127afb6da0d9c0d1f986d047d7c9447f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 21:02:57 +0800 Subject: [PATCH 1032/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 22a257f9..fe42feb2 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -63,7 +63,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): # xmin, xmax = xlim = 0, 10 ymin, ymax = ylim = 150000, 330000 -fig, ax = plt.subplots() +fig, ax = plt.subplots(figsize=(8, 7)) ax.set(ylim=ylim, autoscale_on=False) # background image From 15330a1c7226c3fb6ad674b8128fed56e54abc3a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 21:09:13 +0800 Subject: [PATCH 1033/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index fe42feb2..d0c0dcde 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -63,7 +63,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): # xmin, xmax = xlim = 0, 10 ymin, ymax = ylim = 150000, 330000 -fig, ax = plt.subplots(figsize=(8, 7)) +fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 7)) ax.set(ylim=ylim, autoscale_on=False) # background image From 400c2a4184f98a1bde31987cd9097c721e48e8f9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 21:18:46 +0800 Subject: [PATCH 1034/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index d0c0dcde..98b693f9 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -63,16 +63,16 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): # xmin, xmax = xlim = 0, 10 ymin, ymax = ylim = 150000, 330000 -fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 7)) -ax.set(ylim=ylim, autoscale_on=False) +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(8, 7)) +axe.set(ylim=ylim, autoscale_on=False) # background image -gradient_image(ax, direction=1, extent=(0, 1, 0, 1), transform=ax.transAxes, cmap=plt.cm.RdYlGn, +gradient_image(axe, direction=1, extent=(0, 1, 0, 1), transform=axe.transAxes, cmap=plt.cm.RdYlGn, cmap_range=(0.2, 0.8), alpha=0.5) -gradient_bar(ax=ax, x=label_year, y=number_of_births, width=0.7) -ax.set_aspect('auto') +gradient_bar(ax=axe, x=label_year, y=number_of_births, width=0.7) +axe.set_aspect('auto') plt.title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) From bbf79100bef2fd016f06a3d2400ef5a04555e903 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 21:30:43 +0800 Subject: [PATCH 1035/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 98b693f9..91583c06 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -72,9 +72,11 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): gradient_bar(ax=axe, x=label_year, y=number_of_births, width=0.7) -axe.set_aspect('auto') -plt.title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) +axe.set_aspect('auto') +axe.set_xlabel("Year") +axe.set_ylabel("The number of births") +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) plt.show() From 8eea427866baab16127efe30254c084fc9b35b33 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 21:33:56 +0800 Subject: [PATCH 1036/2002] Committed 2022/08/26 --- .../Annual 2022 watermark.py | 25 ++++++++++++++++++ .../CC-BY.png | Bin 0 -> 1283 bytes 2 files changed, 25 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/CC-BY.png diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py new file mode 100644 index 00000000..944e3cac --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py @@ -0,0 +1,25 @@ +import matplotlib.pyplot as plt +import numpy as np + +plt.rcdefaults() + +fig, ax = plt.subplots(figsize=(7, 7)) + +city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung') +y_pos = np.arange(len(city)) +births = [8297, 12111, 10216, 9955, 5078, 9013] +error = np.random.rand(len(city)) + +horizontal_bar = ax.barh(y_pos, births, xerr=error, align='center') +ax.set_yticks(y_pos, labels=city) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel("# of births\nReference: https://statis.moi.gov.tw/micst/stmain.jsp?sys=100") +ax.set_title('The number of births by city (2022/01-07) ') + +# Label with given captions, custom padding and annotate options +ax.bar_label(horizontal_bar, labels=births, padding=8, color='b', fontsize=14) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/CC-BY.png b/The attainments and realizations of my dreams/Annual number of births in Taiwan/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Fri, 26 Aug 2022 21:39:38 +0800 Subject: [PATCH 1037/2002] Committed 2022/08/26 --- .../Annual 2022 watermark.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py index 944e3cac..f996c3de 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py @@ -1,5 +1,6 @@ import matplotlib.pyplot as plt import numpy as np +import matplotlib.image as image plt.rcdefaults() @@ -19,6 +20,10 @@ # Label with given captions, custom padding and annotate options ax.bar_label(horizontal_bar, labels=births, padding=8, color='b', fontsize=14) +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=600, alpha=0.9) + plt.show() # References: From e95a882a8a44b1739732be18281ac0d62d89ec12 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 21:42:55 +0800 Subject: [PATCH 1038/2002] Committed 2022/08/26 --- .../Annual number of births in Taiwan/Annual 2022 watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py index f996c3de..cdf19e4f 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark.py @@ -22,7 +22,7 @@ img = image.imread('CC-BY.png') -plt.figimage(X=img, xo=600, yo=600, alpha=0.9) +plt.figimage(X=img, xo=600, yo=650, alpha=0.9) plt.show() From f7d3182e043efb65b5fca6597e53f107bfbfaeeb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 22:16:51 +0800 Subject: [PATCH 1039/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 91583c06..09d8f51e 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -49,6 +49,8 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): year_num = np.arange(0, 29, 1) print(year_num) +year_num = list(year_num) + year_num2 = range(0, 30, 1) print(year_num2) From 48ae014a49ddc225d32ea4b72a7b43f3acf9e227 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 22:23:19 +0800 Subject: [PATCH 1040/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 09d8f51e..fd122ab9 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -62,6 +62,10 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): label_year = np.arange(1994, 2023, 1) print(label_year) +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + # xmin, xmax = xlim = 0, 10 ymin, ymax = ylim = 150000, 330000 @@ -80,6 +84,8 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): axe.set_ylabel("The number of births") axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) +plt.xticks(year_num, labels=label, rotation=7, fontsize=12) + plt.show() # References: From f100bd7b90ce1e96250c692718d5dbd56bae5c52 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 22:24:08 +0800 Subject: [PATCH 1041/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index fd122ab9..403569f6 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -84,7 +84,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): axe.set_ylabel("The number of births") axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) -plt.xticks(year_num, labels=label, rotation=7, fontsize=12) +plt.xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) plt.show() From 88ec0c27c3206022ac6fff8f0c9c36968ccbc92e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 22:26:14 +0800 Subject: [PATCH 1042/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 403569f6..4cc14bd5 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -77,14 +77,15 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): cmap_range=(0.2, 0.8), alpha=0.5) -gradient_bar(ax=axe, x=label_year, y=number_of_births, width=0.7) - axe.set_aspect('auto') axe.set_xlabel("Year") axe.set_ylabel("The number of births") axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) plt.xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) +plt.tick_params(axis='y', labelsize=12) + +gradient_bar(ax=axe, x=label_year, y=number_of_births, width=0.7) plt.show() From 980b85ac2bd8a409ae140d8fb1af89f4bb9b846e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 22:38:49 +0800 Subject: [PATCH 1043/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 4cc14bd5..2ee7254a 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -85,7 +85,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): plt.xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) plt.tick_params(axis='y', labelsize=12) -gradient_bar(ax=axe, x=label_year, y=number_of_births, width=0.7) +gradient_bar(ax=axe, x=year_num, y=number_of_births, width=0.7) plt.show() From 24db57873bc05efdafac9a0e3a4b0dcebc7d0026 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 22:43:38 +0800 Subject: [PATCH 1044/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 2ee7254a..8fe1b591 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -46,7 +46,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): # arange automatically balloons into a list with 29 elements from 1 to 28. [2] -year_num = np.arange(0, 29, 1) +year_num = np.arange(0, 30, 1) print(year_num) year_num = list(year_num) From c7d5bb61e081a534380ed7ea70fb958e752f45c2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 22:50:52 +0800 Subject: [PATCH 1045/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 8fe1b591..44ecccb7 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -46,12 +46,12 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): # arange automatically balloons into a list with 29 elements from 1 to 28. [2] -year_num = np.arange(0, 30, 1) +year_num = np.arange(1, 30, 1) print(year_num) year_num = list(year_num) -year_num2 = range(0, 30, 1) +year_num2 = range(1, 30, 1) print(year_num2) number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, From 6aab0bee57cdebbb96fb55e8b941d1f779c8f961 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 22:56:36 +0800 Subject: [PATCH 1046/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 44ecccb7..74867cf2 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -54,6 +54,14 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): year_num2 = range(1, 30, 1) print(year_num2) +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + +year_number2 = [] + +for i in np.arange(1, 30, 1) + year_number2.append(i) + + number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, From fabcdd1bca89809ccec6b05c9083704679984994 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 23:02:52 +0800 Subject: [PATCH 1047/2002] Committed 2022/08/26 --- .../The number of births till 2021.py | 3 +- .../The number of births till 2022.py | 112 ++++++++++++++++++ 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py index 74867cf2..07311eeb 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2021.py @@ -58,9 +58,10 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): year_number2 = [] -for i in np.arange(1, 30, 1) +for i in np.arange(1, 30, 1): year_number2.append(i) +print(year_number2) number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py new file mode 100644 index 00000000..fc1b9088 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py @@ -0,0 +1,112 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np + +matplotlib.rc('font', family="MS Gothic") + + +def gradient_image(ax, extent, direction=0.3, cmap_range=(0, 1), **kwargs): + """ + Draw a gradient image based on a colormap. + + Parameters + ---------- + ax : Axes + The axes to draw on. + extent + The extent of the image as (xmin, xmax, ymin, ymax). + By default, this is in Axes coordinates but may be + changed using the *transform* keyword argument. + direction : float + The direction of the gradient. This is a number in + range 0 (=vertical) to 1 (=horizontal). + cmap_range : float, float + The fraction (cmin, cmax) of the colormap that should be + used for the gradient, where the complete colormap is (0, 1). + **kwargs + Other parameters are passed on to `.Axes.imshow()`. + In particular useful is *cmap*. + """ + phi = direction * np.pi / 2 + v = np.array([np.cos(phi), np.sin(phi)]) + X = np.array([[v @ [1, 0], v @ [1, 1]], + [v @ [0, 0], v @ [0, 1]]]) + a, b = cmap_range + X = a + (b - a) / X.max() * X + im = ax.imshow(X, extent=extent, interpolation='bicubic', + vmin=0, vmax=1, **kwargs) + return im + + +def gradient_bar(ax, x, y, width=0.5, bottom=0): + for left, top in zip(x, y): + right = left + width + gradient_image(ax, extent=(left, right, bottom, top), cmap=plt.cm.Blues_r, cmap_range=(0, 0.8)) + + +# arange automatically balloons into a list with 29 elements from 1 to 28. [2] +year_num = np.arange(1, 30, 1) +print(year_num) + +year_num = list(year_num) + +year_num2 = range(1, 30, 1) +print(year_num2) + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + +year_number2 = [] + +for i in np.arange(1, 30, 1): + year_number2.append(i) + +print(year_number2) + +year_number3 = [] + +for i in range(1, 30, 1): + year_number3.append(i) + +print(year_number3) + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137, 9617, 12788, 11222, 9442, 10943, 10950)] + +label_year = np.arange(1994, 2023, 1) +print(label_year) + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +# xmin, xmax = xlim = 0, 10 +ymin, ymax = ylim = 150000, 330000 + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(8, 7)) +axe.set(ylim=ylim, autoscale_on=False) + +# background image +gradient_image(axe, direction=1, extent=(0, 1, 0, 1), transform=axe.transAxes, cmap=plt.cm.RdYlGn, + cmap_range=(0.2, 0.8), alpha=0.5) + + +axe.set_aspect('auto') +axe.set_xlabel("Year") +axe.set_ylabel("The number of births") +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +plt.xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) +plt.tick_params(axis='y', labelsize=12) + +gradient_bar(ax=axe, x=year_num, y=number_of_births, width=0.7) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/gradient_bar.html +# 2. https://numpy.org/doc/stable/reference/generated/numpy.arange.html + +# Data: https://statis.moi.gov.tw/micst/stmain.jsp?sys=220&ym=8300&ymt=11000&kind=21&type=1&funid=c0120101&cycle=4&outmode=0&compmode=0&outkind=1&fld0=1&cod00=1&rdm=fu0Necq9 From 0789a1f62806c0b83dfc63e7465c966a9c1a0c93 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 23:09:49 +0800 Subject: [PATCH 1048/2002] Committed 2022/08/26 --- .../The number of births till 2022.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py index fc1b9088..36df8502 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py @@ -54,7 +54,8 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): year_num2 = range(1, 30, 1) print(year_num2) -year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] year_number2 = [] @@ -101,7 +102,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): plt.xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) plt.tick_params(axis='y', labelsize=12) -gradient_bar(ax=axe, x=year_num, y=number_of_births, width=0.7) +gradient_bar(ax=axe, x=year_number3, y=number_of_births, width=0.7) plt.show() From 378d094a93dbdb2cb8aff321f7a3d226b6720027 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 23:28:42 +0800 Subject: [PATCH 1049/2002] Committed 2022/08/26 --- .../The number of births till 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py index 36df8502..6ef9dc23 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py @@ -102,7 +102,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): plt.xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) plt.tick_params(axis='y', labelsize=12) -gradient_bar(ax=axe, x=year_number3, y=number_of_births, width=0.7) +gradient_bar(ax=axe, x=year_number, y=number_of_births, width=0.7) plt.show() From 90b9a052e4c1c66294853d692493187de7b880b5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 23:33:18 +0800 Subject: [PATCH 1050/2002] Committed 2022/08/26 --- .../The number of births till 2022.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py index 6ef9dc23..31899242 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py @@ -102,7 +102,15 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): plt.xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) plt.tick_params(axis='y', labelsize=12) -gradient_bar(ax=axe, x=year_number, y=number_of_births, width=0.7) +# gradient_bar(ax=axe, x=year_number, y=number_of_births, width=0.7) + +plot = axe.bar(year_number, number_of_births) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), + ha='center', va='bottom', fontsize=12) + plt.show() From 669ee7d3a8b898b1f785126e9e0984e5a0b094b7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 23:36:33 +0800 Subject: [PATCH 1051/2002] Committed 2022/08/26 --- .../The number of births till 2022.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py index 31899242..dd97a700 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py @@ -98,9 +98,8 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): axe.set_xlabel("Year") axe.set_ylabel("The number of births") axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) - -plt.xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) -plt.tick_params(axis='y', labelsize=12) +axe.set_xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) # gradient_bar(ax=axe, x=year_number, y=number_of_births, width=0.7) From d45f72817fede89a090824e7580fc8a8f657e32b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 23:41:09 +0800 Subject: [PATCH 1052/2002] Committed 2022/08/26 --- .../The number of births till 2022.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py index dd97a700..e787e6ec 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py @@ -94,13 +94,6 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): cmap_range=(0.2, 0.8), alpha=0.5) -axe.set_aspect('auto') -axe.set_xlabel("Year") -axe.set_ylabel("The number of births") -axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) -axe.set_xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) -axe.tick_params(axis='y', labelsize=12) - # gradient_bar(ax=axe, x=year_number, y=number_of_births, width=0.7) plot = axe.bar(year_number, number_of_births) @@ -111,6 +104,13 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): ha='center', va='bottom', fontsize=12) +axe.set_aspect('auto') +axe.set_xlabel("Year") +axe.set_ylabel("The number of births") +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) +axe.set_xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + plt.show() # References: From a7276054d2ae80eaaec69d7481c0ae96d74ae587 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 23:48:14 +0800 Subject: [PATCH 1053/2002] Committed 2022/08/26 --- .../The number of births till 2022.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py index e787e6ec..ff9c20e1 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births till 2022.py @@ -108,7 +108,7 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): axe.set_xlabel("Year") axe.set_ylabel("The number of births") axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) -axe.set_xticks(year_num, labels=label_year_text, rotation=7, fontsize=12) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) plt.show() From 9db135a589fefc97d207e2e1f763d543a93b3031 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Aug 2022 23:53:09 +0800 Subject: [PATCH 1054/2002] Committed 2022/08/26 --- .../The number of births 1994-2022.py | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py new file mode 100644 index 00000000..52b59f7e --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py @@ -0,0 +1,95 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np + +matplotlib.rc('font', family="MS Gothic") + + +def gradient_image(ax, extent, direction=0.3, cmap_range=(0, 1), **kwargs): + """ + Draw a gradient image based on a colormap. + + Parameters + ---------- + ax : Axes + The axes to draw on. + extent + The extent of the image as (xmin, xmax, ymin, ymax). + By default, this is in Axes coordinates but may be + changed using the *transform* keyword argument. + direction : float + The direction of the gradient. This is a number in + range 0 (=vertical) to 1 (=horizontal). + cmap_range : float, float + The fraction (cmin, cmax) of the colormap that should be + used for the gradient, where the complete colormap is (0, 1). + **kwargs + Other parameters are passed on to `.Axes.imshow()`. + In particular useful is *cmap*. + """ + phi = direction * np.pi / 2 + v = np.array([np.cos(phi), np.sin(phi)]) + X = np.array([[v @ [1, 0], v @ [1, 1]], + [v @ [0, 0], v @ [0, 1]]]) + a, b = cmap_range + X = a + (b - a) / X.max() * X + im = ax.imshow(X, extent=extent, interpolation='bicubic', + vmin=0, vmax=1, **kwargs) + return im + + +def gradient_bar(ax, x, y, width=0.5, bottom=0): + for left, top in zip(x, y): + right = left + width + gradient_image(ax, extent=(left, right, bottom, top), cmap=plt.cm.Blues_r, cmap_range=(0, 0.8)) + + + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137, 9617, 12788, 11222, 9442, 10943, 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +# xmin, xmax = xlim = 0, 10 +ymin, ymax = ylim = 150000, 330000 + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(8, 7)) +axe.set(ylim=ylim, autoscale_on=False) + +# background image +gradient_image(axe, direction=1, extent=(0, 1, 0, 1), transform=axe.transAxes, cmap=plt.cm.RdYlGn, + cmap_range=(0.2, 0.8), alpha=0.5) + + +# gradient_bar(ax=axe, x=year_number, y=number_of_births, width=0.7) + +plot = axe.bar(year_number, number_of_births) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), + ha='center', va='bottom', fontsize=12) + + +axe.set_aspect('auto') +axe.set_xlabel("Year") +axe.set_ylabel("The number of births") +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/gradient_bar.html +# 2. https://numpy.org/doc/stable/reference/generated/numpy.arange.html + +# Data: https://statis.moi.gov.tw/micst/stmain.jsp?sys=220&ym=8300&ymt=11000&kind=21&type=1&funid=c0120101&cycle=4&outmode=0&compmode=0&outkind=1&fld0=1&cod00=1&rdm=fu0Necq9 From a61e11b7c3a8355a924c5c3e909fc64aaa9bca05 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:08:20 +0800 Subject: [PATCH 1055/2002] Committed 2022/08/26 --- .../The number of births 1994-2022.py | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py index 52b59f7e..3b2dd273 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py @@ -58,18 +58,9 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21", "'22"] -# xmin, xmax = xlim = 0, 10 -ymin, ymax = ylim = 150000, 330000 - fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(8, 7)) -axe.set(ylim=ylim, autoscale_on=False) - -# background image -gradient_image(axe, direction=1, extent=(0, 1, 0, 1), transform=axe.transAxes, cmap=plt.cm.RdYlGn, - cmap_range=(0.2, 0.8), alpha=0.5) - - -# gradient_bar(ax=axe, x=year_number, y=number_of_births, width=0.7) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) plot = axe.bar(year_number, number_of_births) @@ -79,12 +70,22 @@ def gradient_bar(ax, x, y, width=0.5, bottom=0): ha='center', va='bottom', fontsize=12) -axe.set_aspect('auto') -axe.set_xlabel("Year") -axe.set_ylabel("The number of births") +# background image +gradient_image(axe, direction=1, extent=(0, 1, 0, 1), transform=axe.transAxes, cmap=plt.cm.RdYlGn, + cmap_range=(0.2, 0.8), alpha=0.5) + + +# gradient_bar(ax=axe, x=year_number, y=number_of_births, width=0.7) + axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) -axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) -axe.tick_params(axis='y', labelsize=12) +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") +axe.set_aspect('auto') + +# xmin, xmax = xlim = 0, 10 +ymin, ymax = ylim = 150000, 330000 + +axe.set(ylim=ylim, autoscale_on=False) plt.show() From a1099b14875c245ff01b59e3176bdc292b470bf0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:19:16 +0800 Subject: [PATCH 1056/2002] Committed 2022/08/26 --- .../The number of births 1994-2022.py | 2 + .../The number of births 1994-2022_(2).py | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py index 3b2dd273..219e895e 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022.py @@ -2,6 +2,8 @@ import matplotlib.pyplot as plt import matplotlib import numpy as np +# Using the magic encoding +# -*- coding: utf-8 -*- matplotlib.rc('font', family="MS Gothic") diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py new file mode 100644 index 00000000..62b0a8e8 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py @@ -0,0 +1,47 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137, 9617, 12788, 11222, 9442, 10943, 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(8, 7)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), + ha='center', va='bottom', fontsize=12) + + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim() + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/gradient_bar.html +# 2. https://numpy.org/doc/stable/reference/generated/numpy.arange.html + +# Data: https://statis.moi.gov.tw/micst/stmain.jsp?sys=220&ym=8300&ymt=11000&kind=21&type=1&funid=c0120101&cycle=4&outmode=0&compmode=0&outkind=1&fld0=1&cod00=1&rdm=fu0Necq9 From 1329522ceef140f878ff5a007d31425592a23500 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:22:29 +0800 Subject: [PATCH 1057/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(2).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py index 62b0a8e8..17802f64 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py @@ -36,7 +36,7 @@ # axe.set_ylabel("The number of births") axe.set_xlabel("Year") -axe.set_ylim() +axe.set_ylim(150000, 330000) plt.show() From 6f752cc8a68a95fdc82e50d31291e7629989a0b0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:27:01 +0800 Subject: [PATCH 1058/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(2).py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py index 17802f64..7b803af0 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py @@ -27,8 +27,8 @@ for rect in plot: height = rect.get_height() - axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), - ha='center', va='bottom', fontsize=12) + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) From 6def25a35059f74a905993ae3a4f24c445537e8c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:27:48 +0800 Subject: [PATCH 1059/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(2).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py index 7b803af0..91395090 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py @@ -13,7 +13,7 @@ number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, - (13137, 9617, 12788, 11222, 9442, 10943, 10950)] + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", From 7645f560f80fc824a5e4111633442ff5aefd88f9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:30:48 +0800 Subject: [PATCH 1060/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(2).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py index 91395090..e5065dff 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py @@ -19,7 +19,7 @@ "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21", "'22"] -fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(8, 7)) +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(20, 7)) axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) From 3c9b0f28f4c01827659cdbc69ced234119634cac Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:36:25 +0800 Subject: [PATCH 1061/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(2).py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py index e5065dff..5388d49b 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(2).py @@ -19,7 +19,7 @@ "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21", "'22"] -fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(20, 7)) +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(20, 8)) axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) @@ -36,7 +36,7 @@ # axe.set_ylabel("The number of births") axe.set_xlabel("Year") -axe.set_ylim(150000, 330000) +axe.set_ylim(100000, 330000) plt.show() From 0685f61756ec6afa3d0020209d72f7126396bf8a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:51:53 +0800 Subject: [PATCH 1062/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(3).py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(3).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(3).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(3).py new file mode 100644 index 00000000..0d948543 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(3).py @@ -0,0 +1,44 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(20, 8)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='edge') # Keep bars from cramming themselves into the center. [1] + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(100000, 330000) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/40575741/ From bc2e3894346c8d21788d37e607fb4cd3b7e414b1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:56:48 +0800 Subject: [PATCH 1063/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(3).py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(3).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(3).py index 0d948543..f4cb28bb 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(3).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(3).py @@ -23,7 +23,7 @@ axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) -plot = axe.bar(year_number, number_of_births, align='edge') # Keep bars from cramming themselves into the center. [1] +plot = axe.bar(year_number, number_of_births, align='edge') # Keep bars from cramming themselves into the center. [1][2] for rect in plot: height = rect.get_height() @@ -42,3 +42,4 @@ # References: # 1. https://stackoverflow.com/a/40575741/ +# 2. https://stackoverflow.com/a/20454355 From 39c9ccbf1c4ecd8b09abdd6e9e3752603cea0059 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:59:21 +0800 Subject: [PATCH 1064/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(4).py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(4).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(4).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(4).py new file mode 100644 index 00000000..39d9d83c --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(4).py @@ -0,0 +1,45 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(20, 8)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3) # Keep bars from cramming themselves into the center. [1][2] + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(100000, 330000) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/40575741/ +# 2. https://stackoverflow.com/a/20454355 From a43ebb08da4b29b240238033316b725717980ee1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:04:01 +0800 Subject: [PATCH 1065/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(5).py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 The attainments and realizations of my dreams/The number of births 1994-2022_(5).py diff --git a/The attainments and realizations of my dreams/The number of births 1994-2022_(5).py b/The attainments and realizations of my dreams/The number of births 1994-2022_(5).py new file mode 100644 index 00000000..eafc7430 --- /dev/null +++ b/The attainments and realizations of my dreams/The number of births 1994-2022_(5).py @@ -0,0 +1,45 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(20, 8)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3) # Keep bars from cramming themselves into the center. [1][2] + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/40575741/ +# 2. https://stackoverflow.com/a/20454355 From 0ca04abe017c68a30041dcf46630e151660be186 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:05:02 +0800 Subject: [PATCH 1066/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(5).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/The number of births 1994-2022_(5).py b/The attainments and realizations of my dreams/The number of births 1994-2022_(5).py index eafc7430..013f433a 100644 --- a/The attainments and realizations of my dreams/The number of births 1994-2022_(5).py +++ b/The attainments and realizations of my dreams/The number of births 1994-2022_(5).py @@ -19,7 +19,7 @@ "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21", "'22"] -fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(20, 8)) +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(20, 10)) axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) From d23324338367293e0adc942c11358cdc02d87fc5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:07:25 +0800 Subject: [PATCH 1067/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(5).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename The attainments and realizations of my dreams/{ => Annual number of births in Taiwan}/The number of births 1994-2022_(5).py (96%) diff --git a/The attainments and realizations of my dreams/The number of births 1994-2022_(5).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py similarity index 96% rename from The attainments and realizations of my dreams/The number of births 1994-2022_(5).py rename to The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py index 013f433a..7aec8678 100644 --- a/The attainments and realizations of my dreams/The number of births 1994-2022_(5).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py @@ -19,7 +19,7 @@ "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21", "'22"] -fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(20, 10)) +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(18, 10)) axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) From d740ec846c9f8f1a852380994e86f0c1c773266e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:16:02 +0800 Subject: [PATCH 1068/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(5).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py index 7aec8678..5113c018 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py @@ -19,7 +19,7 @@ "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21", "'22"] -fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(18, 10)) +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(22, 10)) axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) From 81059a6154d4eefda0704d68d104f90e817640cd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:19:02 +0800 Subject: [PATCH 1069/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(5).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py index 5113c018..8d26773c 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(5).py @@ -19,7 +19,7 @@ "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21", "'22"] -fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(22, 10)) +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 10)) axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) From 94cbf510fda4a73b1839b4c7552082c2d1c90981 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:22:41 +0800 Subject: [PATCH 1070/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(6).py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(6).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(6).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(6).py new file mode 100644 index 00000000..247fe937 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(6).py @@ -0,0 +1,45 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 10)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3) # Keep bars from cramming themselves into the center. [1][2] + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/40575741/ +# 2. https://stackoverflow.com/a/20454355 From b462ba9978e9f229380c1ec4b114a056acd416d8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:28:05 +0800 Subject: [PATCH 1071/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(7).py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(7).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(7).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(7).py new file mode 100644 index 00000000..2eaa0ebc --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(7).py @@ -0,0 +1,47 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 10)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3) # Keep bars from cramming themselves into the center. [1][2] + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) + +plt.show() + +# References: +# 1. https://stackoverflow.com/a/40575741/ +# 2. https://stackoverflow.com/a/20454355 From fcfaab521c8940b54f5ea0ff340a30bd9b6f3597 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:30:25 +0800 Subject: [PATCH 1072/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(7).py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(7).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(7).py index 2eaa0ebc..e7a61691 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(7).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(7).py @@ -23,7 +23,7 @@ axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) -plot = axe.bar(year_number, number_of_births, align='center', width=0.3) # Keep bars from cramming themselves into the center. [1][2] +plot = axe.bar(year_number, number_of_births, align='center', width=0.3) for rect in plot: height = rect.get_height() @@ -38,10 +38,10 @@ axe.set_ylim(78000, 330000) -plt.margins(x=0, y=0, tight=False) +plt.margins(x=0, y=0, tight=False) #[1][2] plt.show() # References: -# 1. https://stackoverflow.com/a/40575741/ -# 2. https://stackoverflow.com/a/20454355 +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html From 58cf1b0df8f7cd073dedb4b3a02ca1d1843523c9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:32:02 +0800 Subject: [PATCH 1073/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(8).py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(8).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(8).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(8).py new file mode 100644 index 00000000..5682a43c --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(8).py @@ -0,0 +1,49 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 10)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) #[1][2] +fig.tight_layout() # [3] + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From 26684f34078e16703a69e745d75382751585cad8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:35:36 +0800 Subject: [PATCH 1074/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(9).py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(9).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(9).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(9).py new file mode 100644 index 00000000..8f9ba449 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(9).py @@ -0,0 +1,56 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 10)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.04, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From ed4ad0c6524fece4a2f7ede21fb6fd3d2e50845d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:41:06 +0800 Subject: [PATCH 1075/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(9).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(9).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(9).py index 8f9ba449..83918baa 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(9).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(9).py @@ -41,7 +41,7 @@ plt.margins(x=0, y=0, tight=False) # [1][2] fig.tight_layout() # [3] -text = fig.text(0.5, 0.04, +text = fig.text(0.5, 0.7, 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', horizontalalignment='center', verticalalignment='center', From 8752dab41579b16e1b47acde81e3e37d9d2ecba5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 10:57:04 +0800 Subject: [PATCH 1076/2002] Committed 2022/08/26 --- .../The number of births 1994-2022_(10).py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(10).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(10).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(10).py new file mode 100644 index 00000000..bcee7a84 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(10).py @@ -0,0 +1,56 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 12)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From 7ee6b50cbc68991e26536bcab0e10585cee0523d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 11:12:15 +0800 Subject: [PATCH 1077/2002] Committed 2022/08/27 --- .../The number of births 1994-2022_(11).py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(11).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(11).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(11).py new file mode 100644 index 00000000..cc1f4837 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(11).py @@ -0,0 +1,57 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 12)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From 6a51c51b7e4d1c7eb67f52341c0dd800f0a78e13 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 11:16:07 +0800 Subject: [PATCH 1078/2002] Committed 2022/08/27 --- .../The number of births 1994-2022_(12).py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(12).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(12).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(12).py new file mode 100644 index 00000000..e63e8c75 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(12).py @@ -0,0 +1,63 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 12)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +# axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=2000, yo=700, alpha=0.9) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From fe1417461fb76d1b89fb0770a0208a2652d0d3f8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 11:21:38 +0800 Subject: [PATCH 1079/2002] Committed 2022/08/27 --- .../The number of births 1994-2022_(12).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(12).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(12).py index e63e8c75..0446d6c0 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(12).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(12).py @@ -53,7 +53,7 @@ img = image.imread('CC-BY.png') -plt.figimage(X=img, xo=2000, yo=700, alpha=0.9) +plt.figimage(X=img, xo=2000, yo=850, alpha=0.9) plt.show() From f8bc36ec00973787b77b22428f330278872c4cda Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 11:56:24 +0800 Subject: [PATCH 1080/2002] Committed 2022/08/27 --- .../The number of births 1994-2022_(13).py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py new file mode 100644 index 00000000..9999a5f9 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py @@ -0,0 +1,63 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 12)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=2000, yo=850, alpha=0.9) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From ffe1c3b76c98011f596b812c6506f3f45a8aa7d1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 12:00:04 +0800 Subject: [PATCH 1081/2002] Committed 2022/08/27 --- .../The number of births 1994-2022_(13).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py index 9999a5f9..d930b9ae 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py @@ -22,7 +22,7 @@ "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", "'18", "'19", "'20", "'21", "'22"] -fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 12)) +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) axe.tick_params(axis='y', labelsize=12) From 714b174cfcd33a06c9a5ab2514779a8f03b8f47a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 12:00:48 +0800 Subject: [PATCH 1082/2002] Committed 2022/08/27 --- .../The number of births 1994-2022_(13).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py index d930b9ae..88b8d7bd 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(13).py @@ -35,7 +35,7 @@ axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) -axe.set_ylabel("The number of births") +axe.set_ylabel("The number of births (Unit: 1 baby)") axe.set_xlabel("Year") axe.set_ylim(78000, 330000) From 9839b17f2f864757541c7d32afcda817fafa08de Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 12:03:32 +0800 Subject: [PATCH 1083/2002] Committed 2022/08/27 --- .../The number of births 1994-2022_(14).py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(14).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(14).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(14).py new file mode 100644 index 00000000..cb900f8d --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(14).py @@ -0,0 +1,63 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births (Unit: 1 baby)") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=2000, yo=950, alpha=0.9) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From 7b0da29c886aff7d35025c9b3c4041bc26343d83 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 12:04:24 +0800 Subject: [PATCH 1084/2002] Committed 2022/08/27 --- .../The number of births 1994-2022_(14).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(14).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(14).py index cb900f8d..a5a9ef67 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(14).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(14).py @@ -53,7 +53,7 @@ img = image.imread('CC-BY.png') -plt.figimage(X=img, xo=2000, yo=950, alpha=0.9) +plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) plt.show() From 5e13d86e3adf59f70eb34cfdff514a164314ea83 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 12:42:37 +0800 Subject: [PATCH 1085/2002] Committed 2022/08/27 --- .../Annual 2022 watermark (2).py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (2).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (2).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (2).py new file mode 100644 index 00000000..7009cf06 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (2).py @@ -0,0 +1,35 @@ +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.image as image + +plt.rcdefaults() + +fig, ax = plt.subplots(figsize=(7, 11)) + +city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung', 'Hsinchu', 'Miaoli', + 'Changhua', 'Nantou', 'Yunlin', 'Chiayi', 'Pingtung', 'Yilan', 'Hualien', 'Taitung') + +y_pos = np.arange(len(city)) + +births = [8297, 12111, 10216, 9955, 5078, 9013, (1732+2320), 1309, 5663, 1340, 1892, (682+1275), 2050, + 1364, 1123, 757] + +error = np.random.rand(len(city)) + +horizontal_bar = ax.barh(y_pos, births, xerr=error, align='center') +ax.set_yticks(y_pos, labels=city) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel("# of births\nReference: https://statis.moi.gov.tw/micst/stmain.jsp?sys=100") +ax.set_title('The number of births by city (2022/01-07) ') + +# Label with given captions, custom padding and annotate options +ax.bar_label(horizontal_bar, labels=births, padding=8, color='b', fontsize=14) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=650, alpha=0.9) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html From c5573a1cd02d84ae65566a5e83e6c7438a15b562 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 12:46:04 +0800 Subject: [PATCH 1086/2002] Committed 2022/08/27 --- .../Annual 2022 watermark (2).py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (2).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (2).py index 7009cf06..fef7a0b6 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (2).py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (2).py @@ -20,7 +20,7 @@ ax.set_yticks(y_pos, labels=city) ax.invert_yaxis() # labels read top-to-bottom ax.set_xlabel("# of births\nReference: https://statis.moi.gov.tw/micst/stmain.jsp?sys=100") -ax.set_title('The number of births by city (2022/01-07) ') +ax.set_title('The number of births by administrative division (2022/01-07) ') # Label with given captions, custom padding and annotate options ax.bar_label(horizontal_bar, labels=births, padding=8, color='b', fontsize=14) From 2f8763720ffbeda6285f8e581d8803a705d354a4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 13:30:24 +0800 Subject: [PATCH 1087/2002] Committed 2022/08/27 --- .../Annual 2022 watermark (3).py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (3).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (3).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (3).py new file mode 100644 index 00000000..bc0ead69 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (3).py @@ -0,0 +1,35 @@ +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.image as image + +plt.rcdefaults() + +fig, ax = plt.subplots(figsize=(7, 11)) + +city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung', 'Hsinchu', 'Miaoli', + 'Changhua', 'Nantou', 'Yunlin', 'Chiayi', 'Pingtung', 'Yilan', 'Hualien', 'Taitung') + +y_pos = np.arange(len(city)) + +births = [8297, 12111, 10216, 9955, 5078, 9013, (1732+2320), 1309, 5663, 1340, 1892, (682+1275), 2050, + 1364, 1123, 757] + +error = np.random.rand(len(city)) + +horizontal_bar = ax.barh(y_pos, births, xerr=error, align='center') +ax.set_yticks(y_pos, labels=city) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel("# of births\nReference: https://statis.moi.gov.tw/micst/stmain.jsp?sys=100") +ax.set_title('The number of births in Taiwan by administrative division (2022/01-07) ') + +# Label with given captions, custom padding and annotate options +ax.bar_label(horizontal_bar, labels=births, padding=8, color='b', fontsize=14) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=650, alpha=0.9) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html From 7fb88540b4135e5247c3190e52de143422790492 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 13:45:43 +0800 Subject: [PATCH 1088/2002] Committed 2022/08/27 --- .../Annual 2017.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2017.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2017.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2017.py new file mode 100644 index 00000000..cdf8764f --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2017.py @@ -0,0 +1,32 @@ +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.image as image + +plt.rcdefaults() + +fig, ax = plt.subplots(figsize=(7, 7)) + +city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung') +y_pos = np.arange(len(city)) +births = [25042, 31611, 23356, 24338, 13773, 20260] +error = np.random.rand(len(city)) + +horizontal_bar = ax.barh(y_pos, births, xerr=error, align='center') +ax.set_yticks(y_pos, labels=city) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel("# of births\nReference: https://statis.moi.gov.tw/micst/stmain.jsp?sys=100") +ax.set_title('The number of births in Taiwan by city (2017)') + +# Label with given captions, custom padding and annotate options +ax.bar_label(horizontal_bar, labels=births, padding=8, color='b', fontsize=14) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=650, alpha=0.9) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html + +# Data: https://statis.moi.gov.tw/micst/stmain.jsp?sys=220&ym=10600&ymt=10600&kind=21&type=1&funid=c0120101&cycle=41&outmode=0&compmode=0&outkind=1&fld0=1&codspc0=0,2,3,2,6,1,9,1,12,1,15,14,&rdm=immoqeji From e511319d8cd3ec7f35e01da801a1b6fd4ea24213 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 13:56:17 +0800 Subject: [PATCH 1089/2002] Committed 2022/08/27 --- .../Annual 2017 all.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2017 all.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2017 all.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2017 all.py new file mode 100644 index 00000000..509463a0 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2017 all.py @@ -0,0 +1,38 @@ +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.image as image + +plt.rcdefaults() + +fig, ax = plt.subplots(figsize=(7, 11)) + +city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung', 'Hsinchu', 'Miaoli', + 'Changhua', 'Nantou', 'Yunlin', 'Chiayi', 'Pingtung', 'Yilan', 'Hualien', 'Taitung') + +y_pos = np.arange(len(city)) + +births = [25042, 31611, 23356, 24338, 13773, 20260, (4287+4953), 3844, 13070, 3336, 4533, (1924+2803), + 4824, 3328, 2372, 1484] + +error = np.random.rand(len(city)) + +horizontal_bar = ax.barh(y_pos, births, xerr=error, align='center') +ax.set_yticks(y_pos, labels=city) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel("# of births\nReference: https://statis.moi.gov.tw/micst/stmain.jsp?sys=100") +ax.set_title('The number of births in Taiwan by administrative division (2017) ') + +# Label with given captions, custom padding and annotate options +ax.bar_label(horizontal_bar, labels=births, padding=8, color='b', fontsize=14) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=650, alpha=0.9) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html + +# Data: +# https://statis.moi.gov.tw/micst/stmain.jsp?sys=220&ym=10600&ymt=10600&kind=21&type=1&funid=c0120101&cycle=41&outmode=0&compmode=0&outkind=1&fld0=1&codspc0=0,2,3,2,6,1,9,1,12,1,15,14,&rdm=immoqeji From 15334d14888468934db460ab7de4b8e6abe3ac6d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 27 Aug 2022 14:16:11 +0800 Subject: [PATCH 1090/2002] Committed 2022/08/27 --- .../Annual 2022 watermark (1).py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (1).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (1).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (1).py new file mode 100644 index 00000000..c34a095a --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/Annual 2022 watermark (1).py @@ -0,0 +1,30 @@ +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.image as image + +plt.rcdefaults() + +fig, ax = plt.subplots(figsize=(7, 7)) + +city = ('Taipei', 'New Taipei', 'Taoyuan', 'Taichung', 'Tainan', 'Kaohsiung') +y_pos = np.arange(len(city)) +births = [8297, 12111, 10216, 9955, 5078, 9013] +error = np.random.rand(len(city)) + +horizontal_bar = ax.barh(y_pos, births, xerr=error, align='center') +ax.set_yticks(y_pos, labels=city) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel("# of births\nReference: https://statis.moi.gov.tw/micst/stmain.jsp?sys=100") +ax.set_title('The number of births in Taiwan by city (2022/01-07) ') + +# Label with given captions, custom padding and annotate options +ax.bar_label(horizontal_bar, labels=births, padding=8, color='b', fontsize=14) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=650, alpha=0.9) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html From 3b25873f25a630232ba213bc2eedc886ba3427d7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 5 Sep 2022 19:13:02 +0800 Subject: [PATCH 1091/2002] Committed 2022/09/05 --- .../Primary_input_output_(successors)3.py | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(successors)3.py diff --git a/NetworkX Altas/Primary_input_output_(successors)3.py b/NetworkX Altas/Primary_input_output_(successors)3.py new file mode 100644 index 00000000..ffe3f429 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(successors)3.py @@ -0,0 +1,123 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="J", layer=3) + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Layer 4 (Primary outputs) +circuit.add_node(15, label="PO1", layer=4) +circuit.add_node(16, label="PO2", layer=4) + +circuit.add_edge(13, 15) +circuit.add_edge(14, 16) + + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(nx.bfs_successors(G=circuit, source=0)) +print(nx.dfs_successors(G=circuit, source=0)) From 25df68cae29798e96a5dcd29656dbfc11f2af2a9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 9 Sep 2022 20:12:24 +0800 Subject: [PATCH 1092/2002] Committed 2022/09/09 --- .../Primary_input_output_(successors)4.py | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(successors)4.py diff --git a/NetworkX Altas/Primary_input_output_(successors)4.py b/NetworkX Altas/Primary_input_output_(successors)4.py new file mode 100644 index 00000000..51d65b53 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(successors)4.py @@ -0,0 +1,119 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) + +circuit.add_edge(0, 4) +circuit.add_edge(0, 5) +circuit.add_edge(1, 4) +circuit.add_edge(2, 5) +circuit.add_edge(2, 6) +circuit.add_edge(3, 6) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="J", layer=3) + +circuit.add_edge(9, 13) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +# Layer 4 (Primary outputs) +circuit.add_node(15, label="PO1", layer=4) +circuit.add_node(16, label="PO2", layer=4) + +circuit.add_edge(13, 15) +circuit.add_edge(14, 16) + + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(nx.bfs_successors(G=circuit, source=0)) +print(nx.dfs_successors(G=circuit, source=0)) From 473eeade774a07388fe7c2df71d61ce50db7fd3c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 9 Sep 2022 20:17:00 +0800 Subject: [PATCH 1093/2002] Committed 2022/09/09 --- .../Primary_input_output_(successors)4.py | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/NetworkX Altas/Primary_input_output_(successors)4.py b/NetworkX Altas/Primary_input_output_(successors)4.py index 51d65b53..82b30c27 100644 --- a/NetworkX Altas/Primary_input_output_(successors)4.py +++ b/NetworkX Altas/Primary_input_output_(successors)4.py @@ -61,19 +61,10 @@ def _to_string(formula, root): circuit.add_edge(3, 6) # Layer 2 -circuit.add_node(9, label="E", layer=2) -circuit.add_node(10, label="F", layer=2) -circuit.add_node(11, label="G", layer=2) -circuit.add_node(12, label="H", layer=2) - -circuit.add_edge(4, 12) - -circuit.add_edge(5, 9) -circuit.add_edge(6, 9) -circuit.add_edge(6, 10) -circuit.add_edge(7, 10) -circuit.add_edge(7, 11) -circuit.add_edge(8, 11) +circuit.add_node(8, label="E", layer=2) + +circuit.add_edge(5, 7) +circuit.add_edge(6, 7) # Layer 3 circuit.add_node(13, label="I", layer=3) From 55e55179886fc58bf256d8413014c3ae08a3dba1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 9 Sep 2022 20:18:33 +0800 Subject: [PATCH 1094/2002] Committed 2022/09/09 --- NetworkX Altas/Primary_input_output_(successors)4.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/NetworkX Altas/Primary_input_output_(successors)4.py b/NetworkX Altas/Primary_input_output_(successors)4.py index 82b30c27..1a3dbbf6 100644 --- a/NetworkX Altas/Primary_input_output_(successors)4.py +++ b/NetworkX Altas/Primary_input_output_(successors)4.py @@ -49,9 +49,9 @@ def _to_string(formula, root): circuit.add_node(3, label="PI4", layer=0) # Layer 1 -circuit.add_node(5, label="A", layer=1) -circuit.add_node(6, label="B", layer=1) -circuit.add_node(7, label="C", layer=1) +circuit.add_node(4, label="A", layer=1) +circuit.add_node(5, label="B", layer=1) +circuit.add_node(6, label="C", layer=1) circuit.add_edge(0, 4) circuit.add_edge(0, 5) @@ -61,14 +61,13 @@ def _to_string(formula, root): circuit.add_edge(3, 6) # Layer 2 -circuit.add_node(8, label="E", layer=2) +circuit.add_node(7, label="E", layer=2) circuit.add_edge(5, 7) circuit.add_edge(6, 7) # Layer 3 -circuit.add_node(13, label="I", layer=3) -circuit.add_node(14, label="J", layer=3) +circuit.add_node(8, label="I", layer=3) circuit.add_edge(9, 13) circuit.add_edge(10, 13) From cf1ad04a75171fbcaf59cc8ccf771c65b5caa2fa Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 9 Sep 2022 20:20:43 +0800 Subject: [PATCH 1095/2002] Committed 2022/09/09 --- .../Primary_input_output_(successors)4.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/NetworkX Altas/Primary_input_output_(successors)4.py b/NetworkX Altas/Primary_input_output_(successors)4.py index 1a3dbbf6..47d00914 100644 --- a/NetworkX Altas/Primary_input_output_(successors)4.py +++ b/NetworkX Altas/Primary_input_output_(successors)4.py @@ -69,18 +69,13 @@ def _to_string(formula, root): # Layer 3 circuit.add_node(8, label="I", layer=3) -circuit.add_edge(9, 13) -circuit.add_edge(10, 13) -circuit.add_edge(11, 13) -circuit.add_edge(11, 14) -circuit.add_edge(12, 14) +circuit.add_edge(4, 8) +circuit.add_edge(7, 8) # Layer 4 (Primary outputs) -circuit.add_node(15, label="PO1", layer=4) -circuit.add_node(16, label="PO2", layer=4) +circuit.add_node(9, label="PO1", layer=4) -circuit.add_edge(13, 15) -circuit.add_edge(14, 16) +circuit.add_edge(8, 9) # Convert the circuit to an equivalent formula. From 1ed8480ef4ceeb29d402b7b2c77da231af85bad8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 9 Sep 2022 20:25:27 +0800 Subject: [PATCH 1096/2002] Committed 2022/09/09 --- NetworkX Altas/Primary_input_output_(successors)4.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/NetworkX Altas/Primary_input_output_(successors)4.py b/NetworkX Altas/Primary_input_output_(successors)4.py index 47d00914..5737913b 100644 --- a/NetworkX Altas/Primary_input_output_(successors)4.py +++ b/NetworkX Altas/Primary_input_output_(successors)4.py @@ -49,9 +49,9 @@ def _to_string(formula, root): circuit.add_node(3, label="PI4", layer=0) # Layer 1 -circuit.add_node(4, label="A", layer=1) -circuit.add_node(5, label="B", layer=1) -circuit.add_node(6, label="C", layer=1) +circuit.add_node(4, label="m", layer=1) +circuit.add_node(5, label="o", layer=1) +circuit.add_node(6, label="p", layer=1) circuit.add_edge(0, 4) circuit.add_edge(0, 5) @@ -61,13 +61,13 @@ def _to_string(formula, root): circuit.add_edge(3, 6) # Layer 2 -circuit.add_node(7, label="E", layer=2) +circuit.add_node(7, label="n", layer=2) circuit.add_edge(5, 7) circuit.add_edge(6, 7) # Layer 3 -circuit.add_node(8, label="I", layer=3) +circuit.add_node(8, label="x", layer=3) circuit.add_edge(4, 8) circuit.add_edge(7, 8) From c870e64ada16fc1064a1b4d6e8008af328bb86cd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Sep 2022 20:31:04 +0800 Subject: [PATCH 1097/2002] Committed 2022/09/18 --- NetworkX Altas/Clustering/Triangle.py | 122 ++++++++++++++++++++++++++ NetworkX Altas/Clustering/__init__.py | 0 2 files changed, 122 insertions(+) create mode 100644 NetworkX Altas/Clustering/Triangle.py create mode 100644 NetworkX Altas/Clustering/__init__.py diff --git a/NetworkX Altas/Clustering/Triangle.py b/NetworkX Altas/Clustering/Triangle.py new file mode 100644 index 00000000..e29bedca --- /dev/null +++ b/NetworkX Altas/Clustering/Triangle.py @@ -0,0 +1,122 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +print(nx.triangles(G=circuit)) diff --git a/NetworkX Altas/Clustering/__init__.py b/NetworkX Altas/Clustering/__init__.py new file mode 100644 index 00000000..e69de29b From 04f4d471353cc350d568f2de5b1650e27d5a3eda Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Sep 2022 21:18:08 +0800 Subject: [PATCH 1098/2002] Committed 2022/09/18 --- NetworkX Altas/Clustering/Clustering.py | 122 ++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 NetworkX Altas/Clustering/Clustering.py diff --git a/NetworkX Altas/Clustering/Clustering.py b/NetworkX Altas/Clustering/Clustering.py new file mode 100644 index 00000000..eebbf62a --- /dev/null +++ b/NetworkX Altas/Clustering/Clustering.py @@ -0,0 +1,122 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) +circuit.add_node(4, label="PI5", layer=0) + +# Layer 1 +circuit.add_node(5, label="A", layer=1) +circuit.add_node(6, label="B", layer=1) +circuit.add_node(7, label="C", layer=1) +circuit.add_node(8, label="D", layer=1) + +circuit.add_edge(0, 5) +circuit.add_edge(1, 5) +circuit.add_edge(1, 6) +circuit.add_edge(2, 6) +circuit.add_edge(2, 7) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(4, 8) + +# Layer 2 +circuit.add_node(9, label="E", layer=2) +circuit.add_node(10, label="F", layer=2) +circuit.add_node(11, label="G", layer=2) +circuit.add_node(12, label="H", layer=2) + +circuit.add_edge(4, 12) + +circuit.add_edge(5, 9) +circuit.add_edge(6, 9) +circuit.add_edge(6, 10) +circuit.add_edge(7, 10) +circuit.add_edge(7, 11) +circuit.add_edge(8, 11) + +# Layer 3 +circuit.add_node(13, label="I", layer=3) +circuit.add_node(14, label="PO1", layer=3) + +# Layer 4 +circuit.add_node(15, label="PO2", layer=4) + + +circuit.add_edge(9, 15) +circuit.add_edge(10, 13) +circuit.add_edge(11, 13) +circuit.add_edge(11, 14) +circuit.add_edge(12, 14) + +circuit.add_edge(13, 15) + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "blue", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +plt.title(formula_to_string(formula)) +plt.axis("equal") +plt.show() + +print(nx.algorithms.tree.is_tree(G=circuit)) +print(nx.algorithms.tree.is_forest(G=circuit)) + +print(nx.clustering(G=circuit)) From a79fe95925bfa3cd83ce0cd920f06b743f07b06c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 13:41:15 +0800 Subject: [PATCH 1099/2002] Committed 2022/09/24 --- .../2022/September/CC-BY.png | Bin 0 -> 1283 bytes .../2022/September/Metro_area_EN_ZH_JP.py | 58 ++++++++++++++++++ .../2022/September/__init__.py | 0 3 files changed, 58 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/CC-BY.png create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/Metro_area_EN_ZH_JP.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Sat, 24 Sep 2022 14:06:35 +0800 Subject: [PATCH 1100/2002] Committed 2022/09/24 --- .../2022/September/Metro_area_EN_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/Metro_area_EN_ZH_JP.py index 396e36db..50c107f8 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/Metro_area_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/Metro_area_EN_ZH_JP.py @@ -9,7 +9,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2093+110272+63695+4272, 46489+34685+6557, 59061+3512+10472, 4346+6630+27509, 37149+4361] +position_vacancies = [2093+110672+63695+4272, 46489+34685+6557, 59061+3512+10472, 4346+6630+27509, 37149+4361] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 697d50ccf8a7345e5103cc5b9ea8355e3923c835 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 17:54:28 +0800 Subject: [PATCH 1101/2002] Committed 2022/09/24 --- .../Annual household income/2021.py | 30 ++++++++++++++++++ .../Annual_household_income.png | Bin 72897 -> 72897 bytes 2 files changed, 30 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual household income/2021.py diff --git a/The attainments and realizations of my dreams/Annual household income/2021.py b/The attainments and realizations of my dreams/Annual household income/2021.py new file mode 100644 index 00000000..9e4047a6 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual household income/2021.py @@ -0,0 +1,30 @@ +import matplotlib.pyplot as plt + +year = [2015, 2016, 2017, 2018, 2019, 2020, 2021] +income_Kaohsiung = [1145895, 1166824, 1186204, 1219246, 1224268, 1224100, 1231562] +income_Tainan = [1007093, 1063495, 1079199, 1086077, 1079174, 1086475, 1120580] +income_Taichung = [1169183, 1140325, 1245350, 1279865, 1298497, 1289700, 1304508] +income_Taoyuan = [1307158, 1317790, 1337361, 1378732, 1392199, 1424027, 1448909] +income_Taipei = [1581899, 1568945, 1648122, 1649348, 1723021, 1716591, 1732126] +income_New_Taipei = [1171978, 1223867, 1265798, 1292753, 1319841, 1352548, 1381603] +income_Hsinchu_county = [1283995, 1365150, 1616327, 1519478, 1539555, 1619782, 1689337] +income_Hsinchu_city = [1427572, 1537317, 1572296, 1426379, 1602826, 1618903, 1602415] +income_Miaoli_county = [1008241, 1166196, 1029485, 1045881, 1073028, 1161999, 1214424] + +plt.plot(year, income_Taipei, label="Taipei") +plt.plot(year, income_New_Taipei, label="New Taipei") +plt.plot(year, income_Taoyuan, label="Taoyuan") +plt.plot(year, income_Hsinchu_county, label="Hsinchu county") +plt.plot(year, income_Hsinchu_city, label="Hsinchu city") +plt.plot(year, income_Miaoli_county, label="Miaoli") +plt.plot(year, income_Taichung, label="Taichung") +plt.plot(year, income_Tainan, label="Tainan") +plt.plot(year, income_Kaohsiung, label="Kaohsiung", marker='*', ms=12) + +plt.title("Annual household income by region in Taiwan") +plt.legend() +plt.grid(linewidth=0.7) +plt.ylabel("Income (1 million New Taiwan Dollar)") +plt.xlabel("Reference: https://statfy.mol.gov.tw/map02.aspx?cid=64&xFunc=138&xKey=1") + +plt.show() diff --git a/The attainments and realizations of my dreams/Annual household income/Annual_household_income.png b/The attainments and realizations of my dreams/Annual household income/Annual_household_income.png index 7cec9635d783426e7dbe2d0c36ff3e245fcd5cfa..fc3a0bd71783cc4e5dd576b1908a0658e2f1531f 100644 GIT binary patch delta 48 zcmX@OljYz}mI-bOrh3LY3K=CO1;tkS`nicE1v&X8Ihjd%`9C>F-FS( E0JumI-2eap From 476305a85f64f68d23b3356ce05e3e49aa6f27e8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 17:58:59 +0800 Subject: [PATCH 1102/2002] Committed 2022/09/24 --- .../Annual household income/2021_watermark.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual household income/2021_watermark.py diff --git a/The attainments and realizations of my dreams/Annual household income/2021_watermark.py b/The attainments and realizations of my dreams/Annual household income/2021_watermark.py new file mode 100644 index 00000000..4509e53d --- /dev/null +++ b/The attainments and realizations of my dreams/Annual household income/2021_watermark.py @@ -0,0 +1,39 @@ +import matplotlib.pyplot as plt +import matplotlib.image as image + +year = [2015, 2016, 2017, 2018, 2019, 2020, 2021] +income_Kaohsiung = [1145895, 1166824, 1186204, 1219246, 1224268, 1224100, 1231562] +income_Tainan = [1007093, 1063495, 1079199, 1086077, 1079174, 1086475, 1120580] +income_Taichung = [1169183, 1140325, 1245350, 1279865, 1298497, 1289700, 1304508] +income_Taoyuan = [1307158, 1317790, 1337361, 1378732, 1392199, 1424027, 1448909] +income_Taipei = [1581899, 1568945, 1648122, 1649348, 1723021, 1716591, 1732126] +income_New_Taipei = [1171978, 1223867, 1265798, 1292753, 1319841, 1352548, 1381603] +income_Hsinchu_county = [1283995, 1365150, 1616327, 1519478, 1539555, 1619782, 1689337] +income_Hsinchu_city = [1427572, 1537317, 1572296, 1426379, 1602826, 1618903, 1602415] +income_Miaoli_county = [1008241, 1166196, 1029485, 1045881, 1073028, 1161999, 1214424] + +plt.plot(year, income_Taipei, label="Taipei") +plt.plot(year, income_New_Taipei, label="New Taipei") +plt.plot(year, income_Taoyuan, label="Taoyuan") +plt.plot(year, income_Hsinchu_county, label="Hsinchu county") +plt.plot(year, income_Hsinchu_city, label="Hsinchu city") +plt.plot(year, income_Miaoli_county, label="Miaoli") +plt.plot(year, income_Taichung, label="Taichung") +plt.plot(year, income_Tainan, label="Tainan") +plt.plot(year, income_Kaohsiung, label="Kaohsiung", marker='*', ms=12) + +plt.title("Annual household income by region in Taiwan") +plt.legend() +plt.grid(linewidth=0.7) +plt.ylabel("Income (1 million New Taiwan Dollar)") +plt.xlabel("Reference: https://statfy.mol.gov.tw/map02.aspx?cid=64&xFunc=138&xKey=1") + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', transform=ax.transAxes) + +plt.show() From 1db0ae3f05882f82b21fd30311e910c475807c08 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 18:03:04 +0800 Subject: [PATCH 1103/2002] Committed 2022/09/24 --- .../Annual household income/CC-BY.png | Bin 0 -> 1283 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual household income/CC-BY.png diff --git a/The attainments and realizations of my dreams/Annual household income/CC-BY.png b/The attainments and realizations of my dreams/Annual household income/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Sat, 24 Sep 2022 18:04:31 +0800 Subject: [PATCH 1104/2002] Committed 2022/09/24 --- .../Annual household income/2021_watermark.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual household income/2021_watermark.py b/The attainments and realizations of my dreams/Annual household income/2021_watermark.py index 4509e53d..75afb3f0 100644 --- a/The attainments and realizations of my dreams/Annual household income/2021_watermark.py +++ b/The attainments and realizations of my dreams/Annual household income/2021_watermark.py @@ -12,6 +12,8 @@ income_Hsinchu_city = [1427572, 1537317, 1572296, 1426379, 1602826, 1618903, 1602415] income_Miaoli_county = [1008241, 1166196, 1029485, 1045881, 1073028, 1161999, 1214424] +fig, ax = plt.subplots(figsize=(9, 9)) + plt.plot(year, income_Taipei, label="Taipei") plt.plot(year, income_New_Taipei, label="New Taipei") plt.plot(year, income_Taoyuan, label="Taoyuan") From 0f9aa9a4321ef6818aa68f6ef33eb7e513851616 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 18:12:37 +0800 Subject: [PATCH 1105/2002] Committed 2022/09/24 --- .../Month_over_month_2022/June_watermark.py | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py new file mode 100644 index 00000000..b53dbf97 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py @@ -0,0 +1,115 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March + [8, 25, 23, 23, 27, 31], # April + [7, 33, 16, 27, 27, 27], # May + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-05)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From ec9bed318f1030c4acc597cdc3749eeae490ae7c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 18:18:26 +0800 Subject: [PATCH 1106/2002] Committed 2022/09/24 --- .../Road safety/Month_over_month_2022/June_watermark.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py index b53dbf97..499af05c 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py @@ -7,13 +7,14 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month = ["Jan", "Feb", "Mar", "Apr", "May"] +month = ["Jan", "Feb", "Mar", "Apr", "May", "June"] deaths = [[13, 23, 29, 28, 24, 23], # January [7, 16, 20, 24, 20, 30], # February [9, 29, 14, 27, 34, 43], # March [8, 25, 23, 23, 27, 31], # April - [7, 33, 16, 27, 27, 27], # May + [7, 34, 16, 27, 27, 27], # May + [4, 27, 27, 15, 23, 26], # June ] df = pd.DataFrame(data=deaths, From bab27a438935922983b9c286316aadb23b4c0e84 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 18:20:42 +0800 Subject: [PATCH 1107/2002] Committed 2022/09/24 --- .../Month_over_month_2022/June_watermark.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py index 499af05c..c025b766 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py @@ -67,17 +67,17 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-05)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-06)") axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From e28f16b30b8f5d8e733dff40fce175ddf691654c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 18:22:38 +0800 Subject: [PATCH 1108/2002] Committed 2022/09/24 --- .../Road safety/Month_over_month_2022/June_watermark.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py index c025b766..ab27c4e1 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/June_watermark.py @@ -101,8 +101,8 @@ plt.figimage(X=img, xo=100, yo=700, alpha=0.9) # Insert text watermark -plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, - ha='center', va='center', rotation='30', transform=axes2.transAxes) +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='20', transform=axes2.transAxes) plt.show() From ce1ca836b0242a568bb7b293b4590fef29a7f0d3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 18:33:23 +0800 Subject: [PATCH 1109/2002] Committed 2022/09/24 --- .../2021_6_major_cities.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual household income/2021_6_major_cities.py diff --git a/The attainments and realizations of my dreams/Annual household income/2021_6_major_cities.py b/The attainments and realizations of my dreams/Annual household income/2021_6_major_cities.py new file mode 100644 index 00000000..b8565853 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual household income/2021_6_major_cities.py @@ -0,0 +1,41 @@ +import matplotlib.pyplot as plt +import matplotlib.image as image + +year = [2015, 2016, 2017, 2018, 2019, 2020, 2021] +income_Kaohsiung = [1145895, 1166824, 1186204, 1219246, 1224268, 1224100, 1231562] +income_Tainan = [1007093, 1063495, 1079199, 1086077, 1079174, 1086475, 1120580] +income_Taichung = [1169183, 1140325, 1245350, 1279865, 1298497, 1289700, 1304508] +income_Taoyuan = [1307158, 1317790, 1337361, 1378732, 1392199, 1424027, 1448909] +income_Taipei = [1581899, 1568945, 1648122, 1649348, 1723021, 1716591, 1732126] +income_New_Taipei = [1171978, 1223867, 1265798, 1292753, 1319841, 1352548, 1381603] +income_Hsinchu_county = [1283995, 1365150, 1616327, 1519478, 1539555, 1619782, 1689337] +income_Hsinchu_city = [1427572, 1537317, 1572296, 1426379, 1602826, 1618903, 1602415] +# income_Miaoli_county = [1008241, 1166196, 1029485, 1045881, 1073028, 1161999, 1214424] + +fig, ax = plt.subplots(figsize=(9, 9)) + +plt.plot(year, income_Taipei, label="Taipei") +plt.plot(year, income_New_Taipei, label="New Taipei") +plt.plot(year, income_Taoyuan, label="Taoyuan") +plt.plot(year, income_Hsinchu_county, label="Hsinchu county") +plt.plot(year, income_Hsinchu_city, label="Hsinchu city") +# plt.plot(year, income_Miaoli_county, label="Miaoli") +plt.plot(year, income_Taichung, label="Taichung") +plt.plot(year, income_Tainan, label="Tainan") +plt.plot(year, income_Kaohsiung, label="Kaohsiung", marker='*', ms=12) + +plt.title("Annual household income by region in Taiwan") +plt.legend() +plt.grid(linewidth=0.7) +plt.ylabel("Income (1 million New Taiwan Dollar)") +plt.xlabel("Reference: https://statfy.mol.gov.tw/map02.aspx?cid=64&xFunc=138&xKey=1") + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', transform=ax.transAxes) + +plt.show() From c2807464fb734d567651986fe73a45236c9ccd45 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 18:53:51 +0800 Subject: [PATCH 1110/2002] Committed 2022/09/24 --- .../2022_watermark.py | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py new file mode 100644 index 00000000..8b18502c --- /dev/null +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py @@ -0,0 +1,95 @@ +import pandas as pd +import matplotlib.image as image +import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + + +# Convert wiki-table in the article 擃蝑脫楛閮俎4] to csv.[2][3] + +public_research_centric_university = pd.DataFrame(data=[ + [1, "蝡箇憭批飛", "National Taiwan University", 232587, "North", ], + [2, "蝡憭批飛", "National Cheng Kung University", 141178, "South", ], + [3, "蝡皜臬之摮", "National Tsing Hua University", 120394, "North", "Derived from Beijing, China's Tsing Hua University"], + [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 138078, "North", "Derived from Shanghai, China's ChiaoTung University"], + [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43745, "North", ], + [6, "蝡銝剖亢憭批飛", "National Central University", 42228, "North", ], + [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], + [8, "蝡踵祥憭批飛", "National Chengchi University", 31579, "North", "Literally, 'National Politics University'"], + [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 32068, "South", ], + [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 14233, "North", ], + [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 15361, "South", "Literally, National Chiang Chung-cheng University"], + [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 14233, "North", ], + [13, "蝡箏憭批飛", "National Taipei University", 8771, "North", ], + [14, "蝡典憭批飛", "National Chi Nan University", 8030, "North", ], + [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 7580, "North", ], + [16, "蝡梯臬之摮", "National Dong Hwa University", 6965, "Hualien County", ], + [17, "蝡蝢拙之摮", "National Chiayi University", 5927, "South", ], + [18, "蝡摰剖之摮", "National Ilan University", 6799, "North", ], + [19, "蝡撅勗之摮", "National Pingtung University", 6619, "South", ], + [20, "蝡箸勗之摮", "National Taitung University", 6178, "Taitung County", ], + [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5974, "North", ], + [22, "蝡箏脣之摮", "National Taipei University of Education", 5234, "North", ], + [23, "蝡擃憭批飛", "National University of Kaohsiung", 5502, "South", ], + [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 5478, "North", ], + [25, "蝡箔葉脣之摮", "National Taichung University of Education", 5549, "North", ], + [26, "蝡箏憭批飛", "National University of Tainan", 5203, "South", ], + [27, "箏撣蝡憭批飛", "University of Taipei", 5247, "North", ], + [28, "蝡擃脣之摮", "National Taiwan Sport University", 4732, "North", ], + [29, "蝡臬憭批飛", "National United University", 4676, "North", ], + [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 4347, "South", ], + [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3229, "North", ], + [32, "蝡憭批飛", "National Quemoy University", 3319, ], + # [33, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3226, "North", ], + [33, "蝡箏銵憭批飛", "Tainan National University of the Arts", 1997, "South", ], +]) + +print(public_research_centric_university) + +header = ['Number', 'Chinese name', 'English name', 'Budget_received', 'Location', 'Note'] + +# Adding a header to National universities of R&D +public_research_centric_university.columns = header +print(public_research_centric_university) + +# Filter the universities in the north. +condition = public_research_centric_university['Location'] == "North" +north_public_research = public_research_centric_university[condition] +print(north_public_research) + +# Sum of the budget in the north. +total_north_public_research = north_public_research['Budget_received'].sum() +print(total_north_public_research) + +# Filter the universities in the south. +condition = public_research_centric_university['Location'] == "South" +south_public_research = public_research_centric_university[condition] +print(south_public_research) + +# Sum of the budget inn the south. +total_south_public_research = south_public_research['Budget_received'].sum() +print(total_south_public_research) + +# The histogram of the data +plt.bar(['Northern Taiwan', 'Southern Taiwan'], [total_north_public_research, total_south_public_research]) + +plt.xlabel('Location (divided by Zhuoshui River)\n\n' + 'Dataset: https://sprout.moe.edu.tw/SproutWeb/Project/DocDownload', + fontproperties="Arial", fontsize=9) + +plt.ylabel('Unit: 10 thousands of New Taiwan Dollar') +plt.title('Government budget support for public research universities (蝡憭批飛)\n' + 'in North vs South in 2022', fontproperties="MS Gothic") + +# Tweak spacing to prevent clipping of ylabel +plt.tight_layout() + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', transform=ax.transAxes) + +plt.show() \ No newline at end of file From c41a060f29ba808bc7a0373d87863cff331ced5e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Sep 2022 18:55:51 +0800 Subject: [PATCH 1111/2002] Committed 2022/09/24 --- .../2022_watermark.py | 2 ++ .../CC-BY.png | Bin 0 -> 1283 bytes 2 files changed, 2 insertions(+) create mode 100644 The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/CC-BY.png diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py index 8b18502c..fb8dbc29 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py @@ -70,6 +70,8 @@ total_south_public_research = south_public_research['Budget_received'].sum() print(total_south_public_research) +fig, ax = plt.subplots(figsize=(9, 9)) + # The histogram of the data plt.bar(['Northern Taiwan', 'Southern Taiwan'], [total_north_public_research, total_south_public_research]) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/CC-BY.png b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Sat, 24 Sep 2022 18:57:34 +0800 Subject: [PATCH 1112/2002] Committed 2022/09/24 --- .../2022_watermark.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py index fb8dbc29..b473511e 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2022_watermark.py @@ -70,7 +70,7 @@ total_south_public_research = south_public_research['Budget_received'].sum() print(total_south_public_research) -fig, ax = plt.subplots(figsize=(9, 9)) +fig, ax = plt.subplots(figsize=(6, 6)) # The histogram of the data plt.bar(['Northern Taiwan', 'Southern Taiwan'], [total_north_public_research, total_south_public_research]) @@ -88,7 +88,7 @@ img = image.imread('CC-BY.png') -plt.figimage(X=img, xo=800, yo=800, alpha=0.9) +plt.figimage(X=img, xo=500, yo=500, alpha=0.9) # Insert text watermark plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, From f5ae8e1838abd06e863a11d3c64535ed1a066aeb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 1 Oct 2022 20:29:25 +0800 Subject: [PATCH 1113/2002] Committed 2022/10/01 --- .../2021/CC-BY.png | Bin 0 -> 1283 bytes .../2021/September_metro_EN_ZH_watermark.py | 39 ++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/CC-BY.png create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/September_metro_EN_ZH_watermark.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Sat, 1 Oct 2022 20:30:49 +0800 Subject: [PATCH 1114/2002] Committed 2022/10/01 --- .../2021/September_metro_EN_ZH_watermark.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/September_metro_EN_ZH_watermark.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/September_metro_EN_ZH_watermark.py index be5ac222..8034999a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/September_metro_EN_ZH_watermark.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2021/September_metro_EN_ZH_watermark.py @@ -32,6 +32,14 @@ plt.ylim(30000, 130000) +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) + plt.show() # Reference: From 976e5f481647eff6c7dc49ffa87c3170274b452c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 1 Oct 2022 23:31:35 +0800 Subject: [PATCH 1115/2002] Committed 2022/10/01 --- .../The number of births 1994-2022_August.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_August.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_August.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_August.py new file mode 100644 index 00000000..36a41092 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_August.py @@ -0,0 +1,67 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950 + 11902)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022/08 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births (Unit: 1 baby)") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) + +plt.text(x=0.3, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=axe.transAxes) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From 4954fbdee977efc3697b64f6a0177885f9996b00 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 1 Oct 2022 23:33:04 +0800 Subject: [PATCH 1116/2002] Committed 2022/10/01 --- .../The number of births 1994-2022_August.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_August.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_August.py index 36a41092..237c2579 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_August.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_August.py @@ -55,7 +55,7 @@ plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) -plt.text(x=0.3, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.2, y=0.4, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30', transform=axe.transAxes) From 1cf2d8834191f2309e72f53add983b437d36ccc3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 2 Oct 2022 22:02:00 +0800 Subject: [PATCH 1117/2002] Committed 2022/10/02 --- .../Month_over_month_2022/July_watermark.py | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/July_watermark.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/July_watermark.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/July_watermark.py new file mode 100644 index 00000000..867dcc2f --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/July_watermark.py @@ -0,0 +1,117 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March + [8, 25, 23, 23, 27, 31], # April + [7, 34, 16, 27, 27, 27], # May + [4, 25, 27, 15, 23, 26], # June + [4, 27, 16, 23, 28, 31], # July + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='20', transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 0ddf2232f2692ef8410400d86af933d3141e23dc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 2 Oct 2022 23:51:25 +0800 Subject: [PATCH 1118/2002] Committed 2022/10/02 --- .../Year_over_year_2008-2022.py | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/Year_over_year_2008-2022.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/Year_over_year_2008-2022.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/Year_over_year_2008-2022.py new file mode 100644 index 00000000..decbe558 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/Year_over_year_2008-2022.py @@ -0,0 +1,129 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22"] + +death = [[115, 261, 226, 371, 371, 398], # 2008 + [133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + [132, 266, 269, 283, 295, 333], # 2021 + [52, 179, 145, 167, 183, 211], # 2022 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2008-2022/7)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary, color=colour.CSS4_COLORS.get('palegreen'), linewidth=1, ecolor=colour.CSS4_COLORS.get('dodgerblue')) # Create a bar chart and its format. [7][11][12] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html +# 11. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar.html#matplotlib.axes.Axes.bar +# 12. https://matplotlib.org/stable/gallery/color/named_colors.html From cf15d4b6469546421d796af744ace42ee9794be7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 3 Oct 2022 00:06:45 +0800 Subject: [PATCH 1119/2002] Committed 2022/10/02 --- .../Deaths_in_road_accidents_2008_2021.xlsx | Bin 0 -> 11938 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.xlsx diff --git a/The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.xlsx b/The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..136a9c0cc1dae3ef57ea2d8197cdf3bdc7e3f499 GIT binary patch literal 11938 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 TunhtL$lwn(*o;jXemnag(s3TN literal 0 HcmV?d00001 From 9f8827368cbbcc84a801f1c34d5e774b06539394 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 3 Oct 2022 00:12:49 +0800 Subject: [PATCH 1120/2002] Committed 2022/10/02 --- .../Deaths_in_road_accidents_2008_2021.xls | Bin 0 -> 27136 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.xls diff --git a/The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.xls b/The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.xls new file mode 100644 index 0000000000000000000000000000000000000000..67f231af2d8c757df88f6729964ec9aa92e7b095 GIT binary patch literal 27136 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 literal 0 HcmV?d00001 From a920cde4392e7c3b79fb7d2e55e0d6e6146259e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 3 Oct 2022 00:20:41 +0800 Subject: [PATCH 1121/2002] Committed 2022/10/02 --- .idea/encodings.xml | 1 + .../Deaths_in_road_accidents_2008_2021.csv | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.csv diff --git a/.idea/encodings.xml b/.idea/encodings.xml index fb17512f..c230f121 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -4,6 +4,7 @@ + diff --git a/The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.csv b/The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.csv new file mode 100644 index 00000000..fa395351 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Deaths_in_road_accidents_2008_2021.csv @@ -0,0 +1,15 @@ +??    ,總計,新北市,臺北市,桃園市,臺中市,臺南市,高雄市,宜蘭縣,新竹縣,苗栗縣,彰化縣,南投縣,雲林縣,嘉義縣,屏東縣,臺東縣,花蓮縣,澎湖縣,基隆市,新竹市,嘉義市 +97年,"3,474",261,115,226,371,371,398,114,104,107,246,133,211,144,255,75,95,7,25,48,31 +98年,"3,232",254,133,198,318,340,402,101,88,97,235,98,180,148,226,69,99,11,36,47,35 +99年,"3,297",255,152,227,373,319,388,93,98,112,233,97,190,123,255,77,81,7,29,33,36 +100年,"3,343",264,140,195,382,346,373,104,110,120,221,108,203,122,248,78,77,14,34,57,23 +101年,"3,219",252,130,195,370,288,417,98,111,104,239,111,201,127,229,63,70,6,25,46,28 +102年,"3,072",223,140,191,308,311,375,79,82,93,247,101,192,117,246,77,82,7,27,48,24 +103年,"3,075",219,138,221,302,290,387,86,92,94,257,108,165,116,217,64,96,11,35,55,19 +104年,"2,942",212,137,203,275,289,364,83,89,79,206,101,189,118,229,63,70,13,31,41,21 +105年,"2,847",266,157,203,259,269,329,68,91,98,201,98,167,109,209,65,72,16,24,31,15 +106年,"2,697",256,106,213,217,246,289,58,86,85,193,89,165,95,203,55,82,15,30,39,18 +107年,"2,780",248,137,244,245,289,280,82,81,79,196,83,172,122,199,51,56,10,34,48,17 +108年,"2,865",225,131,249,270,294,351,83,81,86,221,88,162,119,175,62,49,9,25,52,23 +109年,"2,972",232,102,264,325,317,347,78,91,97,205,82,165,125,216,61,74,11,25,48,27 +110年,"2,962",264,130,264,280,293,330,100,93,120,201,81,152,124,206,57,61,12,32,44,21 From 965206b0cb75f332ab8cc4797c5670ed0695dae8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 3 Oct 2022 00:23:41 +0800 Subject: [PATCH 1122/2002] Committed 2022/10/02 --- .../{Month_over_month_2022 => }/Year_over_year_2008-2022.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Road safety/{Month_over_month_2022 => }/Year_over_year_2008-2022.py (100%) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/Year_over_year_2008-2022.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2022.py similarity index 100% rename from The attainments and realizations of my dreams/Road safety/Month_over_month_2022/Year_over_year_2008-2022.py rename to The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2022.py From 5be1be88ed9acd7f62cdbd1f3605809a5213a892 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 3 Oct 2022 00:27:19 +0800 Subject: [PATCH 1123/2002] Committed 2022/10/02 --- .../Year_over_year_2008_2022_county.py | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py new file mode 100644 index 00000000..30866d37 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py @@ -0,0 +1,129 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Yilan", "Hsinchu", "Miaoli", "Chanhua", "Nantou", "Yunlin", "Chiayi", "Pingtung", "Taitung", "Hualien"] + +year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] + +death = [[115, 261, 226, 371, 371, 398], # 2008 + [133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + [132, 266, 269, 283, 295, 333], # 2021 + [52, 179, 145, 167, 183, 211], # 2022 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2008-2022/7)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary, color=colour.CSS4_COLORS.get('palegreen'), linewidth=1, ecolor=colour.CSS4_COLORS.get('dodgerblue')) # Create a bar chart and its format. [7][11][12] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html +# 11. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar.html#matplotlib.axes.Axes.bar +# 12. https://matplotlib.org/stable/gallery/color/named_colors.html From 29cc692a64007c6f27ffc2382a7144e212e19003 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 3 Oct 2022 00:31:09 +0800 Subject: [PATCH 1124/2002] Committed 2022/10/02 --- .../Year_over_year_2008_2022_county.py | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py index 30866d37..044017c6 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py @@ -8,22 +8,9 @@ year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] -death = [[115, 261, 226, 371, 371, 398], # 2008 - [133, 254, 198, 318, 340, 402], # 2009 - [152, 255, 227, 373, 319, 388], # 2010 - [140, 264, 195, 382, 346, 373], # 2011 - [130, 252, 195, 370, 288, 417], # 2012 - [140, 223, 191, 308, 311, 375], # 2013 - [138, 219, 221, 302, 290, 387], # 2014 - [137, 212, 203, 275, 289, 364], # 2015 - [157, 266, 203, 259, 269, 329], # 2016 - [106, 256, 213, 217, 246, 289], # 2017 - [137, 248, 244, 245, 289, 280], # 2018 - [131, 225, 249, 270, 294, 351], # 2019 - [102, 232, 264, 325, 317, 347], # 2020 - [132, 266, 269, 283, 295, 333], # 2021 - [52, 179, 145, 167, 183, 211], # 2022 - ] +death = pd.read_csv('Deaths_in_road_accidents_2008_2021.csv') + +print(death) df = pd.DataFrame(data=death, columns=administrative_duty, index=year) From df3abf1df69a4a63bdc6c63254443e4cf8ebcb75 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 3 Oct 2022 00:32:58 +0800 Subject: [PATCH 1125/2002] Committed 2022/10/02 --- .../Road safety/Year_over_year_2008_2022_county.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py index 044017c6..846e52c0 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py @@ -8,7 +8,7 @@ year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] -death = pd.read_csv('Deaths_in_road_accidents_2008_2021.csv') +death = pd.read_csv('Deaths_in_road_accidents_2008_2021.csv', encoding='Big-5') print(death) From c52bbfd832a4dbf77158c4229ad4413cf9ccb678 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 3 Oct 2022 00:35:45 +0800 Subject: [PATCH 1126/2002] Committed 2022/10/02 --- .../Road safety/Year_over_year_2008_2022_county.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py index 846e52c0..3847ccf0 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008_2022_county.py @@ -8,7 +8,7 @@ year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] -death = pd.read_csv('Deaths_in_road_accidents_2008_2021.csv', encoding='Big-5') +death = pd.read_csv('Deaths_in_road_accidents_2008_2021.csv', encoding='big5') print(death) From 7aafdd07f67afc78453881c33d89a5c9676b8088 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 22:27:46 +0800 Subject: [PATCH 1127/2002] Committed 2022/10/15 --- .../TensorFlow/Back_propagate.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Supplementary materials/TensorFlow/Back_propagate.py diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py new file mode 100644 index 00000000..e84b7a0a --- /dev/null +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -0,0 +1,49 @@ +### imports +import tensorflow as tf + +### constant data +x = [[0.,0.],[1.,1.],[1.,0.],[0.,1.]] +y_ = [[0.],[0.],[1.],[1.]] + +### induction +# 1x2 input -> 2x3 hidden sigmoid -> 3x1 sigmoid output + +# Layer 0 = the x2 inputs +x0 = tf.constant( x , dtype=tf.float32 ) +y0 = tf.constant( y_ , dtype=tf.float32 ) + +# Layer 1 = the 2x3 hidden sigmoid +m1 = tf.Variable( tf.random_uniform( [2,3] , minval=0.1 , maxval=0.9 , dtype=tf.float32 )) +b1 = tf.Variable( tf.random_uniform( [3] , minval=0.1 , maxval=0.9 , dtype=tf.float32 )) +h1 = tf.sigmoid( tf.matmul( x0,m1 ) + b1 ) + +# Layer 2 = the 3x1 sigmoid output +m2 = tf.Variable( tf.random_uniform( [3,1] , minval=0.1 , maxval=0.9 , dtype=tf.float32 )) +b2 = tf.Variable( tf.random_uniform( [1] , minval=0.1 , maxval=0.9 , dtype=tf.float32 )) +y_out = tf.sigmoid( tf.matmul( h1,m2 ) + b2 ) + + +### loss +# loss : sum of the squares of y0 - y_out +loss = tf.reduce_sum( tf.square( y0 - y_out ) ) + +# training step : gradient decent (1.0) to minimize loss +train = tf.train.GradientDescentOptimizer(1.0).minimize(loss) + + +### training +# run 500 times using all the X and Y +# print out the loss and any other interesting info +with tf.Session() as sess: + sess.run( tf.global_variables_initializer() ) + for step in range(500) : + sess.run(train) + + results = sess.run([m1,b1,m2,b2,y_out,loss]) + labels = "m1,b1,m2,b2,y_out,loss".split(",") + for label,result in zip(*(labels,results)) : + print("") + print(label) + print(result) + +print("") From f9e7c0c95e9eaf0dbd0872d6b2b67abd726adb35 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 22:29:05 +0800 Subject: [PATCH 1128/2002] Committed 2022/10/15 --- .../TensorFlow/Back_propagate.py | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index e84b7a0a..6cf87a42 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -2,46 +2,44 @@ import tensorflow as tf ### constant data -x = [[0.,0.],[1.,1.],[1.,0.],[0.,1.]] -y_ = [[0.],[0.],[1.],[1.]] +x = [[0., 0.], [1., 1.], [1., 0.], [0., 1.]] +y_ = [[0.], [0.], [1.], [1.]] ### induction # 1x2 input -> 2x3 hidden sigmoid -> 3x1 sigmoid output # Layer 0 = the x2 inputs -x0 = tf.constant( x , dtype=tf.float32 ) -y0 = tf.constant( y_ , dtype=tf.float32 ) +x0 = tf.constant(x, dtype=tf.float32) +y0 = tf.constant(y_, dtype=tf.float32) # Layer 1 = the 2x3 hidden sigmoid -m1 = tf.Variable( tf.random_uniform( [2,3] , minval=0.1 , maxval=0.9 , dtype=tf.float32 )) -b1 = tf.Variable( tf.random_uniform( [3] , minval=0.1 , maxval=0.9 , dtype=tf.float32 )) -h1 = tf.sigmoid( tf.matmul( x0,m1 ) + b1 ) +m1 = tf.Variable(tf.random_uniform([2, 3], minval=0.1, maxval=0.9, dtype=tf.float32)) +b1 = tf.Variable(tf.random_uniform([3], minval=0.1, maxval=0.9, dtype=tf.float32)) +h1 = tf.sigmoid(tf.matmul(x0, m1) + b1) # Layer 2 = the 3x1 sigmoid output -m2 = tf.Variable( tf.random_uniform( [3,1] , minval=0.1 , maxval=0.9 , dtype=tf.float32 )) -b2 = tf.Variable( tf.random_uniform( [1] , minval=0.1 , maxval=0.9 , dtype=tf.float32 )) -y_out = tf.sigmoid( tf.matmul( h1,m2 ) + b2 ) - +m2 = tf.Variable(tf.random_uniform([3, 1], minval=0.1, maxval=0.9, dtype=tf.float32)) +b2 = tf.Variable(tf.random_uniform([1], minval=0.1, maxval=0.9, dtype=tf.float32)) +y_out = tf.sigmoid(tf.matmul(h1, m2) + b2) ### loss # loss : sum of the squares of y0 - y_out -loss = tf.reduce_sum( tf.square( y0 - y_out ) ) +loss = tf.reduce_sum(tf.square(y0 - y_out)) # training step : gradient decent (1.0) to minimize loss train = tf.train.GradientDescentOptimizer(1.0).minimize(loss) - ### training # run 500 times using all the X and Y # print out the loss and any other interesting info with tf.Session() as sess: - sess.run( tf.global_variables_initializer() ) - for step in range(500) : + sess.run(tf.global_variables_initializer()) + for step in range(500): sess.run(train) - results = sess.run([m1,b1,m2,b2,y_out,loss]) - labels = "m1,b1,m2,b2,y_out,loss".split(",") - for label,result in zip(*(labels,results)) : + results = sess.run([m1, b1, m2, b2, y_out, loss]) + labels = "m1,b1,m2,b2,y_out,loss".split(",") + for label, result in zip(*(labels, results)): print("") print(label) print(result) From 53f83d14441edd0fc57f7454e8c31bc5f50895bc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 22:39:41 +0800 Subject: [PATCH 1129/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 6cf87a42..0b5adb34 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -13,13 +13,13 @@ y0 = tf.constant(y_, dtype=tf.float32) # Layer 1 = the 2x3 hidden sigmoid -m1 = tf.Variable(tf.random_uniform([2, 3], minval=0.1, maxval=0.9, dtype=tf.float32)) -b1 = tf.Variable(tf.random_uniform([3], minval=0.1, maxval=0.9, dtype=tf.float32)) +m1 = tf.Variable(tf.random.uniform([2, 3], minval=0.1, maxval=0.9, dtype=tf.float32)) +b1 = tf.Variable(tf.random.uniform([3], minval=0.1, maxval=0.9, dtype=tf.float32)) h1 = tf.sigmoid(tf.matmul(x0, m1) + b1) # Layer 2 = the 3x1 sigmoid output -m2 = tf.Variable(tf.random_uniform([3, 1], minval=0.1, maxval=0.9, dtype=tf.float32)) -b2 = tf.Variable(tf.random_uniform([1], minval=0.1, maxval=0.9, dtype=tf.float32)) +m2 = tf.Variable(tf.random.uniform([3, 1], minval=0.1, maxval=0.9, dtype=tf.float32)) +b2 = tf.Variable(tf.random.uniform([1], minval=0.1, maxval=0.9, dtype=tf.float32)) y_out = tf.sigmoid(tf.matmul(h1, m2) + b2) ### loss From aad7ed46665d1139dcb7af7f2d60d874a771d2d3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 22:45:07 +0800 Subject: [PATCH 1130/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 0b5adb34..3f48e4a1 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -27,7 +27,7 @@ loss = tf.reduce_sum(tf.square(y0 - y_out)) # training step : gradient decent (1.0) to minimize loss -train = tf.train.GradientDescentOptimizer(1.0).minimize(loss) +train = tf.keras.optimizers.SGD(1.0) ### training # run 500 times using all the X and Y From 41f5cea60683025d6662b4af8f380a603adc5c7e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 22:49:30 +0800 Subject: [PATCH 1131/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 3f48e4a1..34dfdcab 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -32,7 +32,7 @@ ### training # run 500 times using all the X and Y # print out the loss and any other interesting info -with tf.Session() as sess: +with tf.compat.v1.Session() as sess: sess.run(tf.global_variables_initializer()) for step in range(500): sess.run(train) From a5cb3e9dd691afcc519a8b0b99abcec6cb48670d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 22:52:44 +0800 Subject: [PATCH 1132/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 34dfdcab..3c8e615b 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -33,7 +33,7 @@ # run 500 times using all the X and Y # print out the loss and any other interesting info with tf.compat.v1.Session() as sess: - sess.run(tf.global_variables_initializer()) + sess.run(tf.compat.v1.global_variables_initializer()) for step in range(500): sess.run(train) From 29393800a8c56b49287769deab227b5857567515 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 22:58:37 +0800 Subject: [PATCH 1133/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 3c8e615b..57fbc15b 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -27,7 +27,7 @@ loss = tf.reduce_sum(tf.square(y0 - y_out)) # training step : gradient decent (1.0) to minimize loss -train = tf.keras.optimizers.SGD(1.0) +train = tf.compat.v1.train.GradientDescentOptimizer(1.0).minimize(loss) ### training # run 500 times using all the X and Y From e95a9f2318d7f3028ec2ac151385cc41290c348f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 23:01:34 +0800 Subject: [PATCH 1134/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 57fbc15b..b214114c 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -13,13 +13,13 @@ y0 = tf.constant(y_, dtype=tf.float32) # Layer 1 = the 2x3 hidden sigmoid -m1 = tf.Variable(tf.random.uniform([2, 3], minval=0.1, maxval=0.9, dtype=tf.float32)) -b1 = tf.Variable(tf.random.uniform([3], minval=0.1, maxval=0.9, dtype=tf.float32)) +m1 = tf.Variable(tf.compat.v1.random_uniform([2, 3], minval=0.1, maxval=0.9, dtype=tf.float32)) +b1 = tf.Variable(tf.compat.v1.random_uniform([3], minval=0.1, maxval=0.9, dtype=tf.float32)) h1 = tf.sigmoid(tf.matmul(x0, m1) + b1) # Layer 2 = the 3x1 sigmoid output -m2 = tf.Variable(tf.random.uniform([3, 1], minval=0.1, maxval=0.9, dtype=tf.float32)) -b2 = tf.Variable(tf.random.uniform([1], minval=0.1, maxval=0.9, dtype=tf.float32)) +m2 = tf.Variable(tf.compat.v1.random_uniform([3, 1], minval=0.1, maxval=0.9, dtype=tf.float32)) +b2 = tf.Variable(tf.compat.v1.random_uniform([1], minval=0.1, maxval=0.9, dtype=tf.float32)) y_out = tf.sigmoid(tf.matmul(h1, m2) + b2) ### loss From 5c4f97a4ba04167d9e60eb2c86f6505bc25f1c09 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 23:06:26 +0800 Subject: [PATCH 1135/2002] Committed 2022/10/15 --- .../TensorFlow/Back_propagate.py | 47 ------------------- 1 file changed, 47 deletions(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index b214114c..e69de29b 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -1,47 +0,0 @@ -### imports -import tensorflow as tf - -### constant data -x = [[0., 0.], [1., 1.], [1., 0.], [0., 1.]] -y_ = [[0.], [0.], [1.], [1.]] - -### induction -# 1x2 input -> 2x3 hidden sigmoid -> 3x1 sigmoid output - -# Layer 0 = the x2 inputs -x0 = tf.constant(x, dtype=tf.float32) -y0 = tf.constant(y_, dtype=tf.float32) - -# Layer 1 = the 2x3 hidden sigmoid -m1 = tf.Variable(tf.compat.v1.random_uniform([2, 3], minval=0.1, maxval=0.9, dtype=tf.float32)) -b1 = tf.Variable(tf.compat.v1.random_uniform([3], minval=0.1, maxval=0.9, dtype=tf.float32)) -h1 = tf.sigmoid(tf.matmul(x0, m1) + b1) - -# Layer 2 = the 3x1 sigmoid output -m2 = tf.Variable(tf.compat.v1.random_uniform([3, 1], minval=0.1, maxval=0.9, dtype=tf.float32)) -b2 = tf.Variable(tf.compat.v1.random_uniform([1], minval=0.1, maxval=0.9, dtype=tf.float32)) -y_out = tf.sigmoid(tf.matmul(h1, m2) + b2) - -### loss -# loss : sum of the squares of y0 - y_out -loss = tf.reduce_sum(tf.square(y0 - y_out)) - -# training step : gradient decent (1.0) to minimize loss -train = tf.compat.v1.train.GradientDescentOptimizer(1.0).minimize(loss) - -### training -# run 500 times using all the X and Y -# print out the loss and any other interesting info -with tf.compat.v1.Session() as sess: - sess.run(tf.compat.v1.global_variables_initializer()) - for step in range(500): - sess.run(train) - - results = sess.run([m1, b1, m2, b2, y_out, loss]) - labels = "m1,b1,m2,b2,y_out,loss".split(",") - for label, result in zip(*(labels, results)): - print("") - print(label) - print(result) - -print("") From ea92dc5fcaec2879abf50509305f5bd9d5e34485 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 23:48:15 +0800 Subject: [PATCH 1136/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index e69de29b..e9d6c753 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -0,0 +1,9 @@ +import numpy as np +import tensorflow as tf + +np.random.seed(0) + +# Sample random numbers from a normal distribution with mean 1 and standard deviation of 0.1. +x_values = np.random.normal(1, 0.1, 100).astype(np.float) + +print(x_values) From 56f4869bf55fdf9e1e6da1b6c9265de2cff71e72 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 23:55:54 +0800 Subject: [PATCH 1137/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index e9d6c753..8623947e 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -6,4 +6,7 @@ # Sample random numbers from a normal distribution with mean 1 and standard deviation of 0.1. x_values = np.random.normal(1, 0.1, 100).astype(np.float) -print(x_values) +print("x_values: ", x_values) + +y_values = (x_values * (np.random.normal(loc=1, scale=0.05, size=100) - 0.5)).astype(np.float) + From a2b09b8c86ca142583606c16579f4c33e63d6c7e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Oct 2022 23:56:42 +0800 Subject: [PATCH 1138/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 8623947e..3e5ac2f3 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -10,3 +10,4 @@ y_values = (x_values * (np.random.normal(loc=1, scale=0.05, size=100) - 0.5)).astype(np.float) +print("y_values: ", y_values) From 084da20c415b7342b3e2dbba3d0d644b3149c6b9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 00:00:26 +0800 Subject: [PATCH 1139/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 3e5ac2f3..49130649 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -1,5 +1,6 @@ import numpy as np import tensorflow as tf +import matplotlib.pyplot as plt np.random.seed(0) @@ -11,3 +12,8 @@ y_values = (x_values * (np.random.normal(loc=1, scale=0.05, size=100) - 0.5)).astype(np.float) print("y_values: ", y_values) + +# In order to get assurance that the target and input have a good correlation, plot a scatter plot +# of the two variables: +plt.scatter(x=x_values, y=y_values) +plt.show() From 5545bdfe6b1a4fbeca049c6719c875ad2cf1795c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 00:11:23 +0800 Subject: [PATCH 1140/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 49130649..000fcb87 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -17,3 +17,6 @@ # of the two variables: plt.scatter(x=x_values, y=y_values) plt.show() + +def my_output(X, weights, biases): + return tf.add(tf.multiply(x=X, y=weights), biases) From 3ae7cd786f9bacd761ca7bbbf2b27d6931f4c682 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 00:17:30 +0800 Subject: [PATCH 1141/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 000fcb87..07e20618 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -20,3 +20,7 @@ def my_output(X, weights, biases): return tf.add(tf.multiply(x=X, y=weights), biases) + + +def loss_function(y_true, y_prediction): + return tf.reduce_mean(tf.square(y_true - y_prediction)) From 621cdc3b4b5e36e8e08095bfd83391af0c8dfc03 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 00:27:57 +0800 Subject: [PATCH 1142/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 07e20618..841ff14a 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -24,3 +24,14 @@ def my_output(X, weights, biases): def loss_function(y_true, y_prediction): return tf.reduce_mean(tf.square(y_true - y_prediction)) + + +my_optimization_algorithm = tf.optimizers.SGD(learning_rate=0.02) + +tf.random.set_seed(1) + +weights = tf.Variable(tf.random.normal(shape=[1])) +biases = tf.Variable(tf.random.normal(shape=[1])) +history = list() + + From d5ef45b50e9e15cf7c97b0cbe7f182b4c40a687e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 00:30:43 +0800 Subject: [PATCH 1143/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 841ff14a..a991bbf3 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -34,4 +34,7 @@ def loss_function(y_true, y_prediction): biases = tf.Variable(tf.random.normal(shape=[1])) history = list() - +for i in range(100): + random_index = np.random.choice(100) + rand_x = [x_values[random_index]] + rand_y = [y_values[random_index]] From b06efe2c90641ec49cd31c2dc5bfdc7186ca6cef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 00:34:33 +0800 Subject: [PATCH 1144/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index a991bbf3..53bbff21 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -38,3 +38,8 @@ def loss_function(y_true, y_prediction): random_index = np.random.choice(100) rand_x = [x_values[random_index]] rand_y = [y_values[random_index]] + + with tf.GradientTape() as tape: + predictions = my_output(X=rand_x, weights=weights, biases=biases) + loss = loss_function(y_true=rand_y, y_prediction=predictions) + From 2788d9eb29abad82676d9a7d012cbf35eb547b81 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 00:42:48 +0800 Subject: [PATCH 1145/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 53bbff21..f6e57f45 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -18,12 +18,13 @@ plt.scatter(x=x_values, y=y_values) plt.show() + def my_output(X, weights, biases): return tf.add(tf.multiply(x=X, y=weights), biases) def loss_function(y_true, y_prediction): - return tf.reduce_mean(tf.square(y_true - y_prediction)) + return tf.reduce_mean(tf.square(y_prediction - y_true)) my_optimization_algorithm = tf.optimizers.SGD(learning_rate=0.02) @@ -42,4 +43,3 @@ def loss_function(y_true, y_prediction): with tf.GradientTape() as tape: predictions = my_output(X=rand_x, weights=weights, biases=biases) loss = loss_function(y_true=rand_y, y_prediction=predictions) - From 307df502bb24606fae2176796af5582a164096f2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 00:45:03 +0800 Subject: [PATCH 1146/2002] Committed 2022/10/15 --- Supplementary materials/TensorFlow/Back_propagate.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index f6e57f45..2e411ea5 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -43,3 +43,6 @@ def loss_function(y_true, y_prediction): with tf.GradientTape() as tape: predictions = my_output(X=rand_x, weights=weights, biases=biases) loss = loss_function(y_true=rand_y, y_prediction=predictions) + + history.append(loss.NumPy()) + From 888451e3aa70a75ddca3129c490b3b19316ffc7f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 13:27:50 +0800 Subject: [PATCH 1147/2002] Committed 2022/10/16 --- .../2022/September/Metro_area_EN_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/Metro_area_EN_ZH_JP.py index 50c107f8..6fa9ddb6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/Metro_area_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/September/Metro_area_EN_ZH_JP.py @@ -29,7 +29,7 @@ plt.title("2022/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: hhttps://web.archive.org/web/20220924052436/https://www.104.com.tw/jobs/main/category/?jobsource=category") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20220924052436/https://www.104.com.tw/jobs/main/category/?jobsource=category") plt.ylim(38000, 165000) From 304a45ae66ed714e8736b5993b5c43f81b354734 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Oct 2022 15:43:01 +0800 Subject: [PATCH 1148/2002] Committed 2022/10/16 --- Supplementary materials/TensorFlow/Back_propagate.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 2e411ea5..656c3c0b 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -44,5 +44,6 @@ def loss_function(y_true, y_prediction): predictions = my_output(X=rand_x, weights=weights, biases=biases) loss = loss_function(y_true=rand_y, y_prediction=predictions) - history.append(loss.NumPy()) + history.append(loss.numpy()) + From fc5b1f5d61cbd82f2ed3e68f9db73bb2df5b3c73 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 17 Oct 2022 15:02:38 +0800 Subject: [PATCH 1149/2002] Committed 2022/10/17 --- Supplementary materials/TensorFlow/Back_propagate.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index 656c3c0b..de40553f 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -45,5 +45,15 @@ def loss_function(y_true, y_prediction): loss = loss_function(y_true=rand_y, y_prediction=predictions) history.append(loss.numpy()) + gradients = tape.gradient(target=loss, sources=[weights, biases]) + my_optimization_algorithm.apply_gradients(zip(gradients, [weights, biases])) + if(i + 1) % 25 == 0: + print(f'Step {i+1} Weights: {weights.numpy()} Biases: {biases.numpy()}') + print(f'Loss = {loss.numpy()}') + +plt.plot(history) +plt.xlabel('iterations') +plt.ylabel('loss') +plt.show() From 95f617cb8e48370dc2b183756382c99d66ecc1a6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 17 Oct 2022 15:08:01 +0800 Subject: [PATCH 1150/2002] Committed 2022/10/17 --- Supplementary materials/TensorFlow/Back_propagate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index de40553f..f2a6f4f5 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -5,7 +5,7 @@ np.random.seed(0) # Sample random numbers from a normal distribution with mean 1 and standard deviation of 0.1. -x_values = np.random.normal(1, 0.1, 100).astype(np.float) +x_values = np.random.normal(1, 0.1, 100).astype(np.float32) print("x_values: ", x_values) From 632dd5ec5e05a1d48d79cd969862f31ee502e681 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 17 Oct 2022 15:10:18 +0800 Subject: [PATCH 1151/2002] Committed 2022/10/17 --- Supplementary materials/TensorFlow/Back_propagate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index f2a6f4f5..fc4837d4 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -48,7 +48,7 @@ def loss_function(y_true, y_prediction): gradients = tape.gradient(target=loss, sources=[weights, biases]) my_optimization_algorithm.apply_gradients(zip(gradients, [weights, biases])) - if(i + 1) % 25 == 0: + if(i + 1) % 5 == 0: print(f'Step {i+1} Weights: {weights.numpy()} Biases: {biases.numpy()}') print(f'Loss = {loss.numpy()}') From 2b907b8625eb69ee0437097db43916c93d86beb1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 17 Oct 2022 15:12:24 +0800 Subject: [PATCH 1152/2002] Committed 2022/10/17 --- Supplementary materials/TensorFlow/Back_propagate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index fc4837d4..dac5fea2 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -48,7 +48,7 @@ def loss_function(y_true, y_prediction): gradients = tape.gradient(target=loss, sources=[weights, biases]) my_optimization_algorithm.apply_gradients(zip(gradients, [weights, biases])) - if(i + 1) % 5 == 0: + if(i + 1) % 2 == 0: print(f'Step {i+1} Weights: {weights.numpy()} Biases: {biases.numpy()}') print(f'Loss = {loss.numpy()}') From 20db3c471ab47f5acc8a77bcec26e3c2d10c4f07 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 17 Oct 2022 15:16:07 +0800 Subject: [PATCH 1153/2002] Committed 2022/10/17 --- Supplementary materials/TensorFlow/Back_propagate.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Supplementary materials/TensorFlow/Back_propagate.py b/Supplementary materials/TensorFlow/Back_propagate.py index dac5fea2..7a3b45ff 100644 --- a/Supplementary materials/TensorFlow/Back_propagate.py +++ b/Supplementary materials/TensorFlow/Back_propagate.py @@ -57,3 +57,7 @@ def loss_function(y_true, y_prediction): plt.xlabel('iterations') plt.ylabel('loss') plt.show() + +# Source: https://github.com/PacktPublishing/Machine-Learning-Using-TensorFlow-Cookbook/blob/master/ch2/2.%20The%20TensorFlow%20Way.ipynb +# Reference: https://www.tensorflow.org/guide/autodiff + From 02974f0eb27518438c76c3774cdde88a7636df4c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 25 Oct 2022 14:34:41 +0800 Subject: [PATCH 1154/2002] Committed 2022/10/25 --- .../2022/October/CC-BY.png | Bin 0 -> 1283 bytes .../2022/October/Metro_area_EN_ZH_JP.py | 37 ++++++++++++++++++ .../2022/October/__init__.py | 0 3 files changed, 37 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/CC-BY.png create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Tue, 25 Oct 2022 15:00:30 +0800 Subject: [PATCH 1155/2002] Committed 2022/10/25 --- .../2022/October/Metro_area_EN_ZH_JP.py | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py index 9cc57bca..af072579 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py @@ -1,18 +1,21 @@ import matplotlib.pyplot as plt import matplotlib +import matplotlib.cbook as cbook +import matplotlib.image as image # Using the magic encoding # -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [176040, 87874, 74498, 38787, 39508] +position_vacancies = [1973+109860+62930+4205, 46489+34685+6557, 59061+3512+10472, 4346+6630+27509, 37149+4361] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] fig, ax = plt.subplots(figsize=(9, 9)) -plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # [1] +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plt.tick_params(axis='y', labelsize=12) # [2] @@ -21,17 +24,35 @@ for rect in plot: height = rect.get_height() ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, - '%d' % int(height), ha='center', va='bottom', fontsize=12) # [1] + '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2022/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # [1] +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: https://web.archive.org/web/20220520164749/https://www.104.com.tw/jb/category/?cat=2") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") -plt.ylim(35000, 165000) +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] plt.show() # Reference: -# 1. https://stackoverflow.com/a/12444777/ -# 2. https://stackoverflow.com/a/11386056/ \ No newline at end of file +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 624495e5ead83bc540e1ffa68fd98f6c4c939f49 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 25 Oct 2022 15:02:39 +0800 Subject: [PATCH 1156/2002] Committed 2022/10/25 --- .../2022/October/Metro_area_EN_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py index af072579..49bcfe1d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py @@ -9,7 +9,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [1973+109860+62930+4205, 46489+34685+6557, 59061+3512+10472, 4346+6630+27509, 37149+4361] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4346+6630+27509, 37149+4361] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 05bed6f5ce33e38250a07d42e4caffd446c6c210 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 25 Oct 2022 15:04:23 +0800 Subject: [PATCH 1157/2002] Committed 2022/10/25 --- .../2022/October/Metro_area_EN_ZH_JP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py index 49bcfe1d..4d89c1ce 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP.py @@ -9,7 +9,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4346+6630+27509, 37149+4361] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 52e71695560550c703ab65eaf4a9c1c7a5292da5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 31 Oct 2022 17:03:04 +0800 Subject: [PATCH 1158/2002] Committed 2022/10/31 --- .../Month_over_month_2022/August.py | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py new file mode 100644 index 00000000..8fe9852c --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py @@ -0,0 +1,118 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March + [8, 25, 23, 23, 27, 31], # April + [7, 34, 16, 27, 27, 27], # May + [4, 25, 27, 15, 23, 26], # June + [4, 27, 16, 23, 28, 31], # July + [6, 26, 20, 31, 22, 33], # August + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-07)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='20', transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 056ee2a4b59886ff25b4a7f489144a05cba455c2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 31 Oct 2022 17:15:02 +0800 Subject: [PATCH 1159/2002] Committed 2022/10/31 --- .../Road safety/Month_over_month_2022/August.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py index 8fe9852c..2e2172b3 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py @@ -7,7 +7,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July"] +month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug"] deaths = [[13, 23, 29, 28, 24, 23], # January [7, 16, 20, 24, 20, 30], # February @@ -69,17 +69,17 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-07)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-08)") axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From 06b304c36be2016d9baf106e87a354269fdadf29 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 31 Oct 2022 17:18:42 +0800 Subject: [PATCH 1160/2002] Committed 2022/10/31 --- .../Road safety/Month_over_month_2022/August.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py index 2e2172b3..09273361 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/August.py @@ -15,7 +15,7 @@ [8, 25, 23, 23, 27, 31], # April [7, 34, 16, 27, 27, 27], # May [4, 25, 27, 15, 23, 26], # June - [4, 27, 16, 23, 28, 31], # July + [4, 27, 16, 24, 28, 31], # July [6, 26, 20, 31, 22, 33], # August ] From 1947e330584c6f3d59dfbca1274394ee2d23df3b Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 31 Oct 2022 21:59:30 +0800 Subject: [PATCH 1161/2002] Committed 2022/10/31 --- ...he number of births 1994-2022_September.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_September.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_September.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_September.py new file mode 100644 index 00000000..beb325e5 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_September.py @@ -0,0 +1,67 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950 + 11902 + 12217)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022/09 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births (Unit: 1 baby)") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) + +plt.text(x=0.2, y=0.4, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=axe.transAxes) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From 6d17a237ebfb0ea75c87002e4806ee6a98314d4d Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 5 Nov 2022 17:26:17 +0800 Subject: [PATCH 1162/2002] Committed 2022/11/05 --- .../2022/October/Metro_area_EN_ZH_JP_edge.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_edge.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_edge.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_edge.py new file mode 100644 index 00000000..2e03cb5d --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_edge.py @@ -0,0 +1,58 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='green') + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 491163889a756f24aea52a7ef55f06cb538f2c73 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 5 Nov 2022 21:10:42 +0800 Subject: [PATCH 1163/2002] Committed 2022/11/05 --- .../Metro_area_EN_ZH_JP_colorful_bars.py | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py new file mode 100644 index 00000000..cab99dfd --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py @@ -0,0 +1,59 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='green', color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 0d903d1a2e631a8e85f72fc8c2503399e690c8db Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 5 Nov 2022 21:20:48 +0800 Subject: [PATCH 1164/2002] Committed 2022/11/05 --- .../2022/October/Metro_area_EN_ZH_JP_colorful_bars.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py index cab99dfd..87882397 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py @@ -20,7 +20,11 @@ # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plt.tick_params(axis='y', labelsize=12) # [2] -plot = ax.bar(region_num, position_vacancies, edgecolor='green', color=colour.CSS4_COLORS.get('pink')) +plot = ax.bar(region_num, position_vacancies, edgecolor='green', color=[colour.CSS4_COLORS.get('pink'), + colour.CSS4_COLORS.get('sandybrown'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('olivedrab'), + colour.CSS4_COLORS.get('palegreen')]) for rect in plot: height = rect.get_height() From 05461e21e87ae2ee578408dd7cecc996e80ceaf7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 5 Nov 2022 21:22:34 +0800 Subject: [PATCH 1165/2002] Committed 2022/11/05 --- .../2022/October/Metro_area_EN_ZH_JP_colorful_bars.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py index 87882397..db0eaa51 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py @@ -24,7 +24,7 @@ colour.CSS4_COLORS.get('sandybrown'), colour.CSS4_COLORS.get('deepskyblue'), colour.CSS4_COLORS.get('olivedrab'), - colour.CSS4_COLORS.get('palegreen')]) + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: height = rect.get_height() From b9f5b0fa8d68db6050c223b1c648b9db3865a0ac Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 5 Nov 2022 21:23:55 +0800 Subject: [PATCH 1166/2002] Committed 2022/11/05 --- .../2022/October/Metro_area_EN_ZH_JP_colorful_bars.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py index db0eaa51..95a06612 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_colorful_bars.py @@ -53,6 +53,9 @@ # 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html # 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html # 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html # Notes: # 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, From 2d25a6a649b987a34640bc99e818df9bbd51540d Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 03:16:45 +0800 Subject: [PATCH 1167/2002] Committed 2022/11/07 --- ...tro_area_EN_ZH_JP_bi-polar_colored_bars.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py new file mode 100644 index 00000000..e1e3ebb5 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='green', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 118b19e56a75471d22510fede679972062500275 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 03:18:16 +0800 Subject: [PATCH 1168/2002] Committed 2022/11/07 --- .../October/Metro_area_EN_ZH_JP_bipolar2.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_bipolar2.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_bipolar2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_bipolar2.py new file mode 100644 index 00000000..d08f739d --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Metro_area_EN_ZH_JP_bipolar2.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='red', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 9feaf6c4c75a5d22041ab59b0aa425398475f0a1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 03:29:23 +0800 Subject: [PATCH 1169/2002] Committed 2022/11/07 --- .../2022/October/dark_sheet.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py new file mode 100644 index 00000000..97e52071 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py @@ -0,0 +1,68 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +plt.style.use('dark_background') + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='red', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From b5ed703191ee4bd027e94f27e80bb26c3b20f717 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 03:31:41 +0800 Subject: [PATCH 1170/2002] Committed 2022/11/07 --- .../2022/October/Dark_sheet_2.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py new file mode 100644 index 00000000..86c87d16 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py @@ -0,0 +1,68 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +plt.style.use('dark_background') + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='green', color=[colour.CSS4_COLORS.get('pink'), + colour.CSS4_COLORS.get('sandybrown'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('olivedrab'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From a0192042d94b2897ba42874790269100a5f162d5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 03:34:10 +0800 Subject: [PATCH 1171/2002] Committed 2022/11/07 --- .../2022/October/dark_sheet.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py index 97e52071..aa235f2e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py @@ -7,7 +7,7 @@ # -*- coding: utf-8 -*- from matplotlib.transforms import IdentityTransform -matplotlib.rc('font', family="MS Gothic") +matplotlib.rc('font', family="MS Gothic") # [7][8] plt.style.use('dark_background') @@ -58,6 +58,8 @@ # 4. https://www.google.com/search?q=matplotlib+bar+color # 5. https://www.python-graph-gallery.com/3-control-color-of-barplots # 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://www.google.com/search?q=matplotlib+dark+theme +# 8. https://matplotlib.org/stable/gallery/style_sheets/dark_background.html # Notes: # 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, From d17ebec7a7ba01a74fc142738b21e3dc093109e6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 03:34:41 +0800 Subject: [PATCH 1172/2002] Committed 2022/11/07 --- .../2022/October/Dark_sheet_2.py | 2 +- .../2022/October/dark_sheet.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py index 86c87d16..65a20d6c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py @@ -9,7 +9,7 @@ matplotlib.rc('font', family="MS Gothic") -plt.style.use('dark_background') +plt.style.use('dark_background') # [7][8] region_num = [1, 2, 3, 4, 5] position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py index aa235f2e..17e514c3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet.py @@ -7,9 +7,9 @@ # -*- coding: utf-8 -*- from matplotlib.transforms import IdentityTransform -matplotlib.rc('font', family="MS Gothic") # [7][8] +matplotlib.rc('font', family="MS Gothic") -plt.style.use('dark_background') +plt.style.use('dark_background') # [7][8] region_num = [1, 2, 3, 4, 5] position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] From e77a259568febf75095577f31f98136974353ffb Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 03:35:13 +0800 Subject: [PATCH 1173/2002] Committed 2022/11/07 --- .../2022/October/Dark_sheet_2.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py index 65a20d6c..da3e419c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2.py @@ -58,6 +58,8 @@ # 4. https://www.google.com/search?q=matplotlib+bar+color # 5. https://www.python-graph-gallery.com/3-control-color-of-barplots # 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://www.google.com/search?q=matplotlib+dark+theme +# 8. https://matplotlib.org/stable/gallery/style_sheets/dark_background.html # Notes: # 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, From e70a47cced47e9dce8c8ea84b1099940e6c4deee Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 19:40:39 +0800 Subject: [PATCH 1174/2002] Committed 2022/11/07 --- .../Independent set & bipartite graphs/Bipartite.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/Bipartite.py diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py new file mode 100644 index 00000000..8f002c9a --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py @@ -0,0 +1,7 @@ +import networkx as nx + +Bipartite = nx.Graph() + +Bipartite.add_nodes_from(["Bob", "Carl", "Diane", "Eve", "Frank", "George"], bipartite=0) +Bipartite.add_nodes_from(["George", "Frank", "Eve", "Diane", "Carl", "Bob"], bipartite=1) +Bipartite.add_edges_from([("Bob", "George"), ("Bob", "Frank"), ("Bob", "Eve")]) \ No newline at end of file From 6c807f08efbcafad39605e31e18ec0e30968212a Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 19:47:33 +0800 Subject: [PATCH 1175/2002] Committed 2022/11/07 --- .../Bipartite.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py index 8f002c9a..1319ce77 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py @@ -4,4 +4,21 @@ Bipartite.add_nodes_from(["Bob", "Carl", "Diane", "Eve", "Frank", "George"], bipartite=0) Bipartite.add_nodes_from(["George", "Frank", "Eve", "Diane", "Carl", "Bob"], bipartite=1) -Bipartite.add_edges_from([("Bob", "George"), ("Bob", "Frank"), ("Bob", "Eve")]) \ No newline at end of file +Bipartite.add_edges_from([("Bob", "George"), ("Bob", "Frank"), ("Bob", "Eve")]) + +import pandas as pd + +df = pd.DataFrame(index=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], + columns=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], + data=[ + [0, 1, 1, 1, 1, 1], + [1, 0, 1, 1, 1, 1], + [1, 1, 0, 1, 1, 1], + [1, 1, 1, 0, 1, 1], + [1, 1, 1, 1, 0, 1], + [1, 1, 1, 1, 1, 0] + ]) + +print(df) + + From 6d204425e87a8cea86c65eaae191c5961fcf1306 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 19:48:31 +0800 Subject: [PATCH 1176/2002] Committed 2022/11/07 --- .../Bipartite.py | 14 -------------- .../Bipartite2.py | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py index 1319ce77..478daa09 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py @@ -6,19 +6,5 @@ Bipartite.add_nodes_from(["George", "Frank", "Eve", "Diane", "Carl", "Bob"], bipartite=1) Bipartite.add_edges_from([("Bob", "George"), ("Bob", "Frank"), ("Bob", "Eve")]) -import pandas as pd - -df = pd.DataFrame(index=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], - columns=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], - data=[ - [0, 1, 1, 1, 1, 1], - [1, 0, 1, 1, 1, 1], - [1, 1, 0, 1, 1, 1], - [1, 1, 1, 0, 1, 1], - [1, 1, 1, 1, 0, 1], - [1, 1, 1, 1, 1, 0] - ]) - -print(df) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py new file mode 100644 index 00000000..6b486b0e --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py @@ -0,0 +1,18 @@ +import pandas as pd +import networkx as nx + +df = pd.DataFrame(index=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], + columns=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], + data=[ + [0, 1, 1, 1, 1, 1], + [1, 0, 1, 1, 1, 1], + [1, 1, 0, 1, 1, 1], + [1, 1, 1, 0, 1, 1], + [1, 1, 1, 1, 0, 1], + [1, 1, 1, 1, 1, 0] + ]) + +print(df) + + +Bipartite = nx.Graph() From 1c8cc3cc592da9bc8a3b72272d8b2fd41728793f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 20:01:06 +0800 Subject: [PATCH 1177/2002] Committed 2022/11/07 --- .../Bipartite2.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py index 6b486b0e..4316b257 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py @@ -1,5 +1,6 @@ import pandas as pd import networkx as nx +import matplotlib.pyplot as plt df = pd.DataFrame(index=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], columns=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], @@ -14,5 +15,16 @@ print(df) - Bipartite = nx.Graph() +Bipartite.add_nodes_from(df.index, bipartite=0) +Bipartite.add_nodes_from(df.columns, bipartite=1) + +s = df.stack() +Bipartite.add_edges_from(s[s == 1].index) + +top = nx.bipartite.sets(G=Bipartite)[0] +pos = nx.bipartite_layout(G=Bipartite, nodes=top) + +nx.draw(Bipartite, pos=pos, node_color='lightgreen', node_size=2500, with_labels=True) + +plt.show() From 0c19a731ace661b73bdd71e8c6a786723a02f5f4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 20:05:26 +0800 Subject: [PATCH 1178/2002] Committed 2022/11/07 --- NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py index 4316b257..f0c69423 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py @@ -3,7 +3,7 @@ import matplotlib.pyplot as plt df = pd.DataFrame(index=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], - columns=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], + columns=["Bob1", "Carl1", "Diane1", "Eve1", "Frank1", "George1"], data=[ [0, 1, 1, 1, 1, 1], [1, 0, 1, 1, 1, 1], From ce8121e99a2c4cababd00863879dfb8d9687f2f9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 20:09:02 +0800 Subject: [PATCH 1179/2002] Committed 2022/11/07 --- NetworkX Altas/Independent set & bipartite graphs/Bipartite.py | 3 ++- .../Independent set & bipartite graphs/Bipartite2.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py index 478daa09..eb48d017 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite.py @@ -6,5 +6,6 @@ Bipartite.add_nodes_from(["George", "Frank", "Eve", "Diane", "Carl", "Bob"], bipartite=1) Bipartite.add_edges_from([("Bob", "George"), ("Bob", "Frank"), ("Bob", "Eve")]) +# Abandoned because this method is overly time-consuming. - +# Reference: https://stackoverflow.com/a/62519225/ diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py index f0c69423..c1ace2ca 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py @@ -28,3 +28,6 @@ nx.draw(Bipartite, pos=pos, node_color='lightgreen', node_size=2500, with_labels=True) plt.show() + + +# Reference: https://stackoverflow.com/a/61125791/ From 0c95bd63c88130c67ce9f3a4e28156626bf600a5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Nov 2022 20:14:46 +0800 Subject: [PATCH 1180/2002] Committed 2022/11/07 --- .../Bipartite2.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py index c1ace2ca..40850c56 100644 --- a/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite2.py @@ -2,15 +2,16 @@ import networkx as nx import matplotlib.pyplot as plt -df = pd.DataFrame(index=["Bob", "Carl", "Diane", "Eve", "Frank", "George"], - columns=["Bob1", "Carl1", "Diane1", "Eve1", "Frank1", "George1"], +df = pd.DataFrame(index=["Alice", "Bob", "Carl", "Diane", "Eve", "Frank", "George"], + columns=["Alice1", "Bob1", "Carl1", "Diane1", "Eve1", "Frank1", "George1"], data=[ - [0, 1, 1, 1, 1, 1], - [1, 0, 1, 1, 1, 1], - [1, 1, 0, 1, 1, 1], - [1, 1, 1, 0, 1, 1], - [1, 1, 1, 1, 0, 1], - [1, 1, 1, 1, 1, 0] + [0, 1, 1, 1, 1, 1, 1], + [1, 0, 1, 1, 1, 1, 1], + [1, 1, 0, 1, 1, 1, 1], + [1, 1, 1, 0, 1, 1, 1], + [1, 1, 1, 1, 0, 1, 1], + [1, 1, 1, 1, 1, 0, 1], + [1, 1, 1, 1, 1, 1, 0] ]) print(df) From 867d345d0b31924efe81d7ffec0dd3dbf0071a89 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Nov 2022 22:07:29 +0800 Subject: [PATCH 1181/2002] Committed 2022/11/26 --- .../2022/November/Metro_area_EN_ZH_JP.py | 58 +++++++++++++++++++ .../2022/November/__init__.py | 0 2 files changed, 58 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/Metro_area_EN_ZH_JP.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/Metro_area_EN_ZH_JP.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/Metro_area_EN_ZH_JP.py new file mode 100644 index 00000000..cd7fc54b --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/Metro_area_EN_ZH_JP.py @@ -0,0 +1,58 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1986+109298+61910+4247, 45574+32736+6243, 56198+3569+9591, 4316+6449+26284, 36088+4379] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/11 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221125151358/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/__init__.py new file mode 100644 index 00000000..e69de29b From 8d38b47e413c69a6d948a33f3b645ebff5961948 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Nov 2022 22:24:56 +0800 Subject: [PATCH 1182/2002] Committed 2022/11/26 --- .../2022/November/CC-BY.png | Bin 0 -> 1283 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/CC-BY.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/November/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Sat, 3 Dec 2022 16:57:01 +0800 Subject: [PATCH 1183/2002] Committed 2022/12/03 --- .../Month_over_month_2022/September.py | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/September.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/September.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/September.py new file mode 100644 index 00000000..21449fda --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/September.py @@ -0,0 +1,119 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March + [8, 25, 23, 23, 27, 31], # April + [7, 34, 16, 27, 27, 27], # May + [4, 25, 27, 15, 23, 26], # June + [4, 27, 16, 24, 28, 31], # July + [6, 26, 20, 31, 22, 33], # August + [14, 31, 30, 33, 22, 23], # September + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-08)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='20', transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 12524d45a56c872ae47e95b8e3def0193715c2af Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Dec 2022 16:59:08 +0800 Subject: [PATCH 1184/2002] Committed 2022/12/03 --- .../Month_over_month_2022/September.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/September.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/September.py index 21449fda..944f591f 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/September.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/September.py @@ -7,7 +7,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug"] +month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep"] deaths = [[13, 23, 29, 28, 24, 23], # January [7, 16, 20, 24, 20, 30], # February @@ -70,17 +70,17 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-08)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-09)") axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From f909c6a1f3a47aa29825b209efc89b5b3c416ac6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 4 Dec 2022 03:46:37 +0800 Subject: [PATCH 1185/2002] Committed 2022/12/04 --- .../Sewage System Coverage/2021.py | 1 + .../Sewage System Coverage/__init__.py | 0 2 files changed, 1 insertion(+) create mode 100644 The attainments and realizations of my dreams/Sewage System Coverage/2021.py create mode 100644 The attainments and realizations of my dreams/Sewage System Coverage/__init__.py diff --git a/The attainments and realizations of my dreams/Sewage System Coverage/2021.py b/The attainments and realizations of my dreams/Sewage System Coverage/2021.py new file mode 100644 index 00000000..5dc8e295 --- /dev/null +++ b/The attainments and realizations of my dreams/Sewage System Coverage/2021.py @@ -0,0 +1 @@ +# https://statis.moi.gov.tw/micst/stmain.jsp?sys=220&ym=9800&ymt=11000&kind=21&type=1&funid=c0830101&cycle=4&outmode=0&compmode=0&outkind=1&fld3=1&codspc0=0,2,3,2,6,1,9,1,12,1,&rdm=yuilWyVc \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Sewage System Coverage/__init__.py b/The attainments and realizations of my dreams/Sewage System Coverage/__init__.py new file mode 100644 index 00000000..e69de29b From 0e223a14d740e5fce081d81a4ab1d1ca0e1ba2b0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 21 Dec 2022 09:20:55 +0800 Subject: [PATCH 1186/2002] Committed 2022/12/21 --- Python.iml | 2 +- .../2022/December/CC-BY.png | Bin 0 -> 1283 bytes ...tro_area_EN_ZH_JP_bi-polar_colored_bars.py | 66 ++++++++++++++++++ .../2022/December/__init__.py | 0 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/CC-BY.png create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/__init__.py diff --git a/Python.iml b/Python.iml index 798190b0..436dd296 100644 --- a/Python.iml +++ b/Python.iml @@ -3,7 +3,7 @@ - + diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Wed, 21 Dec 2022 09:24:01 +0800 Subject: [PATCH 1187/2002] Committed 2022/12/21 --- ...o_area_EN_ZH_JP_bi-polar_colored_bars_2.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_2.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_2.py new file mode 100644 index 00000000..327d1c08 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_2.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='red', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 86d7f596dc624936bcbadd671c472a468f917c8f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 24 Dec 2022 13:58:38 +0800 Subject: [PATCH 1188/2002] Committed 2022/12/24 --- .../December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py index 67ae0ef0..8ff51c99 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] +position_vacancies = [2003+108202+60340+4188, 44310+32291+6166, 54606+3483+9098, 4193+6351+25545, 35594+4417] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] @@ -31,10 +31,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2022/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") plt.ylim(38000, 165000) From 1d117560bb94262658d62ba9e32b1e83e59b3969 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 24 Dec 2022 13:58:58 +0800 Subject: [PATCH 1189/2002] Committed 2022/12/24 --- .idea/php.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .idea/php.xml diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 00000000..f5f27444 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file From 38f7bff630393c6dd194839876b5003bde518ac2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 24 Dec 2022 14:01:34 +0800 Subject: [PATCH 1190/2002] Committed 2022/12/24 --- .../2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py index 8ff51c99..ab932dfe 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") -plt.ylim(38000, 165000) +plt.ylim(36500, 160000) img = image.imread('CC-BY.png') From 9b9007094126d74ce75d9b23958580f9daf1eda6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 24 Dec 2022 14:09:03 +0800 Subject: [PATCH 1191/2002] Committed 2022/12/24 --- .../Metro_area_EN_ZH_JP_bi-polar_colored_bars_2.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_2.py index 327d1c08..6314f1a8 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_2.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_2.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] +position_vacancies = [2003+108202+60340+4188, 44310+32291+6166, 54606+3483+9098, 4193+6351+25545, 35594+4417] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] @@ -31,12 +31,12 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2022/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") -plt.ylim(38000, 165000) +plt.ylim(36500, 160000) img = image.imread('CC-BY.png') From 27800fc54d368dc9d3d84645869f1e36f3cf6bdb Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 24 Dec 2022 14:27:57 +0800 Subject: [PATCH 1192/2002] Committed 2022/12/24 --- ...o_area_EN_ZH_JP_bi-polar_colored_bars_3.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_3.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_3.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_3.py new file mode 100644 index 00000000..ffc18c7c --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Metro_area_EN_ZH_JP_bi-polar_colored_bars_3.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2003+108202+60340+4188, 44310+32291+6166, 54606+3483+9098, 4193+6351+25545, 35594+4417] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(36500, 160000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 4f808fc73a2ff0c06f08a5ced9af4279b4687deb Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 26 Dec 2022 14:15:48 +0800 Subject: [PATCH 1193/2002] Committed 2022/12/26 --- .../2022/December/Dark_theme.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Dark_theme.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Dark_theme.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Dark_theme.py new file mode 100644 index 00000000..c824e2cc --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/Dark_theme.py @@ -0,0 +1,68 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +plt.style.use('dark_background') + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2003+108202+60340+4188, 44310+32291+6166, 54606+3483+9098, 4193+6351+25545, 35594+4417] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(36500, 160000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 17be0f355f81b2318487062ebbaffbd48c53ed0b Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 26 Dec 2022 14:20:23 +0800 Subject: [PATCH 1194/2002] Committed 2022/12/26 --- .../December/City_EN_ZH_JP_bi-polar_colar.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py new file mode 100644 index 00000000..cb605ed3 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [108202, 60340, 44310, 54606, 25545, 35594] + +label = ["啣撣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(36500, 160000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 4081c9331e361bca8a06af3b26a509d3ebf07912 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 26 Dec 2022 14:23:35 +0800 Subject: [PATCH 1195/2002] Committed 2022/12/26 --- .../2022/December/City_EN_ZH_JP_bi-polar_colar.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py index cb605ed3..26d9e54d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py @@ -9,11 +9,10 @@ matplotlib.rc('font', family="MS Gothic") -region_num = [1, 2, 3, 4, 5] +region_num = [1, 2, 3, 4, 5, 6] position_vacancies = [108202, 60340, 44310, 54606, 25545, 35594] -label = ["啣撣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", - "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "唬葉\n Taichung", "啣\nTainan", "擃\n Kaohsiung"] fig, ax = plt.subplots(figsize=(9, 9)) plt.xticks(region_num, labels=label, rotation=7, fontsize=12) @@ -21,6 +20,7 @@ plt.tick_params(axis='y', labelsize=12) # [2] plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), colour.CSS4_COLORS.get('deepskyblue'), colour.CSS4_COLORS.get('deepskyblue'), colour.CSS4_COLORS.get('palegreen'), From 88e523a61eca95d0ebbaf994be9119748b098705 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 26 Dec 2022 14:25:46 +0800 Subject: [PATCH 1196/2002] Committed 2022/12/26 --- .../2022/December/City_EN_ZH_JP_bi-polar_colar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py index 26d9e54d..44666dc2 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py @@ -12,7 +12,7 @@ region_num = [1, 2, 3, 4, 5, 6] position_vacancies = [108202, 60340, 44310, 54606, 25545, 35594] -label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "唬葉\n Taichung", "啣\nTainan", "擃\n Kaohsiung"] +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] fig, ax = plt.subplots(figsize=(9, 9)) plt.xticks(region_num, labels=label, rotation=7, fontsize=12) From 1792180c14f83a66bf7b333d5634ecf4aba0eff0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 26 Dec 2022 14:27:00 +0800 Subject: [PATCH 1197/2002] Committed 2022/12/26 --- .../2022/December/City_EN_ZH_JP_bi-polar_colar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py index 44666dc2..bf4b3f25 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") -plt.ylim(36500, 160000) +plt.ylim(25500, 100000) img = image.imread('CC-BY.png') From 0eff345b429ccbe8d77cd4d1045d21a8d31bf817 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 26 Dec 2022 14:29:04 +0800 Subject: [PATCH 1198/2002] Committed 2022/12/26 --- .../2022/December/City_EN_ZH_JP_bi-polar_colar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py index bf4b3f25..58c4c674 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/December/City_EN_ZH_JP_bi-polar_colar.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2022/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2022/12 啁撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") From ea5bfea7ee5f1645dc0fa135be7fef16ddf7e81d Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 1 Jan 2023 18:16:47 +0800 Subject: [PATCH 1199/2002] Committed 2023/01/01 --- .../Bipartite3.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/Bipartite3.py diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite3.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite3.py new file mode 100644 index 00000000..980a65e8 --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite3.py @@ -0,0 +1,34 @@ +import pandas as pd +import networkx as nx +import matplotlib.pyplot as plt + +df = pd.DataFrame(index=["i1", "i2", "i3", "i4", "i5", "i6", "i7"], + columns=["O1", "O2", "O3", "O4"], + data=[ + [1, 0, 0, 0], + [1, 1, 0, 0], + [0, 1, 0, 0], + [1, 1, 1, 0], + [0, 0, 0, 1], + [0, 0, 1, 1], + [0, 0, 0, 1] + ]) + +print(df) + +Bipartite = nx.Graph() +Bipartite.add_nodes_from(df.index, bipartite=0) +Bipartite.add_nodes_from(df.columns, bipartite=1) + +s = df.stack() +Bipartite.add_edges_from(s[s == 1].index) + +top = nx.bipartite.sets(G=Bipartite)[0] +pos = nx.bipartite_layout(G=Bipartite, nodes=top) + +nx.draw(Bipartite, pos=pos, node_color='lightgreen', node_size=500, with_labels=True) + +plt.show() + + +# Reference: https://stackoverflow.com/a/61125791/ From ca419db3dda4b0521f98d9c8ff88faed93de7a00 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 1 Jan 2023 18:29:26 +0800 Subject: [PATCH 1200/2002] Committed 2023/01/01 --- NetworkX Altas/Circuit_bipartite.py | 93 +++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 NetworkX Altas/Circuit_bipartite.py diff --git a/NetworkX Altas/Circuit_bipartite.py b/NetworkX Altas/Circuit_bipartite.py new file mode 100644 index 00000000..16391868 --- /dev/null +++ b/NetworkX Altas/Circuit_bipartite.py @@ -0,0 +1,93 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="i1", layer=0) +circuit.add_node(1, label="i2", layer=0) +circuit.add_node(2, label="i3", layer=0) +circuit.add_node(3, label="i4", layer=0) +circuit.add_node(4, label="i5", layer=0) +circuit.add_node(5, label="i6", layer=0) +circuit.add_node(6, label="i7", layer=0) + +# Layer 1 +circuit.add_node(7, label="O1", layer=1) +circuit.add_node(8, label="O2", layer=1) +circuit.add_node(9, label="O3", layer=1) +circuit.add_node(10, label="O4", layer=1) + +circuit.add_edge(0, 7) +circuit.add_edge(1, 7) +circuit.add_edge(1, 8) +circuit.add_edge(2, 8) +circuit.add_edge(3, 7) +circuit.add_edge(3, 8) +circuit.add_edge(3, 9) +circuit.add_edge(4, 10) +circuit.add_edge(5, 9) +circuit.add_edge(5, 10) +circuit.add_edge(6, 10) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "black", + "labels": labels, + "font_size": 22, + "font_color": "white" +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +subgraph = nx.number_attracting_components(G=circuit) + +print(subgraph) From 32ca6bb73da0ce38b96f0cbf42b01da1c0fd1b64 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 1 Jan 2023 18:40:36 +0800 Subject: [PATCH 1201/2002] Committed 2023/01/01 --- .../Bipartite_layout.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 NetworkX Altas/Independent set & bipartite graphs/Bipartite_layout.py diff --git a/NetworkX Altas/Independent set & bipartite graphs/Bipartite_layout.py b/NetworkX Altas/Independent set & bipartite graphs/Bipartite_layout.py new file mode 100644 index 00000000..e2edcdb9 --- /dev/null +++ b/NetworkX Altas/Independent set & bipartite graphs/Bipartite_layout.py @@ -0,0 +1,10 @@ +import networkx as nx +import matplotlib.pyplot as plt + +G = nx.bipartite.gnmk_random_graph(3, 5, 10, seed=123) +top = nx.bipartite.sets(G)[0] +pos = nx.bipartite_layout(G, top) + +nx.draw(G, pos=pos, node_color='lightgreen', node_size=500, with_labels=True, arrowstyle="->") + +plt.show() \ No newline at end of file From dbd69ddb5f93ea52a00742ead103a2aed89e1690 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 1 Jan 2023 23:33:21 +0800 Subject: [PATCH 1202/2002] Committed 2023/01/01 --- NetworkX Altas/Circuit_bipartite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Circuit_bipartite.py b/NetworkX Altas/Circuit_bipartite.py index 16391868..50953436 100644 --- a/NetworkX Altas/Circuit_bipartite.py +++ b/NetworkX Altas/Circuit_bipartite.py @@ -81,7 +81,7 @@ def _to_string(formula, root): } plt.figure(figsize=(8, 8)) -pos = nx.multipartite_layout(circuit, subset_key="layer") +pos = nx.multipartite_layout(circuit, subset_key="layer", scale=1, aspect) nx.draw_networkx(circuit, pos, **options) # plt.title(formula_to_string(formula)) plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') From c804fb635ee4a053a48b3ca8943b51300f8881f6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 1 Jan 2023 23:37:47 +0800 Subject: [PATCH 1203/2002] Committed 2023/01/01 --- NetworkX Altas/Circuit_bipartite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NetworkX Altas/Circuit_bipartite.py b/NetworkX Altas/Circuit_bipartite.py index 50953436..94eec711 100644 --- a/NetworkX Altas/Circuit_bipartite.py +++ b/NetworkX Altas/Circuit_bipartite.py @@ -81,7 +81,7 @@ def _to_string(formula, root): } plt.figure(figsize=(8, 8)) -pos = nx.multipartite_layout(circuit, subset_key="layer", scale=1, aspect) +pos = nx.multipartite_layout(circuit, subset_key="layer", scale=1) nx.draw_networkx(circuit, pos, **options) # plt.title(formula_to_string(formula)) plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') From a8b7c568301b0dba08c6e4644e9925501d1efc84 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 7 Jan 2023 19:25:13 +0800 Subject: [PATCH 1204/2002] Committed 2023/01/07 --- .idea/php.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .idea/php.xml diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 00000000..f5f27444 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file From 5f82aaf9aae219ce2f7596937bea1f2caee8d169 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Jan 2023 01:12:49 +0800 Subject: [PATCH 1205/2002] Committed 2023/01/08 --- .../Chapter 3 - Counting 101/Recursion & Recurrences.py | 4 ++++ Python Algorithms/Chapter 3 - Counting 101/__init__.py | 0 Python Algorithms/__init__.py | 0 3 files changed, 4 insertions(+) create mode 100644 Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py create mode 100644 Python Algorithms/Chapter 3 - Counting 101/__init__.py create mode 100644 Python Algorithms/__init__.py diff --git a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py new file mode 100644 index 00000000..67bfea91 --- /dev/null +++ b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py @@ -0,0 +1,4 @@ +def S(seq, i=0): + if i == len(seq): + return 0 + return S(seq, i + 1) + seq[i] diff --git a/Python Algorithms/Chapter 3 - Counting 101/__init__.py b/Python Algorithms/Chapter 3 - Counting 101/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Python Algorithms/__init__.py b/Python Algorithms/__init__.py new file mode 100644 index 00000000..e69de29b From b0b4711deda165ba84a4307590005ee3df5b0f1f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Jan 2023 01:16:41 +0800 Subject: [PATCH 1206/2002] Committed 2023/01/08 --- .../Recursion & Recurrences.ipynb | 34 +++++++++++++++++++ .../Recursion & Recurrences.py | 6 ++++ 2 files changed, 40 insertions(+) create mode 100644 Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.ipynb diff --git a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.ipynb b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.ipynb new file mode 100644 index 00000000..9e60cbbd --- /dev/null +++ b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py index 67bfea91..32386fde 100644 --- a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py +++ b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py @@ -2,3 +2,9 @@ def S(seq, i=0): if i == len(seq): return 0 return S(seq, i + 1) + seq[i] + + +sequence = "valiant" + +print(len(sequence)) + From 72ec63b7a8601d78d1f4fcf024740aeb97e89b37 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Jan 2023 01:28:50 +0800 Subject: [PATCH 1207/2002] Committed 2023/01/08 --- .../Chapter 3 - Counting 101/Recursion & Recurrences.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py index 32386fde..9923191f 100644 --- a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py +++ b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py @@ -8,3 +8,4 @@ def S(seq, i=0): print(len(sequence)) +print(S(seq=sequence, i=7)) \ No newline at end of file From e566f03722281cba70b2a59a3f1d73306dc96f9b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Jan 2023 01:36:20 +0800 Subject: [PATCH 1208/2002] Committed 2023/01/08 --- .../Chapter 3 - Counting 101/Recursion & Recurrences.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py index 9923191f..e2360ce8 100644 --- a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py +++ b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences.py @@ -8,4 +8,6 @@ def S(seq, i=0): print(len(sequence)) -print(S(seq=sequence, i=7)) \ No newline at end of file +print(S(seq=sequence, i=7)) + +print(S(sequence)) \ No newline at end of file From cbee144f8744a8472dab439c79d84a95d925f83b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Jan 2023 01:39:59 +0800 Subject: [PATCH 1209/2002] Committed 2023/01/08 --- .../Recursion & Recurrences 2.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences 2.py diff --git a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences 2.py b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences 2.py new file mode 100644 index 00000000..4e6b511a --- /dev/null +++ b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences 2.py @@ -0,0 +1,10 @@ +def T(seq, i=0): + if i == len(seq): return 1 + return T(seq, i+1) + 1 + + +sequence = "valiant" + +print(len(sequence)) + +print(T(sequence)) From 7160d53e85fe5acee66dd20944d35a925ab8912e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Jan 2023 01:40:57 +0800 Subject: [PATCH 1210/2002] Committed 2023/01/08 --- .../Chapter 3 - Counting 101/Recursion & Recurrences 2.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences 2.py b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences 2.py index 4e6b511a..30fa69be 100644 --- a/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences 2.py +++ b/Python Algorithms/Chapter 3 - Counting 101/Recursion & Recurrences 2.py @@ -1,5 +1,7 @@ def T(seq, i=0): - if i == len(seq): return 1 + if i == len(seq): + return 1 + return T(seq, i+1) + 1 From 0db033199decbb2da8494aab5522deb3648fe6eb Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 8 Jan 2023 23:54:06 +0800 Subject: [PATCH 1211/2002] Committed 2023/01/08 --- .../Chapter 4 - Induction & Recursion/Oh, that's easy!.py | 5 +++++ .../Chapter 4 - Induction & Recursion/__init__.py | 0 2 files changed, 5 insertions(+) create mode 100644 Python Algorithms/Chapter 4 - Induction & Recursion/Oh, that's easy!.py create mode 100644 Python Algorithms/Chapter 4 - Induction & Recursion/__init__.py diff --git a/Python Algorithms/Chapter 4 - Induction & Recursion/Oh, that's easy!.py b/Python Algorithms/Chapter 4 - Induction & Recursion/Oh, that's easy!.py new file mode 100644 index 00000000..ae3c70b0 --- /dev/null +++ b/Python Algorithms/Chapter 4 - Induction & Recursion/Oh, that's easy!.py @@ -0,0 +1,5 @@ +from random import randrange + +sequence = [randrange(10**10) for i in range(100)] + + diff --git a/Python Algorithms/Chapter 4 - Induction & Recursion/__init__.py b/Python Algorithms/Chapter 4 - Induction & Recursion/__init__.py new file mode 100644 index 00000000..e69de29b From afd89968a05f9c53971d2f49c633c97d8e73c0af Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 8 Jan 2023 23:58:32 +0800 Subject: [PATCH 1212/2002] Committed 2023/01/08 --- .../Oh, that's easy!.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Python Algorithms/Chapter 4 - Induction & Recursion/Oh, that's easy!.py b/Python Algorithms/Chapter 4 - Induction & Recursion/Oh, that's easy!.py index ae3c70b0..5c088cd1 100644 --- a/Python Algorithms/Chapter 4 - Induction & Recursion/Oh, that's easy!.py +++ b/Python Algorithms/Chapter 4 - Induction & Recursion/Oh, that's easy!.py @@ -2,4 +2,21 @@ sequence = [randrange(10**10) for i in range(100)] +dd = float("inf") + +for x in sequence: + for y in sequence: + + if x == y: + continue + + d = abs(x - y) + + if d < dd: + xx, yy, dd = x, y, d + + print(xx, yy) + + + From e1107d6c7b2842aa62f364715895a7e948944883 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Wed, 11 Jan 2023 17:52:53 +0800 Subject: [PATCH 1213/2002] Committed 2023/01/11 --- .../The number of births 1994-2022_(15).py | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(15).py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(15).py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(15).py new file mode 100644 index 00000000..5b460e71 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_(15).py @@ -0,0 +1,64 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, 138986] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births (Unit: 1 baby)") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 +# 4. https://megalodon.jp/2023-0111-1850-35/https://www.cna.com.tw:443/news/ahel/202301115001.aspx +# 5. https://megalodon.jp/2023-0111-1851-27/https://www.cna.com.tw:443/news/ahel/202301100042.aspx From ab6fec9e120e7171b7fe29ea4dcca4895b456d92 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 12:42:45 +0800 Subject: [PATCH 1214/2002] Committed 2023/01/21 --- .../2023/CC-BY.png | Bin 0 -> 1283 bytes .../2023/January_at_city_level.py | 66 ++++++++++++++++++ .../2023/__init__.py | 0 3 files changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/CC-BY.png create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_city_level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Sat, 21 Jan 2023 12:45:16 +0800 Subject: [PATCH 1215/2002] Committed 2023/01/21 --- .../2023/January_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_city_level.py index 1251fb81..f7ec24d6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_city_level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://web.archive.org/web/20230121040108/https://www.104.com.tw/jobs/main/category/?jobsource=category") -plt.ylim(25500, 100000) +plt.ylim(24500, 100000) img = image.imread('CC-BY.png') From 1523eb884fe94431408f1699c9009a4f30463f74 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 12:58:03 +0800 Subject: [PATCH 1216/2002] Committed 2023/01/21 --- .../2023/January_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_metro_level.py new file mode 100644 index 00000000..40a66455 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1956+107229+59148+4074, 43509+31609+6060, 54374+3290+9152, 4148+6256+24843, 34872+4328] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/01 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 https://web.archive.org/web/20230121040108/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(36500, 160000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 9b11a4fb67f6026ffeec1ac33c9196c1db0d81a3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 12:59:57 +0800 Subject: [PATCH 1217/2002] Committed 2023/01/21 --- .../2023/January_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_metro_level.py index 40a66455..50ae6994 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/January_at_metro_level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 https://web.archive.org/web/20230121040108/https://www.104.com.tw/jobs/main/category/?jobsource=category") -plt.ylim(36500, 160000) +plt.ylim(35000, 160000) img = image.imread('CC-BY.png') From 491117cf98adddf34b7446fd23222cb7f938a691 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 16:13:23 +0800 Subject: [PATCH 1218/2002] Committed 2023/01/21 --- .../2023/Gradients.py | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradients.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradients.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradients.py new file mode 100644 index 00000000..63cfbee4 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradients.py @@ -0,0 +1,64 @@ +import matplotlib.pyplot as plt +import numpy as np + +np.random.seed(19680801) + + +def gradient_image(ax, extent, direction=0.3, cmap_range=(0, 1), **kwargs): + """ + Draw a gradient image based on a colormap. + + Parameters + ---------- + ax : Axes + The axes to draw on. + extent + The extent of the image as (xmin, xmax, ymin, ymax). + By default, this is in Axes coordinates but may be + changed using the *transform* keyword argument. + direction : float + The direction of the gradient. This is a number in + range 0 (=vertical) to 1 (=horizontal). + cmap_range : float, float + The fraction (cmin, cmax) of the colormap that should be + used for the gradient, where the complete colormap is (0, 1). + **kwargs + Other parameters are passed on to `.Axes.imshow()`. + In particular useful is *cmap*. + """ + phi = direction * np.pi / 2 + v = np.array([np.cos(phi), np.sin(phi)]) + X = np.array([[v @ [1, 0], v @ [1, 1]], + [v @ [0, 0], v @ [0, 1]]]) + a, b = cmap_range + X = a + (b - a) / X.max() * X + im = ax.imshow(X, extent=extent, interpolation='bicubic', + vmin=0, vmax=1, **kwargs) + return im + + +def gradient_bar(ax, x, y, width=0.5, bottom=0): + for left, top in zip(x, y): + right = left + width + gradient_image(ax, extent=(left, right, bottom, top), + cmap=plt.cm.Blues_r, cmap_range=(0, 0.8)) + + +xmin, xmax = xlim = 0, 10 +ymin, ymax = ylim = 0, 1 + +fig, ax = plt.subplots() +ax.set(xlim=xlim, ylim=ylim, autoscale_on=False) + +# background image +gradient_image(ax, direction=1, extent=(0, 1, 0, 1), transform=ax.transAxes, + cmap=plt.cm.RdYlGn, cmap_range=(0.2, 0.8), alpha=0.5) + +N = 10 +x = np.arange(N) + 0.15 +y = np.random.rand(N) +gradient_bar(ax, x, y, width=0.7) +ax.set_aspect('auto') +plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/gradient_bar.html#sphx-glr-gallery-lines-bars-and-markers-gradient-bar-py From 87dc5a289acee93ffc3325fafc9b441d5bcc72c2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 16:16:23 +0800 Subject: [PATCH 1219/2002] Committed 2023/01/21 --- .../2023/Gradient_background.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py new file mode 100644 index 00000000..f7ec24d6 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [107229, 59148, 43509, 54374, 24843, 34872] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/01 啁撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20230121040108/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(24500, 100000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 6d7c52fccb866507ca068bdfa3b1bd64437d0175 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 16:24:59 +0800 Subject: [PATCH 1220/2002] Committed 2023/01/21 --- .../2023/Gradient_background.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py index f7ec24d6..b0b02deb 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py @@ -1,4 +1,5 @@ import matplotlib.pyplot as plt +import numpy as np import matplotlib import matplotlib.cbook as cbook import matplotlib.colors as colour @@ -14,7 +15,9 @@ label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] -fig, ax = plt.subplots(figsize=(9, 9)) +fig, ax = plt.subplots(figsize=(9, 9), facecolor=(.18, .31, .31)) +ax.set_facecolor('#eafff5') + plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plt.tick_params(axis='y', labelsize=12) # [2] @@ -47,6 +50,7 @@ ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + plt.show() # Reference: From 0ea1805a4cef425be03c5d696edc4a685aecf569 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 16:26:13 +0800 Subject: [PATCH 1221/2002] Committed 2023/01/21 --- .../2023/Gradient_background.py | 25 +++++-------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py index b0b02deb..619f46c5 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py @@ -15,19 +15,19 @@ label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] -fig, ax = plt.subplots(figsize=(9, 9), facecolor=(.18, .31, .31)) -ax.set_facecolor('#eafff5') +fig, ax = plt.subplots(figsize=(9, 9), facecolor=(.18, .31, .31)) # [1] +ax.set_facecolor('#eafff5') # [1] plt.xticks(region_num, labels=label, rotation=7, fontsize=12) # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) -plt.tick_params(axis='y', labelsize=12) # [2] +plt.tick_params(axis='y', labelsize=12) plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), colour.CSS4_COLORS.get('deepskyblue'), colour.CSS4_COLORS.get('deepskyblue'), colour.CSS4_COLORS.get('deepskyblue'), colour.CSS4_COLORS.get('palegreen'), - colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + colour.CSS4_COLORS.get('palegreen')]) for rect in plot: height = rect.get_height() @@ -48,23 +48,10 @@ # Insert text watermark [1] plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, - transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + transform=ax.transAxes) plt.show() # Reference: -# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html -# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html -# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text -# 4. https://www.google.com/search?q=matplotlib+bar+color -# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots -# 6. https://matplotlib.org/stable/gallery/color/named_colors.html - -# Notes: -# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, -# and (width, height) is top right of the display window in pixels.[2] -# -# 2. default transform specifies that text is in data coords, -# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). -# The example below places text in the center of the Axes:[3] +# 1. https://matplotlib.org/stable/gallery/color/color_demo.html#sphx-glr-gallery-color-color-demo-py From a31313711739cbb0e4b5b633830e2e5e2d235510 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 16:44:36 +0800 Subject: [PATCH 1222/2002] Committed 2023/01/21 --- ...nt_background.py => Colored_background.py} | 0 .../2023/Gray_style.py | 57 +++++++++++++++++++ 2 files changed, 57 insertions(+) rename The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/{Gradient_background.py => Colored_background.py} (100%) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Colored_background.py similarity index 100% rename from The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gradient_background.py rename to The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Colored_background.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style.py new file mode 100644 index 00000000..e964925a --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style.py @@ -0,0 +1,57 @@ +import matplotlib.pyplot as plt +import numpy as np +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [107229, 59148, 43509, 54374, 24843, 34872] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) + +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/01 啁撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20230121040108/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(24500, 100000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) + + +plt.style.use('grayscale') # [1] +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/style_sheets/grayscale.html From 48e86cc022f4588349a874516202db80d247daa1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 16:46:36 +0800 Subject: [PATCH 1223/2002] Committed 2023/01/21 --- .../Monthly_total_job_openings_by_region/2023/Gray_style.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style.py index e964925a..29cc6b27 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style.py @@ -9,6 +9,7 @@ from matplotlib.transforms import IdentityTransform matplotlib.rc('font', family="MS Gothic") +plt.style.use('grayscale') # [1] region_num = [1, 2, 3, 4, 5, 6] position_vacancies = [107229, 59148, 43509, 54374, 24843, 34872] @@ -50,7 +51,6 @@ transform=ax.transAxes) -plt.style.use('grayscale') # [1] plt.show() # Reference: From e8f70acd331c9955769f2445a2b18efef14f311e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 21 Jan 2023 17:28:51 +0800 Subject: [PATCH 1224/2002] Committed 2023/01/21 --- .../2023/Gray_style_.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style_.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style_.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style_.py new file mode 100644 index 00000000..711b764d --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Gray_style_.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1956+107229+59148+4074, 43509+31609+6060, 54374+3290+9152, 4148+6256+24843, 34872+4328] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/01 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 https://web.archive.org/web/20230121040108/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(35000, 160000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 5ce3ca69a847543573e1f944c13ac616cf229674 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 01:11:26 +0800 Subject: [PATCH 1225/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py new file mode 100644 index 00000000..39078639 --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py @@ -0,0 +1,9 @@ + + +# Adjacency list +Graph = {"Amin": ["Wasim", "Nick", "Mike"], + "Wasim": ["Imran", "Amin"], + "Nick": "Amin", + "Mike": "Amin", + "Imran": ["Wasim", "Faras"] + } \ No newline at end of file From 78873b1961c45446957ee18af89daddc9ee3980c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 01:12:59 +0800 Subject: [PATCH 1226/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py index 39078639..3501829b 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py @@ -5,5 +5,10 @@ "Wasim": ["Imran", "Amin"], "Nick": "Amin", "Mike": "Amin", - "Imran": ["Wasim", "Faras"] - } \ No newline at end of file + "Imran": ["Wasim", "Faras"], + "Faras": "Imran" + } + + + + From 29bd3376371000f39859e12c09273047ead6993c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 01:24:35 +0800 Subject: [PATCH 1227/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py index 3501829b..c2ab6ef5 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py @@ -9,6 +9,12 @@ "Faras": "Imran" } +def bfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + queue = [start] # This contains all the vertices that we have want to visit in next iterations. + # Pop the first node from the queue and chose that node as the current node. + node = queue.pop(0) + From 6720ca11e0851c0d7270854a93f860531c65c79b Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 01:27:38 +0800 Subject: [PATCH 1228/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py index c2ab6ef5..5e6293b0 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py @@ -13,8 +13,9 @@ def bfs(graph, start): visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. queue = [start] # This contains all the vertices that we have want to visit in next iterations. - - # Pop the first node from the queue and chose that node as the current node. - node = queue.pop(0) + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) From d77d327eb1eca444fd78428d976dfb8a1dcecac8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 01:29:56 +0800 Subject: [PATCH 1229/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py index 5e6293b0..f082a23e 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py @@ -17,5 +17,8 @@ def bfs(graph, start): while queue: # Pop the first node from the queue and chose that node as the current node of this iteration. node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] From 661409203e4d1d8dc5d48d78967f055ee848f32a Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 01:31:22 +0800 Subject: [PATCH 1230/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py index f082a23e..d5b2651b 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py @@ -19,6 +19,6 @@ def bfs(graph, start): node = queue.pop(0) if node not in visited: visited.append(node) - neighbours = graph[node] + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. From b2e1debbbd5f37a7dc3729d129c1422f84c82704 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 01:52:34 +0800 Subject: [PATCH 1231/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py index d5b2651b..c3c53acc 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py @@ -21,4 +21,11 @@ def bfs(graph, start): visited.append(node) neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + queue.append(neighbour) + + return visited + + From 47649c78743ce3b0a3c37e300e05f7901c323867 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 11:54:12 +0800 Subject: [PATCH 1232/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py index c3c53acc..89149a20 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.py @@ -28,4 +28,4 @@ def bfs(graph, start): return visited - +bfs(graph=Graph, start="Amin") From 78da90389cb1f09bc801ed9cbd81f59e9498da6a Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 16:00:37 +0800 Subject: [PATCH 1233/2002] Committed 2023/01/28 --- .../Breadth-first search 2.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.py new file mode 100644 index 00000000..9cbece21 --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.py @@ -0,0 +1,31 @@ + + +# Adjacency list +Graph = {"Amin": ["Wasim", "Nick", "Mike"], + "Wasim": ["Imran", "Amin"], + "Nick": "Amin", + "Mike": "Amin", + "Imran": ["Wasim", "Faras"], + "Faras": "Imran" + } + +def bfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. + + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + queue.append(neighbour) + + return visited + + +bfs(graph=Graph, start="Amin") From dfd5c6c59103a8de74519a23225fecdf6b34b959 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 16:03:40 +0800 Subject: [PATCH 1234/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search 2.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.py index 9cbece21..2ffc060e 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.py @@ -9,6 +9,8 @@ "Faras": "Imran" } +print(Graph["Amin"]) + def bfs(graph, start): visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. From 3b3bfcd27edd3f40eaf52a3bee5ca161609e6256 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 16:42:44 +0800 Subject: [PATCH 1235/2002] Committed 2023/01/28 --- .../Breadth-first search 3.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 3.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 3.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 3.py new file mode 100644 index 00000000..2dfdfd96 --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 3.py @@ -0,0 +1,33 @@ + + +# Adjacency list +Graph = {"Amin": {"Wasim", "Nick", "Mike"}, + "Wasim": {"Imran", "Amin"}, + "Nick": "Amin", + "Mike": "Amin", + "Imran": {"Wasim", "Faras"}, + "Faras": "Imran" + } + +print(Graph["Amin"]) + +def bfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. + + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + queue.append(neighbour) + + return visited + + +bfs(graph=Graph, start="Amin") From d0b97110ab451c85b0e8e7eaa6bfa56e176ec153 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 16:45:41 +0800 Subject: [PATCH 1236/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search 3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 3.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 3.py index 2dfdfd96..26a4e107 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 3.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 3.py @@ -13,7 +13,7 @@ def bfs(graph, start): visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. - queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. + queue = [start] # This contains all the vertices that we have want to visit in next iterations. # Check if there exists even a single element in the queue. while queue: From 7c4d52caae4362ab541548d1a35654a85ecfe439 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 16:47:43 +0800 Subject: [PATCH 1237/2002] Committed 2023/01/28 --- .../Breadth-first search 4.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 4.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 4.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 4.py new file mode 100644 index 00000000..ea9cda0f --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 4.py @@ -0,0 +1,33 @@ + + +# Adjacency list +Graph = {'Amin': {'Wasim', 'Nick', 'Mike'}, + 'Wasim': {'Imran', 'Amin'}, + 'Nick': 'Amin', + 'Mike': 'Amin', + 'Imran': {'Wasim', 'Faras'}, + 'Faras': 'Imran' + } + +print(Graph["Amin"]) + +def bfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + queue = [start] # This contains all the vertices that we have want to visit in next iterations. + + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + queue.append(neighbour) + + return visited + + +bfs(graph=Graph, start="Amin") From 72c294442257cf628fc38f3c7fe31c94b2ced8ee Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 17:21:49 +0800 Subject: [PATCH 1238/2002] Committed 2023/01/28 --- .../Breadth-first search 5.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 5.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 5.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 5.py new file mode 100644 index 00000000..ea9cda0f --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 5.py @@ -0,0 +1,33 @@ + + +# Adjacency list +Graph = {'Amin': {'Wasim', 'Nick', 'Mike'}, + 'Wasim': {'Imran', 'Amin'}, + 'Nick': 'Amin', + 'Mike': 'Amin', + 'Imran': {'Wasim', 'Faras'}, + 'Faras': 'Imran' + } + +print(Graph["Amin"]) + +def bfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + queue = [start] # This contains all the vertices that we have want to visit in next iterations. + + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + queue.append(neighbour) + + return visited + + +bfs(graph=Graph, start="Amin") From f029b252eb150d806080369105245f599dc3c914 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 17:23:49 +0800 Subject: [PATCH 1239/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search 5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 5.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 5.py index ea9cda0f..c76a2aa3 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 5.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 5.py @@ -30,4 +30,4 @@ def bfs(graph, start): return visited -bfs(graph=Graph, start="Amin") +bfs(graph=Graph, start='Amin') From 547694ceb8faf285c2217d45a6f6ba2e4aba5ac6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 21:12:13 +0800 Subject: [PATCH 1240/2002] Committed 2023/01/28 --- .../Breadth-first search 6.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 6.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 6.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 6.py new file mode 100644 index 00000000..0c616e9c --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 6.py @@ -0,0 +1,33 @@ + + +# Adjacency list +Graph = {"Amin": ("Wasim", "Nick", "Mike"), + "Wasim": ("Imran", "Amin"), + "Nick": "Amin", + "Mike": "Amin", + "Imran": ("Wasim", "Faras"), + "Faras": "Imran" + } + +print(Graph["Amin"]) + +def bfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. + + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + queue.append(neighbour) + + return visited + + +bfs(graph=Graph, start="Amin") From f0ce4fd829ae389146410ec71624938fb748fb07 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 21:35:01 +0800 Subject: [PATCH 1241/2002] Committed 2023/01/28 --- .../Breadth-first search.ipynb | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb new file mode 100644 index 00000000..e7e7ee3f --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb @@ -0,0 +1,63 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Graph = {\"Amin\": (\"Wasim\", \"Nick\", \"Mike\"),\n", + " \"Wasim\": (\"Imran\", \"Amin\"),\n", + " \"Nick\": \"Amin\",\n", + " \"Mike\": \"Amin\",\n", + " \"Imran\": (\"Wasim\", \"Faras\"),\n", + " \"Faras\": \"Imran\"\n", + " }\n", + "\n", + "def bfs(graph, start):\n", + " visited = [] # This contains all the vertices that have been visited. Initially, it will be empty.\n", + " queue = graph[start] # This contains all the vertices that we have want to visit in next iterations.\n", + "\n", + " # Check if there exists even a single element in the queue.\n", + " while queue:\n", + " # Pop the first node from the queue and chose that node as the current node of this iteration.\n", + " node = queue.pop(0)\n", + " if node not in visited:\n", + " visited.append(node)\n", + " neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes.\n", + "\n", + " # Now, add the node's neighbours one by one to the queue.\n", + " for neighbour in neighbours:\n", + " queue.append(neighbour)\n", + "\n", + " return visited\n", + "\n", + "\n", + "bfs(graph=Graph, start=\"Amin\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 8fb527e7e161e88b2bd88876e2b47be933c4b37e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 21:37:24 +0800 Subject: [PATCH 1242/2002] Committed 2023/01/28 --- .../Graph Algorithms/Breadth-first search.ipynb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb index e7e7ee3f..9d4af50d 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb @@ -37,6 +37,13 @@ "\n", "bfs(graph=Graph, start=\"Amin\")" ] + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "collapsed": false + } } ], "metadata": { From 666aac1393db7869828abb62c5a75c9c44b55bfc Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 28 Jan 2023 21:54:35 +0800 Subject: [PATCH 1243/2002] Committed 2023/01/28 --- .../Breadth-first search.ipynb | 79 ++++++++++++++++++- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb index 9d4af50d..53512cf1 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search.ipynb @@ -2,11 +2,24 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": true }, - "outputs": [], + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'tuple' object has no attribute 'pop'", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mAttributeError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[1], line 28\u001B[0m\n\u001B[0;32m 23\u001B[0m queue\u001B[38;5;241m.\u001B[39mappend(neighbour)\n\u001B[0;32m 25\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m visited\n\u001B[1;32m---> 28\u001B[0m \u001B[43mbfs\u001B[49m\u001B[43m(\u001B[49m\u001B[43mgraph\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mGraph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstart\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mAmin\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\n", + "Cell \u001B[1;32mIn[1], line 16\u001B[0m, in \u001B[0;36mbfs\u001B[1;34m(graph, start)\u001B[0m\n\u001B[0;32m 13\u001B[0m \u001B[38;5;66;03m# Check if there exists even a single element in the queue.\u001B[39;00m\n\u001B[0;32m 14\u001B[0m \u001B[38;5;28;01mwhile\u001B[39;00m queue:\n\u001B[0;32m 15\u001B[0m \u001B[38;5;66;03m# Pop the first node from the queue and chose that node as the current node of this iteration.\u001B[39;00m\n\u001B[1;32m---> 16\u001B[0m node \u001B[38;5;241m=\u001B[39m \u001B[43mqueue\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mpop\u001B[49m(\u001B[38;5;241m0\u001B[39m)\n\u001B[0;32m 17\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m node \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;129;01min\u001B[39;00m visited:\n\u001B[0;32m 18\u001B[0m visited\u001B[38;5;241m.\u001B[39mappend(node)\n", + "\u001B[1;31mAttributeError\u001B[0m: 'tuple' object has no attribute 'pop'" + ] + } + ], "source": [ "Graph = {\"Amin\": (\"Wasim\", \"Nick\", \"Mike\"),\n", " \"Wasim\": (\"Imran\", \"Amin\"),\n", @@ -38,6 +51,68 @@ "bfs(graph=Graph, start=\"Amin\")" ] }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Wasim', 'Nick', 'Mike']\n" + ] + }, + { + "ename": "MemoryError", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mMemoryError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[2], line 31\u001B[0m\n\u001B[0;32m 26\u001B[0m queue\u001B[38;5;241m.\u001B[39mappend(neighbour)\n\u001B[0;32m 28\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m visited\n\u001B[1;32m---> 31\u001B[0m \u001B[43mbfs\u001B[49m\u001B[43m(\u001B[49m\u001B[43mgraph\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mGraph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstart\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mAmin\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\n", + "Cell \u001B[1;32mIn[2], line 26\u001B[0m, in \u001B[0;36mbfs\u001B[1;34m(graph, start)\u001B[0m\n\u001B[0;32m 24\u001B[0m \u001B[38;5;66;03m# Now, add the node's neighbours one by one to the queue.\u001B[39;00m\n\u001B[0;32m 25\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m neighbour \u001B[38;5;129;01min\u001B[39;00m neighbours:\n\u001B[1;32m---> 26\u001B[0m \u001B[43mqueue\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mappend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mneighbour\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 28\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m visited\n", + "\u001B[1;31mMemoryError\u001B[0m: " + ] + } + ], + "source": [ + "\n", + "# Adjacency list\n", + "Graph = {\"Amin\": [\"Wasim\", \"Nick\", \"Mike\"],\n", + " \"Wasim\": [\"Imran\", \"Amin\"],\n", + " \"Nick\": \"Amin\",\n", + " \"Mike\": \"Amin\",\n", + " \"Imran\": [\"Wasim\", \"Faras\"],\n", + " \"Faras\": \"Imran\"\n", + " }\n", + "\n", + "print(Graph[\"Amin\"])\n", + "\n", + "def bfs(graph, start):\n", + " visited = [] # This contains all the vertices that have been visited. Initially, it will be empty.\n", + " queue = graph[start] # This contains all the vertices that we have want to visit in next iterations.\n", + "\n", + " # Check if there exists even a single element in the queue.\n", + " while queue:\n", + " # Pop the first node from the queue and chose that node as the current node of this iteration.\n", + " node = queue.pop(0)\n", + " if node not in visited:\n", + " visited.append(node)\n", + " neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes.\n", + "\n", + " # Now, add the node's neighbours one by one to the queue.\n", + " for neighbour in neighbours:\n", + " queue.append(neighbour)\n", + "\n", + " return visited\n", + "\n", + "\n", + "bfs(graph=Graph, start=\"Amin\")\n" + ], + "metadata": { + "collapsed": false + } + }, { "cell_type": "markdown", "source": [], From 5b354e512a3c6392cb938a73558536af2efe04d2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 28 Jan 2023 23:16:43 +0800 Subject: [PATCH 1244/2002] Committed 2023/01/28 --- .../35 ADTs, Queues & Stacks/35.4.1.py | 1 + .../35 ADTs, Queues & Stacks/__init__.py | 0 A Beginner's Guide to Python 3/__init__.py | 0 3 files changed, 1 insertion(+) create mode 100644 A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py create mode 100644 A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/__init__.py create mode 100644 A Beginner's Guide to Python 3/__init__.py diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py new file mode 100644 index 00000000..1833ae03 --- /dev/null +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py @@ -0,0 +1 @@ +queue = [] # Create an empty queue. diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/__init__.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/A Beginner's Guide to Python 3/__init__.py b/A Beginner's Guide to Python 3/__init__.py new file mode 100644 index 00000000..e69de29b From 02ac3c3f19617af45077937cb904ebd109bf6498 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 28 Jan 2023 23:29:12 +0800 Subject: [PATCH 1245/2002] Committed 2023/01/28 --- .../35 ADTs, Queues & Stacks/35.4.1.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py index 1833ae03..f566bc20 100644 --- a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py @@ -1 +1,4 @@ queue = [] # Create an empty queue. +queue.append('task1') + +print("Initial queue: ", queue) From 10d89273d85caa912f2ca3772dacb10e704da00c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 28 Jan 2023 23:31:07 +0800 Subject: [PATCH 1246/2002] Committed 2023/01/28 --- .../35 ADTs, Queues & Stacks/35.4.1.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py index f566bc20..912556c1 100644 --- a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py @@ -2,3 +2,8 @@ queue.append('task1') print("Initial queue: ", queue) + +queue.append('task2') +queue.append('task3') +print("queue after additions: ", queue) + From b8dd19eed721f21678e624d18dccf98c863ff9c7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 28 Jan 2023 23:32:21 +0800 Subject: [PATCH 1247/2002] Committed 2023/01/28 --- .../35 ADTs, Queues & Stacks/35.4.1.py | 1 + 1 file changed, 1 insertion(+) diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py index 912556c1..d4787747 100644 --- a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py @@ -7,3 +7,4 @@ queue.append('task3') print("queue after additions: ", queue) +element1 = queue.pop(0) From 64b2354c4b7a1c2fbbda37ea4b43f56bb3481833 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 28 Jan 2023 23:44:49 +0800 Subject: [PATCH 1248/2002] Committed 2023/01/28 --- .../35 ADTs, Queues & Stacks/35.4.1.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py index d4787747..5df5591b 100644 --- a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py @@ -8,3 +8,6 @@ print("queue after additions: ", queue) element1 = queue.pop(0) +print("element retrieved from queue: ", element1) + +print("queue after the pop: ", queue) From 913f96d44095355e6ccbf9584659f02175206b24 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 28 Jan 2023 23:49:20 +0800 Subject: [PATCH 1249/2002] Committed 2023/01/28 --- .../35 ADTs, Queues & Stacks/35.4.1.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py index 5df5591b..105240ad 100644 --- a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.4.1.py @@ -11,3 +11,8 @@ print("element retrieved from queue: ", element1) print("queue after the pop: ", queue) + +element2 = queue.pop() +print("element2 retrieved from queue: ", element2) + +print("queue after the pop: ", queue) From 68a89a3514f74d089c6a446aaf4ddc11c8feb04b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 28 Jan 2023 23:59:26 +0800 Subject: [PATCH 1250/2002] Committed 2023/01/28 --- .../35 ADTs, Queues & Stacks/35.5.1.py | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py new file mode 100644 index 00000000..defbad65 --- /dev/null +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py @@ -0,0 +1,3 @@ +stack = [] # create an empty stack + + From 035f93bf5ab103ccf06868afbf19898e91456740 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 00:00:22 +0800 Subject: [PATCH 1251/2002] Committed 2023/01/28 --- .../35 ADTs, Queues & Stacks/35.5.1.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py index defbad65..0edbbaba 100644 --- a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py @@ -1,3 +1,7 @@ stack = [] # create an empty stack +stack.append('task1') +stack.append('task2') +stack.append('task3') +print('stack: ', stack) From 5d79d86cd83f325de34b2782a558c3a5e4eeed3e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 12:53:30 +0800 Subject: [PATCH 1252/2002] Committed 2023/01/29 --- .../35 ADTs, Queues & Stacks/35.5.1.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py index 0edbbaba..8d43fdfe 100644 --- a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py @@ -5,3 +5,7 @@ stack.append('task3') print('stack: ', stack) + +top_element = stack.pop() + +print("Top element: ", top_element) From e428c6f3a5a26fa5e12040f14466502d85ac0e20 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 12:56:43 +0800 Subject: [PATCH 1253/2002] Committed 2023/01/29 --- .../35 ADTs, Queues & Stacks/35.5.1.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py index 8d43fdfe..0a6f7bd7 100644 --- a/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py +++ b/A Beginner's Guide to Python 3/35 ADTs, Queues & Stacks/35.5.1.py @@ -9,3 +9,5 @@ top_element = stack.pop() print("Top element: ", top_element) + +print('stack: ', stack) From 54ca0241bc38fb20e04974f126c5f1c14925af20 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 13:03:10 +0800 Subject: [PATCH 1254/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py new file mode 100644 index 00000000..e69de29b From fcf599e619ade6a23f32993871e3cad6b16b0fe1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 13:17:09 +0800 Subject: [PATCH 1255/2002] Committed 2023/01/29 --- .../Breadth-first search 7.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 7.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 7.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 7.py new file mode 100644 index 00000000..8aa317ec --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 7.py @@ -0,0 +1,35 @@ + + +# Adjacency list +Graph = {"Amin": ["Wasim", "Nick", "Mike"], + "Wasim": ["Imran", "Amin"], + "Nick": "Amin", + "Mike": "Amin", + "Imran": ["Wasim", "Faras"], + "Faras": "Imran" + } + +print(Graph["Amin"]) + +def bfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + visited.append(start) + + queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. + + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + queue.append(neighbour) + + return visited + + +bfs(graph=Graph, start="Amin") From af53abe84cee1b12651f2b05aab7e72784f6d1e5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 13:20:59 +0800 Subject: [PATCH 1256/2002] Committed 2023/01/29 --- .../Graph Algorithms/Breadth-first search 7.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 7.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 7.py index 8aa317ec..bef1849d 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 7.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 7.py @@ -27,7 +27,8 @@ def bfs(graph, start): # Now, add the node's neighbours one by one to the queue. for neighbour in neighbours: - queue.append(neighbour) + if neighbour not in visited: # To prevent graph[start] from being added again. + queue.append(neighbour) return visited From d28ce153f70d6b1be93f403155de287ba8757d80 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 13:30:14 +0800 Subject: [PATCH 1257/2002] Committed 2023/01/29 --- .../Breadth-first search 8.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py new file mode 100644 index 00000000..88c8bf2e --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py @@ -0,0 +1,36 @@ + + +# Adjacency list +Graph = {"Amin": ["Wasim", "Nick", "Mike"], + "Wasim": ["Imran", "Amin"], + "Nick": ["Amin"], + "Mike": ["Amin"], + "Imran": ["Wasim", "Faras"], + "Faras": ["Imran"] + } + +print(Graph["Amin"]) + +def bfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + visited.append(start) + + queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. + + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + if neighbour not in visited: # To prevent graph[start] from being added again. + queue.append(neighbour) + + return visited + + +bfs(graph=Graph, start="Amin") From 4d2dcf1ccb07384c73d497a2bb183105392b743c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 13:37:00 +0800 Subject: [PATCH 1258/2002] Committed 2023/01/29 --- .../Graph Algorithms/Breadth-first search 8.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py index 88c8bf2e..ce5beb14 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py @@ -34,3 +34,5 @@ def bfs(graph, start): bfs(graph=Graph, start="Amin") + +print(bfs(graph=Graph, start="Amin")) From f485be77a441296ed5098597890fcf6bea30338e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 14:05:24 +0800 Subject: [PATCH 1259/2002] Committed 2023/01/29 --- .../Breadth-first search 8.py | 2 -- .../Breadth-first search 9.py | 36 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 9.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py index ce5beb14..88c8bf2e 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 8.py @@ -34,5 +34,3 @@ def bfs(graph, start): bfs(graph=Graph, start="Amin") - -print(bfs(graph=Graph, start="Amin")) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 9.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 9.py new file mode 100644 index 00000000..8edb7fb1 --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 9.py @@ -0,0 +1,36 @@ + + +# Adjacency list +Graph = {"Amin": ["Wasim", "Nick", "Mike"], + "Wasim": ["Imran", "Amin"], + "Nick": ["Amin"], + "Mike": ["Amin"], + "Imran": ["Wasim", "Faras"], + "Faras": ["Imran"] + } + +print(Graph["Amin"]) + +def bfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + visited.append(start) + + queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. + + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + if neighbour not in visited: # To prevent graph[start] from being added again. + queue.append(neighbour) + + return visited + + +print(bfs(graph=Graph, start="Amin")) From a830687e94c80bd70e00a33fc083a94eb3b39274 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 14:26:52 +0800 Subject: [PATCH 1260/2002] Committed 2023/01/29 --- .../Breadth-first search 2.ipynb | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb new file mode 100644 index 00000000..9ae70699 --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -0,0 +1,76 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "It's important to enclose every key's value even if the key has only one value.\n", + "\n", + "This is because Python permits accessing a character in a string, e.g." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "my_string = \"Hello World\"\n", + "\n", + "print(my_string[4])" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "markdown", + "source": [ + "As a result, in the following case, if a key's value is not enclosed in a pair of brackets,\n", + "Python interpreter might think you want to access individual character in a string during\n", + "the iteration when you do not." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "collapsed": false + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From a9342fd56fe5d2922f8441c1fad33f5d54d8d6d5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 14:33:26 +0800 Subject: [PATCH 1261/2002] Committed 2023/01/29 --- .../Breadth-first search 2.ipynb | 73 +++++++++++++++++-- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index 9ae70699..d3cf20d0 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -13,8 +13,16 @@ }, { "cell_type": "code", - "execution_count": null, - "outputs": [], + "execution_count": 1, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "o\n" + ] + } + ], "source": [ "my_string = \"Hello World\"\n", "\n", @@ -37,9 +45,64 @@ }, { "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [], + "execution_count": 2, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Wasim', 'Nick', 'Mike']\n" + ] + }, + { + "ename": "KeyError", + "evalue": "'A'", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mKeyError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[2], line 34\u001B[0m\n\u001B[0;32m 29\u001B[0m queue\u001B[38;5;241m.\u001B[39mappend(neighbour)\n\u001B[0;32m 31\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m visited\n\u001B[1;32m---> 34\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[43mbfs\u001B[49m\u001B[43m(\u001B[49m\u001B[43mgraph\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mGraph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstart\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mAmin\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m)\n", + "Cell \u001B[1;32mIn[2], line 24\u001B[0m, in \u001B[0;36mbfs\u001B[1;34m(graph, start)\u001B[0m\n\u001B[0;32m 22\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m node \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;129;01min\u001B[39;00m visited:\n\u001B[0;32m 23\u001B[0m visited\u001B[38;5;241m.\u001B[39mappend(node)\n\u001B[1;32m---> 24\u001B[0m neighbours \u001B[38;5;241m=\u001B[39m \u001B[43mgraph\u001B[49m\u001B[43m[\u001B[49m\u001B[43mnode\u001B[49m\u001B[43m]\u001B[49m \u001B[38;5;66;03m# Use neighbors to represent the node's directly connected nodes.\u001B[39;00m\n\u001B[0;32m 26\u001B[0m \u001B[38;5;66;03m# Now, add the node's neighbours one by one to the queue.\u001B[39;00m\n\u001B[0;32m 27\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m neighbour \u001B[38;5;129;01min\u001B[39;00m neighbours:\n", + "\u001B[1;31mKeyError\u001B[0m: 'A'" + ] + } + ], + "source": [ + "# Adjacency list\n", + "Graph = {\"Amin\": [\"Wasim\", \"Nick\", \"Mike\"],\n", + " \"Wasim\": [\"Imran\", \"Amin\"],\n", + " \"Nick\": \"Amin\",\n", + " \"Mike\": \"Amin\",\n", + " \"Imran\": [\"Wasim\", \"Faras\"],\n", + " \"Faras\": \"Imran\"\n", + " }\n", + "\n", + "print(Graph[\"Amin\"])\n", + "\n", + "def bfs(graph, start):\n", + " visited = [] # This contains all the vertices that have been visited. Initially, it will be empty.\n", + " visited.append(start)\n", + "\n", + " queue = graph[start] # This contains all the vertices that we have want to visit in next iterations.\n", + "\n", + " # Check if there exists even a single element in the queue.\n", + " while queue:\n", + " # Pop the first node from the queue and chose that node as the current node of this iteration.\n", + " node = queue.pop(0)\n", + " if node not in visited:\n", + " visited.append(node)\n", + " neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes.\n", + "\n", + " # Now, add the node's neighbours one by one to the queue.\n", + " for neighbour in neighbours:\n", + " if neighbour not in visited: # To prevent graph[start] from being added again.\n", + " queue.append(neighbour)\n", + "\n", + " return visited\n", + "\n", + "\n", + "print(bfs(graph=Graph, start=\"Amin\"))" + ], "metadata": { "collapsed": false } From 241feed510e8cecbc64b30c6110432f72d97ca0c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 14:34:52 +0800 Subject: [PATCH 1262/2002] Committed 2023/01/29 --- .../Breadth-first search 2.ipynb | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index d3cf20d0..92a4fb55 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -107,6 +107,68 @@ "collapsed": false } }, + { + "cell_type": "markdown", + "source": [ + "This time, enclose every dictionary key's value even if the key has only one value." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Wasim', 'Nick', 'Mike']\n", + "['Amin', 'Wasim', 'Nick', 'Mike', 'Imran', 'Faras']\n" + ] + } + ], + "source": [ + "# Adjacency list\n", + "Graph = {\"Amin\": [\"Wasim\", \"Nick\", \"Mike\"],\n", + " \"Wasim\": [\"Imran\", \"Amin\"],\n", + " \"Nick\": [\"Amin\"],\n", + " \"Mike\": [\"Amin\"],\n", + " \"Imran\": [\"Wasim\", \"Faras\"],\n", + " \"Faras\": [\"Imran\"]\n", + " }\n", + "\n", + "print(Graph[\"Amin\"])\n", + "\n", + "def bfs(graph, start):\n", + " visited = [] # This contains all the vertices that have been visited. Initially, it will be empty.\n", + " visited.append(start)\n", + "\n", + " queue = graph[start] # This contains all the vertices that we have want to visit in next iterations.\n", + "\n", + " # Check if there exists even a single element in the queue.\n", + " while queue:\n", + " # Pop the first node from the queue and chose that node as the current node of this iteration.\n", + " node = queue.pop(0)\n", + " if node not in visited:\n", + " visited.append(node)\n", + " neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes.\n", + "\n", + " # Now, add the node's neighbours one by one to the queue.\n", + " for neighbour in neighbours:\n", + " if neighbour not in visited: # To prevent graph[start] from being added again.\n", + " queue.append(neighbour)\n", + "\n", + " return visited\n", + "\n", + "\n", + "print(bfs(graph=Graph, start=\"Amin\"))" + ], + "metadata": { + "collapsed": false + } + }, { "cell_type": "markdown", "source": [], From 9f9260c1d77b11b76b474eb90d669cccf0d3ab0f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 14:44:28 +0800 Subject: [PATCH 1263/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py index e69de29b..5a1938fe 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py @@ -0,0 +1,6 @@ +def dfs(graph, start, visited=None): + if visited is None: + visited = set() + + visited.add(start) + print(start) \ No newline at end of file From c0acf6ba5e220ed6ce69025b97d51df3c84346eb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 14:54:54 +0800 Subject: [PATCH 1264/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py index 5a1938fe..35c7cb6d 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py @@ -3,4 +3,5 @@ def dfs(graph, start, visited=None): visited = set() visited.add(start) - print(start) \ No newline at end of file + print(start) + From c1352998c542cee03c25aea950ac341f31131214 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 15:02:28 +0800 Subject: [PATCH 1265/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py index 35c7cb6d..4c7de92e 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py @@ -5,3 +5,11 @@ def dfs(graph, start, visited=None): visited.add(start) print(start) + for next in graph[start] - visited: + dfs(graph=graph, visited=next, visited=visited) + + + return visited + + + From 4282495eb7b254e7d0f71c466d4b3bbf58e98452 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 15:04:48 +0800 Subject: [PATCH 1266/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py index 4c7de92e..7dcca965 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py @@ -6,10 +6,6 @@ def dfs(graph, start, visited=None): print(start) for next in graph[start] - visited: - dfs(graph=graph, visited=next, visited=visited) - + dfs(graph=graph, start=next, visited=visited) return visited - - - From 8186726158fa86a3d7fe8c565556036a460880a4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 15:07:46 +0800 Subject: [PATCH 1267/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py index 7dcca965..1e1b9ec8 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py @@ -9,3 +9,6 @@ def dfs(graph, start, visited=None): dfs(graph=graph, start=next, visited=visited) return visited + + +graph = {"Amin": ['Wasim', 'Nick', "Mike"]} From db4026faf3823791cf14b9ddb277ef810d57a908 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 15:10:44 +0800 Subject: [PATCH 1268/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py index 1e1b9ec8..1bec1ea9 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py @@ -11,4 +11,10 @@ def dfs(graph, start, visited=None): return visited -graph = {"Amin": ['Wasim', 'Nick', "Mike"]} +graph = {"Amin": ['Wasim', 'Nick', "Mike"], + "Wasim": ['Amin', 'Imran'], + "Nick": ['Amin'], + "Mike": ['Amin'], + 'Imran': ['Wasim', 'Faras'], + 'Faras': ['Imran'] + } From a1499157c434dcdb37944666abd668bf2b98a4cf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 15:11:56 +0800 Subject: [PATCH 1269/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.py | 1 + 1 file changed, 1 insertion(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py index 1bec1ea9..e994e3da 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py @@ -11,6 +11,7 @@ def dfs(graph, start, visited=None): return visited +# Adjacency list graph = {"Amin": ['Wasim', 'Nick', "Mike"], "Wasim": ['Amin', 'Imran'], "Nick": ['Amin'], From bb1bbf197cbc2a8a591151183f39cb133dbf00da Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 15:13:25 +0800 Subject: [PATCH 1270/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py index e994e3da..f647c2d4 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.py @@ -19,3 +19,6 @@ def dfs(graph, start, visited=None): 'Imran': ['Wasim', 'Faras'], 'Faras': ['Imran'] } + + +print(dfs(graph=graph, start='Amin', visited=None)) From fcf25f8d032d96df22233754d322ccad80b561e2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 15:18:50 +0800 Subject: [PATCH 1271/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search 2.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 2.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 2.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 2.py new file mode 100644 index 00000000..8a8560bf --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 2.py @@ -0,0 +1,24 @@ +def dfs(graph, start, visited=None): + if visited is None: + visited = [] + + visited.add(start) + print(start) + + for next in graph[start] - visited: + dfs(graph=graph, start=next, visited=visited) + + return visited + + +# Adjacency list +graph = {"Amin": ['Wasim', 'Nick', "Mike"], + "Wasim": ['Amin', 'Imran'], + "Nick": ['Amin'], + "Mike": ['Amin'], + 'Imran': ['Wasim', 'Faras'], + 'Faras': ['Imran'] + } + + +print(dfs(graph=graph, start='Amin', visited=None)) From c761ff5931eba47ae658c90dacd73218e40775cd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 15:19:38 +0800 Subject: [PATCH 1272/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search 2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 2.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 2.py index 8a8560bf..df7b36fe 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 2.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 2.py @@ -2,7 +2,7 @@ def dfs(graph, start, visited=None): if visited is None: visited = [] - visited.add(start) + visited.append(start) print(start) for next in graph[start] - visited: From 9b118a9acf2ef4bfbd67104a6846091bd149f0b0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 16:59:20 +0800 Subject: [PATCH 1273/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search 3.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py new file mode 100644 index 00000000..e5eccc72 --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py @@ -0,0 +1,35 @@ +# Acclimatizing the breadth-first search to the depth-first search +# by replacing queue with stack +def dfs(graph, start): + visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. + visited.append(start) + + queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. + + # Check if there exists even a single element in the queue. + while queue: + # Pop the first node from the queue and chose that node as the current node of this iteration. + node = queue.pop(0) + if node not in visited: + visited.append(node) + neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. + + # Now, add the node's neighbours one by one to the queue. + for neighbour in neighbours: + if neighbour not in visited: # To prevent graph[start] from being added again. + queue.append(neighbour) + + return visited + + +# Adjacency list +graph = {"Amin": ['Wasim', 'Nick', "Mike"], + "Wasim": ['Amin', 'Imran'], + "Nick": ['Amin'], + "Mike": ['Amin'], + 'Imran': ['Wasim', 'Faras'], + 'Faras': ['Imran'] + } + + +print() From fab6d319430adf034d7e7960420b9939d2b7036f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 17:05:01 +0800 Subject: [PATCH 1274/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search 3.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py index e5eccc72..c93cc69e 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py @@ -4,20 +4,20 @@ def dfs(graph, start): visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. visited.append(start) - queue = graph[start] # This contains all the vertices that we have want to visit in next iterations. + stack = graph[start] # This contains all the vertices that we have & want to visit in next iterations. - # Check if there exists even a single element in the queue. - while queue: - # Pop the first node from the queue and chose that node as the current node of this iteration. - node = queue.pop(0) + # Check if there exists even a single element in the stack. + while stack: + # Pop the top node in the stack and chose that node as the current node of this iteration. + node = stack.pop(0) if node not in visited: visited.append(node) neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. - # Now, add the node's neighbours one by one to the queue. + # Now, add the node's neighbours one by one to the stack. for neighbour in neighbours: if neighbour not in visited: # To prevent graph[start] from being added again. - queue.append(neighbour) + stack.append(neighbour) return visited From abef6a515f84ef4c42a429d3e3245bcaead3f253 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 17:06:26 +0800 Subject: [PATCH 1275/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search 3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py index c93cc69e..88bc868d 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py @@ -9,7 +9,7 @@ def dfs(graph, start): # Check if there exists even a single element in the stack. while stack: # Pop the top node in the stack and chose that node as the current node of this iteration. - node = stack.pop(0) + node = stack.pop() if node not in visited: visited.append(node) neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes. From 6c6bd7b228d9571fd267d01ef0306f8939fcdc0d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 17:06:57 +0800 Subject: [PATCH 1276/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search 3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py index 88bc868d..55e5ebad 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py @@ -1,4 +1,4 @@ -# Acclimatizing the breadth-first search to the depth-first search +# Acclimatizing breadth-first search to depth-first search # by replacing queue with stack def dfs(graph, start): visited = [] # This contains all the vertices that have been visited. Initially, it will be empty. From c9baf615186f4ecab72662704b8c155777dc9f58 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 17:39:24 +0800 Subject: [PATCH 1277/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search 3.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py index 55e5ebad..04de175b 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search 3.py @@ -32,4 +32,6 @@ def dfs(graph, start): } -print() +print(graph['Amin']) + +print(dfs(graph=graph, start='Amin')) From 07fb529535ae9d6df2c9e10dd027df59ebb04a8e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 23:08:00 +0800 Subject: [PATCH 1278/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.ipynb | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb new file mode 100644 index 00000000..2e72688d --- /dev/null +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb @@ -0,0 +1,64 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "Let's do a aptitude test by feeding the program some more test cases." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def dfs(graph, start):\n", + " visited = [] # This contains all the vertices that have been visited. Initially, it will be empty.\n", + " visited.append(start)\n", + "\n", + " stack = graph[start] # This contains all the vertices that we have & want to visit in next iterations.\n", + "\n", + " # Check if there exists even a single element in the stack.\n", + " while stack:\n", + " # Pop the top node in the stack and chose that node as the current node of this iteration.\n", + " node = stack.pop()\n", + " if node not in visited:\n", + " visited.append(node)\n", + " neighbours = graph[node] # Use neighbors to represent the node's directly connected nodes.\n", + "\n", + " # Now, add the node's neighbours one by one to the stack.\n", + " for neighbour in neighbours:\n", + " if neighbour not in visited: # To prevent graph[start] from being added again.\n", + " stack.append(neighbour)\n", + "\n", + " return visited" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 378304e8eb0e34f8b11d42e6f7a8bcc6c67c6d7b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 23:19:15 +0800 Subject: [PATCH 1279/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.ipynb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb index 2e72688d..eb85f1f0 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb @@ -36,8 +36,24 @@ " if neighbour not in visited: # To prevent graph[start] from being added again.\n", " stack.append(neighbour)\n", "\n", - " return visited" + " return visited\n", + "\n", + "\n", + "# Adjacency list\n", + "graph = {4: [2, 8],\n", + " 2: [4, 1, 3],\n", + " 8: [4, 5, 10],\n", + " 1: [2], # [] is added for format align purpose\n", + "\n", + " }" ] + }, + { + "cell_type": "markdown", + "source": [], + "metadata": { + "collapsed": false + } } ], "metadata": { From 2a83d642dd7cfae4fd4d58942e3f2cad8338fa02 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 23:23:59 +0800 Subject: [PATCH 1280/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.ipynb | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb index eb85f1f0..8e5a4af2 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb @@ -11,11 +11,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[4, 8, 10, 5, 2, 3, 1]\n" + ] + } + ], "source": [ "def dfs(graph, start):\n", " visited = [] # This contains all the vertices that have been visited. Initially, it will be empty.\n", @@ -43,9 +51,13 @@ "graph = {4: [2, 8],\n", " 2: [4, 1, 3],\n", " 8: [4, 5, 10],\n", - " 1: [2], # [] is added for format align purpose\n", + " 1: [2], # [] is added in order to align the format with other elements in this dict.\n", + " 3: [2],\n", + " 5: [8],\n", + " 10: [8]\n", + " }\n", "\n", - " }" + "print(dfs(graph=graph, start=4))" ] }, { From e150c3f2269d88a930e5e811b5a569556ebd2b67 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 23:25:53 +0800 Subject: [PATCH 1281/2002] Committed 2023/01/29 --- .../Graph Algorithms/Breadth-first search 2.ipynb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index 92a4fb55..6a498a12 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -169,6 +169,15 @@ "collapsed": false } }, + { + "cell_type": "markdown", + "source": [ + "Let's do an aptitude test by feeding the program some more test cases." + ], + "metadata": { + "collapsed": false + } + }, { "cell_type": "markdown", "source": [], From 240c7ff4b3dacba8c85140c7cee29160c2a69ea7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 23:52:48 +0800 Subject: [PATCH 1282/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.ipynb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb index 8e5a4af2..69e104e4 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb @@ -3,7 +3,8 @@ { "cell_type": "markdown", "source": [ - "Let's do a aptitude test by feeding the program some more test cases." + "# Let's have the program do an aptitude test by feeding it some more test cases.\n", + "Let's make an aptitude test for the program by feeding it some more test cases." ], "metadata": { "collapsed": false From 059cbb890505a05633d5ee6a63f30c1cc1b14704 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Jan 2023 23:56:36 +0800 Subject: [PATCH 1283/2002] Committed 2023/01/29 --- .../Breadth-first search 2.ipynb | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index 6a498a12..673cad34 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -172,7 +172,37 @@ { "cell_type": "markdown", "source": [ - "Let's do an aptitude test by feeding the program some more test cases." + "# Let's do an aptitude test by feeding the program some more test cases.\n", + "Let's make the program an aptitude test by feeding it some more test cases." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[4, 2, 8, 1, 3, 5, 10]\n" + ] + } + ], + "source": [ + "# Adjacency list\n", + "graph = {4: [2, 8],\n", + " 2: [4, 1, 3],\n", + " 8: [4, 5, 10],\n", + " 1: [2], # [] is added in order to align the format with other elements in this dict.\n", + " 3: [2],\n", + " 5: [8],\n", + " 10: [8]\n", + " }\n", + "\n", + "print(bfs(graph=graph, start=4))" ], "metadata": { "collapsed": false From 3d945eb8ebad82ae14c97f846fe5cc91a4a09207 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 30 Jan 2023 00:07:23 +0800 Subject: [PATCH 1284/2002] Committed 2023/01/29 --- .../Breadth-first search 2.ipynb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index 673cad34..9e15f379 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -208,6 +208,25 @@ "collapsed": false } }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "graph = {'A': ['B', 'S'],\n", + " 'B': ['A'],\n", + " 'S': ['A', 'C', 'G'],\n", + " 'C': ['S', 'D', 'E', 'F'],\n", + " 'D': ['C'],\n", + " 'E': ['C'],\n", + " 'F': ['C', 'G'],\n", + "\n", + " }" + ], + "metadata": { + "collapsed": false + } + }, { "cell_type": "markdown", "source": [], From c33d461e8a1c9381dd4430bf4bf1a006fa3e2dbd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 30 Jan 2023 00:09:28 +0800 Subject: [PATCH 1285/2002] Committed 2023/01/29 --- .../Graph Algorithms/Breadth-first search 2.ipynb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index 9e15f379..3bfd8e73 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -220,7 +220,8 @@ " 'D': ['C'],\n", " 'E': ['C'],\n", " 'F': ['C', 'G'],\n", - "\n", + " 'G': ['S', 'F', 'H'],\n", + " 'H': ['G']\n", " }" ], "metadata": { From 4d2087528ebe1f052971d31bf30e998550f278fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 30 Jan 2023 00:16:36 +0800 Subject: [PATCH 1286/2002] Committed 2023/01/29 --- .../Breadth-first search 2.ipynb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index 3bfd8e73..7e6bd53d 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -210,8 +210,16 @@ }, { "cell_type": "code", - "execution_count": null, - "outputs": [], + "execution_count": 5, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['A', 'B', 'S', 'C', 'G', 'D', 'E', 'F', 'H']\n" + ] + } + ], "source": [ "graph = {'A': ['B', 'S'],\n", " 'B': ['A'],\n", @@ -222,7 +230,9 @@ " 'F': ['C', 'G'],\n", " 'G': ['S', 'F', 'H'],\n", " 'H': ['G']\n", - " }" + " }\n", + "\n", + "print(bfs(graph, 'A'))" ], "metadata": { "collapsed": false From e6ffbf6a8e2246129993da722cf2b18890d97faf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 30 Jan 2023 00:25:23 +0800 Subject: [PATCH 1287/2002] Committed 2023/01/29 --- .../Graph Algorithms/Depth-first search.ipynb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb index 69e104e4..0810ab74 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb @@ -61,6 +61,36 @@ "print(dfs(graph=graph, start=4))" ] }, + { + "cell_type": "code", + "execution_count": 2, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['A', 'S', 'G', 'H', 'F', 'C', 'E', 'D', 'B']\n" + ] + } + ], + "source": [ + "graph = {'A': ['B', 'S'],\n", + " 'B': ['A'],\n", + " 'S': ['A', 'C', 'G'],\n", + " 'C': ['S', 'D', 'E', 'F'],\n", + " 'D': ['C'],\n", + " 'E': ['C'],\n", + " 'F': ['C', 'G'],\n", + " 'G': ['S', 'F', 'H'],\n", + " 'H': ['G']\n", + " }\n", + "\n", + "print(dfs(graph=graph, start='A'))" + ], + "metadata": { + "collapsed": false + } + }, { "cell_type": "markdown", "source": [], From 4766d716df8a155ab9b4b405f99b1f0cb3f074d8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 30 Jan 2023 00:39:20 +0800 Subject: [PATCH 1288/2002] Committed 2023/01/29 --- .../Breadth-first search 2.ipynb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index 7e6bd53d..7c7a509d 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -238,6 +238,27 @@ "collapsed": false } }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "graph = {'A': ['B', 'S'],\n", + " 'B': ['A'],\n", + " 'S': ['A', 'C', 'G'],\n", + " 'C': ['S', 'D', 'E', 'F'],\n", + " 'D': ['C'],\n", + " 'E': ['C', 'H'],\n", + " 'F': ['C', 'G'],\n", + " 'G': ['S', 'F', 'H'],\n", + " 'H': ['G']\n", + " }\n", + "\n" + ], + "metadata": { + "collapsed": false + } + }, { "cell_type": "markdown", "source": [], From eb7594b86438f14ed9913746bb6fb9a4812571ff Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 30 Jan 2023 00:42:10 +0800 Subject: [PATCH 1289/2002] Committed 2023/01/29 --- .../Breadth-first search 2.ipynb | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index 7c7a509d..d9f93e3f 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -240,8 +240,16 @@ }, { "cell_type": "code", - "execution_count": null, - "outputs": [], + "execution_count": 6, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['A', 'B', 'S', 'C', 'G', 'D', 'E', 'F', 'H']\n" + ] + } + ], "source": [ "graph = {'A': ['B', 'S'],\n", " 'B': ['A'],\n", @@ -251,9 +259,10 @@ " 'E': ['C', 'H'],\n", " 'F': ['C', 'G'],\n", " 'G': ['S', 'F', 'H'],\n", - " 'H': ['G']\n", + " 'H': ['G', 'E']\n", " }\n", - "\n" + "\n", + "print(bfs(graph=graph, start='A'))" ], "metadata": { "collapsed": false From c0150850366e7e4f85524f73f92d8438383d6b20 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 30 Jan 2023 00:46:39 +0800 Subject: [PATCH 1290/2002] Committed 2023/01/29 --- .../Breadth-first search 2.ipynb | 9 +++++ .../Graph Algorithms/Depth-first search.ipynb | 39 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb index d9f93e3f..abc77f45 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Breadth-first search 2.ipynb @@ -238,6 +238,15 @@ "collapsed": false } }, + { + "cell_type": "markdown", + "source": [ + "Graph below: https://www.youtube.com/watch?v=iaBEKo5sM7w" + ], + "metadata": { + "collapsed": false + } + }, { "cell_type": "code", "execution_count": 6, diff --git a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb index 0810ab74..0638b8cc 100644 --- a/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb +++ b/40 Algorithms Every Programmer Should Know/Graph Algorithms/Depth-first search.ipynb @@ -91,6 +91,45 @@ "collapsed": false } }, + { + "cell_type": "markdown", + "source": [ + "Graph below: https://www.youtube.com/watch?v=iaBEKo5sM7w" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 3, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['A', 'S', 'G', 'H', 'E', 'C', 'F', 'D', 'B']\n" + ] + } + ], + "source": [ + "graph = {'A': ['B', 'S'],\n", + " 'B': ['A'],\n", + " 'S': ['A', 'C', 'G'],\n", + " 'C': ['S', 'D', 'E', 'F'],\n", + " 'D': ['C'],\n", + " 'E': ['C', 'H'],\n", + " 'F': ['C', 'G'],\n", + " 'G': ['S', 'F', 'H'],\n", + " 'H': ['G', 'E']\n", + " }\n", + "\n", + "print(dfs(graph=graph, start='A'))" + ], + "metadata": { + "collapsed": false + } + }, { "cell_type": "markdown", "source": [], From a4e0e4f09d8443b4ae8587b4105350b0ce023aaf Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 26 Feb 2023 11:39:21 +0800 Subject: [PATCH 1291/2002] Committed 2023/02/26 --- .../2023/February_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/February_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/February_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/February_at_metro_level.py new file mode 100644 index 00000000..ce7354a6 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/February_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1956+107229+59148+4074, 43509+31609+6060, 54374+3290+9152, 4148+6256+24843, 34872+4328] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230225170349/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(35000, 160000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 55d77c893d8703ebd300ec477698252814c20cd8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 26 Feb 2023 11:49:16 +0800 Subject: [PATCH 1292/2002] Committed 2023/02/26 --- .../2023/February_at_metro_level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/February_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/February_at_metro_level.py index ce7354a6..24d67165 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/February_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/February_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [1956+107229+59148+4074, 43509+31609+6060, 54374+3290+9152, 4148+6256+24843, 34872+4328] +position_vacancies = [2159+117112+66887+4481, 46293+33280+6473, 61241+3584+10497, 4497+7045+28025, 38586+4701] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://web.archive.org/web/20230225170349/https://www.104.com.tw/jobs/main/category/?jobsource=category") -plt.ylim(35000, 160000) +plt.ylim(39000, 180000) img = image.imread('CC-BY.png') From c7c159b9d27fc8a65b36940e27764979f0832161 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 1 Apr 2023 21:24:01 +0800 Subject: [PATCH 1293/2002] Committed 2023/04/01 Reducing the file size. --- Deep_learning_class_2021/Project1/mnist_train.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Deep_learning_class_2021/Project1/mnist_train.csv b/Deep_learning_class_2021/Project1/mnist_train.csv index 744c258d..e8d0c5bd 100644 --- a/Deep_learning_class_2021/Project1/mnist_train.csv +++ b/Deep_learning_class_2021/Project1/mnist_train.csv @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06e64b0bf65de89c522348319ce5f63f43fb1cb40e1ce3c2ff43c1d3b8a0e14c -size 109640201 +oid sha256:0d9d3e5f45ca7abebb7c84234aceda7ae88b90f077294e4d6befa2e276f37ae6 +size 91386439 From 12a5112ec99ed2462980c10408a2983f6bdbb096 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 2 Apr 2023 15:44:46 +0800 Subject: [PATCH 1294/2002] Committed on 2023/04/02 --- .../2023/March_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/March_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/March_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/March_at_metro_level.py new file mode 100644 index 00000000..b7df92f6 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/March_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2218+117112+66887+4481, 46293+33280+6473, 61241+3584+10497, 4497+7045+28025, 38586+4701] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230326054107/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 4e2fcbdb3e915525bcd5301873a610c40ff6cf56 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 2 Apr 2023 15:57:27 +0800 Subject: [PATCH 1295/2002] Committed on 2023/04/02 --- .../2023/March_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/March_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/March_at_metro_level.py index b7df92f6..bfe79580 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/March_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/March_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2218+117112+66887+4481, 46293+33280+6473, 61241+3584+10497, 4497+7045+28025, 38586+4701] +position_vacancies = [2218+118537+67748+4572, 46204+32949+6326, 61701+3690+10576, 4496+6995+27400, 38365+4660] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 0e7f0b777557dd2013fede604ec71bd28c2d64c8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 2 Apr 2023 16:17:00 +0800 Subject: [PATCH 1296/2002] Committed on 2023/04/02 --- .../Road safety/Month_over_month_2023/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2023/__init__.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/__init__.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/__init__.py new file mode 100644 index 00000000..e69de29b From 0e31eb135f190851e1028eac3ca43db2dfa09686 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 2 Apr 2023 17:42:00 +0800 Subject: [PATCH 1297/2002] Committed on 2023/04/02 --- .../Month_over_month_2022/December.py | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2022/December.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/December.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/December.py new file mode 100644 index 00000000..ee788f23 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2022/December.py @@ -0,0 +1,122 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"] + +deaths = [[13, 23, 29, 28, 24, 23], # January + [7, 16, 20, 24, 20, 30], # February + [9, 29, 14, 27, 34, 43], # March + [8, 25, 23, 23, 27, 31], # April + [7, 34, 16, 27, 27, 27], # May + [4, 25, 27, 15, 23, 26], # June + [4, 27, 16, 24, 28, 31], # July + [6, 26, 20, 31, 22, 33], # August + [15, 31, 30, 33, 22, 23], # September + [14, 27, 16, 22, 21, 41], # October + [10, 19, 23, 28, 33, 34], # November + [10, 25, 29, 26, 31, 31], # December + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-12)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='20', transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From aa3954122ca7209528c5bfb45bebe147283e4db8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 9 Apr 2023 18:28:46 +0800 Subject: [PATCH 1298/2002] Committed on 2023/04/09 --- .../Primary_input_output_(successors)5.py | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 NetworkX Altas/Primary_input_output_(successors)5.py diff --git a/NetworkX Altas/Primary_input_output_(successors)5.py b/NetworkX Altas/Primary_input_output_(successors)5.py new file mode 100644 index 00000000..52c15a14 --- /dev/null +++ b/NetworkX Altas/Primary_input_output_(successors)5.py @@ -0,0 +1,104 @@ +import matplotlib.pyplot as plt +import networkx as nx +import networkx.algorithms.approximation as approximate + + +def circuit_to_formula(circuit): + # Convert the circuit to an equivalent formula. + formula = nx.dag_to_branching(circuit) + # Transfer the operator or variable labels for each node from the + # circuit to the formula. + for v in formula: + source = formula.nodes[v]["source"] + formula.nodes[v]["label"] = circuit.nodes[source]["label"] + return formula + + +def formula_to_string(formula): + def _to_string(formula, root): + # If there are no children, this is a variable node. + label = formula.nodes[root]["label"] + if not formula[root]: + return label + # Otherwise, this is an operator. + children = formula[root] + # If one child, the label must be a NOT operator. + if len(children) == 1: + child = nx.utils.arbitrary_element(children) + return f"{label}({_to_string(formula, child)})" + # NB "left" and "right" here are a little misleading: there is + # no order on the children of a node. That's okay because the + # Boolean AND and OR operators are symmetric. It just means that + # the order of the operands cannot be predicted and hence the + # function does not necessarily behave the same way on every + # invocation. + left, right = formula[root] + left_subformula = _to_string(formula, left) + right_subformula = _to_string(formula, right) + return f"({left_subformula} {label} {right_subformula})" + + root = next(v for v, d in formula.in_degree() if d == 0) + return _to_string(formula, root) + + +circuit = nx.DiGraph() +# Layer 0 +circuit.add_node(0, label="PI1", layer=0) +circuit.add_node(1, label="PI2", layer=0) +circuit.add_node(2, label="PI3", layer=0) +circuit.add_node(3, label="PI4", layer=0) + +# Layer 1 +circuit.add_node(4, label="m", layer=1) +circuit.add_node(5, label="o", layer=1) +circuit.add_node(6, label="p", layer=1) + +circuit.add_edge(0, 4) +circuit.add_edge(0, 5) +circuit.add_edge(1, 4) +circuit.add_edge(2, 5) +circuit.add_edge(2, 6) +circuit.add_edge(3, 6) + +# Layer 2 +circuit.add_node(7, label="n", layer=2) + +circuit.add_edge(5, 7) +circuit.add_edge(6, 7) + +# Layer 3 +circuit.add_node(8, label="x", layer=3) + +circuit.add_edge(4, 8) +circuit.add_edge(7, 8) + +# Layer 4 (Primary outputs) +# circuit.add_node(9, label="PO1", layer=4) + +# circuit.add_edge(8, 9) + + +# Convert the circuit to an equivalent formula. +formula = circuit_to_formula(circuit) +print(formula_to_string(formula)) + +labels = nx.get_node_attributes(circuit, "label") + +options = { + "node_size": 600, + "alpha": 0.5, + "node_color": "aqua", + "labels": labels, + "font_size": 22, +} + +plt.figure(figsize=(8, 8)) +pos = nx.multipartite_layout(circuit, subset_key="layer") +nx.draw_networkx(circuit, pos, **options) +# plt.title(formula_to_string(formula)) +plt.title(r'G = ($\nu_g \cup \nu_{io}$, $\mathit{E}$)') +plt.axis("equal") +plt.show() + +print(nx.bfs_successors(G=circuit, source=0)) +print(nx.dfs_successors(G=circuit, source=0)) From 9b29d0ee7a58cf24d3b4a82f9b23eddebe3bccc1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 9 Apr 2023 18:31:54 +0800 Subject: [PATCH 1299/2002] Committed on 2023/04/09 --- .idea/misc.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 357fb3d8..d72fc4c6 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,7 +3,7 @@ - + From bd9e89f3df7b530795fa1c74078dfe8380348490 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 23 Apr 2023 00:28:09 +0800 Subject: [PATCH 1300/2002] Committed on 2023/04/23 --- Grokking Algorithms/CH3-Recursion/__init__.py | 0 Grokking Algorithms/CH3-Recursion/call stack.py | 3 +++ Grokking Algorithms/__init__.py | 0 3 files changed, 3 insertions(+) create mode 100644 Grokking Algorithms/CH3-Recursion/__init__.py create mode 100644 Grokking Algorithms/CH3-Recursion/call stack.py create mode 100644 Grokking Algorithms/__init__.py diff --git a/Grokking Algorithms/CH3-Recursion/__init__.py b/Grokking Algorithms/CH3-Recursion/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Grokking Algorithms/CH3-Recursion/call stack.py b/Grokking Algorithms/CH3-Recursion/call stack.py new file mode 100644 index 00000000..2b6729c7 --- /dev/null +++ b/Grokking Algorithms/CH3-Recursion/call stack.py @@ -0,0 +1,3 @@ +def greet(name): + print("hello, " + name + "!") + diff --git a/Grokking Algorithms/__init__.py b/Grokking Algorithms/__init__.py new file mode 100644 index 00000000..e69de29b From a59d935fb4db31f49043ad8a23dd8f83a9cec18e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 23 Apr 2023 00:30:19 +0800 Subject: [PATCH 1301/2002] Committed on 2023/04/23 --- Grokking Algorithms/CH3-Recursion/call stack.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Grokking Algorithms/CH3-Recursion/call stack.py b/Grokking Algorithms/CH3-Recursion/call stack.py index 2b6729c7..54e2137f 100644 --- a/Grokking Algorithms/CH3-Recursion/call stack.py +++ b/Grokking Algorithms/CH3-Recursion/call stack.py @@ -1,3 +1,17 @@ def greet(name): print("hello, " + name + "!") + greet2(name) + print("getting ready to say bye...") + + bye() + + +def greet2(name): + print("how are you, " + name + "?") + + +def bye(): + print("ok, bye!") + + From 390bdb1c6446b1b4ef7b551fef1b9ee0ada077d4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 23 Apr 2023 00:31:39 +0800 Subject: [PATCH 1302/2002] Committed on 2023/04/23 --- Grokking Algorithms/CH3-Recursion/call stack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Grokking Algorithms/CH3-Recursion/call stack.py b/Grokking Algorithms/CH3-Recursion/call stack.py index 54e2137f..832e3b0b 100644 --- a/Grokking Algorithms/CH3-Recursion/call stack.py +++ b/Grokking Algorithms/CH3-Recursion/call stack.py @@ -15,3 +15,5 @@ def bye(): print("ok, bye!") +# Suppose you call greet("maggie") First, your computer allocates a box of memory for that function call. + From 162dbaac4bf8ef048361476e902fe149acc6fe61 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 23 Apr 2023 00:55:24 +0800 Subject: [PATCH 1303/2002] Committed on 2023/04/23 --- Grokking Algorithms/CH3-Recursion/call stack.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Grokking Algorithms/CH3-Recursion/call stack.py b/Grokking Algorithms/CH3-Recursion/call stack.py index 832e3b0b..345c85b9 100644 --- a/Grokking Algorithms/CH3-Recursion/call stack.py +++ b/Grokking Algorithms/CH3-Recursion/call stack.py @@ -15,5 +15,6 @@ def bye(): print("ok, bye!") -# Suppose you call greet("maggie") First, your computer allocates a box of memory for that function call. - +# Suppose you call greet("maggie") +# First, your computer allocates a box of memory for that function call. +greet("maggie") From 236dd873234b5784cf268958e661483efd2b4b45 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 28 Apr 2023 22:47:12 +0800 Subject: [PATCH 1304/2002] Committed on 2023/04/23 --- .../2023/April_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/April_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/April_at_metro_level.py new file mode 100644 index 00000000..e49c7dae --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/April_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2282+120678+68698+4679, 46762+33071+6512, 62270+3708+10651, 4619+7100+27670, 38818+4833] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey'), + colour.CSS4_COLORS.get('dimgrey')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230428143149/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From f33bd8a6aa43d56deb1398c93deefe127d7ed4f4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Fri, 28 Apr 2023 23:02:59 +0800 Subject: [PATCH 1305/2002] Committed on 2023/04/23 --- .../2023/April_at_metro_level.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/April_at_metro_level.py index e49c7dae..5790e47c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/April_at_metro_level.py @@ -20,11 +20,11 @@ # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plt.tick_params(axis='y', labelsize=12) # [2] -plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('dimgrey'), - colour.CSS4_COLORS.get('dimgrey'), - colour.CSS4_COLORS.get('dimgrey'), - colour.CSS4_COLORS.get('dimgrey'), - colour.CSS4_COLORS.get('dimgrey')]) #[4][5][6] +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] for rect in plot: height = rect.get_height() From f5febc124a42f9f3c9b913e1f11c7813b841fa65 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sat, 29 Apr 2023 13:31:28 +0800 Subject: [PATCH 1306/2002] Committed on 2023/04/29 --- .../Road safety/Year_over_year_2022.py | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2022.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2022.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2022.py new file mode 100644 index 00000000..1ec52a9f --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2022.py @@ -0,0 +1,123 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + [132, 266, 269, 283, 295, 333], # 2021 + [107, 307, 263, 308, 312, 373], # 2022 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2022)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary, color=colour.CSS4_COLORS.get('palegreen'), linewidth=1, ecolor=colour.CSS4_COLORS.get('dodgerblue')) # Create a bar chart and its format. [7][11][12] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html +# 11. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar.html#matplotlib.axes.Axes.bar +# 12. https://matplotlib.org/stable/gallery/color/named_colors.html From 7753baf11215595310048e625ab6ee3ef21c8d86 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Jun 2023 11:57:54 +0800 Subject: [PATCH 1307/2002] Committed on 2023/06/03 --- .../2023/May_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py new file mode 100644 index 00000000..5790e47c --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2282+120678+68698+4679, 46762+33071+6512, 62270+3708+10651, 4619+7100+27670, 38818+4833] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230428143149/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From ba65e19d090ee9d5f729ca8c9064e83a78cfab59 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Jun 2023 11:59:59 +0800 Subject: [PATCH 1308/2002] Committed on 2023/06/03 --- .../2023/May_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py index 5790e47c..fd707af5 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py @@ -34,7 +34,7 @@ plt.title("2023/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://web.archive.org/web/20230428143149/https://www.104.com.tw/jobs/main/category/?jobsource=category") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230526102541/https://www.104.com.tw/jobs/main/category/?jobsource=category") plt.ylim(39000, 180000) From 1121cff265669eb64df71a9c4f14fca8ba904dcb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Jun 2023 12:00:27 +0800 Subject: [PATCH 1309/2002] Committed on 2023/06/03 --- .../2023/May_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py index fd707af5..6d408209 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2023/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2023/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://web.archive.org/web/20230526102541/https://www.104.com.tw/jobs/main/category/?jobsource=category") From f5a27abc387e0115fb41376ba43e07dae1fa5068 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Jun 2023 16:02:48 +0800 Subject: [PATCH 1310/2002] Committed on 2023/06/03 --- .../2023/May_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py index 6d408209..cc093b76 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/May_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2282+120678+68698+4679, 46762+33071+6512, 62270+3708+10651, 4619+7100+27670, 38818+4833] +position_vacancies = [2272+121546+69579+4789, 46355+33109+6432, 63498+3754+10801, 4714+7123+28015, 39181+4925] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 1588b564cf672d470e1d3cddd0308b3e80da5fd0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Jun 2023 16:44:22 +0800 Subject: [PATCH 1311/2002] Committed on 2023/06/03 --- .../Month_over_month_2023/March.py | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2023/March.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/March.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/March.py new file mode 100644 index 00000000..0df4dfcf --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/March.py @@ -0,0 +1,113 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar"] + +deaths = [[8, 25, 26, 25, 30, 25], # January + [15, 18, 15, 17, 31, 27], # February + [17, 34, 24, 34, 21, 30], # March + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2022/01-12)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] # + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] # + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] # + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] # + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] # + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] # + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='20', transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 525e5872bf2f8aef57cc14bd9fa5e63a0ff668d8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Jun 2023 16:46:24 +0800 Subject: [PATCH 1312/2002] Committed on 2023/06/03 --- .../Road safety/Month_over_month_2023/CC-BY.png | Bin 0 -> 1283 bytes .../Road safety/Month_over_month_2023/March.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2023/CC-BY.png diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/CC-BY.png b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Sun, 18 Jun 2023 00:05:08 +0800 Subject: [PATCH 1313/2002] Committed on 2023/06/18 --- .../Average life expectancy/__init__.py | 278 ++++++++++++++++++ .../Average life expectancy/lifecycle.py | 278 ++++++++++++++++++ 2 files changed, 556 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/lifecycle.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/__init__.py b/The attainments and realizations of my dreams/Average life expectancy/__init__.py index e69de29b..3d3a1036 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/__init__.py +++ b/The attainments and realizations of my dreams/Average life expectancy/__init__.py @@ -0,0 +1,278 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Barton LLC': 109438.50, + 'Frami, Hills and Schmidt': 103569.59, + 'Fritsch, Russel and Anderson': 112214.71, + 'Jerde-Hilpert': 112591.43, + 'Keeling LLC': 100934.30, + 'Koepp Ltd': 103660.54, + 'Kulas Inc': 137351.96, + 'Trantow-Barrows': 123381.38, + 'White-Trantow': 135841.99, + 'Will LLC': 104437.60} +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = np.mean(group_data) + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +def currency(x, pos): + """The two arguments are the value and tick position""" + if x >= 1e6: + s = '${:1.1f}M'.format(x*1e-6) + else: + s = '${:1.0f}K'.format(x*1e-3) + return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') +ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(group_mean, ls='--', color='r') + +# Annotate new companies +for group in [3, 5, 8]: + ax.text(145000, group, "New Company", fontsize=10, + verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') +ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 25e3, 50e3, 75e3, 100e3, 125e3]) +fig.subplots_adjust(right=.1) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") diff --git a/The attainments and realizations of my dreams/Average life expectancy/lifecycle.py b/The attainments and realizations of my dreams/Average life expectancy/lifecycle.py new file mode 100644 index 00000000..3d3a1036 --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/lifecycle.py @@ -0,0 +1,278 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Barton LLC': 109438.50, + 'Frami, Hills and Schmidt': 103569.59, + 'Fritsch, Russel and Anderson': 112214.71, + 'Jerde-Hilpert': 112591.43, + 'Keeling LLC': 100934.30, + 'Koepp Ltd': 103660.54, + 'Kulas Inc': 137351.96, + 'Trantow-Barrows': 123381.38, + 'White-Trantow': 135841.99, + 'Will LLC': 104437.60} +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = np.mean(group_data) + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +def currency(x, pos): + """The two arguments are the value and tick position""" + if x >= 1e6: + s = '${:1.1f}M'.format(x*1e-6) + else: + s = '${:1.0f}K'.format(x*1e-3) + return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') +ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(group_mean, ls='--', color='r') + +# Annotate new companies +for group in [3, 5, 8]: + ax.text(145000, group, "New Company", fontsize=10, + verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') +ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 25e3, 50e3, 75e3, 100e3, 125e3]) +fig.subplots_adjust(right=.1) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") From 9adfa059551b9e635e2d065d0da1c4cf242c7659 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:19:14 +0800 Subject: [PATCH 1314/2002] Committed on 2023/06/18 --- .../Average life expectancy/__init__.py | 43 ++++++++----------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/__init__.py b/The attainments and realizations of my dreams/Average life expectancy/__init__.py index 3d3a1036..7c03b592 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/__init__.py +++ b/The attainments and realizations of my dreams/Average life expectancy/__init__.py @@ -59,19 +59,13 @@ import matplotlib.pyplot as plt -data = {'Barton LLC': 109438.50, - 'Frami, Hills and Schmidt': 103569.59, - 'Fritsch, Russel and Anderson': 112214.71, - 'Jerde-Hilpert': 112591.43, - 'Keeling LLC': 100934.30, - 'Koepp Ltd': 103660.54, - 'Kulas Inc': 137351.96, - 'Trantow-Barrows': 123381.38, - 'White-Trantow': 135841.99, - 'Will LLC': 104437.60} +data = {'Taipei': 84.14, + 'Kaohsiung': 79.96, + } + group_data = list(data.values()) group_names = list(data.keys()) -group_mean = np.mean(group_data) +group_mean = 80.86 ############################################################################### # Getting started @@ -168,8 +162,8 @@ ax.barh(group_names, group_data) labels = ax.get_xticklabels() plt.setp(labels, rotation=45, horizontalalignment='right') -ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', - title='Company Revenue') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') ############################################################################### # We can also adjust the size of this plot using the :func:`pyplot.subplots` @@ -186,8 +180,8 @@ ax.barh(group_names, group_data) labels = ax.get_xticklabels() plt.setp(labels, rotation=45, horizontalalignment='right') -ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', - title='Company Revenue') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') ############################################################################### # For labels, we can specify custom formatting guidelines in the form of @@ -219,8 +213,8 @@ def currency(x, pos): labels = ax.get_xticklabels() plt.setp(labels, rotation=45, horizontalalignment='right') -ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', - title='Company Revenue') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') ax.xaxis.set_major_formatter(currency) ############################################################################### @@ -237,20 +231,21 @@ def currency(x, pos): plt.setp(labels, rotation=45, horizontalalignment='right') # Add a vertical line, here we set the style in the function call -ax.axvline(group_mean, ls='--', color='r') +ax.axvline(x=group_mean, ls='--', color='r') # Annotate new companies -for group in [3, 5, 8]: - ax.text(145000, group, "New Company", fontsize=10, - verticalalignment="center") +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") # Now we move our title up since it's getting a little cramped ax.title.set(y=1.05) -ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', - title='Company Revenue') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + ax.xaxis.set_major_formatter(currency) -ax.set_xticks([0, 25e3, 50e3, 75e3, 100e3, 125e3]) +ax.set_xticks([0, 20, 40, 60, 80, 100]) fig.subplots_adjust(right=.1) plt.show() From 1bd19985a4b51ed380fb264f3d25f4075c9c3284 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:20:29 +0800 Subject: [PATCH 1315/2002] Committed on 2023/06/18 --- .../Average life expectancy/__init__.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/__init__.py b/The attainments and realizations of my dreams/Average life expectancy/__init__.py index 7c03b592..5536070c 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/__init__.py +++ b/The attainments and realizations of my dreams/Average life expectancy/__init__.py @@ -195,13 +195,13 @@ # needed. -def currency(x, pos): - """The two arguments are the value and tick position""" - if x >= 1e6: - s = '${:1.1f}M'.format(x*1e-6) - else: - s = '${:1.0f}K'.format(x*1e-3) - return s +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s ############################################################################### # We can then apply this function to the labels on our plot. To do this, @@ -215,7 +215,8 @@ def currency(x, pos): ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', title='Average Life Expectancy in 2021') -ax.xaxis.set_major_formatter(currency) + +# ax.xaxis.set_major_formatter(currency) ############################################################################### # Combining multiple visualizations From 004ad14b1ab6fdacabe16814dd60e2649ca9703a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:24:37 +0800 Subject: [PATCH 1316/2002] Committed on 2023/06/18 --- .../Average life expectancy/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/__init__.py b/The attainments and realizations of my dreams/Average life expectancy/__init__.py index 5536070c..e3fdfe76 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/__init__.py +++ b/The attainments and realizations of my dreams/Average life expectancy/__init__.py @@ -245,7 +245,7 @@ ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', title='Average Life Expectancy in 2021') -ax.xaxis.set_major_formatter(currency) +# ax.xaxis.set_major_formatter(currency) ax.set_xticks([0, 20, 40, 60, 80, 100]) fig.subplots_adjust(right=.1) From bf9bb5e78fd2c5c459767272ada58c3ff1ac2fb4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:36:45 +0800 Subject: [PATCH 1317/2002] Committed on 2023/06/18 --- .../Average life expectancy/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/__init__.py b/The attainments and realizations of my dreams/Average life expectancy/__init__.py index e3fdfe76..944fec79 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/__init__.py +++ b/The attainments and realizations of my dreams/Average life expectancy/__init__.py @@ -232,7 +232,7 @@ plt.setp(labels, rotation=45, horizontalalignment='right') # Add a vertical line, here we set the style in the function call -ax.axvline(x=group_mean, ls='--', color='r') +ax.axvline(x=group_mean, ls='--', color='r', url="Average") # Annotate new companies # for group in [3, 5, 8]: From 0c876f8e0d7f3c86a6552bdc0230aa78d4817e06 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:42:52 +0800 Subject: [PATCH 1318/2002] Committed on 2023/06/18 --- .../Average life expectancy/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/__init__.py b/The attainments and realizations of my dreams/Average life expectancy/__init__.py index 944fec79..a2184674 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/__init__.py +++ b/The attainments and realizations of my dreams/Average life expectancy/__init__.py @@ -232,7 +232,9 @@ plt.setp(labels, rotation=45, horizontalalignment='right') # Add a vertical line, here we set the style in the function call -ax.axvline(x=group_mean, ls='--', color='r', url="Average") +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean, 0.5, "Nationwide average", + horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies # for group in [3, 5, 8]: From 3e0fb6a0116f750fe3ad73c5ba3f32b3a778cbfa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:45:11 +0800 Subject: [PATCH 1319/2002] Committed on 2023/06/18 --- .../Average life expectancy/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/__init__.py b/The attainments and realizations of my dreams/Average life expectancy/__init__.py index a2184674..66379311 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/__init__.py +++ b/The attainments and realizations of my dreams/Average life expectancy/__init__.py @@ -233,7 +233,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean, 0.5, "Nationwide average", +ax.text(group_mean, 0.5, "Nationwide average", rotation=90, # [1] horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies @@ -274,3 +274,6 @@ # Uncomment this line to save the figure. # fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# 1. https://stackoverflow.com/a/70595101/ From 9a62f2b2670f5ed8e9643346753eff4e69a67889 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:46:38 +0800 Subject: [PATCH 1320/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021.py | 279 ++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021.py new file mode 100644 index 00000000..c009f85c --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021.py @@ -0,0 +1,279 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Taipei': 84.14, + 'Kaohsiung': 79.96, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean, 0.5, "Nationwide average", rotation=90, + horizontalalignment='center', fontweight='bold', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From 8bde03be1a55767673a3cbc0789da30159c459f9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:47:55 +0800 Subject: [PATCH 1321/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021.py index c009f85c..1e111e02 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021.py @@ -233,7 +233,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean, 0.5, "Nationwide average", rotation=90, +ax.text(group_mean, 0.5, "Nationwide average", horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies @@ -244,7 +244,7 @@ # Now we move our title up since it's getting a little cramped ax.title.set(y=1.05) -ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', title='Average Life Expectancy in 2021') # ax.xaxis.set_major_formatter(currency) From bc76db7e5ac29d97011411baf24f457e883521da Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:55:15 +0800 Subject: [PATCH 1322/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-2.py | 283 ++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py new file mode 100644 index 00000000..d125fc3d --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py @@ -0,0 +1,283 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Kaohsiung': 79.96, + 'Tainan': 80.55, + 'Taichung': 81.13, + 'Taoyuan': 81.35, + 'New Taipei': 81.74, + 'Taipei': 84.14, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean, 0.5, "Nationwide average", + horizontalalignment='center', fontweight='bold', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From 126c69fa61c06c95c60a8b12f735e6f56f212525 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:58:20 +0800 Subject: [PATCH 1323/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py index d125fc3d..a2619f27 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean, 0.5, "Nationwide average", +ax.text(group_mean, 0.8, "Nationwide average", horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies From 226719b6b307941730251f40968d3ac8bb0dd63e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 00:59:26 +0800 Subject: [PATCH 1324/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py index a2619f27..874e7204 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean, 0.8, "Nationwide average", +ax.text(group_mean, 2.8, "Nationwide average", horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies From ddd91590a9488a3af4d6e938474c85b1da1b8caa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 01:01:43 +0800 Subject: [PATCH 1325/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py index 874e7204..033371c4 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean, 2.8, "Nationwide average", +ax.text(group_mean, 2.5, "Nationwide average", horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies From 6d78f7515d166db87afb8dec431a8e0f23f1129c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 01:02:50 +0800 Subject: [PATCH 1326/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py index 033371c4..f05430eb 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean, 2.5, "Nationwide average", +ax.text(group_mean, 2.4, "Nationwide average", horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies From 1923980a8eb87bd6f2aeb9cf9f179d62f4251e8e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 01:03:24 +0800 Subject: [PATCH 1327/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py index f05430eb..7c2c1781 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-2.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean, 2.4, "Nationwide average", +ax.text(group_mean, 2.45, "Nationwide average", horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies From d1f44394d938c96f9a22ee479c0592145f1cee64 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 01:19:41 +0800 Subject: [PATCH 1328/2002] Committed on 2023/06/18 --- .../Average life expectancy/lifecycle-2.py | 277 ++++++++++++++++++ 1 file changed, 277 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/lifecycle-2.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/lifecycle-2.py b/The attainments and realizations of my dreams/Average life expectancy/lifecycle-2.py new file mode 100644 index 00000000..38e61f0b --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/lifecycle-2.py @@ -0,0 +1,277 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Barton LLC': 109438.50, + 'Frami, Hills and Schmidt': 103569.59, + 'Fritsch, Russel and Anderson': 112214.71, + 'Jerde-Hilpert': 112591.43, + 'Keeling LLC': 100934.30, + 'Koepp Ltd': 103660.54, + 'Kulas Inc': 137351.96, + 'Trantow-Barrows': 123381.38, + 'White-Trantow': 135841.99, + 'Will LLC': 104437.60} +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = np.mean(group_data) + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +def currency(x, pos): + """The two arguments are the value and tick position""" + if x >= 1e6: + s = '${:1.1f}M'.format(x*1e-6) + else: + s = '${:1.0f}K'.format(x*1e-3) + return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') +ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +# fig, ax = plt.subplots(figsize=(8, 8)) +# ax.barh(group_names, group_data) +# labels = ax.get_xticklabels() +# plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +# ax.axvline(group_mean, ls='--', color='r') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +# ax.title.set(y=1.05) + +# ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', title='Company Revenue') +# ax.xaxis.set_major_formatter(currency) +# ax.set_xticks([0, 25e3, 50e3, 75e3, 100e3, 125e3]) +# fig.subplots_adjust(right=.1) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") From ec218fea559ab75561de340d92121f85fce68df6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 15:48:23 +0800 Subject: [PATCH 1329/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-3.py | 283 ++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py new file mode 100644 index 00000000..9d20a504 --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py @@ -0,0 +1,283 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Kaohsiung': 79.96, + 'Tainan': 80.55, + 'Taichung': 81.13, + 'Taoyuan': 81.35, + 'New Taipei': 81.74, + 'Taipei': 84.14, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean + 1, 2.45, "Nationwide average", rotation=90, + horizontalalignment='center', fontweight='bold', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From bc463cb89493ebd7d8a84332a95ef25163b24fc2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 15:49:15 +0800 Subject: [PATCH 1330/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py index 9d20a504..ca012099 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean + 1, 2.45, "Nationwide average", rotation=90, +ax.text(group_mean + 1.5, 1.45, "Nationwide average", rotation=90, horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies From b1303eff2485460ae310d5b3645d929f14d034af Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 15:50:05 +0800 Subject: [PATCH 1331/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py index ca012099..8cc3b76f 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-3.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean + 1.5, 1.45, "Nationwide average", rotation=90, +ax.text(group_mean + 2.5, 1.45, "Nationwide average", rotation=90, horizontalalignment='center', fontweight='bold', color='red') # Annotate new companies From 744bb6f02aa67fc6d5143d25a7fd86a1149c98a2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 15:52:42 +0800 Subject: [PATCH 1332/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-4.py | 283 ++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021-4.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-4.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-4.py new file mode 100644 index 00000000..4813688e --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-4.py @@ -0,0 +1,283 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Kaohsiung': 79.96, + 'Tainan': 80.55, + 'Taichung': 81.13, + 'Taoyuan': 81.35, + 'New Taipei': 81.74, + 'Taipei': 84.14, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean + 2.5, 1.45, "TW average = 80.86", rotation=90, + horizontalalignment='center', fontweight='bold', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From 90b71433b8f9c88ae50779716bf922b2e387ee56 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 15:54:39 +0800 Subject: [PATCH 1333/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-5.py | 283 ++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021-5.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-5.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-5.py new file mode 100644 index 00000000..79ba3b0f --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-5.py @@ -0,0 +1,283 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Kaohsiung': 79.96, + 'Tainan': 80.55, + 'Taichung': 81.13, + 'Taoyuan': 81.35, + 'New Taipei': 81.74, + 'Taipei': 84.14, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean + 2.5, 1.45, "TW average = 80.86", rotation=90, + horizontalalignment='center', fontweight='light', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From 5a1e2ea892c4e4c5922593d913b7dac5b4a91389 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 15:58:20 +0800 Subject: [PATCH 1334/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-6.py | 286 ++++++++++++++++++ 1 file changed, 286 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py new file mode 100644 index 00000000..ae092a78 --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py @@ -0,0 +1,286 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Kaohsiung': 79.96, + 'Tainan': 80.55, + 'Taichung': 81.13, + 'Taoyuan': 81.35, + 'New Taipei': 81.74, + 'Taipei': 84.14, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean + 2.5, 1.45, "TW average = 80.86", rotation=90, + horizontalalignment='center', fontweight='light', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.xlabel("鞈 Reference https://dep.mohw.gov.tw/DOS/lp-5082-113.html") + + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From 3ba83485bbec0c2a043cb8cdb88905204d11503d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:01:22 +0800 Subject: [PATCH 1335/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-6.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py index ae092a78..212ec54b 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py @@ -255,8 +255,9 @@ ax.set_xticks([0, 20, 40, 60, 80, 100]) fig.subplots_adjust(right=.1) -plt.xlabel("鞈 Reference https://dep.mohw.gov.tw/DOS/lp-5082-113.html") - +plt.text(x=0.4, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) plt.show() From 4657e3302b1e1a644c742e50be74c8db4f77c53e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:07:50 +0800 Subject: [PATCH 1336/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py index 212ec54b..d2a25f71 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py @@ -255,7 +255,7 @@ ax.set_xticks([0, 20, 40, 60, 80, 100]) fig.subplots_adjust(right=.1) -plt.text(x=0.4, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.45, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) From 40f2fa2d611f687c0fa4ea4702a4a9b8862ee97d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:09:13 +0800 Subject: [PATCH 1337/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py index d2a25f71..084098f6 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean + 2.5, 1.45, "TW average = 80.86", rotation=90, +ax.text(group_mean + 2.8, 1.45, "TW average = 80.86", rotation=90, horizontalalignment='center', fontweight='light', color='red') # Annotate new companies From 12993f3b7c3940b65332efb09053d7b4243b43da Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:09:54 +0800 Subject: [PATCH 1338/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py index 084098f6..28477f7b 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean + 2.8, 1.45, "TW average = 80.86", rotation=90, +ax.text(group_mean + 2.9, 1.45, "TW average = 80.86", rotation=90, horizontalalignment='center', fontweight='light', color='red') # Annotate new companies From 488498cf8ff9cd35c53300a59ba4eb2f7875bdf7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:10:41 +0800 Subject: [PATCH 1339/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py index 28477f7b..83f61b65 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean + 2.9, 1.45, "TW average = 80.86", rotation=90, +ax.text(group_mean + 3.1, 1.45, "Taiwan average = 80.86", rotation=90, horizontalalignment='center', fontweight='light', color='red') # Annotate new companies From ef9484f13bb63bebdd9aaa064456c326cceeaa3f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:11:34 +0800 Subject: [PATCH 1340/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py index 83f61b65..50ada84a 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-6.py @@ -237,7 +237,7 @@ # Add a vertical line, here we set the style in the function call ax.axvline(x=group_mean, ls='--', color='r') -ax.text(group_mean + 3.1, 1.45, "Taiwan average = 80.86", rotation=90, +ax.text(group_mean + 3.2, 1.45, "Taiwan average = 80.86", rotation=90, horizontalalignment='center', fontweight='light', color='red') # Annotate new companies From 6716d1f0d4bbbebe69efd227d406bc224d75fafd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:17:09 +0800 Subject: [PATCH 1341/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-7.py | 287 ++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021-7.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-7.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-7.py new file mode 100644 index 00000000..e3ef8c8c --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-7.py @@ -0,0 +1,287 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Kaohsiung': 79.96, + 'Tainan': 80.55, + 'Taichung': 81.13, + 'Taoyuan': 81.35, + 'New Taipei': 81.74, + 'Taipei': 84.14, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean + 3.2, 1.45, "Taiwan average = 80.86", rotation=90, + horizontalalignment='center', fontweight='light', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', + title='Life Expectancy in Taiwan 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.text(x=0.45, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From ecda7510c5c9ba43717f5dc9f0bde4dbdc6357e8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:18:56 +0800 Subject: [PATCH 1342/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-8.py | 290 ++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py new file mode 100644 index 00000000..9430cc83 --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py @@ -0,0 +1,290 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Kaohsiung': 79.96, + 'Tainan': 80.55, + 'Taichung': 81.13, + 'Taoyuan': 81.35, + 'New Taipei': 81.74, + 'Taipei': 84.14, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean + 3.2, 1.45, "Taiwan average = 80.86", rotation=90, + horizontalalignment='center', fontweight='light', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', + title='Life Expectancy in Taiwan 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.text(x=0.45, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) + +plt.text(x=0.45, y=0.1, s="Reference: https://dep.mohw.gov.tw/DOS/lp-5082-113.html", fontsize=10, + color='black', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From 7f778d241225482c088d99e0d870aa1117fdd924 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:19:52 +0800 Subject: [PATCH 1343/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-8.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py index 9430cc83..2bdb5e2a 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py @@ -259,8 +259,8 @@ ha='center', va='center', rotation=30, transform=ax.transAxes) -plt.text(x=0.45, y=0.1, s="Reference: https://dep.mohw.gov.tw/DOS/lp-5082-113.html", fontsize=10, - color='black', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) +plt.text(x=0.45, y=0.01, s="Reference: https://dep.mohw.gov.tw/DOS/lp-5082-113.html", fontsize=10, + color='black', alpha=0.9, ha='center', va='center', rotation=0, transform=ax.transAxes) plt.show() From 4a0f976596ab925727019f3e0437f15b90686377 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:24:16 +0800 Subject: [PATCH 1344/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-8.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py index 2bdb5e2a..73268ae8 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8.py @@ -259,7 +259,7 @@ ha='center', va='center', rotation=30, transform=ax.transAxes) -plt.text(x=0.45, y=0.01, s="Reference: https://dep.mohw.gov.tw/DOS/lp-5082-113.html", fontsize=10, +plt.text(x=0.35, y=0.01, s="Reference: https://dep.mohw.gov.tw/DOS/lp-5082-113.html", fontsize=10, color='black', alpha=0.9, ha='center', va='center', rotation=0, transform=ax.transAxes) plt.show() From 038d6baf170777464968d2d14a252d26dfd30464 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:27:07 +0800 Subject: [PATCH 1345/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-8-2.py | 290 ++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-2.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-2.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-2.py new file mode 100644 index 00000000..2bdb5e2a --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-2.py @@ -0,0 +1,290 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Kaohsiung': 79.96, + 'Tainan': 80.55, + 'Taichung': 81.13, + 'Taoyuan': 81.35, + 'New Taipei': 81.74, + 'Taipei': 84.14, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean + 3.2, 1.45, "Taiwan average = 80.86", rotation=90, + horizontalalignment='center', fontweight='light', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', + title='Life Expectancy in Taiwan 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.text(x=0.45, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) + +plt.text(x=0.45, y=0.01, s="Reference: https://dep.mohw.gov.tw/DOS/lp-5082-113.html", fontsize=10, + color='black', alpha=0.9, ha='center', va='center', rotation=0, transform=ax.transAxes) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From fdd7c2e496853e51070055bd2135fb76899f2a1c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 18 Jun 2023 16:42:42 +0800 Subject: [PATCH 1346/2002] Committed on 2023/06/18 --- .../Average life expectancy/Year 2021-8-3.py | 290 ++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-3.py diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-3.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-3.py new file mode 100644 index 00000000..5745a9b3 --- /dev/null +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-3.py @@ -0,0 +1,290 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Kaohsiung': 79.96, + 'Tainan': 80.55, + 'Taichung': 81.13, + 'Taoyuan': 81.35, + 'New Taipei': 81.74, + 'Taipei': 84.14, + } + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = 80.86 + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +# def currency(x, pos): +# """The two arguments are the value and tick position""" +# if x >= 1e6: +# s = '${:1.1f}M'.format(x*1e-6) +# else: +# s = '${:1.0f}K'.format(x*1e-3) +# return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10, 100], xlabel='Average life expectancy', ylabel='City', + title='Average Life Expectancy in 2021') + +# ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(x=group_mean, ls='--', color='r') +ax.text(group_mean + 3.5, 1.45, "Taiwan average = 80.86", rotation=90, + horizontalalignment='center', fontweight='light', color='red') + +# Annotate new companies +# for group in [3, 5, 8]: +# ax.text(145000, group, "New Company", fontsize=10, +# verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10, 100], xlabel='Age', ylabel='City', + title='Life Expectancy in Taiwan 2021') + +# ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 20, 40, 60, 80, 100]) +fig.subplots_adjust(right=.1) + +plt.text(x=0.45, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) + +plt.text(x=0.45, y=0.01, s="Reference: https://dep.mohw.gov.tw/DOS/lp-5082-113.html", fontsize=10, + color='black', alpha=0.9, ha='center', va='center', rotation=0, transform=ax.transAxes) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") + +# References: +# From 4f37bd1290cea817033200fed1111a416e1c8de7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 29 Jun 2023 01:12:35 +0800 Subject: [PATCH 1347/2002] Committed on 2023/06/29 --- .../2023/Taipei_v_Kaohsiung_June.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_June.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_June.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_June.py new file mode 100644 index 00000000..97b3a88c --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_June.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [121265, 38660] + +label = ["啣撣\nTaipei City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/06 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230624081015/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From f060fe207e9b756536f8a16bbc0b231bc33425bf Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 29 Jun 2023 01:14:47 +0800 Subject: [PATCH 1348/2002] Committed on 2023/06/29 --- .../2023/Taipei_v_Kaohsiung_June.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_June.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_June.py index 97b3a88c..3e4d5d1f 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_June.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_June.py @@ -39,7 +39,7 @@ img = image.imread('CC-BY.png') -plt.figimage(X=img, xo=800, yo=800, alpha=0.9) +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) # Insert text watermark [1] plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, From 250398e83e1201a84a75d0f1c05ecec29cfc5c26 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 4 Jul 2023 11:01:46 +0800 Subject: [PATCH 1349/2002] Committed on 2023/07/04 --- .idea/encodings.xml | 1 + .../2023_watermark.py | 97 ++++ .../year2023.csv | 508 ++++++++++++++++++ 3 files changed, 606 insertions(+) create mode 100644 The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py create mode 100644 The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/year2023.csv diff --git a/.idea/encodings.xml b/.idea/encodings.xml index c230f121..bbd4ca1f 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -6,6 +6,7 @@ + diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py new file mode 100644 index 00000000..30ca07dc --- /dev/null +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -0,0 +1,97 @@ +import pandas as pd +import matplotlib.image as image +import matplotlib.pyplot as plt +# Using the magic encoding +# -*- coding: utf-8 -*- + + +# Convert wiki-table in the article 擃蝑脫楛閮俎4] to csv.[2][3] + +public_research_centric_university = pd.DataFrame(data=[ + [1, "蝡箇憭批飛", "National Taiwan University", 232587, "North", ], + [2, "蝡憭批飛", "National Cheng Kung University", 141178, "South", ], + [3, "蝡皜臬之摮", "National Tsing Hua University", 120394, "North", "Derived from Beijing, China's Tsing Hua University"], + [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 138078, "North", "Derived from Shanghai, China's ChiaoTung University"], + [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43745, "North", ], + [6, "蝡銝剖亢憭批飛", "National Central University", 42228, "North", ], + [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], + [8, "蝡踵祥憭批飛", "National Chengchi University", 31579, "North", "Literally, 'National Politics University'"], + [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 32068, "South", ], + [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 14233, "North", ], + [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 15361, "South", "Literally, National Chiang Chung-cheng University"], + [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 14233, "North", ], + [13, "蝡箏憭批飛", "National Taipei University", 8771, "North", ], + [14, "蝡典憭批飛", "National Chi Nan University", 8030, "North", ], + [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 7580, "North", ], + [16, "蝡梯臬之摮", "National Dong Hwa University", 6965, "Hualien County", ], + [17, "蝡蝢拙之摮", "National Chiayi University", 5927, "South", ], + [18, "蝡摰剖之摮", "National Ilan University", 6799, "North", ], + [19, "蝡撅勗之摮", "National Pingtung University", 6619, "South", ], + [20, "蝡箸勗之摮", "National Taitung University", 6178, "Taitung County", ], + [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5974, "North", ], + [22, "蝡箏脣之摮", "National Taipei University of Education", 5234, "North", ], + [23, "蝡擃憭批飛", "National University of Kaohsiung", 5502, "South", ], + [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 5478, "North", ], + [25, "蝡箔葉脣之摮", "National Taichung University of Education", 5549, "North", ], + [26, "蝡箏憭批飛", "National University of Tainan", 5203, "South", ], + [27, "箏撣蝡憭批飛", "University of Taipei", 5247, "North", ], + [28, "蝡擃脣之摮", "National Taiwan Sport University", 4732, "North", ], + [29, "蝡臬憭批飛", "National United University", 4676, "North", ], + [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 4347, "South", ], + [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3229, "North", ], + [32, "蝡憭批飛", "National Quemoy University", 3319, ], + # [33, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3226, "North", ], + [33, "蝡箏銵憭批飛", "Tainan National University of the Arts", 1997, "South", ], +]) + +print(public_research_centric_university) + +header = ['Number', 'Chinese name', 'English name', 'Budget_received', 'Location', 'Note'] + +# Adding a header to National universities of R&D +public_research_centric_university.columns = header +print(public_research_centric_university) + +# Filter the universities in the north. +condition = public_research_centric_university['Location'] == "North" +north_public_research = public_research_centric_university[condition] +print(north_public_research) + +# Sum of the budget in the north. +total_north_public_research = north_public_research['Budget_received'].sum() +print(total_north_public_research) + +# Filter the universities in the south. +condition = public_research_centric_university['Location'] == "South" +south_public_research = public_research_centric_university[condition] +print(south_public_research) + +# Sum of the budget inn the south. +total_south_public_research = south_public_research['Budget_received'].sum() +print(total_south_public_research) + +fig, ax = plt.subplots(figsize=(6, 6)) + +# The histogram of the data +plt.bar(['Northern Taiwan', 'Southern Taiwan'], [total_north_public_research, total_south_public_research]) + +plt.xlabel('Location (divided by Zhuoshui River)\n\n' + 'Dataset: https://sprout.moe.edu.tw/SproutWeb/Project/DocDownload', + fontproperties="Arial", fontsize=9) + +plt.ylabel('Unit: 10 thousands of New Taiwan Dollar') +plt.title('Government budget support for public research universities (蝡憭批飛)\n' + 'in North vs South in 2023', fontproperties="MS Gothic") + +# Tweak spacing to prevent clipping of ylabel +plt.tight_layout() + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=500, yo=500, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', transform=ax.transAxes) + +plt.show() \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/year2023.csv b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/year2023.csv new file mode 100644 index 00000000..48654724 --- /dev/null +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/year2023.csv @@ -0,0 +1,508 @@ +高等教育深耕計畫核定經費 (一般大學),,,, +類別,學校代碼,學校名稱,核定經費, +,,,單位:元, +一般大學,1,國立政治大學,"332,581,716", +一般大學,2,國立清華大學,"1,227,485,103", +一般大學,3,國立臺灣大學,"2,466,494,187", +一般大學,4,國立臺灣師範大學,"324,963,949", +一般大學,5,國立成功大學,"1,421,845,095", +一般大學,6,國立中興大學,"450,197,237", +一般大學,7,國立陽明交通大學,"1,321,464,208", +一般大學,8,國立中央大學,"426,576,212", +一般大學,9,國立中山大學,"405,826,790", +一般大學,12,國立臺灣海洋大學,"136,547,127", +一般大學,13,國立中正大學,"138,023,217", +一般大學,14,國立高雄師範大學,"50,450,179", +一般大學,15,國立彰化師範大學,"77,873,704", +一般大學,17,國立臺北大學,"98,142,220", +一般大學,18,國立嘉義大學,"67,795,521", +一般大學,19,國立高雄大學,"52,383,303", +一般大學,20,國立東華大學,"77,756,120", +一般大學,21,國立暨南國際大學,"89,662,348", +一般大學,28,國立臺北藝術大學,"57,484,349", +一般大學,29,國立臺灣藝術大學,"60,668,797", +一般大學,30,國立臺東大學,"64,098,591", +一般大學,31,國立宜蘭大學,"60,866,935", +一般大學,32,國立聯合大學,"48,254,839", +一般大學,35,國立臺南藝術大學,"18,035,952", +一般大學,36,國立臺南大學,"52,336,642", +一般大學,37,國立臺北教育大學,"42,922,168", +一般大學,39,國立臺中教育大學,"61,422,484", +一般大學,44,國立體育大學,"43,469,196", +一般大學,48,國立金門大學,"30,595,162", +一般大學,49,國立臺灣體育運動大學,"33,282,255", +一般大學,52,國立屏東大學,"71,360,523", +一般大學,1001,東海大學,"118,910,367", +一般大學,1002,輔仁大學,"107,901,179", +一般大學,1003,東吳大學,"97,295,635", +一般大學,1004,中原大學,"155,026,796", +一般大學,1005,淡江大學,"111,196,814", +一般大學,1006,中國文化大學,"72,749,681", +一般大學,1007,逢甲大學,"148,700,886", +一般大學,1008,靜宜大學,"103,366,677", +一般大學,1009,長庚大學,"112,670,208", +一般大學,1010,元智大學,"107,201,017", +一般大學,1011,中華大學,"49,337,949", +一般大學,1012,大葉大學,"41,843,361", +一般大學,1013,華梵大學,"36,702,532", +一般大學,1014,義守大學,"94,198,796", +一般大學,1015,世新大學,"63,380,404", +一般大學,1016,銘傳大學,"77,610,491", +一般大學,1017,實踐大學,"82,591,395", +一般大學,1019,高雄醫學大學,"155,776,156", +一般大學,1020,南華大學,"59,765,478", +一般大學,1021,真理大學,"15,031,132", +一般大學,1022,大同大學,"49,711,476", +一般大學,1027,慈濟大學,"61,470,333", +一般大學,1028,臺北醫學大學,"276,161,839", +一般大學,1029,中山醫學大學,"59,791,865", +一般大學,1033,長榮大學,"51,477,733", +一般大學,1035,中國醫藥大學,"220,442,897", +一般大學,1039,玄奘大學,"30,102,776", +一般大學,1048,亞洲大學,"73,750,020", +一般大學,1049,開南大學,"13,936,583", +一般大學,1050,佛光大學,"45,680,178", +一般大學,1058,明道大學,"1,725,950", +一般大學,1067,台灣首府大學,"400,000", +一般大學,1079,康寧大學,"4,682,000", +一般大學,1125,中信金融管理學院,"20,290,218", +一般大學,1195,馬偕醫學院,"41,308,616", +一般大學,1196,法鼓文理學院,"2,216,065", +一般大學,3002,臺北市立大學,"55,253,550", +一般大學,1R03,臺北基督書院,"316,000", +一般大學,1R04,一貫道天皇學院,"95,000", +一般大學,"【備註】 + 1. 學校排序依教育部統計處學校代碼排序呈現。 + 2. 以上含深耕計畫第一部分(主冊計畫、主冊專章、附冊、附錄一、附錄二)及第二部分(全校型、特色領域研究中心)之經費。",,, +,,,, +高等教育深耕計畫核定經費 (技專校院),,,, +類別,學校代碼,學校名稱,核定經費, +,,,單位:元, +技專校院,22,國立臺灣科技大學,424512000, +技專校院,23,國立雲林科技大學,236482000, +技專校院,24,國立屏東科技大學,177178463, +技專校院,25,國立臺北科技大學,337399000, +技專校院,33,國立虎尾科技大學,242324000, +技專校院,42,國立澎湖科技大學,33509000, +技專校院,43,國立勤益科技大學,150680000, +技專校院,46,國立臺北護理健康大學,98546000, +技專校院,47,國立高雄餐旅大學,85218000, +技專校院,50,國立臺中科技大學,48859000, +技專校院,51,國立臺北商業大學,50628000, +技專校院,53,國立高雄科技大學,397181000, +技專校院,144,國立臺灣戲曲學院,31982000, +技專校院,221,國立臺南護理專科學校,26030000, +技專校院,222,國立臺東專科學校,32777000, +技專校院,1018,朝陽科技大學,99241000, +技專校院,1023,南臺科技大學,186114000, +技專校院,1024,崑山科技大學,184720000, +技專校院,1025,嘉南藥理大學,104146000, +技專校院,1026,樹德科技大學,93569000, +技專校院,1030,龍華科技大學,147951000, +技專校院,1031,輔英科技大學,43572618, +技專校院,1032,明新科技大學,64005000, +技專校院,1034,弘光科技大學,122812500, +技專校院,1036,健行科技大學,58575650, +技專校院,1037,正修科技大學,242848000, +技專校院,1038,萬能科技大學,25543500, +技專校院,1040,建國科技大學,27487000, +技專校院,1041,明志科技大學,109540000, +技專校院,1042,高苑科技大學,2313930, +技專校院,1043,大仁科技大學,45623000, +技專校院,1044,聖約翰科技大學,22008000, +技專校院,1045,嶺東科技大學,57443000, +技專校院,1046,中國科技大學,73590000, +技專校院,1047,中臺科技大學,56503000, +技專校院,1051,台南應用科技大學,43023000, +技專校院,1052,遠東科技大學,66229000, +技專校院,1053,元培醫事科技大學,39243000, +技專校院,1054,景文科技大學,58411000, +技專校院,1055,中華醫事科技大學,54675000, +技專校院,1056,東南科技大學,25553000, +技專校院,1057,德明財經科技大學,54490000, +技專校院,1060,南開科技大學,34499000, +技專校院,1061,中華科技大學,34005000, +技專校院,1062,僑光科技大學,37334000, +技專校院,1063,育達科技大學,19240000, +技專校院,1064,美和科技大學,41718000, +技專校院,1065,吳鳳科技大學,28633000, +技專校院,1066,環球科技大學,5240000, +技專校院,1068,中州科技大學,412500, +技專校院,1069,修平科技大學,49545000, +技專校院,1070,長庚科技大學,63631000, +技專校院,1071,臺北城市科技大學,32869000, +技專校院,1072,敏實科技大學,10780000, +技專校院,1073,醒吾科技大學,73818000, +技專校院,1075,文藻外語大學,64316000, +技專校院,1076,華夏科技大學,25605000, +技專校院,1077,慈濟科技大學,52205000, +技專校院,1078,致理科技大學,88388100, +技專校院,1080,宏國德霖科技大學,26560000, +技專校院,1081,東方設計大學,4509000, +技專校院,1082,崇右影藝科技大學,16770000, +技專校院,1083,台北海洋科技大學,34095000, +技專校院,1084,亞東科技大學,33970000, +技專校院,1148,大漢技術學院,10752550, +技專校院,1168,南亞技術學院,14316000, +技專校院,1183,黎明技術學院,28610000, +技專校院,1185,經國管理暨健康學院,21482000, +技專校院,1188,大同技術學院,2110000, +技專校院,1282,馬偕醫護管理專科學校,31064000, +技專校院,1283,仁德醫護管理專科學校,25441230, +技專校院,1284,樹人醫護管理專科學校,29115000, +技專校院,1285,慈惠醫護管理專科學校,19538000, +技專校院,1286,耕莘健康管理專科學校,36985000, +技專校院,1287,敏惠醫護管理專科學校,18038786, +技專校院,1289,育英醫護管理專科學校,11046000, +技專校院,1291,聖母醫護管理專科學校,12843000, +技專校院,1292,新生醫護管理專科學校,23361882, +技專校院,1293,崇仁醫護管理專科學校,18986000, +技專校院,"備註: +1.金額包含第一部分(主冊計畫、主冊專章、附冊、附錄一、附錄二)、第二部分。 +2.中州科技大學112年7月31日停辦。 +3.東方設計大學、高苑科技大學、環球科技大學、大同技術學院為專案輔導學校。",,, +,,,, +大學社會責任補助計畫(USR)-一般大學,,,, +類別,序號,學校名稱,計畫類型,計畫名稱 +一般大學,1,大同大學,大學特色類萌芽型,同興協力—應用公民設計科學於社區學習教學與場域實踐 +一般大學,2,大同大學,大學特色類深耕型,永續共榮在大同:優質教育與跨域實踐之差異群體服務基地加值計畫 +一般大學,3,中國文化大學,大學特色類萌芽型,北海岸社區韌性:在地永續知識與經濟創生 +一般大學,4,中國文化大學,大學特色類深耕型,共創光明頂:陽明山社區創生新願景 +一般大學,5,東吳大學,大學特色類萌芽型,北投心韌齡生活圈 +一般大學,6,東吳大學,大學特色類萌芽型,老士林新共生-建立跨世代社區支持網 +一般大學,7,東吳大學,大學特色類深耕型,文化永續•城市創生:士林學之建構 +一般大學,8,馬偕醫學院,大學特色類萌芽型,給三芝全面的愛:社區老人多層面健康促進計畫 +一般大學,9,馬偕醫學院,大學特色類萌芽型,脫穎而出成為茭佼者 +一般大學,10,國立政治大學,大學特色類萌芽型,以鄉村地區整體規劃落實里山經濟 +一般大學,11,國立政治大學,大學特色類萌芽型,雜貨店2.0老店新開: 順路經濟與社會資源整合平台計畫 +一般大學,12,國立陽明交通大學,大學特色類深耕型,部落之星:智慧偏鄉健康培力計畫 +一般大學,13,國立陽明交通大學,大學特色類深耕型,青銀攜手•科技協力•賦能社區•守護獨老行動計畫 +一般大學,14,國立臺北大學,大學特色類萌芽型,推動三鶯地區永續低碳經濟生活圈 +一般大學,15,國立臺北大學,大學特色類萌芽型,環抱海山深耕三峽:北大文化城的創生、活化與擴展 +一般大學,16,國立臺北大學,大學特色類深耕型,前瞻超高齡的大學3E行動計畫:Establishment、Engagement、and Empowerment +一般大學,17,國立臺北藝術大學,大學特色類萌芽型,漁村轉型、文化永續: 依海而生在地知識的轉譯與活用之共學共創 +一般大學,18,國立臺灣大學,大學特色類萌芽型,臺大?山林?學院 +一般大學,19,國立臺灣大學,大學特色類萌芽型,文化|健康:文化安全健康促進推動整合計畫 +一般大學,20,國立臺灣大學,大學特色類萌芽型,感測公民培力、環境舒適度健檢及在地社區氣候行動:一個科學社會溝通及循證治理過程的探索 +一般大學,21,國立臺灣大學,大學特色類深耕型,大學PLUS:臺灣鄉創俱樂部 +一般大學,22,國立臺灣大學,大學特色類深耕型,攜手?雲林-特色農業產區 深耕產業鏈結 +一般大學,23,國立臺灣師範大學,大學特色類萌芽型,全球在地取向的金門地方創生與青創培力計畫 +一般大學,24,國立臺灣師範大學,大學特色類萌芽型,臺灣心連新-運用前瞻科技提昇新住民及其子女華語文能力及雙語師資培育計畫 +一般大學,25,國立臺灣師範大學,大學特色類深耕型,深耕偏鄉教育:深化、廣化、國際化、永續化 +一般大學,26,國立臺灣師範大學,大學特色類深耕型,打造高齡者數位包容智慧長健學苑計畫 +一般大學,27,國立臺灣海洋大學,大學特色類萌芽型,雲林四口,里海漁鄉-低碳×創生×永續×關懷計畫 +一般大學,28,國立臺灣海洋大學,大學特色類深耕型,貢寮美境山海川區域發展深耕計畫 +一般大學,29,國立臺灣海洋大學,大學特色類深耕型,智慧樂活水產村 +一般大學,30,國立臺灣海洋大學,大學特色類深耕型,打造國際旅遊島-智慧共享經濟與永續實踐 +一般大學,31,國立臺灣海洋大學,永續發展類國際合作型,三漁興旺-國際藍色經濟示範區 +一般大學,32,國立臺灣藝術大學,大學特色類萌芽型,文化河流 • 文資串流 —淡水河水系流域文化資產保存計畫 +一般大學,33,淡江大學,大學特色類萌芽型,守滬樂齡宜然自得:建置以長者為關懷的「為愛AI陪伴」手機APP +一般大學,34,淡江大學,大學特色類萌芽型,為樂齡而行:跨代原力、青銀共創 +一般大學,35,淡江大學,大學特色類深耕型,農情食課:建構北海岸永續食農教育基地/第二期計畫主案:「農」情「食課」-無毒、有機印象淡水 +一般大學,36,淡江大學,大學特色類深耕型,淡北風情e線牽、海陸旅遊全體驗/第二期計畫主案:淡蘭海陸輕旅遊、智慧互動趴趴走 +一般大學,37,淡江大學,永續發展類特色永續型,淡水好生活:山海河賦創設計行動/第二期計畫主案:淡水好生活–學習型城鄉建構計畫 +一般大學,38,華梵大學,大學特色類萌芽型,乘龍風蘊耀大崙,古道帶動旅創新生命:?淡蘭古道為主軸的地方創生實踐 +一般大學,39,華梵大學,大學特色類萌芽型,石碇之音-百年石頭屋藝術造鎮參與規劃工作站、工藝駐村與行旅藝文體驗計畫 +一般大學,40,華梵大學,大學特色類萌芽型,無人機山區防災救災系統-石碇模式 +一般大學,41,實踐大學,大學特色類萌芽型,漸凍症病友科技生活設計 +一般大學,42,實踐大學,大學特色類萌芽型,內門文創生活之活化:文化為心、創意為魂、科技為魄 +一般大學,43,實踐大學,大學特色類萌芽型,點亮城市裡的偏鄉─光點三創實踐計畫 +一般大學,44,實踐大學,大學特色類萌芽型,北投學-在北投向北投學 +一般大學,45,實踐大學,大學特色類萌芽型,囊螢東高【與南島語族相遇】創課微旅:螢光發掘、囊袋維持陪伴計畫內山篇 +一般大學,46,臺北市立大學,大學特色類萌芽型,「你我共好」的善循環-社區永續的倡導、關懷與場域經營 +一般大學,47,臺北市立大學,大學特色類萌芽型,臺北城西文化地景的沉浸式再現:人文藝術結合城市行銷培力的永續實踐 +一般大學,48,臺北醫學大學,大學特色類萌芽型,以街區經濟為根基之中草藥文化復振與創新 +一般大學,49,臺北醫學大學,大學特色類萌芽型,智齡質感生活聚落示範計畫2.0:邁向淨零綠生活 +一般大學,50,臺北醫學大學,大學特色類萌芽型,永續綠能飲食救地球 +一般大學,51,臺北醫學大學,大學特色類深耕型,都會長照青銀創生永續:建構高齡健康失智友善101生態圈 +一般大學,52,輔仁大學,大學特色類萌芽型,復元力:惜食分享 共生新莊 +一般大學,53,輔仁大學,大學特色類萌芽型,輔仁好學·好(ㄏㄠˋ)學新莊計畫 +一般大學,54,銘傳大學,大學特色類萌芽型,龜旅價值共創-從文化走讀到土地連結 +一般大學,55,中原大學,大學特色類萌芽型,永續社區環保公益博物館串聯計劃 +一般大學,56,中原大學,大學特色類深耕型,團結經濟、文化夥伴-桃園大海社區文化創生計畫III-航空城計畫進行式的人文延續 +一般大學,57,中原大學,永續發展類國際合作型,流動與鏈結:桃園埤圳文化與國際多元鏈結 +一般大學,58,中華大學,大學特色類萌芽型,馥活茶花智慧創生計畫 +一般大學,59,中華大學,大學特色類萌芽型,驛動新埔-種希望樹、點幸福燈之綠色共生 +一般大學,60,元智大學,大學特色類萌芽型,綠色循環經濟-創新創業實踐場 +一般大學,61,元智大學,大學特色類萌芽型,艾妲資訊培力 +一般大學,62,元智大學,大學特色類深耕型,寰宇文化領航 +一般大學,63,玄奘大學,大學特色類萌芽型,泰雅爾·巴來─深度部落休閒產業推動計畫 +一般大學,64,玄奘大學,大學特色類萌芽型,新埔旱坑柿家創新永續計畫 +一般大學,65,佛光大學,大學特色類萌芽型,建構宜蘭茶產業永續發展的跨領域人才共培機制 +一般大學,66,長庚大學,大學特色類萌芽型,『職能、共融、永續』-身心障礙者工作培力實踐計畫 「第二期HUB計畫主案:職人創造,能力營造-共建身心障礙者的就業環境與社區共融計畫」 +一般大學,67,長庚大學,大學特色類萌芽型,早期療育及健康發展促進創新實踐計劃 +一般大學,68,長庚大學,大學特色類深耕型,人口老化社區健康照護體系建構-在地與偏鄉 +一般大學,69,國立中央大學,大學特色類萌芽型,身生不息─桃園身障包容科技與包容創業教育 +一般大學,70,國立中央大學,大學特色類深耕型,mbhoyaw「復興」─以永續為關鍵詞的跨域共作 +一般大學,71,國立中央大學,永續發展類國際合作型,海好友你─桃海三生開闊國際夥伴永續力 +一般大學,72,國立東華大學,大學特色類深耕型,智慧淨洄瀾合作永共融 +一般大學,73,國立東華大學,永續發展類特色永續型,比鄰共好:柔韌永續之共好生活實踐 +一般大學,74,國立清華大學,大學特色類萌芽型,TNUNAN歌劇音樂會:以文化回應式教學推動泰雅醫療人才培育計畫 +一般大學,75,國立清華大學,大學特色類萌芽型,永續發展教育的跨領域韌性整合與社會實踐: 以南寮沿海社區與自然谷為里山海實踐場域 +一般大學,76,國立清華大學,大學特色類萌芽型,〝S+M+ART〞跨學科與創客藝術在地智慧活氧計畫 +一般大學,77,國立清華大學,永續發展類特色永續型,REAL+:新竹區域產業與文化支持系統 +一般大學,78,國立聯合大學,大學特色類萌芽型,聯合IN苗栗加速食農教育→永續環境 +一般大學,79,國立聯合大學,大學特色類萌芽型,苑裡藺草編織工藝的互惠展銷體驗設計 +一般大學,80,國立聯合大學,大學特色類萌芽型,共下生活學習實驗室:打哪叭共創聚落計畫 +一般大學,81,慈濟大學,大學特色類萌芽型,社區健康領航員-跨族群健康upup計畫 +一般大學,82,慈濟大學,大學特色類深耕型,里山團結碳經濟-永續消費與生產的共學實踐 +一般大學,83,中山醫學大學,大學特色類萌芽型,跨域培力,共創樂活 +一般大學,84,中國醫藥大學,大學特色類萌芽型,中西醫整合優質照護,守護兒童與青少年健康計劃 +一般大學,85,中國醫藥大學,大學特色類萌芽型,中藥養生-西藥精準:食品藥物安全鏈結之社會實踐 +一般大學,86,亞洲大學,大學特色類萌芽型,學習不孤單:偏鄉AI雙語學伴培育計畫 +一般大學,87,亞洲大學,大學特色類萌芽型,食品安全與健康的守護者 +一般大學,88,亞洲大學,大學特色類深耕型,永續高齡失智友善包容社區:數位創新x護智處方x社會共融 +一般大學,89,東海大學,大學特色類萌芽型,一所大學守護一條河的四校聯盟行動 +一般大學,90,東海大學,大學特色類萌芽型,大肚山地方教育創生2.0 +一般大學,91,東海大學,永續發展類特色永續型,臺中市西屯區開放養生村的典範建構與擴散 +一般大學,92,國立中興大學,永續發展類國際合作型,浪愛無國界:流浪動物減量與福祉實踐 +一般大學,93,國立彰化師範大學,大學特色類萌芽型,彰化風光 風光彰化 +一般大學,94,國立彰化師範大學,大學特色類萌芽型,生態家園?城鄉永續:彰化生態藝術計畫 +一般大學,95,國立彰化師範大學,大學特色類萌芽型,美「蜊」芳苑、寶「蜆」大城:氣候變遷下彰化雙城之產業與環境永續計畫 +一般大學,96,國立彰化師範大學,大學特色類萌芽型,白沙×共好 深耕在地向前行 +一般大學,97,國立暨南國際大學,大學特色類萌芽型,暨大「相遇東南亞」的啟示:共耘RAMTAU香料共和園 +一般大學,98,國立暨南國際大學,大學特色類萌芽型,Walk Tall:戶外教育學習生態系統創新計畫 +一般大學,99,國立暨南國際大學,大學特色類萌芽型,水沙連未來教育行動聯盟 +一般大學,100,國立暨南國際大學,永續發展類國際合作型,水沙連產業永續發展計畫-產業鏈結x跨域人才x國際合作 +一般大學,101,國立暨南國際大學,永續發展類特色永續型,綠色水沙連永續價值與人才培育升級計畫:科技x循環x淨零 +一般大學,102,逢甲大學,大學特色類萌芽型,中寮行動-倡議偏鄉群落生境的社會影響力 +一般大學,103,逢甲大學,大學特色類萌芽型,臺中市文化城中城地方創生計畫:生活故事書院 +一般大學,104,逢甲大學,大學特色類萌芽型,安居樂業-打造永續韌性部落的教育示範場域 +一般大學,105,逢甲大學,永續發展類國際合作型,農村減碳-綠色諧能鏈結國際永續共好行動 +一般大學,106,靜宜大學,大學特色類萌芽型,淺山精靈的守護:生物多樣性的行動倡議與環境教育實踐 +一般大學,107,靜宜大學,大學特色類深耕型,建構具韌性的幸福銀髮生態圈 +一般大學,108,長榮大學,大學特色類萌芽型,相約檨仔腳-走向整全的社區經濟與照顧之路2.0 +一般大學,109,長榮大學,永續發展類國際合作型,綠色社區根與芽行動計畫-從在地到國際 +一般大學,110,南華大學,大學特色類萌芽型,推動碳中和農業 +一般大學,111,南華大學,永續發展類國際合作型,擴散慢城意涵-營造永續宜居城鄉生活 +一般大學,112,國立中正大學,大學特色類萌芽型,共創長者幸福人生:科際整合人權實踐方案 +一般大學,113,國立成功大學,大學特色類萌芽型,長短樹下的微風-環境療癒場域之建構 +一般大學,114,國立成功大學,大學特色類深耕型,惡地協作2.0:H.E.A.R.T.串起共學、共做、共感的淺山心生活 +一般大學,115,國立成功大學,永續發展類國際合作型,相伴2026:互為主體、互利共好、底蘊再創 +一般大學,116,國立成功大學,永續發展類特色永續型,台南400年:從倒風內海到東原山林溪北傳統特色產業的升級之路:復振與新生 +一般大學,117,國立嘉義大學,大學特色類萌芽型,加糖笑瞇瞇─懸絲偶天團與糖文化的永續計畫 +一般大學,118,國立嘉義大學,大學特色類萌芽型,跨域STEAM 雙語+E 共譜嘉鄉好樂章 +一般大學,119,國立臺南大學,大學特色類萌芽型,幸福集氣,讓愛延續 +一般大學,120,國立臺南大學,大學特色類萌芽型,為偏鄉而教—打造七股偏鄉教育補給站3.0 +一般大學,121,高雄醫學大學,大學特色類萌芽型,永續荖濃人才培育與健康發展計畫 +一般大學,122,高雄醫學大學,大學特色類萌芽型,青銀攜手健康促進_旗津區銀髮及長照產業優化加值發展計畫 +一般大學,123,高雄醫學大學,大學特色類深耕型,空污下的大學社會責任-環境教育與健康促進永續發展計畫 +一般大學,124,高雄醫學大學,永續發展類國際合作型,永續不只一夏-那瑪夏及國際原鄉永續發展計畫 +一般大學,125,國立中山大學,大學特色類萌芽型,作為NATIVE博物館的霧台-原民社會自然文化共構之永續學習計畫 +一般大學,126,國立中山大學,大學特色類深耕型,產學合創·跨域實踐:共構地方永續協作平台 +一般大學,127,國立中山大學,永續發展類國際合作型,邁向永續轉型:城市共事館的全球在地實踐 +一般大學,128,國立屏東大學,大學特色類萌芽型,屏東地方創生式:共學、共作與共生實踐計畫 +一般大學,129,國立屏東大學,大學特色類萌芽型,朱雀先驅:屏東偏鄉三師共學模式 +一般大學,130,國立屏東大學,大學特色類深耕型,讓生命不同凡「想」-身心障礙成人賦能(empowerment)支持 +一般大學,131,國立高雄大學,大學特色類萌芽型,韌性社區自主防災與永續城市培力計畫 +一般大學,132,國立高雄師範大學,大學特色類萌芽型,原民築夢創生機—瑪家鄉原民產業創新加值 +一般大學,133,國立高雄師範大學,大學特色類萌芽型,惡地社會學:高雄月世界地方創生實踐與永續社區聯動網培力計畫 +一般大學,134,國立高雄師範大學,大學特色類萌芽型,小民再造 市集再生 +一般大學,135,國立臺東大學,大學特色類萌芽型,從我到我們:大學與社區跨域共做共好社會實踐計畫 +一般大學,136,國立臺東大學,大學特色類萌芽型,都蘭之蘭調創生—友善土地的共作共好 +一般大學,137,國立臺東大學,大學特色類深耕型,臺東Y-2計畫:共創山海沙城好未來 +,,,, +大學社會責任補助計畫(USR)-技專校院,,,, +類別,序號,學校名稱,計畫類型,計畫名稱 +技專校院,1,中國科技大學,大學特色類萌芽型,共創深坑文化永續韌性社區與多元加值計畫 +技專校院,2,中國科技大學,大學特色類萌芽型,台北市黎安里社區微旅行 - 邀約鳥語、花香、人情為伴 +技專校院,3,中華科技大學,大學特色類萌芽型,環境認知調研與空間裝置實作之社會性實踐-以基隆為行動基地 +技專校院,4,中華科技大學,大學特色類萌芽型,”原“創教育–原民技藝文化推廣 +技專校院,5,台北海洋科技大學,大學特色類萌芽型,魅力士社-深耕活化生態社子島 +技專校院,6,台北海洋科技大學,大學特色類萌芽型,銀造在地健康關懷青銀樂活俱樂部-共創共學、友善高齡、健康福祉實踐推動計畫 +技專校院,7,宏國德霖科技大學,大學特色類萌芽型,青銀創生暨培力養成計畫-社創大頂埔:從零開始的夢想 +技專校院,8,亞東科技大學,大學特色類萌芽型,翻轉社區高齡復健患者及應用於醫療院所與遠距科技照護大行動 +技專校院,9,亞東科技大學,大學特色類萌芽型,新北師生資訊科技增能計畫 +技專校院,10,明志科技大學,大學特色類萌芽型,Co-op Design—走入三角湧社區文化生活實驗 +技專校院,11,明志科技大學,大學特色類萌芽型,新北產業永續發展2.0 +技專校院,12,明志科技大學,大學特色類深耕型,北臺首學帶狀文物館深耕計畫 +技專校院,13,東南科技大學,大學特色類萌芽型,淡蘭市場科技數位文旅典藏服務培力計畫 +技專校院,14,致理科技大學,大學特色類萌芽型,女王的呼召—萬金國際旅遊實驗共生協作平台 +技專校院,15,致理科技大學,大學特色類萌芽型,青銀微社群就醫陪伴社區共好計畫 +技專校院,16,耕莘健康管理專科學校,大學特色類萌芽型,「足好」-照顧者身心適能健康促進計畫 +技專校院,17,耕莘健康管理專科學校,大學特色類萌芽型,循環永續、共伴創生「第二期計畫主案:宜蘭三星鄉農棄物六級產業與農村創生計畫」 +技專校院,18,耕莘健康管理專科學校,大學特色類萌芽型,~為愛走動 莘口相連-讓愛傳出去 口腔照護服務交流計畫 +技專校院,19,馬偕醫護管理專科學校,大學特色類萌芽型,承載幸福,偏鄉傳愛 +技專校院,20,馬偕醫護管理專科學校,大學特色類萌芽型,馬偕護 創生榮:活絡在地好所在,共享樂齡新生活 +技專校院,21,國立臺北科技大學,大學特色類萌芽型,漁村真本事-萬里野柳海岸地景保育與漁村文化永續 +技專校院,22,國立臺北科技大學,大學特色類萌芽型,鶯歌陶瓷培力與科技驅動計畫 +技專校院,23,國立臺北科技大學,大學特色類萌芽型,木創文化深根攪動計畫(Ⅱ) +技專校院,24,國立臺北科技大學,永續發展類特色永續型,原住民部落安居構築與綠色樂業推動計畫 +技專校院,25,國立臺北護理健康大學,大學特色類萌芽型,後疫情時代高齡與幼兒身心健康全方位升級計畫—社區服務支持系統的社會實踐 +技專校院,26,國立臺北護理健康大學,大學特色類深耕型,鏈結資源永續健康-「北護護你健康、青銀共好深耕計畫」;第二期計畫主案:鏈結區域資源升級長照專業-「北護護你健康、青銀共好標竿計畫」 +技專校院,27,國立臺灣科技大學,大學特色類萌芽型,活力創齡-共創共學習 +技專校院,28,國立臺灣科技大學,大學特色類萌芽型,共好 Spark : 走在我的身邊,成為我的夥伴 +技專校院,29,國立臺灣科技大學,大學特色類深耕型,「城南無限-都市山城與無限大學的永續共築計畫」 +技專校院,30,國立臺灣科技大學,永續發展類國際合作型,行動工程師培育計畫 +技專校院,31,國立臺灣科技大學,永續發展類特色永續型,I-Villages: Mobility for Change 城鄉牽手移動力再建構計畫 +技專校院,32,景文科技大學,大學特色類萌芽型,永續餐飲SDGs教育及社會責任計畫 +技專校院,33,經國管理暨健康學院,大學特色類萌芽型,「幼」「健」「美」好吾鄉?從幼兒園到家庭、社區的健康促進與美力養成計劃 +技專校院,34,聖約翰科技大學,大學特色類萌芽型,北海岸跨領域共學共創共耕基地建構與創新生活文化圈整合創生深耕計畫 +技專校院,35,德明財經科技大學,大學特色類萌芽型,德明甘丹內科園區永續時尚實踐計畫 +技專校院,36,德明財經科技大學,大學特色類萌芽型,內湖金面山在地風華-永續實踐計畫 +技專校院,37,黎明技術學院,大學特色類萌芽型,共鳴-攜手臺北啟聰學校建構聽障共融環境計畫 +技專校院,38,黎明技術學院,大學特色類萌芽型,新北市新泰樹地區新住民及新二代時尚民生職能提升培育計畫 +技專校院,39,育達科技大學,大學特色類萌芽型,「肌」不可失、「活」力飲食-肌活樂齡打造苗栗幸福城市計畫 +技專校院,40,明新科技大學,大學特色類萌芽型,客話茶金三生味-韌性茶鄉創生計畫 +技專校院,41,明新科技大學,大學特色類萌芽型,新竹縣五峰鄉隘蘭軌跡人文、生態、空間、孵創基地計畫 +技專校院,42,長庚科技大學,大學特色類萌芽型,保骨防跌、樂活膳食、科技失智辨識–永續高齡友善社區計畫 +技專校院,43,長庚科技大學,大學特色類萌芽型,破繭而出的形象曙光 +技專校院,44,長庚科技大學,大學特色類萌芽型,多元新視界,攜手嘉移人 +技專校院,45,長庚科技大學,大學特色類萌芽型,在地紮根•社會共生-教養賦能計畫 +技專校院,46,健行科技大學,大學特色類萌芽型,陽光樂活、綠能永續扎根計畫 +技專校院,47,敏實科技大學,大學特色類萌芽型,青山綠水好茶庄:台三線茶產業智慧種植、環境永續與創新商業應用實踐計畫 +技專校院,48,慈濟科技大學,大學特色類萌芽型,有機淨零新農業-光復萬榮產銷班青銀共創計畫 +技專校院,49,慈濟科技大學,大學特色類萌芽型,社區協力建構偏鄉失智照顧培力及支持服務網 +技專校院,50,龍華科技大學,大學特色類萌芽型,桃園新屋石滬文化永續發展計劃 +技專校院,51,龍華科技大學,大學特色類萌芽型,自閉症特教生適應性科技與食農教育-龍潭肯納社福莊園 +技專校院,52,龍華科技大學,大學特色類萌芽型,?牽手龜山—保育、人文、科技的共榮與昇華? +技專校院,53,龍華科技大學,大學特色類萌芽型,樂生生樂—樂生公?教育園區地方特色之發展 +技專校院,54,中臺科技大學,大學特色類萌芽型,文資蘊生-永續文化資源與創新人才培育 +技專校院,55,弘光科技大學,大學特色類萌芽型,中部沿海邁向低碳、綠能與韌性生態社區共築計畫 +技專校院,56,南開科技大學,大學特色類深耕型,建置在地優質老化永續長照服務網—打造南投不老城鎮 +技專校院,57,修平科技大學,大學特色類萌芽型,再現田頭水?田中、社頭、二水區域整合計畫 +技專校院,58,修平科技大學,大學特色類萌芽型,文蛤智慧養殖與科學管理永續發展計畫 +技專校院,59,國立勤益科技大學,大學特色類萌芽型,想到鐵工就是台中—鐵工藝術再創新猷 +技專校院,60,國立勤益科技大學,大學特色類深耕型,中臺灣菇類產業創生與永續經營提升計畫 +技專校院,61,國立臺中科技大學,大學特色類萌芽型,智慧創新樂齡共融長照屋 +技專校院,62,國立臺中科技大學,大學特色類萌芽型,打造山城永續農業新亮點-休閒農業價值創新計畫 +技專校院,63,朝陽科技大學,大學特色類萌芽型,北溝復麗—文化、生態共融村 +技專校院,64,朝陽科技大學,大學特色類萌芽型,貓堳C農設計培力再生活化 +技專校院,65,朝陽科技大學,大學特色類萌芽型,果香山城-苗圃幸福心,友善人文暨城鄉共好計畫 +技專校院,66,朝陽科技大學,大學特色類深耕型,「雜糧紮根,豐味深釀」崙元廊道增韌擴散計畫 +技專校院,67,朝陽科技大學,永續發展類特色永續型,幼老共園輔導平台的建構與代間學習促進世代共融的實踐 +技專校院,68,僑光科技大學,大學特色類萌芽型,烏溪流「育」,創意長銷 +技專校院,69,嶺東科技大學,大學特色類萌芽型,產業再興—跨域社會設計翻轉新社農創品牌價值 +技專校院,70,嶺東科技大學,大學特色類萌芽型,智機減碳,從嶺做起:碳盤輔導人才培育 +技專校院,71,中華醫事科技大學,永續發展類特色永續型,臺南溪北淺山銀髮健康基地深耕永續計畫 +技專校院,72,台南應用科技大學,大學特色類萌芽型,消失的針線-刺繡技藝傳承與記憶延伸 +技專校院,73,台南應用科技大學,大學特色類深耕型,志在琉鄉-全島啟動˙價值再造 +技專校院,74,南臺科技大學,大學特色類萌芽型,藏碳蘊漁:古都土城仔綠電創能與智動養殖之跨界整合永續淨零發展計畫 +技專校院,75,南臺科技大學,大學特色類萌芽型,跨樂尬陣:南流西起共融藝起來 +技專校院,76,南臺科技大學,大學特色類萌芽型,點亮左鎮相放伴—創意生活加值計畫 +技專校院,77,南臺科技大學,大學特色類深耕型,文化底?的在地創生與傳播--府城vs月津 +技專校院,78,南臺科技大學,永續發展類特色永續型,青銀共創打造在地智慧自在不老力 +技專校院,79,國立虎尾科技大學,大學特色類萌芽型,「花」現虎尾,永續共融 +技專校院,80,國立虎尾科技大學,永續發展類特色永續型,農業共學地方創生世代共好—取徑綠心到綠港之價值共創 +技專校院,81,國立雲林科技大學,大學特色類萌芽型,從心靈遍路到智能觀光:雲林朝聖廊帶的地方設計 +技專校院,82,崑山科技大學,大學特色類萌芽型,以農漁業廢棄資材循環再利用為基石、建構淨零碳排永續家園 +技專校院,83,崑山科技大學,永續發展類國際合作型,永保安康Going Green-從在地邁向國際綠色關懷 +技專校院,84,嘉南藥理大學,大學特色類萌芽型,二仁溪流域 後現代城鎮漣漪翻轉策略: 逆勢啟動南方聚落軸線復興力量 「第二期計畫主案:裡仁唯美:台南府城南方村落綴思關懷 計畫、副案:二仁溪流域環境生態在地關懷」 +技專校院,85,嘉南藥理大學,大學特色類萌芽型,青銀共生~活酪大內樂居地 +技專校院,86,嘉南藥理大學,大學特色類萌芽型,西港風_敘事雲 +技專校院,87,嘉南藥理大學,大學特色類萌芽型,永續安南環境生態與綠色產業 +技專校院,88,嘉南藥理大學,大學特色類深耕型,嘉藥攜手阿蓮: 賦能偏鄉社區x築夢幸福家園 「第二期計畫主案:營造Alia(e)n宜居地 計畫、副案:濃濃香洋風,再造關廟情 計畫」 +技專校院,89,大仁科技大學,大學特色類萌芽型,三生三化三十?高樹-智慧低碳農業心vs.科技?幼關懷情 +技專校院,90,大仁科技大學,大學特色類萌芽型,小琉球幸福島 環境 x 健康 x 文化 +技專校院,91,大仁科技大學,大學特色類萌芽型,長照知?整合與實踐-20X80牽手微伴計畫 +技專校院,92,文藻外語大學,大學特色類萌芽型,「SDGs」看見需要·千手扶學 「第二期計畫主案:USR-hub 看見需要·千手扶學計畫」 +技專校院,93,文藻外語大學,大學特色類萌芽型,OUR TOWN 社區永續跨域共創平台計畫「第二期:USR-hub Our Town 社區體驗遊程國際平台及觀光文化導覽USR HUB 二案」 +技專校院,94,文藻外語大學,大學特色類萌芽型,藻到新力亮∼文藻USR新住民/新移工關懷培力計畫「第二期計畫主案:藻到新力亮∼文藻USR新住民/新移工關懷培力計畫」 +技專校院,95,正修科技大學,大學特色類萌芽型,齊聚新民·旗育津采 +技專校院,96,正修科技大學,大學特色類萌芽型,蕉傲?大旗山典範創新合作生產實踐計畫 +技專校院,97,正修科技大學,大學特色類萌芽型,新埤纖境- 創造新埤鄉的再生力量 +技專校院,98,正修科技大學,大學特色類萌芽型,食在安心 銀造健康 永續欣林園 +技專校院,99,美和科技大學,大學特色類萌芽型,漁網石斑 靚食啖鮮-屏東石斑魚產業鏈加值計畫 +技專校院,100,國立屏東科技大學,大學特色類萌芽型,沿山185熱帶有機廊道-農業數位轉型及生態系建構之USR實踐計畫 +技專校院,101,國立屏東科技大學,大學特色類萌芽型,點亮馬卡道健康農產業振興與優化 +技專校院,102,國立屏東科技大學,大學特色類萌芽型,國境南灣飛夢園 +技專校院,103,國立屏東科技大學,大學特色類萌芽型,老幼共榮、幸福陪伴-營造屏東老幼永續幸福家園 +技專校院,104,國立屏東科技大學,大學特色類深耕型,里山根經濟-林下經濟、生態旅遊的軸帶深耕與農林地碳匯人才培育 +技專校院,105,國立高雄科技大學,大學特色類萌芽型,竹夢樂學+遊活園田 +技專校院,106,國立高雄科技大學,大學特色類深耕型,無碳理想 淨零橋楠 +技專校院,107,國立高雄科技大學,大學特色類深耕型,海岸創生 社會創新-高雄漁村實踐計畫 +技專校院,108,國立高雄科技大學,永續發展類國際合作型,鄰家好漁形塑計畫 +技專校院,109,國立高雄科技大學,永續發展類特色永續型,U can do it! 高雄山都心永續藍圖 (第二期計畫主案:安居桃花源.港都山線韌性城鄉營建計畫) +技專校院,110,國立澎湖科技大學,大學特色類萌芽型,與海為生-澎湖混獲資源化與海洋食魚教育 +技專校院,111,輔英科技大學,大學特色類萌芽型,琉連忘返 愛待琉鄉-東琉連線在地安養精準健康促進人力養成計劃 +技專校院,112,輔英科技大學,大學特色類萌芽型,南高雄產業園區永續健康環境營造與環境教育拓展計畫 +技專校院,113,樹德科技大學,大學特色類萌芽型,青銀共創 活躍老化-社區照顧人才的培育與實作 +技專校院,114,樹德科技大學,永續發展類特色永續型,橫山USR 333-1 綠色永續 x 整體實踐 +,,,, +深耕計畫第二部分 全球鏈結核定學校,,,, +一、Global Taiwan 全校型學校,,,, +學校代碼,學校名稱,,, +2,國立清華大學,,, +3,國立臺灣大學,,, +5,國立成功大學,,, +7,國立陽明交通大學,,, +二、Global Taiwan 研究中心,,,, +學校類別,學校名稱,領域,計畫名稱, +一般大學,中國醫藥大學,醫學,新藥開發研究中心, +一般大學,中國醫藥大學,醫學,中醫藥研究中心, +一般大學,中國醫藥大學,生命科學,癌症生物精準醫學研究中心, +一般大學,長庚大學,生命科學,新興病毒感染研究中心, +一般大學,高雄醫學大學,生命科學,精準環境醫學研究中心, +一般大學,國立中山大學,工學一般,6G 通訊與感測研究中心, +一般大學,國立中山大學,醫學,代謝異常脂肪肝卓越研究中心, +一般大學,國立中山大學,理學,氣膠科學研究中心, +一般大學,國立中山大學,理學,晶體研究中心, +一般大學,國立中山大學,社會科學,策略與人力資本研究中心, +一般大學,國立中山大學,社會科學,永續智慧電子商務研究中心, +一般大學,國立中央大學,理學,太空科學與科技研究中心, +一般大學,國立中央大學,理學,地震災害鏈風險評估及管理研究中心, +一般大學,國立中央大學,理學,高能與強場物理研究中心, +一般大學,國立中正大學,工學一般,前瞻製造系統頂尖研究中心, +一般大學,國立中興大學,農學,永續農業創新發展中心, +一般大學,國立中興大學,農學,前瞻植物與食?尖端生技研究中心, +一般大學,國立中興大學,農學,鳥禽遺傳資源暨動物生技研究中心, +一般大學,國立中興大學,理學,前瞻永續負碳資源創意研究中心, +一般大學,國立成功大學,工學一般,跨維綠能材料研究中心, +一般大學,國立成功大學,工學一般,前瞻醫療器材科技中心, +一般大學,國立成功大學,醫學,奈米醫學研究中心, +一般大學,國立成功大學,農學,前瞻蝦類養殖國際研發中心, +一般大學,國立成功大學,農學,蘭花研發中心, +一般大學,國立成功大學,理學,前沿量子科技研究中心, +一般大學,國立政治大學,社會科學,企業永續管理研究中心, +一般大學,國立政治大學,人文藝術,華人文化元宇宙研究中心, +一般大學,國立清華大學,工學一般,高熵材?研發中心, +一般大學,國立清華大學,工學一般,智慧感知?網研究中心, +一般大學,國立清華大學,醫學,腦科學研究中心, +一般大學,國立清華大學,理學,前瞻?子科技研究中心, +一般大學,國立清華大學,社會科學,韌性研究中心, +一般大學,國立清華大學,人文藝術,水下考古暨水下文化資產研究中心, +一般大學,國立清華大學,人文藝術,臺灣語言多樣性永續發展中心, +一般大學,國立陽明交通大學,工學一般,前瞻半導體技術研究中心, +一般大學,國立陽明交通大學,醫學,腫瘤與免疫學研究中心, +一般大學,國立陽明交通大學,醫學,全方位健康長壽跨領域研究中心, +一般大學,國立陽明交通大學,醫學,腦科學研究中心, +一般大學,國立陽明交通大學,生命科學,智慧型藥物與智能生物裝置研究中心, +一般大學,國立陽明交通大學,理學,新世代功能性物質研究中心, +一般大學,國立陽明交通大學,人文藝術,文化研究國際中心, +一般大學,國立臺灣大學,工學一般,前瞻?色材?高值化研究中心, +一般大學,國立臺灣大學,工學一般,尖端生醫計算及影像研究中心, +一般大學,國立臺灣大學,工學一般,數據智慧與系統研究中心, +一般大學,國立臺灣大學,生命科學,精準醫學研究中心, +一般大學,國立臺灣大學,農學,農業零碳技術與管理創新研究中心, +一般大學,國立臺灣大學,理學,新穎材料原子級科學研究中心, +一般大學,國立臺灣大學,理學,永續地球尖端科學研究中心, +一般大學,國立臺灣大學,社會科學,計量理論與應用研究中心, +一般大學,國立臺灣大學,社會科學,群體健康與福祉研究中心, +一般大學,國立臺灣大學,社會科學,臺灣韌性社會研究中心, +一般大學,國立臺灣師範大學,社會科學,學習科學跨國頂尖研究中心, +一般大學,國立臺灣師範大學,人文藝術,華語文與科技研究中心, +一般大學,國立臺灣師範大學,人文藝術,國際台灣學研究中心, +一般大學,國立臺灣師範大學,人文藝術,社會情緒教育與發展研究中心, +一般大學,國立臺灣海洋大學,理學,海洋中心:全球變遷下海洋與水產的調適與因應, +一般大學,臺北醫學大學,醫學,癌症轉譯研究中心, +一般大學,臺北醫學大學,醫學,腦意識創新轉譯研究中心, +技專校院,正修科技大學,生命科學,環境毒物與新興汙染物研究中心, +技專校院,正修科技大學,人文藝術,文物修護研究中心, +技專校院,南臺科技大學,工學技專,高階智慧生醫聯合研究中心, +技專校院,國立虎尾科技大學,工學技專,智能機械與智慧製造研究中心, +技專校院,國立屏東科技大學,農學,動物製劑研究中心, +技專校院,國立屏東科技大學,農學,永續智慧養豬技術研究中心, +技專校院,國立高雄科技大學,工學技專,"前瞻金屬成形技術研究發展中心 +", +技專校院,國立雲林科技大學,工學技專,智慧辨識產業服務研究中心, +技專校院,國立雲林科技大學,人文藝術,智能地域設計服務研究中心, +技專校院,國立臺北科技大學,工學技專,新世代住商與工業節能研究中心, +技專校院,國立臺北科技大學,工學技專,高值生醫材料研究與商品化中心, +技專校院,國立臺灣科技大學,工學技專,永續電化學能源發展中心, +技專校院,國立臺灣科技大學,工學技專,智慧製造創新中心, +技專校院,國立臺灣科技大學,工學技專,臺灣建築科技中心, +技專校院,國立臺灣科技大學,工學技專,異質整合矽光電晶片研發中心, +技專校院,國立臺灣科技大學,工學技專,"臺灣高速3D?印研究中心 +", +技專校院,國立臺灣科技大學,社會科學,技職賦能研究中心, +技專校院,崑山科技大學,工學技專,綠能科技研究中心, From 5010e8ceda0e53a04e4946bae0d9800f39ec7012 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 13:30:16 +0800 Subject: [PATCH 1350/2002] Committed on 2023/07/04 --- .../2023_watermark.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index 30ca07dc..eef73fd0 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -8,8 +8,8 @@ # Convert wiki-table in the article 擃蝑脫楛閮俎4] to csv.[2][3] public_research_centric_university = pd.DataFrame(data=[ - [1, "蝡箇憭批飛", "National Taiwan University", 232587, "North", ], - [2, "蝡憭批飛", "National Cheng Kung University", 141178, "South", ], + [1, "蝡箇憭批飛", "National Taiwan University", 2466494187, "North", ], + [2, "蝡憭批飛", "National Cheng Kung University", 1421845095, "South", ], [3, "蝡皜臬之摮", "National Tsing Hua University", 120394, "North", "Derived from Beijing, China's Tsing Hua University"], [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 138078, "North", "Derived from Shanghai, China's ChiaoTung University"], [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43745, "North", ], From 042ce9dc8c70645642f41ae69694edb59d1b49c4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 13:50:05 +0800 Subject: [PATCH 1351/2002] Committed on 2023/07/04 --- .../2023_watermark.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index eef73fd0..d067c61c 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -10,8 +10,8 @@ public_research_centric_university = pd.DataFrame(data=[ [1, "蝡箇憭批飛", "National Taiwan University", 2466494187, "North", ], [2, "蝡憭批飛", "National Cheng Kung University", 1421845095, "South", ], - [3, "蝡皜臬之摮", "National Tsing Hua University", 120394, "North", "Derived from Beijing, China's Tsing Hua University"], - [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 138078, "North", "Derived from Shanghai, China's ChiaoTung University"], + [3, "蝡皜臬之摮", "National Tsing Hua University", 1227485103, "North", "Derived from Beijing, China's Tsing Hua University"], + [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 1321464208, "North", "Derived from Shanghai, China's ChiaoTung University"], [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43745, "North", ], [6, "蝡銝剖亢憭批飛", "National Central University", 42228, "North", ], [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], From f46b7374bea766b56aed4f01c9190817c0a1eb84 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 13:55:12 +0800 Subject: [PATCH 1352/2002] Committed on 2023/07/04 --- .../Yearly Higher Education Budget Allotment/2023_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index d067c61c..55a49db0 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -12,7 +12,7 @@ [2, "蝡憭批飛", "National Cheng Kung University", 1421845095, "South", ], [3, "蝡皜臬之摮", "National Tsing Hua University", 1227485103, "North", "Derived from Beijing, China's Tsing Hua University"], [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 1321464208, "North", "Derived from Shanghai, China's ChiaoTung University"], - [5, "蝡銝剛憭批飛", "National Chung Hsing University", 43745, "North", ], + [5, "蝡銝剛憭批飛", "National Chung Hsing University", 450197237, "North", ], [6, "蝡銝剖亢憭批飛", "National Central University", 42228, "North", ], [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], [8, "蝡踵祥憭批飛", "National Chengchi University", 31579, "North", "Literally, 'National Politics University'"], From 73a63ca40a569289349ac3587cdcfdea1ecda1c9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 13:57:33 +0800 Subject: [PATCH 1353/2002] Committed on 2023/07/04 --- .../2023_watermark.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index 55a49db0..a73db04c 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -1,6 +1,7 @@ import pandas as pd import matplotlib.image as image import matplotlib.pyplot as plt + # Using the magic encoding # -*- coding: utf-8 -*- @@ -10,15 +11,18 @@ public_research_centric_university = pd.DataFrame(data=[ [1, "蝡箇憭批飛", "National Taiwan University", 2466494187, "North", ], [2, "蝡憭批飛", "National Cheng Kung University", 1421845095, "South", ], - [3, "蝡皜臬之摮", "National Tsing Hua University", 1227485103, "North", "Derived from Beijing, China's Tsing Hua University"], - [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 1321464208, "North", "Derived from Shanghai, China's ChiaoTung University"], + [3, "蝡皜臬之摮", "National Tsing Hua University", 1227485103, "North", + "Derived from Beijing, China's Tsing Hua University"], + [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 1321464208, "North", + "Derived from Shanghai, China's ChiaoTung University"], [5, "蝡銝剛憭批飛", "National Chung Hsing University", 450197237, "North", ], [6, "蝡銝剖亢憭批飛", "National Central University", 42228, "North", ], [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], [8, "蝡踵祥憭批飛", "National Chengchi University", 31579, "North", "Literally, 'National Politics University'"], [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 32068, "South", ], [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 14233, "North", ], - [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 15361, "South", "Literally, National Chiang Chung-cheng University"], + [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 15361, "South", + "Literally, National Chiang Chung-cheng University"], [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 14233, "North", ], [13, "蝡箏憭批飛", "National Taipei University", 8771, "North", ], [14, "蝡典憭批飛", "National Chi Nan University", 8030, "North", ], @@ -94,4 +98,4 @@ plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation='30', transform=ax.transAxes) -plt.show() \ No newline at end of file +plt.show() From 43936d1a57546ad8cadcd3df194840ad000e95dc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 13:59:09 +0800 Subject: [PATCH 1354/2002] Committed on 2023/07/04 --- .../Yearly Higher Education Budget Allotment/2023_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index a73db04c..4047f2fb 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -16,7 +16,7 @@ [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 1321464208, "North", "Derived from Shanghai, China's ChiaoTung University"], [5, "蝡銝剛憭批飛", "National Chung Hsing University", 450197237, "North", ], - [6, "蝡銝剖亢憭批飛", "National Central University", 42228, "North", ], + [6, "蝡銝剖亢憭批飛", "National Central University", 426576212, "North", ], [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], [8, "蝡踵祥憭批飛", "National Chengchi University", 31579, "North", "Literally, 'National Politics University'"], [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 32068, "South", ], From 1117576e339ad9c013438f5324cafef75b55c0fc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 15:17:38 +0800 Subject: [PATCH 1355/2002] Committed on 2023/07/04 --- .../2023_watermark.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index 4047f2fb..a80822c4 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -18,12 +18,12 @@ [5, "蝡銝剛憭批飛", "National Chung Hsing University", 450197237, "North", ], [6, "蝡銝剖亢憭批飛", "National Central University", 426576212, "North", ], [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], - [8, "蝡踵祥憭批飛", "National Chengchi University", 31579, "North", "Literally, 'National Politics University'"], - [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 32068, "South", ], - [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 14233, "North", ], - [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 15361, "South", + [8, "蝡踵祥憭批飛", "National Chengchi University", 332581716, "North", "Literally, 'National Politics University'"], + [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 405826790, "South", ], + [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 324963949, "North", ], + [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 138023217, "South", "Literally, National Chiang Chung-cheng University"], - [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 14233, "North", ], + [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 136547127, "North", ], [13, "蝡箏憭批飛", "National Taipei University", 8771, "North", ], [14, "蝡典憭批飛", "National Chi Nan University", 8030, "North", ], [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 7580, "North", ], From 0c3dbd04bae3417688a8099a1fd0656d5abe843a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 15:18:15 +0800 Subject: [PATCH 1356/2002] Committed on 2023/07/04 --- .../Yearly Higher Education Budget Allotment/2023_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index a80822c4..41b60da2 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -24,7 +24,7 @@ [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 138023217, "South", "Literally, National Chiang Chung-cheng University"], [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 136547127, "North", ], - [13, "蝡箏憭批飛", "National Taipei University", 8771, "North", ], + [13, "蝡箏憭批飛", "National Taipei University", 98142220, "North", ], [14, "蝡典憭批飛", "National Chi Nan University", 8030, "North", ], [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 7580, "North", ], [16, "蝡梯臬之摮", "National Dong Hwa University", 6965, "Hualien County", ], From 3edbedcbec0b2015e7a4380a68a4ecc283197250 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 15:20:00 +0800 Subject: [PATCH 1357/2002] Committed on 2023/07/04 --- .../Yearly Higher Education Budget Allotment/2023_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index 41b60da2..f244f100 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -34,7 +34,7 @@ [20, "蝡箸勗之摮", "National Taitung University", 6178, "Taitung County", ], [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5974, "North", ], [22, "蝡箏脣之摮", "National Taipei University of Education", 5234, "North", ], - [23, "蝡擃憭批飛", "National University of Kaohsiung", 5502, "South", ], + [23, "蝡擃憭批飛", "National University of Kaohsiung", 52383303, "South", ], [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 5478, "North", ], [25, "蝡箔葉脣之摮", "National Taichung University of Education", 5549, "North", ], [26, "蝡箏憭批飛", "National University of Tainan", 5203, "South", ], From acefe88601b98fa221ff86042e3361b7f4a46eef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 15:24:52 +0800 Subject: [PATCH 1358/2002] Committed on 2023/07/04 --- .../2023_watermark.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index f244f100..0a2bb918 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -25,13 +25,13 @@ "Literally, National Chiang Chung-cheng University"], [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 136547127, "North", ], [13, "蝡箏憭批飛", "National Taipei University", 98142220, "North", ], - [14, "蝡典憭批飛", "National Chi Nan University", 8030, "North", ], - [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 7580, "North", ], - [16, "蝡梯臬之摮", "National Dong Hwa University", 6965, "Hualien County", ], - [17, "蝡蝢拙之摮", "National Chiayi University", 5927, "South", ], - [18, "蝡摰剖之摮", "National Ilan University", 6799, "North", ], + [14, "蝡典憭批飛", "National Chi Nan University", 89662348, "North", ], + [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 77873704, "North", ], + [16, "蝡梯臬之摮", "National Dong Hwa University", 77756120, "Hualien County", ], + [17, "蝡蝢拙之摮", "National Chiayi University", 67795521, "South", ], + [18, "蝡摰剖之摮", "National Ilan University", 60866935, "North", ], [19, "蝡撅勗之摮", "National Pingtung University", 6619, "South", ], - [20, "蝡箸勗之摮", "National Taitung University", 6178, "Taitung County", ], + [20, "蝡箸勗之摮", "National Taitung University", 64098591, "Taitung County", ], [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5974, "North", ], [22, "蝡箏脣之摮", "National Taipei University of Education", 5234, "North", ], [23, "蝡擃憭批飛", "National University of Kaohsiung", 52383303, "South", ], @@ -41,7 +41,7 @@ [27, "箏撣蝡憭批飛", "University of Taipei", 5247, "North", ], [28, "蝡擃脣之摮", "National Taiwan Sport University", 4732, "North", ], [29, "蝡臬憭批飛", "National United University", 4676, "North", ], - [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 4347, "South", ], + [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 50450179, "South", ], [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3229, "North", ], [32, "蝡憭批飛", "National Quemoy University", 3319, ], # [33, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3226, "North", ], From aea253d09760c176489aca2bdf752e99382f22f1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 15:28:45 +0800 Subject: [PATCH 1359/2002] Committed on 2023/07/04 --- .../2023_watermark.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index 0a2bb918..2171f631 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -30,17 +30,17 @@ [16, "蝡梯臬之摮", "National Dong Hwa University", 77756120, "Hualien County", ], [17, "蝡蝢拙之摮", "National Chiayi University", 67795521, "South", ], [18, "蝡摰剖之摮", "National Ilan University", 60866935, "North", ], - [19, "蝡撅勗之摮", "National Pingtung University", 6619, "South", ], + [19, "蝡撅勗之摮", "National Pingtung University", 71360523, "South", ], [20, "蝡箸勗之摮", "National Taitung University", 64098591, "Taitung County", ], [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5974, "North", ], [22, "蝡箏脣之摮", "National Taipei University of Education", 5234, "North", ], [23, "蝡擃憭批飛", "National University of Kaohsiung", 52383303, "South", ], [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 5478, "North", ], [25, "蝡箔葉脣之摮", "National Taichung University of Education", 5549, "North", ], - [26, "蝡箏憭批飛", "National University of Tainan", 5203, "South", ], + [26, "蝡箏憭批飛", "National University of Tainan", 52336642, "South", ], [27, "箏撣蝡憭批飛", "University of Taipei", 5247, "North", ], [28, "蝡擃脣之摮", "National Taiwan Sport University", 4732, "North", ], - [29, "蝡臬憭批飛", "National United University", 4676, "North", ], + [29, "蝡臬憭批飛", "National United University", 48254839, "North", ], [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 50450179, "South", ], [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3229, "North", ], [32, "蝡憭批飛", "National Quemoy University", 3319, ], From 6c99dd0e1dfa7008366b9e6d0fd57e988bbd4af9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 15:31:17 +0800 Subject: [PATCH 1360/2002] Committed on 2023/07/04 --- .../2023_watermark.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index 2171f631..b1957130 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -33,10 +33,10 @@ [19, "蝡撅勗之摮", "National Pingtung University", 71360523, "South", ], [20, "蝡箸勗之摮", "National Taitung University", 64098591, "Taitung County", ], [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5974, "North", ], - [22, "蝡箏脣之摮", "National Taipei University of Education", 5234, "North", ], + [22, "蝡箏脣之摮", "National Taipei University of Education", 42922168, "North", ], [23, "蝡擃憭批飛", "National University of Kaohsiung", 52383303, "South", ], [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 5478, "North", ], - [25, "蝡箔葉脣之摮", "National Taichung University of Education", 5549, "North", ], + [25, "蝡箔葉脣之摮", "National Taichung University of Education", 61422484, "North", ], [26, "蝡箏憭批飛", "National University of Tainan", 52336642, "South", ], [27, "箏撣蝡憭批飛", "University of Taipei", 5247, "North", ], [28, "蝡擃脣之摮", "National Taiwan Sport University", 4732, "North", ], @@ -45,7 +45,7 @@ [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3229, "North", ], [32, "蝡憭批飛", "National Quemoy University", 3319, ], # [33, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3226, "North", ], - [33, "蝡箏銵憭批飛", "Tainan National University of the Arts", 1997, "South", ], + [33, "蝡箏銵憭批飛", "Tainan National University of the Arts", 18035952, "South", ], ]) print(public_research_centric_university) From 803ac417e167d90e5ecd495ad5ad7b3445f42c85 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 4 Jul 2023 15:39:24 +0800 Subject: [PATCH 1361/2002] Committed on 2023/07/04 --- .../2023_watermark.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index b1957130..ebf73ef8 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -32,10 +32,10 @@ [18, "蝡摰剖之摮", "National Ilan University", 60866935, "North", ], [19, "蝡撅勗之摮", "National Pingtung University", 71360523, "South", ], [20, "蝡箸勗之摮", "National Taitung University", 64098591, "Taitung County", ], - [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 5974, "North", ], + [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 60668797, "North", ], [22, "蝡箏脣之摮", "National Taipei University of Education", 42922168, "North", ], [23, "蝡擃憭批飛", "National University of Kaohsiung", 52383303, "South", ], - [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 5478, "North", ], + [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 57484349, "North", ], [25, "蝡箔葉脣之摮", "National Taichung University of Education", 61422484, "North", ], [26, "蝡箏憭批飛", "National University of Tainan", 52336642, "South", ], [27, "箏撣蝡憭批飛", "University of Taipei", 5247, "North", ], From 1153a0fe14e4ac029638da9bba03a506fc6b7862 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 5 Jul 2023 16:26:33 +0800 Subject: [PATCH 1362/2002] Committed on 2023/07/05 --- .../2023_watermark.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py index ebf73ef8..ee62bcb6 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark.py @@ -38,11 +38,11 @@ [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 57484349, "North", ], [25, "蝡箔葉脣之摮", "National Taichung University of Education", 61422484, "North", ], [26, "蝡箏憭批飛", "National University of Tainan", 52336642, "South", ], - [27, "箏撣蝡憭批飛", "University of Taipei", 5247, "North", ], - [28, "蝡擃脣之摮", "National Taiwan Sport University", 4732, "North", ], + [27, "箏撣蝡憭批飛", "University of Taipei", 55253550, "North", ], + [28, "蝡擃脣之摮", "National Taiwan Sport University", 43469196, "North", ], [29, "蝡臬憭批飛", "National United University", 48254839, "North", ], [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 50450179, "South", ], - [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3229, "North", ], + [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 33282255, "North", ], [32, "蝡憭批飛", "National Quemoy University", 3319, ], # [33, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3226, "North", ], [33, "蝡箏銵憭批飛", "Tainan National University of the Arts", 18035952, "South", ], From 6d1fe8dfa37e92ce9baef3c793c59379815b43db Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 6 Jul 2023 02:59:45 +0800 Subject: [PATCH 1363/2002] Committed on 2023/07/06 --- .../2023/June_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py new file mode 100644 index 00000000..1a6b2939 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2272+121546+69579+4789, 46355+33109+6432, 63498+3754+10801, 4714+7123+28015, 39181+4925] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230624081015/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From aab9ef899c12cf33421299cd23080c5b2f650e9e Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 6 Jul 2023 03:01:40 +0800 Subject: [PATCH 1364/2002] Committed on 2023/07/06 --- .../2023/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py index 1a6b2939..42a053cf 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2272+121546+69579+4789, 46355+33109+6432, 63498+3754+10801, 4714+7123+28015, 39181+4925] +position_vacancies = [2229+121546+69579+4789, 46355+33109+6432, 63498+3754+10801, 4714+7123+28015, 39181+4925] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From ca2e54f6add551ac62c0dbf3cdae256bbf0dc3b5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 6 Jul 2023 03:02:32 +0800 Subject: [PATCH 1365/2002] Committed on 2023/07/06 --- .../2023/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py index 42a053cf..5df251f6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2229+121546+69579+4789, 46355+33109+6432, 63498+3754+10801, 4714+7123+28015, 39181+4925] +position_vacancies = [2229+121265+69465+4756, 46355+33109+6432, 63498+3754+10801, 4714+7123+28015, 39181+4925] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From d4eb809e287d6922c20fae5be83a3351ca3b1b7d Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 6 Jul 2023 03:03:09 +0800 Subject: [PATCH 1366/2002] Committed on 2023/07/06 --- .../2023/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py index 5df251f6..27e8bdcc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2229+121265+69465+4756, 46355+33109+6432, 63498+3754+10801, 4714+7123+28015, 39181+4925] +position_vacancies = [2229+121265+69465+4756, 46302+32673+6346, 63498+3754+10801, 4714+7123+28015, 39181+4925] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From b420376aab45f9c0c1436afea928cb58b0b36b50 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 6 Jul 2023 03:03:47 +0800 Subject: [PATCH 1367/2002] Committed on 2023/07/06 --- .../2023/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py index 27e8bdcc..8ea55c02 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2229+121265+69465+4756, 46302+32673+6346, 63498+3754+10801, 4714+7123+28015, 39181+4925] +position_vacancies = [2229+121265+69465+4756, 46302+32673+6346, 62546+3741+10493, 4714+7123+28015, 39181+4925] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 39c32fa6dfadba023ae3bdf1f4c0210b18f2f29d Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 6 Jul 2023 03:04:52 +0800 Subject: [PATCH 1368/2002] Committed on 2023/07/06 --- .../2023/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py index 8ea55c02..12d6aa59 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2229+121265+69465+4756, 46302+32673+6346, 62546+3741+10493, 4714+7123+28015, 39181+4925] +position_vacancies = [2229+121265+69465+4756, 46302+32673+6346, 62546+3741+10493, 4634+7086+27386, 38660+4915] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 5d4831de91722623f5413cf661da8c3ad6040d6b Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Thu, 6 Jul 2023 03:05:10 +0800 Subject: [PATCH 1369/2002] Committed on 2023/07/06 --- .../2023/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py index 12d6aa59..85a55d2b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2023/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2023/06 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://web.archive.org/web/20230624081015/https://www.104.com.tw/jobs/main/category/?jobsource=category") From c0c78b20e6579a2ed84960c1ec4a9572fba3fdf2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Jul 2023 01:09:52 +0800 Subject: [PATCH 1370/2002] Committed on 2023/07/16 --- .../2023/June_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py new file mode 100644 index 00000000..3dbb8ccb --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2229+121265+694655+4756, 46355+33109+6432, 63498+3754+10801, 4714+7123+28015, 39181+4925] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230624081015/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From bf442dc3bddf8b32563dd43af2a30cc3974b4c62 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Jul 2023 01:14:23 +0800 Subject: [PATCH 1371/2002] Committed on 2023/07/16 --- .../2023/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py index 3dbb8ccb..595e8eb7 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2229+121265+694655+4756, 46355+33109+6432, 63498+3754+10801, 4714+7123+28015, 39181+4925] +position_vacancies = [2229+121265+694655+4756, 46302+32673+6346, 62546+3741+10493, 4634+7086+27386, 38660+4915] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From fce93e8ad973d7e0867c64e399672068ad833043 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Jul 2023 01:14:46 +0800 Subject: [PATCH 1372/2002] Committed on 2023/07/16 --- .../2023/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py index 595e8eb7..4a63307b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2023/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2023/06 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://web.archive.org/web/20230624081015/https://www.104.com.tw/jobs/main/category/?jobsource=category") From b3011511ebf670fd54de81aaf3ec866a6cf1141a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Jul 2023 01:18:44 +0800 Subject: [PATCH 1373/2002] Committed on 2023/07/16 --- .../2023/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py index 4a63307b..85a55d2b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2229+121265+694655+4756, 46302+32673+6346, 62546+3741+10493, 4634+7086+27386, 38660+4915] +position_vacancies = [2229+121265+69465+4756, 46302+32673+6346, 62546+3741+10493, 4634+7086+27386, 38660+4915] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 95af96a43a5c27eaf4189077f0b39534c41d8232 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Jul 2023 14:20:20 +0800 Subject: [PATCH 1374/2002] Committed on 2023/07/16 --- .../2023_watermark_2.py | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark_2.py diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark_2.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark_2.py new file mode 100644 index 00000000..8702e50a --- /dev/null +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark_2.py @@ -0,0 +1,101 @@ +import pandas as pd +import matplotlib.image as image +import matplotlib.pyplot as plt + +# Using the magic encoding +# -*- coding: utf-8 -*- + + +# Convert wiki-table in the article 擃蝑脫楛閮俎4] to csv.[2][3] + +public_research_centric_university = pd.DataFrame(data=[ + [1, "蝡箇憭批飛", "National Taiwan University", 2466494187, "North", ], + [2, "蝡憭批飛", "National Cheng Kung University", 1421845095, "South", ], + [3, "蝡皜臬之摮", "National Tsing Hua University", 1227485103, "North", + "Derived from Beijing, China's Tsing Hua University"], + [4, "蝡賣鈭日憭批飛嚗鈭文之∪嚗", "National Yang Ming Chiao Tung University (Hsinchu)", 1321464208, "North", + "Derived from Shanghai, China's ChiaoTung University"], + [5, "蝡銝剛憭批飛", "National Chung Hsing University", 450197237, "North", ], + [6, "蝡銝剖亢憭批飛", "National Central University", 426576212, "North", ], + [7, "蝡賣鈭日憭批飛嚗賣∪嚗", "National Yang Ming Chiao Tung University (Taipei)", 0, "North", ], + [8, "蝡踵祥憭批飛", "National Chengchi University", 332581716, "North", "Literally, 'National Politics University'"], + [9, "蝡銝剖控憭批飛", "National Sun Yat-sen University", 405826790, "South", ], + [10, "蝡箇撣怎憭批飛", "National Taiwan Normal University", 324963949, "North", ], + [11, "蝡銝剜迤憭批飛", "National Chung Cheng University", 138023217, "South", + "Literally, National Chiang Chung-cheng University"], + [12, "蝡箇瘚瑟憭批飛", "National Taiwan Ocean University", 136547127, "North", ], + [13, "蝡箏憭批飛", "National Taipei University", 98142220, "North", ], + [14, "蝡典憭批飛", "National Chi Nan University", 89662348, "North", ], + [15, "蝡敶啣撣怎憭批飛", "National Changhua University of Education", 77873704, "North", ], + [16, "蝡梯臬之摮", "National Dong Hwa University", 77756120, "Hualien County", ], + [17, "蝡蝢拙之摮", "National Chiayi University", 67795521, "South", ], + [18, "蝡摰剖之摮", "National Ilan University", 60866935, "North", ], + [19, "蝡撅勗之摮", "National Pingtung University", 71360523, "South", ], + [20, "蝡箸勗之摮", "National Taitung University", 64098591, "Taitung County", ], + [21, "蝡箇銵憭批飛", "National Taiwan University of Arts", 60668797, "North", ], + [22, "蝡箏脣之摮", "National Taipei University of Education", 42922168, "North", ], + [23, "蝡擃憭批飛", "National University of Kaohsiung", 52383303, "South", ], + [24, "蝡箏銵憭批飛", "The Taipei National University of the Arts", 57484349, "North", ], + [25, "蝡箔葉脣之摮", "National Taichung University of Education", 61422484, "North", ], + [26, "蝡箏憭批飛", "National University of Tainan", 52336642, "South", ], + [27, "箏撣蝡憭批飛", "University of Taipei", 55253550, "North", ], + [28, "蝡擃脣之摮", "National Taiwan Sport University", 43469196, "North", ], + [29, "蝡臬憭批飛", "National United University", 48254839, "North", ], + [30, "蝡擃撣怎憭批飛", "National Kaohsiung Normal University", 50450179, "South", ], + [31, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 33282255, "North", ], + [32, "蝡憭批飛", "National Quemoy University", 3319, ], + # [33, "蝡箇擃脤憭批飛", "National Taiwan University of Sport", 3226, "North", ], + [33, "蝡箏銵憭批飛", "Tainan National University of the Arts", 18035952, "South", ], +]) + +print(public_research_centric_university) + +header = ['Number', 'Chinese name', 'English name', 'Budget_received', 'Location', 'Note'] + +# Adding a header to National universities of R&D +public_research_centric_university.columns = header +print(public_research_centric_university) + +# Filter the universities in the north. +condition = public_research_centric_university['Location'] == "North" +north_public_research = public_research_centric_university[condition] +print(north_public_research) + +# Sum of the budget in the north. +total_north_public_research = north_public_research['Budget_received'].sum() +print(total_north_public_research) + +# Filter the universities in the south. +condition = public_research_centric_university['Location'] == "South" +south_public_research = public_research_centric_university[condition] +print(south_public_research) + +# Sum of the budget inn the south. +total_south_public_research = south_public_research['Budget_received'].sum() +print(total_south_public_research) + +fig, ax = plt.subplots(figsize=(6, 6)) + +# The histogram of the data +plt.bar(['Northern Taiwan', 'Southern Taiwan'], [total_north_public_research, total_south_public_research]) + +plt.xlabel('Location (divided by Zhuoshui River)\n\n' + 'Dataset: https://sprout.moe.edu.tw/SproutWeb/Project/DocDownload', + fontproperties="Arial", fontsize=9) + +plt.ylabel('Unit: 10 thousands of New Taiwan Dollar') +plt.title('Government budget support for public research universities (蝡憭批飛)\n' + 'in North vs South in 2023', fontproperties="MS Gothic") + +# Tweak spacing to prevent clipping of ylabel +plt.tight_layout() + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=500, yo=500, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, transform=ax.transAxes) + +plt.show() From 1060beb82a6084dc933eab5e1dc813b60b8b709e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Jul 2023 14:21:49 +0800 Subject: [PATCH 1375/2002] Committed on 2023/07/16 --- .../2023_watermark_2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark_2.py b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark_2.py index 8702e50a..c63cb7ae 100644 --- a/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark_2.py +++ b/The attainments and realizations of my dreams/Yearly Higher Education Budget Allotment/2023_watermark_2.py @@ -83,7 +83,7 @@ 'Dataset: https://sprout.moe.edu.tw/SproutWeb/Project/DocDownload', fontproperties="Arial", fontsize=9) -plt.ylabel('Unit: 10 thousands of New Taiwan Dollar') +plt.ylabel('Unit: 1 billion of New Taiwan Dollar') plt.title('Government budget support for public research universities (蝡憭批飛)\n' 'in North vs South in 2023', fontproperties="MS Gothic") From 8f78a83fb2ce4b46d6f4456dcaec7eb05a61380f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Jul 2023 15:27:11 +0800 Subject: [PATCH 1376/2002] Committed on 2023/07/16 --- .../Average life expectancy/Year 2021-8-2.py | 2 +- .../Average life expectancy/Year 2021-8-3.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-2.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-2.py index 2bdb5e2a..8ba3b3b9 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-2.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-2.py @@ -287,4 +287,4 @@ # fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") # References: -# +# https://ws.moi.gov.tw/Download.ashx?u=LzAwMS9VcGxvYWQvNDAwL3JlbGZpbGUvOTAwOS8yNjQ3MjkvMzllMWQ1MDYtMmFhMy00NGVjLWEwZmItZDQ5ODhhOTQyNzM2LnBkZg%3d%3d&n=MTEx5bm056ysMzTpgLHlhafmlL%2fntbHoqIjpgJrloLFf55Sf5ZG96KGo6YCa5aCxLnBkZg%3d%3d diff --git a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-3.py b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-3.py index 5745a9b3..ca494d84 100644 --- a/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-3.py +++ b/The attainments and realizations of my dreams/Average life expectancy/Year 2021-8-3.py @@ -287,4 +287,4 @@ # fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") # References: -# +# https://ws.moi.gov.tw/Download.ashx?u=LzAwMS9VcGxvYWQvNDAwL3JlbGZpbGUvOTAwOS8yNjQ3MjkvMzllMWQ1MDYtMmFhMy00NGVjLWEwZmItZDQ5ODhhOTQyNzM2LnBkZg%3d%3d&n=MTEx5bm056ysMzTpgLHlhafmlL%2fntbHoqIjpgJrloLFf55Sf5ZG96KGo6YCa5aCxLnBkZg%3d%3d From 0ab971c84be40ccc6afb9c4d791ba74c25a292b0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 17 Jul 2023 18:55:55 +0800 Subject: [PATCH 1377/2002] Committed on 2023/07/17 --- .../Month_over_month_2023/April.py | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py new file mode 100644 index 00000000..6479806e --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py @@ -0,0 +1,114 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "April"] + +deaths = [[8, 25, 26, 25, 30, 25], # January + [14, 18, 15, 17, 31, 27], # February + [17, 34, 24, 34, 21, 31], # March + [6, 22, 17, 40, 21, 21], # April + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-03)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] # + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] # + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] # + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] # + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] # + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] # + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='20', transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 8f4d53dc549be0fb32afb5ec9268f3bc74f5b96d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 17 Jul 2023 18:56:24 +0800 Subject: [PATCH 1378/2002] Committed on 2023/07/17 --- .../Road safety/Month_over_month_2023/April.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py index 6479806e..fe7bd780 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py @@ -65,7 +65,7 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-03)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-04)") axes.grid(True) # pyplot.grid [1][2] From 2edc3b284402112bda7e2dcd873b1aa01b32ca49 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 17 Jul 2023 18:58:52 +0800 Subject: [PATCH 1379/2002] Committed on 2023/07/17 --- .../Road safety/Month_over_month_2023/April.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py index fe7bd780..b718c843 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py @@ -100,7 +100,7 @@ # Insert text watermark plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, - ha='center', va='center', rotation='20', transform=axes2.transAxes) + ha='center', va='center', rotation=20, transform=axes2.transAxes) plt.show() From 3c3c8aedc98c2870c299c9bc3b1cc015d8e5656a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 17 Jul 2023 19:01:44 +0800 Subject: [PATCH 1380/2002] Committed on 2023/07/17 --- .../Road safety/Month_over_month_2023/April.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py index b718c843..a137d640 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/April.py @@ -70,12 +70,12 @@ axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] # + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] # + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] # + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] # + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] # + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] # + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] # + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] # + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] # + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] # + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] # + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] # + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From 5067bcbb3fbaa2b8643e958c9901de0561dbd986 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Aug 2023 12:30:28 +0800 Subject: [PATCH 1381/2002] Committed on 2023/08/07 --- .../2023/July_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py new file mode 100644 index 00000000..fe1e50f2 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2229+121265+69465+4756, 46302+32673+6346, 62546+3741+10493, 4634+7086+27386, 38660+4915] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/07 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230724175106/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From a8d388018c44f4f60527e425be4b876e11765989 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Aug 2023 12:31:31 +0800 Subject: [PATCH 1382/2002] Committed on 2023/08/07 --- .../2023/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py index fe1e50f2..61b24b73 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2229+121265+69465+4756, 46302+32673+6346, 62546+3741+10493, 4634+7086+27386, 38660+4915] +position_vacancies = [2273+120972+70445+4696, 46302+32673+6346, 62546+3741+10493, 4634+7086+27386, 38660+4915] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 1b31cd57a1ad6c0e37851fc4fe5b03b0cbe7e83a Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Mon, 7 Aug 2023 12:34:23 +0800 Subject: [PATCH 1383/2002] Committed on 2023/08/07 --- .../2023/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py index 61b24b73..2645d011 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2273+120972+70445+4696, 46302+32673+6346, 62546+3741+10493, 4634+7086+27386, 38660+4915] +position_vacancies = [2273+120972+70445+4696, 46704+32199+6462, 62522+3700+10519, 4735+7019+27428, 39162+4949] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From f40541cf57d902726437b8ddd36dc9e09674e717 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 00:02:42 +0800 Subject: [PATCH 1384/2002] Committed on 2023/08/15 --- Supplementary materials/Algorithms/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Supplementary materials/Algorithms/__init__.py diff --git a/Supplementary materials/Algorithms/__init__.py b/Supplementary materials/Algorithms/__init__.py new file mode 100644 index 00000000..e69de29b From f5f8f0c571986fb059ef077b1cd32c7d0e5ddea8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 00:03:55 +0800 Subject: [PATCH 1385/2002] Committed on 2023/08/15 --- Supplementary materials/Algorithms/Binary_Search_Tree.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Supplementary materials/Algorithms/Binary_Search_Tree.py diff --git a/Supplementary materials/Algorithms/Binary_Search_Tree.py b/Supplementary materials/Algorithms/Binary_Search_Tree.py new file mode 100644 index 00000000..e69de29b From 493d689e273379739e309834d8a8c899d48c2d68 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 13:17:48 +0800 Subject: [PATCH 1386/2002] Committed on 2023/08/15 --- Supplementary materials/Algorithms/Binary_Search_Tree.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Supplementary materials/Algorithms/Binary_Search_Tree.py b/Supplementary materials/Algorithms/Binary_Search_Tree.py index e69de29b..c2b2cee8 100644 --- a/Supplementary materials/Algorithms/Binary_Search_Tree.py +++ b/Supplementary materials/Algorithms/Binary_Search_Tree.py @@ -0,0 +1,8 @@ +class binaryTree: + def __init__(self, nodeData, left=None, right=None): + self.nodeData = nodeData + self.left = left + self.right = right + + def __str__(self): + return str(self.nodeData) \ No newline at end of file From f383a1314ddd9c0a2f325e9c7ec39015ce6af5fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 14:17:39 +0800 Subject: [PATCH 1387/2002] Committed on 2023/08/15 --- Supplementary materials/Algorithms/Binary_Search_Tree.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Supplementary materials/Algorithms/Binary_Search_Tree.py b/Supplementary materials/Algorithms/Binary_Search_Tree.py index c2b2cee8..f17fefbf 100644 --- a/Supplementary materials/Algorithms/Binary_Search_Tree.py +++ b/Supplementary materials/Algorithms/Binary_Search_Tree.py @@ -1,4 +1,6 @@ class binaryTree: + + # Constructor def __init__(self, nodeData, left=None, right=None): self.nodeData = nodeData self.left = left From 960db50c9864fa90a543fb49d973bdf53880f7d1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 16:32:04 +0800 Subject: [PATCH 1388/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 10 ++++++++++ .../CH 6 - Structuring Data/__init__.py | 0 Algorithms for Dummies/__init__.py | 0 3 files changed, 10 insertions(+) create mode 100644 Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py create mode 100644 Algorithms for Dummies/CH 6 - Structuring Data/__init__.py create mode 100644 Algorithms for Dummies/__init__.py diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py new file mode 100644 index 00000000..147c1b80 --- /dev/null +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -0,0 +1,10 @@ +class binaryTree: + def __init__(self, data, left, right): + self.data = data + self.left = left + self.right = right + + def __str__(self): + """The method for printing the content of the node's data, + so that you can see what data the node stores.""" + return str(self.data) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/__init__.py b/Algorithms for Dummies/CH 6 - Structuring Data/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Algorithms for Dummies/__init__.py b/Algorithms for Dummies/__init__.py new file mode 100644 index 00000000..e69de29b From e30e79c677f4ec7b8d7bee2698dfacb77243a020 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 16:34:35 +0800 Subject: [PATCH 1389/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index 147c1b80..e99548ca 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -8,3 +8,6 @@ def __str__(self): """The method for printing the content of the node's data, so that you can see what data the node stores.""" return str(self.data) + + +tree = binaryTree("Root") From bc8ab6f7b48fd1c129f78eb410c847568ec6b835 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 16:34:58 +0800 Subject: [PATCH 1390/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index e99548ca..eb85d61c 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -10,4 +10,4 @@ def __str__(self): return str(self.data) -tree = binaryTree("Root") +tree = binaryTree("Root", None, None) From 273a125e536852d77a4e0f382e20407cb7acae0c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 16:45:15 +0800 Subject: [PATCH 1391/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index eb85d61c..d70c0f94 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -11,3 +11,4 @@ def __str__(self): tree = binaryTree("Root", None, None) +BranchA = binaryTree("Branch") \ No newline at end of file From 33840bd9ea943435527c2998a16e1f0d76953e15 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 16:46:28 +0800 Subject: [PATCH 1392/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index d70c0f94..dbb27240 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -11,4 +11,6 @@ def __str__(self): tree = binaryTree("Root", None, None) -BranchA = binaryTree("Branch") \ No newline at end of file +BranchA = binaryTree("Branch A", None, None) +BranchB = binaryTree("Branch B", None, None) + From 2c4c0580d0a7c7d829da9787f569241eb33511f9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 16:48:31 +0800 Subject: [PATCH 1393/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index dbb27240..ebff90a7 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -13,4 +13,5 @@ def __str__(self): tree = binaryTree("Root", None, None) BranchA = binaryTree("Branch A", None, None) BranchB = binaryTree("Branch B", None, None) - +tree.left = BranchA +tree.right = BranchB From 84be438b7d545fb8ac66c040c519e296c633476f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 16:51:42 +0800 Subject: [PATCH 1394/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index ebff90a7..c5dd1f8f 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -15,3 +15,7 @@ def __str__(self): BranchB = binaryTree("Branch B", None, None) tree.left = BranchA tree.right = BranchB + +LeafC = binaryTree("Leaf C", None, None) +LeafD = binaryTree("Leaf D", None, None) +LeafE = binaryTree("Leaf E", None, None) From b2ba423a03a997a888ece825b3972379bcd4f75a Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 17:05:19 +0800 Subject: [PATCH 1395/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index c5dd1f8f..3174d9a3 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -19,3 +19,9 @@ def __str__(self): LeafC = binaryTree("Leaf C", None, None) LeafD = binaryTree("Leaf D", None, None) LeafE = binaryTree("Leaf E", None, None) +LeafF = binaryTree("Leaf F", None, None) + +BranchA.left = LeafC +BranchA.right = LeafD +BranchB.left = LeafE +BranchB.right = LeafF From 3747669bbadd67e91501275922826dcc6ff5adef Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 17:42:24 +0800 Subject: [PATCH 1396/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index 3174d9a3..45c93993 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -25,3 +25,5 @@ def __str__(self): BranchA.right = LeafD BranchB.left = LeafE BranchB.right = LeafF + +def traverse(tree) From 32a6afe047c7e6263e5f2c759ce61e6c7cf6e612 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 17:48:42 +0800 Subject: [PATCH 1397/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index 45c93993..fa967894 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -9,6 +9,16 @@ def __str__(self): so that you can see what data the node stores.""" return str(self.data) + @staticmethod + def traverse(tree): + if tree.left != None: + binaryTree.traverse(tree.left) + if tree.right != None: + binaryTree.traverse(tree.right) + + print(tree.data) + + tree = binaryTree("Root", None, None) BranchA = binaryTree("Branch A", None, None) @@ -26,4 +36,4 @@ def __str__(self): BranchB.left = LeafE BranchB.right = LeafF -def traverse(tree) + From 8a27c7a41edd08206825197ce41c0047d6f939a7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 17:49:20 +0800 Subject: [PATCH 1398/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index fa967894..83903527 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -13,13 +13,12 @@ def __str__(self): def traverse(tree): if tree.left != None: binaryTree.traverse(tree.left) - if tree.right != None: + if tree.right is not None: binaryTree.traverse(tree.right) print(tree.data) - tree = binaryTree("Root", None, None) BranchA = binaryTree("Branch A", None, None) BranchB = binaryTree("Branch B", None, None) @@ -35,5 +34,3 @@ def traverse(tree): BranchA.right = LeafD BranchB.left = LeafE BranchB.right = LeafF - - From f815512958e3d359fbcb5dcc8eb26b840a750d28 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 17:49:55 +0800 Subject: [PATCH 1399/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py index 83903527..48cb7f1b 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree.py @@ -34,3 +34,6 @@ def traverse(tree): BranchA.right = LeafD BranchB.left = LeafE BranchB.right = LeafF + + +binaryTree.traverse(tree=tree) From fcfd3501a1652559a36a8b05b9a8b8db576c7f7f Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 18:10:04 +0800 Subject: [PATCH 1400/2002] Committed on 2023/08/15 --- .../Algorithms/Binary_Search_Tree.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Supplementary materials/Algorithms/Binary_Search_Tree.py b/Supplementary materials/Algorithms/Binary_Search_Tree.py index f17fefbf..b6ea239e 100644 --- a/Supplementary materials/Algorithms/Binary_Search_Tree.py +++ b/Supplementary materials/Algorithms/Binary_Search_Tree.py @@ -7,4 +7,12 @@ def __init__(self, nodeData, left=None, right=None): self.right = right def __str__(self): - return str(self.nodeData) \ No newline at end of file + return str(self.nodeData) + + +root_node = binaryTree("Root") +branch_A = binaryTree(nodeData="Branch A", left=leaf_C, right=leaf_D) +leaf_C = binaryTree(nodeData="Leaf C", left=None, right=None) +leaf_D = binaryTree(nodeData="Leaf D", left=None, right=None) + + From 4ed18fffba9e7ceeff1c2f5a3e8cd7bbcf6c94ab Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 18:13:57 +0800 Subject: [PATCH 1401/2002] Committed on 2023/08/15 --- Supplementary materials/Algorithms/Binary_Search_Tree.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Supplementary materials/Algorithms/Binary_Search_Tree.py b/Supplementary materials/Algorithms/Binary_Search_Tree.py index b6ea239e..3f8028eb 100644 --- a/Supplementary materials/Algorithms/Binary_Search_Tree.py +++ b/Supplementary materials/Algorithms/Binary_Search_Tree.py @@ -14,5 +14,6 @@ def __str__(self): branch_A = binaryTree(nodeData="Branch A", left=leaf_C, right=leaf_D) leaf_C = binaryTree(nodeData="Leaf C", left=None, right=None) leaf_D = binaryTree(nodeData="Leaf D", left=None, right=None) - +branch_B = binaryTree(nodeData="Branch B", left=Leaf_E, right=Leaf_F) +leaf_E = binaryTree(nodeData="Leaf E", left=None, right=None) From 53407ba47d1bcf7521c1aefee5cffde0493007ed Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 18:22:49 +0800 Subject: [PATCH 1402/2002] Committed on 2023/08/15 --- Supplementary materials/Algorithms/Binary_Search_Tree.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Supplementary materials/Algorithms/Binary_Search_Tree.py b/Supplementary materials/Algorithms/Binary_Search_Tree.py index 3f8028eb..0f3fcfe9 100644 --- a/Supplementary materials/Algorithms/Binary_Search_Tree.py +++ b/Supplementary materials/Algorithms/Binary_Search_Tree.py @@ -17,3 +17,5 @@ def __str__(self): branch_B = binaryTree(nodeData="Branch B", left=Leaf_E, right=Leaf_F) leaf_E = binaryTree(nodeData="Leaf E", left=None, right=None) + + From a155ce28ab7c2615ec25ac269366db8ff41d025c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 18:25:50 +0800 Subject: [PATCH 1403/2002] Committed on 2023/08/15 --- .../Binary Search Tree 2.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 2.py diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 2.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 2.py new file mode 100644 index 00000000..0f3fcfe9 --- /dev/null +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 2.py @@ -0,0 +1,21 @@ +class binaryTree: + + # Constructor + def __init__(self, nodeData, left=None, right=None): + self.nodeData = nodeData + self.left = left + self.right = right + + def __str__(self): + return str(self.nodeData) + + +root_node = binaryTree("Root") +branch_A = binaryTree(nodeData="Branch A", left=leaf_C, right=leaf_D) +leaf_C = binaryTree(nodeData="Leaf C", left=None, right=None) +leaf_D = binaryTree(nodeData="Leaf D", left=None, right=None) +branch_B = binaryTree(nodeData="Branch B", left=Leaf_E, right=Leaf_F) +leaf_E = binaryTree(nodeData="Leaf E", left=None, right=None) + + + From 8a85f0fc35c0fd4914a6e89ba584ca4b34bd133b Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 18:29:27 +0800 Subject: [PATCH 1404/2002] Committed on 2023/08/15 --- .../Binary Search Tree 3.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 3.py diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 3.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 3.py new file mode 100644 index 00000000..df00b2ae --- /dev/null +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 3.py @@ -0,0 +1,27 @@ +class binaryTree: + + # Constructor + def __init__(self, nodeData, left=None, right=None): + self.nodeData = nodeData + self.left = left + self.right = right + + def __str__(self): + return str(self.nodeData) + + +root_node = binaryTree("Root") + +leaf_C = binaryTree(nodeData="Leaf C", left=None, right=None) +leaf_D = binaryTree(nodeData="Leaf D", left=None, right=None) + +branch_A = binaryTree(nodeData="Branch A", left=leaf_C, right=leaf_D) + +leaf_E = binaryTree(nodeData="Leaf E", left=None, right=None) +leaf_F = binaryTree(nodeData="Leaf F", left=None, right=None) + +branch_B = binaryTree(nodeData="Branch B", left=leaf_E, right=leaf_F) + + + + From 5658cabb35dce7cec1c79fec75a69bf260fa1c30 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 18:30:20 +0800 Subject: [PATCH 1405/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree 2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 2.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 2.py index 0f3fcfe9..a1da0a16 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 2.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 2.py @@ -16,6 +16,7 @@ def __str__(self): leaf_D = binaryTree(nodeData="Leaf D", left=None, right=None) branch_B = binaryTree(nodeData="Branch B", left=Leaf_E, right=Leaf_F) leaf_E = binaryTree(nodeData="Leaf E", left=None, right=None) +leaf_F = binaryTree(nodeData="Leaf F", left=None, right=None) From 160dbee2bf2e039a5041163e259120fab1e6b8be Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 18:31:09 +0800 Subject: [PATCH 1406/2002] Committed on 2023/08/15 --- .../Binary Search Tree 4.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py new file mode 100644 index 00000000..df00b2ae --- /dev/null +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py @@ -0,0 +1,27 @@ +class binaryTree: + + # Constructor + def __init__(self, nodeData, left=None, right=None): + self.nodeData = nodeData + self.left = left + self.right = right + + def __str__(self): + return str(self.nodeData) + + +root_node = binaryTree("Root") + +leaf_C = binaryTree(nodeData="Leaf C", left=None, right=None) +leaf_D = binaryTree(nodeData="Leaf D", left=None, right=None) + +branch_A = binaryTree(nodeData="Branch A", left=leaf_C, right=leaf_D) + +leaf_E = binaryTree(nodeData="Leaf E", left=None, right=None) +leaf_F = binaryTree(nodeData="Leaf F", left=None, right=None) + +branch_B = binaryTree(nodeData="Branch B", left=leaf_E, right=leaf_F) + + + + From 77546747e3895998fb729dc03f7736d4707b19cf Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 18:34:40 +0800 Subject: [PATCH 1407/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree 4.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py index df00b2ae..5cb1d9c5 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py @@ -23,5 +23,13 @@ def __str__(self): branch_B = binaryTree(nodeData="Branch B", left=leaf_E, right=leaf_F) +def traverse(tree): + if tree.left is not None: + traverse(tree.left) + if tree.right is not None: + traverse(tree.right) + + print(tree.nodeData) + From 1d8ea07531d4508f64267ea1079e9ea5a16482d2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 23:32:33 +0800 Subject: [PATCH 1408/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree 3.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 3.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 3.py index df00b2ae..3e0803b1 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 3.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 3.py @@ -12,6 +12,7 @@ def __str__(self): root_node = binaryTree("Root") +# Define leaf_C and leaf_D before branch_A leaf_C = binaryTree(nodeData="Leaf C", left=None, right=None) leaf_D = binaryTree(nodeData="Leaf D", left=None, right=None) From 063b9e61240b4191ede90bcc24f4e10ddc7dd873 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 23:34:22 +0800 Subject: [PATCH 1409/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree 4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py index 5cb1d9c5..1be52986 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py @@ -32,4 +32,4 @@ def traverse(tree): print(tree.nodeData) - +traverse(root_node) From 3a2a8379c32b24e44a638bdcd46f9f26918a77cc Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 23:37:08 +0800 Subject: [PATCH 1410/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree 4.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py index 1be52986..b2d6bd5c 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 4.py @@ -10,7 +10,7 @@ def __str__(self): return str(self.nodeData) -root_node = binaryTree("Root") +# root_node = binaryTree("Root", left=branch_A, right=branch_B) leaf_C = binaryTree(nodeData="Leaf C", left=None, right=None) leaf_D = binaryTree(nodeData="Leaf D", left=None, right=None) @@ -22,6 +22,7 @@ def __str__(self): branch_B = binaryTree(nodeData="Branch B", left=leaf_E, right=leaf_F) +root_node = binaryTree("Root", left=branch_A, right=branch_B) def traverse(tree): if tree.left is not None: From 7d64f4ff86becc6a87c8d2c24cb4b05208793f22 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 23:38:28 +0800 Subject: [PATCH 1411/2002] Committed on 2023/08/15 --- .../Binary Search Tree 1.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 1.py diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 1.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 1.py new file mode 100644 index 00000000..48cb7f1b --- /dev/null +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 1.py @@ -0,0 +1,39 @@ +class binaryTree: + def __init__(self, data, left, right): + self.data = data + self.left = left + self.right = right + + def __str__(self): + """The method for printing the content of the node's data, + so that you can see what data the node stores.""" + return str(self.data) + + @staticmethod + def traverse(tree): + if tree.left != None: + binaryTree.traverse(tree.left) + if tree.right is not None: + binaryTree.traverse(tree.right) + + print(tree.data) + + +tree = binaryTree("Root", None, None) +BranchA = binaryTree("Branch A", None, None) +BranchB = binaryTree("Branch B", None, None) +tree.left = BranchA +tree.right = BranchB + +LeafC = binaryTree("Leaf C", None, None) +LeafD = binaryTree("Leaf D", None, None) +LeafE = binaryTree("Leaf E", None, None) +LeafF = binaryTree("Leaf F", None, None) + +BranchA.left = LeafC +BranchA.right = LeafD +BranchB.left = LeafE +BranchB.right = LeafF + + +binaryTree.traverse(tree=tree) From 47cfcee6fb4e67b1688393adb00fd2a62a395d1c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Tue, 15 Aug 2023 23:39:09 +0800 Subject: [PATCH 1412/2002] Committed on 2023/08/15 --- .../CH 6 - Structuring Data/Binary Search Tree 1.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 1.py b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 1.py index 48cb7f1b..fbf9019b 100644 --- a/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 1.py +++ b/Algorithms for Dummies/CH 6 - Structuring Data/Binary Search Tree 1.py @@ -12,9 +12,9 @@ def __str__(self): @staticmethod def traverse(tree): if tree.left != None: - binaryTree.traverse(tree.left) + traverse(tree.left) if tree.right is not None: - binaryTree.traverse(tree.right) + traverse(tree.right) print(tree.data) From 854b27abb585422fbd80af0c016acf8857933d74 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 20 Aug 2023 00:57:14 +0800 Subject: [PATCH 1413/2002] Committed on 2023/08/20 --- Python equivalent for Cpp/Passing Objects to Functions.py | 4 ++++ Python equivalent for Cpp/__init__.py | 0 2 files changed, 4 insertions(+) create mode 100644 Python equivalent for Cpp/Passing Objects to Functions.py create mode 100644 Python equivalent for Cpp/__init__.py diff --git a/Python equivalent for Cpp/Passing Objects to Functions.py b/Python equivalent for Cpp/Passing Objects to Functions.py new file mode 100644 index 00000000..dc6da558 --- /dev/null +++ b/Python equivalent for Cpp/Passing Objects to Functions.py @@ -0,0 +1,4 @@ +class MyClass: + + def __int__(self, value): + self.value = value \ No newline at end of file diff --git a/Python equivalent for Cpp/__init__.py b/Python equivalent for Cpp/__init__.py new file mode 100644 index 00000000..e69de29b From 3a67ec6d9c9fd2776a50ac7ea28ffdb6d2d72691 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 20 Aug 2023 00:59:00 +0800 Subject: [PATCH 1414/2002] Committed on 2023/08/20 --- Python equivalent for Cpp/Passing Objects to Functions.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Python equivalent for Cpp/Passing Objects to Functions.py b/Python equivalent for Cpp/Passing Objects to Functions.py index dc6da558..7bea79a4 100644 --- a/Python equivalent for Cpp/Passing Objects to Functions.py +++ b/Python equivalent for Cpp/Passing Objects to Functions.py @@ -1,4 +1,7 @@ class MyClass: def __int__(self, value): - self.value = value \ No newline at end of file + self.value = value + + def get_value(self): + return value \ No newline at end of file From e885ffc770b87b9e623c2bc97240192a8db61381 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 20 Aug 2023 12:29:24 +0800 Subject: [PATCH 1415/2002] Committed on 2023/08/20 --- Python equivalent for Cpp/Passing Objects to Functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python equivalent for Cpp/Passing Objects to Functions.py b/Python equivalent for Cpp/Passing Objects to Functions.py index 7bea79a4..48b6280a 100644 --- a/Python equivalent for Cpp/Passing Objects to Functions.py +++ b/Python equivalent for Cpp/Passing Objects to Functions.py @@ -4,4 +4,4 @@ def __int__(self, value): self.value = value def get_value(self): - return value \ No newline at end of file + return self.value \ No newline at end of file From 07f1ac2de120be71635b2bee473b38a96cc2ce3c Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 20 Aug 2023 12:36:59 +0800 Subject: [PATCH 1416/2002] Committed on 2023/08/20 --- Python equivalent for Cpp/Passing Objects to Functions.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Python equivalent for Cpp/Passing Objects to Functions.py b/Python equivalent for Cpp/Passing Objects to Functions.py index 48b6280a..17e88d72 100644 --- a/Python equivalent for Cpp/Passing Objects to Functions.py +++ b/Python equivalent for Cpp/Passing Objects to Functions.py @@ -4,4 +4,8 @@ def __int__(self, value): self.value = value def get_value(self): - return self.value \ No newline at end of file + return self.value + + def set_value(self, value): + self.value = value + From b9a99bffecfa823341aa1996838397100a225aa0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof Date: Sun, 20 Aug 2023 13:56:08 +0800 Subject: [PATCH 1417/2002] Committed on 2023/08/20 --- .../Passing Objects to Functions.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Python equivalent for Cpp/Passing Objects to Functions.py b/Python equivalent for Cpp/Passing Objects to Functions.py index 17e88d72..e521377a 100644 --- a/Python equivalent for Cpp/Passing Objects to Functions.py +++ b/Python equivalent for Cpp/Passing Objects to Functions.py @@ -9,3 +9,16 @@ def get_value(self): def set_value(self, value): self.value = value + @staticmethod + def display(ob): + print(ob.get_value()) + print("\n") + @staticmethod + def change(ob): + ob.set_value(100) + print("Value of ob inside: ") + MyClass.display(ob) + + + + From 13f79b384d5bd5ed9d1d120259be76cb44beb6c1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Sep 2023 16:08:53 +0800 Subject: [PATCH 1418/2002] Committed on 2023/09/03 --- .../2023/August_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py new file mode 100644 index 00000000..3d6e461a --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2273+120972+70445+4696, 46704+32199+6462, 62522+3700+10519, 4735+7019+27428, 39162+4949] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230825175852/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From a9ddf6cb52854b056f3efab9aa7b3703fc8b4d66 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Sep 2023 16:11:22 +0800 Subject: [PATCH 1419/2002] Committed on 2023/09/03 --- .../2023/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py index 3d6e461a..634e5afc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2273+120972+70445+4696, 46704+32199+6462, 62522+3700+10519, 4735+7019+27428, 39162+4949] +position_vacancies = [2330+120454+70222+4816, 46557+32080+6382, 62522+3700+10519, 4735+7019+27428, 39162+4949] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 6972e32373d99d7c47dc76c187b49cec700c448d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Sep 2023 16:13:24 +0800 Subject: [PATCH 1420/2002] Committed on 2023/09/03 --- .../2023/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py index 634e5afc..4f7bbbbb 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2330+120454+70222+4816, 46557+32080+6382, 62522+3700+10519, 4735+7019+27428, 39162+4949] +position_vacancies = [2330+120454+70222+4816, 46557+32080+6382, 61457+3735+10472, 4729+6992+27009, 39162+4949] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 76aa26f8c4da248b71cc9ba51fada1324f915773 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Sep 2023 16:15:51 +0800 Subject: [PATCH 1421/2002] Committed on 2023/09/03 --- .../2023/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py index 4f7bbbbb..119f9f2c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2330+120454+70222+4816, 46557+32080+6382, 61457+3735+10472, 4729+6992+27009, 39162+4949] +position_vacancies = [2330+120454+70222+4816, 46557+32080+6382, 61457+3735+10472, 4729+6992+27009, 39056+4658] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From a9594d21517b6f39904b6f2c5e8e2f541e99780e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Sep 2023 16:49:24 +0800 Subject: [PATCH 1422/2002] Committed on 2023/09/03 --- .../Road safety/Month_over_month_2023/June.py | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py new file mode 100644 index 00000000..c37ef831 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py @@ -0,0 +1,115 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "April"] + +deaths = [[8, 25, 26, 25, 30, 25], # January + [14, 18, 15, 17, 31, 27], # February + [17, 34, 24, 34, 21, 31], # March + [6, 22, 17, 40, 21, 21], # April + [13, 16, 19, 28, 21, 33], # May + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-04)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] # + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] # + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] # + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] # + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] # + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] # + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=20, transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 25fc34c4a551d0a9cbb64f90d47890a375243617 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Sep 2023 16:52:03 +0800 Subject: [PATCH 1423/2002] Committed on 2023/09/03 --- .../Road safety/Month_over_month_2023/June.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py index c37ef831..2e74d164 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py @@ -14,6 +14,7 @@ [17, 34, 24, 34, 21, 31], # March [6, 22, 17, 40, 21, 21], # April [13, 16, 19, 28, 21, 33], # May + [6, 13, 13, 34, 24, 21], # June ] df = pd.DataFrame(data=deaths, From 6a2dd7ab16a0271a0fe445275a9998718d9c21dd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Sep 2023 17:05:43 +0800 Subject: [PATCH 1424/2002] Committed on 2023/09/03 --- .../Road safety/Month_over_month_2023/June.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py index 2e74d164..0dde2582 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py @@ -67,17 +67,17 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-04)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-06)") axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] # + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] # + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] # + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] # + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] # + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] # + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] # + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] # + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] # + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] # + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] # + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] # + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From b9a2902c264c5e954726c9b511515d34b61e5821 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 3 Sep 2023 17:06:38 +0800 Subject: [PATCH 1425/2002] Committed on 2023/09/03 --- .../Road safety/Month_over_month_2023/June.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py index 0dde2582..10cdf94b 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/June.py @@ -7,7 +7,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month = ["Jan", "Feb", "Mar", "April"] +month = ["Jan", "Feb", "Mar", "April", "May", "June"] deaths = [[8, 25, 26, 25, 30, 25], # January [14, 18, 15, 17, 31, 27], # February From 08842c00d587b2eee1b27ee006eecc215d7c9973 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 10 Oct 2023 00:33:23 +0800 Subject: [PATCH 1426/2002] Committed on 2023/10/10 --- .../2023/September_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/September_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/September_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/September_at_metro_level.py new file mode 100644 index 00000000..1384dd08 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/September_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2248+119915+69679+4742, 47773+31910+6417, 60475+3709+10272, 4722+6891+26719, 38928+4570] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20230926041705/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 19a57addc8e388abf0c8d678cb3fe0989e58e13c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Oct 2023 14:10:57 +0800 Subject: [PATCH 1427/2002] Committed on or around 2023/10/29 --- Grokking Algorithms/CH5-Hash Tables/__init__.py | 0 Grokking Algorithms/CH5-Hash Tables/grocery clerk.py | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 Grokking Algorithms/CH5-Hash Tables/__init__.py create mode 100644 Grokking Algorithms/CH5-Hash Tables/grocery clerk.py diff --git a/Grokking Algorithms/CH5-Hash Tables/__init__.py b/Grokking Algorithms/CH5-Hash Tables/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py b/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py new file mode 100644 index 00000000..d616310e --- /dev/null +++ b/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py @@ -0,0 +1,4 @@ +# book is a new hash table +book = dict() + + From 6b003374a579ed2700f65d50d3240a512c7eb8df Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Oct 2023 14:19:02 +0800 Subject: [PATCH 1428/2002] Committed on or around 2023/10/29 --- Grokking Algorithms/CH5-Hash Tables/grocery clerk.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py b/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py index d616310e..8dadcd3f 100644 --- a/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py +++ b/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py @@ -1,4 +1,9 @@ # book is a new hash table book = dict() +book["apple"] = 0.67 # An apple costs 67 cents. +book["milk"] = 1.49 # Milk costs 1.49 +book["avocado"] = 1.49 + +print(book) From 6cb3bd291d7795827e71ac056cab1ff931e0b8dd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Oct 2023 14:21:30 +0800 Subject: [PATCH 1429/2002] Committed on or around 2023/10/29 --- Grokking Algorithms/CH5-Hash Tables/grocery clerk.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py b/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py index 8dadcd3f..882b8bab 100644 --- a/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py +++ b/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py @@ -1,9 +1,12 @@ # book is a new hash table book = dict() +# Let's add some prices to book + book["apple"] = 0.67 # An apple costs 67 cents. book["milk"] = 1.49 # Milk costs 1.49 book["avocado"] = 1.49 print(book) + From 15152bbe962b52b953804cd47f19625ab3116c18 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Oct 2023 14:27:15 +0800 Subject: [PATCH 1430/2002] Committed on or around 2023/10/29 --- Grokking Algorithms/CH5-Hash Tables/grocery clerk.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py b/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py index 882b8bab..a7179029 100644 --- a/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py +++ b/Grokking Algorithms/CH5-Hash Tables/grocery clerk.py @@ -9,4 +9,5 @@ print(book) - +# Now, let's ask for the price of an avocado +print(book["avocado"]) From 268aa09c34acc7b026c0d7677eabbae3ef8efb18 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Oct 2023 14:46:02 +0800 Subject: [PATCH 1431/2002] Committed on or around 2023/10/29 --- .../CH5-Hash Tables/Using hash tables for lookups.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Grokking Algorithms/CH5-Hash Tables/Using hash tables for lookups.py diff --git a/Grokking Algorithms/CH5-Hash Tables/Using hash tables for lookups.py b/Grokking Algorithms/CH5-Hash Tables/Using hash tables for lookups.py new file mode 100644 index 00000000..18242dbe --- /dev/null +++ b/Grokking Algorithms/CH5-Hash Tables/Using hash tables for lookups.py @@ -0,0 +1,8 @@ +phone_book = {} # Same as phone_book = dict() + +phone_book["jenny"] = 8675309 +phone_book["emergency"] = 911 + +print(phone_book["jenny"]) + + From e96920b3d19a0ccfd6692cf1823dc54203de179b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Oct 2023 14:52:10 +0800 Subject: [PATCH 1432/2002] Committed on or around 2023/10/29 --- Grokking Algorithms/CH5-Hash Tables/Domain Name System.py | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Grokking Algorithms/CH5-Hash Tables/Domain Name System.py diff --git a/Grokking Algorithms/CH5-Hash Tables/Domain Name System.py b/Grokking Algorithms/CH5-Hash Tables/Domain Name System.py new file mode 100644 index 00000000..fbd17455 --- /dev/null +++ b/Grokking Algorithms/CH5-Hash Tables/Domain Name System.py @@ -0,0 +1,6 @@ +ip = dict() + +ip["google.com"] = 74.125 +ip["facebook.com"] = 173.252 + +print(ip) From abce994b19747343db630abd3c792821bda068d5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Oct 2023 14:52:49 +0800 Subject: [PATCH 1433/2002] Committed on or around 2023/10/29 --- Grokking Algorithms/CH5-Hash Tables/Domain Name System.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Grokking Algorithms/CH5-Hash Tables/Domain Name System.py b/Grokking Algorithms/CH5-Hash Tables/Domain Name System.py index fbd17455..b7626727 100644 --- a/Grokking Algorithms/CH5-Hash Tables/Domain Name System.py +++ b/Grokking Algorithms/CH5-Hash Tables/Domain Name System.py @@ -4,3 +4,5 @@ ip["facebook.com"] = 173.252 print(ip) + +print(ip["facebook.com"]) From 14bcb86c029db74ea82ed48c31165c75f37b1adb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:23:33 +0800 Subject: [PATCH 1434/2002] Committed on or around 2023/11/26 --- .../2023/Taipei_v_Kaohsiung_November.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_November.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_November.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_November.py new file mode 100644 index 00000000..01d7fb6e --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_November.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [117404, 37960] + +label = ["啣撣\nTaipei City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/11 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20231124162552/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From aafa487db160b14974d5324c61837bf714630a8e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:30:56 +0800 Subject: [PATCH 1435/2002] Committed on or around 2023/11/26 --- .../2023/October_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/October_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/October_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/October_at_metro_level.py new file mode 100644 index 00000000..5b94ae62 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/October_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2253+118394+68186+4594, 45794+31743+6269, 59514+3718+10102, 4517+6926+26601, 38377+4517] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20231025065031/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 3c5a7b1c0ff898605436bcc990f06e9031b67838 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:43:01 +0800 Subject: [PATCH 1436/2002] Committed on or around 2023/11/26 --- .../2023/November_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py new file mode 100644 index 00000000..b5d7e0b9 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2252+117404+67476+4594, 45794+31743+6269, 59514+3718+10102, 4517+6926+26601, 38377+4517] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20231124162552/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 79108140cee0cd9f3ccc86891f256d915ec1cc4e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:43:15 +0800 Subject: [PATCH 1437/2002] Committed on or around 2023/11/26 --- .../2023/November_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py index b5d7e0b9..698d98cd 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2252+117404+67476+4594, 45794+31743+6269, 59514+3718+10102, 4517+6926+26601, 38377+4517] +position_vacancies = [2252+117404+67476+4504, 45794+31743+6269, 59514+3718+10102, 4517+6926+26601, 38377+4517] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From ab83318178297a6ade9b40b29ad534d149830838 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:46:30 +0800 Subject: [PATCH 1438/2002] Committed on or around 2023/11/26 --- .../2023/November_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py index 698d98cd..51119e40 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2252+117404+67476+4504, 45794+31743+6269, 59514+3718+10102, 4517+6926+26601, 38377+4517] +position_vacancies = [2252+117404+67476+4504, 45617+31468+6351, 58717+3709+10012, 4517+6926+26601, 38377+4517] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From c28363928892da7bc0026f56f92e6228c0f9f868 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:50:22 +0800 Subject: [PATCH 1439/2002] Committed on or around 2023/11/26 --- .../2023/November_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py index 51119e40..8cb19ff1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2252+117404+67476+4504, 45617+31468+6351, 58717+3709+10012, 4517+6926+26601, 38377+4517] +position_vacancies = [2252+117404+67476+4504, 45617+31468+6351, 58717+3709+10012, 4459+6926+26601, 38377+4517] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 45222e67a2feddb53d439374623a9c4aa3504c55 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:51:36 +0800 Subject: [PATCH 1440/2002] Committed on or around 2023/11/26 --- .../2023/November_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py index 8cb19ff1..e402182b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2252+117404+67476+4504, 45617+31468+6351, 58717+3709+10012, 4459+6926+26601, 38377+4517] +position_vacancies = [2252+117404+67476+4504, 45617+31468+6351, 58717+3709+10012, 4459+6837+25912, 37960+4495] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 332abc2a890377098887ddaeb6fdb68e80f0a4c9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 16:03:05 +0800 Subject: [PATCH 1441/2002] Committed on or around 2023/11/26 --- .../Month_over_month_2023/August.py | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py new file mode 100644 index 00000000..3343c15e --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py @@ -0,0 +1,118 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "April", "May", "June"] + +deaths = [[8, 25, 26, 25, 30, 25], # January + [14, 18, 15, 17, 31, 27], # February + [17, 34, 24, 34, 21, 31], # March + [6, 22, 17, 40, 21, 21], # April + [13, 16, 19, 28, 21, 33], # May + [6, 13, 13, 34, 24, 21], # June + [9, 21, 18, 23, 20, 25], # July + [6, 19, 17, 13, 24, 21], # August + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-06)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] # + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] # + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] # + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] # + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] # + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] # + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=20, transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 1538d7e151ad02e3dcf5a3561a9b3d2a2ee825b7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 16:03:28 +0800 Subject: [PATCH 1442/2002] Committed on or around 2023/11/26 --- .../Road safety/Month_over_month_2023/August.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py index 3343c15e..a2c4f981 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py @@ -69,7 +69,7 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-06)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-08)") axes.grid(True) # pyplot.grid [1][2] From 01f62393ef0d909b85252547bd404578c8fa89a5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 16:04:51 +0800 Subject: [PATCH 1443/2002] Committed on or around 2023/11/26 --- .../Road safety/Month_over_month_2023/August.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py index a2c4f981..de60d73b 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py @@ -74,12 +74,12 @@ axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] # + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] # + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] # + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] # + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] # + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] # + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] # + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] # + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] # + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] # + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] # + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] # + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From 1f29245e1efbc71fad6826b6d63ddb43568e8363 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 16:06:57 +0800 Subject: [PATCH 1444/2002] Committed on or around 2023/11/26 --- .../Road safety/Month_over_month_2023/August.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py index de60d73b..ab31b19f 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/August.py @@ -7,7 +7,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month = ["Jan", "Feb", "Mar", "April", "May", "June"] +month = ["Jan", "Feb", "Mar", "April", "May", "June", "July", "August"] deaths = [[8, 25, 26, 25, 30, 25], # January [14, 18, 15, 17, 31, 27], # February From a79c3837f99ad826c7ecddea6d6d28e2a588e358 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 18:09:54 +0800 Subject: [PATCH 1445/2002] Committed on or around 2023/11/26 --- .../2023/Taipei_v_Kaohsiung_October.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_October.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_October.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_October.py new file mode 100644 index 00000000..f081f7a7 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_October.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [117404, 37960] + +label = ["啣撣\nTaipei City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/10 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20231025065031/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 09a844d35c67f80f8026c0134be3233f3f65f3a3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 26 Nov 2023 18:10:46 +0800 Subject: [PATCH 1446/2002] Committed on or around 2023/11/26 --- .../2023/Taipei_v_Kaohsiung_October.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_October.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_October.py index f081f7a7..3fff1b1e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_October.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_October.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2] -position_vacancies = [117404, 37960] +position_vacancies = [118394, 38377] label = ["啣撣\nTaipei City", "擃撣\nKaohsiung City"] From 6a3e1b78ee7e72def64a0735beae2188385f71c3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Jan 2024 22:50:59 +0800 Subject: [PATCH 1447/2002] Committed on or around 2024/01/29 --- .../2023/December at metro level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py new file mode 100644 index 00000000..5b94ae62 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2253+118394+68186+4594, 45794+31743+6269, 59514+3718+10102, 4517+6926+26601, 38377+4517] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20231025065031/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From ae71ea6dc3dc670c58eacd45fee9606b1ddbc2b2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Jan 2024 22:56:31 +0800 Subject: [PATCH 1448/2002] Committed on or around 2024/01/29 --- .../2023/December at metro level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py index 5b94ae62..659385c3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2253+118394+68186+4594, 45794+31743+6269, 59514+3718+10102, 4517+6926+26601, 38377+4517] +position_vacancies = [2245+115424+6623+4440, 44604+31263+6311, 57794+3654+9769, 4478+6632+25388, 38377+4517] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2023/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2023/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://web.archive.org/web/20231025065031/https://www.104.com.tw/jobs/main/category/?jobsource=category") From 3a55c8d588bcdd270db0f1c68a0af53172b9c95e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Jan 2024 22:57:13 +0800 Subject: [PATCH 1449/2002] Committed on or around 2024/01/29 --- .../2023/December at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py index 659385c3..fb233a4b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2245+115424+6623+4440, 44604+31263+6311, 57794+3654+9769, 4478+6632+25388, 38377+4517] +position_vacancies = [2245+115424+6623+4440, 44604+31263+6311, 57794+3654+9769, 4478+6632+25388, 37581+4444] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 24a93d340be20e74b3edacc173c082628e9fc7d6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Jan 2024 22:59:19 +0800 Subject: [PATCH 1450/2002] Committed on or around 2024/01/29 --- .../2023/December at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py index fb233a4b..b3feb89a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py @@ -34,7 +34,7 @@ plt.title("2023/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://web.archive.org/web/20231025065031/https://www.104.com.tw/jobs/main/category/?jobsource=category") +plt.xlabel("鞈 Reference https://web.archive.org/web/20231224055127/https://www.104.com.tw/jobs/main/category/?jobsource=category") plt.ylim(39000, 180000) From 9b00486292ae5217c4d99ca70f236971937654ee Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 29 Jan 2024 23:10:10 +0800 Subject: [PATCH 1451/2002] Committed on or around 2024/01/29 --- .../2023/November_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py index e402182b..4e27b208 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/November_at_metro_level.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2023/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2023/11 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://web.archive.org/web/20231124162552/https://www.104.com.tw/jobs/main/category/?jobsource=category") From f8bfb481450bb583a3b10c98fe124c8190644451 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 30 Jan 2024 00:16:20 +0800 Subject: [PATCH 1452/2002] Committed on or around 2024/01/30 --- .../2023/December at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py index b3feb89a..3816c073 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/December at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2245+115424+6623+4440, 44604+31263+6311, 57794+3654+9769, 4478+6632+25388, 37581+4444] +position_vacancies = [2245+115424+66623+4440, 44604+31263+6311, 57794+3654+9769, 4478+6632+25388, 37581+4444] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From c6ca3e4c5d2396be390d91baca5c146233b7727a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 1 Feb 2024 00:13:11 +0800 Subject: [PATCH 1453/2002] Committed on or around 2024/02/01 --- .../Month_over_month_2023/November.py | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py new file mode 100644 index 00000000..fb24ba77 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py @@ -0,0 +1,121 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "April", "May", "June", "July", "August", "September", "October", "November"] + +deaths = [[8, 25, 26, 25, 30, 25], # January + [14, 18, 15, 17, 31, 27], # February + [17, 34, 24, 34, 21, 31], # March + [6, 22, 17, 40, 21, 21], # April + [13, 16, 19, 28, 21, 33], # May + [6, 13, 13, 34, 24, 21], # June + [9, 21, 18, 23, 20, 25], # July + [6, 19, 17, 13, 24, 21], # August + [], # September + [], # October + [], # November + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-11)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] # + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] # + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] # + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] # + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] # + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] # + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=20, transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 3de7c43897057e5db2465a15fca86a026cbccb94 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 1 Feb 2024 00:17:25 +0800 Subject: [PATCH 1454/2002] Committed on or around 2024/02/01 --- .../Road safety/Month_over_month_2023/November.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py index fb24ba77..5b2dd872 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py @@ -7,7 +7,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month = ["Jan", "Feb", "Mar", "April", "May", "June", "July", "August", "September", "October", "November"] +month = ["Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov"] deaths = [[8, 25, 26, 25, 30, 25], # January [14, 18, 15, 17, 31, 27], # February From 6774772370b566d9be41888c90b9b902684ea378 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 1 Feb 2024 00:19:57 +0800 Subject: [PATCH 1455/2002] Committed on or around 2024/02/01 --- .../Road safety/Month_over_month_2023/November.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py index 5b2dd872..aaf5567e 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py @@ -17,9 +17,9 @@ [6, 13, 13, 34, 24, 21], # June [9, 21, 18, 23, 20, 25], # July [6, 19, 17, 13, 24, 21], # August - [], # September - [], # October - [], # November + [5, 20, 19, 20, 27, 25], # September + [10, 31, 25, 32, 31, 24], # October + [7, 27, 27, 26, 17, 34], # November ] df = pd.DataFrame(data=deaths, From 9770d8986c679813b8c525da4a656fd713ce0fe3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 1 Feb 2024 00:21:44 +0800 Subject: [PATCH 1456/2002] Committed on or around 2024/02/01 --- .../Road safety/Month_over_month_2023/November.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py index aaf5567e..576a3042 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py @@ -77,12 +77,12 @@ axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] # + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] # + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] # + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] # + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] # + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] # + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] # + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] # + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] # + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] # + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] # + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] # + deaths[11][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From 277587f0e9179705d6ec483e0913fd9357785898 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Feb 2024 23:59:12 +0800 Subject: [PATCH 1457/2002] Committed on or around 2024/02/02 --- .../Road safety/Month_over_month_2023/November.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py index 576a3042..58d5e248 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py @@ -20,6 +20,7 @@ [5, 20, 19, 20, 27, 25], # September [10, 31, 25, 32, 31, 24], # October [7, 27, 27, 26, 17, 34], # November + [] # December ] df = pd.DataFrame(data=deaths, From b5b340ce0afd951b68c5de3cf9c6cfa8cb68ac68 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Feb 2024 00:01:13 +0800 Subject: [PATCH 1458/2002] Committed on or around 2024/02/03 --- .../Road safety/Month_over_month_2023/November.py | 1 - 1 file changed, 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py index 58d5e248..576a3042 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/November.py @@ -20,7 +20,6 @@ [5, 20, 19, 20, 27, 25], # September [10, 31, 25, 32, 31, 24], # October [7, 27, 27, 26, 17, 34], # November - [] # December ] df = pd.DataFrame(data=deaths, From d388e7485995dddc8084c9b71c3ef32f0edfdb1c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 20 Feb 2024 13:53:48 +0800 Subject: [PATCH 1459/2002] Committed on or around 2024/02/20 --- .../2024/February_at_metro_level.py | 66 +++++++++++++++++++ .../2024/__init__.py | 0 2 files changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py new file mode 100644 index 00000000..428fc5b7 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2245+115424+66623+4440, 44604+31263+6311, 57794+3654+9769, 4478+6632+25388, 37581+4444] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/LPccQ") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/__init__.py new file mode 100644 index 00000000..e69de29b From 3721c0e68616afe497944664f2fc8284762be135 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 20 Feb 2024 13:55:01 +0800 Subject: [PATCH 1460/2002] Committed on or around 2024/02/20 --- .../2024/February_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py index 428fc5b7..3785d8ec 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2245+115424+66623+4440, 44604+31263+6311, 57794+3654+9769, 4478+6632+25388, 37581+4444] +position_vacancies = [2309+120654+69852+4581, 44604+31263+6311, 57794+3654+9769, 4478+6632+25388, 37581+4444] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 935f6ed61cd3c0aaa2827d1258b8817babb46750 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 20 Feb 2024 14:01:30 +0800 Subject: [PATCH 1461/2002] Committed on or around 2024/02/20 --- .../2024/February_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py index 3785d8ec..4ac62af0 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2309+120654+69852+4581, 44604+31263+6311, 57794+3654+9769, 4478+6632+25388, 37581+4444] +position_vacancies = [2309+120654+69852+4581, 46792+32468+6475, 62539+10650+3860, 4478+6632+25388, 37581+4444] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 0a665acad11464b1d4db2f5b4cdf7cf44d919216 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 20 Feb 2024 14:19:14 +0800 Subject: [PATCH 1462/2002] Committed on or around 2024/02/20 --- .../2024/February_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py index 4ac62af0..0ffcb132 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2309+120654+69852+4581, 46792+32468+6475, 62539+10650+3860, 4478+6632+25388, 37581+4444] +position_vacancies = [2309+120654+69852+4581, 46792+32468+6475, 62539+10650+3860, 4681+7101+27385, 39865+4742] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 81ea89911f93ba8b22eeff41cdd411e3abca841d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 20 Feb 2024 14:23:00 +0800 Subject: [PATCH 1463/2002] Committed on or around 2024/02/20 --- .../2024/CC-BY.png | Bin 0 -> 1283 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/CC-BY.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Tue, 20 Feb 2024 14:23:49 +0800 Subject: [PATCH 1464/2002] Committed on or around 2024/02/20 --- .../2024/February_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py index 0ffcb132..15a7422b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py @@ -34,7 +34,7 @@ plt.title("2024/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/LPccQ") +plt.xlabel("鞈 Reference https://archive.ph/LPccQ") plt.ylim(39000, 180000) From 5b47c932b98948379743ebd3181452ad2e211161 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 20 Feb 2024 14:25:12 +0800 Subject: [PATCH 1465/2002] Committed on or around 2024/02/20 --- .../2024/February_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py index 15a7422b..1b08eb5b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_metro_level.py @@ -34,7 +34,7 @@ plt.title("2024/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/LPccQ") +plt.xlabel("鞈 Reference https://archive.ph/LPccQ") plt.ylim(39000, 180000) From a040101df8b279502ef6739824a47e0e6eb6cc84 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 21 Feb 2024 23:33:19 +0800 Subject: [PATCH 1466/2002] Committed on or around 2024/02/21 --- .../2024/Taipei_v_Kaohsiung_February.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February.py new file mode 100644 index 00000000..ee688f6d --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [120654, 39865] + +label = ["啣撣\nTaipei City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/02 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/LPccQ") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 702adda75d1db88436ff23ae1abb73821d3e1272 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 21 Feb 2024 23:38:15 +0800 Subject: [PATCH 1467/2002] Committed on or around 2024/02/21 --- .../2024/February_at_city_level.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py new file mode 100644 index 00000000..e69de29b From ebfcd0e16f853250db85c9230e0db1f8a95eb229 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Feb 2024 13:50:53 +0800 Subject: [PATCH 1468/2002] Committed on or around 2024/02/23 --- .../2024/February_at_city_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py index e69de29b..05c63ec1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [107229, 59148, 43509, 54374, 24843, 34872] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/02 啁撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/LPccQ") + +plt.ylim(24500, 100000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 003458c290d5628f2d5b921c288f6e9a7dec14a5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Feb 2024 13:53:09 +0800 Subject: [PATCH 1469/2002] Committed on or around 2024/02/23 --- .../2024/February_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py index 05c63ec1..6139f237 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [107229, 59148, 43509, 54374, 24843, 34872] +position_vacancies = [120654, 69852, 46792, 63539, 27385, 39865] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 86fef45ccb6c6068e014874704c5688675dfe132 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Feb 2024 13:55:14 +0800 Subject: [PATCH 1470/2002] Committed on or around 2024/02/23 --- .../2024/February_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py index 6139f237..d4685938 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_at_city_level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/LPccQ") -plt.ylim(24500, 100000) +plt.ylim(25000, 110000) img = image.imread('CC-BY.png') From 0859cc272f1eb576881838cca708b34ba1d9668f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Feb 2024 18:11:49 +0800 Subject: [PATCH 1471/2002] Committed on or around 2024/02/24 --- .../2024/Taipei_v_Kaohsiung_February_II.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py new file mode 100644 index 00000000..f55442b1 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [120654, 39865] + +label = ["啣撣\nTaipei City", "擃撣 Kaohsiung City\n(Capital City of the US political system in Taiwan)"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=0, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/02 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/LPccQ") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 4e70445ffe028db6c511b8b8f45b722058022448 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Feb 2024 18:12:40 +0800 Subject: [PATCH 1472/2002] Committed on or around 2024/02/24 --- .../2024/Taipei_v_Kaohsiung_February_II.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py index f55442b1..1946e350 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py @@ -12,7 +12,7 @@ region_num = [1, 2] position_vacancies = [120654, 39865] -label = ["啣撣\nTaipei City", "擃撣 Kaohsiung City\n(Capital City of the US political system in Taiwan)"] +label = ["啣撣\nTaipei City", "擃撣 Kaohsiung City\n(Capital City of the US \npolitical system in Taiwan)"] fig, ax = plt.subplots(figsize=(9, 9)) plt.xticks(region_num, labels=label, rotation=0, fontsize=12) From 5f1b8766685f273a8f39c0bf41b066044782d2be Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 24 Feb 2024 18:15:15 +0800 Subject: [PATCH 1473/2002] Committed on or around 2024/02/24 --- .../2024/Taipei_v_Kaohsiung_February_II.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py index 1946e350..6812f3b4 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_February_II.py @@ -12,7 +12,8 @@ region_num = [1, 2] position_vacancies = [120654, 39865] -label = ["啣撣\nTaipei City", "擃撣 Kaohsiung City\n(Capital City of the US \npolitical system in Taiwan)"] +label = ["啣撣 Taipei City\n(Temporary Capital City \nof Republic of China)", + "擃撣 Kaohsiung City\n(Capital City of the US \npolitical system in Taiwan)"] fig, ax = plt.subplots(figsize=(9, 9)) plt.xticks(region_num, labels=label, rotation=0, fontsize=12) From 61aa6cf31d618f9229f590900101ed60994ea251 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 28 Feb 2024 20:15:03 +0800 Subject: [PATCH 1474/2002] Committed on or around 2024/02/28 --- .../Month_over_month_2023/December.py | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py new file mode 100644 index 00000000..859ea641 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py @@ -0,0 +1,122 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov"] + +deaths = [[8, 25, 26, 25, 30, 25], # January + [14, 18, 15, 17, 31, 27], # February + [17, 34, 24, 34, 21, 31], # March + [6, 22, 17, 40, 21, 21], # April + [13, 16, 19, 28, 21, 33], # May + [6, 13, 13, 34, 24, 21], # June + [9, 21, 18, 23, 20, 25], # July + [6, 19, 17, 13, 24, 21], # August + [5, 20, 19, 20, 27, 25], # September + [10, 31, 25, 32, 31, 24], # October + [7, 27, 27, 26, 17, 34], # November + [8, 18, 25, 23, ] + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-11)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] # + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] # + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] # + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] # + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] # + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] # + deaths[11][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=20, transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From b078fc249f84b95cc70b1c134766b9737f70b330 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 28 Feb 2024 20:16:19 +0800 Subject: [PATCH 1475/2002] Committed on or around 2024/02/28 --- .../Road safety/Month_over_month_2023/December.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py index 859ea641..9b729188 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py @@ -7,7 +7,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month = ["Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov"] +month = ["Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"] deaths = [[8, 25, 26, 25, 30, 25], # January [14, 18, 15, 17, 31, 27], # February @@ -20,7 +20,7 @@ [5, 20, 19, 20, 27, 25], # September [10, 31, 25, 32, 31, 24], # October [7, 27, 27, 26, 17, 34], # November - [8, 18, 25, 23, ] + [8, 18, 25, 23, 25, 29], # December ] df = pd.DataFrame(data=deaths, @@ -73,7 +73,7 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-11)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-12)") axes.grid(True) # pyplot.grid [1][2] From 24bcd8b83695bddfb990f8f3641b6132ee83f83a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 28 Feb 2024 20:17:00 +0800 Subject: [PATCH 1476/2002] Committed on or around 2024/02/28 --- .../Road safety/Month_over_month_2023/December.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py index 9b729188..f643e055 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py @@ -78,12 +78,12 @@ axes.grid(True) # pyplot.grid [1][2] # Count the grand total automatically -sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] # + deaths[11][0] -sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] # + deaths[11][1] -sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] # + deaths[11][2] -sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] # + deaths[11][3] -sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] # + deaths[11][4] -sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] # + deaths[11][5] +sum_TPE = deaths[0][0] + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) From a66145f2411308a5c1be7ef0f404f1bbad032308 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 28 Feb 2024 20:18:29 +0800 Subject: [PATCH 1477/2002] Committed on or around 2024/02/28 --- .../Road safety/Month_over_month_2023/December.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py index f643e055..ead327ec 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py @@ -19,7 +19,7 @@ [6, 19, 17, 13, 24, 21], # August [5, 20, 19, 20, 27, 25], # September [10, 31, 25, 32, 31, 24], # October - [7, 27, 27, 26, 17, 34], # November + [7, 27, 27, 26, 21, 35], # November [8, 18, 25, 23, 25, 29], # December ] From 9bcfea766a7db7a57a4b3a2d41ef97174d793299 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 28 Feb 2024 20:19:28 +0800 Subject: [PATCH 1478/2002] Committed on or around 2024/02/28 --- .../Road safety/Month_over_month_2023/December.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py index ead327ec..9f805a78 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2023/December.py @@ -19,7 +19,7 @@ [6, 19, 17, 13, 24, 21], # August [5, 20, 19, 20, 27, 25], # September [10, 31, 25, 32, 31, 24], # October - [7, 27, 27, 26, 21, 35], # November + [7, 27, 30, 26, 21, 35], # November [8, 18, 25, 23, 25, 29], # December ] From 77248d082bb9eec14a96cb4c4627e14e4588b6a9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 28 Feb 2024 22:11:47 +0800 Subject: [PATCH 1479/2002] Committed on or around 2024/02/28 --- .../Road safety/Year_over_Year_2023.py | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_Year_2023.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_Year_2023.py b/The attainments and realizations of my dreams/Road safety/Year_over_Year_2023.py new file mode 100644 index 00000000..1aefd7de --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_Year_2023.py @@ -0,0 +1,124 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2009", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"] + +death = [[133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + [132, 266, 269, 283, 295, 333], # 2021 + [107, 307, 263, 308, 312, 373], # 2022 + [109, 264, 248, 315, 296, 317], # 2023 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2009-2022)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary, color=colour.CSS4_COLORS.get('palegreen'), linewidth=1, ecolor=colour.CSS4_COLORS.get('dodgerblue')) # Create a bar chart and its format. [7][11][12] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://roadsafety.tw/Dashboard/Custom?type=30交香鈭∩犖', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html +# 11. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar.html#matplotlib.axes.Axes.bar +# 12. https://matplotlib.org/stable/gallery/color/named_colors.html From 32d9dd38ee338dc142f6049d5ee50203327fe79d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 28 Feb 2024 22:13:13 +0800 Subject: [PATCH 1480/2002] Committed on or around 2024/02/28 --- .../Road safety/Year_over_Year_2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_Year_2023.py b/The attainments and realizations of my dreams/Road safety/Year_over_Year_2023.py index 1aefd7de..df923a67 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_Year_2023.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_Year_2023.py @@ -44,7 +44,7 @@ print(summary) cumulative_sum = pd.DataFrame(data=summary, - columns=["Accumulative Deaths (2009-2022)"], + columns=["Accumulative Deaths (2009-2023)"], index=administrative_duty) print(cumulative_sum) From aa4a2f1ad2e2bdffee91840f4eb42166811c14a4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Mar 2024 11:29:15 +0800 Subject: [PATCH 1481/2002] Committed on or around 2024/03/02 --- .../2024/February_selected_cities.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py new file mode 100644 index 00000000..c9b0c923 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [120654, 46792, 39865] + +label = ["啣撣\nTaipei City", "獢撣\nTaoyuan City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/02 啁撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/LPccQ") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From cd26aac85a07951caadea798c7fc2da51ce71e02 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Mar 2024 11:30:53 +0800 Subject: [PATCH 1482/2002] Committed on or around 2024/03/02 --- .../2024/February_selected_cities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py index c9b0c923..3334877b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py @@ -30,7 +30,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/02 啁撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) +plt.title("2024/02 啁撣瑞撩稞n the number of job openings in selected cities of Taiwan", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/LPccQ") From 40907f51b5a7db4be165f97002f0d36e7e4cd919 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 2 Mar 2024 11:31:28 +0800 Subject: [PATCH 1483/2002] Committed on or around 2024/03/02 --- .../2024/February_selected_cities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py index 3334877b..4ea0b6e7 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/February_selected_cities.py @@ -9,7 +9,7 @@ matplotlib.rc('font', family="MS Gothic") -region_num = [1, 2] +region_num = [1, 2, 3] position_vacancies = [120654, 46792, 39865] label = ["啣撣\nTaipei City", "獢撣\nTaoyuan City", "擃撣\nKaohsiung City"] From 9d7225acd85ab53bc2b84a74ce01a50ebd87e04c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:20:10 +0800 Subject: [PATCH 1484/2002] Committed on or around 2024/03/21 --- .../2024/March_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py new file mode 100644 index 00000000..64a81984 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2309+120654+69852+4581, 46792+32468+6475, 62539+10650+3860, 4681+7101+27385, 39865+4742] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/2tZVM") + +plt.ylim(39000, 180000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From fc8a0c8290a0f207293f0bae657427fddc93dd68 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:22:16 +0800 Subject: [PATCH 1485/2002] Committed on or around 2024/03/21 --- .../2024/March_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py index 64a81984..f856fa66 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2309+120654+69852+4581, 46792+32468+6475, 62539+10650+3860, 4681+7101+27385, 39865+4742] +position_vacancies = [2389+125781+73316+4680, 46792+32468+6475, 62539+10650+3860, 4681+7101+27385, 39865+4742] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From ea45ba835c1b98b09f302f8697bb81602606e439 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:23:10 +0800 Subject: [PATCH 1486/2002] Committed on or around 2024/03/21 --- .../2024/March_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py index f856fa66..a295852d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2389+125781+73316+4680, 46792+32468+6475, 62539+10650+3860, 4681+7101+27385, 39865+4742] +position_vacancies = [2389+125781+73316+4680, 49119+32468+6475, 62539+10650+3860, 4681+7101+27385, 39865+4742] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From d48063fea68a298700cb1f186d59cf508ffe44f8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:26:39 +0800 Subject: [PATCH 1487/2002] Committed on or around 2024/03/21 --- .../2024/March_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py index a295852d..fed7f8fb 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2389+125781+73316+4680, 49119+32468+6475, 62539+10650+3860, 4681+7101+27385, 39865+4742] +position_vacancies = [2389+125781+73316+4680, 49119+33992+6788, 65388+11072+3969, 4751+7130+28689, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 18ed2feb2f43b7a6bd83f4c8dbd0a793481331d5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:29:12 +0800 Subject: [PATCH 1488/2002] Committed on or around 2024/03/21 --- .../2024/March_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py index fed7f8fb..0ac98c8e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_metro_level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/2tZVM") -plt.ylim(39000, 180000) +plt.ylim(39000, 190000) img = image.imread('CC-BY.png') From 56d824c8f4e60d2d455418dde5b44893bd5b93ee Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:38:57 +0800 Subject: [PATCH 1489/2002] Committed on or around 2024/03/21 --- .../2024/March_selected_cities.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_selected_cities.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_selected_cities.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_selected_cities.py new file mode 100644 index 00000000..653210a2 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_selected_cities.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3] +position_vacancies = [125781, 49119, 41082] + +label = ["啣撣\nTaipei City", "獢撣\nTaoyuan City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/03 啁撣瑞撩稞n the number of job openings in selected cities of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/2tZVM") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From eada0b6e1d945f2bb6bab1c3a54b18086b381367 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:48:06 +0800 Subject: [PATCH 1490/2002] Committed on or around 2024/03/21 --- .../2024/March_at_city_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py new file mode 100644 index 00000000..d4685938 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [120654, 69852, 46792, 63539, 27385, 39865] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/02 啁撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/LPccQ") + +plt.ylim(25000, 110000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From d394b1d0e3158f7548464bea658f72a82f79b8b6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:55:21 +0800 Subject: [PATCH 1491/2002] Committed on or around 2024/03/21 --- .../2024/March_at_city_level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py index d4685938..95eef990 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [120654, 69852, 46792, 63539, 27385, 39865] +position_vacancies = [125781, 73316, 49119, 63539, 27385, 39865] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] @@ -34,7 +34,7 @@ plt.title("2024/02 啁撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: https://archive.ph/LPccQ") +plt.xlabel("鞈 Reference: https://archive.ph/2tZVM") plt.ylim(25000, 110000) From 8e6b7eab3f23b05b231a2beb90643e030c73f1ad Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 16:57:18 +0800 Subject: [PATCH 1492/2002] Committed on or around 2024/03/21 --- .../2024/March_at_city_level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py index 95eef990..0326c4fe 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [125781, 73316, 49119, 63539, 27385, 39865] +position_vacancies = [125781, 73316, 49119, 65388, 28689, 41028] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/02 啁撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) +plt.title("2024/03 啁撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/2tZVM") From 3178a473537f0031017f6dc6955b536d796a068d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 21 Mar 2024 17:01:35 +0800 Subject: [PATCH 1493/2002] Committed on or around 2024/03/21 --- .../2024/March_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py index 0326c4fe..25cae813 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/March_at_city_level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/2tZVM") -plt.ylim(25000, 110000) +plt.ylim(27000, 120000) img = image.imread('CC-BY.png') From 2f7bbdd36c400090ba793566b5063a91633cbb9f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 22 Mar 2024 22:10:59 +0800 Subject: [PATCH 1494/2002] Committed on or around 2024/03/22 --- .../2024/Taipei_v_Kaohsiung_March.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March.py new file mode 100644 index 00000000..3d551cbd --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [125781, 41082] + +label = ["啣撣\nTaipei City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/03 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/2tZVM") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 1e755effeaabaaa5e7ea35b97825b1efbebe47fb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 22 Mar 2024 22:14:13 +0800 Subject: [PATCH 1495/2002] Committed on or around 2024/03/22 --- .../2024/Taipei_v_Kaohsiung_March_II.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March_II.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March_II.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March_II.py new file mode 100644 index 00000000..9d789919 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March_II.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [125781, 41028] + +label = ["啣撣 Taipei City\n(Temporary Capital City \nof Republic of China)", + "擃撣 Kaohsiung City\n(Capital City of the US \npolitical system in Taiwan)"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=0, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/02 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/2tZVM") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From f4c832cc266b7f93d94ba7792a80512f0042aae0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 22 Mar 2024 22:15:22 +0800 Subject: [PATCH 1496/2002] Committed on or around 2024/03/22 --- .../2024/Taipei_v_Kaohsiung_March_II.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March_II.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March_II.py index 9d789919..056488c0 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March_II.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/Taipei_v_Kaohsiung_March_II.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/02 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) +plt.title("2024/03 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/2tZVM") From 0ed97d6ed4707cca5f42f1457c040d7cf25ef837 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 18:18:19 +0800 Subject: [PATCH 1497/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 0 .../Monthly_total_job_openings_by_region/2024/April/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/__init__.py new file mode 100644 index 00000000..e69de29b From 1ab6a15745e78336c4ab653f5f98660473ce8ce8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:29:25 +0800 Subject: [PATCH 1498/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index e69de29b..769b1e44 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2389+125781+73316+4680, 49119+33992+6788, 65388+11072+3969, 4751+7130+28689, 41028+4772] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/OTLpz") + +plt.ylim(39000, 190000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From e36de6905c1c5acf78acef7eadc4b25f06f1b6fc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:31:21 +0800 Subject: [PATCH 1499/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index 769b1e44..a6d45ddf 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2389+125781+73316+4680, 49119+33992+6788, 65388+11072+3969, 4751+7130+28689, 41028+4772] +position_vacancies = [2424+126989+73316+4680, 49119+33992+6788, 65388+11072+3969, 4751+7130+28689, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From d7b1c8c466babcf51238fd6bc6fefe650f09ca16 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:32:04 +0800 Subject: [PATCH 1500/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index a6d45ddf..30b8d647 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2424+126989+73316+4680, 49119+33992+6788, 65388+11072+3969, 4751+7130+28689, 41028+4772] +position_vacancies = [2424+126989+74305+4715, 49119+33992+6788, 65388+11072+3969, 4751+7130+28689, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 291f70566e984bf3fe26a372fc30110712f08fe9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:32:23 +0800 Subject: [PATCH 1501/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index 30b8d647..a6d6365a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2424+126989+74305+4715, 49119+33992+6788, 65388+11072+3969, 4751+7130+28689, 41028+4772] +position_vacancies = [2424+126989+74305+4715, 49849+33992+6788, 65388+11072+3969, 4751+7130+28689, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 75f8a6e84c56b3abb341e0de78c43421c6fdc78a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:33:01 +0800 Subject: [PATCH 1502/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index a6d6365a..65f62229 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2424+126989+74305+4715, 49849+33992+6788, 65388+11072+3969, 4751+7130+28689, 41028+4772] +position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65388+11072+3969, 4751+7130+28689, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From cc1378fc95627e1ce9258c769ad63ff23115d0fc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:33:37 +0800 Subject: [PATCH 1503/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index 65f62229..1178fcb6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65388+11072+3969, 4751+7130+28689, 41028+4772] +position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11072+3969, 4751+7130+28689, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From f729e291674ed0a2a362bb1513c5372500718d6d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:34:33 +0800 Subject: [PATCH 1504/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index 1178fcb6..bfe5e989 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11072+3969, 4751+7130+28689, 41028+4772] +position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11258+3969, 4751+7130+28689, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From dfc5557a7f40980327af08b9d8660faf5e3c71c1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:35:08 +0800 Subject: [PATCH 1505/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index bfe5e989..6b35b6da 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11258+3969, 4751+7130+28689, 41028+4772] +position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11258+3980, 4751+7130+28689, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From a9fab632246a4d315e4a2970d257ad5ac34ccb05 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:36:16 +0800 Subject: [PATCH 1506/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index 6b35b6da..8873a14a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11258+3980, 4751+7130+28689, 41028+4772] +position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11258+3980, 4791+7315+28689, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 48e30c662874bcc8ddefdfaf9b02f09a4ee56525 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:37:01 +0800 Subject: [PATCH 1507/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index 8873a14a..43d92116 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11258+3980, 4791+7315+28689, 41028+4772] +position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11258+3980, 4791+7315+28894, 41028+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From a1e83744e2be798f93aafa42f128b6cc0016cd56 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:38:30 +0800 Subject: [PATCH 1508/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py index 43d92116..2e9715b2 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11258+3980, 4791+7315+28894, 41028+4772] +position_vacancies = [2424+126989+74305+4715, 49849+34463+6907, 65629+11258+3980, 4791+7315+28894, 41321+4896] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From e56bca15e6568817241cf3034753df2badb0a234 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:40:41 +0800 Subject: [PATCH 1509/2002] Committed on or around 2024/04/23 --- .../2024/April/CC-BY.png | Bin 0 -> 1283 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/CC-BY.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Tue, 23 Apr 2024 23:53:08 +0800 Subject: [PATCH 1510/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_selected_cities.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_selected_cities.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_selected_cities.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_selected_cities.py new file mode 100644 index 00000000..fbe5b54f --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_selected_cities.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3] +position_vacancies = [126989, 49849, 41321] + +label = ["啣撣\nTaipei City", "獢撣\nTaoyuan City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/03 啁撣瑞撩稞n the number of job openings in selected cities of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/2tZVM") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 918537d7c41a4986edd12b18f664822228b86b0c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:53:45 +0800 Subject: [PATCH 1511/2002] Committed on or around 2024/04/23 --- .../2024/April/April_at_selected_cities.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_selected_cities.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_selected_cities.py index fbe5b54f..b172d5c4 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_selected_cities.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/April_at_selected_cities.py @@ -30,10 +30,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/03 啁撣瑞撩稞n the number of job openings in selected cities of Taiwan", fontsize=20) +plt.title("2024/04 啁撣瑞撩稞n the number of job openings in selected cities of Taiwan", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/2tZVM") +plt.xlabel("鞈 Reference https://archive.ph/OTLpz") plt.ylim(30000, 130000) From 36c67255ee267f84b1fb29da2beac47a3ad3f3e1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:56:21 +0800 Subject: [PATCH 1512/2002] Committed on or around 2024/04/23 --- .../2024/April/Taipei_v_Kaosiung.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaosiung.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaosiung.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaosiung.py new file mode 100644 index 00000000..fbd9147a --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaosiung.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [126989, 41321] + +label = ["啣撣\nTaipei City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/03 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/2tZVM") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From f4bf6a3a706aafdabe48aa67d993d09eda428ac8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:56:54 +0800 Subject: [PATCH 1513/2002] Committed on or around 2024/04/23 --- .../2024/April/Taipei_v_Kaosiung.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaosiung.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaosiung.py index fbd9147a..21f8fbf8 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaosiung.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaosiung.py @@ -30,10 +30,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/03 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) +plt.title("2024/04 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/2tZVM") +plt.xlabel("鞈 Reference https://archive.ph/OTLpz") plt.ylim(30000, 130000) From da113a8de556d3622bf666018392a301f85afc15 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:59:14 +0800 Subject: [PATCH 1514/2002] Committed on or around 2024/04/23 --- .../2024/April/Taipei_v_Kaohsiung_II.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaohsiung_II.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaohsiung_II.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaohsiung_II.py new file mode 100644 index 00000000..58994e62 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaohsiung_II.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [126989, 41321] + +label = ["啣撣 Taipei City\n(Temporary Capital City \nof Republic of China)", + "擃撣 Kaohsiung City\n(Capital City of the US \npolitical system in Taiwan)"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=0, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/03 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/OTLpz") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From c4c1885894492a9afff2429a7db970a7a636d6ab Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:59:36 +0800 Subject: [PATCH 1515/2002] Committed on or around 2024/04/23 --- .../2024/April/Taipei_v_Kaohsiung_II.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaohsiung_II.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaohsiung_II.py index 58994e62..489c7d78 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaohsiung_II.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/April/Taipei_v_Kaohsiung_II.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/03 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) +plt.title("2024/04 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/OTLpz") From f537c5661f6bc0a40fa7f356c9f0b056c956c686 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 24 Apr 2024 20:52:56 +0800 Subject: [PATCH 1516/2002] Committed on or around 2024/04/24 --- .../Month_over_month_2024/January.py | 111 ++++++++++++++++++ .../Month_over_month_2024/__init__.py | 0 2 files changed, 111 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2024/__init__.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py new file mode 100644 index 00000000..d12233b4 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py @@ -0,0 +1,111 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan"] + +deaths = [[8, 25, 26, 25, 30, 25], # January + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-04)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] # + deaths[1][0] + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] # + deaths[1][1] + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] # + deaths[1][2] + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] # + deaths[1][3] + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] # + deaths[1][4] + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] # + deaths[1][5] + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=20, transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/__init__.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/__init__.py new file mode 100644 index 00000000..e69de29b From e5f9130b595249ade61474782b601fcb07ce0bdd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 24 Apr 2024 20:54:10 +0800 Subject: [PATCH 1517/2002] Committed on or around 2024/04/24 --- .../Road safety/Month_over_month_2024/January.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py index d12233b4..0f72375d 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py @@ -62,7 +62,7 @@ axes.set_ylabel("The number of deaths") axes.set_xticks([]) -axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2023/01-04)") +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2024/01)") axes.grid(True) # pyplot.grid [1][2] From 4764f204fd0407cb03432a03d275db9fc7821371 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 24 Apr 2024 20:56:36 +0800 Subject: [PATCH 1518/2002] Committed on or around 2024/04/24 --- .../Road safety/Month_over_month_2024/CC-BY.png | Bin 0 -> 1283 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2024/CC-BY.png diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/CC-BY.png b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Wed, 24 Apr 2024 20:59:51 +0800 Subject: [PATCH 1519/2002] Committed on or around 2024/04/24 --- .../Road safety/Month_over_month_2024/January.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py index 0f72375d..84ea0768 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/January.py @@ -9,7 +9,7 @@ month = ["Jan"] -deaths = [[8, 25, 26, 25, 30, 25], # January +deaths = [[8, 22, 24, 28, 21, 38], # January ] df = pd.DataFrame(data=deaths, From 71528a7518a5b025f6c065a4b32431a91d30611a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 24 Apr 2024 23:35:07 +0800 Subject: [PATCH 1520/2002] Committed on or around 2024/04/24 --- ...rforming PCA with an Undercomplete Linear Autoencoder.py | 6 ++++++ .../Chapter17 - Autoencoders & GANs/__init__.py | 0 2 files changed, 6 insertions(+) create mode 100644 Hands on Machine Learning2/Chapter17 - Autoencoders & GANs/Performing PCA with an Undercomplete Linear Autoencoder.py create mode 100644 Hands on Machine Learning2/Chapter17 - Autoencoders & GANs/__init__.py diff --git a/Hands on Machine Learning2/Chapter17 - Autoencoders & GANs/Performing PCA with an Undercomplete Linear Autoencoder.py b/Hands on Machine Learning2/Chapter17 - Autoencoders & GANs/Performing PCA with an Undercomplete Linear Autoencoder.py new file mode 100644 index 00000000..c37506c7 --- /dev/null +++ b/Hands on Machine Learning2/Chapter17 - Autoencoders & GANs/Performing PCA with an Undercomplete Linear Autoencoder.py @@ -0,0 +1,6 @@ +import keras +import tensorflow as tf + +encoder = tf.keras.Sequential([keras.Layer.Dense(2, input_shape=[3])]) + + diff --git a/Hands on Machine Learning2/Chapter17 - Autoencoders & GANs/__init__.py b/Hands on Machine Learning2/Chapter17 - Autoencoders & GANs/__init__.py new file mode 100644 index 00000000..e69de29b From 055eff9f28dbbe921f9c595a53073fcb8da5a81f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 24 May 2024 23:38:30 +0800 Subject: [PATCH 1521/2002] Committed on or around 2024/05/24 --- .../Monthly_total_job_openings_by_region/2024/May/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/__init__.py new file mode 100644 index 00000000..e69de29b From 1bfd34650df9a04b9a820b1cd21b59369882574e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 May 2024 11:21:00 +0800 Subject: [PATCH 1522/2002] Committed on or around 2024/05/25 --- .../2024/May/May_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level.py new file mode 100644 index 00000000..d9b5a6c6 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2464+127764+75057+4738, 50702+34801+7110, 66764+11576+4078, 4900+7655+29402, 42027+5057] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/akuc4") + +plt.ylim(39000, 190000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From c5410c112aaf513d67cba701d2288434b5451d53 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 May 2024 11:24:48 +0800 Subject: [PATCH 1523/2002] Committed on or around 2024/05/25 --- .../2024/May/CC-BY.png | Bin 0 -> 1283 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/CC-BY.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Mon, 27 May 2024 23:52:00 +0800 Subject: [PATCH 1524/2002] Committed on or around 2024/05/27 --- .../Monthly remuneration.py | 0 .../Monthly remuneration/2023.py | 0 .../Monthly remuneration/__init__.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly remuneration.py create mode 100644 The attainments and realizations of my dreams/Monthly remuneration/2023.py create mode 100644 The attainments and realizations of my dreams/Monthly remuneration/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly remuneration.py b/The attainments and realizations of my dreams/Monthly remuneration.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly remuneration/2023.py b/The attainments and realizations of my dreams/Monthly remuneration/2023.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly remuneration/__init__.py b/The attainments and realizations of my dreams/Monthly remuneration/__init__.py new file mode 100644 index 00000000..e69de29b From 249c210e186f2f23cb84b09684ba4d359f55876f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 May 2024 23:58:00 +0800 Subject: [PATCH 1525/2002] Committed on or around 2024/05/27 --- .../Monthly remuneration.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/Monthly remuneration.py b/The attainments and realizations of my dreams/Monthly remuneration.py index e69de29b..8da34729 100644 --- a/The attainments and realizations of my dreams/Monthly remuneration.py +++ b/The attainments and realizations of my dreams/Monthly remuneration.py @@ -0,0 +1 @@ +# Average monthly salary by metro \ No newline at end of file From 9ff2657b51f0fd0f42ca0c01b1ef1669b39ed7bb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 May 2024 00:24:59 +0800 Subject: [PATCH 1526/2002] Committed on or around 2024/05/27 --- .../Month_over_month_2024/February.py | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Month_over_month_2024/February.py diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/February.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/February.py new file mode 100644 index 00000000..33a11593 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/February.py @@ -0,0 +1,112 @@ +import matplotlib.cm as cm +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +month = ["Jan"] + +deaths = [[8, 24, 25, 28, 21, 38], # January + [13, 24, 26, 24, 27, 23], # February + ] + +df = pd.DataFrame(data=deaths, + index=month, + columns=administrative_duty) +print(df) + +# Get some pastel shades for the colors[3] + +# Matplotlib has a number of built-in colormaps accessible via matplotlib.cm.get_cmap.[4] +cmap = cm.get_cmap("YlOrRd") # Colormap reference[5] +colors = cmap(np.linspace(0, 0.5, len(month))) +n_rows = len(deaths) + +index = np.arange(len(administrative_duty)) + 0.3 +bar_width = 0.4 + +figure, (axes, axes2) = plt.subplots(2, figsize=(9, 8)) + +# Initialize the vertical-offset for the stacked bar chart. +y_offset = np.zeros(len(administrative_duty)) + +# Plot bars and create text labels for the table +cell_text = [] +for row in range(n_rows): + plot = axes.bar(index, deaths[row], bar_width, bottom=y_offset, color=colors[row]) + # axes.bar_label(axes.containers[0], label_type='center') + y_offset = y_offset + deaths[row] + cell_text.append([x for x in y_offset]) + + i = 0 + + # Each iteration of this for loop labels each bar with corresponding value for the given year + for rectangle in plot: + height = rectangle.get_height() + axes.text(rectangle.get_x() + rectangle.get_width() / 2, y_offset[i], '%d' % int(y_offset[i]), + horizontalalignment='center', verticalalignment='bottom') + + i = i + 1 + +# Add a table at the bottom of the axes +the_table = axes.table(cellText=cell_text, + rowLabels=month, + rowColours=colors, + colLabels=administrative_duty, + loc='bottom') + +# Adjust layout to make room for the table: +plt.subplots_adjust(left=0.2, bottom=0.2) + +axes.set_ylabel("The number of deaths") +axes.set_xticks([]) +axes.set_title("The Cumulative Number of Deaths in Road Accident\nin Taiwan by Region (2024/02)") + +axes.grid(True) # pyplot.grid [1][2] + +# Count the grand total automatically +sum_TPE = deaths[0][0] + deaths[1][0] # + deaths[2][0] + deaths[3][0] + deaths[4][0] + deaths[5][0] + deaths[6][0] + deaths[7][0] + deaths[8][0] + deaths[9][0] + deaths[10][0] + deaths[11][0] +sum_NTP = deaths[0][1] + deaths[1][1] # + deaths[2][1] + deaths[3][1] + deaths[4][1] + deaths[5][1] + deaths[6][1] + deaths[7][1] + deaths[8][1] + deaths[9][1] + deaths[10][1] + deaths[11][1] +sum_TAO = deaths[0][2] + deaths[1][2] # + deaths[2][2] + deaths[3][2] + deaths[4][2] + deaths[5][2] + deaths[6][2] + deaths[7][2] + deaths[8][2] + deaths[9][2] + deaths[10][2] + deaths[11][2] +sum_TCH = deaths[0][3] + deaths[1][3] # + deaths[2][3] + deaths[3][3] + deaths[4][3] + deaths[5][3] + deaths[6][3] + deaths[7][3] + deaths[8][3] + deaths[9][3] + deaths[10][3] + deaths[11][3] +sum_TNA = deaths[0][4] + deaths[1][4] # + deaths[2][4] + deaths[3][4] + deaths[4][4] + deaths[5][4] + deaths[6][4] + deaths[7][4] + deaths[8][4] + deaths[9][4] + deaths[10][4] + deaths[11][4] +sum_KAO = deaths[0][5] + deaths[1][5] # + deaths[2][5] + deaths[3][5] + deaths[4][5] + deaths[5][5] + deaths[6][5] + deaths[7][5] + deaths[8][5] + deaths[9][5] + deaths[10][5] + deaths[11][5] + + +axes2.bar(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO]) +axes2.bar_label(axes2.containers[0], label_type='edge') +axes2.plot(administrative_duty, [sum_TPE, sum_NTP, sum_TAO, sum_TCH, sum_TNA, sum_KAO], '-o', color='orange') + +figure.tight_layout() + +# matplotlib text [1][2] +text = figure.text(0.5, 0.01, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=12, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=100, yo=700, alpha=0.9) + +# Insert text watermark +plt.text(x=0.6, y=0.5, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=20, transform=axes2.transAxes) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.grid.html +# 2. https://matplotlib.org/stable/gallery/subplots_axes_and_figures/geo_demo.html#sphx-glr-gallery-subplots-axes-and-figures-geo-demo-py +# 3. https://stackoverflow.com/a/51454824 +# 4. https://matplotlib.org/stable/tutorials/colors/colormaps.html +# 5. https://matplotlib.org/stable/gallery/color/colormap_reference.html + +# Adapted from: https://matplotlib.org/stable/gallery/misc/table_demo.html From 8975e9fc93fff7006aa21e17d1b1feb08ddf66fd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 May 2024 00:26:11 +0800 Subject: [PATCH 1527/2002] Committed on or around 2024/05/27 --- .../Road safety/Month_over_month_2024/February.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/February.py b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/February.py index 33a11593..10bfdc1e 100644 --- a/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/February.py +++ b/The attainments and realizations of my dreams/Road safety/Month_over_month_2024/February.py @@ -7,7 +7,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -month = ["Jan"] +month = ["Jan", "Feb"] deaths = [[8, 24, 25, 28, 21, 38], # January [13, 24, 26, 24, 27, 23], # February From fb97759c7a12fcca4e566ccd7cb945f338ed34b8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Jun 2024 21:32:45 +0800 Subject: [PATCH 1528/2002] Committed on or around 2024/06/28 --- .../2024/June/June_at_metro_level.py | 66 +++++++++++++++++++ .../2024/June/__init__.py | 0 2 files changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py new file mode 100644 index 00000000..527d0c36 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2550+127764+75057+4738, 50702+34801+7110, 66764+11576+4078, 4900+7655+29402, 42027+5057] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/5VB0A") + +plt.ylim(39000, 190000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/__init__.py new file mode 100644 index 00000000..e69de29b From 0f04320dd4cdb70e510889bb8e823813d6f705a3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Jun 2024 21:36:31 +0800 Subject: [PATCH 1529/2002] Committed on or around 2024/06/28 --- .../2024/June/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py index 527d0c36..bd467e8b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2550+127764+75057+4738, 50702+34801+7110, 66764+11576+4078, 4900+7655+29402, 42027+5057] +position_vacancies = [2550+128821+76220+4804, 50702+34801+7110, 66764+11576+4078, 4900+7655+29402, 42027+5057] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From e28c8855288902fb96658fca646ae4747f649980 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Jun 2024 21:45:01 +0800 Subject: [PATCH 1530/2002] Committed on or around 2024/06/28 --- .../2024/June/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py index bd467e8b..1e6a5023 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2550+128821+76220+4804, 50702+34801+7110, 66764+11576+4078, 4900+7655+29402, 42027+5057] +position_vacancies = [2550+128821+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7655+29402, 42027+5057] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From b0e863b9ce461f1c5546f9d926f620707a5b44fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Jun 2024 21:48:40 +0800 Subject: [PATCH 1531/2002] Committed on or around 2024/06/28 --- .../2024/June/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py index 1e6a5023..cd9a5956 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2550+128821+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7655+29402, 42027+5057] +position_vacancies = [2550+128821+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5057] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 1a57c48d07a80334b264f6cfd094406a6219797e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Jun 2024 21:57:20 +0800 Subject: [PATCH 1532/2002] Committed on or around 2024/06/28 --- .../2024/June/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py index cd9a5956..9c8017ba 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2550+128821+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5057] +position_vacancies = [2550+128821+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From f371292de5fbe023a4033e9af811d2bd868b4dd1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Jun 2024 22:10:34 +0800 Subject: [PATCH 1533/2002] Committed on or around 2024/06/28 --- .../2024/June/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py index 9c8017ba..c5408658 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2024/06 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/5VB0A") From 22bf443a5431d3f98c7fbac34175612a5bad1fff Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Jun 2024 22:14:40 +0800 Subject: [PATCH 1534/2002] Committed on or around 2024/06/28 --- .../2024/June/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py index c5408658..2e68acec 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2550+128821+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] +position_vacancies = [2550+128831+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 775e0db276021d612980252fcb94e349111dd3be Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Jun 2024 22:18:44 +0800 Subject: [PATCH 1535/2002] Committed on or around 2024/06/28 --- .../2024/June/CC-BY.png | Bin 0 -> 1283 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/CC-BY.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Fri, 28 Jun 2024 22:46:29 +0800 Subject: [PATCH 1536/2002] Committed on or around 2024/06/28 --- .../2024/June/June_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py index 2e68acec..7fd05f2a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/June/June_at_metro_level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/5VB0A") -plt.ylim(39000, 190000) +plt.ylim(40000, 200000) img = image.imread('CC-BY.png') From 384a878e7388188a3ce6f86cc84a3628b91bb801 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 2 Jul 2024 12:40:20 +0800 Subject: [PATCH 1537/2002] Committed on or around 2024/07/02 --- .../2024/May/May_at_metro_level2.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level2.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level2.py new file mode 100644 index 00000000..783ac14c --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level2.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2464+127764+75057+4738, 50702+34801+7110, 66764+11576+4078, 4900+7655+29402, 42027+5057] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/05 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/akuc4") + +plt.ylim(40000, 200000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 7ca2043bbabbe0dd9d5ab2179ddec886a986aa2e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 2 Jul 2024 12:41:49 +0800 Subject: [PATCH 1538/2002] Committed on or around 2024/07/02 --- .../2024/May/May_at_metro_level2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level2.py index 783ac14c..c6c7bbd0 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level2.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/May/May_at_metro_level2.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/akuc4") -plt.ylim(40000, 200000) +plt.ylim(39500, 195000) img = image.imread('CC-BY.png') From 80b5d292ed837965ab9274b0f4b93bff957f4244 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 00:58:45 +0800 Subject: [PATCH 1539/2002] Committed on or around 2024/07/19 --- .../2024/July/CC0.png | Bin 0 -> 980 bytes .../2024/July/__init__.py | 0 .../2024/July/cc-zero.png | Bin 0 -> 5749 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/CC0.png create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/__init__.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/cc-zero.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 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 Date: Fri, 19 Jul 2024 01:11:16 +0800 Subject: [PATCH 1540/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py new file mode 100644 index 00000000..8e969300 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2550+128831+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/07 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/5VB0A") + +plt.ylim(40000, 200000) + +img = image.imread('cc-zero.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain ∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From a38353a7bbe33aa2803874ecb84d8f06f613de5f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:11:27 +0800 Subject: [PATCH 1541/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index 8e969300..cf63d58b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -43,7 +43,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.6, y=0.7, s="CC0 Public Domain ∠甈", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n ∠甈", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From f74616553cf125e99a8c950de9d25d5bb9b50726 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:11:59 +0800 Subject: [PATCH 1542/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index cf63d58b..1066db1a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -43,7 +43,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n ∠甈", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From 9bd0493096a629738dd381d68da25a1ec08bc317 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:12:36 +0800 Subject: [PATCH 1543/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index 1066db1a..8406e855 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -38,7 +38,7 @@ plt.ylim(40000, 200000) -img = image.imread('cc-zero.png') +img = image.imread('CC0.png') plt.figimage(X=img, xo=800, yo=800, alpha=0.9) From 5f1811fc53906153196230f558d039293b6e6359 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:13:59 +0800 Subject: [PATCH 1544/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index 8406e855..105e2fba 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -38,7 +38,7 @@ plt.ylim(40000, 200000) -img = image.imread('CC0.png') +img = image.imread('CC0.png') # CC0.png downloaded from [6]. plt.figimage(X=img, xo=800, yo=800, alpha=0.9) @@ -56,6 +56,7 @@ # 4. https://www.google.com/search?q=matplotlib+bar+color # 5. https://www.python-graph-gallery.com/3-control-color-of-barplots # 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ # Notes: # 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, From 16851a3cd99c6eb0dfcba5c923ad2b98592e5243 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:15:26 +0800 Subject: [PATCH 1545/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index 105e2fba..077dd3a9 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2550+128831+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] +position_vacancies = [2491+128831+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] @@ -34,7 +34,7 @@ plt.title("2024/07 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/5VB0A") +plt.xlabel("鞈 Reference https://archive.ph/y83Zk") plt.ylim(40000, 200000) From 60df1a869778edcf4e71d504ca6b68f30076d6b3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:15:42 +0800 Subject: [PATCH 1546/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index 077dd3a9..fa7b204d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2491+128831+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] +position_vacancies = [2491+128332+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 3f59722ab8514f5a5cbbc4c88b226c0f3c70b7d1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:16:17 +0800 Subject: [PATCH 1547/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index fa7b204d..de82e8ea 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2491+128332+76220+4804, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] +position_vacancies = [2491+128332+76131+4689, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From f2f73f74ae4da546ab82c17a7857ea91984d2cd3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:17:00 +0800 Subject: [PATCH 1548/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index de82e8ea..1f942574 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2491+128332+76131+4689, 51404+35238+7004, 67413+11783+3960, 4991+7755+29815, 42698+5253] +position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67413+11783+3960, 4991+7755+29815, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From c4fbd2422420d55c2485074a140093beaab4a703 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:18:17 +0800 Subject: [PATCH 1549/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index 1f942574..e2a3975b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67413+11783+3960, 4991+7755+29815, 42698+5253] +position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3960, 4991+7755+29815, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From f6f3c5a588462b3aeadf7495dcc89d7ed4e0a8b6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:18:46 +0800 Subject: [PATCH 1550/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index e2a3975b..fd873582 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3960, 4991+7755+29815, 42698+5253] +position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4991+7755+29815, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 980e8660f9c800c54b9a7d1162547ed9a4cc1e73 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:19:33 +0800 Subject: [PATCH 1551/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index fd873582..84cda68b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4991+7755+29815, 42698+5253] +position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4983+7755+29815, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 6b14b7a0b0da322871b5b36c12fafa33307501d4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:23:18 +0800 Subject: [PATCH 1552/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index 84cda68b..0025f2df 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4983+7755+29815, 42698+5253] +position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4983+7684+29583, 42698+5253] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From b3f5d79eefe15e6a9e7262eb7a62ef7d49d7d2f7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:24:33 +0800 Subject: [PATCH 1553/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index 0025f2df..9b65e6af 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4983+7684+29583, 42698+5253] +position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4983+7684+29583, 42558+5161] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From d358422adc4b379d8e8939b29b6072eca233661a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:27:29 +0800 Subject: [PATCH 1554/2002] Committed on or around 2024/07/19 --- .../2024/July/July_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py index 9b65e6af..05d0474d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level.py @@ -38,7 +38,7 @@ plt.ylim(40000, 200000) -img = image.imread('CC0.png') # CC0.png downloaded from [6]. +img = image.imread('CC0.png') # CC0.png downloaded from [7]. plt.figimage(X=img, xo=800, yo=800, alpha=0.9) From 19b17d97bde106f2ff87d62668b44b9bb0b7e4ca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 31 Jul 2024 23:45:10 +0800 Subject: [PATCH 1555/2002] Committed on or around 2024/07/31 --- .../Annual local government expenditure/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/__init__.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/__init__.py b/The attainments and realizations of my dreams/Annual local government expenditure/__init__.py new file mode 100644 index 00000000..e69de29b From 6acb383c60ee5e08c637c823f38795414d6f0b78 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 1 Aug 2024 00:25:39 +0800 Subject: [PATCH 1556/2002] Committed on or around 2024/07/31 --- .../2021-2023.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py new file mode 100644 index 00000000..8edef11c --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -0,0 +1,32 @@ +# data from https://allisonhorst.github.io/palmerpenguins/ + +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2021", "2022", "2023") +penguin_means = { + 'Taipei': (18.35, 18.43, 14.98), + 'New Taipei': (38.79, 48.83, 47.50), + 'Kaohsiung': (189.95, 195.82, 217.19), +} + +x = np.arange(len(Year)) # the label locations +width = 0.25 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='constrained') + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('Length (mm)') +ax.set_title('Penguin attributes by species') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(0, 250) + +plt.show() \ No newline at end of file From 9c6c4b3012e31f81b85b17752770a556c7e41282 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 1 Aug 2024 00:38:47 +0800 Subject: [PATCH 1557/2002] Committed on or around 2024/07/31 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 8edef11c..ed11cc0f 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -24,7 +24,7 @@ # Add some text for labels, title and custom x-axis tick labels, etc. ax.set_ylabel('Length (mm)') -ax.set_title('Penguin attributes by species') +ax.set_title('Annual Expenditure by Local Government') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) ax.set_ylim(0, 250) From 4447676743a730a1b7b3110d53cdadf67db2b098 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:24:18 +0800 Subject: [PATCH 1558/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index ed11cc0f..ab213641 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -1,4 +1,5 @@ # data from https://allisonhorst.github.io/palmerpenguins/ +# source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html import matplotlib.pyplot as plt import numpy as np @@ -29,4 +30,4 @@ ax.legend(loc='upper left', ncols=3) ax.set_ylim(0, 250) -plt.show() \ No newline at end of file +plt.show() From 16ad1cdc8039c45171b66ca0525c459bca235b79 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:38:45 +0800 Subject: [PATCH 1559/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index ab213641..d4c43718 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -24,7 +24,7 @@ multiplier += 1 # Add some text for labels, title and custom x-axis tick labels, etc. -ax.set_ylabel('Length (mm)') +ax.set_ylabel('New Taiwan Dollar (billion)') ax.set_title('Annual Expenditure by Local Government') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) From 34d387229bb137beb28eba7e8c8981011bb94791 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:41:29 +0800 Subject: [PATCH 1560/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index d4c43718..074e8285 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -30,4 +30,6 @@ ax.legend(loc='upper left', ncols=3) ax.set_ylim(0, 250) +plt.xlabel("鞈 Reference https://archive.ph/OTLpz") + plt.show() From b2ca59529945780d126d21579b703e86217d4b3c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:42:02 +0800 Subject: [PATCH 1561/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 074e8285..c33c828f 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -30,6 +30,6 @@ ax.legend(loc='upper left', ncols=3) ax.set_ylim(0, 250) -plt.xlabel("鞈 Reference https://archive.ph/OTLpz") +plt.xlabel("Reference https://archive.ph/OTLpz") plt.show() From ea8d9bcb1f28d08552f4cb2c05d50d1236f08fcf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:52:53 +0800 Subject: [PATCH 1562/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index c33c828f..c340f863 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -30,6 +30,6 @@ ax.legend(loc='upper left', ncols=3) ax.set_ylim(0, 250) -plt.xlabel("Reference https://archive.ph/OTLpz") +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") plt.show() From 00a58842a339272f8b39b08583cd9b0c42c96ee2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:55:04 +0800 Subject: [PATCH 1563/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index c340f863..5f833c98 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -6,7 +6,7 @@ Year = ("2021", "2022", "2023") penguin_means = { - 'Taipei': (18.35, 18.43, 14.98), + 'Taipei': (18.35, 18.43, 190.71), 'New Taipei': (38.79, 48.83, 47.50), 'Kaohsiung': (189.95, 195.82, 217.19), } From 1b234e3b668c2f68b898ff761a7766c98db85efb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:55:35 +0800 Subject: [PATCH 1564/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 5f833c98..a4db9a48 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -7,7 +7,7 @@ Year = ("2021", "2022", "2023") penguin_means = { 'Taipei': (18.35, 18.43, 190.71), - 'New Taipei': (38.79, 48.83, 47.50), + 'New Taipei': (38.79, 48.83, 212.48), 'Kaohsiung': (189.95, 195.82, 217.19), } From 1ace3e95056debc2e5b18999b1a4e1c22e9797ea Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:56:04 +0800 Subject: [PATCH 1565/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index a4db9a48..edcb932e 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -8,7 +8,7 @@ penguin_means = { 'Taipei': (18.35, 18.43, 190.71), 'New Taipei': (38.79, 48.83, 212.48), - 'Kaohsiung': (189.95, 195.82, 217.19), + 'Kaohsiung': (189.95, 195.82, 169.57), } x = np.arange(len(Year)) # the label locations From d1e9bc37b7fe4206684fa4db826bc9cb3830110d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:57:57 +0800 Subject: [PATCH 1566/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index edcb932e..3938273f 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -28,7 +28,7 @@ ax.set_title('Annual Expenditure by Local Government') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) -ax.set_ylim(0, 250) +ax.set_ylim(50, 250) plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") From 098f82be2b88eea4adbc105da0569e7eaf8ecad4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:58:23 +0800 Subject: [PATCH 1567/2002] Committed on or around 2024/08/02 --- .idea/misc.xml | 5 ++++- .idea/other.xml | 1 + Python.iml | 6 ++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index d72fc4c6..571c616b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,9 +1,12 @@ + + - + diff --git a/.idea/other.xml b/.idea/other.xml index 640fd80b..ae2fc2eb 100644 --- a/.idea/other.xml +++ b/.idea/other.xml @@ -3,5 +3,6 @@ \ No newline at end of file diff --git a/Python.iml b/Python.iml index 436dd296..4fd3ff0d 100644 --- a/Python.iml +++ b/Python.iml @@ -2,8 +2,10 @@ - - + + + + From a33f539bbcdc082e59fb08eb480dbcbd4ab231ca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 20:58:41 +0800 Subject: [PATCH 1568/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 3938273f..ccb35851 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -28,7 +28,7 @@ ax.set_title('Annual Expenditure by Local Government') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) -ax.set_ylim(50, 250) +ax.set_ylim(80, 220) plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") From f871857be45e872ee79491c936b255ffbc570734 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 21:14:46 +0800 Subject: [PATCH 1569/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index ccb35851..038dab3c 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -6,9 +6,9 @@ Year = ("2021", "2022", "2023") penguin_means = { - 'Taipei': (18.35, 18.43, 190.71), - 'New Taipei': (38.79, 48.83, 212.48), - 'Kaohsiung': (189.95, 195.82, 169.57), + 'Taipei': (18.35, 177.48, 190.71), + 'New Taipei': (38.79, 197.57, 212.48), + 'Kaohsiung': (189.95, 160.85, 169.57), } x = np.arange(len(Year)) # the label locations From 85362fe2d6e752f1da3d88c27f368a35e08c2965 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 21:16:05 +0800 Subject: [PATCH 1570/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 038dab3c..cf6b42c8 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -1,6 +1,3 @@ -# data from https://allisonhorst.github.io/palmerpenguins/ -# source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html - import matplotlib.pyplot as plt import numpy as np @@ -33,3 +30,6 @@ plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html \ No newline at end of file From e001109d950178563527adcef6dd7eb7b72b2fbd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 21:27:27 +0800 Subject: [PATCH 1571/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index cf6b42c8..4fc3b1e5 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt import numpy as np -Year = ("2021", "2022", "2023") +Year = ("2021", "2023", "2024") penguin_means = { 'Taipei': (18.35, 177.48, 190.71), 'New Taipei': (38.79, 197.57, 212.48), From fde28d0d15f034641665128e8710c8e64ea70e34 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 21:42:04 +0800 Subject: [PATCH 1572/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 4fc3b1e5..49c44f02 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -3,9 +3,9 @@ Year = ("2021", "2023", "2024") penguin_means = { - 'Taipei': (18.35, 177.48, 190.71), + 'Taipei': (171.58, 177.48, 190.71), 'New Taipei': (38.79, 197.57, 212.48), - 'Kaohsiung': (189.95, 160.85, 169.57), + 'Kaohsiung': (151.44, 160.85, 169.57), } x = np.arange(len(Year)) # the label locations From dc95b1ac7b656cc1a66a2b5dce237638dc9665c6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 21:43:17 +0800 Subject: [PATCH 1573/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 49c44f02..0112e0f6 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -4,7 +4,7 @@ Year = ("2021", "2023", "2024") penguin_means = { 'Taipei': (171.58, 177.48, 190.71), - 'New Taipei': (38.79, 197.57, 212.48), + 'New Taipei': (186.48, 197.57, 212.48), 'Kaohsiung': (151.44, 160.85, 169.57), } From 59504d9d75cd2f5cb38919667ffd63bcf857c2a6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 21:44:15 +0800 Subject: [PATCH 1574/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 0112e0f6..826b9b26 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -22,7 +22,7 @@ # Add some text for labels, title and custom x-axis tick labels, etc. ax.set_ylabel('New Taiwan Dollar (billion)') -ax.set_title('Annual Expenditure by Local Government') +ax.set_title('Annual Expenditure by Local Government (Yearly distribution of taxpayer\'s money)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) ax.set_ylim(80, 220) From 9f4e0377642754aaef3ba975411ce1f028fdc59b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 21:45:00 +0800 Subject: [PATCH 1575/2002] Committed on or around 2024/08/02 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 826b9b26..7805c2db 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -22,7 +22,7 @@ # Add some text for labels, title and custom x-axis tick labels, etc. ax.set_ylabel('New Taiwan Dollar (billion)') -ax.set_title('Annual Expenditure by Local Government (Yearly distribution of taxpayer\'s money)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) ax.set_ylim(80, 220) From 6331e0bfb24c27b42099e033cc0ba00c46ce00ce Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 22:50:59 +0800 Subject: [PATCH 1576/2002] Committed on or around 2024/08/02 --- .idea/misc.xml | 3 +++ .idea/other.xml | 1 + 2 files changed, 4 insertions(+) diff --git a/.idea/misc.xml b/.idea/misc.xml index d72fc4c6..1f9c1698 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,8 @@ + + diff --git a/.idea/other.xml b/.idea/other.xml index 640fd80b..ae2fc2eb 100644 --- a/.idea/other.xml +++ b/.idea/other.xml @@ -3,5 +3,6 @@ \ No newline at end of file From c21e7f9aaf6ddfade2d73364d4f85ad753d21100 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 22:58:56 +0800 Subject: [PATCH 1577/2002] Revert "Committed on or around 2024/08/02" This reverts commit 098f82be2b88eea4adbc105da0569e7eaf8ecad4. --- .idea/misc.xml | 5 +---- .idea/other.xml | 1 - Python.iml | 6 ++---- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 571c616b..d72fc4c6 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,12 +1,9 @@ - - - + diff --git a/.idea/other.xml b/.idea/other.xml index ae2fc2eb..640fd80b 100644 --- a/.idea/other.xml +++ b/.idea/other.xml @@ -3,6 +3,5 @@ \ No newline at end of file diff --git a/Python.iml b/Python.iml index 4fd3ff0d..436dd296 100644 --- a/Python.iml +++ b/Python.iml @@ -2,10 +2,8 @@ - - - - + + From 1cf72a060eefff3f99da75021057362660f369b1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 23:52:32 +0800 Subject: [PATCH 1578/2002] Committed on or around 2024/08/02 --- .idea/.gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.idea/.gitignore b/.idea/.gitignore index 3fb4ad6c..ab965834 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -6,3 +6,9 @@ /dataSources.local.xml # Editor-based HTTP Client requests /httpRequests/ +# Computer-specific configurations +.idea/misc.xml +.idea/other.xml + +# References: +# https://gitbook.tw/chapters/using-git/ignore From d9111d028855904a8ceab793ae935e3c4f177a0e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 23:53:17 +0800 Subject: [PATCH 1579/2002] Committed on or around 2024/08/02 --- .idea/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.idea/.gitignore b/.idea/.gitignore index ab965834..73acea7b 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -9,6 +9,7 @@ # Computer-specific configurations .idea/misc.xml .idea/other.xml +Python.iml # References: # https://gitbook.tw/chapters/using-git/ignore From 8c1f38102ec1fd83bcbf1ad660f38dda9f505cd5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 2 Aug 2024 23:53:35 +0800 Subject: [PATCH 1580/2002] Committed on or around 2024/08/02 --- .idea/.gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.idea/.gitignore b/.idea/.gitignore index 73acea7b..27ba71a8 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -6,10 +6,10 @@ /dataSources.local.xml # Editor-based HTTP Client requests /httpRequests/ -# Computer-specific configurations +# Computer-specific configurations [1] .idea/misc.xml .idea/other.xml Python.iml # References: -# https://gitbook.tw/chapters/using-git/ignore +# 1. https://gitbook.tw/chapters/using-git/ignore From dc5fa77f81e1962d73df0c4f9b127d4faed893e6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Aug 2024 00:14:00 +0800 Subject: [PATCH 1581/2002] Changes to configuration files. --- .idea/misc.xml | 5 ++++- .idea/other.xml | 1 + Python.iml | 6 ++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index d72fc4c6..571c616b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,9 +1,12 @@ + + - + diff --git a/.idea/other.xml b/.idea/other.xml index 640fd80b..ae2fc2eb 100644 --- a/.idea/other.xml +++ b/.idea/other.xml @@ -3,5 +3,6 @@ \ No newline at end of file diff --git a/Python.iml b/Python.iml index 436dd296..4fd3ff0d 100644 --- a/Python.iml +++ b/Python.iml @@ -2,8 +2,10 @@ - - + + + + From f5d2cca7a63ad235d0f2cf192b5c72ee653f773f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Aug 2024 18:04:18 +0800 Subject: [PATCH 1582/2002] Committed on or around 2024/08/03 --- .../Annual local government expenditure/2021-2023.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py index 7805c2db..b47b5906 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt import numpy as np -Year = ("2021", "2023", "2024") +Year = ("2022", "2023", "2024") penguin_means = { 'Taipei': (171.58, 177.48, 190.71), 'New Taipei': (186.48, 197.57, 212.48), From a372f33c49dee6ab35e81bfc103e3811d7ecd053 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Aug 2024 18:19:26 +0800 Subject: [PATCH 1583/2002] Committed on or around 2024/08/03 --- .../{2021-2023.py => 2022-2024.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Annual local government expenditure/{2021-2023.py => 2022-2024.py} (100%) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024.py similarity index 100% rename from The attainments and realizations of my dreams/Annual local government expenditure/2021-2023.py rename to The attainments and realizations of my dreams/Annual local government expenditure/2022-2024.py From 2f7ebd3fc007d998c85032ef40a4d3c13a5c228d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Aug 2024 18:30:51 +0800 Subject: [PATCH 1584/2002] Committed on or around 2024/08/03 --- .../2022-2024_2.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py new file mode 100644 index 00000000..5e329f2f --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py @@ -0,0 +1,38 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2022", "2023", "2024") +penguin_means = { + 'Taipei': (171.58, 177.48, 190.71), + 'New Taipei': (186.48, 197.57, 212.48), + 'Taoyuan': (141.05, ), + 'Taichung': (151.20, ), + 'Tainan': (102.06, ), + 'Kaohsiung': (151.44, 160.85, 169.57), +} + +x = np.arange(len(Year)) # the label locations +width = 0.25 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='constrained') + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(80, 220) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html \ No newline at end of file From 873405417a8a9fd15d15048b377ae6fcd9557c77 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Aug 2024 23:30:51 +0800 Subject: [PATCH 1585/2002] Committed on or around 2024/08/03 --- .../Annual local government expenditure/2022-2024_2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py index 5e329f2f..867080b4 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py @@ -15,7 +15,7 @@ width = 0.25 # the width of the bars multiplier = 0 -fig, ax = plt.subplots(layout='constrained') +fig, ax = plt.subplots() for attribute, measurement in penguin_means.items(): offset = width * multiplier From c0ff26ef2b5ab9530b2e2ccb3f3522ee3c1beb23 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 Aug 2024 23:38:49 +0800 Subject: [PATCH 1586/2002] Committed on or around 2024/08/03 --- .../Annual local government expenditure/2022-2024_2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py index 867080b4..91e6eec5 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py @@ -15,7 +15,7 @@ width = 0.25 # the width of the bars multiplier = 0 -fig, ax = plt.subplots() +fig, ax = plt.subplots(layout='') for attribute, measurement in penguin_means.items(): offset = width * multiplier From b24dc076b05b7d46c0210e32d4d8caf97da84f4b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:09:58 +0800 Subject: [PATCH 1587/2002] Committed on or around 2024/08/04 --- .../Annual local government expenditure/2022-2024_2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py index 91e6eec5..cbd14207 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py @@ -15,7 +15,7 @@ width = 0.25 # the width of the bars multiplier = 0 -fig, ax = plt.subplots(layout='') +fig, ax = plt.subplots(layout='tight') for attribute, measurement in penguin_means.items(): offset = width * multiplier From b948b565f2b04ff7849ddd0ce4975ca6af3503f3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:11:02 +0800 Subject: [PATCH 1588/2002] Committed on or around 2024/08/04 --- .../Annual local government expenditure/2022-2024_2.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py index cbd14207..eb23d4f3 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_2.py @@ -15,7 +15,7 @@ width = 0.25 # the width of the bars multiplier = 0 -fig, ax = plt.subplots(layout='tight') +fig, ax = plt.subplots(layout='tight') # [1] for attribute, measurement in penguin_means.items(): offset = width * multiplier @@ -35,4 +35,5 @@ plt.show() # References: -# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html \ No newline at end of file +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html +# 1. https://matplotlib.org/stable/users/explain/axes/tight_layout_guide.html#tight-layout-guide From 42e0c10f7354962bc5cb7175459c8b4aa56ed172 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:17:40 +0800 Subject: [PATCH 1589/2002] Committed on or around 2024/08/04 --- .../2022-2024_3.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py new file mode 100644 index 00000000..5c3b58d0 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py @@ -0,0 +1,39 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2022", "2023", "2024") +penguin_means = { + 'Taipei': (171.58, 177.48, 190.71), + 'New Taipei': (186.48, 197.57, 212.48), + 'Taoyuan': (141.05, ), + 'Taichung': (151.20, ), + 'Tainan': (102.06, ), + 'Kaohsiung': (151.44, 160.85, 169.57), +} + +x = np.arange(len(Year)) # the label locations +width = 0.25 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='tight', figsize=(9, 9)) # [1] + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(80, 220) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html +# 1. https://matplotlib.org/stable/users/explain/axes/tight_layout_guide.html#tight-layout-guide From 23818119fb9cc9eb8ac9c0a3b060e3aeeaf4e6b5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:18:45 +0800 Subject: [PATCH 1590/2002] Committed on or around 2024/08/04 --- .../Annual local government expenditure/2022-2024_3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py index 5c3b58d0..a6e1b9cc 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py @@ -15,7 +15,7 @@ width = 0.25 # the width of the bars multiplier = 0 -fig, ax = plt.subplots(layout='tight', figsize=(9, 9)) # [1] +fig, ax = plt.subplots(layout='tight', figsize=(16, 9)) # [1] for attribute, measurement in penguin_means.items(): offset = width * multiplier From 12a39b419ce03ad050177ea18221cec363f54c5d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:21:18 +0800 Subject: [PATCH 1591/2002] Committed on or around 2024/08/04 --- .../Annual local government expenditure/2022-2024_3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py index a6e1b9cc..88939d5c 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py @@ -12,7 +12,7 @@ } x = np.arange(len(Year)) # the label locations -width = 0.25 # the width of the bars +width = 0.20 # the width of the bars multiplier = 0 fig, ax = plt.subplots(layout='tight', figsize=(16, 9)) # [1] From 782f5c58c534bcad7b497591b5fe3a1e54da2f49 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:21:33 +0800 Subject: [PATCH 1592/2002] Committed on or around 2024/08/04 --- .../Annual local government expenditure/2022-2024_3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py index 88939d5c..2b90e3b1 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py @@ -12,7 +12,7 @@ } x = np.arange(len(Year)) # the label locations -width = 0.20 # the width of the bars +width = 0.10 # the width of the bars multiplier = 0 fig, ax = plt.subplots(layout='tight', figsize=(16, 9)) # [1] From 61aa58ca196b0aa7cd9d6b817fc5f25303bc8655 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:25:00 +0800 Subject: [PATCH 1593/2002] Committed on or around 2024/08/04 --- .../Annual local government expenditure/2022-2024_3.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py index 2b90e3b1..0066e971 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py @@ -5,9 +5,9 @@ penguin_means = { 'Taipei': (171.58, 177.48, 190.71), 'New Taipei': (186.48, 197.57, 212.48), - 'Taoyuan': (141.05, ), - 'Taichung': (151.20, ), - 'Tainan': (102.06, ), + 'Taoyuan': (141.05, 142.99, ), + 'Taichung': (151.20, 150.48, ), + 'Tainan': (102.06, 102.56), 'Kaohsiung': (151.44, 160.85, 169.57), } From 29413c9691ca7e542383976f690e6c9954b457a3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:27:35 +0800 Subject: [PATCH 1594/2002] Committed on or around 2024/08/04 --- .../Annual local government expenditure/2022-2024_3.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py index 0066e971..f394fc00 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_3.py @@ -5,9 +5,9 @@ penguin_means = { 'Taipei': (171.58, 177.48, 190.71), 'New Taipei': (186.48, 197.57, 212.48), - 'Taoyuan': (141.05, 142.99, ), - 'Taichung': (151.20, 150.48, ), - 'Tainan': (102.06, 102.56), + 'Taoyuan': (141.05, 142.99, 156.80), + 'Taichung': (151.20, 150.48, 177.22), + 'Tainan': (102.06, 102.56, 116.94), 'Kaohsiung': (151.44, 160.85, 169.57), } From 78148ed72988de88063be486e1276aa4b2fe5006 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:33:27 +0800 Subject: [PATCH 1595/2002] Committed on or around 2024/08/04 --- .../2022-2024_4.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_4.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_4.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_4.py new file mode 100644 index 00000000..61e0c84d --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_4.py @@ -0,0 +1,39 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2022", "2023", "2024") +penguin_means = { + 'Taipei': (171.58, 177.48, 190.71), + 'New Taipei': (186.48, 197.57, 212.48), + 'Taoyuan': (141.05, 142.99, 156.80), + 'Taichung': (151.20, 150.48, 177.22), + 'Tainan': (102.06, 102.56, 116.94), + 'Kaohsiung': (151.44, 160.85, 169.57), +} + +x = np.arange(len(Year)) # the label locations +width = 0.10 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='tight', figsize=(14, 9)) # [1] + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(80, 220) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html +# 1. https://matplotlib.org/stable/users/explain/axes/tight_layout_guide.html#tight-layout-guide From 8de41ad035eec1075d4565daa54f3dd2919e1dd3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:41:00 +0800 Subject: [PATCH 1596/2002] Committed on or around 2024/08/04 --- .../2022-2024_5.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py new file mode 100644 index 00000000..5f75d993 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py @@ -0,0 +1,39 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2022", "2023", "2024") +penguin_means = { + 'Taipei': (171.58, 177.48, 190.71), + 'New Taipei': (186.48, 197.57, 212.48), + 'Taoyuan': (141.05, 142.99, 156.80), + 'Taichung': (151.20, 150.48, 177.22), + 'Tainan': (102.06, 102.56, 116.94), + 'Kaohsiung': (151.44, 160.85, 169.57), +} + +x = np.arange(len(Year)) # the label locations +width = 0.10 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='tight', figsize=(13, 8)) # [1] + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(80, 220) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html +# 1. https://matplotlib.org/stable/users/explain/axes/tight_layout_guide.html#tight-layout-guide From 09d9e6704e1c9201eff6b183f9feddaf2de3d614 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:41:42 +0800 Subject: [PATCH 1597/2002] Committed on or around 2024/08/04 --- .../Annual local government expenditure/2022-2024_5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py index 5f75d993..cd281d22 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py @@ -15,7 +15,7 @@ width = 0.10 # the width of the bars multiplier = 0 -fig, ax = plt.subplots(layout='tight', figsize=(13, 8)) # [1] +fig, ax = plt.subplots(layout='tight', figsize=(14, 8)) # [1] for attribute, measurement in penguin_means.items(): offset = width * multiplier From f6a842811a36e80ff1408564af4ee5f7008a1505 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:42:39 +0800 Subject: [PATCH 1598/2002] Committed on or around 2024/08/04 --- .../Annual local government expenditure/2022-2024_5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py index cd281d22..060d1190 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_5.py @@ -15,7 +15,7 @@ width = 0.10 # the width of the bars multiplier = 0 -fig, ax = plt.subplots(layout='tight', figsize=(14, 8)) # [1] +fig, ax = plt.subplots(layout='tight', figsize=(15, 7)) # [1] for attribute, measurement in penguin_means.items(): offset = width * multiplier From 7ba5b79af10798c1f1242246e92aac0facc10e6e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 4 Aug 2024 01:01:33 +0800 Subject: [PATCH 1599/2002] Committed on or around 2024/08/04 --- .../2022-2024_1.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_1.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_1.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_1.py new file mode 100644 index 00000000..9b29106a --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_1.py @@ -0,0 +1,35 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2022", "2023", "2024") +penguin_means = { + 'Taipei': (171.58, 177.48, 190.71), + 'New Taipei': (186.48, 197.57, 212.48), + 'Kaohsiung': (151.44, 160.85, 169.57), +} + +x = np.arange(len(Year)) # the label locations +width = 0.25 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='constrained') + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(150, 220) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html \ No newline at end of file From fc1d5c284b0232aa88b8351cb66906d53837eff5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 11:55:24 +0800 Subject: [PATCH 1600/2002] Committed on or around 2024/08/06 --- .../2022-2024_6.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_6.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_6.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_6.py new file mode 100644 index 00000000..620eac26 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_6.py @@ -0,0 +1,39 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2022", "2023", "2024") +penguin_means = { + 'Taipei': (171.58, 177.48, 190.71), + 'New Taipei': (186.48, 197.57, 212.48), + 'Taoyuan': (141.05, 142.99, 156.80), + 'Taichung': (151.20, 150.48, 177.22), + 'Tainan': (102.06, 102.56, 116.94), + 'Kaohsiung': (151.44, 160.85, 169.57), +} + +x = np.arange(len(Year)) # the label locations +width = 0.10 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='tight', figsize=(15, 7)) # [1] + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(100, 220) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html +# 1. https://matplotlib.org/stable/users/explain/axes/tight_layout_guide.html#tight-layout-guide From 847eb506bbf52605951d707f6f1ceef00af3bbeb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:34:55 +0800 Subject: [PATCH 1601/2002] Committed on or around 2024/08/06 --- .../Annual local government expenditure/2017-2024.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2017-2024.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2024.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2024.py new file mode 100644 index 00000000..e69de29b From 14cb4e86e61186dc930091df4a4de963ae8db9e6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:35:35 +0800 Subject: [PATCH 1602/2002] Committed on or around 2024/08/06 --- .../{2017-2024.py => 2017-2019.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Annual local government expenditure/{2017-2024.py => 2017-2019.py} (100%) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2024.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py similarity index 100% rename from The attainments and realizations of my dreams/Annual local government expenditure/2017-2024.py rename to The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py From 0a8f3bd3229460540e1bbab6b935b99e3f448ae3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:14:16 +0800 Subject: [PATCH 1603/2002] Committed on or around 2024/08/06 --- .../2017-2019.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py index e69de29b..90933cdd 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py @@ -0,0 +1,39 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2017", "2018", "2019") +penguin_means = { + 'Taipei': (171.58, 177.48, 190.71), + 'New Taipei': (186.48, 197.57, 212.48), + 'Taoyuan': (141.05, 142.99, 156.80), + 'Taichung': (151.20, 150.48, 177.22), + 'Tainan': (102.06, 102.56, 116.94), + 'Kaohsiung': (151.44, 129.16, 169.57), +} + +x = np.arange(len(Year)) # the label locations +width = 0.10 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='tight', figsize=(15, 7)) # [1] + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(100, 220) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html +# 1. https://matplotlib.org/stable/users/explain/axes/tight_layout_guide.html#tight-layout-guide From e5f34278d07c77977af9793c2f6b4af1b649d702 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:15:40 +0800 Subject: [PATCH 1604/2002] Committed on or around 2024/08/06 --- .../Annual local government expenditure/2017-2019.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py index 90933cdd..d1ddd18a 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py @@ -3,11 +3,11 @@ Year = ("2017", "2018", "2019") penguin_means = { - 'Taipei': (171.58, 177.48, 190.71), - 'New Taipei': (186.48, 197.57, 212.48), - 'Taoyuan': (141.05, 142.99, 156.80), - 'Taichung': (151.20, 150.48, 177.22), - 'Tainan': (102.06, 102.56, 116.94), + 'Taipei': (171.58, 172.55, 190.71), + 'New Taipei': (186.48, 162.03, 212.48), + 'Taoyuan': (141.05, 110.05, 156.80), + 'Taichung': (151.20, 129.68, 177.22), + 'Tainan': (102.06, 84.85, 116.94), 'Kaohsiung': (151.44, 129.16, 169.57), } From 2dba1c9b63a1a4905b07b68d20816bd9cc746672 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:25:10 +0800 Subject: [PATCH 1605/2002] Committed on or around 2024/08/06 --- .../Annual local government expenditure/2017-2019.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py index d1ddd18a..87bc8928 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py @@ -3,12 +3,12 @@ Year = ("2017", "2018", "2019") penguin_means = { - 'Taipei': (171.58, 172.55, 190.71), - 'New Taipei': (186.48, 162.03, 212.48), - 'Taoyuan': (141.05, 110.05, 156.80), - 'Taichung': (151.20, 129.68, 177.22), - 'Tainan': (102.06, 84.85, 116.94), - 'Kaohsiung': (151.44, 129.16, 169.57), + 'Taipei': (171.58, 172.55, 164.91), + 'New Taipei': (163.66, 162.03, 163.66), + 'Taoyuan': (114.51, 110.05, 114.51), + 'Taichung': (124.65, 129.68, 124.65), + 'Tainan': (86.25, 84.85, 86.25), + 'Kaohsiung': (133.48, 129.16, 133.48), } x = np.arange(len(Year)) # the label locations From fcd843f7d1f91d553431a851632dfca8db712676 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:29:12 +0800 Subject: [PATCH 1606/2002] Committed on or around 2024/08/06 --- .../Annual local government expenditure/2017-2019.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py index 87bc8928..25140181 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py @@ -3,12 +3,12 @@ Year = ("2017", "2018", "2019") penguin_means = { - 'Taipei': (171.58, 172.55, 164.91), - 'New Taipei': (163.66, 162.03, 163.66), - 'Taoyuan': (114.51, 110.05, 114.51), - 'Taichung': (124.65, 129.68, 124.65), - 'Tainan': (86.25, 84.85, 86.25), - 'Kaohsiung': (133.48, 129.16, 133.48), + 'Taipei': (165.75, 172.55, 164.91), + 'New Taipei': (156.31, 162.03, 163.66), + 'Taoyuan': (102.23, 110.05, 114.51), + 'Taichung': (126.77, 129.68, 124.65), + 'Tainan': (79.84, 84.85, 86.25), + 'Kaohsiung': (128.79, 129.16, 133.48), } x = np.arange(len(Year)) # the label locations From 9f2027eaa5e400899f5365e022c07766d8c31b77 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:49:49 +0800 Subject: [PATCH 1607/2002] Committed on or around 2024/08/06 --- .../Annual local government expenditure/2017-2019.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py index 25140181..61278e52 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py @@ -28,7 +28,7 @@ ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) -ax.set_ylim(100, 220) +ax.set_ylim(80, 200) plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") From e8261b2448e22c000954c6b16480246cc9ea7b7e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:50:15 +0800 Subject: [PATCH 1608/2002] Committed on or around 2024/08/06 --- .../Annual local government expenditure/2017-2019.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py index 61278e52..817a2603 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py @@ -28,7 +28,7 @@ ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) -ax.set_ylim(80, 200) +ax.set_ylim(80, 180) plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") From cff071551d28315f34eab0132c9a915d324893b4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:51:38 +0800 Subject: [PATCH 1609/2002] Committed on or around 2024/08/06 --- .../Annual local government expenditure/2017-2019.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py index 817a2603..922b5333 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py @@ -28,7 +28,7 @@ ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) -ax.set_ylim(80, 180) +ax.set_ylim(70, 180) plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") From 5930964a65a6a413347d0d2bcb181ff7266a411b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:52:00 +0800 Subject: [PATCH 1610/2002] Committed on or around 2024/08/06 --- .../Annual local government expenditure/2017-2019.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py index 922b5333..8d1f1f2b 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2017-2019.py @@ -28,7 +28,7 @@ ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) -ax.set_ylim(70, 180) +ax.set_ylim(75, 180) plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") From 8471741cb9f3db198a0417bd7ffd8425318d34b6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:02:33 +0800 Subject: [PATCH 1611/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py new file mode 100644 index 00000000..5367d192 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -0,0 +1,38 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2022", "2023", "2024") +penguin_means = { + 'Greater Taipei': (171.58, 177.48, 190.71), + 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99, 156.80), + 'Taichung': (151.20, 150.48, 177.22), + 'Tainan': (102.06, 102.56, 116.94), + 'Kaohsiung': (151.44, 160.85, 169.57), +} + +x = np.arange(len(Year)) # the label locations +width = 0.10 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='tight', figsize=(15, 7)) # [1] + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(100, 220) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html +# 1. https://matplotlib.org/stable/users/explain/axes/tight_layout_guide.html#tight-layout-guide From 52dc888128fb5931576e538144cee6fcce231775 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:03:13 +0800 Subject: [PATCH 1612/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 5367d192..a35b6148 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -5,9 +5,9 @@ penguin_means = { 'Greater Taipei': (171.58, 177.48, 190.71), 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99, 156.80), - 'Taichung': (151.20, 150.48, 177.22), - 'Tainan': (102.06, 102.56, 116.94), - 'Kaohsiung': (151.44, 160.85, 169.57), + 'Taichung-Changhua-Nantou': (151.20, 150.48, 177.22), + 'Yunlin-Chiayi-Tainan': (102.06, 102.56, 116.94), + 'Kaohsiung-Pingtung': (151.44, 160.85, 169.57), } x = np.arange(len(Year)) # the label locations From ffc5457295984b93ea3313397ef48b81ab846aa0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:07:30 +0800 Subject: [PATCH 1613/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index a35b6148..9c2096cb 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -3,11 +3,13 @@ Year = ("2022", "2023", "2024") penguin_means = { + # Taipei + New Taipei + Keelung 'Greater Taipei': (171.58, 177.48, 190.71), 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99, 156.80), 'Taichung-Changhua-Nantou': (151.20, 150.48, 177.22), - 'Yunlin-Chiayi-Tainan': (102.06, 102.56, 116.94), - 'Kaohsiung-Pingtung': (151.44, 160.85, 169.57), + # Yunlin + Chiayi county + Chiayi city + Tainan + 'Yunlin-Chiayi-Tainan': (102.06, 102.56, 40.43+116.94), + 'Kaohsiung-Pingtung': (151.44, 160.85, 169.57+55.85), } x = np.arange(len(Year)) # the label locations From ecebb4c26308061ef1ca504f922f501333c30fd1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:09:40 +0800 Subject: [PATCH 1614/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 9c2096cb..efbc359b 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -5,10 +5,11 @@ penguin_means = { # Taipei + New Taipei + Keelung 'Greater Taipei': (171.58, 177.48, 190.71), + # Taoyuan + Hsinchu county + Hsinchu city + Miaoli 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99, 156.80), - 'Taichung-Changhua-Nantou': (151.20, 150.48, 177.22), + 'Taichung-Changhua-Nantou': (151.20, 150.48, 177.22+64.45+33.72), # Yunlin + Chiayi county + Chiayi city + Tainan - 'Yunlin-Chiayi-Tainan': (102.06, 102.56, 40.43+116.94), + 'Yunlin-Chiayi-Tainan': (102.06, 102.56, 40.43+33.22+19.35+116.94), 'Kaohsiung-Pingtung': (151.44, 160.85, 169.57+55.85), } From 1050769c2fcaed2b8ac24b0e2032b85a7296aa86 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:11:49 +0800 Subject: [PATCH 1615/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index efbc359b..3aa4e1a0 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -4,9 +4,9 @@ Year = ("2022", "2023", "2024") penguin_means = { # Taipei + New Taipei + Keelung - 'Greater Taipei': (171.58, 177.48, 190.71), + 'Greater Taipei': (171.58, 177.48, 190.71+212.48+24.09), # Taoyuan + Hsinchu county + Hsinchu city + Miaoli - 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99, 156.80), + 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99, 156.80+35.43+28.11+25.05), 'Taichung-Changhua-Nantou': (151.20, 150.48, 177.22+64.45+33.72), # Yunlin + Chiayi county + Chiayi city + Tainan 'Yunlin-Chiayi-Tainan': (102.06, 102.56, 40.43+33.22+19.35+116.94), From dbd8e08bcff4205f948db62d985757dddae433c4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:12:28 +0800 Subject: [PATCH 1616/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 3aa4e1a0..536c99ae 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -30,7 +30,7 @@ ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) -ax.set_ylim(100, 220) +ax.set_ylim(200, 420) plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") From f73bdf4905efb7b1ee45b97cf4f79be91d2816f1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:13:53 +0800 Subject: [PATCH 1617/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 536c99ae..2e53b2a0 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -30,7 +30,7 @@ ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) -ax.set_ylim(200, 420) +ax.set_ylim(200, 450) plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") From d4fcb0a9e86a8fcbe12a4a6b1724f4b81b6b73c7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:15:46 +0800 Subject: [PATCH 1618/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 2e53b2a0..a6b71c70 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -4,7 +4,7 @@ Year = ("2022", "2023", "2024") penguin_means = { # Taipei + New Taipei + Keelung - 'Greater Taipei': (171.58, 177.48, 190.71+212.48+24.09), + 'Greater Taipei': (171.58, 177.48+197.57+19.63, 190.71+212.48+24.09), # Taoyuan + Hsinchu county + Hsinchu city + Miaoli 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99, 156.80+35.43+28.11+25.05), 'Taichung-Changhua-Nantou': (151.20, 150.48, 177.22+64.45+33.72), From b2e22a0b543a09c6609caac5eab2a9fb148bece1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:17:41 +0800 Subject: [PATCH 1619/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index a6b71c70..a286b7b0 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -6,7 +6,7 @@ # Taipei + New Taipei + Keelung 'Greater Taipei': (171.58, 177.48+197.57+19.63, 190.71+212.48+24.09), # Taoyuan + Hsinchu county + Hsinchu city + Miaoli - 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99, 156.80+35.43+28.11+25.05), + 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99+34.82+25.51+22.98, 156.80+35.43+28.11+25.05), 'Taichung-Changhua-Nantou': (151.20, 150.48, 177.22+64.45+33.72), # Yunlin + Chiayi county + Chiayi city + Tainan 'Yunlin-Chiayi-Tainan': (102.06, 102.56, 40.43+33.22+19.35+116.94), From f6a0a3c3bdb3bf1e2fd5ebae4d66ac642d32decc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:18:23 +0800 Subject: [PATCH 1620/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index a286b7b0..98b14ec7 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -7,7 +7,7 @@ 'Greater Taipei': (171.58, 177.48+197.57+19.63, 190.71+212.48+24.09), # Taoyuan + Hsinchu county + Hsinchu city + Miaoli 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99+34.82+25.51+22.98, 156.80+35.43+28.11+25.05), - 'Taichung-Changhua-Nantou': (151.20, 150.48, 177.22+64.45+33.72), + 'Taichung-Changhua-Nantou': (151.20, 150.48+58.89+24.92, 177.22+64.45+33.72), # Yunlin + Chiayi county + Chiayi city + Tainan 'Yunlin-Chiayi-Tainan': (102.06, 102.56, 40.43+33.22+19.35+116.94), 'Kaohsiung-Pingtung': (151.44, 160.85, 169.57+55.85), From 86a946df84692ea75d12dd3ff2da9476fdcb874a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:19:35 +0800 Subject: [PATCH 1621/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 98b14ec7..c9a46add 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -9,7 +9,7 @@ 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99+34.82+25.51+22.98, 156.80+35.43+28.11+25.05), 'Taichung-Changhua-Nantou': (151.20, 150.48+58.89+24.92, 177.22+64.45+33.72), # Yunlin + Chiayi county + Chiayi city + Tainan - 'Yunlin-Chiayi-Tainan': (102.06, 102.56, 40.43+33.22+19.35+116.94), + 'Yunlin-Chiayi-Tainan': (102.06, 36.30+27.41+18.38+102.56, 40.43+33.22+19.35+116.94), 'Kaohsiung-Pingtung': (151.44, 160.85, 169.57+55.85), } From 72bbc2e660c6af107eab525396def0cdc44a1d44 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:20:01 +0800 Subject: [PATCH 1622/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index c9a46add..721b54c9 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -10,7 +10,7 @@ 'Taichung-Changhua-Nantou': (151.20, 150.48+58.89+24.92, 177.22+64.45+33.72), # Yunlin + Chiayi county + Chiayi city + Tainan 'Yunlin-Chiayi-Tainan': (102.06, 36.30+27.41+18.38+102.56, 40.43+33.22+19.35+116.94), - 'Kaohsiung-Pingtung': (151.44, 160.85, 169.57+55.85), + 'Kaohsiung-Pingtung': (151.44, 160.85+50.33, 169.57+55.85), } x = np.arange(len(Year)) # the label locations From 8aea39d2e38a1c27132e5263e1b77b6b1cb216e3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:24:57 +0800 Subject: [PATCH 1623/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 721b54c9..f3889c5a 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -4,9 +4,12 @@ Year = ("2022", "2023", "2024") penguin_means = { # Taipei + New Taipei + Keelung - 'Greater Taipei': (171.58, 177.48+197.57+19.63, 190.71+212.48+24.09), + 'Greater Taipei': (171.58+186.48+21.15, 177.48+197.57+19.63, 190.71+212.48+24.09), # Taoyuan + Hsinchu county + Hsinchu city + Miaoli - 'Taoyuan-Hsinchu_Miaoli': (141.05, 142.99+34.82+25.51+22.98, 156.80+35.43+28.11+25.05), + 'Taoyuan-Hsinchu_Miaoli': (141.05+32.36+25.61+21.56, + 142.99+34.82+25.51+22.98, + 156.80+35.43+28.11+25.05), + 'Taichung-Changhua-Nantou': (151.20, 150.48+58.89+24.92, 177.22+64.45+33.72), # Yunlin + Chiayi county + Chiayi city + Tainan 'Yunlin-Chiayi-Tainan': (102.06, 36.30+27.41+18.38+102.56, 40.43+33.22+19.35+116.94), From dbf1e1f5f07b977d469f564db338f3abab8d17b3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:26:10 +0800 Subject: [PATCH 1624/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index f3889c5a..90ace16b 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -11,6 +11,7 @@ 156.80+35.43+28.11+25.05), 'Taichung-Changhua-Nantou': (151.20, 150.48+58.89+24.92, 177.22+64.45+33.72), + # Yunlin + Chiayi county + Chiayi city + Tainan 'Yunlin-Chiayi-Tainan': (102.06, 36.30+27.41+18.38+102.56, 40.43+33.22+19.35+116.94), 'Kaohsiung-Pingtung': (151.44, 160.85+50.33, 169.57+55.85), From f02bcb9a7239f10e33e847037a9a10e3a7962933 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:26:46 +0800 Subject: [PATCH 1625/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 90ace16b..d16117ca 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -10,7 +10,7 @@ 142.99+34.82+25.51+22.98, 156.80+35.43+28.11+25.05), - 'Taichung-Changhua-Nantou': (151.20, 150.48+58.89+24.92, 177.22+64.45+33.72), + 'Taichung-Changhua-Nantou': (151.20+56.60+28.90, 150.48+58.89+24.92, 177.22+64.45+33.72), # Yunlin + Chiayi county + Chiayi city + Tainan 'Yunlin-Chiayi-Tainan': (102.06, 36.30+27.41+18.38+102.56, 40.43+33.22+19.35+116.94), From 842a2aca83d4bb60b2db132496326f1ca2d136fc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:28:26 +0800 Subject: [PATCH 1626/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index d16117ca..c197a0b1 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -13,7 +13,9 @@ 'Taichung-Changhua-Nantou': (151.20+56.60+28.90, 150.48+58.89+24.92, 177.22+64.45+33.72), # Yunlin + Chiayi county + Chiayi city + Tainan - 'Yunlin-Chiayi-Tainan': (102.06, 36.30+27.41+18.38+102.56, 40.43+33.22+19.35+116.94), + 'Yunlin-Chiayi-Tainan': (37.30+28.35+16.62+102.06, + 36.30+27.41+18.38+102.56, + 40.43+33.22+19.35+116.94), 'Kaohsiung-Pingtung': (151.44, 160.85+50.33, 169.57+55.85), } From 69f9abb44261f47d699d51a867da7d823d0a4414 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:28:35 +0800 Subject: [PATCH 1627/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index c197a0b1..cb069b99 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -16,6 +16,7 @@ 'Yunlin-Chiayi-Tainan': (37.30+28.35+16.62+102.06, 36.30+27.41+18.38+102.56, 40.43+33.22+19.35+116.94), + 'Kaohsiung-Pingtung': (151.44, 160.85+50.33, 169.57+55.85), } From f425d9829346654a72116383f323681a7b65a591 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:29:12 +0800 Subject: [PATCH 1628/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index cb069b99..ec01a7fc 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -37,7 +37,7 @@ ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) -ax.set_ylim(200, 450) +ax.set_ylim(150, 450) plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") From f402ddc373e1fadc2ef55d4368ad356f14c6ffb6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:29:54 +0800 Subject: [PATCH 1629/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index ec01a7fc..d670cd09 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -17,7 +17,7 @@ 36.30+27.41+18.38+102.56, 40.43+33.22+19.35+116.94), - 'Kaohsiung-Pingtung': (151.44, 160.85+50.33, 169.57+55.85), + 'Kaohsiung-Pingtung': (151.44+47.11, 160.85+50.33, 169.57+55.85), } x = np.arange(len(Year)) # the label locations From 44afaccb5b269e6b810fbf3b4e510374ab609602 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:35:04 +0800 Subject: [PATCH 1630/2002] Committed on or around 2024/08/06 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index d670cd09..8e8f85c7 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -34,7 +34,7 @@ # Add some text for labels, title and custom x-axis tick labels, etc. ax.set_ylabel('New Taiwan Dollar (billion)') -ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_title('Annual Expenditure by Local Governments\n (Yearly distribution of taxpayer\'s money at metro level)') ax.set_xticks(x + width, Year) ax.legend(loc='upper left', ncols=3) ax.set_ylim(150, 450) From 1c8cd97ac9a413f56d7b2b56afe6a6a841e1823a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:42:45 +0800 Subject: [PATCH 1631/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py new file mode 100644 index 00000000..7133da16 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py @@ -0,0 +1,67 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950 + 11902 + 12217)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2024/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births (Unit: 1 baby)") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) + +plt.text(x=0.2, y=0.4, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation='30', + transform=axe.transAxes) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From fda954aecd665c94a58bb3e48bb5b923f2b4e5f5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:53:19 +0800 Subject: [PATCH 1632/2002] Committed on or around 2024/08/15 --- .../Birth rate by region/2024_monthly.py | 279 ++++++++++++++++++ .../Birth rate by region/__init__.py | 0 2 files changed, 279 insertions(+) create mode 100644 The attainments and realizations of my dreams/Birth rate by region/2024_monthly.py create mode 100644 The attainments and realizations of my dreams/Birth rate by region/__init__.py diff --git a/The attainments and realizations of my dreams/Birth rate by region/2024_monthly.py b/The attainments and realizations of my dreams/Birth rate by region/2024_monthly.py new file mode 100644 index 00000000..81ba2931 --- /dev/null +++ b/The attainments and realizations of my dreams/Birth rate by region/2024_monthly.py @@ -0,0 +1,279 @@ +""" +======================= +The Lifecycle of a Plot +======================= + +This tutorial aims to show the beginning, middle, and end of a single +visualization using Matplotlib. We'll begin with some raw data and +end by saving a figure of a customized visualization. Along the way we try +to highlight some neat features and best-practices using Matplotlib. + +.. currentmodule:: matplotlib + +.. note:: + + This tutorial is based on + `this excellent blog post + `_ + by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf. + +A note on the explicit vs. implicit interfaces +============================================== + +Matplotlib has two interfaces. For an explanation of the trade-offs between the +explicit and implicit interfaces see :ref:`api_interfaces`. + +In the explicit object-oriented (OO) interface we directly utilize instances of +:class:`axes.Axes` to build up the visualization in an instance of +:class:`figure.Figure`. In the implicit interface, inspired by and modeled on +MATLAB, we use a global state-based interface which is encapsulated in the +:mod:`.pyplot` module to plot to the "current Axes". See the :doc:`pyplot +tutorials ` for a more in-depth look at the +pyplot interface. + +Most of the terms are straightforward but the main thing to remember +is that: + +* The `.Figure` is the final image, and may contain one or more `~.axes.Axes`. +* The `~.axes.Axes` represents an individual plot (not to be confused with + `~.axis.Axis`, which refers to the x-, y-, or z-axis of a plot). + +We call methods that do the plotting directly from the Axes, which gives +us much more flexibility and power in customizing our plot. + +.. note:: + + In general, use the explicit interface over the implicit pyplot interface + for plotting. + +Our data +======== + +We'll use the data from the post from which this tutorial was derived. +It contains sales information for a number of companies. + +""" + +# sphinx_gallery_thumbnail_number = 10 +import numpy as np +import matplotlib.pyplot as plt + + +data = {'Taipei City': 109438.50, + 'New Taipei City': 103569.59, + 'Fritsch, Russel and Anderson': 112214.71, + 'Jerde-Hilpert': 112591.43, + 'Keeling LLC': 100934.30, + 'Koepp Ltd': 103660.54, + 'Kulas Inc': 137351.96, + 'Trantow-Barrows': 123381.38, + 'White-Trantow': 135841.99, + 'Will LLC': 104437.60} + +group_data = list(data.values()) +group_names = list(data.keys()) +group_mean = np.mean(group_data) + +############################################################################### +# Getting started +# =============== +# +# This data is naturally visualized as a barplot, with one bar per +# group. To do this with the object-oriented approach, we first generate +# an instance of :class:`figure.Figure` and +# :class:`axes.Axes`. The Figure is like a canvas, and the Axes +# is a part of that canvas on which we will make a particular visualization. +# +# .. note:: +# +# Figures can have multiple axes on them. For information on how to do this, +# see the :doc:`Tight Layout tutorial +# `. + +fig, ax = plt.subplots() + +############################################################################### +# Now that we have an Axes instance, we can plot on top of it. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# Controlling the style +# ===================== +# +# There are many styles available in Matplotlib in order to let you tailor +# your visualization to your needs. To see a list of styles, we can use +# :mod:`.style`. + +print(plt.style.available) + +############################################################################### +# You can activate a style with the following: + +plt.style.use('fivethirtyeight') + +############################################################################### +# Now let's remake the above plot to see how it looks: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) + +############################################################################### +# The style controls many things, such as color, linewidths, backgrounds, +# etc. +# +# Customizing the plot +# ==================== +# +# Now we've got a plot with the general look that we want, so let's fine-tune +# it so that it's ready for print. First let's rotate the labels on the x-axis +# so that they show up more clearly. We can gain access to these labels +# with the :meth:`axes.Axes.get_xticklabels` method: + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() + +############################################################################### +# If we'd like to set the property of many items at once, it's useful to use +# the :func:`pyplot.setp` function. This will take a list (or many lists) of +# Matplotlib objects, and attempt to set some style element of each one. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# It looks like this cut off some of the labels on the bottom. We can +# tell Matplotlib to automatically make room for elements in the figures +# that we create. To do this we set the ``autolayout`` value of our +# rcParams. For more information on controlling the style, layout, and +# other features of plots with rcParams, see +# :doc:`/tutorials/introductory/customizing`. + +plt.rcParams.update({'figure.autolayout': True}) + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +############################################################################### +# Next, we add labels to the plot. To do this with the OO interface, +# we can use the :meth:`.Artist.set` method to set properties of this +# Axes object. + +fig, ax = plt.subplots() +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') + +############################################################################### +# We can also adjust the size of this plot using the :func:`pyplot.subplots` +# function. We can do this with the *figsize* keyword argument. +# +# .. note:: +# +# While indexing in NumPy follows the form (row, column), the *figsize* +# keyword argument follows the form (width, height). This follows +# conventions in visualization, which unfortunately are different from those +# of linear algebra. + +fig, ax = plt.subplots(figsize=(8, 4)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') + +############################################################################### +# For labels, we can specify custom formatting guidelines in the form of +# functions. Below we define a function that takes an integer as input, and +# returns a string as an output. When used with `.Axis.set_major_formatter` or +# `.Axis.set_minor_formatter`, they will automatically create and use a +# :class:`ticker.FuncFormatter` class. +# +# For this function, the ``x`` argument is the original tick label and ``pos`` +# is the tick position. We will only use ``x`` here but both arguments are +# needed. + + +def currency(x, pos): + """The two arguments are the value and tick position""" + if x >= 1e6: + s = '${:1.1f}M'.format(x*1e-6) + else: + s = '${:1.0f}K'.format(x*1e-3) + return s + +############################################################################### +# We can then apply this function to the labels on our plot. To do this, +# we use the ``xaxis`` attribute of our axes. This lets you perform +# actions on a specific axis on our plot. + +fig, ax = plt.subplots(figsize=(6, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') +ax.xaxis.set_major_formatter(currency) + +############################################################################### +# Combining multiple visualizations +# ================================= +# +# It is possible to draw multiple plot elements on the same instance of +# :class:`axes.Axes`. To do this we simply need to call another one of +# the plot methods on that axes object. + +fig, ax = plt.subplots(figsize=(8, 8)) +ax.barh(group_names, group_data) +labels = ax.get_xticklabels() +plt.setp(labels, rotation=45, horizontalalignment='right') + +# Add a vertical line, here we set the style in the function call +ax.axvline(group_mean, ls='--', color='r') + +# Annotate new companies +for group in [3, 5, 8]: + ax.text(145000, group, "New Company", fontsize=10, + verticalalignment="center") + +# Now we move our title up since it's getting a little cramped +ax.title.set(y=1.05) + +ax.set(xlim=[-10000, 140000], xlabel='Total Revenue', ylabel='Company', + title='Company Revenue') +ax.xaxis.set_major_formatter(currency) +ax.set_xticks([0, 25e3, 50e3, 75e3, 100e3, 125e3]) +fig.subplots_adjust(right=.1) + +plt.show() + +############################################################################### +# Saving our plot +# =============== +# +# Now that we're happy with the outcome of our plot, we want to save it to +# disk. There are many file formats we can save to in Matplotlib. To see +# a list of available options, use: + +print(fig.canvas.get_supported_filetypes()) + +############################################################################### +# We can then use the :meth:`figure.Figure.savefig` in order to save the figure +# to disk. Note that there are several useful flags we show below: +# +# * ``transparent=True`` makes the background of the saved figure transparent +# if the format supports it. +# * ``dpi=80`` controls the resolution (dots per square inch) of the output. +# * ``bbox_inches="tight"`` fits the bounds of the figure to our plot. + +# Uncomment this line to save the figure. +# fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight") diff --git a/The attainments and realizations of my dreams/Birth rate by region/__init__.py b/The attainments and realizations of my dreams/Birth rate by region/__init__.py new file mode 100644 index 00000000..e69de29b From 8015c1c531c22567c312953dbbd42b7f0fd5accf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:58:12 +0800 Subject: [PATCH 1633/2002] Committed on or around 2024/08/15 --- .../Age ratio by region/2023.py | 57 +++++++++++++++++++ .../Age ratio by region/__init__.py | 0 2 files changed, 57 insertions(+) create mode 100644 The attainments and realizations of my dreams/Age ratio by region/2023.py create mode 100644 The attainments and realizations of my dreams/Age ratio by region/__init__.py diff --git a/The attainments and realizations of my dreams/Age ratio by region/2023.py b/The attainments and realizations of my dreams/Age ratio by region/2023.py new file mode 100644 index 00000000..f6e1a213 --- /dev/null +++ b/The attainments and realizations of my dreams/Age ratio by region/2023.py @@ -0,0 +1,57 @@ +import matplotlib.pyplot as plt +import numpy as np + +category_names = ['Strongly disagree', 'Disagree', + 'Neither agree nor disagree', 'Agree', 'Strongly agree'] +results = { + 'Question 1': [10, 15, 17, 32, 26], + 'Question 2': [26, 22, 29, 10, 13], + 'Question 3': [35, 37, 7, 2, 19], + 'Question 4': [32, 11, 9, 15, 33], + 'Question 5': [21, 29, 5, 5, 40], + 'Question 6': [8, 19, 5, 30, 38] +} + + +def survey(results, category_names): + """ + Parameters + ---------- + results : dict + A mapping from question labels to a list of answers per category. + It is assumed all lists contain the same number of entries and that + it matches the length of *category_names*. + category_names : list of str + The category labels. + """ + labels = list(results.keys()) + data = np.array(list(results.values())) + data_cum = data.cumsum(axis=1) + category_colors = plt.colormaps['RdYlGn']( + np.linspace(0.15, 0.85, data.shape[1])) + + fig, ax = plt.subplots(figsize=(9.2, 5)) + ax.invert_yaxis() + ax.xaxis.set_visible(False) + ax.set_xlim(0, np.sum(data, axis=1).max()) + + for i, (colname, color) in enumerate(zip(category_names, category_colors)): + widths = data[:, i] + starts = data_cum[:, i] - widths + rects = ax.barh(labels, widths, left=starts, height=0.5, + label=colname, color=color) + + r, g, b, _ = color + text_color = 'white' if r * g * b < 0.5 else 'darkgrey' + ax.bar_label(rects, label_type='center', color=text_color) + ax.legend(ncols=len(category_names), bbox_to_anchor=(0, 1), + loc='lower left', fontsize='small') + + return fig, ax + + +survey(results, category_names) +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/lines_bars_and_markers/horizontal_barchart_distribution.html#sphx-glr-gallery-lines-bars-and-markers-horizontal-barchart-distribution-py \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Age ratio by region/__init__.py b/The attainments and realizations of my dreams/Age ratio by region/__init__.py new file mode 100644 index 00000000..e69de29b From 57c680980346a77deff4e9e310ca0e0073310ee8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:01:59 +0800 Subject: [PATCH 1634/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py index 7133da16..96b5b694 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py @@ -56,7 +56,7 @@ plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) plt.text(x=0.2, y=0.4, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, - ha='center', va='center', rotation='30', + ha='center', va='center', rotation=30, #rotation='30', transform=axe.transAxes) plt.show() From 66d61c1d7bc5b7811a28d4f5443a81e6c1f6f9c3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:10:10 +0800 Subject: [PATCH 1635/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py index 96b5b694..786b7522 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py @@ -11,16 +11,16 @@ matplotlib.rc('font', family="MS Gothic") year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29] + 24, 25, 26, 27, 28, 29, 30] number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, - 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, 138986, 135571, (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950 + 11902 + 12217)] label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", - "'18", "'19", "'20", "'21", "'22"] + "'18", "'19", "'20", "'21", "'22", "23"] fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) From 481ad596cab636033cbc348ab80cc72956002982 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:11:50 +0800 Subject: [PATCH 1636/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py index 786b7522..beb259c5 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30] + 24, 25, 26, 27, 28, 29, 30, 31] number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, From 934f1d003ebd2aa564f7e66e4babc0857efefee6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:12:18 +0800 Subject: [PATCH 1637/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py index beb259c5..2c21379f 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py @@ -20,7 +20,7 @@ label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", - "'18", "'19", "'20", "'21", "'22", "23"] + "'18", "'19", "'20", "'21", "'22", "23", "24"] fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) From af79f1a7e80008ad68f0a46452645a91f72ecf20 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:34:32 +0800 Subject: [PATCH 1638/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py index 2c21379f..8a017e15 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py @@ -16,7 +16,7 @@ number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, 138986, 135571, - (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950 + 11902 + 12217)] + (63874)] label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", @@ -44,7 +44,7 @@ fig.tight_layout() # [3] text = fig.text(0.5, 0.7, - 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + 'Reference:https://www.ris.gov.tw/app/en/3910\nhttps://ec.ltn.com.tw/article/paper/1656441', horizontalalignment='center', verticalalignment='center', size=13, From 786fb0f63ffcdf7f7a68120120f02b9f38245cc5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:37:53 +0800 Subject: [PATCH 1639/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py index 8a017e15..1425443c 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py @@ -44,7 +44,7 @@ fig.tight_layout() # [3] text = fig.text(0.5, 0.7, - 'Reference:https://www.ris.gov.tw/app/en/3910\nhttps://ec.ltn.com.tw/article/paper/1656441', + 'Reference:https://www.ris.gov.tw/app/en/3910\nhttps://ec.ltn.com.tw/article/paper/1656441\nhttps://www.ris.gov.tw/app/portal/2121?sn=24222733', horizontalalignment='center', verticalalignment='center', size=13, From 00385579ba2f2f62627f50367a0b161f166b7f75 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:38:13 +0800 Subject: [PATCH 1640/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py index 1425443c..10a3c888 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py @@ -16,7 +16,7 @@ number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, 138986, 135571, - (63874)] + (63874+10424)] label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", From 1bb1d9e4055ad627509d19468b5aa350d84738e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 15:41:19 +0800 Subject: [PATCH 1641/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py index 10a3c888..9883566f 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July.py @@ -33,7 +33,7 @@ axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) -axe.set_title(label="1994-2024/07 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) +axe.set_title(label="1994-2024/07 啁撟游漲箇鈭箸稞n Annual number of new-born neonates in Taiwan", fontsize=20) axe.set_ylabel("The number of births (Unit: 1 baby)") axe.set_xlabel("Year") From 03476b61fa486259f1097298c78c07a971991bf4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:13:59 +0800 Subject: [PATCH 1642/2002] Committed on or around 2024/08/15 --- .../2024/July/July_at_metro_level_2.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level_2.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level_2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level_2.py new file mode 100644 index 00000000..73bb4ea3 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_metro_level_2.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4983+7684+29583, 42558+5161] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/07 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/y83Zk") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 0f0f459dcf89611d73af467a9f67e673431a4f14 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:17:43 +0800 Subject: [PATCH 1643/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July_2.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July_2.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July_2.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July_2.py new file mode 100644 index 00000000..f9b58c57 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July_2.py @@ -0,0 +1,67 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, 138986, 135571, + (63874+10424)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22", "23", "24"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2024/07 啁撟游漲箇鈭箸稞n Annual number of new-born neonates in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births (Unit: 1 baby)") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'References:https://www.ris.gov.tw/app/en/3910\nhttps://ec.ltn.com.tw/article/paper/1656441\nhttps://www.ris.gov.tw/app/portal/2121?sn=24222733', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) + +plt.text(x=0.2, y=0.4, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, #rotation='30', + transform=axe.transAxes) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From 2f1ed74b308263889bd29f36a43845c35049be2d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:29:32 +0800 Subject: [PATCH 1644/2002] Committed on or around 2024/08/15 --- .../Annual number of births in Taiwan/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/CC0.png diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/CC0.png b/The attainments and realizations of my dreams/Annual number of births in Taiwan/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Thu, 15 Aug 2024 16:29:59 +0800 Subject: [PATCH 1645/2002] Committed on or around 2024/08/15 --- .../The number of births 1994-2024_July_2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July_2.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July_2.py index f9b58c57..2af993f1 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July_2.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_July_2.py @@ -51,11 +51,11 @@ fontproperties='MS Gothic') -img = image.imread('CC-BY.png') +img = image.imread('CC0.png') plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) -plt.text(x=0.2, y=0.4, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.2, y=0.4, s="CC0 No Copyright\n∠甈", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, #rotation='30', transform=axe.transAxes) From 55caf48ac4a50a93bc211a993b0087853834589e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:00:49 +0800 Subject: [PATCH 1646/2002] Committed on or around 2024/08/15 --- ... number of births 1994-2022_September_2.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_September_2.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_September_2.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_September_2.py new file mode 100644 index 00000000..63e5517e --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2022_September_2.py @@ -0,0 +1,67 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, + (13137 + 9617 + 12788 + 11222 + 9442 + 10943 + 10950 + 11902 + 12217)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2022/09 啁撟游漲箇鈭箸稞n Annual number of births in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births (Unit: 1 baby)") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'Reference:https://statis.moi.gov.tw/micst/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) + +plt.text(x=0.2, y=0.4, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=axe.transAxes) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From d476be987f1104c084a16d15eab834a2a76ce865 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 21 Aug 2024 23:45:43 +0800 Subject: [PATCH 1647/2002] Committed on or around 2024/08/21 --- .../2024/August/August_at_metro_level.py | 67 ++++++++++++++++++ .../2024/August/CC0.png | Bin 0 -> 980 bytes .../2024/August/__init__.py | 0 3 files changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/CC0.png create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py new file mode 100644 index 00000000..605c5a51 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4983+7684+29583, 42558+5161] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/1k2LD") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Wed, 21 Aug 2024 23:47:17 +0800 Subject: [PATCH 1648/2002] Committed on or around 2024/08/21 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index 605c5a51..25459999 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2491+128332+76131+4689, 51385+34823+6945, 67834+11667+3871, 4983+7684+29583, 42558+5161] +position_vacancies = [2496+126957+75446+4622, 51385+34823+6945, 67834+11667+3871, 4983+7684+29583, 42558+5161] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 9e4b9d9ccdff5da38d39dc869dd79d4a76dd539c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 21 Aug 2024 23:53:19 +0800 Subject: [PATCH 1649/2002] Committed on or around 2024/08/21 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index 25459999..ab035e6a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2496+126957+75446+4622, 51385+34823+6945, 67834+11667+3871, 4983+7684+29583, 42558+5161] +position_vacancies = [2496+126957+75446+4622, 51052+34823+6945, 67834+11667+3871, 4983+7684+29583, 42558+5161] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 4487c496f5433475f32faab84d26fa64b5f53224 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:03:57 +0800 Subject: [PATCH 1650/2002] Committed on or around 2024/08/21 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index ab035e6a..068f7021 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2496+126957+75446+4622, 51052+34823+6945, 67834+11667+3871, 4983+7684+29583, 42558+5161] +position_vacancies = [2496+126957+75446+4622, 51052+34783+6937, 67834+11667+3871, 4983+7684+29583, 42558+5161] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 2a36785f273380575492ef202c2f9da43e5098ef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:04:17 +0800 Subject: [PATCH 1651/2002] Committed on or around 2024/08/21 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index 068f7021..7ff9b5b3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2496+126957+75446+4622, 51052+34783+6937, 67834+11667+3871, 4983+7684+29583, 42558+5161] +position_vacancies = [2496+126957+75446+4622, 51052+34783+6937, 66953+11667+3871, 4983+7684+29583, 42558+5161] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 77f5b805ca3fcc2fda3fab91dc572b850e061e54 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:04:40 +0800 Subject: [PATCH 1652/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index 7ff9b5b3..b2b667da 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2496+126957+75446+4622, 51052+34783+6937, 66953+11667+3871, 4983+7684+29583, 42558+5161] +position_vacancies = [2496+126957+75446+4622, 51052+34783+6937, 66953+11542+3871, 4983+7684+29583, 42558+5161] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 033af50b5217e61ec05b8a47c75ede7c5234c874 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:05:33 +0800 Subject: [PATCH 1653/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index b2b667da..e3793636 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2496+126957+75446+4622, 51052+34783+6937, 66953+11542+3871, 4983+7684+29583, 42558+5161] +position_vacancies = [2496+126957+75446+4622, 51052+34783+6937, 66953+11542+3795, 5007+7684+29583, 42558+5161] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 44d65b9fe282e91e64f1e9d9b708ed97185a19b3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:06:04 +0800 Subject: [PATCH 1654/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index e3793636..2de5ca67 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2496+126957+75446+4622, 51052+34783+6937, 66953+11542+3795, 5007+7684+29583, 42558+5161] +position_vacancies = [2496+126957+75446, 51052+34783+6937, 66953+11542+3795, 5007+7684+29583, 42558+5161] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 7727f23bf68554998b60adc415f90c35a5739ef1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:28:36 +0800 Subject: [PATCH 1655/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index 2de5ca67..4379f522 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2496+126957+75446, 51052+34783+6937, 66953+11542+3795, 5007+7684+29583, 42558+5161] +position_vacancies = [2496+126957+75446, 51052+34783+6937, 66953+11542+3795, 5007+7515+29165, 42558+5161] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 19b3b47beebd99e41099e7dee93dfce4a33c13a7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:29:08 +0800 Subject: [PATCH 1656/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index 4379f522..44bd489b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2496+126957+75446, 51052+34783+6937, 66953+11542+3795, 5007+7515+29165, 42558+5161] +position_vacancies = [2496+126957+75446, 51052+34783+6937, 66953+11542+3795, 5007+7515+29165, 41932+5178] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From e4a7720f1c8a7e74b1498e0ab5f7f4933aa56867 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 00:29:41 +0800 Subject: [PATCH 1657/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py index 44bd489b..3ba31379 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_metro_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2496+126957+75446, 51052+34783+6937, 66953+11542+3795, 5007+7515+29165, 41932+5178] +position_vacancies = [2496+126957+75446+4622, 51052+34783+6937, 66953+11542+3795, 5007+7515+29165, 41932+5178] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 5ccfc5909edff219ea26ad2b0f91dd6c846bdf48 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 23:53:11 +0800 Subject: [PATCH 1658/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_city_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py new file mode 100644 index 00000000..b39febb8 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [108202, 60340, 44310, 54606, 25545, 35594] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/22 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(25500, 100000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 47e08f322e32036bc6f23962cca1f0d513402467 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 23:55:31 +0800 Subject: [PATCH 1659/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_city_level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py index b39febb8..88963e15 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py @@ -31,10 +31,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/22 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) +plt.title("2024/08 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: https://web.archive.org/web/20221223175247/https://www.104.com.tw/jobs/main/category/?jobsource=category") +plt.xlabel("鞈 Reference: https://archive.ph/1k2LD") plt.ylim(25500, 100000) From 0b5ecb02ff8a0be912978835e6c15918e4b17ec9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 23:57:24 +0800 Subject: [PATCH 1660/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py index 88963e15..35b6bc82 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [108202, 60340, 44310, 54606, 25545, 35594] +position_vacancies = [126957, 75446, 51052, 66953, 29165, 41923] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 8d3d14f9b1edfde32961c8bf14bc0723c7314262 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 22 Aug 2024 23:58:36 +0800 Subject: [PATCH 1661/2002] Committed on or around 2024/08/22 --- .../2024/August/August_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py index 35b6bc82..b5ed239e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/1k2LD") -plt.ylim(25500, 100000) +plt.ylim(29000, 120000) img = image.imread('CC0.png') From 75d916e7be4d0d08dbc95fe0b955d3d8407cb983 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:03:43 +0800 Subject: [PATCH 1662/2002] Committed on or around 2024/08/23 --- .../2024/August/August_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py index b5ed239e..4d89ed7f 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py @@ -43,7 +43,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.6, y=0.7, s="CC0 Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From cab42c6316c94b64e1f8dd8cd290f848831a5548 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:04:10 +0800 Subject: [PATCH 1663/2002] Committed on or around 2024/08/23 --- .../2024/August/August_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py index 4d89ed7f..b72b841c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py @@ -43,7 +43,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.6, y=0.7, s="CC0 Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From 1865275a7c8da6aabda94453dcd0d6ea1b682775 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:07:10 +0800 Subject: [PATCH 1664/2002] Committed on or around 2024/08/23 --- .../2024/August/August_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py index b72b841c..5a057bb1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/August/August_at_city_level.py @@ -43,7 +43,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From d36653b61f4125e12aaef55da248df179e164f12 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:43:36 +0800 Subject: [PATCH 1665/2002] Committed on or around 2024/08/23 --- .../2024/July/July_at_city_level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py new file mode 100644 index 00000000..f5119944 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [128332, 76131, 51382, 66953, 29165, 41923] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/07 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/y83Zk") + +plt.ylim(29000, 120000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From fd28d85786aa4b5b7efdf5fc3040b712795b7664 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:44:25 +0800 Subject: [PATCH 1666/2002] Committed on or around 2024/08/23 --- .../2024/July/July_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py index f5119944..afeb0fd6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128332, 76131, 51382, 66953, 29165, 41923] +position_vacancies = [128332, 76131, 51385, 66953, 29165, 41923] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 5ed379be096c6ec46f2bd748765e8b8368e11f79 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:44:42 +0800 Subject: [PATCH 1667/2002] Committed on or around 2024/08/23 --- .../2024/July/July_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py index afeb0fd6..36b05918 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128332, 76131, 51385, 66953, 29165, 41923] +position_vacancies = [128332, 76131, 51385, 67834, 29165, 41923] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 005ef31f22700f4c6d8e174b4c3bb51c12073085 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 23 Aug 2024 00:45:19 +0800 Subject: [PATCH 1668/2002] Committed on or around 2024/08/23 --- .../2024/July/July_at_city_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py index 36b05918..840a2177 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/July/July_at_city_level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128332, 76131, 51385, 67834, 29165, 41923] +position_vacancies = [128332, 76131, 51385, 67834, 29583, 42558] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 7e29011fc00066a494ac0a65c58bca68a2ea2fb2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 01:30:23 +0800 Subject: [PATCH 1669/2002] Committed on or around 2024/09/08 --- .../Yearly increase of government's payroll by region/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Yearly increase of government's payroll by region/__init__.py diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll by region/__init__.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll by region/__init__.py new file mode 100644 index 00000000..e69de29b From 6bbae86dd63e0d2eea4508ecd6733813ade4a2dc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 01:31:26 +0800 Subject: [PATCH 1670/2002] Committed on or around 2024/09/08 --- .../__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/{Yearly increase of government's payroll by region => Yearly increase of government's payroll}/__init__.py (100%) diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll by region/__init__.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/__init__.py similarity index 100% rename from The attainments and realizations of my dreams/Yearly increase of government's payroll by region/__init__.py rename to The attainments and realizations of my dreams/Yearly increase of government's payroll/__init__.py From 108633871ae6fb56a4972eb6a21cba7dc2dc4505 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 01:48:40 +0800 Subject: [PATCH 1671/2002] Committed on or around 2024/09/08 --- .../Local government/2024 six major cities.py | 0 .../Local government/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 six major cities.py create mode 100644 The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/__init__.py diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 six major cities.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 six major cities.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/__init__.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/__init__.py new file mode 100644 index 00000000..e69de29b From 113311e41a4ab74e62282be222edf755c198dc6a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 01:52:49 +0800 Subject: [PATCH 1672/2002] Committed on or around 2024/09/08 --- .../Local government/{2024 six major cities.py => 2024 Cities.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/{2024 six major cities.py => 2024 Cities.py} (100%) diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 six major cities.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py similarity index 100% rename from The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 six major cities.py rename to The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py From df0bc1e46d23407c843397235c303437af11e761 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 01:53:27 +0800 Subject: [PATCH 1673/2002] Committed on or around 2024/09/08 --- .../Local government/2024 Cities.py | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py index e69de29b..ea3a4d94 100644 --- a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py +++ b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py @@ -0,0 +1,86 @@ +from collections import namedtuple + +import matplotlib.pyplot as plt +import numpy as np + +Student = namedtuple('Student', ['name', 'grade', 'gender']) +Score = namedtuple('Score', ['value', 'unit', 'percentile']) + + +def to_ordinal(num): + """Convert an integer to an ordinal string, e.g. 2 -> '2nd'.""" + suffixes = {str(i): v + for i, v in enumerate(['th', 'st', 'nd', 'rd', 'th', + 'th', 'th', 'th', 'th', 'th'])} + v = str(num) + # special case early teens + if v in {'11', '12', '13'}: + return v + 'th' + return v + suffixes[v[-1]] + + +def format_score(score): + """ + Create score labels for the right y-axis as the test name followed by the + measurement unit (if any), split over two lines. + """ + return f'{score.value}\n{score.unit}' if score.unit else str(score.value) + + +def plot_student_results(student, scores_by_test, cohort_size): + fig, ax1 = plt.subplots(figsize=(9, 7), layout='constrained') + fig.canvas.manager.set_window_title('Eldorado K-8 Fitness Chart') + + ax1.set_title(student.name) + ax1.set_xlabel( + 'Percentile Ranking Across {grade} Grade {gender}s\n' + 'Cohort Size: {cohort_size}'.format( + grade=to_ordinal(student.grade), + gender=student.gender.title(), + cohort_size=cohort_size)) + + test_names = list(scores_by_test.keys()) + percentiles = [score.percentile for score in scores_by_test.values()] + + rects = ax1.barh(test_names, percentiles, align='center', height=0.5) + # Partition the percentile values to be able to draw large numbers in + # white within the bar, and small numbers in black outside the bar. + large_percentiles = [to_ordinal(p) if p > 40 else '' for p in percentiles] + small_percentiles = [to_ordinal(p) if p <= 40 else '' for p in percentiles] + ax1.bar_label(rects, small_percentiles, + padding=5, color='black', fontweight='bold') + ax1.bar_label(rects, large_percentiles, + padding=-32, color='white', fontweight='bold') + + ax1.set_xlim([0, 100]) + ax1.set_xticks([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]) + ax1.xaxis.grid(True, linestyle='--', which='major', + color='grey', alpha=.25) + ax1.axvline(50, color='grey', alpha=0.25) # median position + + # Set the right-hand Y-axis ticks and labels + ax2 = ax1.twinx() + # Set equal limits on both yaxis so that the ticks line up + ax2.set_ylim(ax1.get_ylim()) + # Set the tick locations and labels + ax2.set_yticks( + np.arange(len(scores_by_test)), + labels=[format_score(score) for score in scores_by_test.values()]) + + ax2.set_ylabel('Test Scores') + + +student = Student(name='Johnny Doe', grade=2, gender='Boy') +scores_by_test = { + 'Pacer Test': Score(7, 'laps', percentile=37), + 'Flexed Arm\n Hang': Score(48, 'sec', percentile=95), + 'Mile Run': Score('12:52', 'min:sec', percentile=73), + 'Agility': Score(17, 'sec', percentile=60), + 'Push Ups': Score(14, '', percentile=16), +} + +plot_student_results(student, scores_by_test, cohort_size=62) +plt.show() + +# References: +# 1. https://matplotlib.org/stable/gallery/statistics/barchart_demo.html#sphx-glr-gallery-statistics-barchart-demo-py \ No newline at end of file From b7d02f421f7f1ae36ebd9dc9f53d72ca1c729d4e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 01:53:56 +0800 Subject: [PATCH 1674/2002] Committed on or around 2024/09/08 --- .../Local government/2024 Cities.py | 1 + 1 file changed, 1 insertion(+) diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py index ea3a4d94..7c477e37 100644 --- a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py +++ b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py @@ -71,6 +71,7 @@ def plot_student_results(student, scores_by_test, cohort_size): student = Student(name='Johnny Doe', grade=2, gender='Boy') + scores_by_test = { 'Pacer Test': Score(7, 'laps', percentile=37), 'Flexed Arm\n Hang': Score(48, 'sec', percentile=95), From 9978d141f0813efe393651f1680b3ee2553babfb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 01:55:35 +0800 Subject: [PATCH 1675/2002] Committed on or around 2024/09/08 --- .../Local government/2024 Cities.py | 2 +- .../National government/__init__.py | 0 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Yearly increase of government's payroll/National government/__init__.py diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py index 7c477e37..db81f308 100644 --- a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py +++ b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py @@ -70,7 +70,7 @@ def plot_student_results(student, scores_by_test, cohort_size): ax2.set_ylabel('Test Scores') -student = Student(name='Johnny Doe', grade=2, gender='Boy') +student = Student(name='', grade=2, gender='Boy') scores_by_test = { 'Pacer Test': Score(7, 'laps', percentile=37), diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/National government/__init__.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/National government/__init__.py new file mode 100644 index 00000000..e69de29b From 7006d29cd0578d1808f0fb24166e85c619d01653 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 01:56:35 +0800 Subject: [PATCH 1676/2002] Committed on or around 2024/09/08 --- .../Local government/2024 Cities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py index db81f308..23540991 100644 --- a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py +++ b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py @@ -70,7 +70,7 @@ def plot_student_results(student, scores_by_test, cohort_size): ax2.set_ylabel('Test Scores') -student = Student(name='', grade=2, gender='Boy') +student = Student(name='The number of permanent staffs\n', grade=2, gender='Boy') scores_by_test = { 'Pacer Test': Score(7, 'laps', percentile=37), From ab86b2120f7a71036c7224e3b86abea15927ec4c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 02:02:19 +0800 Subject: [PATCH 1677/2002] Committed on or around 2024/09/08 --- .../Local government/2024 Cities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py index 23540991..52dc9f5a 100644 --- a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py +++ b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py @@ -70,7 +70,7 @@ def plot_student_results(student, scores_by_test, cohort_size): ax2.set_ylabel('Test Scores') -student = Student(name='The number of permanent staffs\n', grade=2, gender='Boy') +student = Student(name='The number of permanent staffs\neach local government plans to hire for 2025', grade=2, gender='Boy') scores_by_test = { 'Pacer Test': Score(7, 'laps', percentile=37), From 6d7aef99e5b1e0f38512c645a10d56d684bc2838 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 02:03:33 +0800 Subject: [PATCH 1678/2002] Committed on or around 2024/09/08 --- .../Local government/2024 Cities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py index 52dc9f5a..8b8b0e3d 100644 --- a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py +++ b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py @@ -70,7 +70,7 @@ def plot_student_results(student, scores_by_test, cohort_size): ax2.set_ylabel('Test Scores') -student = Student(name='The number of permanent staffs\neach local government plans to hire for 2025', grade=2, gender='Boy') +student = Student(name='The number of permanent staffs each local government plans to hire for 2025', grade=2, gender='Boy') scores_by_test = { 'Pacer Test': Score(7, 'laps', percentile=37), From 54bb032d4805e04f33631eb35982bbda29d9b7bb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 8 Sep 2024 20:00:18 +0800 Subject: [PATCH 1679/2002] Committed on or around 2024/09/08 --- .../Local government/2024 Cities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py index 8b8b0e3d..0b0f0a06 100644 --- a/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py +++ b/The attainments and realizations of my dreams/Yearly increase of government's payroll/Local government/2024 Cities.py @@ -70,7 +70,7 @@ def plot_student_results(student, scores_by_test, cohort_size): ax2.set_ylabel('Test Scores') -student = Student(name='The number of permanent staffs each local government plans to hire for 2025', grade=2, gender='Boy') +student = Student(name='The number of new permanent staffs each local government plans to hire for 2025', grade=2, gender='Boy') scores_by_test = { 'Pacer Test': Score(7, 'laps', percentile=37), From 3d7d5b4cc774f18d9abc3359bc04db65c447158e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 15 Sep 2024 23:14:39 +0800 Subject: [PATCH 1680/2002] Committed on or around 2024/09/15 --- .../The number of births 1994-2024_August.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py new file mode 100644 index 00000000..2af993f1 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py @@ -0,0 +1,67 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, 138986, 135571, + (63874+10424)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22", "23", "24"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2024/07 啁撟游漲箇鈭箸稞n Annual number of new-born neonates in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births (Unit: 1 baby)") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'References:https://www.ris.gov.tw/app/en/3910\nhttps://ec.ltn.com.tw/article/paper/1656441\nhttps://www.ris.gov.tw/app/portal/2121?sn=24222733', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) + +plt.text(x=0.2, y=0.4, s="CC0 No Copyright\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, #rotation='30', + transform=axe.transAxes) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From 9136bec5aa0cf8f0e38a51a7c5868e7310002fa7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 15 Sep 2024 23:15:44 +0800 Subject: [PATCH 1681/2002] Committed on or around 2024/09/15 --- .../The number of births 1994-2024_August.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py index 2af993f1..88472f60 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py @@ -16,7 +16,7 @@ number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, 138986, 135571, - (63874+10424)] + (63874+10424+11643)] label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", @@ -44,7 +44,7 @@ fig.tight_layout() # [3] text = fig.text(0.5, 0.7, - 'References:https://www.ris.gov.tw/app/en/3910\nhttps://ec.ltn.com.tw/article/paper/1656441\nhttps://www.ris.gov.tw/app/portal/2121?sn=24222733', + 'References:https://www.ris.gov.tw/app/en/3910\nhttps://www.cna.com.tw/news/ahel/202409100318.aspx\nhttps://www.ris.gov.tw/app/portal/2121?sn=24222733', horizontalalignment='center', verticalalignment='center', size=13, From 08103cffe183132e80cef3fc1303eb279dbcbea4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 15 Sep 2024 23:16:18 +0800 Subject: [PATCH 1682/2002] Committed on or around 2024/09/15 --- .../The number of births 1994-2024_August.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py index 88472f60..b33d7dda 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_August.py @@ -33,7 +33,7 @@ axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) -axe.set_title(label="1994-2024/07 啁撟游漲箇鈭箸稞n Annual number of new-born neonates in Taiwan", fontsize=20) +axe.set_title(label="1994-2024/08 啁撟游漲箇鈭箸稞n Annual number of new-born neonates in Taiwan", fontsize=20) axe.set_ylabel("The number of births (Unit: 1 baby)") axe.set_xlabel("Year") From b8e2677391cd4a767d5545ff58bf4343ad1922a4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 11 Oct 2024 22:33:35 +0800 Subject: [PATCH 1683/2002] Committed on or around 2024/10/11 --- ...he number of births 1994-2024_September.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_September.py diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_September.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_September.py new file mode 100644 index 00000000..b33d7dda --- /dev/null +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_September.py @@ -0,0 +1,67 @@ +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import numpy as np +import matplotlib.colors as colour +import matplotlib.image as image + +# Using the magic encoding +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") + +year_number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31] + +number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, + 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, + 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, 138986, 135571, + (63874+10424+11643)] + +label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", + "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", + "'18", "'19", "'20", "'21", "'22", "23", "24"] + +fig, axe = plt.subplots(nrows=1, ncols=1, figsize=(24, 13)) +axe.set_xticks(year_number, labels=label_year_text, rotation=7, fontsize=12) +axe.tick_params(axis='y', labelsize=12) + +plot = axe.bar(year_number, number_of_births, align='center', width=0.3, color=colour.CSS4_COLORS.get('pink')) + +for rect in plot: + height = rect.get_height() + axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) + +axe.set_title(label="1994-2024/08 啁撟游漲箇鈭箸稞n Annual number of new-born neonates in Taiwan", fontsize=20) + +axe.set_ylabel("The number of births (Unit: 1 baby)") +axe.set_xlabel("Year") + +axe.set_ylim(78000, 330000) + +plt.margins(x=0, y=0, tight=False) # [1][2] +fig.tight_layout() # [3] + +text = fig.text(0.5, 0.7, + 'References:https://www.ris.gov.tw/app/en/3910\nhttps://www.cna.com.tw/news/ahel/202409100318.aspx\nhttps://www.ris.gov.tw/app/portal/2121?sn=24222733', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=2000, yo=900, alpha=0.9) + +plt.text(x=0.2, y=0.4, s="CC0 No Copyright\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, #rotation='30', + transform=axe.transAxes) + +plt.show() + +# References: +# 1. https://www.google.com/search?q=matplotlib+margins +# 2. https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/axes_margins.html +# 3. https://stackoverflow.com/a/4046233 From 933219e40cf17d715a440c2a89f91cbbeff94d26 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 11 Oct 2024 22:34:55 +0800 Subject: [PATCH 1684/2002] Committed on or around 2024/10/11 --- .../The number of births 1994-2024_September.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_September.py b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_September.py index b33d7dda..05892f5a 100644 --- a/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_September.py +++ b/The attainments and realizations of my dreams/Annual number of births in Taiwan/The number of births 1994-2024_September.py @@ -16,7 +16,7 @@ number_of_births = [322938, 329581, 325545, 326002, 271450, 283661, 305312, 260354, 247530, 227070, 216419, 205854, 204459, 204414, 198733, 191310, 166886, 196627, 229481, 199113, 210383, 213598, 208440, 193844, 181601, 177767, 165249, 153820, 138986, 135571, - (63874+10424+11643)] + (63874+10424+11643+11792)] label_year_text = ["1994", "'95", "'96", "'97", "'98", "'99", "2000", "'01", "'02", "'03", "'04", "'05", "'06", "'07", "'08", "'09", "'10", "'11", "'12", "'13", "'14", "'15", "'16", "'17", @@ -33,7 +33,7 @@ axe.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12, rotation=4) -axe.set_title(label="1994-2024/08 啁撟游漲箇鈭箸稞n Annual number of new-born neonates in Taiwan", fontsize=20) +axe.set_title(label="1994-2024/09 啁撟游漲箇鈭箸稞n Annual number of new-born neonates in Taiwan", fontsize=20) axe.set_ylabel("The number of births (Unit: 1 baby)") axe.set_xlabel("Year") @@ -44,7 +44,7 @@ fig.tight_layout() # [3] text = fig.text(0.5, 0.7, - 'References:https://www.ris.gov.tw/app/en/3910\nhttps://www.cna.com.tw/news/ahel/202409100318.aspx\nhttps://www.ris.gov.tw/app/portal/2121?sn=24222733', + 'References:https://www.ris.gov.tw/app/en/3910\nhttps://www.ris.gov.tw/app/portal/2121?sn=24222733', horizontalalignment='center', verticalalignment='center', size=13, From a1887c6b253e4ea50d0fd40557b504e92cd3ab22 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Oct 2024 22:53:10 +0800 Subject: [PATCH 1685/2002] Committed on or around 2024/10/19 --- .../2022-2025_at_metro_level.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2022-2025_at_metro_level.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2025_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2025_at_metro_level.py new file mode 100644 index 00000000..e45b7308 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2025_at_metro_level.py @@ -0,0 +1,48 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2022", "2023", "2024", "2025") +penguin_means = { + # Taipei + New Taipei + Keelung + 'Greater Taipei': (171.58+186.48+21.15, 177.48+197.57+19.63, 190.71+212.48+24.09), + # Taoyuan + Hsinchu county + Hsinchu city + Miaoli + 'Taoyuan-Hsinchu_Miaoli': (141.05+32.36+25.61+21.56, + 142.99+34.82+25.51+22.98, + 156.80+35.43+28.11+25.05), + + 'Taichung-Changhua-Nantou': (151.20+56.60+28.90, 150.48+58.89+24.92, 177.22+64.45+33.72), + + # Yunlin + Chiayi county + Chiayi city + Tainan + 'Yunlin-Chiayi-Tainan': (37.30+28.35+16.62+102.06, + 36.30+27.41+18.38+102.56, + 40.43+33.22+19.35+116.94), + + 'Kaohsiung-Pingtung': (151.44+47.11, 160.85+50.33, 169.57+55.85), +} + +x = np.arange(len(Year)) # the label locations +width = 0.10 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='tight', figsize=(15, 7)) # [1] + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Governments\n (Yearly distribution of taxpayer\'s money at metro level)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(150, 450) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html +# 1. https://matplotlib.org/stable/users/explain/axes/tight_layout_guide.html#tight-layout-guide From 803bde71b421a84444ee99d0b19b1d95f8edab38 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:12:01 +0800 Subject: [PATCH 1686/2002] Committed on or around 2024/10/19 --- .../2022-2024_7.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py new file mode 100644 index 00000000..acd27bf0 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py @@ -0,0 +1,44 @@ +import matplotlib.pyplot as plt +import numpy as np + +Year = ("2022", "2023", "2024") +penguin_means = { + 'Taipei': (171.58, 177.48, 190.71), + 'New Taipei': (186.48, 197.57, 212.48), + 'Taoyuan': (141.05, 142.99, 156.80), + 'Taichung': (151.20, 150.48, 177.22), + 'Tainan': (102.06, 102.56, 116.94), + 'Kaohsiung': (151.44, 160.85, 169.57), +} + +x = np.arange(len(Year)) # the label locations +width = 0.10 # the width of the bars +multiplier = 0 + +fig, ax = plt.subplots(layout='tight', figsize=(15, 7)) # [1] + +for attribute, measurement in penguin_means.items(): + offset = width * multiplier + rects = ax.bar(x + offset, measurement, width, label=attribute) + ax.bar_label(rects, padding=3) + multiplier += 1 + +# Add some text for labels, title and custom x-axis tick labels, etc. +ax.set_ylabel('New Taiwan Dollar (billion)') +ax.set_title('Annual Expenditure by Local Government\n (Yearly distribution of taxpayer\'s money)') +ax.set_xticks(x + width, Year) +ax.legend(loc='upper left', ncols=3) +ax.set_ylim(100, 220) + +plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") + +# Insert text watermark +plt.text(x=0.2, y=0.4, s="CC0 No Copyright\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, #rotation='30', + transform=ax.transAxes) + +plt.show() + +# References: +# https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html +# 1. https://matplotlib.org/stable/users/explain/axes/tight_layout_guide.html#tight-layout-guide From 9f3638e7ea0586fc084e7ffa6061eb019ea2bbaa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:14:52 +0800 Subject: [PATCH 1687/2002] Committed on or around 2024/10/19 --- .../Annual local government expenditure/2022-2024_7.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py index acd27bf0..b112981b 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py @@ -1,5 +1,9 @@ import matplotlib.pyplot as plt +import matplotlib import numpy as np +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") Year = ("2022", "2023", "2024") penguin_means = { From 6e935ef150f4f9909c095e7dbb5c633fe7cd3de1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:15:34 +0800 Subject: [PATCH 1688/2002] Committed on or around 2024/10/19 --- .../Annual local government expenditure/2022-2024_7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py index b112981b..87b8bbe3 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py @@ -37,7 +37,7 @@ plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") # Insert text watermark -plt.text(x=0.2, y=0.4, s="CC0 No Copyright\n∠甈", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.3, y=0.5, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, ha='center', va='center', rotation=30, #rotation='30', transform=ax.transAxes) From c2a35af67906bffe7628d6a0c008cdf1bf18b91a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:16:24 +0800 Subject: [PATCH 1689/2002] Committed on or around 2024/10/19 --- .../Annual local government expenditure/2022-2024_7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py index 87b8bbe3..dc6b8986 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py @@ -37,7 +37,7 @@ plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") # Insert text watermark -plt.text(x=0.3, y=0.5, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, +plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, ha='center', va='center', rotation=30, #rotation='30', transform=ax.transAxes) From 4525b80dfc8a78bb5cd1bf24a5f544d50514865d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:32:23 +0800 Subject: [PATCH 1690/2002] Committed on or around 2024/10/19 --- .../September/September at metro level.py | 0 .../2024/September/__init__.py | 0 .../2024/September/at city level.py | 66 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/__init__.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/at city level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/at city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/at city level.py new file mode 100644 index 00000000..a852d3e3 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/at city level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [125456, 74867, 50727, 65562, 28934, 41770] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/09 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/QkgSJ") + +plt.ylim(29000, 120000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From c616a77a610530b98dbbeef6909ea16db3c2ee24 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:47:05 +0800 Subject: [PATCH 1691/2002] Committed on or around 2024/10/19 --- .../2024/September/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Sat, 19 Oct 2024 23:50:25 +0800 Subject: [PATCH 1692/2002] Committed on or around 2024/10/19 --- .../September/September at metro level.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py index e69de29b..d62e39bd 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2479+125456+74867+4649, 51052+34783+6937, 66953+11542+3795, 5007+7515+29165, 41932+5178] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/1k2LD") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 86bcdd41ac13b8c8b24c61956b8e3e9c7c1e4917 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:51:45 +0800 Subject: [PATCH 1693/2002] Committed on or around 2024/10/19 --- .../2024/September/September at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py index d62e39bd..2c4c500a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2479+125456+74867+4649, 51052+34783+6937, 66953+11542+3795, 5007+7515+29165, 41932+5178] +position_vacancies = [2479+125456+74867+4649, 50727+34653+6936, 65562+11664+3830, 5007+7515+29165, 41932+5178] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From c399f30cbf6032dc6469d21faf589fb9d6cec712 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:54:00 +0800 Subject: [PATCH 1694/2002] Committed on or around 2024/10/19 --- .../2024/September/September at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py index 2c4c500a..88bbdb3d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2479+125456+74867+4649, 50727+34653+6936, 65562+11664+3830, 5007+7515+29165, 41932+5178] +position_vacancies = [2479+125456+74867+4649, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 9a2f37022198cb6d835847880caa343007d8ada7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 00:03:00 +0800 Subject: [PATCH 1695/2002] Committed on or around 2024/10/19 --- .../2024/September/September at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py index 88bbdb3d..25526665 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2024/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/1k2LD") From d44208b370b188505f41c0b08f30acb2b1475d3c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 01:32:51 +0800 Subject: [PATCH 1696/2002] Committed on or around 2024/10/20 --- .../2024/September/September at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py index 25526665..e9c638bc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/September/September at metro level.py @@ -34,7 +34,7 @@ plt.title("2024/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/1k2LD") +plt.xlabel("鞈 Reference https://archive.ph/QkgSJ") plt.ylim(40000, 200000) From 37564883cf94e5a814e703a5ee84a8c88071d9d7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 04:20:46 +0800 Subject: [PATCH 1697/2002] Committed on or around 2024/10/20 --- .../2024/October/__init__.py | 0 .../2024/October/at city level.py | 66 ++++++++++++++++++ .../2024/October/at metro level.py | 67 +++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/__init__.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py new file mode 100644 index 00000000..a852d3e3 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [125456, 74867, 50727, 65562, 28934, 41770] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/09 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/QkgSJ") + +plt.ylim(29000, 120000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py new file mode 100644 index 00000000..e9c638bc --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2479+125456+74867+4649, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/QkgSJ") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 23b88d9eb9b0e4dac4f7d46d6244e88aab988017 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 06:05:16 +0800 Subject: [PATCH 1698/2002] Committed on or around 2024/10/20 --- .../Annual local government expenditure/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/CC0.png diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/CC0.png b/The attainments and realizations of my dreams/Annual local government expenditure/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Sun, 20 Oct 2024 06:07:29 +0800 Subject: [PATCH 1699/2002] Committed on or around 2024/10/20 --- .../Annual local government expenditure/2022-2024_7.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py index dc6b8986..f38cb2e5 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py @@ -1,4 +1,5 @@ import matplotlib.pyplot as plt +import matplotlib.image as image import matplotlib import numpy as np # -*- coding: utf-8 -*- @@ -36,6 +37,10 @@ plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + # Insert text watermark plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, ha='center', va='center', rotation=30, #rotation='30', From d72683df248ddad653e08a28384de4b4896ec97e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 06:23:52 +0800 Subject: [PATCH 1700/2002] Committed on or around 2024/10/20 --- .../Annual local government expenditure/2022-2024_7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py index f38cb2e5..912a5069 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py @@ -39,7 +39,7 @@ img = image.imread('CC0.png') -plt.figimage(X=img, xo=800, yo=800, alpha=0.9) +plt.figimage(X=img, xo=800, yo=600, alpha=0.2) # Insert text watermark plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, From d002114bfa8d6102b8e8150f211e9da22e2653c7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 06:24:38 +0800 Subject: [PATCH 1701/2002] Committed on or around 2024/10/20 --- .../Annual local government expenditure/2022-2024_7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py index 912a5069..cc321c03 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py @@ -39,7 +39,7 @@ img = image.imread('CC0.png') -plt.figimage(X=img, xo=800, yo=600, alpha=0.2) +plt.figimage(X=img, xo=900, yo=600, alpha=0.2) # Insert text watermark plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, From 1c900acbee20b9732be7383cbaad6dff30dc3a88 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 06:25:52 +0800 Subject: [PATCH 1702/2002] Committed on or around 2024/10/20 --- .../Annual local government expenditure/2022-2024_7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py index cc321c03..7fe0a9f5 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_7.py @@ -39,7 +39,7 @@ img = image.imread('CC0.png') -plt.figimage(X=img, xo=900, yo=600, alpha=0.2) +plt.figimage(X=img, xo=1000, yo=650, alpha=0.9) # Insert text watermark plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, From 58fb64c5010a13afa516a20c5d234f1982587901 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 08:55:53 +0800 Subject: [PATCH 1703/2002] Committed on or around 2024/10/20 --- .../2022-2024_at_metro_level.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 8e8f85c7..28df2d67 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -1,5 +1,10 @@ import matplotlib.pyplot as plt +import matplotlib.image as image +import matplotlib import numpy as np +# -*- coding: utf-8 -*- + +matplotlib.rc('font', family="MS Gothic") Year = ("2022", "2023", "2024") penguin_means = { From 6d687bb456af814361c36e2a0a6c551dc5e038f2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 08:57:19 +0800 Subject: [PATCH 1704/2002] Committed on or around 2024/10/20 --- .../2022-2024_at_metro_level.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 28df2d67..e4346b8b 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -46,6 +46,15 @@ plt.xlabel("Reference https://www.dgbas.gov.tw/News.aspx?n=1525&sms=10694") +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=1000, yo=650, alpha=0.9) + +# Insert text watermark +plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, #rotation='30', + transform=ax.transAxes) + plt.show() # References: From b2f4142644c7c1cfca6958cc9e8423114aecba35 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 08:57:54 +0800 Subject: [PATCH 1705/2002] Committed on or around 2024/10/20 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index e4346b8b..676cd025 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -48,7 +48,7 @@ img = image.imread('CC0.png') -plt.figimage(X=img, xo=1000, yo=650, alpha=0.9) +plt.figimage(X=img, xo=1200, yo=650, alpha=0.9) # Insert text watermark plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, From b108204c6e3d4f96b1a20f350f840c27d29d1155 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 08:58:06 +0800 Subject: [PATCH 1706/2002] Committed on or around 2024/10/20 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 676cd025..bf8ee1c4 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -48,7 +48,7 @@ img = image.imread('CC0.png') -plt.figimage(X=img, xo=1200, yo=650, alpha=0.9) +plt.figimage(X=img, xo=1100, yo=650, alpha=0.9) # Insert text watermark plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, From f399183ea9a1d1765c57244d4e284a472aa6d2f8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 08:58:28 +0800 Subject: [PATCH 1707/2002] Committed on or around 2024/10/20 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index bf8ee1c4..27c04c2e 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -48,7 +48,7 @@ img = image.imread('CC0.png') -plt.figimage(X=img, xo=1100, yo=650, alpha=0.9) +plt.figimage(X=img, xo=1050, yo=650, alpha=0.9) # Insert text watermark plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, From a30ff8a5c90220a41ca5e6be5ce151f91584d4ec Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 08:58:59 +0800 Subject: [PATCH 1708/2002] Committed on or around 2024/10/20 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 27c04c2e..46e9199e 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -51,7 +51,7 @@ plt.figimage(X=img, xo=1050, yo=650, alpha=0.9) # Insert text watermark -plt.text(x=0.3, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, +plt.text(x=0.2, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, ha='center', va='center', rotation=30, #rotation='30', transform=ax.transAxes) From 88b8eb386d75b34a7cdabf871b05934940e5977c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 08:59:19 +0800 Subject: [PATCH 1709/2002] Committed on or around 2024/10/20 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index 46e9199e..bc21ba04 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -51,7 +51,7 @@ plt.figimage(X=img, xo=1050, yo=650, alpha=0.9) # Insert text watermark -plt.text(x=0.2, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, +plt.text(x=0.25, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, ha='center', va='center', rotation=30, #rotation='30', transform=ax.transAxes) From 77e051991bc188c52f3bc6f6d19a8f9910369f80 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 08:59:40 +0800 Subject: [PATCH 1710/2002] Committed on or around 2024/10/20 --- .../2022-2024_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py index bc21ba04..54ccc6bd 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2024_at_metro_level.py @@ -51,7 +51,7 @@ plt.figimage(X=img, xo=1050, yo=650, alpha=0.9) # Insert text watermark -plt.text(x=0.25, y=0.7, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, +plt.text(x=0.25, y=0.65, s="CC0 No Copyright\n∠甈", fontsize=30, color='grey', alpha=0.9, ha='center', va='center', rotation=30, #rotation='30', transform=ax.transAxes) From 92445d5d52cdf2447bf4796e07cd4d7899861330 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 09:03:38 +0800 Subject: [PATCH 1711/2002] Committed on or around 2024/10/20 --- .../2022-2025_at_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2025_at_metro_level.py b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2025_at_metro_level.py index e45b7308..8867891e 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/2022-2025_at_metro_level.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/2022-2025_at_metro_level.py @@ -4,7 +4,7 @@ Year = ("2022", "2023", "2024", "2025") penguin_means = { # Taipei + New Taipei + Keelung - 'Greater Taipei': (171.58+186.48+21.15, 177.48+197.57+19.63, 190.71+212.48+24.09), + 'Greater Taipei': (171.58+186.48+21.15+ , 177.48+197.57+19.63+ , 190.71+212.48+24.09+), # Taoyuan + Hsinchu county + Hsinchu city + Miaoli 'Taoyuan-Hsinchu_Miaoli': (141.05+32.36+25.61+21.56, 142.99+34.82+25.51+22.98, From 1cff03fbafe98c8a406662137829f34d5b5e2ea7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 09:24:20 +0800 Subject: [PATCH 1712/2002] Committed on or around 2024/10/20 --- .../2024/October/at city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py index a852d3e3..ae80981c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [125456, 74867, 50727, 65562, 28934, 41770] +position_vacancies = [122309, 73368, 50482, 64063, 28336, 41160] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 3554e973584153df1e739b19d8177b8ca18ac248 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 09:25:14 +0800 Subject: [PATCH 1713/2002] Committed on or around 2024/10/20 --- .../2024/October/at city level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py index ae80981c..b90c07a1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py @@ -31,10 +31,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/09 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) +plt.title("2024/10 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: https://archive.ph/QkgSJ") +plt.xlabel("鞈 Reference: https://archive.ph/cgPju") plt.ylim(29000, 120000) From 37335978e43135834648e5d23ecabf3461cf3649 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 09:26:17 +0800 Subject: [PATCH 1714/2002] Committed on or around 2024/10/20 --- .../2024/October/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Sun, 20 Oct 2024 09:27:57 +0800 Subject: [PATCH 1715/2002] Committed on or around 2024/10/20 --- .../2024/October/at city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py index b90c07a1..eca06b64 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/cgPju") -plt.ylim(29000, 120000) +plt.ylim(28000, 115000) img = image.imread('CC0.png') From d5947098326fb94fbe02450a6949ba682ee8a02a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 20 Oct 2024 09:28:25 +0800 Subject: [PATCH 1716/2002] Committed on or around 2024/10/20 --- .../2024/October/at city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py index eca06b64..b0fafc2c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at city level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/cgPju") -plt.ylim(28000, 115000) +plt.ylim(28500, 115000) img = image.imread('CC0.png') From 58a3e36658d0d7e804bbb3f46f031fe0d6b1160d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Oct 2024 02:23:32 +0800 Subject: [PATCH 1717/2002] Committed on or around 2024/10/27 --- .../2024/October/at metro level.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py index e9c638bc..d6a0223e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2479+125456+74867+4649, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2457+122525+73277+4385, 50727+34653+6936, 65562+11664+3830, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] @@ -31,10 +31,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2024/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/QkgSJ") +plt.xlabel("鞈 Reference https://archive.ph/HbvM1") plt.ylim(40000, 200000) From e83244ea9b8c6bac9cc7db3ca5df2f31abccda32 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Oct 2024 02:30:01 +0800 Subject: [PATCH 1718/2002] Committed on or around 2024/10/27 --- .../2024/October/at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py index d6a0223e..b2325f28 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2457+122525+73277+4385, 50727+34653+6936, 65562+11664+3830, 4929+7221+28352, 41259+4967] +position_vacancies = [2457+122625+73277+4385, 50727+34653+6936, 65562+11664+3830, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 4c658f573258608d1fbba7b4e92f2d7f051f5ea4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Oct 2024 02:30:45 +0800 Subject: [PATCH 1719/2002] Committed on or around 2024/10/27 --- .../2024/October/at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py index b2325f28..5ac51d6b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2457+122625+73277+4385, 50727+34653+6936, 65562+11664+3830, 4929+7221+28352, 41259+4967] +position_vacancies = [2457+122625+73277+4385, 50629+34653+6936, 65562+11664+3830, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From a4a13b4f8b94a30c60810f5d860301fdc4d33a65 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Oct 2024 02:31:23 +0800 Subject: [PATCH 1720/2002] Committed on or around 2024/10/27 --- .../2024/October/at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py index 5ac51d6b..f2193900 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2457+122625+73277+4385, 50629+34653+6936, 65562+11664+3830, 4929+7221+28352, 41259+4967] +position_vacancies = [2457+122625+73277+4385, 50629+34417+6936, 65562+11664+3830, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 7f26a635166b40b345d5c45289e4c211072c421c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Oct 2024 02:39:05 +0800 Subject: [PATCH 1721/2002] Committed on or around 2024/10/27 --- .../2024/October/at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py index f2193900..3845a19d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2457+122625+73277+4385, 50629+34417+6936, 65562+11664+3830, 4929+7221+28352, 41259+4967] +position_vacancies = [2457+122625+73277+4385, 50629+34417+6723, 65562+11664+3830, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 0d98439fff2eacd732c5a56294e68b6cb2b32140 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Oct 2024 02:40:18 +0800 Subject: [PATCH 1722/2002] Committed on or around 2024/10/27 --- .../2024/October/at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py index 3845a19d..486568c9 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2457+122625+73277+4385, 50629+34417+6723, 65562+11664+3830, 4929+7221+28352, 41259+4967] +position_vacancies = [2457+122625+73277+4385, 50629+34417+6723, 64162+11664+3830, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From a613747c000ad78a8e7d99640f6efd2d4bebc2e5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Oct 2024 02:43:06 +0800 Subject: [PATCH 1723/2002] Committed on or around 2024/10/27 --- .../2024/October/at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py index 486568c9..1698b2f6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2457+122625+73277+4385, 50629+34417+6723, 64162+11664+3830, 4929+7221+28352, 41259+4967] +position_vacancies = [2457+122625+73277+4385, 50629+34417+6723, 64162+11297+3830, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 46e17efc6983d454303bd72dbca5d22c71a72d49 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 27 Oct 2024 02:43:58 +0800 Subject: [PATCH 1724/2002] Committed on or around 2024/10/27 --- .../2024/October/at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py index 1698b2f6..bdf6e10e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2457+122625+73277+4385, 50629+34417+6723, 64162+11297+3830, 4929+7221+28352, 41259+4967] +position_vacancies = [2457+122625+73277+4385, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 979ccecb3b86602d355404f1ee150f93af3e9df3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 8 Nov 2024 20:07:14 +0800 Subject: [PATCH 1725/2002] Committed on or around 2024/11/08 --- .../2024/October/at metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py index bdf6e10e..15dafda2 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/October/at metro level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/HbvM1") -plt.ylim(40000, 200000) +plt.ylim(40000, 190000) img = image.imread('CC0.png') # CC0.png downloaded from [7]. From e48974b11fe040daece409a81b1bd96d9db9e86d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 12 Nov 2024 05:47:54 +0800 Subject: [PATCH 1726/2002] Committed on or around 2024/11/12 --- .../2024/November/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/__init__.py new file mode 100644 index 00000000..e69de29b From 988434d0293ada72bcaa61e3d074f75c50eb15a8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:43:05 +0800 Subject: [PATCH 1727/2002] Committed on or around 2024/12/29 --- .../FDI/2024 Q1 - Q2.py | 36 ++++++++++++++++++ .../FDI/__init__.py | 0 ...63\207\351\207\221\351\241\215(xlsx).xlsx" | Bin 0 -> 20822 bytes 3 files changed, 36 insertions(+) create mode 100644 The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py create mode 100644 The attainments and realizations of my dreams/FDI/__init__.py create mode 100644 "The attainments and realizations of my dreams/FDI/\345\216\237\345\247\213\350\263\207\346\226\231_\345\203\221\345\244\226\346\212\225\350\263\207\351\207\221\351\241\215(xlsx).xlsx" diff --git a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py new file mode 100644 index 00000000..96256adb --- /dev/null +++ b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py @@ -0,0 +1,36 @@ +import matplotlib.pyplot as plt +import numpy as np + +fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) + +recipe = ["7.98 USD flour", + "75 g sugar", + "250 g butter", + "300 g berries"] + +# data = [float(x.split()[0]) for x in recipe] +# ingredients = [x.split()[-1] for x in recipe] + +data = [7.98, 15.39, 4.25, 5.87] + +ingredients = ["Taipei Q1", "Taipei Q2", "Rest of Taiwan Q1", "Rest of Taiwan Q2"] + + +def func(pct, allvals): + absolute = int(np.round(pct/100.*np.sum(allvals))) + return f"{pct:.1f}%\n({absolute:d} g)" + + +wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), + textprops=dict(color="w")) + +ax.legend(wedges, ingredients, + title="Ingredients", + loc="center left", + bbox_to_anchor=(1, 0, 0.5, 1)) + +plt.setp(autotexts, size=8, weight="bold") + +ax.set_title("2024 The distribution Taiwan's Foreign Direct Investment by Region") + +plt.show() \ No newline at end of file diff --git a/The attainments and realizations of my dreams/FDI/__init__.py b/The attainments and realizations of my dreams/FDI/__init__.py new file mode 100644 index 00000000..e69de29b diff --git "a/The attainments and realizations of my dreams/FDI/\345\216\237\345\247\213\350\263\207\346\226\231_\345\203\221\345\244\226\346\212\225\350\263\207\351\207\221\351\241\215(xlsx).xlsx" "b/The attainments and realizations of my dreams/FDI/\345\216\237\345\247\213\350\263\207\346\226\231_\345\203\221\345\244\226\346\212\225\350\263\207\351\207\221\351\241\215(xlsx).xlsx" new file mode 100644 index 0000000000000000000000000000000000000000..9c45afecc954b5199a904cf2f0a00b2f8e704fe9 GIT binary patch literal 20822 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 Date: Sun, 29 Dec 2024 08:45:29 +0800 Subject: [PATCH 1728/2002] Committed on or around 2024/12/29 --- .../FDI/2024 Q1 - Q2.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py index 96256adb..26e61c3f 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py @@ -3,17 +3,17 @@ fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) -recipe = ["7.98 USD flour", - "75 g sugar", - "250 g butter", - "300 g berries"] +# recipe = ["7.98 USD flour", +# "75 g sugar", +# "250 g butter", +# "300 g berries"] # data = [float(x.split()[0]) for x in recipe] # ingredients = [x.split()[-1] for x in recipe] data = [7.98, 15.39, 4.25, 5.87] -ingredients = ["Taipei Q1", "Taipei Q2", "Rest of Taiwan Q1", "Rest of Taiwan Q2"] +ingredients = ["Taipei Q1", "Taipei Q2", "Rest of TW Q1", "Rest of TW Q2"] def func(pct, allvals): @@ -31,6 +31,6 @@ def func(pct, allvals): plt.setp(autotexts, size=8, weight="bold") -ax.set_title("2024 The distribution Taiwan's Foreign Direct Investment by Region") +ax.set_title("2024 The distribution of Taiwan's Foreign Direct Investment by Region") plt.show() \ No newline at end of file From 5cd83e9e1ef4506eb91cdb5455e9f6a05b795693 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:46:52 +0800 Subject: [PATCH 1729/2002] Committed on or around 2024/12/29 --- .../FDI/2024 Q1 - Q2.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py index 26e61c3f..a6247d8a 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py @@ -33,4 +33,6 @@ def func(pct, allvals): ax.set_title("2024 The distribution of Taiwan's Foreign Direct Investment by Region") -plt.show() \ No newline at end of file +plt.xlabel("鞈 Reference https://taipeiecon.taipei/Econ/econ_obs?id=5") + +plt.show() From ad4c05306965cc290f750081a464d8ebdb7cf09a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:48:00 +0800 Subject: [PATCH 1730/2002] Committed on or around 2024/12/29 --- .../FDI/2024 Q1 - Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py index a6247d8a..86179c36 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt import numpy as np -fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) +fig, ax = plt.subplots(figsize=(6, 4), subplot_kw=dict(aspect="equal")) # recipe = ["7.98 USD flour", # "75 g sugar", From e3b160cc74d666f52e95c509ab1b7ddea551a9e3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:48:15 +0800 Subject: [PATCH 1731/2002] Committed on or around 2024/12/29 --- .../FDI/2024 Q1 - Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py index 86179c36..b281f479 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py @@ -33,6 +33,6 @@ def func(pct, allvals): ax.set_title("2024 The distribution of Taiwan's Foreign Direct Investment by Region") -plt.xlabel("鞈 Reference https://taipeiecon.taipei/Econ/econ_obs?id=5") +plt.xlabel("Reference https://taipeiecon.taipei/Econ/econ_obs?id=5") plt.show() From 1c64367af1a2587a959ca6a50f32d2115353a294 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:49:08 +0800 Subject: [PATCH 1732/2002] Committed on or around 2024/12/29 --- .../FDI/2024 Q1 - Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py index b281f479..64b8f9a9 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt import numpy as np -fig, ax = plt.subplots(figsize=(6, 4), subplot_kw=dict(aspect="equal")) +fig, ax = plt.subplots(figsize=(7, 3), subplot_kw=dict(aspect="equal")) # recipe = ["7.98 USD flour", # "75 g sugar", From 3361badff33de8dff39fae862a645394fe271249 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:49:21 +0800 Subject: [PATCH 1733/2002] Committed on or around 2024/12/29 --- .../FDI/2024 Q1 - Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py index 64b8f9a9..432add22 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q1 - Q2.py @@ -33,6 +33,6 @@ def func(pct, allvals): ax.set_title("2024 The distribution of Taiwan's Foreign Direct Investment by Region") -plt.xlabel("Reference https://taipeiecon.taipei/Econ/econ_obs?id=5") +plt.xlabel("Reference: https://taipeiecon.taipei/Econ/econ_obs?id=5") plt.show() From 29fa09ee9d7ddddced9a0c68b80fe378ca68e946 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:57:00 +0800 Subject: [PATCH 1734/2002] Committed on or around 2024/12/29 --- .../FDI/2024 Q2.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 The attainments and realizations of my dreams/FDI/2024 Q2.py diff --git a/The attainments and realizations of my dreams/FDI/2024 Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q2.py new file mode 100644 index 00000000..f1f17642 --- /dev/null +++ b/The attainments and realizations of my dreams/FDI/2024 Q2.py @@ -0,0 +1,38 @@ +import matplotlib.pyplot as plt +import numpy as np + +fig, ax = plt.subplots(figsize=(7, 3), subplot_kw=dict(aspect="equal")) + +# recipe = ["7.98 USD flour", +# "75 g sugar", +# "250 g butter", +# "300 g berries"] + +# data = [float(x.split()[0]) for x in recipe] +# ingredients = [x.split()[-1] for x in recipe] + +data = [15.39, 5.87] + +ingredients = ["Taipei Q2", "Rest of TW Q2"] + + +def func(pct, allvals): + absolute = int(np.round(pct/100.*np.sum(allvals))) + return f"{pct:.1f}%\n({absolute:d} USD 100 Million)" + + +wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), + textprops=dict(color="w")) + +ax.legend(wedges, ingredients, + title="Ingredients", + loc="center left", + bbox_to_anchor=(1, 0, 0.5, 1)) + +plt.setp(autotexts, size=8, weight="bold") + +ax.set_title("2024 The distribution of Taiwan's Foreign Direct Investment by Region") + +plt.xlabel("Reference: https://taipeiecon.taipei/Econ/econ_obs?id=5") + +plt.show() From bb3ec4b343c39e87b81e57654c6472ddbcd46a43 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:58:02 +0800 Subject: [PATCH 1735/2002] Committed on or around 2024/12/29 --- The attainments and realizations of my dreams/FDI/2024 Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q2.py index f1f17642..f83ed087 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q2.py @@ -18,7 +18,7 @@ def func(pct, allvals): absolute = int(np.round(pct/100.*np.sum(allvals))) - return f"{pct:.1f}%\n({absolute:d} USD 100 Million)" + return f"{pct:.1f}%\n({absolute:d} USD\n 100 Million)" wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), From 6e3498f7c763d2e486c59af658246c3a34fdfa35 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:59:10 +0800 Subject: [PATCH 1736/2002] Committed on or around 2024/12/29 --- The attainments and realizations of my dreams/FDI/2024 Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q2.py index f83ed087..b7ebb1fd 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q2.py @@ -18,7 +18,7 @@ def func(pct, allvals): absolute = int(np.round(pct/100.*np.sum(allvals))) - return f"{pct:.1f}%\n({absolute:d} USD\n 100 Million)" + return f"{pct:.1f}%\n({absolute:d} Million\n of USD)" wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), From 4203d79b3e1909138f5ded8f99bee424f99c1116 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 09:00:07 +0800 Subject: [PATCH 1737/2002] Committed on or around 2024/12/29 --- The attainments and realizations of my dreams/FDI/2024 Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q2.py index b7ebb1fd..564a2d3e 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q2.py @@ -25,7 +25,7 @@ def func(pct, allvals): textprops=dict(color="w")) ax.legend(wedges, ingredients, - title="Ingredients", + title="TPE vs TW", loc="center left", bbox_to_anchor=(1, 0, 0.5, 1)) From ad82ee05f9b744b30d83c3994e350c68ce9bbfef Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 09:00:55 +0800 Subject: [PATCH 1738/2002] Committed on or around 2024/12/29 --- The attainments and realizations of my dreams/FDI/2024 Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q2.py index 564a2d3e..0785685a 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q2.py @@ -31,7 +31,7 @@ def func(pct, allvals): plt.setp(autotexts, size=8, weight="bold") -ax.set_title("2024 The distribution of Taiwan's Foreign Direct Investment by Region") +ax.set_title("2024 Q2 The distribution of Taiwan's Foreign Direct Investment by Region") plt.xlabel("Reference: https://taipeiecon.taipei/Econ/econ_obs?id=5") From fcad6834ad5a1dd29375ae875fd6128c196a6f5f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 09:01:48 +0800 Subject: [PATCH 1739/2002] Committed on or around 2024/12/29 --- The attainments and realizations of my dreams/FDI/2024 Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q2.py index 0785685a..e279a81c 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q2.py @@ -13,7 +13,7 @@ data = [15.39, 5.87] -ingredients = ["Taipei Q2", "Rest of TW Q2"] +ingredients = ["Taipei Q2", "Rest of Taiwan"] def func(pct, allvals): From bb9527c4638c61804c955db1ecca5015c62e1c26 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 09:03:24 +0800 Subject: [PATCH 1740/2002] Committed on or around 2024/12/29 --- The attainments and realizations of my dreams/FDI/2024 Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q2.py index e279a81c..27194cc6 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q2.py @@ -13,7 +13,7 @@ data = [15.39, 5.87] -ingredients = ["Taipei Q2", "Rest of Taiwan"] +ingredients = ["Taipei", "Rest of Taiwan"] def func(pct, allvals): From 7d541da586837c149a66ec44e8650ee42dbfeea3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 29 Dec 2024 09:03:53 +0800 Subject: [PATCH 1741/2002] Committed on or around 2024/12/29 --- The attainments and realizations of my dreams/FDI/2024 Q2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/FDI/2024 Q2.py b/The attainments and realizations of my dreams/FDI/2024 Q2.py index 27194cc6..a9af2c5d 100644 --- a/The attainments and realizations of my dreams/FDI/2024 Q2.py +++ b/The attainments and realizations of my dreams/FDI/2024 Q2.py @@ -25,7 +25,7 @@ def func(pct, allvals): textprops=dict(color="w")) ax.legend(wedges, ingredients, - title="TPE vs TW", + title="City", loc="center left", bbox_to_anchor=(1, 0, 0.5, 1)) From bcb9a3c853ffa9e93a26d94d2317db50838489a8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 18 Jan 2025 21:41:46 +0800 Subject: [PATCH 1742/2002] Committed on or around 2025/01/18 --- .../2024/November/At city level.py | 66 ++++++++++++++++++ .../2024/November/At metro level.py | 0 .../2024/November/CC0.png | Bin 0 -> 980 bytes 3 files changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py new file mode 100644 index 00000000..11bc28da --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [120852, 72141, 50727, 65562, 28934, 41770] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/09 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/QkgSJ") + +plt.ylim(29000, 120000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Sat, 18 Jan 2025 21:43:40 +0800 Subject: [PATCH 1743/2002] Committed on or around 2025/01/18 --- .../2024/November/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py index 11bc28da..51a15ed8 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [120852, 72141, 50727, 65562, 28934, 41770] +position_vacancies = [120852, 72141, 49778, 63245, 28934, 41770] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 7a0b4af0f5d8ff35b91a209e3f593c33f1db8c37 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 18 Jan 2025 21:45:08 +0800 Subject: [PATCH 1744/2002] Committed on or around 2025/01/18 --- .../2024/November/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py index 51a15ed8..04109bab 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [120852, 72141, 49778, 63245, 28934, 41770] +position_vacancies = [120852, 72141, 49778, 63245, 27751, 40524] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From f43a24c62447c7d3a85765dda92322c58575c9f2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 18 Jan 2025 21:46:15 +0800 Subject: [PATCH 1745/2002] Committed on or around 2025/01/18 --- .../2024/November/At city level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py index 04109bab..c1fa43e5 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py @@ -31,10 +31,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/09 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) +plt.title("2024/11 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: https://archive.ph/QkgSJ") +plt.xlabel("鞈 Reference: https://archive.ph/RJysO") plt.ylim(29000, 120000) From 2b6b753db3be220c59e3799c2c536f716d132520 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 18 Jan 2025 21:47:05 +0800 Subject: [PATCH 1746/2002] Committed on or around 2025/01/18 --- .../2024/November/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py index c1fa43e5..922342a3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At city level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/RJysO") -plt.ylim(29000, 120000) +plt.ylim(28500, 115000) img = image.imread('CC0.png') From 0ee53925a8f58194f66d866f45033fe612debd5a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 18 Jan 2025 21:56:14 +0800 Subject: [PATCH 1747/2002] Committed on or around 2025/01/18 --- .../2024/November/At metro level.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py index e69de29b..15dafda2 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2457+122625+73277+4385, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/HbvM1") + +plt.ylim(40000, 190000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 25098e93fedcc80b8ef5f5b2b7801b6d0c1efe8b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 18 Jan 2025 23:38:07 +0800 Subject: [PATCH 1748/2002] Committed on or around 2025/01/18 --- .../2024/November/At metro level.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py index 15dafda2..5880dacc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py @@ -31,10 +31,10 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2024/11 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/HbvM1") +plt.xlabel("鞈 Reference https://archive.ph/RJysO") plt.ylim(40000, 190000) From 029f0fc38ab3428a1897247d07eff92f876f420a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 18 Jan 2025 23:44:19 +0800 Subject: [PATCH 1749/2002] Committed on or around 2025/01/18 --- .../2024/November/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py index 5880dacc..8f7950fd 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2457+122625+73277+4385, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2393+120852+72141+4192, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 053eae7620140505cbfd13275652a04199de3648 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 19 Jan 2025 00:02:04 +0800 Subject: [PATCH 1750/2002] Committed on or around 2025/01/19 --- .../2024/November/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py index 8f7950fd..8f843e7c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2393+120852+72141+4192, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2393+120852+72141+4192, 49778+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From e4ec8c4a8622ba384e50729e2c28629fb7c9144b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 19 Jan 2025 01:13:18 +0800 Subject: [PATCH 1751/2002] Committed on or around 2025/01/19 --- .../2024/November/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py index 8f843e7c..d94f5abb 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2393+120852+72141+4192, 49778+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2393+120852+72141+4192, 49778+34158+6679, 64162+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From d79ac4e2f42fa08a1632a508c066e595b8a65c2b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 19 Jan 2025 01:16:53 +0800 Subject: [PATCH 1752/2002] Committed on or around 2025/01/19 --- .../2024/November/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py index d94f5abb..2139d2a4 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2393+120852+72141+4192, 49778+34158+6679, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2393+120852+72141+4192, 49778+34158+6679, 63245+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 5e3f8e898f9150162d287332946d693c5041d179 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 19 Jan 2025 02:09:54 +0800 Subject: [PATCH 1753/2002] Committed on or around 2025/01/19 --- .../2024/November/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py index 2139d2a4..c89c53f3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2393+120852+72141+4192, 49778+34158+6679, 63245+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2393+120852+72141+4192, 49778+34158+6679, 63245+11172+3637, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 4b445b97e167545a491f25cf47245d05cd9da032 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 19 Jan 2025 02:10:57 +0800 Subject: [PATCH 1754/2002] Committed on or around 2025/01/19 --- .../2024/November/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py index c89c53f3..3e954263 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2393+120852+72141+4192, 49778+34158+6679, 63245+11172+3637, 4929+7221+28352, 41259+4967] +position_vacancies = [2393+120852+72141+4192, 49778+34158+6679, 63245+11172+3637, 4836+7225+27751, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 7ece7e5ff8e3db3ea6821e141f80af135cec8b4c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 19 Jan 2025 02:11:25 +0800 Subject: [PATCH 1755/2002] Committed on or around 2025/01/19 --- .../2024/November/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py index 3e954263..1890f483 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/November/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2393+120852+72141+4192, 49778+34158+6679, 63245+11172+3637, 4836+7225+27751, 41259+4967] +position_vacancies = [2393+120852+72141+4192, 49778+34158+6679, 63245+11172+3637, 4836+7225+27751, 40524+4772] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 3e1107ab7783a11d8ae9fed38c846ebcede5075b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 25 Jan 2025 02:09:50 +0800 Subject: [PATCH 1756/2002] Committed on or around 2025/01/25 --- .../2024/December/At city level.py | 0 .../2024/December/At metro level.py | 0 .../2024/December/__init__.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/__init__.py new file mode 100644 index 00000000..e69de29b From f8f6e783d6465626ddbbd9eaa04a92cabaecf30a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 27 Jan 2025 03:00:42 +0800 Subject: [PATCH 1757/2002] Committed on or around 2025/01/27 --- .../2024/December/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Tue, 28 Jan 2025 18:03:00 +0800 Subject: [PATCH 1758/2002] Committed on or around 2025/01/28 --- .../2024/December/At city level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py index e69de29b..2e9c9e1e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [119996, 74867, 50727, 65562, 28934, 41770] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/12 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/oHkAG") + +plt.ylim(29000, 120000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From d9b6103a56453b16b78a3b3d6bc0456976a4dec8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:03:25 +0800 Subject: [PATCH 1759/2002] Committed on or around 2025/01/28 --- .../2024/December/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py index 2e9c9e1e..ed93fd43 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [119996, 74867, 50727, 65562, 28934, 41770] +position_vacancies = [119996, 71805, 50727, 65562, 28934, 41770] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 47c2da61d7dc076bc01abc22544a8adfaf88992a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:04:01 +0800 Subject: [PATCH 1760/2002] Committed on or around 2025/01/28 --- .../2024/December/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py index ed93fd43..3ab4e470 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [119996, 71805, 50727, 65562, 28934, 41770] +position_vacancies = [119996, 71805, 49495, 65562, 28934, 41770] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From c13e32b9505038bf571a0d1d027cb2ce20b1f31b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:04:36 +0800 Subject: [PATCH 1761/2002] Committed on or around 2025/01/28 --- .../2024/December/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py index 3ab4e470..e5c6571b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [119996, 71805, 49495, 65562, 28934, 41770] +position_vacancies = [119996, 71805, 49495, 61844, 28934, 41770] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 36817341773eee347277776d016434b1ae168c1a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:04:51 +0800 Subject: [PATCH 1762/2002] Committed on or around 2025/01/28 --- .../2024/December/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py index e5c6571b..e0be917a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [119996, 71805, 49495, 61844, 28934, 41770] +position_vacancies = [119996, 71805, 49495, 61844, 27652, 41770] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From d3b6b7cd9539646ddc63b5534439f713e00cdb1d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:05:20 +0800 Subject: [PATCH 1763/2002] Committed on or around 2025/01/28 --- .../2024/December/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py index e0be917a..8eb80083 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [119996, 71805, 49495, 61844, 27652, 41770] +position_vacancies = [119996, 71805, 49495, 61844, 27652, 40108] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 29bf8d63ca15385dc39b1ac72ba4729ed6887c0a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:07:18 +0800 Subject: [PATCH 1764/2002] Committed on or around 2025/01/28 --- .../2024/December/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py index 8eb80083..000d1686 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At city level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/oHkAG") -plt.ylim(29000, 120000) +plt.ylim(25000, 115000) img = image.imread('CC0.png') From 0d26c91f22f59f252db09686f3178ed694b93bbd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:08:12 +0800 Subject: [PATCH 1765/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index e69de29b..e9c638bc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2479+125456+74867+4649, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/QkgSJ") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 222111099aefad1281784221b58a98e47a010878 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:09:20 +0800 Subject: [PATCH 1766/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index e9c638bc..693df129 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -34,7 +34,7 @@ plt.title("2024/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/QkgSJ") +plt.xlabel("鞈 Reference https://archive.ph/oHkAG") plt.ylim(40000, 200000) From 7eb187bca149eefeacdb5fe7100ab0901f4e0863 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:12:05 +0800 Subject: [PATCH 1767/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 693df129..00d1795f 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2479+125456+74867+4649, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+74867+4649, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 3dd7f0ed2b4e78264f1d72417612b401f189a238 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:12:41 +0800 Subject: [PATCH 1768/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 00d1795f..baf745a2 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+74867+4649, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4649, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From e4f6068d6544333c810732490cf9cfb5148fda7f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:13:33 +0800 Subject: [PATCH 1769/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index baf745a2..8bdca562 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4649, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 33874f6954e8e010dce1476b4d5e32d52a1168ae Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:17:21 +0800 Subject: [PATCH 1770/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 8bdca562..d9e7560a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/09 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2024/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/oHkAG") From c9128f8e573a8f309a5e8498ca80468f8bdc9f67 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:18:52 +0800 Subject: [PATCH 1771/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index d9e7560a..031f7506 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 50727+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From adb35da9f449c23594dc4bbe07aa32ac06a7db7e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:19:17 +0800 Subject: [PATCH 1772/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 031f7506..0cc91289 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+34653+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From ee59ee9e7198ffd937b077677ac2e72994011c73 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:19:36 +0800 Subject: [PATCH 1773/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 0cc91289..7470e9da 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+33978+6936, 65562+11664+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 65562+11664+3830, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From e3f71cf3ce02bc51ff5c8fb08be4e5bfdfbb1333 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:38:11 +0800 Subject: [PATCH 1774/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 7470e9da..07049fb4 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 65562+11664+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11664+3830, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From dbbc98e70f5238fda936c590bf2a8a87f72e8dea Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:49:42 +0800 Subject: [PATCH 1775/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 07049fb4..ddac3c31 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11664+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3830, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From cb64afbe3575a300d8be799c4a4d60c6a0d29ec0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:51:29 +0800 Subject: [PATCH 1776/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index ddac3c31..8a94c86c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3830, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4844+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 3d34b4b70a30ad235a7f12cfa9fceb3fb5b5a65b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:52:08 +0800 Subject: [PATCH 1777/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 8a94c86c..af661a96 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4844+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7443+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 1b3fdccc0b6d6db6db9a80b24acbb56e01b9fee0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:52:18 +0800 Subject: [PATCH 1778/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index af661a96..693c9dde 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7443+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7172+28934, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From aa36dc15c4db25115708d91af7c57a1f368f57f1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:53:01 +0800 Subject: [PATCH 1779/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 693c9dde..a3105d1c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7172+28934, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7172+27652, 41770+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 76368376a3a6576be77057c7a7584d5c6f40631c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:54:01 +0800 Subject: [PATCH 1780/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index a3105d1c..9d426f11 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7172+27652, 41770+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7172+27652, 40108+5043] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 9808ad18b7554a100af32ff047115696cbedee20 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 28 Jan 2025 18:54:16 +0800 Subject: [PATCH 1781/2002] Committed on or around 2025/01/28 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 9d426f11..843d99ff 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7172+27652, 40108+5043] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7172+27652, 40108+4779] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 0a6d5ab2e79931ed50e198aed06484ca7367d558 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 10 Feb 2025 00:08:37 +0800 Subject: [PATCH 1782/2002] Committed on or around 2025/02/10 --- .../Monthly_total_job_openings_by_region/2025/January/__init__.py | 0 .../Monthly_total_job_openings_by_region/2025/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/__init__.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/__init__.py new file mode 100644 index 00000000..e69de29b From ce0eb30f8c69b513ef0f03ff002220a7a7acc610 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 10 Feb 2025 00:13:15 +0800 Subject: [PATCH 1783/2002] Committed on or around 2025/02/10 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 843d99ff..3786b3a7 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/oHkAG") -plt.ylim(40000, 200000) +plt.ylim(39500, 195000) img = image.imread('CC0.png') # CC0.png downloaded from [7]. From 825b2d294a4432e6615dff7ee71714bf19243068 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 10 Feb 2025 01:56:44 +0800 Subject: [PATCH 1784/2002] Committed on or around 2025/02/10 --- .../2024/December/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py index 3786b3a7..763cccbc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/oHkAG") -plt.ylim(39500, 195000) +plt.ylim(39000, 190000) img = image.imread('CC0.png') # CC0.png downloaded from [7]. From a02076455bb9e0fee678332d84db3a0ecee35c47 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 15 Feb 2025 18:52:42 +0800 Subject: [PATCH 1785/2002] Committed on or around 2025/02/15 --- .../2025/January/At city level.py | 0 .../2025/January/At metro level.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At city level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At city level.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py new file mode 100644 index 00000000..e69de29b From ba48136a0adb2fb0b4fdc49d05f052543a9584c6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 18:59:07 +0800 Subject: [PATCH 1786/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index e69de29b..cb2e3676 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2382+118969+73277+4385, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/01 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/Bjrvq") + +plt.ylim(40000, 190000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 5beca8220d44f26eb846e84b0f43873dfc0c96c1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:30:55 +0800 Subject: [PATCH 1787/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index cb2e3676..1f7cb75f 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+73277+4385, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2382+118969+70387+4385, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 6576e5a7689ae72e991f6ba33783d82f7c63c210 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:31:36 +0800 Subject: [PATCH 1788/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index 1f7cb75f..6ee27d4e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+70387+4385, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2382+118969+70387+4144, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From cb4a3227094fb1bc3cfbb0ba68f43aaffc7e020a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:31:59 +0800 Subject: [PATCH 1789/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index 6ee27d4e..672e5501 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+70387+4144, 50629+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2382+118969+70387+4144, 48672+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 89934050aec225ddbee583c516aef6665ab43b66 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:32:22 +0800 Subject: [PATCH 1790/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index 672e5501..a5cd46fb 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+70387+4144, 48672+34417+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2382+118969+70387+4144, 48672+33781+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 515fd4b32e0ef5213c69b78ced4241400eb1d272 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:32:45 +0800 Subject: [PATCH 1791/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index a5cd46fb..a8f7306c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+70387+4144, 48672+33781+6723, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 64162+11297+3722, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 9cf1de534a285b39598c2f9a0abd16e19bb60ce1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:33:49 +0800 Subject: [PATCH 1792/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index a8f7306c..38e21c9a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 64162+11297+3722, 4929+7221+28352, 41259+4967] +position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4929+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 06860b2df6a9310707d89ce51152f64a24983363 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:34:16 +0800 Subject: [PATCH 1793/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index 38e21c9a..9b796ddc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4929+7221+28352, 41259+4967] +position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7221+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From ace9ed7484d82cb8d26b6ee34dfce0b8148b7f7a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:34:46 +0800 Subject: [PATCH 1794/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index 9b796ddc..387f32a1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7221+28352, 41259+4967] +position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+28352, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 93338e2155f199ff42bcf9cfb7d67467f8f26f66 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:35:02 +0800 Subject: [PATCH 1795/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index 387f32a1..24e432c1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+28352, 41259+4967] +position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 41259+4967] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From fab5ba16fba0975c3a5e397f8c7036f1aea27eea Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:55:55 +0800 Subject: [PATCH 1796/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py index 24e432c1..32e38440 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 41259+4967] +position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From d3c1d1e6df5b3d18e08e84734ee32c63e6b40e27 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 19:56:40 +0800 Subject: [PATCH 1797/2002] Committed on or around 2025/02/16 --- .../2025/January/CC-BY.png | Bin 0 -> 1283 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/CC-BY.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/CC-BY.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/CC-BY.png new file mode 100644 index 0000000000000000000000000000000000000000..cf596085a4ba8e2efe2c5bf1094b7226e03aa127 GIT binary patch literal 1283 zcmYk*X;4#F6bJB^gjy1t$Y6l7SV9K_j7X^)ZXkq!qyomEg%*&s0VA@AKu6F30YR36 z7_lgbLWN-*V)7EQlN}Pm5)ufDg~FgBQ&1^&jg1R^eCwItz5jD(&ZjeTtI4s4(I__* z003xG6p;dD0(3m>5zu|y*=B(PM~kAw0KkQ<0KmKi0ROH*xeNfm1OmWQDgf-i2>>o< zuchcCp;G*^ z5B2vC>GgvUoenb4*Ei6oGxYTtdV3AMTD?ZIPOZ_Y)jE~BPo;wNDwXRLYPDLSRVcJ_ zg+?LQ$mN=z9yLTJQ$eIsr9`3-i{&Cwk5Jen5XuAsX?M4j-!0+uB|N^E#}k7*5eSO7 zppeTGfLtMmE8u|LAV+Zjem5HgK{mguwf)YWw%e_(t&L5M4L2KD*IBFvR(*Yab!~O| zdPjcG!qtCv6=y^>^)G^3c>LpRB>idrZgnseOaf zo2EbBo<4BkJguP41$hZ(|2aZMlEh&%57PJKO%;dbOMMsuZH~9CD2qnRd;bFVr31zm zObZyxPIK)UNj>w7`bUU-$?eTMr`*ge+AC5jqO90lMPt&J7Z?%K#H}U7^NAH+R(eUG zLh6{PzLnc`FWSFTsD+uU!g+z!!-=Hhhz@IZqDg^DYmSs43W*q*$-=nO_ z1i!kI1O_#+V5yb!GnJ7=rDX4!mX{`{T&!0)d0)~>I@2c^;asuJr>?{8oU1ST)@KiN z#-xN8SuqLeO0aK>CXx`(oeS|Bqp&h$yIra)d+DtmfweffVLN3&DcjKCLE&gk)=c=- z+VWl3tn!sBFPa{Hpkyk)N+Kq2z}9fIcYjlr&mM8>^ft~u;Cb*Pc~IK|4!ZAV<1#S)HBeKthE2N|;1ZJ3VQgS5Qbl8lgSTUOi>>E4gC z4{)uWr@~pMTr3%{JtrGGUyFssyjQ{Ui>=753G%$3@zT*$f=#=3u_-UKOW^gLDCUz@ zz)c6}Np$6yd&7=@D#b02Wz?3N2h6v)c-tJ?i#N>MskJ&!yuh1Yb Date: Sun, 16 Feb 2025 19:57:31 +0800 Subject: [PATCH 1798/2002] Committed on or around 2025/02/16 --- .../2025/January/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Sun, 16 Feb 2025 20:02:46 +0800 Subject: [PATCH 1799/2002] Committed on or around 2025/02/16 --- .../2025/January/At metro level color.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level color.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level color.py new file mode 100644 index 00000000..2c698fb9 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/January/At metro level color.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2382+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('cyan'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/01 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/Bjrvq") + +plt.ylim(40000, 190000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From ca918c500f4dd5a8d61b365877fb2b6a290a3436 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 16 Feb 2025 22:54:30 +0800 Subject: [PATCH 1800/2002] Committed on or around 2025/02/16 --- .../2024/December/At metro level stained.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level stained.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level stained.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level stained.py new file mode 100644 index 00000000..561e48e4 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2024/December/At metro level stained.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2368+119996+71805+4210, 49495+33978+6655, 61844+11051+3587, 4801+7172+27652, 40108+4779] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('cyan'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/12 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/oHkAG") + +plt.ylim(39000, 190000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 8eace4ec16f6fc8b5494c7ff86450ec221ba5e5d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 1 Mar 2025 18:58:14 +0800 Subject: [PATCH 1801/2002] Committed on or around 2025/03/01 --- .../2025/February/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/__init__.py new file mode 100644 index 00000000..e69de29b From 6a4b7295c4552207676cb6d8dde5bcbbcf4bf936 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 2 Mar 2025 20:57:41 +0800 Subject: [PATCH 1802/2002] Committed on or around 2025/03/02 --- .../FDI/2023 Q4.py | 38 ++++++++++++++++++ ...\207\351\207\221\351\241\215_2025_02.xlsx" | Bin 0 -> 18278 bytes 2 files changed, 38 insertions(+) create mode 100644 The attainments and realizations of my dreams/FDI/2023 Q4.py create mode 100644 "The attainments and realizations of my dreams/FDI/\345\216\237\345\247\213\350\263\207\346\226\231_\345\203\221\345\244\226\346\212\225\350\263\207\351\207\221\351\241\215_2025_02.xlsx" diff --git a/The attainments and realizations of my dreams/FDI/2023 Q4.py b/The attainments and realizations of my dreams/FDI/2023 Q4.py new file mode 100644 index 00000000..32f4a738 --- /dev/null +++ b/The attainments and realizations of my dreams/FDI/2023 Q4.py @@ -0,0 +1,38 @@ +import matplotlib.pyplot as plt +import numpy as np + +fig, ax = plt.subplots(figsize=(7, 3), subplot_kw=dict(aspect="equal")) + +# recipe = ["7.98 USD flour", +# "75 g sugar", +# "250 g butter", +# "300 g berries"] + +# data = [float(x.split()[0]) for x in recipe] +# ingredients = [x.split()[-1] for x in recipe] + +data = [30.25, 2.55] + +ingredients = ["Taipei", "Rest of Taiwan"] + + +def func(pct, allvals): + absolute = int(np.round(pct/100.*np.sum(allvals))) + return f"{pct:.1f}%\n({absolute:d} Million\n of USD)" + + +wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data), + textprops=dict(color="w")) + +ax.legend(wedges, ingredients, + title="City", + loc="center left", + bbox_to_anchor=(1, 0, 0.5, 1)) + +plt.setp(autotexts, size=8, weight="bold") + +ax.set_title("2023 Q4 The distribution of Taiwan's Foreign Direct Investment by Region") + +plt.xlabel("Reference: https://taipeiecon.taipei/Econ/econ_obs?id=5") + +plt.show() diff --git "a/The attainments and realizations of my dreams/FDI/\345\216\237\345\247\213\350\263\207\346\226\231_\345\203\221\345\244\226\346\212\225\350\263\207\351\207\221\351\241\215_2025_02.xlsx" "b/The attainments and realizations of my dreams/FDI/\345\216\237\345\247\213\350\263\207\346\226\231_\345\203\221\345\244\226\346\212\225\350\263\207\351\207\221\351\241\215_2025_02.xlsx" new file mode 100644 index 0000000000000000000000000000000000000000..7940c2cda06266dd5b45b17a83fda9e23ae073ba GIT binary patch literal 18278 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 VkBQ~O1^altd~_VE3jOi!{{zBEf|URO literal 0 HcmV?d00001 From 0a0e8ef4bc64ea39a6289ab0b4444fee8c745d48 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 2 Mar 2025 21:18:02 +0800 Subject: [PATCH 1803/2002] Committed on or around 2025/03/02 --- .../2023/Taipei_v_Kaohsiung_Nov_colored.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_Nov_colored.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_Nov_colored.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_Nov_colored.py new file mode 100644 index 00000000..6010c1dc --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2023/Taipei_v_Kaohsiung_Nov_colored.py @@ -0,0 +1,65 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2] +position_vacancies = [117404, 37960] + +label = ["啣撣\nTaipei City", "擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('blue'), + colour.CSS4_COLORS.get('green'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2023/11 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://web.archive.org/web/20231124162552/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(30000, 130000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 71923ccf1f88a53fad8f32b7d219f2e6633ec32e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 11 Mar 2025 11:22:53 +0800 Subject: [PATCH 1804/2002] Committed on or around 2025/03/11 --- .../2025/February/At metro level color.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py new file mode 100644 index 00000000..9561c3bd --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2633+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('cyan'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/ApRE7") + +plt.ylim(40000, 190000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From e9814bcea5bb4b52152a77a55e0311c601f83978 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 11 Mar 2025 11:23:15 +0800 Subject: [PATCH 1805/2002] Committed on or around 2025/03/11 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index 9561c3bd..d65ae872 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+118969+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] +position_vacancies = [2633+128075+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 143f4f92d2de960cf3e6908575635bdc2c5a3e17 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 11 Mar 2025 11:23:47 +0800 Subject: [PATCH 1806/2002] Committed on or around 2025/03/11 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index d65ae872..78a6f04f 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+128075+70387+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] +position_vacancies = [2633+128075+78000+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From f60236617586b52fb3296673caa5d4c35ff3b9b9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 11 Mar 2025 11:37:19 +0800 Subject: [PATCH 1807/2002] Committed on or around 2025/03/11 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index 78a6f04f..118f60c6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+128075+78000+4144, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] +position_vacancies = [2633+128075+78000+4404, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 85401375440f63d2a2947d387b8a0dbb3938a57f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 11 Mar 2025 11:39:39 +0800 Subject: [PATCH 1808/2002] Committed on or around 2025/03/11 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index 118f60c6..de1412ef 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -43,7 +43,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.6, y=0.7, s="CC0 Public Domain\n∠甈", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From b77833f7b6405545e058553158fbdfcf5cabb2b5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 11 Mar 2025 11:40:49 +0800 Subject: [PATCH 1809/2002] Committed on or around 2025/03/11 --- .../2025/February/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Fri, 14 Mar 2025 12:24:13 +0800 Subject: [PATCH 1810/2002] Committed on or around 2025/03/14 --- .../Annual local government expenditure/Composition/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/__init__.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/__init__.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/__init__.py new file mode 100644 index 00000000..e69de29b From e703af75fe0e3377ed134f5c646965c9b8a75583 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:35:53 +0800 Subject: [PATCH 1811/2002] Committed on or around 2025/03/14 --- .../Composition/Sample.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py new file mode 100644 index 00000000..1f904639 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py @@ -0,0 +1,24 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Adelie', 'Chinstrap', 'Gentoo') +sex_counts = { + 'Male': np.array([73, 34, 61]), + 'Female': np.array([73, 34, 58]), +} +width = 0.6 # the width of the bars: can also be len(x) sequence + + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From 1827c4bf2f8804468c73f086ea128c71dbaab5e8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:57:29 +0800 Subject: [PATCH 1812/2002] Committed on or around 2025/03/14 --- .../Composition/2024.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024.py new file mode 100644 index 00000000..ba5269e5 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024.py @@ -0,0 +1,24 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Chinstrap', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([73, 34, 58]), +} +width = 0.6 # the width of the bars: can also be len(x) sequence + + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From 18bbe9d004132238900161fb5810b18f6a1ac95d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 14 Mar 2025 13:23:45 +0800 Subject: [PATCH 1813/2002] Committed on or around 2025/03/14 --- .../Composition/bar_label_demo.py | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/bar_label_demo.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/bar_label_demo.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/bar_label_demo.py new file mode 100644 index 00000000..2e43dbb1 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/bar_label_demo.py @@ -0,0 +1,126 @@ +""" +===================== +Bar chart with labels +===================== + +This example shows how to use the `~.Axes.bar_label` helper function +to create bar chart labels. + +See also the :doc:`grouped bar +`, +:doc:`stacked bar +` and +:doc:`horizontal bar chart +` examples. +""" + +import matplotlib.pyplot as plt +import numpy as np + +# %% +# data from https://allisonhorst.github.io/palmerpenguins/ + +species = ('Adelie', 'Chinstrap', 'Gentoo') +sex_counts = { + 'Male': np.array([73, 34, 61]), + 'Female': np.array([73, 34, 58]), +} +width = 0.6 # the width of the bars: can also be len(x) sequence + + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() + +# %% +# Horizontal bar chart + +# Fixing random state for reproducibility +np.random.seed(19680801) + +# Example data +people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') +y_pos = np.arange(len(people)) +performance = 3 + 10 * np.random.rand(len(people)) +error = np.random.rand(len(people)) + +fig, ax = plt.subplots() + +hbars = ax.barh(y_pos, performance, xerr=error, align='center') +ax.set_yticks(y_pos, labels=people) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel('Performance') +ax.set_title('How fast do you want to go today?') + +# Label with specially formatted floats +ax.bar_label(hbars, fmt='%.2f') +ax.set_xlim(right=15) # adjust xlim to fit labels + +plt.show() + +# %% +# Some of the more advanced things that one can do with bar labels + +fig, ax = plt.subplots() + +hbars = ax.barh(y_pos, performance, xerr=error, align='center') +ax.set_yticks(y_pos, labels=people) +ax.invert_yaxis() # labels read top-to-bottom +ax.set_xlabel('Performance') +ax.set_title('How fast do you want to go today?') + +# Label with given captions, custom padding and annotate options +ax.bar_label(hbars, labels=[f'簣{e:.2f}' for e in error], + padding=8, color='b', fontsize=14) +ax.set_xlim(right=16) + +plt.show() + +# %% +# Bar labels using {}-style format string + +fruit_names = ['Coffee', 'Salted Caramel', 'Pistachio'] +fruit_counts = [4000, 2000, 7000] + +fig, ax = plt.subplots() +bar_container = ax.bar(fruit_names, fruit_counts) +ax.set(ylabel='pints sold', title='Gelato sales by flavor', ylim=(0, 8000)) +ax.bar_label(bar_container, fmt='{:,.0f}') + +# %% +# Bar labels using a callable + +animal_names = ['Lion', 'Gazelle', 'Cheetah'] +mph_speed = [50, 60, 75] + +fig, ax = plt.subplots() +bar_container = ax.bar(animal_names, mph_speed) +ax.set(ylabel='speed in MPH', title='Running speeds', ylim=(0, 80)) +ax.bar_label(bar_container, fmt=lambda x: f'{x * 1.61:.1f} km/h') + +# %% +# +# .. admonition:: References +# +# The use of the following functions, methods, classes and modules is shown +# in this example: +# +# - `matplotlib.axes.Axes.bar` / `matplotlib.pyplot.bar` +# - `matplotlib.axes.Axes.barh` / `matplotlib.pyplot.barh` +# - `matplotlib.axes.Axes.bar_label` / `matplotlib.pyplot.bar_label` +# +# .. tags:: +# +# component: label +# plot-type: bar +# level: beginner From 7991a77e84b33b0b89beb23c3163aa9d1f34bd5a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 14 Mar 2025 15:05:24 +0800 Subject: [PATCH 1814/2002] Committed on or around 2025/03/14 --- .../Annual local government expenditure/Composition/Sample.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py index 1f904639..8117861a 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py @@ -10,7 +10,7 @@ fig, ax = plt.subplots() -bottom = np.zeros(3) +bottom = np.zeros(3) # 3 species for sex, sex_count in sex_counts.items(): p = ax.bar(species, sex_count, width, label=sex, bottom=bottom) From 784688a047a718dabe7f2b9414d50a22c30fe1b1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 14 Mar 2025 15:05:58 +0800 Subject: [PATCH 1815/2002] Committed on or around 2025/03/14 --- .../Annual local government expenditure/Composition/Sample.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py index 8117861a..92b091c0 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/Sample.py @@ -22,3 +22,5 @@ ax.legend() plt.show() + +# Source: https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html From 94781fe4a68fafb8bd8eefcc3cd10d9662de9a0b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 12:22:23 +0800 Subject: [PATCH 1816/2002] Committed on or around 2025/03/20 --- .../2025/February/At city level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At city level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At city level.py new file mode 100644 index 00000000..14fcc6ef --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At city level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [128075, 78000, 53560, 67473, 30503, 43279] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/2 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/ApRE7") + +plt.ylim(25000, 115000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 2c7e41ba940625bba1a90702d68c82a31771b114 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 12:23:42 +0800 Subject: [PATCH 1817/2002] Committed on or around 2025/03/20 --- .../2025/February/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At city level.py index 14fcc6ef..6d99d01c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At city level.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/ApRE7") -plt.ylim(25000, 115000) +plt.ylim(30000, 120000) img = image.imread('CC0.png') From a8cfc03c4c9db19e6d8e5e9383f3877b1bfc5ec5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 12:38:19 +0800 Subject: [PATCH 1818/2002] Committed on or around 2025/03/20 --- .../Composition/2024-2.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py new file mode 100644 index 00000000..465728ac --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py @@ -0,0 +1,29 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Chinstrap', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([73, 34, 58]), +} +width = 0.6 # the width of the bars: can also be len(x) sequence + + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From af9096706ca3f7232804674ac7d9c2063159f9ca Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 12:45:54 +0800 Subject: [PATCH 1819/2002] Committed on or around 2025/03/20 --- .../Composition/2024-2.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py index 465728ac..f5945672 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py @@ -1,6 +1,9 @@ import matplotlib.pyplot as plt import numpy as np +region_num = [1, 2, 3] +position_vacancies = [128075, 78000, 53560, 67473, 30503, 43279] + species = ('Taipei', 'Chinstrap', 'Kaohsiung') sex_counts = { 'Statutory': np.array([73, 34, 61]), @@ -18,6 +21,9 @@ ax.bar_label(p, label_type='center') + +plot = ax.bar(region_num, position_vacancies) + for rect in plot: height = rect.get_height() ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, From fb531f8427a6cccc1d281bc263c8d5b6fd4d5d3d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 12:51:17 +0800 Subject: [PATCH 1820/2002] Committed on or around 2025/03/20 --- .../Composition/2024-2.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py index f5945672..bd6abe6b 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py @@ -1,9 +1,6 @@ import matplotlib.pyplot as plt import numpy as np -region_num = [1, 2, 3] -position_vacancies = [128075, 78000, 53560, 67473, 30503, 43279] - species = ('Taipei', 'Chinstrap', 'Kaohsiung') sex_counts = { 'Statutory': np.array([73, 34, 61]), @@ -11,6 +8,9 @@ } width = 0.6 # the width of the bars: can also be len(x) sequence +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + 78000, 53560, 67473, 30503, 43279] fig, ax = plt.subplots() bottom = np.zeros(3) From dbf5143bb9aa00e38a0a5ba30bc410ebedb2b564 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 12:53:08 +0800 Subject: [PATCH 1821/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2024-2.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py index bd6abe6b..e936b696 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py @@ -10,7 +10,8 @@ region_num = [1, 2, 3] position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], - 78000, 53560, 67473, 30503, 43279] + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] fig, ax = plt.subplots() bottom = np.zeros(3) From 1cae323118f29f562b6d928625c8a1b750d19201 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 12:56:28 +0800 Subject: [PATCH 1822/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2024-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py index e936b696..21a1ead6 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py @@ -1,7 +1,7 @@ import matplotlib.pyplot as plt import numpy as np -species = ('Taipei', 'Chinstrap', 'Kaohsiung') +species = ('Taipei', 'Taichung', 'Kaohsiung') sex_counts = { 'Statutory': np.array([73, 34, 61]), 'Basic subsidy': np.array([73, 34, 58]), From 3fc6fe22f4b397e95e59816797c96cf30b2ca1dc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 12:58:33 +0800 Subject: [PATCH 1823/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2024-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py index 21a1ead6..9fef605d 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-2.py @@ -23,7 +23,7 @@ ax.bar_label(p, label_type='center') -plot = ax.bar(region_num, position_vacancies) +plot = ax.bar(region_num, position_vacancies, width) for rect in plot: height = rect.get_height() From 2cec5b5fc45e23ad6b54bd247324f5817c920dd5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 13:00:21 +0800 Subject: [PATCH 1824/2002] Committed on or around 2025/03/20 --- .../Composition/2024-3.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-3.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-3.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-3.py new file mode 100644 index 00000000..f4d02de3 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-3.py @@ -0,0 +1,35 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Taichung', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([73, 34, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + +plot = ax.bar(region_num, position_vacancies, width=0.6) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From bb2b8c5be43e7f44d1193aa8bbb4d67f53da60a1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 13:08:37 +0800 Subject: [PATCH 1825/2002] Committed on or around 2025/03/20 --- .../Composition/2024-4.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py new file mode 100644 index 00000000..f4d02de3 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py @@ -0,0 +1,35 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Taichung', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([73, 34, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + +plot = ax.bar(region_num, position_vacancies, width=0.6) + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From 2fed2326835d696d6a69e4eeb64f708c8340d27f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 13:10:03 +0800 Subject: [PATCH 1826/2002] Committed on or around 2025/03/20 --- .../Composition/2024-4.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py index f4d02de3..106ce967 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py @@ -21,6 +21,11 @@ ax.bar_label(p, label_type='center') + for rect in p: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + plot = ax.bar(region_num, position_vacancies, width=0.6) From eb9a451b519f63a8e9aa55d41a5d29ced9b896fe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 13:12:11 +0800 Subject: [PATCH 1827/2002] Committed on or around 2025/03/20 --- .../Composition/2024-4.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py index 106ce967..812bb43e 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-4.py @@ -27,12 +27,12 @@ '%d' % int(height), ha='center', va='bottom', fontsize=12) -plot = ax.bar(region_num, position_vacancies, width=0.6) - -for rect in plot: - height = rect.get_height() - ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, - '%d' % int(height), ha='center', va='bottom', fontsize=12) +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) ax.set_title('Number of penguins by sex') ax.legend() From 6fade6e4cd796ae0a83ebb9db4ba449cbf9bcfaa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 13:39:22 +0800 Subject: [PATCH 1828/2002] Committed on or around 2025/03/20 --- .../Composition/2024-5.py | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5.py new file mode 100644 index 00000000..3498b698 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5.py @@ -0,0 +1,40 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Taichung', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([73, 34, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + for rect in p: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From 56daf2bdc740cfd6202d76983662151bba7a8fa8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 14:49:00 +0800 Subject: [PATCH 1829/2002] Committed on or around 2025/03/20 --- .../Composition/2024-6.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-6.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-6.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-6.py new file mode 100644 index 00000000..2a9f2816 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-6.py @@ -0,0 +1,41 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Taichung', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([73, 34, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + n = 0 + + height = p[n++].get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From 050a84c0fbbf1ab4ccb4798d9243b88fc20e297e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 14:53:58 +0800 Subject: [PATCH 1830/2002] Committed on or around 2025/03/20 --- .../Composition/2024-5-2.py | 40 +++++++++++++++++++ .../Composition/2024-6.py | 10 +++-- 2 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-2.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-2.py new file mode 100644 index 00000000..3498b698 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-2.py @@ -0,0 +1,40 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Taichung', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([73, 34, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + for rect in p: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-6.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-6.py index 2a9f2816..b5ead4d5 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-6.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-6.py @@ -15,18 +15,20 @@ fig, ax = plt.subplots() bottom = np.zeros(3) +n = 0 + for sex, sex_count in sex_counts.items(): p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) bottom += sex_count ax.bar_label(p, label_type='center') - n = 0 - - height = p[n++].get_height() - ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + height = p[n].get_height() + ax.text(p[n].get_x() + p[n].get_width() / 2., 2.001 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) + n = n + 1 + # plot = ax.bar(region_num, position_vacancies, width=0.6) # From 5383010a07c72b00ffb071e4c5d00ead77969ddf Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 14:57:16 +0800 Subject: [PATCH 1831/2002] Committed on or around 2025/03/20 --- .../Composition/2024-7.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py new file mode 100644 index 00000000..d0f0060f --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py @@ -0,0 +1,43 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Taichung', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([73, 34, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots(figsize=(5, 5)) +bottom = np.zeros(3) + +n = 0 + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + height = p[n].get_height() + ax.text(p[n].get_x() + p[n].get_width() / 2., 2.001 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + n = n + 1 + + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From 00c1c28db6bedd7515ab845f4f6797d01ee1eb53 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 14:58:05 +0800 Subject: [PATCH 1832/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2024-7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py index d0f0060f..9ae72f0b 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py @@ -12,7 +12,7 @@ sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] -fig, ax = plt.subplots(figsize=(5, 5)) +fig, ax = plt.subplots(figsize=(6, 5)) bottom = np.zeros(3) n = 0 From c90a4f3daf73843d3952c0193735dcfd0160e279 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 14:59:43 +0800 Subject: [PATCH 1833/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2024-7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py index 9ae72f0b..72c0b45f 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-7.py @@ -12,7 +12,7 @@ sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] -fig, ax = plt.subplots(figsize=(6, 5)) +fig, ax = plt.subplots(figsize=(6, 7)) bottom = np.zeros(3) n = 0 From 1070aecfeb261a3afa9964b261b92d283770ec66 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:04:46 +0800 Subject: [PATCH 1834/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2024-5-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-2.py index 3498b698..5005be6c 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-2.py @@ -4,7 +4,7 @@ species = ('Taipei', 'Taichung', 'Kaohsiung') sex_counts = { 'Statutory': np.array([73, 34, 61]), - 'Basic subsidy': np.array([73, 34, 58]), + 'Basic subsidy': np.array([71, 35, 58]), } region_num = [1, 2, 3] From 218422b8695cb2406cd55c04837eba06566f8b5a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:06:54 +0800 Subject: [PATCH 1835/2002] Committed on or around 2025/03/20 --- .../Composition/2024-5-3.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-3.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-3.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-3.py new file mode 100644 index 00000000..a8a9cb27 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-3.py @@ -0,0 +1,42 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Taichung', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([71, 35, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +p = 0 + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + for rect in p: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From 1757cf04c993ccbbe2d41d69b06d9b9a772a1067 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:08:31 +0800 Subject: [PATCH 1836/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2024-5-3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-3.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-3.py index a8a9cb27..d42eea81 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-3.py @@ -4,7 +4,7 @@ species = ('Taipei', 'Taichung', 'Kaohsiung') sex_counts = { 'Statutory': np.array([73, 34, 61]), - 'Basic subsidy': np.array([71, 35, 58]), + 'Basic subsidy': np.array([71, 39, 58]), } region_num = [1, 2, 3] From 8eddfe2d01037009798b2e4ccd69a8e98c9b1523 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:18:07 +0800 Subject: [PATCH 1837/2002] Committed on or around 2025/03/20 --- .../Composition/2024-5-4.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-4.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-4.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-4.py new file mode 100644 index 00000000..9d34d212 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2024-5-4.py @@ -0,0 +1,43 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Taichung', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Basic subsidy': np.array([71, 39, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +p = 0 + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=position_vacancies, label_type="edge") + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From ab9efc1813b07895457ecc47f0ee468abeb0323c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:33:57 +0800 Subject: [PATCH 1838/2002] Committed on or around 2025/03/20 --- .../Composition/2015.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py new file mode 100644 index 00000000..1b33a885 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py @@ -0,0 +1,43 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'Taichung', 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Federal discretionary aid': np.array([71, 39, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +p = 0 + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=position_vacancies, label_type="edge") + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From d41d683a6ff2b03827f195b75e98b91691a0843d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:34:17 +0800 Subject: [PATCH 1839/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py index 1b33a885..79d06ad0 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py @@ -4,7 +4,7 @@ species = ('Taipei', 'Taichung', 'Kaohsiung') sex_counts = { 'Statutory': np.array([73, 34, 61]), - 'Federal discretionary aid': np.array([71, 39, 58]), + 'Federal discretionary subsidy': np.array([71, 39, 58]), } region_num = [1, 2, 3] From b3c2b6849490005470c4f349a3cb8c03d297306f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:37:43 +0800 Subject: [PATCH 1840/2002] Committed on or around 2025/03/20 --- .../Composition/2015-2.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py new file mode 100644 index 00000000..777f8b5a --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -0,0 +1,43 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), + 'Federal discretionary subsidy': np.array([71, 39, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +p = 0 + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=position_vacancies, label_type="edge") + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title('Number of penguins by sex') +ax.legend() + +plt.show() From 1399c9b3713450eedc24fe9be2d9bffdedc1ffcc Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:38:05 +0800 Subject: [PATCH 1841/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py index 79d06ad0..de34c9ec 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015.py @@ -8,9 +8,9 @@ } region_num = [1, 2, 3] -position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], - sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], - sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Federal discretionary subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Federal discretionary subsidy"][2]] fig, ax = plt.subplots() bottom = np.zeros(3) From 3719c730b1d703690d36108067b85e353dff6979 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:43:12 +0800 Subject: [PATCH 1842/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index 777f8b5a..4b11f3af 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -37,7 +37,7 @@ # ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, # '%d' % int(height), ha='center', va='bottom', fontsize=12) -ax.set_title('Number of penguins by sex') +ax.set_title("2015's composition of local government's income") ax.legend() plt.show() From 9204d871b13741cca0e75e1ff1418d9daf0a6fae Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:44:28 +0800 Subject: [PATCH 1843/2002] Committed on or around 2025/03/20 --- .../Composition/2015-2.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index 4b11f3af..e4951886 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -3,7 +3,7 @@ species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') sex_counts = { - 'Statutory': np.array([73, 34, 61]), + 'Statutory': np.array([73, 34, 61]), #[1]:18 'Federal discretionary subsidy': np.array([71, 39, 58]), } @@ -41,3 +41,6 @@ ax.legend() plt.show() + +# References: +# 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf From 1d525204ce790afd6e0867524804b0908188be4e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:46:50 +0800 Subject: [PATCH 1844/2002] Committed on or around 2025/03/20 --- .../Composition/2015-2.py | 6 +-- .../Composition/2015-3.py | 46 +++++++++++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index e4951886..dd71038c 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -8,9 +8,9 @@ } region_num = [1, 2, 3] -position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], - sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], - sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Federal discretionary subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Federal discretionary subsidy"][2]] fig, ax = plt.subplots() bottom = np.zeros(3) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py new file mode 100644 index 00000000..e4951886 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py @@ -0,0 +1,46 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') +sex_counts = { + 'Statutory': np.array([73, 34, 61]), #[1]:18 + 'Federal discretionary subsidy': np.array([71, 39, 58]), +} + +region_num = [1, 2, 3] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] + +fig, ax = plt.subplots() +bottom = np.zeros(3) + +p = 0 + +for sex, sex_count in sex_counts.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=position_vacancies, label_type="edge") + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title("2015's composition of local government's income") +ax.legend() + +plt.show() + +# References: +# 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf From 58cacb399e499163cd571ae8f304f9ff29010cb7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:49:35 +0800 Subject: [PATCH 1845/2002] Committed on or around 2025/03/20 --- .../Composition/2015-2.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index dd71038c..e3e59fc2 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -7,10 +7,14 @@ 'Federal discretionary subsidy': np.array([71, 39, 58]), } -region_num = [1, 2, 3] position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], sex_counts["Statutory"][1] + sex_counts["Federal discretionary subsidy"][1], - sex_counts["Statutory"][2] + sex_counts["Federal discretionary subsidy"][2]] + sex_counts["Statutory"][2] + sex_counts["Federal discretionary subsidy"][2], + sex_counts["Statutory"][3] + sex_counts["Federal discretionary subsidy"][3], + sex_counts["Statutory"][4] + sex_counts["Federal discretionary subsidy"][4], + sex_counts["Statutory"][5] + sex_counts["Federal discretionary subsidy"][5], + sex_counts["Statutory"][6] + sex_counts["Federal discretionary subsidy"][6] + ] fig, ax = plt.subplots() bottom = np.zeros(3) From 35412e152fe10867c5cfe4279f6e96f81404d6fd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:51:37 +0800 Subject: [PATCH 1846/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index e3e59fc2..cb6ca7b7 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -3,7 +3,7 @@ species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') sex_counts = { - 'Statutory': np.array([73, 34, 61]), #[1]:18 + 'Statutory': np.array([34.95, 26.52, 17.12, 20.63, 17.44, 26.47]), #[1]:18 'Federal discretionary subsidy': np.array([71, 39, 58]), } From be5c2727f68c7f8b5825db3a480b4ede024990e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:56:31 +0800 Subject: [PATCH 1847/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index cb6ca7b7..86fb8841 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -4,7 +4,7 @@ species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') sex_counts = { 'Statutory': np.array([34.95, 26.52, 17.12, 20.63, 17.44, 26.47]), #[1]:18 - 'Federal discretionary subsidy': np.array([71, 39, 58]), + 'Federal discretionary subsidy': np.array([71, 39, 58]), #[1]:25 } position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], From 66c0cc87918fbec14f2d458a40ce0c5223cdefbe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:56:54 +0800 Subject: [PATCH 1848/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index 86fb8841..03369d44 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -17,7 +17,7 @@ ] fig, ax = plt.subplots() -bottom = np.zeros(3) +bottom = np.zeros(6) p = 0 From c0d9053200002aa1c549fafcfdbfe4d8ceadd536 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:58:31 +0800 Subject: [PATCH 1849/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index 03369d44..537a9bc0 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -4,7 +4,7 @@ species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') sex_counts = { 'Statutory': np.array([34.95, 26.52, 17.12, 20.63, 17.44, 26.47]), #[1]:18 - 'Federal discretionary subsidy': np.array([71, 39, 58]), #[1]:25 + 'Federal discretionary subsidy': np.array([17.12, 31.11, 15.21, 24.88, 27.83]), #[1]:25 } position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], From a5a16d58b77980d514c354f2288f4d3dc39179cd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 15:59:40 +0800 Subject: [PATCH 1850/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-2.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index 537a9bc0..f5410e1b 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -12,8 +12,7 @@ sex_counts["Statutory"][2] + sex_counts["Federal discretionary subsidy"][2], sex_counts["Statutory"][3] + sex_counts["Federal discretionary subsidy"][3], sex_counts["Statutory"][4] + sex_counts["Federal discretionary subsidy"][4], - sex_counts["Statutory"][5] + sex_counts["Federal discretionary subsidy"][5], - sex_counts["Statutory"][6] + sex_counts["Federal discretionary subsidy"][6] + sex_counts["Statutory"][5] + sex_counts["Federal discretionary subsidy"][5] ] fig, ax = plt.subplots() From f1c46baa3001622017b6e290d09d71ff59bf08b4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:00:58 +0800 Subject: [PATCH 1851/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py index f5410e1b..7a6147d0 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-2.py @@ -4,7 +4,7 @@ species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') sex_counts = { 'Statutory': np.array([34.95, 26.52, 17.12, 20.63, 17.44, 26.47]), #[1]:18 - 'Federal discretionary subsidy': np.array([17.12, 31.11, 15.21, 24.88, 27.83]), #[1]:25 + 'Federal discretionary subsidy': np.array([17.12, 31.11, 15.21, 24.88, 22.85, 27.83]), #[1]:25 } position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], From a3e7754a2148ef77ce2824b4a0df7902c8fb0c74 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:14:59 +0800 Subject: [PATCH 1852/2002] Committed on or around 2025/03/20 --- .../Composition/2015-3.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py index e4951886..dd236b57 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py @@ -3,17 +3,20 @@ species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') sex_counts = { - 'Statutory': np.array([73, 34, 61]), #[1]:18 - 'Federal discretionary subsidy': np.array([71, 39, 58]), + 'Statutory': [34.95, 26.52, 17.12, 20.63, 17.44, 26.47], #[1]:18 + 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25 } -region_num = [1, 2, 3] -position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Basic subsidy"][0], - sex_counts["Statutory"][1] + sex_counts["Basic subsidy"][1], - sex_counts["Statutory"][2] + sex_counts["Basic subsidy"][2]] +position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Federal discretionary subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Federal discretionary subsidy"][2], + sex_counts["Statutory"][3] + sex_counts["Federal discretionary subsidy"][3], + sex_counts["Statutory"][4] + sex_counts["Federal discretionary subsidy"][4], + sex_counts["Statutory"][5] + sex_counts["Federal discretionary subsidy"][5] + ] fig, ax = plt.subplots() -bottom = np.zeros(3) +bottom = np.zeros(6) p = 0 From 1539ad62fff1b1cec95000ac214d76fa5291892f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:26:49 +0800 Subject: [PATCH 1853/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py index dd236b57..2157c4dc 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py @@ -31,7 +31,7 @@ # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, # '%d' % int(height), ha='center', va='bottom', fontsize=12) -ax.bar_label(p, labels=position_vacancies, label_type="edge") +ax.bar_label(p, labels=position_vacancies, label_type="edge", fmt=%.2f) # plot = ax.bar(region_num, position_vacancies, width=0.6) # From 565de27d26fc3a93239d6cc2c4642b22f23b2acd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:27:06 +0800 Subject: [PATCH 1854/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py index 2157c4dc..87d7b8af 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py @@ -31,7 +31,7 @@ # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, # '%d' % int(height), ha='center', va='bottom', fontsize=12) -ax.bar_label(p, labels=position_vacancies, label_type="edge", fmt=%.2f) +ax.bar_label(p, labels=position_vacancies, label_type="edge", fmt="%.2f") # plot = ax.bar(region_num, position_vacancies, width=0.6) # From afc9dc123bc4b85aac7ab5f34350ddfa217f56b5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:29:55 +0800 Subject: [PATCH 1855/2002] Committed on or around 2025/03/20 --- .../Composition/2015-3.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py index 87d7b8af..47212099 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py @@ -7,13 +7,13 @@ 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25 } -position_vacancies = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], - sex_counts["Statutory"][1] + sex_counts["Federal discretionary subsidy"][1], - sex_counts["Statutory"][2] + sex_counts["Federal discretionary subsidy"][2], - sex_counts["Statutory"][3] + sex_counts["Federal discretionary subsidy"][3], - sex_counts["Statutory"][4] + sex_counts["Federal discretionary subsidy"][4], - sex_counts["Statutory"][5] + sex_counts["Federal discretionary subsidy"][5] - ] +sum = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], + sex_counts["Statutory"][1] + sex_counts["Federal discretionary subsidy"][1], + sex_counts["Statutory"][2] + sex_counts["Federal discretionary subsidy"][2], + sex_counts["Statutory"][3] + sex_counts["Federal discretionary subsidy"][3], + sex_counts["Statutory"][4] + sex_counts["Federal discretionary subsidy"][4], + sex_counts["Statutory"][5] + sex_counts["Federal discretionary subsidy"][5] + ] fig, ax = plt.subplots() bottom = np.zeros(6) @@ -31,7 +31,7 @@ # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, # '%d' % int(height), ha='center', va='bottom', fontsize=12) -ax.bar_label(p, labels=position_vacancies, label_type="edge", fmt="%.2f") +ax.bar_label(p, labels=sum, label_type="edge", fmt="%.2f") # plot = ax.bar(region_num, position_vacancies, width=0.6) # From 04a0f505ed6beee0aaab02622728b13fbbccdd31 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:32:08 +0800 Subject: [PATCH 1856/2002] Committed on or around 2025/03/20 --- .../Composition/2015-3.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py index 47212099..36db69a4 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-3.py @@ -2,17 +2,17 @@ import numpy as np species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') -sex_counts = { +allotted_money = { 'Statutory': [34.95, 26.52, 17.12, 20.63, 17.44, 26.47], #[1]:18 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25 } -sum = [sex_counts['Statutory'][0] + sex_counts["Federal discretionary subsidy"][0], - sex_counts["Statutory"][1] + sex_counts["Federal discretionary subsidy"][1], - sex_counts["Statutory"][2] + sex_counts["Federal discretionary subsidy"][2], - sex_counts["Statutory"][3] + sex_counts["Federal discretionary subsidy"][3], - sex_counts["Statutory"][4] + sex_counts["Federal discretionary subsidy"][4], - sex_counts["Statutory"][5] + sex_counts["Federal discretionary subsidy"][5] +sum = [allotted_money['Statutory'][0] + allotted_money["Federal discretionary subsidy"][0], + allotted_money["Statutory"][1] + allotted_money["Federal discretionary subsidy"][1], + allotted_money["Statutory"][2] + allotted_money["Federal discretionary subsidy"][2], + allotted_money["Statutory"][3] + allotted_money["Federal discretionary subsidy"][3], + allotted_money["Statutory"][4] + allotted_money["Federal discretionary subsidy"][4], + allotted_money["Statutory"][5] + allotted_money["Federal discretionary subsidy"][5] ] fig, ax = plt.subplots() @@ -20,7 +20,7 @@ p = 0 -for sex, sex_count in sex_counts.items(): +for sex, sex_count in allotted_money.items(): p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) bottom += sex_count From 3c0cc98df7ab01f370c7c943fde2afebcbc7265c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:34:33 +0800 Subject: [PATCH 1857/2002] Committed on or around 2025/03/20 --- .../Composition/2015-4.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-4.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-4.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-4.py new file mode 100644 index 00000000..f27a0a0c --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-4.py @@ -0,0 +1,49 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') +allotted_money = { + 'Statutory': [34.95, 26.52, 17.12, 20.63, 17.44, 26.47], #[1]:18 + 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25 +} + +sum = [allotted_money['Statutory'][0] + allotted_money["Federal discretionary subsidy"][0], + allotted_money["Statutory"][1] + allotted_money["Federal discretionary subsidy"][1], + allotted_money["Statutory"][2] + allotted_money["Federal discretionary subsidy"][2], + allotted_money["Statutory"][3] + allotted_money["Federal discretionary subsidy"][3], + allotted_money["Statutory"][4] + allotted_money["Federal discretionary subsidy"][4], + allotted_money["Statutory"][5] + allotted_money["Federal discretionary subsidy"][5] + ] + +fig, ax = plt.subplots() +bottom = np.zeros(6) + +p = 0 + +for sex, sex_count in allotted_money.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=sum, fmt="%.2f", label_type="edge") + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title("2015's composition of local government's income") +ax.legend() + +plt.show() + +# References: +# 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf From 5a087c930e109d9da496b06b2d85a770164c3434 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:38:39 +0800 Subject: [PATCH 1858/2002] Committed on or around 2025/03/20 --- .../Composition/2015-5.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py new file mode 100644 index 00000000..45d08d1a --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py @@ -0,0 +1,55 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') +allotted_money = { + 'Statutory': [34.95, 26.52, 17.12, 20.63, 17.44, 26.47], #[1]:18 + 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25 +} + +sum = [allotted_money['Statutory'][0] + allotted_money["Federal discretionary subsidy"][0], + allotted_money["Statutory"][1] + allotted_money["Federal discretionary subsidy"][1], + allotted_money["Statutory"][2] + allotted_money["Federal discretionary subsidy"][2], + allotted_money["Statutory"][3] + allotted_money["Federal discretionary subsidy"][3], + allotted_money["Statutory"][4] + allotted_money["Federal discretionary subsidy"][4], + allotted_money["Statutory"][5] + allotted_money["Federal discretionary subsidy"][5] + ] + +fig, ax = plt.subplots() +bottom = np.zeros(6) + +p = 0 + +for sex, sex_count in allotted_money.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) #[Note1] + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=sum, fmt="%.2f", label_type="edge") + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title("2015's composition of local government's income") +ax.legend() + +plt.show() + +# References: +# 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf +# 2. + +# Notes: +# 1. when having duplicate values in categorical x data, +# these values map to the same numerical x coordinate, and hence the corresponding bars +# are drawn on top of each other. [2] From 39a308cd9024a8118c292c339811493fcd8763db Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 17:09:57 +0800 Subject: [PATCH 1859/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py index 45d08d1a..a7f55c7f 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py @@ -31,7 +31,7 @@ # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, # '%d' % int(height), ha='center', va='bottom', fontsize=12) -ax.bar_label(p, labels=sum, fmt="%.2f", label_type="edge") +ax.bar_label(p, labels=sum, fmt=".2f", label_type="edge") # plot = ax.bar(region_num, position_vacancies, width=0.6) # From 781a39021406199f4a2869d4dba49b9473d36e6b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 17:12:16 +0800 Subject: [PATCH 1860/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py index a7f55c7f..53fcc116 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py @@ -31,7 +31,7 @@ # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, # '%d' % int(height), ha='center', va='bottom', fontsize=12) -ax.bar_label(p, labels=sum, fmt=".2f", label_type="edge") +ax.bar_label(p, labels=sum, fmt="{.2f}", label_type="edge") # plot = ax.bar(region_num, position_vacancies, width=0.6) # From 567d3ddcc27961c95b66226aa8a484978b5c6b71 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 17:12:46 +0800 Subject: [PATCH 1861/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py index 53fcc116..e475f45a 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py @@ -31,7 +31,7 @@ # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, # '%d' % int(height), ha='center', va='bottom', fontsize=12) -ax.bar_label(p, labels=sum, fmt="{.2f}", label_type="edge") +ax.bar_label(p, labels=sum, fmt="{:.2f}", label_type="edge") # plot = ax.bar(region_num, position_vacancies, width=0.6) # From 077a11e6bca0a0157a1b469925eb00bfa0e48f64 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:04:16 +0800 Subject: [PATCH 1862/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py index e475f45a..fce73b2d 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.py @@ -31,7 +31,7 @@ # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, # '%d' % int(height), ha='center', va='bottom', fontsize=12) -ax.bar_label(p, labels=sum, fmt="{:.2f}", label_type="edge") +ax.bar_label(p, labels=sum, fmt="{:3.2f}", label_type="edge") # plot = ax.bar(region_num, position_vacancies, width=0.6) # From 472d4e2a44d7657ad2b1ebe8e4def3c5a8610120 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:19:02 +0800 Subject: [PATCH 1863/2002] Committed on or around 2025/03/20 --- .../Composition/2015-5.ipynb | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.ipynb diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.ipynb b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.ipynb new file mode 100644 index 00000000..ecb41249 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.ipynb @@ -0,0 +1,105 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "initial_id", + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "" + ] + }, + { + "metadata": { + "jupyter": { + "is_executing": true + } + }, + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "species = ('Taipei', 'New Taipei', \"Taoyuan\", 'Taichung', \"Tainan\", 'Kaohsiung')\n", + "allotted_money = {\n", + " 'Statutory': [34.95, 26.52, 17.12, 20.63, 17.44, 26.47], #[1]:18\n", + " 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25\n", + "}\n", + "\n", + "sum = [allotted_money['Statutory'][0] + allotted_money[\"Federal discretionary subsidy\"][0],\n", + " allotted_money[\"Statutory\"][1] + allotted_money[\"Federal discretionary subsidy\"][1],\n", + " allotted_money[\"Statutory\"][2] + allotted_money[\"Federal discretionary subsidy\"][2],\n", + " allotted_money[\"Statutory\"][3] + allotted_money[\"Federal discretionary subsidy\"][3],\n", + " allotted_money[\"Statutory\"][4] + allotted_money[\"Federal discretionary subsidy\"][4],\n", + " allotted_money[\"Statutory\"][5] + allotted_money[\"Federal discretionary subsidy\"][5]\n", + " ]\n", + "\n", + "fig, ax = plt.subplots()\n", + "bottom = np.zeros(6)\n", + "\n", + "p = 0\n", + "\n", + "for sex, sex_count in allotted_money.items():\n", + " p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) #[Note1]\n", + " bottom += sex_count\n", + "\n", + " ax.bar_label(p, label_type='center')\n", + "\n", + " # for rect in p:\n", + " # height = rect.get_height()\n", + " # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height,\n", + " # '%d' % int(height), ha='center', va='bottom', fontsize=12)\n", + "\n", + "ax.bar_label(p, labels=sum, fmt=\"{:3.2f}\", label_type=\"edge\")\n", + "\n", + "# plot = ax.bar(region_num, position_vacancies, width=0.6)\n", + "#\n", + "# for rect in plot:\n", + "# height = rect.get_height()\n", + "# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height,\n", + "# '%d' % int(height), ha='center', va='bottom', fontsize=12)\n", + "\n", + "ax.set_title(\"2015's composition of local government's income\")\n", + "ax.legend()\n", + "\n", + "plt.show()\n", + "\n", + "# References:\n", + "# 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf\n", + "# 2.\n", + "\n", + "# Notes:\n", + "# 1. when having duplicate values in categorical x data,\n", + "# these values map to the same numerical x coordinate, and hence the corresponding bars\n", + "# are drawn on top of each other. [2]\n" + ], + "id": "4b1bd0ee69789a25", + "outputs": [], + "execution_count": null + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 7394c79e5df3bfd46293643ab2ca88ed7c77065a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:23:09 +0800 Subject: [PATCH 1864/2002] Committed on or around 2025/03/20 --- .../Composition/2015-5.ipynb | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.ipynb b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.ipynb index ecb41249..49583384 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.ipynb +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-5.ipynb @@ -14,8 +14,9 @@ }, { "metadata": { - "jupyter": { - "is_executing": true + "ExecuteTime": { + "end_time": "2025-03-20T10:19:37.950799Z", + "start_time": "2025-03-20T10:19:36.050188Z" } }, "cell_type": "code", @@ -77,8 +78,19 @@ "# are drawn on top of each other. [2]\n" ], "id": "4b1bd0ee69789a25", - "outputs": [], - "execution_count": null + "outputs": [ + { + "data": { + "text/plain": [ + "
      " + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGzCAYAAACPa3XZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACZ6UlEQVR4nOzdd1gUxxsH8O/dcQ0OjipFmopSLGAXYxcFNbZgNyrWn8Zu7NHYYjdq7JoYbDGWxBY7do29d1TESlV6uzvu5vcHYXWlK5yA7+d57tGbfXd2drny3uzsrIAxxkAIIYQQoifCz90AQgghhHxZKPkghBBCiF5R8kEIIYQQvaLkgxBCCCF6RckHIYQQQvSKkg9CCCGE6BUlH4QQQgjRK0o+CCGEEKJXlHwQQgghRK8o+SDkIwQEBMDZ2TlfsdOnT4dAICjaBn2i9PR0jB8/Hg4ODhAKhejQoUOOsU2aNEGTJk301rbi3g7yeTk7OyMgIOBzN4MUECUfn+jKlSsYNmwYKleuDCMjIzg6OqJLly549OhRtvEPHjyAn58fFAoFzM3N0atXL0RHR2eJmz17Ntq1awdra2sIBAJMnz492/oyv9g+fMhkMl7cs2fPIBAIcOrUqU/dZZKNlJQUTJ8+vcQe399//x0LFy5Ep06dsHHjRowePfpzN4mUcLm9J6ZPn57v5J2UTgafuwEl3fz58/Hvv/+ic+fOqFatGiIiIrBixQrUqFEDFy9eRJUqVbjYV69eoVGjRlAqlZgzZw6SkpKwaNEi3LlzB5cvX4ZEIuFip0yZAhsbG1SvXh1HjhzJsx2rV6+GQqHgnotEosLdUcLz66+/QqfTcc9TUlIwY8YMAMjya3zKlCmYOHGiPptXYCdOnEDZsmWxZMmSz90UUkrk9p4oTMHBwRAK6Xd0SUPJxycaM2YMtm7dykscunbtiqpVq2LevHnYsmULVz5nzhwkJyfj2rVrcHR0BADUqVMHLVq0wIYNGzBo0CAuNjQ0FM7Oznjz5g2srKzybEenTp1gaWlZiHtGciMWi/Mda2BgAAOD4v1Wi4qKgqmp6eduBvlPWloaJBIJfanmg1Qq/dxNIB+BXtmfqH79+rzEAwAqVqyIypUr48GDB7zyv//+G19//TWXeACAj48PKlWqhB07dvBiC9olyRhDQkICCnKT4oiICPTt2xf29vaQSqWwtbVF+/bt8ezZszzXffjwIbp06QIrKyvI5XK4urrihx9+4MXcuHEDrVq1gomJCRQKBZo3b46LFy/yYjZs2ACBQIBz585hxIgRsLKygqmpKf73v/9BrVYjLi4OvXv3hpmZGczMzDB+/HjePmaeTlq0aBGWLFkCJycnyOVyNG7cGHfv3s3S7hMnTqBhw4YwMjKCqakp2rdvn+XvlJiYiFGjRsHZ2RlSqRRlypRBixYtcP36dS7m/TEfz5494xLEGTNmcKe+Mk+VZTfmIz09HbNmzUKFChUglUrh7OyMyZMnQ6VS8eKcnZ3x9ddf49y5c6hTpw5kMhnKly+PTZs25fk3AoDk5GR8//33cHBwgFQqhaurKxYtWsQdw8zjd/LkSdy7d49re0FPH0VFRaF///6wtraGTCaDp6cnNm7cmCVOp9Phl19+QdWqVSGTyWBlZQU/Pz9cvXqViwkMDESzZs1QpkwZSKVSeHh4YPXq1QVqz/tSU1MxYsQIWFpawtjYGO3atcPr16+zPZ2Z12v26tWrEAgE2e7bkSNHIBAIsH//fq7s9evX6NevH6ytrSGVSlG5cmX8/vvvvPVOnToFgUCAbdu2YcqUKShbtiwMDQ2RkJCAgIAAKBQKvH79Gh06dIBCoYCVlRXGjh0LrVbL1fH++2DlypUoX748DA0N0bJlS7x8+RKMMcyaNQv29vaQy+Vo3749YmJisuzDoUOHuPeHsbEx2rRpg3v37vFi8tOmvN4T2QkKCkKDBg1gamoKhUIBV1dXTJ48Ocf4TB+O+cj8TPn3338xZswYWFlZwcjICB07dsz2FPehQ4fQuHFjGBsbw8TEBLVr18bWrVt5MTt37kTNmjUhl8thaWmJb7/9Fq9fv872uLx48QJff/01FAoFypYti5UrVwIA7ty5g2bNmsHIyAhOTk5ZtgEAcXFxGDVqFPd+dXFxwfz583m9rKUGI4VOp9OxsmXLspYtW3Jlr169YgDY/Pnzs8R/++23zNzcPNu6oqOjGQA2bdq0bJdPmzaNAWAKhYIBYEZGRqxnz54sIiKCFxcaGsoAsJMnT3Jl9evXZ0qlkk2ZMoX99ttvbM6cOaxp06bs9OnTue7frVu3mImJCbOwsGCTJk1ia9euZePHj2dVq1blYu7evcuMjIyYra0tmzVrFps3bx4rV64ck0ql7OLFi1xcYGAgA8C8vLyYn58fW7lyJevVqxcDwMaPH88aNGjAevTowVatWsW+/vprBoBt3Lgxy35VrVqVOTs7s/nz57MZM2Ywc3NzZmVlxTsOQUFBzMDAgFWqVIktWLCAzZgxg1laWjIzMzMWGhrKxfXo0YNJJBI2ZswY9ttvv7H58+eztm3bsi1btnAxffr0YU5OTowxxpKSktjq1asZANaxY0e2efNmtnnzZnbr1i3e3+h9ffr0YQBYp06d2MqVK1nv3r0ZANahQwdenJOTE3N1dWXW1tZs8uTJbMWKFaxGjRpMIBCwu3fv5vp30ul0rFmzZkwgELABAwawFStWsLZt2zIAbNSoUVzbN2/ezNzc3Ji9vT3X9g9fP+9r3Lgxa9y4Mfc8JSWFubu7M7FYzEaPHs2WLVvGGjZsyACwpUuX8tYNCAhgAFirVq3Y0qVL2aJFi1j79u3Z8uXLuZjatWuzgIAAtmTJErZ8+XLWsmVLBoCtWLEi13bkpEuXLgwA69WrF1u5ciXr0qUL8/T0zPK+yu9rtnz58qx169ZZttO3b19mZmbG1Go1Y4yxiIgIZm9vzxwcHNjMmTPZ6tWrWbt27RgAtmTJEm69kydPMgDMw8ODeXl5scWLF7O5c+ey5ORk1qdPHyaTyVjlypVZv3792OrVq5m/vz8DwFatWsXVkfk+8PLyYh4eHmzx4sVsypQpTCKRsHr16rHJkyez+vXrs2XLlrERI0YwgUDA+vbty2v/pk2bmEAgYH5+fmz58uVs/vz5zNnZmZmamvLeH/lpU37eE5nvn8xjL5FIWK1atdgvv/zC1qxZw8aOHcsaNWqU59/XycmJ9enTh3ue+ZlSvXp11qxZM7Z8+XL2/fffM5FIxLp06cJbNzAwkAkEAlalShU2e/ZstnLlSjZgwADWq1evLPXVrl2bLVmyhE2cOJHJ5XLm7OzMYmNjsxwXDw8PNnjwYLZy5UpWv359BoAFBgYyOzs7Nm7cOLZ8+XJWuXJlJhKJ2NOnT7n1k5OTWbVq1ZiFhQWbPHkyW7NmDevduzcTCARs5MiReR6HkoaSjyKwefNmBoCtX7+eK7ty5QoDwDZt2pQlfty4cQwAS0tLy7Isr+Rj6dKlbNiwYeyPP/5gf/31Fxs5ciQzMDBgFStWZPHx8Tm2MTY2lgFgCxcuLPD+NWrUiBkbG7Pnz5/zynU6Hff/Dh06MIlEwkJCQriysLAwZmxszPtAyXxj+/r68tb39vZmAoGADR48mCtLT09n9vb2vC+czA9duVzOXr16xZVfunSJAWCjR4/myry8vFiZMmXY27dvubJbt24xoVDIevfuzZUplUo2dOjQXI/B+8kHY7n/nT5MPm7evMkAsAEDBvDixo4dywCwEydOcGVOTk4MADtz5gxXFhUVxaRSKfv+++9zbeOePXsYAPbTTz/xyjt16sQEAgF78uQJV9a4cWNWuXLlXOt7P/b9v8HSpUsZAF5yplarmbe3N1MoFCwhIYExxtiJEycYADZixIgsdb7/t09JScmy3NfXl5UvXz7XdmTn2rVrvGQrU2YS9P7fK7+v2UmTJjGxWMxiYmK4MpVKxUxNTVm/fv24sv79+zNbW1v25s0b3ra7devGlEolt5+ZyUf58uWz7Htmkjpz5kxeefXq1VnNmjW555nvAysrKxYXF8drKwDm6enJNBoNV969e3cmkUi4z5zExERmamrKBg4cyNtOREQEUyqVvPL8timvz673LVmyhAFg0dHRecZ+KKfkw8fHh/e6Gj16NBOJRNzxiYuLY8bGxqxu3bosNTWVV2fmemq1mpUpU4ZVqVKFF7N//34GgP34449cWeZxmTNnDlcWGxvL5HI5EwgEbNu2bVz5w4cPsxybWbNmMSMjI/bo0SNeWyZOnMhEIhF78eJFgY9NcUanXQrZw4cPMXToUHh7e6NPnz5ceWpqKoDsz09mXpmSGVMQI0eOxPLly9GjRw/4+/tj6dKl2LhxIx4/foxVq1bluJ5cLodEIsGpU6cQGxub7+1FR0fjzJkz6NevH+/0EQDu1IJWq8XRo0fRoUMHlC9fnltua2uLHj164Ny5c0hISOCt279/f96pibp164Ixhv79+3NlIpEItWrVwtOnT7O0q0OHDihbtiz3vE6dOqhbty4OHjwIAAgPD8fNmzcREBAAc3NzLq5atWpo0aIFFwcApqamuHTpEsLCwvJ9XAoic1tjxozhlX///fcAgAMHDvDKPTw80LBhQ+65lZUVXF1dsz0OH25HJBJhxIgRWbbDGMOhQ4c+eh8+3I6NjQ26d+/OlYnFYowYMQJJSUk4ffo0gIzTjgKBANOmTctSx/t/e7lczv0/Pj4eb968QePGjfH06VPEx8cXqG2HDx8GAHz33Xe88uHDh/OeF+Q127VrV2g0GuzatYuLO3r0KOLi4tC1a1cAGadB//77b7Rt2xaMMbx584Z7+Pr6Ij4+nncaDwD69OnD2/f3DR48mPe8YcOG2f79O3fuDKVSyT2vW7cuAODbb7/ljTuqW7cu1Go1d+ogKCgIcXFx6N69O6+tIpEIdevWxcmTJz+6TfmROd5o7969hXaKYdCgQbzXVcOGDaHVavH8+XMAGfucmJiIiRMnZrk6MHO9q1evIioqCt999x0vpk2bNnBzc8vyXgWAAQMG8PbL1dUVRkZG6NKlC1fu6uoKU1NT3vHauXMnGjZsCDMzM97fwMfHB1qtFmfOnPnEI1K8UPJRiCIiItCmTRsolUr89ddfvCtOMj9UPjynD2QMLns/5lP16NEDNjY2OHbsWI4xUqkU8+fPx6FDh2BtbY1GjRphwYIFiIiIyLXuzDfL+1fxfCg6OhopKSlwdXXNsszd3R06nQ4vX77klX+YyGR+gDo4OGQpzy5ZqlixYpaySpUqceNXMj9wcmrTmzdvkJycDABYsGAB7t69CwcHB9SpUwfTp0//6A/V7Dx//hxCoRAuLi68chsbG5iamnJtzfThsQEAMzOzPJPG58+fw87ODsbGxrxyd3d3bnlheP78OSpWrJhlcOSH2wkJCYGdnR0v+cvOv//+Cx8fH25cjpWVFXfuv6DJR+axLleuHK/8w2NfkNesp6cn3NzcsH37di5m+/btsLS0RLNmzbj64uLisG7dOlhZWfEeffv2BZAxTuZ9H7YxU+bYmPfl9PcvyPsIAFfH48ePAQDNmjXL0t6jR49maWtB2pQfXbt2xVdffYUBAwbA2toa3bp1w44dOz4pEfnwWJiZmQF4t88hISEAcv8sy+1zw83NLct7KLvjolQqYW9vn2Xc14efZY8fP8bhw4ezHH8fHx8AWV8vJV3xHoJfgsTHx6NVq1aIi4vD2bNnYWdnx1tua2sLIOMX+IfCw8Nhbm5eqKO2HRwcsh1Q9r5Ro0ahbdu22LNnD44cOYKpU6di7ty5OHHiBKpXr15obcmPnC4Nzq6cFWBQ7cfo0qULGjZsiN27d+Po0aNYuHAh5s+fj127dqFVq1aFtp38TjyW07Ep6uPwOYSEhKB58+Zwc3PD4sWL4eDgAIlEgoMHD2LJkiXFZuBd165dMXv2bLx58wbGxsbYt28funfvzvUuZLbz22+/5fWAvq9atWq85zn9+CjIZfMFeR8B715Dme3dvHkzbGxsssR9eLVWYV/KL5fLcebMGZw8eRIHDhzA4cOHsX37djRr1gxHjx79qO19jvfNxx5/IONv0KJFC4wfPz7b2EqVKn16A4sRSj4KQVpaGtq2bYtHjx7h2LFj8PDwyBJTtmxZWFlZ8Ub1Z7p8+TK8vLwKrT2MMTx79ixfCUSFChXw/fff4/vvv8fjx4/h5eWFn3/+mXeJ8Psyu6Szu5Ikk5WVFQwNDREcHJxl2cOHDyEUCrP8EvtUmb/c3vfo0SPuihQnJycAyLFNlpaWMDIy4spsbW3x3Xff4bvvvkNUVBRq1KiB2bNn55h8FGQGUycnJ+h0Ojx+/JjrHQCAyMhIxMXFcW39VE5OTjh27BgSExN5vR8PHz7klhfWdm7fvg2dTsfr/fhwOxUqVMCRI0cQExOTY+/HP//8A5VKhX379vF+uWbX7Z/ftul0OoSGhvJ6x548ecKLK+hrtmvXrpgxYwb+/vtvWFtbIyEhAd26dePVZ2xsDK1Wy/1yLc4qVKgAAChTpkyhtbegs/oKhUI0b94czZs3x+LFizFnzhz88MMPOHnyZJEcw8x9vnv3bpaesEzvf25k9mplCg4OLrT3UGZ7kpKSSsTrpTDQaZdPpNVq0bVrV1y4cAE7d+6Et7d3jrH+/v7Yv38/75TD8ePH8ejRI3Tu3Pmjtp/dpWOrV69GdHQ0/Pz8clwvJSWFO92TqUKFCjA2Ns721FAmKysrNGrUCL///jtevHjBW5aZxYtEIrRs2RJ79+7lXbYbGRmJrVu3okGDBjAxMcnP7uXbnj17eJe+Xb58GZcuXeKSBVtbW3h5eWHjxo2Ii4vj4u7evYujR4+idevWADL+nh927ZcpUwZ2dna5HhdDQ0MA4NWdk8xtLV26lFe+ePFiABnnkwtD69atodVqsWLFCl75kiVLIBAICq0Xp3Xr1oiIiOCdhkhPT8fy5cuhUCjQuHFjABmvf8YYN/HU+95/7bz/HMjoVQwMDPyotvn6+gJAlvFPy5cv5z0v6GvW3d0dVatWxfbt27F9+3bY2tqiUaNGvPr8/f3x999/Z5uoZ/e+/Zx8fX1hYmKCOXPmQKPRZFn+Me0tyHsiu17azB9kub3vPkXLli1hbGyMuXPnZvkszHz91apVC2XKlMGaNWt47Th06BAePHhQaO9VIKPH9cKFC9lOKhkXF4f09PRC21ZxQD0fn+j777/Hvn370LZtW8TExGTpMfj222+5/0+ePBk7d+5E06ZNMXLkSCQlJWHhwoWoWrUqdx440+bNm/H8+XOkpKQAAM6cOYOffvoJANCrVy8u43ZycuImNZPJZDh37hy2bdsGLy8v/O9//8ux3Y8ePULz5s3RpUsXeHh4wMDAALt370ZkZCTvF1x2li1bhgYNGqBGjRoYNGgQypUrh2fPnuHAgQO4efMmAOCnn37irtv/7rvvYGBggLVr10KlUmHBggX5O7gF4OLiggYNGmDIkCFQqVRYunQpLCwseF2YCxcuRKtWreDt7Y3+/fsjNTUVy5cvh1Kp5OYfSExMhL29PTp16gRPT08oFAocO3YMV65cwc8//5zj9uVyOTw8PLB9+3ZUqlQJ5ubmqFKlSrbnkz09PdGnTx+sW7cOcXFxaNy4MS5fvoyNGzeiQ4cOaNq0aaEck7Zt26Jp06b44Ycf8OzZM3h6euLo0aPYu3cvRo0axf3y+1SDBg3C2rVrERAQgGvXrsHZ2Rl//fUX/v33XyxdupTrdWnatCl69eqFZcuW4fHjx/Dz84NOp8PZs2fRtGlTDBs2DC1btoREIkHbtm3xv//9D0lJSfj1119RpkyZbE9Z5qVmzZrcQOy3b9+iXr16OH36NHf7g/d/nRf0Ndu1a1f8+OOPkMlk6N+/f5YxL/PmzcPJkydRt25dDBw4EB4eHoiJicH169dx7NixPE+L6pOJiQlWr16NXr16oUaNGujWrRusrKzw4sULHDhwAF999VWWJDYvBXlPzJw5E2fOnEGbNm3g5OSEqKgorFq1Cvb29mjQoEFh7SaPiYkJlixZggEDBqB27dro0aMHzMzMcOvWLaSkpGDjxo0Qi8WYP38++vbti8aNG6N79+6IjIzEL7/8Amdn50K9DcG4ceOwb98+fP311wgICEDNmjWRnJyMO3fu4K+//sKzZ89K10SSn+EKm1KlcePGDECOjw/dvXuXtWzZkhkaGjJTU9Ns5+TIq9735+oYMGAA8/DwYMbGxkwsFjMXFxc2YcIE7vLGnLx584YNHTqUubm5MSMjI6ZUKlndunXZjh078rXfd+/eZR07dmSmpqZMJpMxV1dXNnXqVF7M9evXma+vL1MoFMzQ0JA1bdqUnT9/nheTeVnclStXeOWZl6d+eOldnz59mJGREfc88xLDhQsXsp9//pk5ODgwqVTKGjZsyM0p8L5jx46xr776isnlcmZiYsLatm3L7t+/zy1XqVRs3LhxzNPTkxkbGzMjIyPm6enJm1Mhsx3vX2rLGGPnz59nNWvWZBKJhHcZXXbzfGg0GjZjxgxWrlw5JhaLmYODA5s0aVKWy62dnJxYmzZtsuxHfue4SExMZKNHj2Z2dnZMLBazihUrsoULF/IuQcys72MvtWWMscjISNa3b19maWnJJBIJq1q1KgsMDMyybnp6Olu4cCFzc3NjEomEWVlZsVatWrFr165xMfv27WPVqlVjMpmMm7vl999/ZwB4803k9xgkJyezoUOHMnNzc6ZQKFiHDh1YcHAwA8DmzZvHi83PazbT48ePuffkuXPnso2JjIxkQ4cOZQ4ODkwsFjMbGxvWvHlztm7dOi4m81LbnTt3Zln/w9d7pg9fU++/D96XU905ve9OnjzJfH19mVKpZDKZjFWoUIEFBASwq1evFrhNjOX8nvjQ8ePHWfv27ZmdnR2TSCTMzs6Ode/ePctlp9nJ6VLb7Pbtw89PxjJeb/Xr1+c+E+rUqcP+/PNPXsz27dtZ9erVmVQqZebm5qxnz568S/sZy/m45PTeyu69nZiYyCZNmsRcXFyYRCJhlpaWrH79+mzRokXc/DGlhYCxUjhqjXwxnj17hnLlymHhwoUYO3bs524OKSFu3ryJ6tWrY8uWLejZs+fnbg4hXxwa80EIKdWymz9n6dKlEAqFvHEahBD9oTEfhJBSbcGCBbh27RqaNm0KAwMDHDp0CIcOHcKgQYMK/aorQkj+UPJBCCnV6tevj6CgIMyaNQtJSUlwdHTE9OnTs9wIkRCiPzTmgxBCCCF6RWM+CCGEEKJXlHwQQgghRK8KPObj9evXmDBhAg4dOoSUlBS4uLggMDAQtWrVApAxM9y0adPw66+/Ii4uDl999RVWr16d7Y2/sqPT6RAWFgZjY+MCT89LCCGEkM+DMYbExETY2dllmXQvu+B8i4mJYU5OTiwgIIBdunSJPX36lB05coQ9efKEi5k3bx5TKpVsz5497NatW6xdu3asXLlyLDU1NV/bePnyZa6TdtGDHvSgBz3oQY/i+3j58mXhTjI2ceJE/Pvvvzh79my2yxljsLOzw/fff89N+BQfHw9ra2ts2LAhz2m7M+NNTU3x8uXLQr//ByGEEEKKRkJCAhwcHBAXFwelUplrbIFOu+zbtw++vr7o3LkzTp8+jbJly+K7777DwIEDAQChoaGIiIjg3ZVPqVSibt26uHDhQrbJh0ql4t2wJzExEUDGvPuUfBBCCCElS36GTBRowOnTp0+58RtHjhzBkCFDMGLECGzcuBEAEBERAQCwtrbmrWdtbc0t+9DcuXOhVCq5B036QwghhJRuBUo+dDodatSogTlz5qB69eoYNGgQBg4ciDVr1nx0AyZNmoT4+Hju8f7t5gkhhBBS+hQo+bC1tYWHhwevzN3dHS9evAAA2NjYAAAiIyN5MZGRkdyyD0mlUu4US2k81TJ9+nQIBALew83NDUDGTdE+XJb52LlzZ671PnjwAO3atYNSqYSRkRFq167N/R1iYmIwfPhwuLq6Qi6Xw9HRESNGjEB8fDyvjuPHj6N+/fowNjaGjY0NJkyYgPT0dF7Mjh074OXlBUNDQzg5OWHhwoVZ2rJy5Uq4u7tDLpfD1dUVmzZt4i3XaDSYOXMmKlSoAJlMBk9PTxw+fJgXk5iYiFGjRsHJyQlyuRz169fHlStXeDGRkZEICAiAnZ0dDA0N4efnh8ePH/NiQkJC0LFjR1hZWcHExARdunTJ8nq8fv06WrRoAVNTU1hYWGDQoEFISkoqtscmt9cQIYSURAUa8/HVV18hODiYV/bo0SM4OTkBAMqVKwcbGxscP34cXl5eADIGoFy6dAlDhgwpnBaXQJUrV8axY8e45wYGGYfdwcEB4eHhvNh169Zh4cKFaNWqVY71hYSEoEGDBujfvz9mzJgBExMT3Lt3DzKZDAAQFhaGsLAwLFq0CB4eHnj+/DkGDx6MsLAw/PXXXwCAW7duoXXr1vjhhx+wadMmvH79GoMHD4ZWq8WiRYsAAIcOHULPnj2xfPlytGzZEg8ePMDAgQMhl8sxbNgwAMDq1asxadIk/Prrr6hduzYuX76MgQMHwszMDG3btgUATJkyBVu2bMGvv/4KNzc3HDlyBB07dsT58+dRvXp1AMCAAQNw9+5dbN68GXZ2dtiyZQt8fHxw//59lC1bFowxdOjQAWKxGHv37oWJiQkWL17MxRgZGSE5ORktW7aEp6cnTpw4AQCYOnUq2rZti4sXL0IoFCIsLAw+Pj7o2rUrVqxYgYSEBIwaNQoBAQHF9tjk9hoqLrRaLTQazeduBiGkiInFYohEok+up0BXu1y5cgX169fHjBkz0KVLF+7DdN26ddxtqefPn4958+Zh48aNKFeuHKZOnYrbt2/j/v373JdjbhISEqBUKhEfH18qekGmT5+OPXv24ObNm/mKr169OmrUqIH169fnGNOtWzeIxWJs3rw53+3YuXMnvv32WyQnJ8PAwACTJ09GUFAQr3fhn3/+QZcuXRAVFQVjY2P06NEDGo2G1wuzfPlyLFiwAC9evIBAIED9+vXx1Vdf8X71f//997h06RLOnTsHALCzs8MPP/yAoUOHcjH+/v6Qy+XYsmULUlNTYWxsjL1796JNmzZcTM2aNdGqVSv89NNPePToEVxdXXH37l1UrlwZQMZpQBsbG8yZMwcDBgzA0aNH0apVK8TGxnKvnfj4eJiZmeHo0aPw8fHBunXrMHXqVISHh3PXod+5cwfVqlXD48eP4eLiUqyODVDw15C+JSUl4dWrV6A7NRBS+gkEAtjb20OhUGRZVpDv7wL9fKpduzZ2796NSZMmYebMmShXrhyWLl3KJR4AMH78eCQnJ2PQoEGIi4tDgwYNcPjw4XwlHqXV48ePYWdnB5lMBm9vb8ydOxeOjo5Z4q5du4abN29i5cqVOdal0+lw4MABjB8/Hr6+vrhx4wbKlSuHSZMmoUOHDjmul/liyPzFrFKpsvxN5HI50tLScO3aNTRp0gQqlQqGhoZZYl69eoXnz5/D2dk5x3ouX74MjUYDsVicY0zmF3B6ejq0Wm2uMZlXRL0fIxQKIZVKce7cOQwYMAAqlQoCgQBSqZSLkclkEAqFOHfuHHx8fKBSqSCRSHgT4MjlcgDAuXPn4OLiUqyOTab8vob0TavV4tWrVzA0NISVlRVNDEhIKcYYQ3R0NF69eoWKFSt+Wg9IQSYZ04f4+HgGgMXHx3/uphSKgwcPsh07drBbt26xw4cPM29vb+bo6MgSEhKyxA4ZMoS5u7vnWl94eDgDwAwNDdnixYvZjRs32Ny5c5lAIGCnTp3Kdp3o6Gjm6OjIJk+ezJUdOXKECYVCtnXrVpaens5evXrFGjZsyACwrVu3MsYYW7t2LTM0NGTHjh1jWq2WBQcHMzc3NwaAnT9/njHG2KRJk5iNjQ27evUq0+l07MqVK8za2poBYGFhYYwxxrp37848PDzYo0ePmFarZUePHmVyuZxJJBKuPd7e3qxx48bs9evXLD09nW3evJkJhUJWqVIlxhhjarWaOTo6ss6dO7OYmBimUqnYvHnzGADWsmVLxhhjUVFRzMTEhI0cOZIlJyezpKQkNmzYMAaADRo0iDHG2N27d5mBgQFbsGABU6lULCYmhvn7+zMAbM6cOcXy2BTkNaRvqamp7P79+ywlJeVzN4UQogcpKSns/v372U4cWpDvb0o+9Cw2NpaZmJiw3377jVeekpLClEolW7RoUa7rv379mgFg3bt355W3bduWdevWLUt8fHw8q1OnDvPz82NqtZq37Oeff2YmJiZMJBIxQ0NDNnfuXAaAbdu2jTHGmE6nY+PHj2cymYyJRCJmZmbGpk+fzgCwixcvcu3u27cvMzAwYCKRiNnZ2bHx48czACwiIoIxlpEUtG/fngmFQiYSiVilSpXYd999x2QyGdeWJ0+esEaNGjEATCQSsdq1a7OePXsyNzc3Lubq1avM09OTi/H19WWtWrVifn5+XMyRI0dY+fLlmUAgYCKRiH377besRo0abPDgwVzMH3/8waytrZlIJGISiYSNHTuWWVtbs3nz5hXLY/OhnF5Dn0Nm8pHfGYwJISVbbu95Sj6KuVq1arGJEyfyyjZt2sTEYjGLiorKdV2VSsUMDAzYrFmzeOXjx49n9evX55UlJCQwb29v1rx58xy/HHQ6HXv9+jWXzQJgly9f5sVk/vpXqVTs4MGDDECWdqrVavby5UuWnp7OVq1axYyNjZlWq+XFpKamslevXnFf3B4eHlnak5SUxPUKdOnShbVu3TpLTFxcHLf9OnXqsO+++y5LTHR0NIuNjWWMMWZtbc0WLFiQJSYiIoIlJiaypKQkJhQK2Y4dO4r1sXlfdq+hz4GSD0K+LIWVfNBdbfUsKSkJISEhsLW15ZWvX78e7dq1g5WVVa7rSyQS1K5dO9erjoCMgT8tW7aERCLBvn37chxzIxAIYGdnB7lcjj///BMODg6oUaMGL0YkEqFs2bKQSCT4888/4e3tnaWdYrEY9vb2EIlE2LZtG77++ussNxaSyWQoW7Ys0tPT8ffff6N9+/ZZ2mNkZARbW1vExsbiyJEj2cYolUpYWVnh8ePHuHr1arYxlpaWMDU1xYkTJxAVFYV27dplibG2toZCocD27dshk8nQokWLYn1sMuX0GiKEkJKieF2vVwqNHTsWbdu2hZOTE8LCwjBt2jSIRCJ0796di3ny5AnOnDmDgwcPZluHm5sb5s6di44dOwIAxo0bh65du6JRo0Zo2rQpDh8+jH/++QenTp0C8C7xSElJwZYtW5CQkICEhAQAgJWVFTdIaOHChfDz84NQKMSuXbswb9487Nixg1v+5s0b/PXXX2jSpAnS0tIQGBiInTt34vTp01zbHj16hMuXL6Nu3bqIjY3F4sWLcffuXW7WWwC4dOkSXr9+DS8vL7x+/RrTp0+HTqfD+PHjuZgjR46AMQZXV1c8efIE48aNg5ubG/r27cvF7Ny5E1ZWVnB0dMSdO3cwcuRIdOjQAS1btuRiAgMD4e7uDisrK1y4cAEjR47E6NGj4erqysWsWLEC9evXh0KhQFBQEMaNG4d58+bB1NSUiylOxyY/r6HixnniAb1u79m8NnkHEUKKDer5KGKvXr1C9+7d4erqii5dusDCwgIXL17k/Tr+/fffYW9vz/sSfV9wcDBvgrCOHTtizZo1WLBgAapWrYrffvsNf//9Nxo0aAAgYxKtS5cu4c6dO3BxcYGtrS33eH8G2UOHDqFhw4aoVasWDhw4gL1792a5Ymbjxo2oVasWvvrqK9y7dw+nTp1CnTp1uOVarRY///wzPD090aJFC6SlpeH8+fNwdnbmYtLS0jBlyhR4eHigY8eOKFu2LM6dO8f7so+Pj8fQoUPh5uaG3r17o0GDBjhy5AjEYjEXEx4ejl69esHNzQ0jRoxAr1698Oeff2Y5Vh06dIC7uztmzpyJH374gZubI9Ply5fRokULVK1aFevWrcPatWsxYsQIXkxxOjb5eQ2RgouOjsaQIUPg6OgIqVQKGxsb+Pr64t9//wWQ0fO1Z8+eAtfr7OyMpUuXFni9gICAXK9YI6Q0KdA8H/pQ2ub5IKQ0S0tLQ2hoKMqVK8c7tVcSej4aNWoEtVqNuXPnonz58oiMjMTx48dRuXJltGvXDgKBALt37y5wQuDs7IxRo0Zh1KhRBVovICAAcXFxH5XwvE+tVkMikXxSHYTkJKf3PFCw72/q+SCEfHHi4uJw9uxZzJ8/H02bNoWTkxPq1KmDSZMmoV27dlzvVMeOHSEQCLjnISEhaN++PTdeqHbt2ryZZ5s0aYLnz59j9OjR3FT4QMZEcZmzPmdaunQpV+/06dOxceNG7N27l1sv8zTqnTt30KxZM8jl8mxvB5DZYzJ79mzY2dnB1dUVM2fORJUqVbLst5eXF6ZOnVo4B5GQT0BjPkjBTFd+7hZ8uunxeceQUk2hUEChUGDPnj2oV68eb2I6IGM25zJlyiAwMBB+fn7cWJ+kpCS0bt0as2fPhlQqxaZNm9C2bVsEBwfD0dERu3btgqenJ3fTzfwaO3YsHjx4gISEBAQGBgIAzM3NkZycDF9fX3h7e+PKlSuIiorCgAEDMGzYMGzYsIFb//jx4zAxMUFQUBCAjEHZM2bMwJUrV1C7dm0AwI0bN3D79m3s2rXrUw4dIYWCej4IIV8cAwMDbNiwARs3boSpqSm++uorTJ48Gbdv3wYAbjyNqakpbGxsuOeenp743//+hypVqqBixYqYNWsWKlSogH379gHISBhEIhF3Q8Kcbqj5IYVCAblczo09sbGxgUQiwdatW5GWloZNmzahSpUqaNasGVasWIHNmzfzbphoZGSE3377DZUrV0blypVhb28PX19fLpEBMgZjN27cGOXLly+UY0jIp6DkgxDyRfL390dYWBj27dsHPz8/nDp1CjVq1OD1KHwoKSkJY8eOhbu7O0xNTaFQKPDgwQPujtKF7cGDB/D09ISRkRFX9tVXX0Gn0/Eut69atWqWcR4DBw7En3/+ibS0NKjVamzduhX9+vUrknYSUlB02oUQ8sXKnN+lRYsWmDp1KgYMGIBp06YhICAg2/ixY8ciKCgIixYtgouLC+RyOTp16gS1Wp3rdoRCYZYb7xXmXYDfT04ytW3bFlKpFLt374ZEIoFGo0GnTp0KbZuEfApKPggh5D8eHh7c1SZisRharZa3/N9//0VAQAA3505SUhKePXvGi5FIJFnWs7KyQkREBBhj3CDUD+9SnN167u7u2LBhA5KTk7kE499//4VQKOTNXZMdAwMD9OnTB4GBgZBIJOjWrRt3E0VCPjc67UII+eK8ffsWzZo1w5YtW3D79m2EhoZi586dWLBgATe7rLOzM44fP46IiAjExsYCACpWrIhdu3bh5s2buHXrFnr06AGdTser29nZGWfOnMHr16/x5s0bABlXwURHR2PBggUICQnBypUrcejQoSzr3b59G8HBwXjz5g00Gg169uwJmUyGPn364O7duzh58iSGDx+OXr16wdraOs/9HDBgAE6cOIHDhw/TKRdSrFDPByGk0BX3GUcVCgXq1q2LJUuWICQkBBqNBg4ODhg4cCAmT54MAPj5558xZswY/PrrryhbtiyePXuGxYsXo1+/fqhfvz4sLS0xYcIEbvbgTDNnzsT//vc/VKhQASqVCowxuLu7Y9WqVZgzZw5mzZoFf39/jB07FuvWrePWGzhwIE6dOoVatWohKSkJJ0+eRJMmTXDkyBGMHDkStWvXhqGhIfz9/bF48eJ87WfFihVRv359xMTEoG7duoV3AAn5RDTJGCkYutSWvCe3CYfI58cYQ8WKFfHdd99hzJgxn7s5pBQorEnGqOeDEEJKoejoaGzbtg0RERG8eyQR/QkLC0NYWBivTCaTZZkAjjGGx48fIyEhARUqVICZmVmudcbExECtVkMgEMDQ0BBly5aFQqEokn0oKpR8EEJIKVSmTBlYWlpi3bp1uX6ZkaIll8tRqVKlXGOioqK4gch5kUql3P2IdDodIiMj8fjxY1SpUoV3L6zijpIPQggphYrZGfUvWm5JQUpKCiIiIuDh4YFbt27lWZeFhQXvuYODA968eYPU1FRKPgghhBACqFQq3Lp1C0KhEEZGRihbtiw3nb9Wq8XTp0/h5OT0UYmDTqdDdHQ0RCJRibuMmpIPQgghpAgYGRnB2dkZMpkMGo0GYWFhCA4ORuXKlSESifDq1SsoFAqYmpoWqN64uDg8ffoUOp0OYrEYlSpVKlG9HgAlH4QQQkiRUCr5VwcaGRnhzp07iImJgVgsRkJCAjw8PApcr7GxMTw8PJCeno43b94gJCQE7u7uJSoBoeSDEEII0QMDAwNIpVKoVCqkpqZCpVLhxo0bvJiQkBAYGxvnOoOtSCTi7rSsUChw584dvHnzBra2tkXa/sJEyQchhBCiB1qtFiqVCmKxGObm5tzdkjPdu3cPDg4OBT4NA5S8AcaUfBBCCCFF4OXLlzA1NeVu7BcWFgaBQABzc3OIxeJsT5NIJBJuQCoA3L17F2XLloWZmRm0Wi3Cw8NhamoKsViM9PR0REdHQ61Wl7jLqSn5IIQUPn3PhFsMZq0VCATYvXs3OnToUKTbOXXqFJo2bYrY2NgC/UJ+v33Pnj1DuXLlcOPGDXh5eRVZWz+Gvo6jPqjVajx9+hTp6ekwMDCAQqGAm5tbrmMzzM3NefuflpbG3XBQIBAgLS0NISEhXJ1GRkZwc3PjrnbJ6/gVl789JR+EkC9OQEAANm7cmKX88ePHcHFx+Qwt0i8HBweEh4fD0tLys7Vh+vTp2LNnT5a7+4aHh5e4X/E5qVChQoHia9WqlWuZUCjM8/VZUo4fJR+EkC+Sn58fAgMDeWUfnoPXJ7VaDYlEopdtiUQi2NjYFEndn7ofRdWugmCMQavVwsCg5H1FFofjlx/Cz90AQgj5HKRSKWxsbHiPzCsI9u7dixo1akAmk6F8+fKYMWMG0tPTuXUfP36MRo0aQSaTwcPDA0FBQVnqf/nyJbp06QJTU1OYm5ujffv2ePbsGbc8ICAAHTp0wOzZs2FnZ8dd3bB582bUqlULxsbGsLGxQY8ePRAVFVWgfcurfc+ePYNAIOB6HWJjY9GzZ09YWVlBLpejYsWKvMTs1atX6N69O8zNzWFkZIRatWrh0qVLADJ6MLy8vPDbb7/xbjYWFxeHAQMGwMrKCiYmJmjWrBk3g+eGDRswY8YM3Lp1CwKBAAKBABs2bACQcdpgz5493Lbv3LmDZs2aQS6Xw8LCAoMGDUJSUlKW47ho0SLY2trCwsICQ4cOhUaj4WLyOqanTp2CQCDAoUOHULNmTUilUmzZsgVCoRBXr17lHbulS5fCyckJOp0u22O/atUqVKxYETKZDNbW1ujUqRO3zNnZGUuXLuXFe3l5Yfr06byy8PBwtGrVCnK5HOXLl8dff/3FLVOr1Rg2bBhsbW0hk8ng5OSEuXPncss/PH6XL19G9erVIZPJUKtWLd7VNYwxuLi4YNGiRbzt37x5EwKBAE+ePMl2HwtDyUvrCCGkCJ09exa9e/fGsmXL0LBhQ4SEhGDQoEEAgGnTpkGn0+Gbb76BtbU1Ll26hPj4eIwaNYpXh0ajga+vL7y9vXH27FkYGBjgp59+gp+fH27fvs31DBw/fhwmJia85ECj0WDWrFlwdXVFVFQUxowZg4CAABw8eDBf7c9P+z40depU3L9/H4cOHYKlpSWePHmC1NRUAEBSUhIaN26MsmXLYt++fbCxscH169d5X75PnjzB33//jV27dnEJXOfOnSGXy3Ho0CEolUqsXbsWzZs3x6NHj9C1a1fcvXsXhw8fxrFjxwBknRMDAJKTk7njeOXKFURFRWHAgAEYNmwYl6wAwMmTJ2Fra4uTJ0/iyZMn6Nq1K7y8vDBw4MACHdOJEydi0aJFKF++PMzMzODj44PAwEDeqY/AwEAE+PtCGJF1KvSrt+5jxIgR2LxsFurXqoaYuAScvXQDCPvvC1+rBuJfvXsOAJpUIDGcVzb1h8mYN3k4fpn8P2z++wC6deuGO8e3w71ieSxbswn7dv+NHat+gmNZG7wMi8TLsEh+nTFPgbAbSEpOwdet26JFo3rYsvgHhL54jZGjR3BhAoEA/fr1Q2BgIMaOHcvbx0aNGhXpKciP6vmYPn06l61mPtzc3AAAMTExGD58OFxdXSGXy+Ho6IgRI0YgPj73AWGMMfz444/cDXjatWuHx48fc8szM9PsHleuXOHibt++jYYNG0Imk8HBwQELFizIsq2dO3fCzc0NMpkMVatWzfICzGyLra0t5HI5fHx8eG3J3M+ePXvCxMQEpqam6N+/Py8bL7VtOZkG258TIZ+dAJ9NyXj8VsuLmX1Ghfrrk2E4OwGm8xKybIOQ4mL//v1QKBTco3PnzgCAGTNmYOLEiejTpw/Kly+PFi1aYNasWVi7di0A4NixY3j48CE2bdoET09PNGrUCHPmzOHVvX37duh0Ovz222+oWrUq3N3dERgYiBcvXuDUqVNcnJGREX777TdUrlwZlStXBgD069cPrVq1Qvny5VGvXj0sW7YMhw4dyvKezkl+2vehFy9eoHr16qhVqxacnZ3h4+ODtm3bAgC2bt2K6Oho7NmzBw0aNICLiwu6dOkCb29vbn21Wo1NmzahevXqqFatGs6dO4fLly9j586dqFWrFipWrIhFixbB1NQUf/31F+RyORQKBQwMDLhep+ymB9+6dSvS0tKwadMmVKlSBc2aNcOKFSuwefNmREZGcnFmZmZYsWIF3Nzc8PXXX6NNmzY4fvw4tzy/x3TmzJlo0aIFKlSoAHNzcwwYMAB//vknVCoVAOD69eu4c+cO+nZtn/1xfB0OI0M5vvZpCCd7O1Sv4oYR/bvn8RfLqvPXPhjQoyMqVXDCrPHfoVY1dyz/fft/24hAxXIOaFCnOpzs7dCgTnV07+CXbT1bdx+CTsewftGPqOxaAV+3aIRxg3vzYgICAhAcHIzLly8DyEjUtm7din79+hW43QXx0addKleujPDwcO5x7tw5AO9uIbxo0SLcvXsXGzZswOHDh9G/f/9c61uwYAGWLVuGJUuWAMh4U/r6+iItLQ0AUL9+fd72wsPDMWDAAJQrV47LShMSEtCyZUs4OTnh2rVrWLhwIaZPn45169Zx2zl//jy6d++O/v3748aNG+jQoQM6dOiAu3fvZmnLmjVrcOnSpSxtAYCePXvi3r17CAoKwv79+3HmzBnu11GpbsslNda0keHSACMYSQTw3ZKCtPR315ertQydPQwwpJZ+zl0T8rGaNm2Kmzdvco9ly5YBAG7duoWZM2fyEpOBAwciPDwcKSkpePDgARwcHGBnZ8fV9f4XcWYdT548gbGxMVeHubk5d6VCpqpVq2YZH3Ht2jW0bdsWjo6OMDY2RuPGjQFkJAj5kZ/2fWjIkCHYtm0bvLy8MH78eJw/f55bdvPmTVSvXh3m5uY5ru/k5MQbL3Pr1i0kJSXBwsKCdxxDQ0N5+5+fffH09ISRkRFX9tVXX0Gn0yE4OJgry5yuPJOtrS3vtEp+j+mHAz47dOgAkUiE3bt3A8g4XdS0aVM4O9ghOy0a1YOTvQ3Ke7dFr+FT8Meug0j5rwepILxrVsvy/MHjUABAQJe2uHnvEVwbdsSIqQtw9PSFHOt58DgU1dxdIJO9u3T3w7rt7OzQpk0b/P777wCAf/75ByqVikvGi8pHn3bJzFg/VKVKFfz999/c8woVKmD27Nn49ttvuUuDPsQYw9KlSzFlyhS0adMGALBmzRpUrFgRe/bsQbdu3SCRSHjb02g02Lt3L4YPH87diviPP/6AWq3G77//DolEgsqVK+PmzZtYvHgx92X8yy+/wM/PD+PGjQMAzJo1C0FBQVixYgXWrFnDa0v79hnZ7aZNm2Btbc215cGDBzh8+DCuXLnCvViXL1+O1q1bY9GiRbCzsyu9bWkkRXu3jMvENnWQw3pRIvY8TEe3KhllM5pmnO/dcFOd79cSIZ+DkZFRtt3KSUlJmDFjBr755pssyzLHM+QlKSkJNWvWxB9//JFl2ftf0u9/qQLvTjP4+vrijz/+gJWVFV68eAFfX1+o1UX3nmrVqhWeP3+OgwcPIigoCM2bN8fQoUOxaNGifN2w7MP9SEpKgq2tLa+XJ9PHTKCVlw8vXRUIBNxpoYIc0w/3QyKRoHfv3ggMDMQ333yDrVu34pdffsmxHcYKI1w/vBWnzl/D0TMX8OOiNZj+81pcObgFpkpjCIXCLJOBad4bS5QfNaq6I/TiPzh04l8cO3cZXQZPgE+Duvjr14UFqud9AwYMQK9evbBkyRIEBgaia9euMDQ0/Oj68uOjez4eP34MOzs7lC9fHj179sw1K4+Pj4eJiUmOI4dDQ0MREREBHx8frkypVKJu3bq4cCH7rG7fvn14+/Yt+vbty5VduHABjRo14v2S8PX1RXBwMGJjY7mY97eTGZO5nfy05cKFCzA1NeVlyT4+PhAKhdwgrFLblvLv/oZKmQB17UW48JJ/6oWQkqxGjRoIDg6Gi4tLlodQKIS7uztevnyJ8PBwbp2LFy9mqePx48coU6ZMljqyG9uQ6eHDh3j79i3mzZuHhg0bws3NrcCDTfPTvuxYWVmhT58+2LJlC5YuXcr1jFarVg03b95ETExMvttQo0YNREREwMDAIMv+Z17eK5FIuPkrctuXW7duITk5mSv7999/IRQKc51+/H2fekwHDBiAY8eOYdWqVUhPT882KX2fgYEBfBrVxYIpo3D72HY8exWOE/9mnNKwsjBDeNQbLjYhMQmhL8Ky1HHx+p0sz90rluOemxgr0LW9L35dOBXbV8/D3wePIyY269AG94rlcPvBE6Slqd6r63aWuNatW8PIyAirV6/G4cOHi/yUC/CRyUfdunW50ymrV69GaGgoGjZsiMTExCyxb968waxZs3inAT4UEREBALC2tuaVW1tbc8s+tH79evj6+sLe3p5XT3Z1vL+NnGLeX55XWyIiIlCmTBnecgMDA5ibm+e5nRLfFiMBP8ZIgIjk7Ed9E1IS/fjjj9i0aRNmzJiBe/fu4cGDB9i2bRumTJkCICO5r1SpEvr06YNbt27h7Nmz+OGHH3h19OzZE5aWlmjfvj3Onj2L0NBQnDp1CiNGjMCrV69y3LajoyMkEgmWL1+Op0+fYt++fZg1a1aB2p+f9mW3z3v37sWTJ09w79497N+/H+7u7gCA7t27w8bGBh06dMC///6Lp0+f4u+//87xh2FmG7y9vdGhQwccPXoUz549w/nz5/HDDz9wV484OzsjNDQUN2/exJs3b7hxFe/r2bMnZDIZ+vTpg7t37+LkyZMYPnw4evXqleXzKiefekzd3d1Rr149TJgwAd27d8+1J2h/0BksW/8nbt4NxvNXYdi0cz90Oh1cKzgDAJp9VRub/z6Is5eu486Dx+gzahpEoqxfwzv3B+H3bXvwKOQ5pi1ajcs372FY364AgMVrt+DPPYfx8EkoHoU8x879x2BTxhKmSuMs9fTo2AoCATBw3Czcf/QUB4+fw6I1m7PEiUQiBAQEYNKkSahYsWKep+kKw0eddmnVqhX3/2rVqqFu3bpwcnLCjh07eGM7EhIS0KZNG3h4eGS5lOhTvHr1CkeOHMGOHTsKrU5CSCEqBjOOfixfX1/s378fM2fOxPz58yEWi+Hm5oYBAwYAyJjoaffu3ejfvz/q1KkDZ2dnLFu2DH5+7wb9GRoa4syZM5gwYQK++eYbJCYmomzZsmjevDlMTExy3LaVlRU2bNiAyZMnY9myZahRowYWLVqEdu3a5bv9+WnfhyQSCSZNmoRnz55BLpejYcOG2LZtG7fs6NGj+P7779G6dWukp6fDw8MDK1euzLE+gUCAgwcP4ocffkDfvn0RHR0NGxsbNGrUiEsa/P39sWvXLjRt2hRxcXEZV5EEBPDqMTQ0xJEjRzBy5EjUrl0bhoaG8Pf3x+LFi/N9PArjmPbv3x/nz5/Ps0fAVGmMXYdOYPritUhLU6NiOQf8uXIOKrtmTDY2aVhfhL54ja/7jILSWIFZ44Yg9MXrLPXM+H4wtu09iu8mz4NtGUv8uXIOPCqVBwAYKwyxYNVGPA59AZFIhNqeHji4eRmEwqxJjMLIEP9sWIrBE+egum93eFQsj/k/jID/wHHZ7uOcOXN4ZxOKUqFcamtqaopKlSrxrglOTEyEn58fjI2NsXv37lynk80cyxEZGYny5ctz5ZGRkdlO/xoYGAgLC4ssLx4bGxveCOjMOt7fRk4x7y/PLHv/DoHvt8XGxiZLt116ejpiYmLy3E6Jb0syg+17CXZkMoOXtQiElCTvX6aZncwxAjmpVKkSzp49yyv78Fy+jY1NtrOo5tWG7t27o3t3/hUS79fdpEmTPG8illf7nJ2dec+nTJnC9exkx8nJiTfXxPumT5+e7Y9LY2NjLFu2jBvI+yGpVJptnR/uW9WqVXHixIkc25bdcfxwLo1PPaavX79G1apVUbt27RxjAKBBneo49devOS43MVZg2+p5vLI+Xdry2/X6OgDgu4Au2dYxsOc3GNgz51M/metnqlezGm4GbcsaY+fFK3v9+jXEYjF69+ZfDVNUCmWSsaSkJISEhHBfkJlXV0gkEuzbty/PQVrlypWDjY0N79KohIQEXLp0KUv3D2MMgYGB6N27d5aExtvbG2fOnOFNLhMUFARXV1duullvb2/edjJjMreTn7Z4e3sjLi4O165d42JOnDgBnU6HunXrlu62PH03OCpBxXDplRbeDpR8EEJKn6SkJNy9excrVqzA8OHDP3dzioRKpcKrV68wffp0dO7cOd+nsz7VRyUfY8eOxenTp7nzeB07doRIJEL37t25xCM5ORnr169HQkICIiIiEBERwRtc5Obmxl2+JBAIMGrUKPz000/c3BKDBw+GnZ1dlpvjnDhxAqGhoVwX6Pt69OgBiUSC/v374969e9i+fTt++eUXjBkzhosZOXIkDh8+jJ9//hkPHz7E9OnTcfXqVQwbNixLW/bt24c7d+6gd+/evLa4u7vDz88PAwcOxOXLl/Hvv/9i2LBh6NatG3d5W6lty1kV9gVrcCdSi967U2FnLEAHt3cdaC/idbgZocWLeAYtA25GaHEzQoskdcm63TMhhAwbNgw1a9ZEkyZN9DII83P4888/4eTkhLi4uGznfyoqApZX/102unXrhjNnzuDt27ewsrJCgwYNMHv2bFSoUIG742J2QkND4ezsnLFhgYB3jo8xhmnTpmHt2rWIiopC48aNsW7dOm7SsUw9evTA8+fP8e+//2a7jdu3b2Po0KG4cuUKLC0tMXz4cEyYMIEXs3PnTkyZMgXPnj1DxYoVsWDBArRu3ZpbntmWdevWIS4uDg0aNMCqVat4bYmJicGwYcPwzz//QCgUwt/fH8uWLYNCoSjdbWkiw7prGsSlMTRwFGFVGxkqWbzr+QjYk4qNtzT40Mk+hmjiXEwm1C3B4xGKm7S0NISGhvKm1Sak1Ht/NtGSyq76R62W23s+ISEBSqWSu8I1Nx+VfBSlgjSefAb6vlV6UaDko9BQ8kG+SJR8fHLyQTeWI4R8smL2G4YQUkQK671eTPrB9aik/3KnX+2kGMmc0lqtVudrJkxCSMmWOSvs+9PZf4wvL/kghBQaAwMDGBoaIjo6GmKxONu5BggpddJLQU/fe/cHyy+dTofo6GgYGhrmOGN5flHyQQj5aAKBALa2tggNDcXz588/d3MI0Y+46M/dgk+XHPpRqwmFQjg6OnL3VPtYlHwQQj6JRCJBxYoVi/TGZ4QUKyuK9o6vejHs6ketJpFICqWHk5IPQsgnEwqFdLUL+XIkvfzcLfh0n/n9SidoCSGEEKJXlHwQQgghRK8o+SCEEEKIXlHyQQghhBC9KlDyMX36dAgEAt7Dzc2NW56WloahQ4fCwsICCoUC/v7+WW7TTgghhJAvW4F7PipXrozw8HDuce7cOW7Z6NGj8c8//2Dnzp04ffo0wsLC8M033xRqgwkhhBBSshX4UlsDAwPY2NhkKY+Pj8f69euxdetWNGvWDAAQGBgId3d3XLx4EfXq1fv01hJCCCGkxCtwz8fjx49hZ2eH8uXLo2fPnnjx4gUA4Nq1a9BoNPDx8eFi3dzc4OjoiAsXLuRYn0qlQkJCAu9BCCGEkNKrQMlH3bp1sWHDBhw+fBirV69GaGgoGjZsiMTEREREREAikcDU1JS3jrW1NSIiInKsc+7cuVAqldzDwcHho3aEEEIIISVDgU67tGrVivt/tWrVULduXTg5OWHHjh0ffUfLSZMmYcyYMdzzhIQESkAIIYSQUuyTLrU1NTVFpUqV8OTJE9jY2ECtViMuLo4XExkZme0YkUxSqRQmJia8ByGEEEJKr09KPpKSkhASEgJbW1vUrFkTYrEYx48f55YHBwfjxYsX8Pb2/uSGEkIIIaR0KNBpl7Fjx6Jt27ZwcnJCWFgYpk2bBpFIhO7du0OpVKJ///4YM2YMzM3NYWJiguHDh8Pb25uudCGEEEIIp0DJx6tXr9C9e3e8ffsWVlZWaNCgAS5evAgrKysAwJIlSyAUCuHv7w+VSgVfX1+sWrWqSBpOCCGEkJKpQMnHtm3bcl0uk8mwcuVKrFy58pMaRQghhJDSi+7tQgghhBC9ouSDEEIIIXpFyQchhBBC9IqSD0IIIYToFSUfhBBCCNErSj4IIYQQoleUfBBCCCFEryj5IIQQQoheUfJBCCmV5s2bB4FAgFGjRnFlTZo0gUAg4D0GDx6caz0BAQFZ1vHz8+PFzJ49G/Xr14ehoSFMTU2LYG8IKV0KNMMpIYSUBFeuXMHatWtRrVq1LMsGDhyImTNncs8NDQ3zrM/Pzw+BgYHcc6lUyluuVqvRuXNneHt7Y/369Z/QckK+DJR8EEJKlaSkJPTs2RO//vorfvrppyzLDQ0NYWNjU6A6pVJpruvMmDEDALBhw4YC1UvIl4pOuxBCSpWhQ4eiTZs28PHxyXb5H3/8AUtLS1SpUgWTJk1CSkpKnnWeOnUKZcqUgaurK4YMGYK3b98WdrMJ+aJQzwchpNTYtm0brl+/jitXrmS7vEePHnBycoKdnR1u376NCRMmIDg4GLt27cqxTj8/P3zzzTcoV64cQkJCMHnyZLRq1QoXLlyASCQqql0hpFSj5IMQUiq8fPkSI0eORFBQEGQyWbYxgwYN4v5ftWpV2Nraonnz5ggJCUGFChWyXadbt268dapVq4YKFSrg1KlTaN68eeHuBCFfCDrtQggpFa5du4aoqCjUqFEDBgYGMDAwwOnTp7Fs2TIYGBhAq9VmWadu3boAgCdPnuR7O+XLl4elpWWB1iGE8FHPByGkVGjevDnu3LnDK+vbty/c3NwwYcKEbE+R3Lx5EwBga2ub7+28evUKb9++LdA6hBA+Sj4IIaWCsbExqlSpwiszMjKChYUFqlSpgpCQEGzduhWtW7eGhYUFbt++jdGjR6NRo0a8S3Ld3Nwwd+5cdOzYEUlJSZgxYwb8/f1hY2ODkJAQjB8/Hi4uLvD19eXWefHiBWJiYvDixQtotVouqXFxcYFCodDL/hNSklDyQQj5IkgkEhw7dgxLly5FcnIyHBwc4O/vjylTpvDigoODER8fDwAQiUS4ffs2Nm7ciLi4ONjZ2aFly5aYNWsWb66PH3/8ERs3buSeV69eHQBw8uRJNGnSpOh3jpASRsAYY5+7Ee9LSEiAUqlEfHw8TExMCn8D05WFX6c+TY//zNsv4ccP+PzHkBBSstHnYLYK8v1NA04JIYQQold02oUQUrLQr05CSjzq+SCEEEKIXlHyQQghhBC9ouSDEEIIIXpFyQchhBBC9IqSD0IIIYToFSUfhBBCCNErutT2P2eep2PheTWuhWkRnsSwu6scHdzE3HLBjIRs11vgI8W4r6TZLsurTo2WYcoJFQ4+ScfTWB2UUgF8yhtgno8UdsaUFxJCCCmdKPn4T7KawdNaiH5eYnyzIzXL8vDv+fdnOPQ4Hf33pcHfQ5wlNr91pmiA6xFaTG0khae1ELFpDCMPp6Hdnym4OojuB0EIIaR0ouTjP60qitGqYmYikTVRsFHweyL2BqejaTkRypvl3EORV51KmQBBvYx4ZStayVHnt2S8iNfBUUm9H4QQQkof+nb7CJFJOhx4nI7+1SWFXne8ikEAwFQmKPS6CSGEkOKAko+PsPGWBsYS4Bv3wu04SktnmHAsDd2rGsBESskHIYSQ0omSj4/w+w0NelYVQ2ZQeAmCRsvQZWcqGANWt5EXWr2EEEJIcUPJRwGdfZ6O4Lc6DKhReKdcNFqGLn+l4nm8DkG9DKnXgxBCSKlGA04LaP0NDWraCuFpIyqU+jITj8dvdTjZxxAWhpQPEkIIKd3om+4/SWqGmxFa3IzQAgBCY3W4GaHFi3gdF5OgYth5X5Njr0fzTclYcVmd7zo1WoZOO1NxNUyLP76RQ8uAiCQdIpJ0UGtZUe0qIYQQ8llRz8d/roZp0XRjCvd8zFEVABX6eIqxoUPGGIxtdzVgDOheJfu5PUJidHiT8i5ZyavO14kM+4LTAQBea5N5dZ3sY4gmziXnz7P6ihqrr6rxLC5j/yuXEeHHRhLuUuN119TYekeD6+FaJKqB2AnGeV7Rk9ckbQCw64EGa66qcS1ch5hUhhv/M4JXIfVKEUIIKRol59utiDVxNgCbZpJrzKCaEgyqmfNYj2ejjAtUp7OpMM9tlhT2JgLM85GiorkQDMDGmxq035aKG/8TonIZEVI0DH4uBvBzMcCk46p81ZnXJG2ZMQ0cDdClsgAD/0krxD0ihBBSVCj5IIWirSu/R2J2cxFWX1Xj4istKpcRYVS9jCnoTz1Lz3edeU3SBgC9PDOSwcweF0IIIcUfJR+k0Gl1DDvvpyNZA3g70CkQQgghfDTglBSaO5FaKOYkQPpTIgbvT8XurnJ4WFHyQUqfeedUEMxIwKjD7071paUzDD2QCosFiVDMSYD/jhREJuXcI6fRaDBhwgRUrVoVRkZGsLOzQ+/evREWFsaLu379Olq0aAFTU1NYWFhg0KBBSEpK4sW8ePECbdq0gaGhIcqUKYNx48YhPZ3fy3jq1CnUqFEDUqkULi4u2LBhQ5Y2rVy5Es7OzpDJZKhbty4uX77MW56WloahQ4fCwsICCoUC/v7+iIyM/PLa8lrLb0s+//YbbqpRbXUSZD8loMzCRAw9kH2P7peAkg9SaFwthbg5WIFLA4wwpJYEffak4X60Nu8VCSlBrrzWYu01NapZ8z8+Rx9Owz+P0rGzsxynA4wQlshyHKsEACkpKbh+/TqmTp2K69evY9euXQgODka7du24mLCwMPj4+MDFxQWXLl3C4cOHce/ePQQEBHAxWq0Wbdq0gVqtxvnz57Fx40Zs2LABP/74IxcTGhqKNm3aoGnTprh58yZGjRqFAQMG4MiRI1zM9u3bMWbMGEybNg3Xr1+Hp6cnfH19ERUV9W4fR4/GP//8g507d+L06dMICwvDN9988+W1ZUsyopLfJRf5+dsvvqDCDydUmNhAinvfKXCstyF8Xb7ckw8CxlixuqYzISEBSqUS8fHxMDEpgsGY05WFX6c+TY//zNvP//Hz2ZSMCmZCrG37bsbWU8/S0XRjSr6udnmfYEZCtle7ZHoWp0O5X5Lyd7XL5z6G5NN8xvdwkpqhxtpkrGojw09nVPCyEWGpnwzxaQxWCxOx1V+OTv/d6frhGy3cVybjQn9D1LP/4Esmh9fglStXUKdOHTx//hyOjo5Yt24dpk6divDwcAiFGcnOnTt3UK1aNTx+/BguLi44dOgQvv76a4SFhcHa2hoAsGbNGkyYMAHR0dGQSCSYMGECDhw4gLt373Lb6tatG+Li4nD48GEAQN26dVG7dm2sWLECAKDT6eDg4IDhw4dj4sSJiI+Ph5WVFbZu3YpOnTpl7OPDh3B3d8eFCxdQr169L6ctpgYYXkeCiQ2k+frbx6YylF2ciH+6G6J5+WKScBTB52BBvr+p54MUGR0DVNTxQUqRoQfT0KaiAXw++AK5Fq6FRgdeuZulCI5KAS68zP+bID4+HgKBAKampgAAlUoFiUTCJR4AIJdnJPPnzp0DAFy4cAFVq1blvmABwNfXFwkJCbh37x4X4+Pjw9uWr68vLly4AABQq9W4du0aL0YoFMLHx4eLuXbtGjQaDS/Gzc0Njo6OXMwX05byBrjwKuPvmp+/fdDTdOgY8DpRB/eVSbBfnIguO1PwMv7LHShPyQcpFJOOpeHM83Q8i9PhTqQWk46l4dQzLXpWzfglEJGUMcHak5iMN9udyIzJ12JS33W8FXSSNgCISc2IyTy9E/wmIyYil3PthHyMbXcz5qmZ6yPNsiwiiUEiyno3amsjASKS8te5nJaWhgkTJqB79+7cr8ZmzZohIiICCxcuhFqtRmxsLCZOnAgACA8Pz9h2RATvCxYA9zwiIiLXmISEBKSmpuLNmzfQarXZxrxfh0Qi4RKjnGK+iLYYCbjPmPz87Z/G6qBjwJyzaiz1leGvLnLEpDK02JzyxU4oWUz6f0hJF5XM0Ht3KsKTGJRSAapZC3HkW0O0qJDxEltzVY0Zp98lFo02ZEy+FthehgCvjMtlCzpJGwDsC9ag7953g/66/Z1xnnVaYwmmN5EVzc6SL87LeB1GHk5DUC/DQr2hZCaNRoMuXbqAMYbVq1dz5ZUrV8bGjRsxZswYTJo0CSKRCCNGjIC1tTWvN4QUbzoGaHTAslYytPzvM/FPfyFsfk7CyVDtFzn248vbY1Ik1rfP/U6805vI8kwGCjpJGwAEeEm45IWQonItXIuo5IzxHpm0DDjzXIsVl9U48q0h1FogLo3xfgFHJjPYKHJPVjITj+fPn+PEiRNZzpX36NEDPXr0QGRkJIyMjCAQCLB48WKUL18eAGBjY5PlSpDMqz5sbGy4fz+8EiQyMhImJiaQy+UQiUQQiUTZxrxfh1qtRlxcHK/H4cOYL6ItyQw2iozkz0Yh4P72q6+oseuhBg/f6JCiAVI16ehXXQvb/14DxpKM8Wvv8/sj4wfWjk5ydK6c/Zi2JDXDxGNp2PMwHW9TGcqZCjGirgSDa7377PvfP6k4FpqOsEQGhUSA+g4izPeRws2yeF5xSKkzIYTkoXk5A9wZYoSbg989atkJ0bOa+L//iyAWAsefvruMM/iNFi/iWa5z3WQmHo8fP8axY8dgYWGRY6y1tTUUCgW2b98OmUyGFi1aAAC8vb1x584d3pUgQUFBMDExgYeHBxdz/PhxXn1BQUHw9vYGAEgkEtSsWZMXo9PpcPz4cS6mZs2aEIvFvJjg4GC8ePGCi/li2vI0Hd72GX/Xmrbv/vann6djaG0J/vxGDh0DjKUCtNySgur/DYJPVDOEf69A+PcK3P/OCEIB0KuaGAoJ0Kpizn0BY46k4fCTdGz5Ro4HQxUYVU+CYQfTsC9Yw8XUtBMhsH3G8iPfGoIxoOXmFGh1xfO0DvV8EEJIHoylAlQpw08ijMQCWMjflfevLsaYo2kwlwtgIhVg+KE0eNuLeFe6uK1IwtzmUnRERuLRqVMnXL9+Hfv374dWq+XGIpibm0MiyfhVu2LFCtSvXx8KhQJBQUEYN24c5s2bx/3ib9myJTw8PNCrVy8sWLAAERERmDJlCoYOHQqpNGN8yuDBg7FixQqMHz8e/fr1w4kTJ7Bjxw4cOHCAa9uYMWPQp08f1KpVC3Xq1MHSpUuRnJyMvn37AgCUSiX69++PMWPGwNzcHCYmJhg+fDi8vb1Rr169L6stGoa+Xhm9FEqZgPvbb2gv5/3t93aTo8yiJCSoGdq7GmDMERXWtZXBRCrApOMquFkKcTsyHV08xFBIcu4hO/9Siz6eEu5+X4NqSrD2mhqXX2vR7r/Zpd+/9YezKfBTMyk81yTjWRxDBfPCP1X4qSj5IISQQrDETwbhkTT470iBSgv4VjDAqjb8U43Bb3WIV2X8En39+jX27dsHAPDy8uLFnTx5Ek2aNAEAXL58GdOmTUNSUhLc3Nywdu1a9OrVi4sViUTYv38/hgwZAm9vbxgZGaFPnz6YOXMmF1OuXDkcOHAAo0ePxi+//AJ7e3v89ttv8PX15WK6du2K6Oho/Pjjj4iIiICXlxcOHz7MG2y5ZMkSCIVC+Pv7Q6VSwdfXF6tWrfry2tLTENaKdycOcvrbx/93GytzuQCbOsox+nAa2mxNgVAgQGMnERb4SPH1n6lY1Sb70y2Z6juIsO+RBv2qi2FnLMCpZ1o8eqvDEt/sv8KT1QyBNzQoZyqAg7L4JR7AJ87zMW/ePEyaNAkjR47E0qVLAWSM2P7++++xbds23gviw9HCOaF5PvLwueeoKOnHD/j8x5B8GnoNks8tH69BHWNo92cq4tIYzvUzyjbmuwOpOPVMi/tDFbnWpUpnGLQ/DZtuaWAgBIQC4Ne2MvT25I93W3VFjfFBaUjWAK4WQhzoYYgK5jmMriip83xcuXIFa9euRbVq1Xjlec06RwghhJR2Qw+k4W6UFts6ZT8YP1XDsPWOBv2r597rAQDLL2fcpHNfNzmuDTLCzy1lGHowDcee8qeK71lVjBv/M8LpAENUshCiy18pSEsvRWM+kpKS0LNnT/z666/46aefuPL4+HisX78eW7duRbNmzQAAgYGBcHd3x8WLF7lzcYQQQj6jkt57VMx7joYdTMX+x+k4E2AEe5Psf+P/dV+DFA3Q2zP35CNVwzD5uAq7u8rRplJGbDVrEW5GaLHovIo3uZlSJoBSJkJFC6CevQhm8xOx+0E6ulfNO8HRt4/q+Rg6dCjatGmTZWa4/Mw69yGVSoWEhATegxBCCClpGGMYdjAVux+m40RvQ5Qzy/krdv0NDdq5GsDKKPevYY0u4yH8YOiGSJAxf0jObcl4qIrpJGYF7vnYtm0brl+/jitXrmRZlp9Z5z40d+5czJgxo6DNIIQQQoqVoQfTsPWOBnu7GcJY+m4WVKVUALn4XfbwJEaHM8+1ONjTMNt6uKui3MUwkWYMTh0XpIJcLICTUojTz9Ox6bYGi1tmDGh+GqvD9rsatKxgACsjAV4l6DDvnBpysQCtc7mE93MqUKtevnyJkSNHIigoCDJZ4cweOWnSJIwZM4Z7npCQAAcHh0KpmxBCCNGX1Vcz5t1o8t7MzAB/JmcA+P2GGvYmArSskP0cMO9fFQUA2zrJMem4Cj13pSImlcFJKcTsZlIMrpVxOkVmAJx9ocXSS2rEpjJYKwRo5CTC+X6GKJNHz8rnUqDk49q1a4iKikKNGjW4Mq1WizNnzmDFihU4cuRInrPOfUgqlXLXXBNCCCElVV4zMmea01yGOc1z/gH/YT02CiECc5lF2s5YmGMvSnFVoOSjefPmuHPnDq+sb9++cHNzw4QJE+Dg4MDNOufv7w8g66xzhBBCCPmyFSj5MDY2RpUqVXhlRkZGsLCw4MrzmnWOEEIIIV+2Qh+Jktesc4QQQgj5sn1y8nHq1Cnec5lMhpUrV2LlypWfWjUhhBBCSqHiOQyWEEIIIaUWJR+EEEII0StKPgghhBCiV5R8EEIIIUSvKPkghBBCiF5R8kEIIYQQvaLkgxBCCCF6RckHIYQQQvSKkg9CCCGE6BUlH4QQQgjRK0o+CCGEEKJXlHwQQgghRK8o+SCEEEKIXlHyQQghhBC9ouSDEEIIIXpFyQchhBBC9IqSD0IIIYToFSUfhBBCCNErSj4IIYQQoleUfBBCCCFEryj5IIQQQoheUfJBCCGEEL2i5IMQQgghekXJByGEEEL0yuBzN0DfnNO2fu4mfJJnn7sBhBBCyCeing9CCCGE6BUlH4QQQgjRK0o+CCkGVq9ejWrVqsHExAQmJibw9vbGoUOHAAAxMTEYPnw4XF1dIZfL4ejoiBEjRiA+Pj7XOqdPnw43NzcYGRnBzMwMPj4+uHTpEi+mXbt2cHR0hEwmg62tLXr16oWwsLAi209CCAEo+SCkWLC3t8e8efNw7do1XL16Fc2aNUP79u1x7949hIWFISwsDIsWLcLdu3exYcMGHD58GP3798+1zkqVKmHFihW4c+cOzp07B2dnZ7Rs2RLR0dFcTNOmTbFjxw4EBwfj77//RkhICDp16lTUu0sI+cIJGGPsczfifQkJCVAqlYiPj4eJiUmh1+888UCh16lPz+a1+bwNmK78vNsvDNNz7zEoLszNzbFw4cJsk4ydO3fi22+/RXJyMgwM8jduPPO9dezYMTRv3jzbmH379qFDhw5QqVQQi8Wf1P4iQ6/BQth+CT+GdPw+XREcw4J8f39xV7sQUtxptVrs3LkTycnJ8Pb2zjYm882d38RDrVZj3bp1UCqV8PT0zDYmJiYGf/zxB+rXr198E49czD2rwq6HGjx8o4PcQID6DiLM95HC1VKUJZYxhtZbU3D4iRa7u8rRwS3n/U1SM0w8loY9D9PxNpWhnKkQI+pKMLiWhIuJSNJhXJAKQSHpSFQzuFoI8UNDKfw9St5xJEQf6LQLIcXEnTt3oFAoIJVKMXjwYOzevRseHh5Z4t68eYNZs2Zh0KBBeda5f/9+KBQKyGQyLFmyBEFBQbC0tOTFTJgwAUZGRrCwsMCLFy+wd+/eQtsnfTr9PB1Da0twsb8RgnoZQqMDWm5JQbI6a+fu0otqCCDIV71jjqTh8JN0bPlGjgdDFRhVT4JhB9OwL1jDxfTenYrgN1rs626IO0MU+MZdjC5/peJGuLbQ9o+Q0oSSD0KKCVdXV9y8eROXLl3CkCFD0KdPH9y/f58Xk5CQgDZt2sDDwwPTp0/Ps86mTZvi5s2bOH/+PPz8/NClSxdERUXxYsaNG4cbN27g6NGjEIlE6N27N4rZ2dh8OfytEQK8JKhcRgRPGxE2tJfhRTzDtQ8SgJsRWvx8QY3f28vyVe/5l1r08ZSgibMBnE2FGFRTAk8bIS6/1vJihteRoE5ZEcqbCTGlkRSmMkGWbRNCMlDyQUgxIZFI4OLigpo1a2Lu3Lnw9PTEL7/8wi1PTEyEn58fjI2NsXv37nydGjEyMoKLiwvq1auH9evXw8DAAOvXr+fFWFpaolKlSmjRogW2bduGgwcP4uLFi4W+f/oWr8r411z+rocjRcPQ4+9UrGwtg40ifx9/9R1E2PdIg9cJOjDGcDI0HY/e6tCyggEvZvu9dMSkMugYw7a7GqSlMzRxpjPbhGSH3hmEFFM6nQ4qVcY3aEJCAnx9fSGVSrFv3z7IZPn71Z5bnTktB5BrTEmgYwyjDqfhKwcRqpR5N+Zj9OE01HcQoX0uYzw+tLyVDIP2p8F+SRIMhIBQAPzaVoZGTu8+Pnd0NkTXv1JgsSARBkLAUAzs7moIF3P6fUdIdij5IKQYmDRpElq1agVHR0ckJiZi69atOHXqFI4cOYKEhAS0bNkSKSkp2LJlCxISEpCQkAAAsLKygkiU8eXq5uaGuXPnomPHjkhOTsbs2bPRrl072Nra4s2bN1i5ciVev36Nzp07AwAuXbqEK1euoEGDBjAzM0NISAimTp2KChUq5DjQtaQYeiANd6O0ONfPiCvbF6zBiWda3PifUS5rZrX8shoXX2mxr5scTqZCnHmuxdCDabAzFsKnfMZH6NQTaYhLYzjWyxCWhgLseZiOLjtTcLavEapaZx3wSsiXjpIPQoqBqKgo9O7dG+Hh4VAqlahWrRqOHDmCFi1a4NSpU9zkYC4uLrz1QkND4ezsDAAIDg7mJh4TiUR4+PAhNm7ciDdv3sDCwgK1a9fG2bNnUblyZQCAoaEhdu3ahWnTpiE5ORm2trbw8/PDlClTIJVK9bfzhWzYwVTsf5yOMwFGsDd51/NwIlSLkBgdTOcl8uL9d6SioaMapwKyJiWpGobJx1XY3VWONpUyekuqWYtwM0KLRedV8ClvgJAYHVZc0eDuECNU/q+XxdNGhLMv0rHyihprvpYX4d4SUjJR8kFIMfDhOIz3NWnSJF8DQN+Pkclk2LVrV67xVatWxYkTJ/LfyGKOMYbhh9Kw+2E6TvUxRDkz/imPiQ0kGFCDf7ql6upkLPGVom2l7E/DaHQZD+EHF8aIBIDuv8Odosn4T5YY4bsYQggfJR+EkFJh6ME0bL2jwd5uhjCWChCRlDF+RSkVQC4WwEYhhI0i63qOSiEvUXFbkYS5zaXo6C6GiVSAxk4ijAtSQS4WwEkpxOnn6dh0W4PFLTPG3bhZCuFiLsT/9qdhUUsZLOQC7HmoQVCIFvt7SLJukBBCyQchpHRYfTVj3o0mG1N45YHtZQjwyn8SEPxWh3jVuy6LbZ3kmHRchZ67UhGTyuCkFGJ2MykG18roLRGLBDjYQ46Jx1Vo+2cKktQMLuZCbOwgQ+uKNMkYIdmh5IMQfSvpUzN/7qmtc8CmFfx2DNmt82GZjUKIwPa5j9uoaCHC310MC7x9Qr5UdB0YIYQQQvSKkg9CCCGE6BUlH4QQQgjRK0o+CCGEEKJXlHwQQgghRK8o+SCEEEKIXlHyQQghhBC9ouSDEEIIIXpFyQchhBBC9KpAycfq1atRrVo1mJiYwMTEBN7e3jh06BC3PC0tDUOHDoWFhQUUCgX8/f0RGRlZ6I0mhBBCSMlVoOTD3t4e8+bNw7Vr13D16lU0a9YM7du3x7179wAAo0ePxj///IOdO3fi9OnTCAsLwzfffFMkDSeEEEJIyVSge7u0bduW93z27NlYvXo1Ll68CHt7e6xfvx5bt25Fs2bNAACBgYFwd3fHxYsXUa9evcJrNSGEEEJKrI8e86HVarFt2zYkJyfD29sb165dg0ajgY+PDxfj5uYGR0dHXLhwIcd6VCoVEhISeA9CCCGElF4FTj7u3LkDhUIBqVSKwYMHY/fu3fDw8EBERAQkEglMTU158dbW1oiIiMixvrlz50KpVHIPBweHAu8EIYQQQkqOAicfrq6uuHnzJi5duoQhQ4agT58+uH///kc3YNKkSYiPj+ceL1++/Oi6CCGEEFL8FWjMBwBIJBK4uLgAAGrWrIkrV67gl19+QdeuXaFWqxEXF8fr/YiMjISNjU2O9UmlUkil0oK3nBBCSKGZe1aFXQ81ePhGB7mBAPUdRJjvI4WrpQgAEJPKMO1kGo4+1eJFvA5WhgJ0cBNjVlMplDJBjvUmqRkmHkvDnofpeJvKUM5UiBF1JRhcS8LFNNmQjNPPtbz1/ldTjDVfy4tmZ8lnV+Dk40M6nQ4qlQo1a9aEWCzG8ePH4e/vDwAIDg7Gixcv4O3t/ckNJYQQUnROP0/H0NoS1LYTIV0HTD6hQsstKbj/nQJGEgHCEnUIS2JY1EIKDysRnsfrMHh/GsISdfiri2GO9Y45koYToenY8o0czqZCHA1Jx3cH0mBnLEA7VzEXN7CGGDObvvshaijOOaEhJV+Bko9JkyahVatWcHR0RGJiIrZu3YpTp07hyJEjUCqV6N+/P8aMGQNzc3OYmJhg+PDh8Pb2pitdCCGkmDv8rRHv+Yb2MpRZlIRr4Vo0cjJAlTIi/P1eklHBXIjZzaT4dncq0nUMBsLsk4XzL7Xo4ylBE+eMr5tBNSVYe02Ny6+1vOTDUCyAjYLmvfxSFCj5iIqKQu/evREeHg6lUolq1arhyJEjaNGiBQBgyZIlEAqF8Pf3h0qlgq+vL1atWlUkDSeEEFJ04lUZ/5rLc+6BiFcxmEgFOSYeAFDfQYR9jzToV10MO2MBTj3T4tFbHZb48r9+/rijwZbbGtgoBGhbyQBTG0up96MUK1DysX79+lyXy2QyrFy5EitXrvykRhFCCPl8dIxh1OE0fOUgQpUyomxj3qToMOuMCoNqiLNdnml5KxkG7U+D/ZIkGAgBoQD4ta0MjZzeff30qCqGk1IIO2MBbkfqMOFYGoLf6rCra86nc0jJ9sljPgghhJQuQw+k4W6UFuf6GWW7PEHF0GZrCjyshJjeJPcLBpZfVuPiKy32dZPDyVSIM8+1GHowDXbGQviUf3cqJlNVaxFsjQVovikFITE6VDCnUzGlESUfhBBCOMMOpmL/43ScCTCCvUnWL/5EFYPflhQYSwTY3dUQYlHOp0ZSNQyTj6uwu6scbSpl9JBUsxbhZoQWi86ruOTjQ3XLZvS2PKHko9SivyohhBAwxjDsYCp2P0zHid6GKGeW9eshQcXQcksKJCJgX3dDyAxyH5Oh0WU8PhwSIhIAOpbzejcjMi67tTWmMR+lFfV8EEIIwdCDadh6R4O93QxhLBUgIkkHAFBKBZCLBRmJx+YUpGgYtnQ1RIKKIUGVkUFYGQog+i/DcFuRhLnNpejoLoaJVIDGTiKMC1JBLhbASSnE6efp2HRbg8UtZQCAkBgdtt7RoHVFA1gYCnA7UovRR9LQyEmEatbZjzchJR8lH4QQQrD6qgYA0GRjCq88sL0MAV4SXA/X4tLrjB4Jl+VJvJjQkQo4m2YkH8FvdYhXvevW2NZJjknHVei5KxUxqQxOyoxLdAfXyjgNIxEBx0LTsfSSGslqBgelEP7uYkxpRJNPlmaUfBBCCAGbZpLr8ibOBnnGZFePjUKIwPY5z1TqoBTidED2A1tJ6UVjPgghhBCiV5R8EEIIIUSvKPkghBBCiF5R8kEIIYQQvaLkgxBCCCF6RckHIYQQQvSKkg9CCCGE6BUlH4QQQgjRK5pkjBSIc9rWz92ET/bsczeAEEK+cJR8EEIIIQVAP8I+HZ12IYQQQoheUfJBCCGEEL2i5IMQQgghekXJByGEEEL0igacElJMnHmejoXn1bgWpkV4EsPurnJ0cBNzywP2pGLjLQ1vHd8KIhz+Nufbkc89q8Kuhxo8fKOD3ECA+g4izPeRwtVSxMWsu6bG1jsaXA/XIlENxE4whqlMUPg7SAgh/6Hkg5BiIlnN4GktRD8vMb7ZkZptjJ+LCIHt5dxzqSj3JOH083QMrS1BbTsR0nXA5BMqtNySgvvfKWAkyVg3RcPg52IAPxcDTDquKrwdIoSQHFDyQUgx0aqiGK0qZvZ0ZJ98SEUC2Cjyf7b0w16RDe1lKLMoCdfCtWjklPH2H1VPCgA49Sy94I0mhJCPQMkHISXIqWfpKLMwEWZyAZo5i/BTMyksDPOfjMT/17FhLqfTKoSQz4eSD0JKCD8XA3zjboBypkKExOow+bgKrf5IwYX+RhAJ804mdIxh1OE0fOUgQpUyojzjCSGkqFDyQUgJ0a3Ku8GnVa1FqGYtQoVlSTj1TIvm5fN+Kw89kIa7UVqc65fzAFVCCNEHutSWkBKqvJkQloYCPInR5Rk77GAq9j9Ox8k+RrA3obc9IeTzop4PQkqoVwk6vE1hsDXO+ZQLYwzDD6Vh98N0nOpjiHJmlHgQQj4/Sj4IKSaS1IzXixEaq8PNCC3M5QKYywWYcUoFfw8D2CiECInRYfyxNLiYC+Fb4d3buPmmZHR0E2NYHQkAYOjBNGy9o8HeboYwlgoQkZRRv1IqgFyckbREJOkQkfRu23citTCWCuCoFNLAVEJIkaDkg5Bi4mqYFk03pnDPxxxVAVChj6cYq9vIcDtKi423NIhLY7AzFqBlBQPMaiqF1OBdghASo8OblHcJzOqrGZOSNXmvXgAIbC9DgFdGgrLmqhozTqu5ZY02pGSJIYSQwkTJByHFRBNnA7BpJjkuP5LLTKaZno0y5j3Prb5M05vIML2JLO8GEkJIIaETwIQQQgjRK0o+CCGEEKJXlHwQQgghRK8o+SCEEEKIXlHyQQghhBC9ouSDEEIIIXpFyQchhBBC9IqSD0IIIYToFSUfhBBCCNErSj4IIYQQoleUfBBCCCFEryj5IIQQQoheUfJBCCGEEL2i5IMQQgghekXJByGEEEL0ipIPQgghhOgVJR+EEEII0StKPgghhBCiV5R8EEIIIUSvDAoSPHfuXOzatQsPHz6EXC5H/fr1MX/+fLi6unIxaWlp+P7777Ft2zaoVCr4+vpi1apVsLa2LvTGE0K+PM5pWz93Ez7Zs8/dAEI+swL1fJw+fRpDhw7FxYsXERQUBI1Gg5YtWyI5OZmLGT16NP755x/s3LkTp0+fRlhYGL755ptCbzghhBBCSqYC9XwcPnyY93zDhg0oU6YMrl27hkaNGiE+Ph7r16/H1q1b0axZMwBAYGAg3N3dcfHiRdSrV6/wWk4IIYSQEumTxnzEx8cDAMzNzQEA165dg0ajgY+PDxfj5uYGR0dHXLhwIds6VCoVEhISeA9CCCGElF4fnXzodDqMGjUKX331FapUqQIAiIiIgEQigampKS/W2toaERER2dYzd+5cKJVK7uHg4PCxTSKEEEJICfDRycfQoUNx9+5dbNu27ZMaMGnSJMTHx3OPly9fflJ9hBBCCCneCjTmI9OwYcOwf/9+nDlzBvb29ly5jY0N1Go14uLieL0fkZGRsLGxybYuqVQKqVT6Mc0ghBBCSAlUoJ4PxhiGDRuG3bt348SJEyhXrhxvec2aNSEWi3H8+HGuLDg4GC9evIC3t3fhtJgQQgghJVqBej6GDh2KrVu3Yu/evTA2NubGcSiVSsjlciiVSvTv3x9jxoyBubk5TExMMHz4cHh7e9OVLoQQQggBUMDkY/Xq1QCAJk2a8MoDAwMREBAAAFiyZAmEQiH8/f15k4wRQgghhAAFTD4YY3nGyGQyrFy5EitXrvzoRhFCCCGk9KJ7uxBCCCFEryj5IIQQQoheUfJBCCGEEL36qHk+SpvEGweReOMg0uMjAQBiS0eY1u8OeYVavDjGGKJ2Tkda6DVYdfwBhpVyvnxYmxyL2FMbkPbsBnRpyZA6VIa5z/8gNi/LxURsnQjVy7u89RRefrDwHVaIe0cIIYQUL5R8ABAZW8CscR8YmNkBAJLuHkfUrp9gG/ALJFZOXFzi1b2AIO/6GGOI2vUTBEIDWH0zBUKJIRKu7EHk9imw678aQomMi1V4+sK0wbfcc4GYJlwjhBBSutFpFwCGLnUhr1AbYvOyEJuXhVmj3hBKZFCFBXMx6sinSLi8G5atRuVZX3psGNRhwTBv+R2ktpUgtrCHue93YOlqJD84zYsVGEghUphxD6HUsLB3jxBCCClWqOfjA0ynRcrDc9Bp0iAt6wYA0GnS8OafhTBvOQQihVnedWg1AACBgYQrEwiEEIjEUL26D2NPX648+f4pJN8/BZGRKeQudaCs3w1CsSxLnYQQQkhpQcnHf9TRzxCxeSxYuhoCiRxlOv4AiaUjACD2+G+QlnWHYcX8zdIqNreHyMQKcac3wtxvGIRiKRKu7IU28Q20STFcnJFHExiYWEFkbAF1VCjiTm2AJuY1ynT8oUj2kRBCCCkOKPn4j9i8LGz7LoNOlYKU4HN4c2AJrHvMQ3psONJe3IJtwLJ81yUQGcCq4w94e+gXvPqlGyAQQubsBVn5msB787QZe/lx/5dYOUOkMEfUth+giQ2H2My2MHePEEIIKTYo+fiPQCSG+L8Bp1IbF6jDHyPx6j4IDCRIj43Ay6VdefHRe+ZCau8Bmx7zsq1PauMCu77LoVMlg2nTITJUInzTGEhsKubYBqmtK4CMMSOUfBBCiopz2tbP3YRP8uxzN4B8Mko+csAYA9NqYNqgJxSeLXnLwn8fBrNmAyB3qZNnPUKpEQBAE/Ma6ognMG34bY6x6qinAACRwvwTWk4IIYQUb5R8AIg9vQHy8rVgYGIFnToVyfdPQfXiDpRdZnJXoXzIwMQKYlMb7vnrXwfDrHFvGFaqDwBIfngOIkMTiEzKQBP9DDHH1sGwYj3Iy9UAAGhiw5F8/xTkFWpDJDeGOuoZYk/8CqlDFUjKlNPPjpPPgn51EkK+dJR8ANAmx+PN/sXQJsdAKDWCxMoZZbrMhLxc9XzXkR7zCjpVyrs6k2IQe+I3aJPjIFKYQVG5GZRfdeOWC0QGSHt+C4lX90GnSYOBiSUMK9WHsn637KonhBBCSg1KPgBYth5ZoHinCfvzLDOp1Q4mtdrlWIeBiVWO40UIIYSQ0owmGSOEEEKIXlHyQQghhBC9ouSDEEIIIXpFyQchhBBC9IqSD0IIIYToFSUfhBBCCNErSj4IIYQQoleUfBBCCCFEryj5IIQQQoheUfJBCCGEEL2i5IMQQgghekXJByGEEEL0ipIPQgghhOgVJR+EEEII0StKPgghhBCiVwafuwGkdIi/sAMpjy5AE/MKAgMJpGXdYdY4AGILe16c6vUDxJ7ZDHV4MCAQQlKmPMp0mQmhWJptvXHn/kD8v3/yygzM7VF24BoAgDY1EfHn/kDqsxvQJkRDKFfCsFI9mDb8FkKpUdHsLCGEZKOoPgd527i4E3GnN8K4ZjuY+wwCAKTHR+L1mv7Zxlu2nwgjtwafvnOFjJIPUijSXt6FcY02kNhUBJgWcac3IXLHVNj1Xw2hRAYg4w0XuWMalN6dYe7zPwiEIqijQiEQ5N4BJ7Z0hHXX2e8KhO/itUlvoU2KgVnTfhBbOCI9IQoxR1ZCm/gWVh0nF8m+EkJIdorycxAAVOGPkHjzMMRWzrxykbEl7Idu5pUl3jqMhMu7IC9fs9D2rzBR8kEKhXWXmbznFm1G49XynlBHPoHMoQoAIOb4bzCp2RbKep25uA9/EWRLKIJIYZbtIomVMy/JEJvZwrRRb7zZvwhMp4VAKPqIvSGEkIIrys9BnToVb/5ZBAu/4Yg/v423TJDNZ2TKowswdG0AoUT+sbtTpCj5IEVCp0oGAAhlCgCANjkO6vBgGFVugojNY6GJi4DYwh6mjXpBZl8517rSY8PwamVvCERiSMq6waxxHxiYlMl120KJISUehJDPqjA/B2OCVkNeoTbkzl5Zko8PqSKeQBP1FOYthhTOjhQBGnBKCh1jOsQe/xXSsh6Q/Nc9mB4XAQCIP7cVCk9fWHeZAYl1BURu+wGamNc51iW1dYVF69Eo03kGzFt+B21cJCL+mACdKiXbeG1KPOLPb4PCy6/Q94sQQvKrMD8Hk++fhjoiBGaN++Rr20m3j0Js4QCZvfsn70dRoeSDFLqYo6uhjn4Oy3bjuTLGGABA4eUHRbUWkFhXgHnzgRCb2yPpTlCOdckr1IKRWwNIypSDvHxNlOk8Hbq0ZCQ/PJclVqdKQdRfMyC2cITpVz0Kf8cIISSfCutzMD0hGjHHf4Vl27EQGEjy3K5Oo0Ly/dNQVGtRODtSROi0CylUMUGrkRpyBdY95sHAxJIrzzwfKbZ05MWLLRyQnhCd7/qFMgXE5mWRHhfGK9epUhC140cIJXKU+eYHCET00iaEfB6F+TmojngCXUocwjeMfFfIdFC9vIfE6/vhOHY37xRzSvC/YBoVjKo0L8Q9Knz0CU0KBWMMscfWIOXRBVh3nwuxqQ1vuYHSGiKFOdLfvuKVa2JeF2g0tk6divS4cIiMmr4rU6UgcsdUCERiWPlPzdevA0IIKWxF8Tkoc/KEbb8VvLK3B3+B2MIeJnX9s4xtS7p9FIYudSAyVBbCHhUdOu1CCkVM0Gok3TsFy7bjIJQYQpsUC21SLHQaFQBAIBDApI4/Eq79g+SH56CJDUPcmc1Ij3kFRbWWXD2R2yYj4do/3PPYE+uR9uIO0uMjkfbqAaJ3zQYEQhh5NAbwX+KxfSqYRgWLViPBVKnctplOq9+DQAj5ohXF56BQagiJlTPvIRBLIZQZc2NJMmliw6B6eQ8KT1+97fPHop4PUiiSbhwEAET+OYlXbtF6FBRVfQAAJrXbg2nViD3xG3RpiZBYlUOZrrMgNrPl4jWxEZCmJnDP0xPf4M0/C6FNTYBIroTU3gM2vX7msnp15JOMiXoAhK0byNt22cHrYaC0LvydJYSQbBTV52C+t387CCJjS8jKVf+EvdAPSj5IoXCasD9fccp6nXnXt3/IfsjvvOdW7SfkWp/MsVq+t00IIUWpqD4HP2TTY1625WaN++T7ipjPjU67EEIIIUSvKPkghBBCiF5R8kEIIYQQvaLkgxBCCCF6RckHIYQQQvSKkg9CCCGE6BUlH4QQQgjRK5rngxBSKsRf2IGURxegiXkFgYEE0rLuMGscALGFPRfD0tWIObEeKQ/OgGk1kJerAfOWQyAyMsu1bs2bl4g9HYi0F3cBpoXYwhFWHSfBwKQMAODt4RVIe34T2qQYCMSyjG03CYDYwqFI95mQkoqSD0JIqZD28i6Ma7SBxKYiwLSIO70JkTumwq7/agglMgBAzPFfkRpyFZYdJkIoNUJM0GpE754Dm28X5livJjYcEX+Mh6JaC5g26AmBxBCaNy8gEL27h5DExgVGlZvAwMQK2tRExP+7FZHbf0TZwb9lufcGIYROuxBCSgnrLjOhqOoDiZUTJGXKw6LNaGgToqGOfAIA0KmSkXQ7CGbN+kPu5AmpjQssW4+C6vUDqF4/zLHeuDObIK9QC2ZN+0FiXQFiM1sYVqwLkZEpF2Ps5QeZQxUYKK0htXGBacNe0CZGIz0+qqh3m5ASqcDJx5kzZ9C2bVvY2dlBIBBgz549vOWMMfz444+wtbWFXC6Hj48PHj9+XFjtJYSQfNGpkgEAQpkCAKCKeALo0iF39uJixBYOEJlYQRWWffLBmA6pT6/CwMwOkdun4uXyngjfNAYpjy7kvF11GpLuHIOB0pp3O3VCyDsFTj6Sk5Ph6emJlStXZrt8wYIFWLZsGdasWYNLly7ByMgIvr6+SEtL++TGEkJIfjCmQ+zxXyEt68Hd+VOXHAuIDLhkJJPIyBTa5Nhs69Elx4OpU5Fw6S/Iy9eEdZdZMKzkjejdc5D24g4vNvH6AbxY3Akvl3RC6tNrKNP1JwhE4iLZP0JKugKP+WjVqhVatWqV7TLGGJYuXYopU6agffv2AIBNmzbB2toae/bsQbdu3T6ttYQQkg8xR1dDHf0cNj0XfFI9jOkAAHKXejCp3QEAILEuD9XrB0i8eQgyx6pcrFHlJpA5e0GbHIuEy7vwZu882Hy7EAIDSXZVE/JFK9QxH6GhoYiIiICPjw9XplQqUbduXVy4kH03pUqlQkJCAu9BCCEfKyZoNVJDrsC6+xzeaQ+hkRmgTYcuLYkXr02Oy/FqF5GhCSAUQWzJv2pFbOEAbUI0r0woNYLYvCxkDlVg1WESNDGvcj09Q8iXrFCTj4iICACAtbU1r9za2ppb9qG5c+dCqVRyDwcHujSNEFJwjDHEBK1GyqMLsO42G2JTG95yqY0LIDRA6vNbXJnm7StoE6IhtXPLtk6BSAypTUWkx7zmlWtiXkP032W22Tcm48G0mo/eH0JKs89+tcukSZMQHx/PPV6+fPm5m0QIKYFiglYj6d4pWLYdB6HEENqkWGiTYqHTqABk9EwoqrVA7InfkPb8NlQRT/D24FJI7dwgLfsu+Xj962CkPDrPPTep+w2SH5xF4s3D0MSGIeHaP0h9chnGNVoDADRxEYi/sAOqiCdIT4hC2qsHiN47FwIDCeTla+n3IBBSQhTqPB82Nhm/NCIjI2Fra8uVR0ZGwsvLK9t1pFIppFJpYTaDEPIFSrpxEAAQ+eckXrlF61FQVM04FWzefCBiBEJE75kDptVAVq4GLFp8x4tPj3kFnSqFe25YqT4sfL9D/MWdiD2+DgbmZWHVcTJk9pUBZPSOpL26h4Sr+6BLS4LIyBRSh8qw+XYh73JcQsg7hZp8lCtXDjY2Njh+/DiXbCQkJODSpUsYMmRIYW6KEEJ4nCbszzNGYCCBRcshsGiZ8+dRdvUoqrWEolrLbOMNjC1g3XlG/htajKW9vIuES39DHRkCbVIMrDr+AMNK3tzy5/O/znY90yZ9oazrn2f98Rd3Iu70RhjXbAdzn0FZljPGELVzOtJCr2XZNildCpx8JCUl4cmTJ9zz0NBQ3Lx5E+bm5nB0dMSoUaPw008/oWLFiihXrhymTp0KOzs7dOjQoTDbTUipUxQf/HnVybTpiDu7GakhV5EeHwGh1AgyJ0+YNg6AgbFF4e4gKfaYOg3iMuWhqNYC0bvnZFluP3Qz73nq06t4e2gZDF2/yrNuVfgjJN48DPF/lz5nJ/HqXkBQ4GaTEqjAycfVq1fRtGlT7vmYMWMAAH369MGGDRswfvx4JCcnY9CgQYiLi0ODBg1w+PBhyGSywms1IaVQUXzw51UnS1dBHRECZf1ukJQpB11aEmKOr0P0rlmw7bP0k/eJlCzyCrUgr5DzOBWRgn9VUMqTS5A5Vc0yuPdDOnUq3vyzCBZ+wxF/flu2MerIp0i4vBu2fZbi1cpeBW88KVEKnHw0adIEjLEclwsEAsycORMzZ878pIYR8qUpig/+vOoUSo1g3e0nXpl5i8GI2DQG6QlR3I3TCPmQNjkWqSFXYNlmdJ6xMUGrIa9QG3Jnr2yTD50mDW/+WZhxkz9F7jf5I6XDZ7/ahRBScJkf/DmNQ/gUGYMtBRBKFXnGki9X0t3jEErkMKxUP9e45PunoY4IgVnjPjnGxB7/DdKy7jCsWK+wm0mKKUo+CCmB8vvBX1AsXY24U4Ew9GgEodSwUOsmpUvS7WMw8miS6wyu6QnRiDn+Kyzbjs0xLuXxJaS9uAWz5gOLqqmkGCrUq10IIfqRnw/+gmLadETvnQcAsGg5tNDqJaVP2su7SI95BUX78bnGqSOeQJcSh/ANI98VMh1UL+8h8fp+OI7djbTnt5AeG4GXS7vy1o3eMxdSew/Y9JhXFLtAPjNKPggpYfL7wV8QmYlHenwUrLvPoV4Pkquk20GQ2LhAUqZ8rnEyJ0/Y9lvBK3t78BeILexhUtcfAqEIynqdofDknz4M/30YzJoNgNylTqG3nRQPlHwQUsLk94M/v7jEIzYM1t3nQiQ3KZR6ScmjU6ciPTace54eHwl15FMI5Qpu8LFOlYKU4HMwa9o/2zoit02GvKI3TGq2hVBqyN1VOJNALIVQZsyVixRm2Q4yNTCxyvMqGlJyUfJBSDFR2B/8+amTadMRvWcu1JEhKNPpR0CngzYp4/byQrmCbgn/hVFHPEbkn5O557EnfgMAGFVpzl3VkvzgDMAAI4/G2dahiY2ANJVuEEpyR8kHIcVEUXzw51WnNuktUp9cAgCEB47g1WXdfQ5kjtUKYc9ISSFzrJbnTLHGXn4w9vLLcbn9kN9zXT8/YzjyM1stKdko+SCkmCiKD/686jRQWtMHPSFE7+hSW0IIIYToFSUfhBBCCNErSj4IIYQQoleUfBBCCCFEryj5IIQQQoheUfJBCCGEEL2i5IMQQgghekXJByGEEEL0ipIPQgghhOgVJR+EEEII0StKPgghhBCiV5R8EEIIIUSvKPkghBBCiF5R8kEIIYQQvaLkgxBCCCF6RckHIYQQQvSKkg9CCCGE6BUlH4QQQgjRK0o+CCGEEKJXlHwQQgghRK8o+SCEEEKIXlHyQQghhBC9ouSDEEIIIXpFyQchhBBC9IqSD0IIIYToFSUfhBBCCNErSj4IIYQQoleUfBBCCCFEryj5IIQQQoheUfJBCCGEEL2i5IMQQgghekXJByGEEEL0ipIPQgghhOgVJR+EEEII0StKPgghhBCiV5R8EEIIIUSvKPkghBBCiF5R8kEIIYQQvaLkgxBCCCF6RckHIYQQQvTq/+3deVBURx4H8O+A4jAMI4cGDHKsKyEgsMghHlHIsTvoxiJRAwqEQ1aJFxqvKXcVBBIFoyZepZtNBRBZQeKCriaisg7B0SCiQ0xAIC5uTEIwUVEBRWB6/7B85RMdZphDML9P1aui3+vu16+nX09PvwMafBBCCCHEqGjwQQghhBCjMtjgY8eOHXBxcYFQKERgYCDOnDljqF0RQgghpB8xyOAjPz8fS5cuRXJyMs6dO4c//OEPkEqluHr1qiF2RwghhJB+xCCDj82bN2POnDmIi4uDh4cHdu3aBZFIhE8//dQQuyOEEEJIPzJA3xneu3cPlZWVWLVqFbfOxMQEr732Gk6fPt0tfnt7O9rb27nwzZs3AQC3bt3Sd9EAAKr2NoPkayyGqhdN9ff6A6gOdUX1pzuqQ91Q/enOEHX4IE/GWM+RmZ79+OOPDAA7deoUb/2KFSvYmDFjusVPTk5mAGihhRZaaKGFlmdguXLlSo9jBb3PfGhr1apVWLp0KRdWqVS4fv06bG1tIRAInmLJtHfr1i04OjriypUrkEgkT7s4/RLVoW6o/nRHdagbqj/d9dc6ZIzh9u3beP7553uMq/fBx5AhQ2Bqaoqmpibe+qamJtjb23eLP2jQIAwaNIi3zsrKSt/FMiqJRNKvGkxfRHWoG6o/3VEd6obqT3f9sQ4HDx6sUTy933BqZmYGPz8/lJSUcOtUKhVKSkowbtw4fe+OEEIIIf2MQS67LF26FDExMfD398eYMWPw0UcfobW1FXFxcYbYHSGEEEL6EYMMPsLDw/HLL78gKSkJP//8M3x8fHDkyBHY2dkZYnd9xqBBg5CcnNztMhLRHNWhbqj+dEd1qBuqP939FupQwJgmz8QQQgghhOgH/W8XQgghhBgVDT4IIYQQYlQ0+CCEEEKIUdHggxBCCCFGRYMPHbm4uOCjjz7Sa56xsbF444039Jrns0wul0MgEKC5uVmv+QoEAhQVFek1T2I82pybWVlZ/f7lhk+DIfq/Z52udfas9Eu/+cGHQCBQu6xdu1Zt+oqKCsydO1evZdqyZQuysrL0mueTxMbGQiAQID09nbe+qKjIaK+3z8rK6vFzuHz58hPTjx8/Ho2NjRq/WU9TjY2NmDx5sk556Nq+fsv64rn5rKE65nvcD7/PPvsMQqEQmzZtejqFeoQ++qW+4Kn/b5enrbGxkfs7Pz8fSUlJqK2t5daJxWK16YcOHar3Mun7S7QnQqEQGRkZSEhIgLW1tVH3Ddx/L0xISAgXnjZtGjw9PZGamsqtU1fPZmZmj311v670kaeu7eu3rC+em88aqmP1PvnkEyxYsAC7du3qMy/JNERf9zT85mc+7O3tuWXw4MEQCARcuLW1FZGRkbCzs4NYLEZAQACOHz/OS//oFJpAIMDOnTsxefJkmJubY8SIEfjss894aa5cuYKwsDBYWVnBxsYGoaGhvF/2xr7s8tprr8He3h7r169XG+/kyZOYOHEizM3N4ejoiMTERLS2tgIAtm/fDk9PTy7ug5mTXbt28fazevXqbvmam5vzPgczMzOIRCIufOzYMQQGBsLS0hL29vaIiIjA1atXufSPXnZ5MIVeVFQEV1dXCIVCSKVSXLlyhbffAwcOwNfXF0KhECNGjEBKSgo6Ozu57fqY3tS1fd24cQPR0dGwtraGSCTC5MmTUV9fDwBobW2FRCLp1r6KiopgYWGB27dvP/aSlFKp5M0mXbt2DbNmzYKDgwNEIhG8vLywd+9eXp7BwcFITEzEypUrYWNjA3t7e4PP2uj73GxubkZCQgLs7OwgFArh6emJQ4cO8dIUFxfD3d0dYrEYISEhvC/n4OBgLFmyhBf/jTfeQGxsLG+f69atw+zZs2FpaQknJyd8/PHHvDSnTp2Cj48PhEIh/P39uXNFqVTqVF+9YYj+75NPPsGbb74JkUgEV1dXHDx4kNve1dWF+Ph4/O53v4O5uTnc3NywZcsWXp4P+r+NGzdi2LBhsLW1xYIFC9DR0WHQunjUhg0bsGjRIuTl5XEDj82bN8PLywsWFhZwdHTE/Pnz0dLSwku3f/9+jBo1CoMGDYKLi8tjZ0za2tqe2Ebu3buHhQsXYtiwYRAKhXB2dub1zQ/3S5qc3w/6Q3Vtu7OzE4mJibCysoKtrS1kMhliYmIM+j30mx98qNPS0oIpU6agpKQE58+fR0hICKZOnYrvv/9ebbo1a9Zg+vTpqKqqQmRkJGbOnImamhoAQEdHB6RSKSwtLVFWVgaFQsE1hnv37hnjsLoxNTXFunXrsG3bNvzwww+PjXPp0iWEhIRg+vTp+Prrr5Gfn4+TJ09i4cKFAICgoCBUV1fjl19+AQCUlpZiyJAhkMvlAO4f9+nTpxEcHKx1+To6OpCWloaqqioUFRXh8uXLvA7/cdra2vD+++9j9+7dUCgUaG5uxsyZM7ntZWVliI6OxuLFi1FdXY2///3vyMrKwvvvv691+XpLk/YVGxuLs2fP4uDBgzh9+jQYY5gyZQo6OjpgYWGBmTNnIjMzk5dvZmYmZsyYAUtLS43KcffuXfj5+eHw4cP45ptvMHfuXLz99ts4c+YML152djYsLCxQXl6ODRs2IDU1FceOHdO9InpB23NTpVJh8uTJUCgU2LNnD6qrq5Geng5TU1MuTltbGzZu3IicnBx8+eWX+P7777F8+XKty7Zp0yb4+/vj/PnzmD9/PubNm8fNJty6dQtTp06Fl5cXzp07h7S0NMhkst5VgoH1tv9LSUlBWFgYvv76a0yZMgWRkZG4fv06gPufw/Dhw1FQUIDq6mokJSXhr3/9K/bt28fL48SJE7h06RJOnDiB7OxsZGVlGe1SNADIZDKkpaXh0KFDePPNN7n1JiYm2Lp1K7799ltkZ2fjP//5D1auXMltr6ysRFhYGGbOnIkLFy5g7dq1WLNmTbeyq2sjW7duxcGDB7Fv3z7U1tYiNzcXLi4uOh1PT207IyMDubm5yMzMhEKhwK1btwx/XwkjnMzMTDZ48GC1cUaNGsW2bdvGhZ2dndmHH37IhQGwd955h5cmMDCQzZs3jzHGWE5ODnNzc2MqlYrb3t7ezszNzVlxcTFjjLGYmBgWGhqq28Fo6OF9jR07ls2ePZsxxlhhYSF7uHnEx8ezuXPn8tKWlZUxExMTdufOHaZSqZitrS0rKChgjDHm4+PD1q9fz+zt7RljjJ08eZINHDiQtba29limoKAgtnjx4idur6ioYADY7du3GWOMnThxggFgN27cYIzd/xwBsK+++opLU1NTwwCw8vJyxhhjr776Klu3bh0v35ycHDZs2DAuDIAVFhb2WF5Nadu+6urqGACmUCi47b/++iszNzdn+/btY4wxVl5ezkxNTdlPP/3EGGOsqamJDRgwgMnlcsZY97phjLHz588zAKyhoeGJ5fjzn//Mli1bxoWDgoLYSy+9xIsTEBDAZDJZj8etD7qem8XFxczExITV1tY+MX8A7LvvvuPW7dixg9nZ2XHhx7XL0NBQFhMTw9tnVFQUF1apVOy5555jO3fuZIwxtnPnTmZra8vu3LnDxfnHP/7BALDz58+rPT5D01f/t3r1ai7c0tLCALAvvvjiiXkuWLCATZ8+nQvHxMQwZ2dn1tnZya176623WHh4uBZH0zsxMTHMzMyMAWAlJSU9xi8oKGC2trZcOCIigv3xj3/kxVmxYgXz8PDgwj21kUWLFrFXXnmF9x3xsIf7JU3Ob03atp2dHfvggw+4cGdnJ3NycjLo9xDNfKjR0tKC5cuXw93dHVZWVhCLxaipqelx5P/of+8dN24cN/NRVVWF7777DpaWlhCLxRCLxbCxscHdu3dx6dIlgx2LJjIyMpCdnc2V9WFVVVXIysriyiwWiyGVSqFSqdDQ0ACBQIBJkyZBLpejubkZ1dXVmD9/Ptrb23Hx4kWUlpYiICAAIpFI63JVVlZi6tSpcHJygqWlJYKCggBA7ecwYMAABAQEcOEXX3wRVlZWvM8hNTWVdzxz5sxBY2Mj2tratC5jb/TUvmpqajBgwAAEBgZyaWxtbeHm5sYdx5gxYzBq1ChkZ2cDAPbs2QNnZ2dMmjRJ43J0dXUhLS0NXl5esLGxgVgsRnFxcbf69fb25oWHDRvGu/xlTNqem0qlEsOHD8cLL7zwxDxFIhF+//vfc+HeHt/D9fTgMsaDfGpra+Ht7Q2hUMjFGTNmjNb7MIbe9n8PH7+FhQUkEgmvHnfs2AE/Pz8MHToUYrEYH3/8cbc8R40axZuVMmZb8/b2houLC5KTk7tdUjl+/DheffVVODg4wNLSEm+//TauXbvG9Rk1NTWYMGECL82ECRNQX1+Prq4u3j4eeLSNxMbGQqlUws3NDYmJiTh69KjOx6Subd+8eRNNTU28dmhqago/Pz+d96sODT7UWL58OQoLC7Fu3TqUlZVBqVTCy8tLp8sjLS0t8PPzg1Kp5C11dXWIiIjQY+m1N2nSJEilUqxatarbtpaWFiQkJPDKXFVVhfr6eq5RBwcHQy6Xo6ysDKNHj4ZEIuEGJKWlpdygQRutra2QSqWQSCTIzc1FRUUFCgsLAUDnzyElJYV3PBcuXEB9fT3vi8GQ9NW+/vKXv3DTupmZmYiLi+OeVDIxuX+Ks4f+hdOj184/+OADbNmyBTKZDCdOnIBSqYRUKu1WjoEDB/LCAoEAKpVKq7Lqi7Z1Z25u3mOejzu+h+vNxMSEFwa61+WT8nla9aSL3rZPdcefl5eH5cuXIz4+HkePHoVSqURcXFyfamsODg6Qy+X48ccfERISgtu3bwMALl++jNdffx3e3t7Yv38/KisrsWPHDgDa90Xqjs/X1xcNDQ1IS0vDnTt3EBYWhhkzZjw2H03O7yft79G2bGy/+add1FEoFIiNjeWu+bW0tKh95POBr776CtHR0bzw6NGjAdxvWPn5+XjuuecgkUgMUm5dpKenw8fHB25ubrz1vr6+qK6uxsiRI5+YNigoCEuWLEFBQQF3b0dwcDCOHz8OhUKBZcuWaV2eixcv4tq1a0hPT4ejoyMA4OzZsz2m6+zsxNmzZ7nRfG1tLZqbm+Hu7s4dT21trdrjMbSe2pe7uzs6OztRXl6O8ePHA7h/c2htbS08PDy4eFFRUVi5ciW2bt2K6upqxMTEcNsePI3Q2NjIPcn06I2NCoUCoaGhiIqKAnD/unxdXR1vH32Ntuemt7c3fvjhB9TV1amd/VBn6NChvJv0urq68M033+Dll1/WOA83Nzfs2bMH7e3t3H8sraio6FV5DK23/V9PeY4fPx7z58/n1j3tGd/HcXZ2RmlpKV5++WWEhITgyJEjqKyshEqlwqZNm7gv/UfvVXF3d4dCoeCtUygUeOGFF3gzOT2RSCQIDw9HeHg4ZsyYgZCQEFy/fh02Nja8eJqc3z0ZPHgw7OzsUFFRwc2YdnV14dy5c/Dx8dEqL23QzIcarq6u+Ne//sX9yo+IiNBo9F1QUIBPP/0UdXV1SE5OxpkzZ7gbMyMjIzFkyBCEhoairKwMDQ0NkMvlSExMfOLNnsbk5eWFyMhIbN26lbdeJpPh1KlTWLhwIZRKJerr63HgwAHuuID7Hby1tTX++c9/8gYfRUVFaG9v7zYdqQknJyeYmZlh27Zt+O9//4uDBw8iLS2tx3QDBw7EokWLUF5ejsrKSsTGxmLs2LHcYCQpKQm7d+9GSkoKvv32W9TU1CAvL++xT+MYSk/ty9XVFaGhoZgzZw5OnjyJqqoqREVFwcHBAaGhoVw8a2trTJs2DStWrMCf/vQnDB8+nNs2cuRIODo6Yu3ataivr8fhw4e73X3v6uqKY8eO4dSpU6ipqUFCQgKampoMXwE60PbcDAoKwqRJkzB9+nQcO3YMDQ0N+OKLL3DkyBGN9/nKK6/g8OHDOHz4MC5evIh58+Zp/WK7B+WcO3cuampqUFxcjI0bNwKA0d6ro6ne9n895Xn27FkUFxejrq4Oa9as6bODL0dHR8jlcly9ehVSqRQjR45ER0cH1xfl5OTwnuYDgGXLlqGkpARpaWmoq6tDdnY2tm/frtWNy5s3b8bevXtx8eJF1NXVoaCgAPb29o99CZ4m57cmFi1ahPXr1+PAgQOora3F4sWLcePGDYO2SRp8qLF582ZYW1tj/PjxmDp1KqRSKXx9fXtMl5KSgry8PHh7e2P37t3Yu3cv9ytSJBLhyy+/hJOTE6ZNmwZ3d3fEx8fj7t27fWYmJDU1tVsn4+3tjdLSUtTV1WHixIkYPXo0kpKS8Pzzz3NxBAIBJk6cCIFAgJdeeolLJ5FI4O/vDwsLC63LMnToUGRlZaGgoAAeHh5IT0/nOmt1RCIRZDIZIiIiMGHCBIjFYuTn53PbpVIpDh06hKNHjyIgIABjx47Fhx9+CGdnZ63L2FuatK/MzEz4+fnh9ddfx7hx48AYw+eff95tGjU+Ph737t3D7NmzeesHDhzIdWTe3t7IyMjAe++9x4uzevVq+Pr6QiqVIjg4GPb29n3+Dbu9OTf379+PgIAAzJo1Cx4eHli5ciXvOnxPZs+ejZiYGERHRyMoKAgjRozQatYDuP+L9t///jeUSiV8fHzwt7/9DUlJSQBgtMt9mupt/6dOQkICpk2bhvDwcAQGBuLatWu8WZC+Zvjw4ZDL5fj111/xzjvvYO3atcjIyICnpydyc3O7vZ7A19cX+/btQ15eHjw9PZGUlITU1NQen857mKWlJTZs2AB/f38EBATg8uXL+Pzzz7nZlodpcn5rQiaTYdasWYiOjsa4ceO4e/oM2SYF7Glf+HnGCAQCFBYW9vnO+1mWlZWFJUuW6P11631ZTk4O3n33Xfz0008wMzN72sUhWsjNzUVcXBxu3ryp0b0phBiaSqWCu7s7wsLCNJpp7g2654OQfqytrQ2NjY1IT09HQkICDTz6gd27d2PEiBFwcHBAVVUVZDIZwsLCaOBBnpr//e9/OHr0KIKCgtDe3o7t27ejoaHBoA9B0GUXQvqxDRs24MUXX4S9vf1jn1Iifc/PP/+MqKgouLu7491338Vbb73V7S2ohBiTiYkJsrKyEBAQgAkTJuDChQs4fvw4d4O+IdBlF0IIIYQYFc18EEIIIcSoaPBBCCGEEKOiwQchhBBCjIoGH4QQQggxKhp8EEIIIcSoaPBBCCGEEKOiwQchhBBCjIoGH4QQQggxqv8DJH71/xUQvgYAAAAASUVORK5CYII=" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 1 } ], "metadata": { From 35855e7e8b8dff7958c5a68635c7feb1edf9b54b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:33:32 +0800 Subject: [PATCH 1865/2002] Committed on or around 2025/03/20 --- .../Composition/2015-6.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-6.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-6.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-6.py new file mode 100644 index 00000000..c71001b3 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-6.py @@ -0,0 +1,55 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') +allotted_money = { + 'Statutory': [34.95, 26.52, 17.12, 20.63, 17.44, 26.47], #[1]:18 + 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25 +} + +sum = [allotted_money['Statutory'][0] + allotted_money["Federal discretionary subsidy"][0], + allotted_money["Statutory"][1] + allotted_money["Federal discretionary subsidy"][1], + allotted_money["Statutory"][2] + allotted_money["Federal discretionary subsidy"][2], + allotted_money["Statutory"][3] + allotted_money["Federal discretionary subsidy"][3], + allotted_money["Statutory"][4] + allotted_money["Federal discretionary subsidy"][4], + allotted_money["Statutory"][5] + allotted_money["Federal discretionary subsidy"][5] + ] + +fig, ax = plt.subplots() +bottom = np.zeros(6) + +p = 0 + +for sex, sex_count in allotted_money.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) #[Note1] + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=[f'簣{e:.2f}' for e in sum], label_type="edge") + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title("2015's composition of local government's income") +ax.legend() + +plt.show() + +# References: +# 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf +# 2. + +# Notes: +# 1. when having duplicate values in categorical x data, +# these values map to the same numerical x coordinate, and hence the corresponding bars +# are drawn on top of each other. [2] From 798e7a02a43254f99b6e999448ce9cd82e92ec3d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:34:11 +0800 Subject: [PATCH 1866/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-6.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-6.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-6.py index c71001b3..0c57a267 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-6.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-6.py @@ -47,7 +47,7 @@ # References: # 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf -# 2. +# 2. https://matplotlib.org/3.8.4/api/_as_gen/matplotlib.axes.Axes.bar_label.html # Notes: # 1. when having duplicate values in categorical x data, From 0d13838d9b32eb2e57e5c13b10fd373c6a43d932 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:35:17 +0800 Subject: [PATCH 1867/2002] Committed on or around 2025/03/20 --- .../Composition/2015-7.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-7.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-7.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-7.py new file mode 100644 index 00000000..a597cd40 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-7.py @@ -0,0 +1,56 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') +allotted_money = { + 'Statutory': [34.95, 26.52, 17.12, 20.63, 17.44, 26.47], #[1]:18 + 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25 +} + +sum = [allotted_money['Statutory'][0] + allotted_money["Federal discretionary subsidy"][0], + allotted_money["Statutory"][1] + allotted_money["Federal discretionary subsidy"][1], + allotted_money["Statutory"][2] + allotted_money["Federal discretionary subsidy"][2], + allotted_money["Statutory"][3] + allotted_money["Federal discretionary subsidy"][3], + allotted_money["Statutory"][4] + allotted_money["Federal discretionary subsidy"][4], + allotted_money["Statutory"][5] + allotted_money["Federal discretionary subsidy"][5] + ] + +fig, ax = plt.subplots() +bottom = np.zeros(6) + +p = 0 + +for sex, sex_count in allotted_money.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) #[Note1] + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=[f'{e:.2f}' for e in sum], label_type="edge") #[3] + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title("2015's composition of local government's income") +ax.legend() + +plt.show() + +# References: +# 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf +# 2. https://matplotlib.org/3.8.4/api/_as_gen/matplotlib.axes.Axes.bar_label.html +# 3. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html + +# Notes: +# 1. when having duplicate values in categorical x data, +# these values map to the same numerical x coordinate, and hence the corresponding bars +# are drawn on top of each other. [2] From 3d7f613d0b62d62747a3889b1a90745a688b509f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:37:50 +0800 Subject: [PATCH 1868/2002] Committed on or around 2025/03/20 --- .../Composition/2015-8.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py new file mode 100644 index 00000000..4bc1a2ba --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py @@ -0,0 +1,56 @@ +import matplotlib.pyplot as plt +import numpy as np + +species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') +allotted_money = { + 'Statutory': [34.95, 26.52, 17.12, 20.63, 17.44, 26.47], #[1]:18 + 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25 +} + +sum = [allotted_money['Statutory'][0] + allotted_money["Federal discretionary subsidy"][0], + allotted_money["Statutory"][1] + allotted_money["Federal discretionary subsidy"][1], + allotted_money["Statutory"][2] + allotted_money["Federal discretionary subsidy"][2], + allotted_money["Statutory"][3] + allotted_money["Federal discretionary subsidy"][3], + allotted_money["Statutory"][4] + allotted_money["Federal discretionary subsidy"][4], + allotted_money["Statutory"][5] + allotted_money["Federal discretionary subsidy"][5] + ] + +fig, ax = plt.subplots() +bottom = np.zeros(6) + +p = 0 + +for sex, sex_count in allotted_money.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) #[Note1] + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=[f'{s:.2f}' for s in sum], label_type="edge") #[3] + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title("2015's composition of local government's income") +ax.legend() + +plt.show() + +# References: +# 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf +# 2. https://matplotlib.org/3.8.4/api/_as_gen/matplotlib.axes.Axes.bar_label.html +# 3. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html + +# Notes: +# 1. when having duplicate values in categorical x data, +# these values map to the same numerical x coordinate, and hence the corresponding bars +# are drawn on top of each other. [2] From 68338fb56a9311909a9b6258873189b75c0b56fd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:39:44 +0800 Subject: [PATCH 1869/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-8.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py index 4bc1a2ba..3226fad8 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py @@ -15,7 +15,7 @@ allotted_money["Statutory"][5] + allotted_money["Federal discretionary subsidy"][5] ] -fig, ax = plt.subplots() +fig, ax = plt.subplots(figsize=(7, 9)) bottom = np.zeros(6) p = 0 From 4918c59db6b3adb6dcfe3bb53ba6aa4db65a409b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:42:00 +0800 Subject: [PATCH 1870/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-8.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py index 3226fad8..b6fc8c06 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py @@ -15,7 +15,7 @@ allotted_money["Statutory"][5] + allotted_money["Federal discretionary subsidy"][5] ] -fig, ax = plt.subplots(figsize=(7, 9)) +fig, ax = plt.subplots(figsize=(6, 9)) bottom = np.zeros(6) p = 0 From 9c2b215ae8e359109320127b34e69353d5333ebe Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:48:02 +0800 Subject: [PATCH 1871/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-8.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py index b6fc8c06..4c487319 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-8.py @@ -40,7 +40,7 @@ # ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, # '%d' % int(height), ha='center', va='bottom', fontsize=12) -ax.set_title("2015's composition of local government's income") +ax.set_title("2015's composition of local government's income \n (Unit: billion)") ax.legend() plt.show() From 31cd0a45baa42171b331e944423c935e289d2e25 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:52:17 +0800 Subject: [PATCH 1872/2002] Committed on or around 2025/03/20 --- .../Composition/2015-9.py | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py new file mode 100644 index 00000000..2a6cfde5 --- /dev/null +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py @@ -0,0 +1,59 @@ +import matplotlib.pyplot as plt +import numpy as np +import matplotlib + +matplotlib.rc('font', family="MS Gothic") + +species = ('Taipei', 'New Taipei', "Taoyuan", 'Taichung', "Tainan", 'Kaohsiung') +allotted_money = { + 'Statutory': [34.95, 26.52, 17.12, 20.63, 17.44, 26.47], #[1]:18 + 'Federal discretionary subsidy': [17.12, 31.11, 15.21, 24.88, 22.85, 27.83], #[1]:25 +} + +sum = [allotted_money['Statutory'][0] + allotted_money["Federal discretionary subsidy"][0], + allotted_money["Statutory"][1] + allotted_money["Federal discretionary subsidy"][1], + allotted_money["Statutory"][2] + allotted_money["Federal discretionary subsidy"][2], + allotted_money["Statutory"][3] + allotted_money["Federal discretionary subsidy"][3], + allotted_money["Statutory"][4] + allotted_money["Federal discretionary subsidy"][4], + allotted_money["Statutory"][5] + allotted_money["Federal discretionary subsidy"][5] + ] + +fig, ax = plt.subplots(figsize=(6, 9)) +bottom = np.zeros(6) + +p = 0 + +for sex, sex_count in allotted_money.items(): + p = ax.bar(species, sex_count, width=0.6, label=sex, bottom=bottom) #[Note1] + bottom += sex_count + + ax.bar_label(p, label_type='center') + + # for rect in p: + # height = rect.get_height() + # ax.text(rect.get_x() + rect.get_width() / 2., 2.001 * height, + # '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.bar_label(p, labels=[f'{s:.2f}' for s in sum], label_type="edge") #[3] + +# plot = ax.bar(region_num, position_vacancies, width=0.6) +# +# for rect in plot: +# height = rect.get_height() +# ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, +# '%d' % int(height), ha='center', va='bottom', fontsize=12) + +ax.set_title("2015's composition of local government's income \n (Unit: billion)") +ax.legend() + +plt.show() + +# References: +# 1. https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf +# 2. https://matplotlib.org/3.8.4/api/_as_gen/matplotlib.axes.Axes.bar_label.html +# 3. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html + +# Notes: +# 1. when having duplicate values in categorical x data, +# these values map to the same numerical x coordinate, and hence the corresponding bars +# are drawn on top of each other. [2] From 40ee20eeb9265f95cbb6eac2ca83d4be5cacf4dd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:53:10 +0800 Subject: [PATCH 1873/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-9.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py index 2a6cfde5..251f5781 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py @@ -46,6 +46,8 @@ ax.set_title("2015's composition of local government's income \n (Unit: billion)") ax.legend() +plt.xlabel("鞈 Reference https://archive.ph/oHkAG") + plt.show() # References: From 723b4afaa3f15496a8962cce4ee65e2650ac8c0a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 20 Mar 2025 18:55:53 +0800 Subject: [PATCH 1874/2002] Committed on or around 2025/03/20 --- .../Annual local government expenditure/Composition/2015-9.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py index 251f5781..ceb6b56e 100644 --- a/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py +++ b/The attainments and realizations of my dreams/Annual local government expenditure/Composition/2015-9.py @@ -46,7 +46,7 @@ ax.set_title("2015's composition of local government's income \n (Unit: billion)") ax.legend() -plt.xlabel("鞈 Reference https://archive.ph/oHkAG") +plt.xlabel("鞈 Reference https://ws.dgbas.gov.tw/public/attachment/5611134736t64w6mty.pdf") plt.show() From 5a308c654329bd5f1b45e5949be13aa9bcfdbd5c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:17:03 +0800 Subject: [PATCH 1875/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index de1412ef..920b79af 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+128075+78000+4404, 48672+33781+6576, 61256+10843+3623, 4751+7051+27705, 39792+4811] +position_vacancies = [2633+128075+78000+4404, 53560+33781+7092, 61256+10843+3623, 4751+7051+27705, 39792+4811] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From a961ba6ad88201ee6d74a4e4861f7ab5ce734167 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:18:07 +0800 Subject: [PATCH 1876/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index 920b79af..c5794fbd 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+128075+78000+4404, 53560+33781+7092, 61256+10843+3623, 4751+7051+27705, 39792+4811] +position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 61256+10843+3623, 4751+7051+27705, 39792+4811] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From fce29572945ddece62cc1f10d34deaa0dd04d0d7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:19:06 +0800 Subject: [PATCH 1877/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index c5794fbd..d757e3cd 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 61256+10843+3623, 4751+7051+27705, 39792+4811] +position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 67473+12257+3859, 4751+7051+27705, 39792+4811] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From edff6593c40d4646688f1c1bf5d97df50173a11f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:20:28 +0800 Subject: [PATCH 1878/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index d757e3cd..bb8be304 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 67473+12257+3859, 4751+7051+27705, 39792+4811] +position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 39792+4811] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 1720d1671bb1bc4bf43d4200002b046f16be182a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:21:29 +0800 Subject: [PATCH 1879/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index bb8be304..4be09f3f 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 39792+4811] +position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 7a5248f1bd9b2fe433e10d037d5498ee8c534be8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:23:12 +0800 Subject: [PATCH 1880/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index 4be09f3f..d130f9e5 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/ApRE7") -plt.ylim(40000, 190000) +plt.ylim(40000, 200000) img = image.imread('CC0.png') # CC0.png downloaded from [7]. From 93fbdb0b62ffa3a6d9f33e68937c9155fc75c814 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:31:54 +0800 Subject: [PATCH 1881/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index d130f9e5..7925bac8 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/ApRE7") -plt.ylim(40000, 200000) +plt.ylim(43000, 200000) img = image.imread('CC0.png') # CC0.png downloaded from [7]. From f561ba9953e5fc9947898dfd50cc9843a77dfa83 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:32:36 +0800 Subject: [PATCH 1882/2002] Committed on or around 2025/03/28 --- .../Monthly_total_job_openings_by_region/2025/March/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/__init__.py new file mode 100644 index 00000000..e69de29b From a52cbb1062d6d7ec99e208baf198f03c0cea0be7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:40:01 +0800 Subject: [PATCH 1883/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index 7925bac8..7cfa9955 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -20,9 +20,9 @@ # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plt.tick_params(axis='y', labelsize=12) # [2] -plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('deepskyblue'), - colour.CSS4_COLORS.get('deepskyblue'), - colour.CSS4_COLORS.get('deepskyblue'), +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), colour.CSS4_COLORS.get('cyan'), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] From 216f9693c02da6900589a54c4ceec3e33986206e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:42:04 +0800 Subject: [PATCH 1884/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index 7cfa9955..6780475c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/ApRE7") -plt.ylim(43000, 200000) +plt.ylim(40000, 200000) img = image.imread('CC0.png') # CC0.png downloaded from [7]. From c7eec69f483241b0e95bd8bd770b993b0ac4c7b8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:48:12 +0800 Subject: [PATCH 1885/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index 6780475c..1e18c25c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -23,7 +23,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - colour.CSS4_COLORS.get('cyan'), + colour.CSS4_COLORS.get('darkcyan'), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From 2582beb31d9062940c8dd164a51d07944edeb62e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:49:22 +0800 Subject: [PATCH 1886/2002] Committed on or around 2025/03/28 --- .../2025/February/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py index 1e18c25c..2105c9a4 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/February/At metro level color.py @@ -23,7 +23,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - colour.CSS4_COLORS.get('darkcyan'), + colour.CSS4_COLORS.get('darkturquoise'), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From a03e2634e37270ea0981d2791f353c701089b09a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 12:05:11 +0800 Subject: [PATCH 1887/2002] Committed on or around 2025/03/28 --- .../2022/October/dark_sheet_.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet_.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet_.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet_.py new file mode 100644 index 00000000..4e9a3bf6 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/dark_sheet_.py @@ -0,0 +1,70 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +plt.style.use('dark_background') # [7][8] + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='red', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://www.google.com/search?q=matplotlib+dark+theme +# 8. https://matplotlib.org/stable/gallery/style_sheets/dark_background.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 0ebc750d0ad474bb1d801c36ae97292b52929359 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 28 Mar 2025 12:06:04 +0800 Subject: [PATCH 1888/2002] Committed on or around 2025/03/28 --- .../2022/October/Dark_sheet_2_.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2_.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2_.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2_.py new file mode 100644 index 00000000..41c9832b --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2022/October/Dark_sheet_2_.py @@ -0,0 +1,70 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +plt.style.use('dark_background') # [7][8] + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [1973+109860+62930+4205, 45938+33983+6435, 57369+3550+10081, 4296+6530+27058, 36903+4374] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='green', color=[colour.CSS4_COLORS.get('pink'), + colour.CSS4_COLORS.get('sandybrown'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('olivedrab'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2022/10 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://web.archive.org/web/20221022155046/https://www.104.com.tw/jobs/main/category/?jobsource=category") + +plt.ylim(38000, 165000) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://www.google.com/search?q=matplotlib+dark+theme +# 8. https://matplotlib.org/stable/gallery/style_sheets/dark_background.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 2bbe0d3c8f4ef0267c359e5d62fde072f3888775 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 30 Mar 2025 22:40:30 +0800 Subject: [PATCH 1889/2002] Committed on or around 2025/03/30 --- .../Year_over_year_2008-2024_watermark.py | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py new file mode 100644 index 00000000..573fabf7 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py @@ -0,0 +1,128 @@ +import matplotlib.colors as colour +import matplotlib.patheffects as path_effects +import matplotlib.pyplot as plt +import pandas as pd +import matplotlib.image as image + +administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] + +year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] + +death = [[115, 261, 226, 371, 371, 398], # 2008 + [133, 254, 198, 318, 340, 402], # 2009 + [152, 255, 227, 373, 319, 388], # 2010 + [140, 264, 195, 382, 346, 373], # 2011 + [130, 252, 195, 370, 288, 417], # 2012 + [140, 223, 191, 308, 311, 375], # 2013 + [138, 219, 221, 302, 290, 387], # 2014 + [137, 212, 203, 275, 289, 364], # 2015 + [157, 266, 203, 259, 269, 329], # 2016 + [106, 256, 213, 217, 246, 289], # 2017 + [137, 248, 244, 245, 289, 280], # 2018 + [131, 225, 249, 270, 294, 351], # 2019 + [102, 232, 264, 325, 317, 347], # 2020 + [132, 266, 269, 283, 295, 333], # 2021 + ] + +df = pd.DataFrame(data=death, columns=administrative_duty, index=year) + +print(df) + +Taipei = df.loc[:, "Taipei"].to_numpy() + +print(Taipei) + +New_Taipei = df.loc[:, "New Taipei"].to_numpy() +Taoyuan = df.loc[:, "Taoyuan"].to_numpy() +Taichung = df.loc[:, "Taichung"].to_numpy() +Tainan = df.loc[:, "Tainan"].to_numpy() +Kaohsiung = df.loc[:, "Kaohsiung"].to_numpy() + +summary = [df["Taipei"].sum(), df["New Taipei"].sum(), df["Taoyuan"].sum(), df["Taichung"].sum(), + df["Tainan"].sum(), df["Kaohsiung"].sum()] + +print(summary) + +cumulative_sum = pd.DataFrame(data=summary, + columns=["Accumulative Deaths (2008-2021)"], + index=administrative_duty) + +print(cumulative_sum) + +figure, (axes1, axes2, axes3) = plt.subplots(3, figsize=(9, 9)) + +axes1.plot(year, Taipei, label="Taipei") +axes1.plot(year, New_Taipei, label="New Taipei") +axes1.plot(year, Taoyuan, label="Taoyuan") +axes1.plot(year, Taichung, label="Taichung") +axes1.plot(year, Tainan, label="Tainan") +axes1.plot(year, Kaohsiung, label="Kaohsiung") + +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_xlabel("Year") +axes1.set_ylabel("The number of deaths") + +# If a 4-tuple or BboxBase is given, then it specifies the bbox (x, y, width, height) that the legend is placed in.[6] +axes1.legend() # [5][6] + +axes1.grid(True) + +# hide axes +# axes[0, 1].patch.set_visible(False) +axes2.axis('off') +axes2.axis('tight') + +table = axes2.table(cellText=cumulative_sum.values, # matplotlib table size [3] + colLabels=cumulative_sum.columns, + colColours=[colour.CSS4_COLORS.get('springgreen')], + colWidths=[0.4, 0.4, 0.4, 0.4, 0.4, 0.4], + cellColours=['w', 'w', 'w', 'w', 'w', 'w'], + cellLoc='center', + rowLabels=cumulative_sum.index, + rowColours=[colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue'), + colour.CSS4_COLORS.get('lightskyblue')], + loc='center', + url='Reference:\nhttps://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100' + ) + +# Scale column widths by xscale and row heights by yscale.[4] +table.scale(2.01, 1.57) # [3] +table.set_fontsize(14) # [3] + +axes3.bar(administrative_duty, summary, color=colour.CSS4_COLORS.get('palegreen'), linewidth=1, ecolor=colour.CSS4_COLORS.get('dodgerblue')) # Create a bar chart and its format. [7][11][12] +axes3.bar_label(axes3.containers[0], label_type='edge', color='r', fontsize=14)# Add a bar label and its format.[9][10] +axes3.plot(administrative_duty, summary, '-o', color='orange') # Add a trend line.[8] + +# matplotlib text [1][2] +text = figure.text(0.5, 0.04, + 'Reference:https://stat.motc.gov.tw/mocdb/stmain.jsp?sys=100', + horizontalalignment='center', + verticalalignment='center', + size=13, + fontproperties='MS Gothic') + +text.set_path_effects([path_effects.Normal()]) + +img = image.imread('CC-BY.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +plt.show() + +# References: +# 1. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/patheffects_guide.html#sphx-glr-tutorials-advanced-patheffects-guide-py +# 3. https://stackoverflow.com/a/65763793/ +# 4. https://matplotlib.org/stable/api/table_api.html#matplotlib.table.Table.scale +# 5. https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html#sphx-glr-gallery-pie-and-polar-charts-pie-and-donut-labels-py +# 6. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib.axes.Axes.legend +# 7. https://matplotlib.org/stable/gallery/ticks_and_spines/custom_ticker1.html#sphx-glr-gallery-ticks-and-spines-custom-ticker1-py +# 8. https://stackoverflow.com/a/48842891 +# 9. https://stackoverflow.com/a/67561982/ +# 10. https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html +# 11. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.bar.html#matplotlib.axes.Axes.bar +# 12. https://matplotlib.org/stable/gallery/color/named_colors.html From 2e4da101e214b4c2989fefe738cebb3f61a726e4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 30 Mar 2025 22:44:32 +0800 Subject: [PATCH 1890/2002] Committed on or around 2025/03/30 --- .../Road safety/Year_over_year_2008-2024_watermark.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py index 573fabf7..7f68eecf 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py @@ -6,7 +6,7 @@ administrative_duty = ["Taipei", "New Taipei", "Taoyuan", "Taichung", "Tainan", "Kaohsiung"] -year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"] +year = ["2008", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"] death = [[115, 261, 226, 371, 371, 398], # 2008 [133, 254, 198, 318, 340, 402], # 2009 @@ -22,6 +22,9 @@ [131, 225, 249, 270, 294, 351], # 2019 [102, 232, 264, 325, 317, 347], # 2020 [132, 266, 269, 283, 295, 333], # 2021 + [107, 305, 259, 304, 306, 369], # 2022 + [109, 264, 248, 315, 296, 317], # 2023 + [119, 269, 287, 288, 278, 310], # 2024 ] df = pd.DataFrame(data=death, columns=administrative_duty, index=year) From aae8baf385845e744691a909ee10fe2f2b2abd8e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 30 Mar 2025 22:45:10 +0800 Subject: [PATCH 1891/2002] Committed on or around 2025/03/30 --- .../Road safety/Year_over_year_2008-2024_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py index 7f68eecf..1f7f872d 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py @@ -47,7 +47,7 @@ print(summary) cumulative_sum = pd.DataFrame(data=summary, - columns=["Accumulative Deaths (2008-2021)"], + columns=["Accumulative Deaths (2008-2024)"], index=administrative_duty) print(cumulative_sum) From ec9c8358301c2bdf599eefc3414d0e589789216d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 30 Mar 2025 22:48:18 +0800 Subject: [PATCH 1892/2002] Committed on or around 2025/03/30 --- .../Road safety/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/CC0.png diff --git a/The attainments and realizations of my dreams/Road safety/CC0.png b/The attainments and realizations of my dreams/Road safety/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Sun, 30 Mar 2025 22:48:43 +0800 Subject: [PATCH 1893/2002] Committed on or around 2025/03/30 --- .../Road safety/Year_over_year_2008-2024_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py index 1f7f872d..da612654 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py @@ -110,7 +110,7 @@ text.set_path_effects([path_effects.Normal()]) -img = image.imread('CC-BY.png') +img = image.imread('CC0.png') plt.figimage(X=img, xo=800, yo=800, alpha=0.9) From f80e719eb4cc777cc486d82911f519f74b708605 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sun, 30 Mar 2025 23:17:38 +0800 Subject: [PATCH 1894/2002] Committed on or around 2025/03/30 --- .../Road safety/Year_over_year_2008-2024_watermark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py index da612654..334346f4 100644 --- a/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py +++ b/The attainments and realizations of my dreams/Road safety/Year_over_year_2008-2024_watermark.py @@ -61,7 +61,7 @@ axes1.plot(year, Tainan, label="Tainan") axes1.plot(year, Kaohsiung, label="Kaohsiung") -axes1.set_title("The Number of Deaths in Road Accident in Taiwan by Region") +axes1.set_title("The Number of Deaths in Road Accident in Taiwan by City") axes1.set_xlabel("Year") axes1.set_ylabel("The number of deaths") From f5a72552779b51e2eb55134c659a881618e55124 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:05:03 +0800 Subject: [PATCH 1895/2002] Committed on or around 2025/04/25 --- .../March/At metro level color gradient.py | 67 ++++++++++++++++++ .../2025/March/CC0.png | Bin 0 -> 980 bytes 2 files changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py new file mode 100644 index 00000000..2105c9a4 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + colour.CSS4_COLORS.get('darkturquoise'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/ApRE7") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Fri, 25 Apr 2025 12:06:55 +0800 Subject: [PATCH 1896/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py index 2105c9a4..5dc1bbb4 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2025/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/ApRE7") From 61aaee302835b2c55b79c920d3bb669f5149f79e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:09:46 +0800 Subject: [PATCH 1897/2002] Committed on or around 2025/04/25 --- .../2025/March/bar color gradient.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/bar color gradient.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/bar color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/bar color gradient.py new file mode 100644 index 00000000..3e4a5bd1 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/bar color gradient.py @@ -0,0 +1,49 @@ +import matplotlib.pyplot as plt +import numpy as np + +def gradient_image(ax, direction=0.3, cmap_range=(0, 1), **kwargs): + """Draw a gradient image based on a colormap.""" + v = np.array([np.cos(direction * np.pi / 2), np.sin(direction * np.pi / 2)]) + X = np.array([[0, 0], [v[0], v[1]]]) + Y = np.array([[0, 0], [-v[1], v[0]]]) + extent = (np.min(X), np.max(X), np.min(Y), np.max(Y)) + + Z = np.empty((100, 100)) + for i in range(100): + for j in range(100): + Z[i, j] = (i/99)*v[0] + (j/99)*v[1] + + img = ax.imshow(Z, extent=extent, aspect='auto', cmap=plt.get_cmap('viridis'), vmin=cmap_range[0], vmax=cmap_range[1], origin='lower', **kwargs) + return img + + + +# Sample data +x = np.arange(5) +y = np.random.rand(5) + +fig, ax = plt.subplots() + +# Create the gradient image +gradient = gradient_image(ax, direction=1) +gradient.set_clip_path(ax.patch) # Clip the gradient to the axes + +# Create bars and set facecolor to "none" to allow gradient visibility +bars = ax.bar(x, y) +for bar in bars: + bar.set_facecolor("none") + xpos = bar.get_x() + width = bar.get_width() + height = bar.get_height() + + # Add a clipped image for each bar + ax.imshow(gradient.get_array(), extent=[xpos, xpos+width, 0, height], aspect='auto', cmap=plt.get_cmap('viridis'), vmin=0, vmax=1, clip_on=True) + +ax.set_xticks(x) +ax.set_xticklabels(['A', 'B', 'C', 'D', 'E']) +ax.set_ylabel('Values') +ax.set_title('Bar Chart with Gradient Colors') + +plt.show() + +# Source: https://www.google.com/search?q=matplotlib+bar+color+gradient \ No newline at end of file From a664366bdc4bac0f0e26a83ab61c765ad7b704e0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:21:28 +0800 Subject: [PATCH 1898/2002] Committed on or around 2025/04/25 --- .../2025/March/Sample.py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/Sample.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/Sample.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/Sample.py new file mode 100644 index 00000000..72323bbc --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/Sample.py @@ -0,0 +1,57 @@ +import matplotlib.pyplot as plt +import numpy as np + +cmaps = [('Perceptually Uniform Sequential', [ + 'viridis', 'plasma', 'inferno', 'magma', 'cividis']), + ('Sequential', [ + 'Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds', + 'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu', + 'GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn']), + ('Sequential (2)', [ + 'binary', 'gist_yarg', 'gist_gray', 'gray', 'bone', 'pink', + 'spring', 'summer', 'autumn', 'winter', 'cool', 'Wistia', + 'hot', 'afmhot', 'gist_heat', 'copper']), + ('Diverging', [ + 'PiYG', 'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', + 'RdYlBu', 'RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic', + 'berlin', 'managua', 'vanimo']), + ('Cyclic', ['twilight', 'twilight_shifted', 'hsv']), + ('Qualitative', [ + 'Pastel1', 'Pastel2', 'Paired', 'Accent', + 'Dark2', 'Set1', 'Set2', 'Set3', + 'tab10', 'tab20', 'tab20b', 'tab20c']), + ('Miscellaneous', [ + 'flag', 'prism', 'ocean', 'gist_earth', 'terrain', 'gist_stern', + 'gnuplot', 'gnuplot2', 'CMRmap', 'cubehelix', 'brg', + 'gist_rainbow', 'rainbow', 'jet', 'turbo', 'nipy_spectral', + 'gist_ncar'])] + +gradient = np.linspace(0, 1, 256) +gradient = np.vstack((gradient, gradient)) + + +def plot_color_gradients(cmap_category, cmap_list): + # Create figure and adjust figure height to number of colormaps + nrows = len(cmap_list) + figh = 0.35 + 0.15 + (nrows + (nrows-1)*0.1)*0.22 + fig, axs = plt.subplots(nrows=nrows, figsize=(6.4, figh)) + fig.subplots_adjust(top=1-.35/figh, bottom=.15/figh, left=0.2, right=0.99) + + axs[0].set_title(f"{cmap_category} colormaps", fontsize=14) + + for ax, cmap_name in zip(axs, cmap_list): + ax.imshow(gradient, aspect='auto', cmap=cmap_name) + ax.text(-.01, .5, cmap_name, va='center', ha='right', fontsize=10, + transform=ax.transAxes) + + # Turn off *all* ticks & spines, not just the ones with colormaps. + for ax in axs: + ax.set_axis_off() + + +for cmap_category, cmap_list in cmaps: + plot_color_gradients(cmap_category, cmap_list) + + + +# Source: https://matplotlib.org/stable/gallery/color/colormap_reference.html \ No newline at end of file From 30705e020d321a6070993ba878234cce7d6c3d22 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:26:21 +0800 Subject: [PATCH 1899/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py index 5dc1bbb4..303733f1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -1,3 +1,4 @@ +import Sample import matplotlib.pyplot as plt import matplotlib import matplotlib.cbook as cbook @@ -23,7 +24,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - colour.CSS4_COLORS.get('darkturquoise'), + colour.CSS4_COLORS.get(), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From 9080aec1f3bf4d6221a7637a27e3475afbc924b5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:29:41 +0800 Subject: [PATCH 1900/2002] Committed on or around 2025/04/25 --- .../2025/March/Amended_Sample.py | 52 +++++++++++++++++++ .../March/At metro level color gradient.py | 2 +- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/Amended_Sample.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/Amended_Sample.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/Amended_Sample.py new file mode 100644 index 00000000..b5fbe160 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/Amended_Sample.py @@ -0,0 +1,52 @@ +import matplotlib.pyplot as plt +import numpy as np + +cmaps = [('Perceptually Uniform Sequential', [ + 'viridis', 'plasma', 'inferno', 'magma', 'cividis']), + ('Sequential', [ + 'Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds', + 'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu', + 'GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn']), + ('Sequential (2)', [ + 'binary', 'gist_yarg', 'gist_gray', 'gray', 'bone', 'pink', + 'spring', 'summer', 'autumn', 'winter', 'cool', 'Wistia', + 'hot', 'afmhot', 'gist_heat', 'copper']), + ('Diverging', [ + 'PiYG', 'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', + 'RdYlBu', 'RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic', + 'berlin', 'managua', 'vanimo']), + ('Cyclic', ['twilight', 'twilight_shifted', 'hsv']), + ('Qualitative', [ + 'Pastel1', 'Pastel2', 'Paired', 'Accent', + 'Dark2', 'Set1', 'Set2', 'Set3', + 'tab10', 'tab20', 'tab20b', 'tab20c']), + ('Miscellaneous', [ + 'flag', 'prism', 'ocean', 'gist_earth', 'terrain', 'gist_stern', + 'gnuplot', 'gnuplot2', 'CMRmap', 'cubehelix', 'brg', + 'gist_rainbow', 'rainbow', 'jet', 'turbo', 'nipy_spectral', + 'gist_ncar'])] + +gradient = np.linspace(0, 1, 256) +gradient = np.vstack((gradient, gradient)) + + +def plot_color_gradients(cmap_list): + # Create figure and adjust figure height to number of colormaps + nrows = len(cmap_list) + figh = 0.35 + 0.15 + (nrows + (nrows-1)*0.1)*0.22 + fig, axs = plt.subplots(nrows=nrows, figsize=(6.4, figh)) + fig.subplots_adjust(top=1-.35/figh, bottom=.15/figh, left=0.2, right=0.99) + + for ax, cmap_name in zip(axs, cmap_list): + ax.imshow(gradient, aspect='auto', cmap=cmap_name) + ax.text(-.01, .5, cmap_name, va='center', ha='right', fontsize=10, + transform=ax.transAxes) + + # Turn off *all* ticks & spines, not just the ones with colormaps. + for ax in axs: + ax.set_axis_off() + + + + +# Source: https://matplotlib.org/stable/gallery/color/colormap_reference.html \ No newline at end of file diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py index 303733f1..e42cd72c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -24,7 +24,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - colour.CSS4_COLORS.get(), + Sample.plot_color_gradients(), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From 57a708598d4b95a6b48548c462b1fa597e43362d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:31:15 +0800 Subject: [PATCH 1901/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py index e42cd72c..b78744e0 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -1,4 +1,4 @@ -import Sample +import Amended_Sample as AS import matplotlib.pyplot as plt import matplotlib import matplotlib.cbook as cbook @@ -24,7 +24,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - Sample.plot_color_gradients(), + AS.plot_color_gradients(['blue', 'green']), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From 89d4d401f793f1e82845aad1e8d889291b77df66 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 25 Apr 2025 23:48:37 +0800 Subject: [PATCH 1902/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py index b78744e0..18a471d4 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -24,7 +24,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - AS.plot_color_gradients(['blue', 'green']), + AS.plot_color_gradients(['blue', 'green']), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From e0b48ec09e356a2e0a3a3d55db793eeecc868496 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 00:07:22 +0800 Subject: [PATCH 1903/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py index 18a471d4..335ab629 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -24,7 +24,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - AS.plot_color_gradients(['blue', 'green']), + colour.cnames.get('winter'), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From caaed1523f10314d08a7fb388e73e79a1707806a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 00:18:54 +0800 Subject: [PATCH 1904/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py index 335ab629..dca0edc3 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -24,7 +24,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - colour.cnames.get('winter'), + colour.Colormap('winter'), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From 0fe42d7ea1e336de406411e81c2ff8045f0a6838 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 00:21:34 +0800 Subject: [PATCH 1905/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py index dca0edc3..a9de22b1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -24,7 +24,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - colour.Colormap('winter'), + colour.CSS4_COLORS.get('blue'), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From efc04672944318d0348665e6b71abe39a53ae575 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 00:35:12 +0800 Subject: [PATCH 1906/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py index a9de22b1..04942cf9 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient.py @@ -21,10 +21,12 @@ # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plt.tick_params(axis='y', labelsize=12) # [2] +cmap = matplotlib.colormaps['winter'] + plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - colour.CSS4_COLORS.get('blue'), + matplotlib.cm.get_cmap('winter'), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From bd808490138e70c133f31a3ee2596b8946e788e9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 02:02:10 +0800 Subject: [PATCH 1907/2002] Committed on or around 2025/04/25 --- .../March/At metro level color gradient 2.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py new file mode 100644 index 00000000..04942cf9 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py @@ -0,0 +1,70 @@ +import Amended_Sample as AS +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +cmap = matplotlib.colormaps['winter'] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + matplotlib.cm.get_cmap('winter'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/ApRE7") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 478f5a0eb7777d32054b251d993fb5c140a877a7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 02:07:09 +0800 Subject: [PATCH 1908/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient 2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py index 04942cf9..25c11c23 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py @@ -26,7 +26,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - matplotlib.cm.get_cmap('winter'), + matplotlib.cm.ScalarMappable(norm=colour.Normalize(vmin=5, vmax=10), cmap=matplotlib.cm.winter), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From a418af2a5b7d93b2dbdca8ba15a8fd62cc6dbcfb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 02:08:35 +0800 Subject: [PATCH 1909/2002] Committed on or around 2025/04/25 --- .../2025/March/At metro level color gradient 2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py index 25c11c23..e7adaade 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 2.py @@ -26,7 +26,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - matplotlib.cm.ScalarMappable(norm=colour.Normalize(vmin=5, vmax=10), cmap=matplotlib.cm.winter), + matplotlib.cm.ScalarMappable(norm=colour.Normalize(vmin=0, vmax=1), cmap='winter'), colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From 8af5f92b56a99323a6bbb419d44aeb57fb2b192c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 12:59:05 +0800 Subject: [PATCH 1910/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py new file mode 100644 index 00000000..2105c9a4 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + colour.CSS4_COLORS.get('darkturquoise'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/ApRE7") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 906aa2d26264c7fecdc502f2f08ec4cd14f5e498 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:01:44 +0800 Subject: [PATCH 1911/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index 2105c9a4..c73d09a1 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -34,7 +34,7 @@ plt.title("2025/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference https://archive.ph/ApRE7") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") plt.ylim(40000, 200000) From 5d6c486aaa7385b79864b9a074a372a61638a147 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:03:14 +0800 Subject: [PATCH 1912/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index c73d09a1..06d1b02a 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2633+128075+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From c1d0c8ef859e41dace986851d699721c264fb693 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:03:31 +0800 Subject: [PATCH 1913/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index 06d1b02a..c014a59d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2619+130037+78967+4367, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 54586+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 7e71799a13bde0c522cbe1da3408ebe690a16997 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:03:55 +0800 Subject: [PATCH 1914/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index c014a59d..0889f9de 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2619+130037+78967+4367, 54586+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 32bfc45ec338b77f803da3329b836c18d3a58369 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:04:20 +0800 Subject: [PATCH 1915/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index 0889f9de..9f8b7538 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2619+130037+78967+4367, 54586+36351+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67473+12257+3859, 5151+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 329ceb232f3b20cad4118d97ab5a372e0b59e4aa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:05:23 +0800 Subject: [PATCH 1916/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index 9f8b7538..b09e2560 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67473+12257+3859, 5151+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12257+3859, 5151+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From d2da8cd77695bd0d94e3a28b90b04e12adf515cb Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:05:41 +0800 Subject: [PATCH 1917/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index b09e2560..4461a48d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12257+3859, 5151+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3859, 5151+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From cb95b1fa98aa459238e3ace9c9e7269a569cc05a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:05:59 +0800 Subject: [PATCH 1918/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index 4461a48d..316a2ad5 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3859, 5151+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5151+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From d763fa709aaf1257fc71d5657b9334ecab4acfa5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:07:03 +0800 Subject: [PATCH 1919/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index 316a2ad5..4b5be928 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5151+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7741+30503, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From f3fcc71c5601225119941a7423569920d0692740 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:08:34 +0800 Subject: [PATCH 1920/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index 4b5be928..0825beef 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7741+30503, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43279+5105] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 722d65619319017894eda1e748c3e3c9b38e847c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:09:03 +0800 Subject: [PATCH 1921/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index 0825beef..2ff1490f 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43279+5105] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 459393b9ae63ec84b1e2adf1fdb2f311a8266d38 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:13:39 +0800 Subject: [PATCH 1922/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py index 2ff1490f..8f667dfd 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2025/02 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference https://archive.ph/iEfAC") From c4dd483251140b0fcafef70241bd5bf22ea06fb3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:56:02 +0800 Subject: [PATCH 1923/2002] Committed on or around 2025/04/26 --- .../2025/March/To feed Chat GPT.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py new file mode 100644 index 00000000..074186d3 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py @@ -0,0 +1,47 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1] +position_vacancies = [39865] + +label = ["擃撣\nKaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'), + colour.CSS4_COLORS.get('darkslateblue'), + colour.CSS4_COLORS.get('mediumpurple'), + colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/02 啁鈭撣瑞撩稞n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/LPccQ") + +plt.ylim(30000, 130000) + +plt.figimage(X=img, xo=600, yo=700, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() From a934135089c77bd75c1e89429814ff839d520762 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:56:20 +0800 Subject: [PATCH 1924/2002] Committed on or around 2025/04/26 --- .../2025/March/To feed Chat GPT.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py index 074186d3..fba88023 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py @@ -37,8 +37,6 @@ plt.ylim(30000, 130000) -plt.figimage(X=img, xo=600, yo=700, alpha=0.9) - # Insert text watermark [1] plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, From bdbc0a446fff68e13761c148bb2b5dee2bd38563 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 13:57:04 +0800 Subject: [PATCH 1925/2002] Committed on or around 2025/04/26 --- .../2025/March/To feed Chat GPT.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py index fba88023..abd91c84 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py @@ -37,9 +37,4 @@ plt.ylim(30000, 130000) -# Insert text watermark [1] -plt.text(x=0.6, y=0.7, s="CC-BY 4.0", fontsize=40, color='grey', alpha=0.9, - ha='center', va='center', rotation=30, - transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] - plt.show() From 90527a11c18bd4b5fc549ea14db199d1c0a4106c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 14:07:30 +0800 Subject: [PATCH 1926/2002] Committed on or around 2025/04/26 --- .../2025/March/To feed Chat GPT.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py index abd91c84..acf246dc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT.py @@ -19,11 +19,7 @@ # plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) plt.tick_params(axis='y', labelsize=12) # [2] -plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), - colour.CSS4_COLORS.get('slateblue'), - colour.CSS4_COLORS.get('darkslateblue'), - colour.CSS4_COLORS.get('mediumpurple'), - colour.CSS4_COLORS.get('rebeccapurple')]) #[4][5][6] +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue')]) #[4][5][6] for rect in plot: height = rect.get_height() From 4d6025a8c8b9c0ab5bbc22a3a78f0f6993ebed54 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 14:25:40 +0800 Subject: [PATCH 1927/2002] Committed on or around 2025/04/26 --- .../2025/March/To feed Chat GPT 2.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT 2.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT 2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT 2.py new file mode 100644 index 00000000..beeacdfa --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT 2.py @@ -0,0 +1,31 @@ +import matplotlib.pyplot as plt +import matplotlib.colors as colour + +region_num = [1, 2] +position_vacancies = [120654, 39865] + +label = ["Taipei City", + "Kaohsiung City"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=0, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('mediumslateblue'), + colour.CSS4_COLORS.get('slateblue'),]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2024/02 the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) + +# plt.ylabel("") +plt.xlabel("Reference https://archive.ph/LPccQ") + +plt.ylim(30000, 130000) + +plt.show() + From bc4a87f9308b3abbad4ee00b0dbc48bcae77fd34 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 14:29:06 +0800 Subject: [PATCH 1928/2002] Committed on or around 2025/04/26 --- .../2025/March/To feed Chat GPT 2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT 2.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT 2.py index beeacdfa..160da188 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT 2.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/To feed Chat GPT 2.py @@ -20,7 +20,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2024/02 the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) +plt.title("2024/02 \n the number of job openings in Taipei & Kaohsiung of Taiwan", fontsize=20) # plt.ylabel("") plt.xlabel("Reference https://archive.ph/LPccQ") From d1565f615b0cabac3b2c448e5493647c98c301e3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 15:12:58 +0800 Subject: [PATCH 1929/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 3.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 3.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 3.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 3.py new file mode 100644 index 00000000..21f2dde7 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 3.py @@ -0,0 +1,70 @@ +import Amended_Sample as AS +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +cmap = matplotlib.colormaps['winter'] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + matplotlib.cm.ScalarMappable(norm=colour.Normalize(vmin=0, vmax=1), cmap=cmap), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/ApRE7") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 651535f23ce002f93a2e8e55842ff6f7d90a0e6c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 15:18:12 +0800 Subject: [PATCH 1930/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 4.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py new file mode 100644 index 00000000..21f2dde7 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py @@ -0,0 +1,70 @@ +import Amended_Sample as AS +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78000+4404, 53560+35893+7092, 67473+12257+3859, 5151+7741+30503, 43279+5105] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +cmap = matplotlib.colormaps['winter'] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + matplotlib.cm.ScalarMappable(norm=colour.Normalize(vmin=0, vmax=1), cmap=cmap), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/ApRE7") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 61a0780df0a435d2029ad51c3ef72148d6100add Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 15:20:36 +0800 Subject: [PATCH 1931/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 4.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py index 21f2dde7..74cf9a65 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py @@ -23,6 +23,11 @@ cmap = matplotlib.colormaps['winter'] +clist = [(0, "red"), (0.125, "red"), (0.25, "orange"), (0.5, "green"), + (0.7, "green"), (0.75, "blue"), (1, "blue")] + +rvb = colour.LinearSegmentedColormap.from_list("", clist) + plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), From 9e639b545e3e526ba04b612185cb83ca304fc20a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 15:22:17 +0800 Subject: [PATCH 1932/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 4.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py index 74cf9a65..f1fb356b 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py @@ -23,8 +23,8 @@ cmap = matplotlib.colormaps['winter'] -clist = [(0, "red"), (0.125, "red"), (0.25, "orange"), (0.5, "green"), - (0.7, "green"), (0.75, "blue"), (1, "blue")] +clist = [(0, "blue"), (0.125, "light blue"), (0.25, "green"), (0.5, "green"), + (0.7, "green"), (0.75, "green"), (1, "green")] rvb = colour.LinearSegmentedColormap.from_list("", clist) From 6c7f626c10fa3233c39ea585808b0eae68bc566d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 15:28:12 +0800 Subject: [PATCH 1933/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py index f1fb356b..c21b9f27 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py @@ -31,7 +31,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - matplotlib.cm.ScalarMappable(norm=colour.Normalize(vmin=0, vmax=1), cmap=cmap), + rvb, colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From ee853188754f2dc1a4c0c813ab33866d7321cea6 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 15:29:22 +0800 Subject: [PATCH 1934/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py index c21b9f27..159a7ce9 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 4.py @@ -23,7 +23,7 @@ cmap = matplotlib.colormaps['winter'] -clist = [(0, "blue"), (0.125, "light blue"), (0.25, "green"), (0.5, "green"), +clist = [(0, "blue"), (0.125, "skyblue"), (0.25, "green"), (0.5, "green"), (0.7, "green"), (0.75, "green"), (1, "green")] rvb = colour.LinearSegmentedColormap.from_list("", clist) From e2aded999057a52e89ce8ff9fc1cd44ce388b372 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 16:22:52 +0800 Subject: [PATCH 1935/2002] Committed on or around 2025/04/26 --- .../March/At metrol level color gradient 5.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py new file mode 100644 index 00000000..8f667dfd --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + colour.CSS4_COLORS.get('darkturquoise'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From ae17e2fe9d4f7adf8f5cb1c7e2b9ba6a9d56a52b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 16:31:39 +0800 Subject: [PATCH 1936/2002] Committed on or around 2025/04/26 --- .../2025/March/At metrol level color gradient 5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py index 8f667dfd..1e8055fc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py @@ -23,7 +23,7 @@ plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), colour.CSS4_COLORS.get('mediumblue'), colour.CSS4_COLORS.get('blue'), - colour.CSS4_COLORS.get('darkturquoise'), + matplotlib.colormaps['winter'], colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] for rect in plot: From 53756915a47182c893e51ced518138b12935b9e9 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 16:34:52 +0800 Subject: [PATCH 1937/2002] Committed on or around 2025/04/26 --- ...vel color gradient 5.py => At metro level color gradient 5.py} | 0 .../2025/March/At metro level color gradient 6.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/{At metrol level color gradient 5.py => At metro level color gradient 5.py} (100%) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 6.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 5.py similarity index 100% rename from The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metrol level color gradient 5.py rename to The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 5.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 6.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 6.py new file mode 100644 index 00000000..e69de29b From 867c0cdcbeb04d5e0b3abcc4416ee2632aff0f6a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 16:46:38 +0800 Subject: [PATCH 1938/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 6.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 6.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 6.py index e69de29b..ac759a61 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 6.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 6.py @@ -0,0 +1,70 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +cmap = plt.get_cmap('winter') + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + cmap(np.linspace(0, 1, 200)), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From f34fad1fa3b941d1ea818a5230db95fdfaddddfa Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 16:49:33 +0800 Subject: [PATCH 1939/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 7.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py new file mode 100644 index 00000000..8f667dfd --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py @@ -0,0 +1,67 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + colour.CSS4_COLORS.get('darkturquoise'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From a957a7ddac9079f1979cc6cdc6e6a1a2d477ceb3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:06:36 +0800 Subject: [PATCH 1940/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 7.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py index 8f667dfd..14870991 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py @@ -31,6 +31,17 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) + +counter = 1 + +for rect in plot: + + if rect is not None: + + counter = counter + 1 + + + plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) # plt.ylabel("") From d83902c534c03bbdebea0b365a39e689ba99ef2d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:06:55 +0800 Subject: [PATCH 1941/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 7.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py index 14870991..5e8855b2 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py @@ -32,7 +32,7 @@ '%d' % int(height), ha='center', va='bottom', fontsize=12) -counter = 1 +counter = 0 for rect in plot: From dad0023a0528c7a3f34b8b42f7088e4d80f89fb4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:21:34 +0800 Subject: [PATCH 1942/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 7.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py index 5e8855b2..6f99d46c 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py @@ -2,6 +2,7 @@ import matplotlib import matplotlib.cbook as cbook import matplotlib.colors as colour +import numpy as np import matplotlib.image as image # Using the magic encoding # -*- coding: utf-8 -*- @@ -40,6 +41,15 @@ counter = counter + 1 + if counter == 4: + + bar_width = rect.get_width() + bar_height = rect.get_height() + + gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) + + ax.imshow(X=gradient, cmap='winter', extent=(0 - bar_width/2, 0 + bar_width/2, 0, bar_height), aspect='auto' ) + plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) From a9d433dad04bc4c5f810a1ace6229092e8255fdd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:23:57 +0800 Subject: [PATCH 1943/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 7.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py index 6f99d46c..43dab46d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 7.py @@ -46,7 +46,8 @@ bar_width = rect.get_width() bar_height = rect.get_height() - gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) + # Create a gradient image using "winter" colormap + gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns ax.imshow(X=gradient, cmap='winter', extent=(0 - bar_width/2, 0 + bar_width/2, 0, bar_height), aspect='auto' ) From 781a2013e19f3cfc3c7b6000e1de4f1f60df5e45 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:28:28 +0800 Subject: [PATCH 1944/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 8.py | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 8.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 8.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 8.py new file mode 100644 index 00000000..43dab46d --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 8.py @@ -0,0 +1,89 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + colour.CSS4_COLORS.get('darkturquoise'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + +counter = 0 + +for rect in plot: + + if rect is not None: + + counter = counter + 1 + + if counter == 4: + + bar_width = rect.get_width() + bar_height = rect.get_height() + + # Create a gradient image using "winter" colormap + gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns + + ax.imshow(X=gradient, cmap='winter', extent=(0 - bar_width/2, 0 + bar_width/2, 0, bar_height), aspect='auto' ) + + + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 138e1783ce025f919c449b9b53ad6a5f37109908 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:28:43 +0800 Subject: [PATCH 1945/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 8.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 8.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 8.py index 43dab46d..302ce2ca 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 8.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 8.py @@ -44,7 +44,7 @@ if counter == 4: bar_width = rect.get_width() - bar_height = rect.get_height() + bar_height = position_vacancies[3] # Create a gradient image using "winter" colormap gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns From 0ac7519b142e4381c2f99e739f64263718b4f2e4 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:37:56 +0800 Subject: [PATCH 1946/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 9.py | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py new file mode 100644 index 00000000..516c8b90 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py @@ -0,0 +1,89 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + colour.CSS4_COLORS.get('darkturquoise'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + + +counter = 0 + +for rect in plot: + + if rect is not None: + + counter = counter + 1 + + if counter == 4: + + bar_center = rect.get_x() + rect.get_width() / 2. + bar_height = rect.get_height() + + # Create a gradient image using "winter" colormap + gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns + + ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.5, bar_center + 0.5, 0, bar_height), aspect='auto' ) + + + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From dc8cce93071cb40fa19ffc20532e6c23700253b5 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 17:53:21 +0800 Subject: [PATCH 1947/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 9.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py index 516c8b90..2e9d0121 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py @@ -49,7 +49,7 @@ # Create a gradient image using "winter" colormap gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns - ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.5, bar_center + 0.5, 0, bar_height), aspect='auto' ) + ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.1, bar_center + 0.1, 0, bar_height), aspect='auto' ) From a24c1c6f790f145aa17f0eecf5949aa470418ad0 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 18:11:12 +0800 Subject: [PATCH 1948/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 9.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py index 2e9d0121..d0761bbb 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 9.py @@ -49,7 +49,7 @@ # Create a gradient image using "winter" colormap gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns - ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.1, bar_center + 0.1, 0, bar_height), aspect='auto' ) + ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.01, bar_center + 0.01, 0, bar_height), aspect='auto' ) From d9c3f3e27762353c9ec7108774862242bd20cf9e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 18:56:47 +0800 Subject: [PATCH 1949/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 10.py | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 10.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 10.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 10.py new file mode 100644 index 00000000..d953eb38 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 10.py @@ -0,0 +1,92 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + colour.CSS4_COLORS.get('darkturquoise'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + + + + +counter = 0 + +for rect in plot: + + if rect is not None: + + counter = counter + 1 + + if counter == 4: + + bar_center = rect.get_x() + rect.get_width() / 2. + bar_height = rect.get_height() + + # Create a gradient image using "winter" colormap + gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns + + ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.01, bar_center + 0.01, 0, bar_height), aspect='auto' ) + + + + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 594e48d27551699d1784ca39b029c04f1b185c78 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 18:59:19 +0800 Subject: [PATCH 1950/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 11.py | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 11.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 11.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 11.py new file mode 100644 index 00000000..f3feaa0c --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 11.py @@ -0,0 +1,92 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + colour.CSS4_COLORS.get('darkturquoise'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + + +plt.show() + +counter = 0 + +for rect in plot: + + if rect is not None: + + counter = counter + 1 + + if counter == 4: + + bar_center = rect.get_x() + rect.get_width() / 2. + bar_height = rect.get_height() + + # Create a gradient image using "winter" colormap + gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns + + ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.01, bar_center + 0.01, 0, bar_height), aspect='auto' ) + + + + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 5e258f431c6a3fdc4289ab0462d19c5948645a78 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 19:43:23 +0800 Subject: [PATCH 1951/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 12.py | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 12.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 12.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 12.py new file mode 100644 index 00000000..39da4790 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 12.py @@ -0,0 +1,92 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + 'none', + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + + +plt.show() + +counter = 0 + +for rect in plot: + + if rect is not None: + + counter = counter + 1 + + if counter == 4: + + bar_center = rect.get_x() + rect.get_width() / 2. + bar_height = rect.get_height() + + # Create a gradient image using "winter" colormap + gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns + + ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.01, bar_center + 0.01, 0, bar_height), aspect='auto' ) + + + + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 2a82d13a69c54fc0d9ffebbc4b916218f1c6a85b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 19:44:07 +0800 Subject: [PATCH 1952/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 13.py | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py new file mode 100644 index 00000000..39da4790 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py @@ -0,0 +1,92 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + 'none', + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + + +plt.show() + +counter = 0 + +for rect in plot: + + if rect is not None: + + counter = counter + 1 + + if counter == 4: + + bar_center = rect.get_x() + rect.get_width() / 2. + bar_height = rect.get_height() + + # Create a gradient image using "winter" colormap + gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns + + ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.01, bar_center + 0.01, 0, bar_height), aspect='auto' ) + + + + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From f439d7aa0e2d38fcd27fa489d97b765112e42f1c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 19:54:09 +0800 Subject: [PATCH 1953/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 13.py | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py index 39da4790..f353a025 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py @@ -61,13 +61,23 @@ if counter == 4: - bar_center = rect.get_x() + rect.get_width() / 2. - bar_height = rect.get_height() - - # Create a gradient image using "winter" colormap - gradient = np.linspace(start=0, stop=1, num=256).reshape(1, -1) # 1 row, 256 columns - - ax.imshow(X=gradient, cmap='winter', extent=(bar_center - 0.01, bar_center + 0.01, 0, bar_height), aspect='auto' ) + # Bar position and size + x = bar.get_x() + width = bar.get_width() + height = bar.get_height() + + # Create a grid inside the bar + nx = 100 # Number of divisions horizontally + ny = 100 # Number of divisions vertically + X = np.linspace(x, x + width, nx) + Y = np.linspace(0, height, ny) + X, Y = np.meshgrid(X, Y) + + # Color based on horizontal position (left to right) + Z = (X - x) / width # Normalize X inside the bar (0 to 1) + + # Draw gradient + ax.pcolormesh(X, Y, Z, cmap=cmap, shading='auto') From 12d1efbf236627b56e9fcb17abd6908b34dabe5b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 19:57:01 +0800 Subject: [PATCH 1954/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 13.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py index f353a025..40c105c7 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py @@ -48,8 +48,7 @@ ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] - -plt.show() +cmap = matplotlib.cm.get_cmap('winter') counter = 0 From 5a808309410a9a4f5f4f43a70d5e7ae97abfb9d7 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 19:57:59 +0800 Subject: [PATCH 1955/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 13.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py index 40c105c7..6302095d 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 13.py @@ -61,9 +61,9 @@ if counter == 4: # Bar position and size - x = bar.get_x() - width = bar.get_width() - height = bar.get_height() + x = rect.get_x() + width = rect.get_width() + height = rect.get_height() # Create a grid inside the bar nx = 100 # Number of divisions horizontally From 1a59b512886e9b395c9a27b4980e43a8f335ec52 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 20:00:32 +0800 Subject: [PATCH 1956/2002] Committed on or around 2025/04/26 --- .../March/At metro level color gradient 14.py | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 14.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 14.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 14.py new file mode 100644 index 00000000..8d0a6f15 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 14.py @@ -0,0 +1,101 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2619+130037+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + 'none', + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/03 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/iEfAC") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +cmap = matplotlib.colormaps.get_cmap('winter') + +counter = 0 + +for rect in plot: + + if rect is not None: + + counter = counter + 1 + + if counter == 4: + + # Bar position and size + x = rect.get_x() + width = rect.get_width() + height = rect.get_height() + + # Create a grid inside the bar + nx = 100 # Number of divisions horizontally + ny = 100 # Number of divisions vertically + X = np.linspace(x, x + width, nx) + Y = np.linspace(0, height, ny) + X, Y = np.meshgrid(X, Y) + + # Color based on horizontal position (left to right) + Z = (X - x) / width # Normalize X inside the bar (0 to 1) + + # Draw gradient + ax.pcolormesh(X, Y, Z, cmap=cmap, shading='auto') + + + + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 42f077e66aef0876b8caafae31c771e8fc2a409c Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 26 Apr 2025 20:06:43 +0800 Subject: [PATCH 1957/2002] Committed on or around 2025/04/26 --- .../2025/March/At metro level color gradient 14.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 14.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 14.py index 8d0a6f15..528d7f31 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 14.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At metro level color gradient 14.py @@ -48,11 +48,11 @@ ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] -cmap = matplotlib.colormaps.get_cmap('winter') +cmap = matplotlib.colormaps.get_cmap('winter') # [8][9] counter = 0 -for rect in plot: +for rect in plot: # [8][9] if rect is not None: @@ -91,6 +91,8 @@ # 5. https://www.python-graph-gallery.com/3-control-color-of-barplots # 6. https://matplotlib.org/stable/gallery/color/named_colors.html # 7. https://creativecommons.org/public-domain/cc0/ +# 8. https://chatgpt.com/c/680c6f49-95b4-8008-85f4-3941744f62e4 +# 9. Untitled5.ipynb @ my Google Colab. # Notes: # 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, From 19a4d5f299d3af88f4a6c2cea17336efef7687cd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 3 May 2025 19:52:05 +0800 Subject: [PATCH 1958/2002] Committed on or around 2025/05/03 --- .../2025/April/__init__.py | 0 .../2025/March/At city level.py | 66 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/__init__.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At city level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At city level.py new file mode 100644 index 00000000..6d99d01c --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/March/At city level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [128075, 78000, 53560, 67473, 30503, 43279] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/2 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/ApRE7") + +plt.ylim(30000, 120000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 510ebddf9bdc294e8eb8f1f4c3ee24f3691c04cd Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:09:09 +0800 Subject: [PATCH 1959/2002] Committed on or around 2025/05/29 --- .../April/At metro level color gradient.py | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py new file mode 100644 index 00000000..19208b02 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -0,0 +1,103 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2660+128675+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + 'none', + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/04 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/WHbv4") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +cmap = matplotlib.colormaps.get_cmap('winter') # [8][9] + +counter = 0 + +for rect in plot: # [8][9] + + if rect is not None: + + counter = counter + 1 + + if counter == 4: + + # Bar position and size + x = rect.get_x() + width = rect.get_width() + height = rect.get_height() + + # Create a grid inside the bar + nx = 100 # Number of divisions horizontally + ny = 100 # Number of divisions vertically + X = np.linspace(x, x + width, nx) + Y = np.linspace(0, height, ny) + X, Y = np.meshgrid(X, Y) + + # Color based on horizontal position (left to right) + Z = (X - x) / width # Normalize X inside the bar (0 to 1) + + # Draw gradient + ax.pcolormesh(X, Y, Z, cmap=cmap, shading='auto') + + + + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ +# 8. https://chatgpt.com/c/680c6f49-95b4-8008-85f4-3941744f62e4 +# 9. Untitled5.ipynb @ my Google Colab. + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 493d755780427d19ebf4e62147494fbfbe365d17 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:28:05 +0800 Subject: [PATCH 1960/2002] Committed on or around 2025/05/29 --- .../2025/April/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py index 19208b02..a9b1966e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2660+128675+78967+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] +position_vacancies = [2660+128675+78059+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From e7a046612e2f8a7efe1f7044c6f517e815e241de Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:28:29 +0800 Subject: [PATCH 1961/2002] Committed on or around 2025/05/29 --- .../2025/April/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py index a9b1966e..bcd395cc 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2660+128675+78059+4367, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] +position_vacancies = [2660+128675+78059+4316, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 6185a1cd45878d86b00d632040a896dbd6e6cbe8 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:36:54 +0800 Subject: [PATCH 1962/2002] Committed on or around 2025/05/29 --- .../2025/April/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py index bcd395cc..81ae45cf 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2660+128675+78059+4316, 54586+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] +position_vacancies = [2660+128675+78059+4316, 54148+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 90eb82d0644d77eca137fe1182b899f391225dc3 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:37:14 +0800 Subject: [PATCH 1963/2002] Committed on or around 2025/05/29 --- .../2025/April/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py index 81ae45cf..41f16eae 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2660+128675+78059+4316, 54148+36351+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] +position_vacancies = [2660+128675+78059+4316, 54148+36073+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From f19acb24c9233a8e293718efa31be26514b273b1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:38:10 +0800 Subject: [PATCH 1964/2002] Committed on or around 2025/05/29 --- .../2025/April/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py index 41f16eae..d33e72f6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2660+128675+78059+4316, 54148+36073+7237, 67632+12384+3872, 5138+7802+31252, 43547+5087] +position_vacancies = [2660+128675+78059+4316, 54148+36073+7249, 67632+12384+3872, 5138+7802+31252, 43547+5087] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 9630ab86b6dcd97c1de670cb93c4b1b97d82eeb1 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:38:51 +0800 Subject: [PATCH 1965/2002] Committed on or around 2025/05/29 --- .../2025/April/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py index d33e72f6..38536e2e 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2660+128675+78059+4316, 54148+36073+7249, 67632+12384+3872, 5138+7802+31252, 43547+5087] +position_vacancies = [2660+128675+78059+4316, 54148+36073+7249, 66678+12235+3872, 5138+7802+31252, 43547+5087] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 27ad1f030c23393a2d352f1d2810bb5810230540 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:39:05 +0800 Subject: [PATCH 1966/2002] Committed on or around 2025/05/29 --- .../2025/April/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py index 38536e2e..f40bdff2 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2660+128675+78059+4316, 54148+36073+7249, 66678+12235+3872, 5138+7802+31252, 43547+5087] +position_vacancies = [2660+128675+78059+4316, 54148+36073+7249, 66678+12235+3914, 5138+7802+31252, 43547+5087] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 65f213c1a7fbcb6d24d2a42d20d1ba1ebfae078f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:47:17 +0800 Subject: [PATCH 1967/2002] Committed on or around 2025/05/29 --- .../2025/April/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py index f40bdff2..c819de59 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2660+128675+78059+4316, 54148+36073+7249, 66678+12235+3914, 5138+7802+31252, 43547+5087] +position_vacancies = [2660+128675+78059+4316, 54148+36073+7249, 66678+12235+3914, 5088+7870+30806, 43547+5087] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From b7e76e17f8d3915245c8890281b230e8438bf575 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:49:18 +0800 Subject: [PATCH 1968/2002] Committed on or around 2025/05/29 --- .../2025/April/At metro level color gradient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py index c819de59..e8c91069 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At metro level color gradient.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2660+128675+78059+4316, 54148+36073+7249, 66678+12235+3914, 5088+7870+30806, 43547+5087] +position_vacancies = [2660+128675+78059+4316, 54148+36073+7249, 66678+12235+3914, 5088+7870+30806, 43275+5021] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From d69485f368bf36b1333eebcdd464a1817158dd4e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 15:52:31 +0800 Subject: [PATCH 1969/2002] Committed on or around 2025/05/29 --- .../2025/April/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Thu, 29 May 2025 16:10:06 +0800 Subject: [PATCH 1970/2002] Committed on or around 2025/05/29 --- .../2025/April/At city level.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py new file mode 100644 index 00000000..ba2e85da --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [128075, 78000, 53560, 67473, 30503, 43279] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/4 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/ApRE7") + +plt.ylim(30000, 120000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 66385a6fb79998c4552d152daf5e12073b0946ed Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 16:14:23 +0800 Subject: [PATCH 1971/2002] Committed on or around 2025/05/29 --- .../2025/April/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py index ba2e85da..07e96d40 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128075, 78000, 53560, 67473, 30503, 43279] +position_vacancies = [128675, 78000, 53560, 67473, 30503, 43279] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 6017407287fba0f7f02da66831ffd30f5c641d10 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 16:14:58 +0800 Subject: [PATCH 1972/2002] Committed on or around 2025/05/29 --- .../2025/April/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py index 07e96d40..8e7d51ba 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128675, 78000, 53560, 67473, 30503, 43279] +position_vacancies = [128675, 78059, 53560, 67473, 30503, 43279] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 32faa484bc8bf0e25a1d44a14716f56680dd082e Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 16:15:39 +0800 Subject: [PATCH 1973/2002] Committed on or around 2025/05/29 --- .../2025/April/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py index 8e7d51ba..3e01c3e6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128675, 78059, 53560, 67473, 30503, 43279] +position_vacancies = [128675, 78059, 54148, 67473, 30503, 43279] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 3bc1d8f2574d7d54c091b62b3b3adaf97236a025 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 16:17:19 +0800 Subject: [PATCH 1974/2002] Committed on or around 2025/05/29 --- .../2025/April/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py index 3e01c3e6..11718fd8 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128675, 78059, 54148, 67473, 30503, 43279] +position_vacancies = [128675, 78059, 54148, 66678, 30503, 43279] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From 1796255f8c529a66920079c7ac08e9786c674c28 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 16:17:42 +0800 Subject: [PATCH 1975/2002] Committed on or around 2025/05/29 --- .../2025/April/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py index 11718fd8..678e90b6 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128675, 78059, 54148, 66678, 30503, 43279] +position_vacancies = [128675, 78059, 54148, 66678, 30806, 43279] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From f117976852580a0f506c7258df8667d8e7195de2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 16:18:12 +0800 Subject: [PATCH 1976/2002] Committed on or around 2025/05/29 --- .../2025/April/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py index 678e90b6..83d04840 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128675, 78059, 54148, 66678, 30806, 43279] +position_vacancies = [128675, 78059, 54148, 66678, 30806, 43275] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From a21c5d133e7e8edd7243b17efe43416fb45ba65a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Thu, 29 May 2025 16:20:02 +0800 Subject: [PATCH 1977/2002] Committed on or around 2025/05/29 --- .../2025/April/At city level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py index 83d04840..6c00bbce 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/April/At city level.py @@ -34,7 +34,7 @@ plt.title("2025/4 啁渲撣瑞撩稞n the number of job openings in Taiwan by city", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: https://archive.ph/ApRE7") +plt.xlabel("鞈 Reference: https://archive.ph/WHbv4") plt.ylim(30000, 120000) From 0dfbcbd38023047e2b129d49fbdf0bdc4b6a3254 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:55:06 +0800 Subject: [PATCH 1978/2002] Committed on or around 2025/07/04 --- Medley/2025 Level 4 Civil Servant Admission Exam.py | 3 +++ Medley/__init__.py | 0 2 files changed, 3 insertions(+) create mode 100644 Medley/2025 Level 4 Civil Servant Admission Exam.py create mode 100644 Medley/__init__.py diff --git a/Medley/2025 Level 4 Civil Servant Admission Exam.py b/Medley/2025 Level 4 Civil Servant Admission Exam.py new file mode 100644 index 00000000..219078e9 --- /dev/null +++ b/Medley/2025 Level 4 Civil Servant Admission Exam.py @@ -0,0 +1,3 @@ +data = [x * y for x in range(4) for y in range(3) if x > y and y % 2 == 0] + +print(data) \ No newline at end of file diff --git a/Medley/__init__.py b/Medley/__init__.py new file mode 100644 index 00000000..e69de29b From d0348c803552121ad86e4f7a267f7e91c6bf7970 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 6 Sep 2025 11:54:26 +0800 Subject: [PATCH 1979/2002] Committed on or around 2025/09/06 --- .../Road safety/2025/Hitherto May.py | 0 .../Road safety/2025/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py create mode 100644 The attainments and realizations of my dreams/Road safety/2025/__init__.py diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Road safety/2025/__init__.py b/The attainments and realizations of my dreams/Road safety/2025/__init__.py new file mode 100644 index 00000000..e69de29b From 222e96251bafdbfb6859a56478cd678857f9660a Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 15 Sep 2025 23:56:54 +0800 Subject: [PATCH 1980/2002] Committed on or around 2025/09/15 --- .../Road safety/2025/Hitherto May.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index e69de29b..613cbbda 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [128675, 78059, 54148, 66678, 30806, 43275] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/1 - 2025/5 啁渲撣頠蝳甇颱滿稞n the number of job openings in Taiwan by city", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://archive.ph/WHbv4") + +plt.ylim(30000, 120000) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 24f6c56685c8409e6c1e9e3c9e3a9f81433b3359 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Mon, 15 Sep 2025 23:58:35 +0800 Subject: [PATCH 1981/2002] Committed on or around 2025/09/15 --- .../Road safety/2025/Hitherto May.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index 613cbbda..bf735b91 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2025/1 - 2025/5 啁渲撣頠蝳甇颱滿稞n the number of job openings in Taiwan by city", fontsize=20) +plt.title("2025/1 - 2025/5 啁渲撣頠蝳甇颱滿稞n the number of deaths in road accidents in Taiwan by city", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference: https://archive.ph/WHbv4") From fbdad59c86896e68858f778f1d819b48137bc34b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 00:08:34 +0800 Subject: [PATCH 1982/2002] Committed on or around 2025/09/16 --- .../Road safety/2025/Hitherto May.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index bf735b91..1172257a 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -34,7 +34,7 @@ plt.title("2025/1 - 2025/5 啁渲撣頠蝳甇颱滿稞n the number of deaths in road accidents in Taiwan by city", fontsize=20) # plt.ylabel("") -plt.xlabel("鞈 Reference: https://archive.ph/WHbv4") +plt.xlabel("鞈 Reference: https://roadsafety.tw/") plt.ylim(30000, 120000) From 48b1856f9f5159371fc3e960b81c531ae101d561 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 00:11:58 +0800 Subject: [PATCH 1983/2002] Committed on or around 2025/09/16 --- .../Road safety/2025/Hitherto May.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index 1172257a..59bc6875 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128675, 78059, 54148, 66678, 30806, 43275] +position_vacancies = [128675, 107, 54148, 66678, 142, 125] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] @@ -36,7 +36,7 @@ # plt.ylabel("") plt.xlabel("鞈 Reference: https://roadsafety.tw/") -plt.ylim(30000, 120000) +plt.ylim(0, 200) img = image.imread('CC0.png') From 9644c7a6041b120ce5eb69f212b02a7d3768b656 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 00:13:21 +0800 Subject: [PATCH 1984/2002] Committed on or around 2025/09/16 --- .../Road safety/2025/Hitherto May.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index 59bc6875..f4297673 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -10,7 +10,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5, 6] -position_vacancies = [128675, 107, 54148, 66678, 142, 125] +position_vacancies = [40, 107, 96, 104, 142, 125] label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] From cb2fca1c52ea1d68d6b05e3582a4ed7fb02f3206 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 00:15:51 +0800 Subject: [PATCH 1985/2002] Committed on or around 2025/09/16 --- .../Road safety/2025/CC0.png | Bin 0 -> 980 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Road safety/2025/CC0.png diff --git a/The attainments and realizations of my dreams/Road safety/2025/CC0.png b/The attainments and realizations of my dreams/Road safety/2025/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Tue, 16 Sep 2025 00:19:56 +0800 Subject: [PATCH 1986/2002] Committed on or around 2025/09/16 --- .../Road safety/2025/Hitherto May.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index f4297673..a9c23314 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2025/1 - 2025/5 啁渲撣頠蝳甇颱滿稞n the number of deaths in road accidents in Taiwan by city", fontsize=20) +plt.title("2025/1~5 啁渲撣頠蝳甇颱滿稞n the number of deaths in road accidents in Taiwan by city", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference: https://roadsafety.tw/") From 6250438ff0602e8befab4c348428b636a088010b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 00:21:34 +0800 Subject: [PATCH 1987/2002] Committed on or around 2025/09/16 --- .../Road safety/2025/Hitherto May.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index a9c23314..ddc404ce 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2025/1~5 啁渲撣頠蝳甇颱滿稞n the number of deaths in road accidents in Taiwan by city", fontsize=20) +plt.title("2025/1~5 啁渲撣頠蝳甇颱滿稞nDeath toll from road accidents in Taiwan by city", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference: https://roadsafety.tw/") From 704352dc24a3852141a580d3782a2d4718190b9b Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 00:22:27 +0800 Subject: [PATCH 1988/2002] Committed on or around 2025/09/16 --- .../Road safety/2025/Hitherto May.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index ddc404ce..86cebd9d 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2025/1~5 啁渲撣頠蝳甇颱滿稞nDeath toll from road accidents in Taiwan by city", fontsize=20) +plt.title("2025/1嚚5 啁渲撣頠蝳甇颱滿稞nDeath toll from road accidents in Taiwan by city", fontsize=20) # plt.ylabel("") plt.xlabel("鞈 Reference: https://roadsafety.tw/") From c9e7a13e6a40acbed5a324629dd956c9549cf91f Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 00:25:37 +0800 Subject: [PATCH 1989/2002] Committed on or around 2025/09/16 --- .../Road safety/2025/Hitherto May.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index 86cebd9d..aeb1e434 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -43,7 +43,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.6, y=0.7, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.5, y=0.8, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From d279d78fb59a09468bc8d9c1b0828ca5ac1ca039 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 01:06:16 +0800 Subject: [PATCH 1990/2002] Committed on or around 2025/09/16 --- .../Monthly_total_job_openings_by_region/2025/May/__init__.py | 0 .../Road safety/2025/Hitherto May.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/May/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/May/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/May/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py index aeb1e434..e9e84508 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto May.py @@ -31,7 +31,7 @@ ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, '%d' % int(height), ha='center', va='bottom', fontsize=12) -plt.title("2025/1嚚5 啁渲撣頠蝳甇颱滿稞nDeath toll from road accidents in Taiwan by city", fontsize=20) +plt.title("2025/1嚚5 啁渲撣頠蝳甇颱滿稞nDeath toll from road accidents in Taiwan by city", fontsize=20, color='red') # plt.ylabel("") plt.xlabel("鞈 Reference: https://roadsafety.tw/") From 90ab7083a1835eb768aab4c76cd331da6d415c84 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 01:09:04 +0800 Subject: [PATCH 1991/2002] Committed on or around 2025/09/16 --- .../Monthly_total_job_openings_by_region/2025/July/__init__.py | 0 .../Monthly_total_job_openings_by_region/2025/June/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/July/__init__.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/June/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/July/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/July/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/June/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/June/__init__.py new file mode 100644 index 00000000..e69de29b From 1985023dc67dbdf025df31a6d674bb049ee16c39 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Tue, 16 Sep 2025 01:11:00 +0800 Subject: [PATCH 1992/2002] Committed on or around 2025/09/16 --- .../2025/August/__init__.py | 0 .../2025/July/At city level.py | 0 .../2025/July/CC0.png | Bin 0 -> 980 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/__init__.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/July/At city level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/July/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/July/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/July/At city level.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/July/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/July/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Wed, 17 Sep 2025 15:35:10 +0800 Subject: [PATCH 1993/2002] Committed on or around 2025/09/17 --- .../Road safety/2025/Hitherto June.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 The attainments and realizations of my dreams/Road safety/2025/Hitherto June.py diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto June.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto June.py new file mode 100644 index 00000000..f8c1fbe9 --- /dev/null +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto June.py @@ -0,0 +1,66 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5, 6] +position_vacancies = [48, 122, 114, 133, 168, 152] + +label = ["啣撣\nTaipei", "啣撣\nNew Taipei", "獢\nTaoyuan", "唬葉\nTaichung", "啣\nTainan", "擃\n Kaohsiung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='cyan', color=[colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('deepskyblue'), + colour.CSS4_COLORS.get('palegreen'), + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/1嚚6 啁渲撣頠蝳甇颱滿稞nDeath toll from road accidents in Taiwan by city", fontsize=20, color='red') + +# plt.ylabel("") +plt.xlabel("鞈 Reference: https://roadsafety.tw/") + +plt.ylim(0, 200) + +img = image.imread('CC0.png') + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.5, y=0.8, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] From 11e3ad75e8380c31bcc7d762238b2ee67daa1932 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Wed, 17 Sep 2025 15:39:46 +0800 Subject: [PATCH 1994/2002] Committed on or around 2025/09/17 --- .../Road safety/2025/Hitherto June.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Road safety/2025/Hitherto June.py b/The attainments and realizations of my dreams/Road safety/2025/Hitherto June.py index f8c1fbe9..5b66cf80 100644 --- a/The attainments and realizations of my dreams/Road safety/2025/Hitherto June.py +++ b/The attainments and realizations of my dreams/Road safety/2025/Hitherto June.py @@ -43,7 +43,7 @@ plt.figimage(X=img, xo=800, yo=800, alpha=0.9) # Insert text watermark [1] -plt.text(x=0.5, y=0.8, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, +plt.text(x=0.45, y=0.8, s="Free clip art\n∠甈", fontsize=40, color='grey', alpha=0.9, ha='center', va='center', rotation=30, transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] From 8754a7c2bc84d7596cf1c826ba7a1c305e8b175d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Fri, 26 Sep 2025 22:26:15 +0800 Subject: [PATCH 1995/2002] Committed on or around 2025/09/26 --- .../2025/August/At city level.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At city level.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At city level.py new file mode 100644 index 00000000..e69de29b From f2dffde772aa7cff8ed0f6d12d6d51a74d256233 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 4 Oct 2025 16:39:03 +0800 Subject: [PATCH 1996/2002] Committed on or around 2025/10/04 --- .../2025/September/At_city_level_h_bar.py | 0 .../2025/September/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/September/At_city_level_h_bar.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/September/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/September/At_city_level_h_bar.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/September/At_city_level_h_bar.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/September/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/September/__init__.py new file mode 100644 index 00000000..e69de29b From d607cc9c9bfb215ce0385277a6fa89c897f0e55d Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 4 Oct 2025 17:18:48 +0800 Subject: [PATCH 1997/2002] Committed on or around 2025/10/04 --- .../2025/August/At_metro_level.py | 103 ++++++++++++++++++ .../2025/August/CC0.png | Bin 0 -> 980 bytes 2 files changed, 103 insertions(+) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py new file mode 100644 index 00000000..133a4832 --- /dev/null +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py @@ -0,0 +1,103 @@ +import matplotlib.pyplot as plt +import matplotlib +import matplotlib.cbook as cbook +import matplotlib.colors as colour +import numpy as np +import matplotlib.image as image +# Using the magic encoding +# -*- coding: utf-8 -*- +from matplotlib.transforms import IdentityTransform + +matplotlib.rc('font', family="MS Gothic") + +region_num = [1, 2, 3, 4, 5] +position_vacancies = [2548+125333+77120+4472, 54148+36073+7249, 66678+12235+3914, 5088+7870+30806, 43275+5021] + +label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", + "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] + +fig, ax = plt.subplots(figsize=(9, 9)) +plt.xticks(region_num, labels=label, rotation=7, fontsize=12) +# plt.yticks([0, 250, 300, 350, 400, 450, 500, 550]) +plt.tick_params(axis='y', labelsize=12) # [2] + +plot = ax.bar(region_num, position_vacancies, edgecolor='black', color=[colour.CSS4_COLORS.get('darkblue'), + colour.CSS4_COLORS.get('mediumblue'), + colour.CSS4_COLORS.get('blue'), + 'none', + colour.CSS4_COLORS.get('palegreen')]) #[4][5][6] + +for rect in plot: + height = rect.get_height() + ax.text(rect.get_x() + rect.get_width() / 2., 1.002 * height, + '%d' % int(height), ha='center', va='bottom', fontsize=12) + +plt.title("2025/08 啁瘣餃瑞撩稞n the number of job openings in Taiwan by metro", fontsize=20) + +# plt.ylabel("") +plt.xlabel("鞈 Reference https://archive.ph/pMkqg") + +plt.ylim(40000, 200000) + +img = image.imread('CC0.png') # CC0.png downloaded from [7]. + +plt.figimage(X=img, xo=800, yo=800, alpha=0.9) + +# Insert text watermark [1] +plt.text(x=0.6, y=0.7, s="Non-copyrighted image\n∠甈", fontsize=40, color='grey', alpha=0.9, + ha='center', va='center', rotation=30, + transform=ax.transAxes) # data coordinates [2] [Note1] [3] [Note2] + +cmap = matplotlib.colormaps.get_cmap('winter') # [8][9] + +counter = 0 + +for rect in plot: # [8][9] + + if rect is not None: + + counter = counter + 1 + + if counter == 4: + + # Bar position and size + x = rect.get_x() + width = rect.get_width() + height = rect.get_height() + + # Create a grid inside the bar + nx = 100 # Number of divisions horizontally + ny = 100 # Number of divisions vertically + X = np.linspace(x, x + width, nx) + Y = np.linspace(0, height, ny) + X, Y = np.meshgrid(X, Y) + + # Color based on horizontal position (left to right) + Z = (X - x) / width # Normalize X inside the bar (0 to 1) + + # Draw gradient + ax.pcolormesh(X, Y, Z, cmap=cmap, shading='auto') + + + + +plt.show() + +# Reference: +# 1. https://matplotlib.org/stable/gallery/text_labels_and_annotations/watermark_text.html +# 2. https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html +# 3. https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text +# 4. https://www.google.com/search?q=matplotlib+bar+color +# 5. https://www.python-graph-gallery.com/3-control-color-of-barplots +# 6. https://matplotlib.org/stable/gallery/color/named_colors.html +# 7. https://creativecommons.org/public-domain/cc0/ +# 8. https://chatgpt.com/c/680c6f49-95b4-8008-85f4-3941744f62e4 +# 9. Untitled5.ipynb @ my Google Colab. + +# Notes: +# 1. pixel coordinate system of the display window; (0, 0) is bottom left of the window, +# and (width, height) is top right of the display window in pixels.[2] +# +# 2. default transform specifies that text is in data coords, +# alternatively, you can specify text in axis coords ((0, 0) is lower-left and (1, 1) is upper-right). +# The example below places text in the center of the Axes:[3] diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000 Date: Sat, 4 Oct 2025 17:20:01 +0800 Subject: [PATCH 1998/2002] Committed on or around 2025/10/04 --- .../2025/August/At_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py index 133a4832..7047b4ca 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2548+125333+77120+4472, 54148+36073+7249, 66678+12235+3914, 5088+7870+30806, 43275+5021] +position_vacancies = [2548+125333+77120+4472, 54232+35557+7123, 66678+12235+3914, 5088+7870+30806, 43275+5021] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 833717c166582ce16b8f1e1a2a04f0d143b58890 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 4 Oct 2025 17:20:43 +0800 Subject: [PATCH 1999/2002] Committed on or around 2025/10/04 --- .../2025/August/At_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py index 7047b4ca..1ea71280 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2548+125333+77120+4472, 54232+35557+7123, 66678+12235+3914, 5088+7870+30806, 43275+5021] +position_vacancies = [2548+125333+77120+4472, 54232+35557+7123, 64774+11679+3769, 5088+7870+30806, 43275+5021] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From f8eb7114c538ba98966f3e9796791a05262a9d60 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 4 Oct 2025 17:22:04 +0800 Subject: [PATCH 2000/2002] Committed on or around 2025/10/04 --- .../2025/August/At_metro_level.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py index 1ea71280..73386c02 100644 --- a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py +++ b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/August/At_metro_level.py @@ -11,7 +11,7 @@ matplotlib.rc('font', family="MS Gothic") region_num = [1, 2, 3, 4, 5] -position_vacancies = [2548+125333+77120+4472, 54232+35557+7123, 64774+11679+3769, 5088+7870+30806, 43275+5021] +position_vacancies = [2548+125333+77120+4472, 54232+35557+7123, 64774+11679+3769, 4984+7987+30050, 42510+4816] label = ["憭批啣 Greater\nTaipei", "獢 Taoyuan\n啁姘 Hsinchu\n Miaoli", "唬葉 Taichung\n敶啣 Changhua\n Nantou", "脫 Yunlin\n蝢 Chiayi\n啣 Tainan", "擃 Kaohsiung\n撅 Pingtung"] From 3dab02c402e6646b301b73b6ffbdef7662b96745 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 4 Oct 2025 21:11:32 +0800 Subject: [PATCH 2001/2002] Committed on or around 2025/10/04 --- .../Monthly_total_job_openings_by_region/2025/October/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/__init__.py diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/__init__.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/__init__.py new file mode 100644 index 00000000..e69de29b From 08ff8632de7afcc7362ad628bf2e72c78f0b49d2 Mon Sep 17 00:00:00 2001 From: Ceiling_roof <48134466+ResilientSpring@users.noreply.github.com> Date: Sat, 4 Oct 2025 21:37:20 +0800 Subject: [PATCH 2002/2002] Committed on or around 2025/10/04 --- .../2025/October/At city level.py | 0 .../2025/October/At metro level.py | 0 .../2025/October/CC0.png | Bin 0 -> 980 bytes .../2025/September/At metro level.py | 0 .../2025/September/CC0.png | Bin 0 -> 980 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/At city level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/At metro level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/CC0.png create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/September/At metro level.py create mode 100644 The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/September/CC0.png diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/At city level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/At city level.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/At metro level.py b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/At metro level.py new file mode 100644 index 00000000..e69de29b diff --git a/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/CC0.png b/The attainments and realizations of my dreams/Monthly_total_job_openings_by_region/2025/October/CC0.png new file mode 100644 index 0000000000000000000000000000000000000000..1098629811b136a68d1519505a28aa14c0ef8654 GIT binary patch literal 980 zcmV;_11tQAP)`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000`}_L&_xbtx`S|wu`1tqt_xASo_Vx4i_4V}h^z-xc^78WW@$v8P z@9gaC>gww4>f!3@=j!R_>FDU_=jG?;=jP_-<>lq%c#l^qBzrMb{y1Kfzx3{maub-cvo}QkU zmzR)`kdKd#j*gCvjg5Bhr_`chT}SjquU6OZ|HA)9C6D8}{Y#T+yAW6f0IfAd z#tMM%4|bl01;E)2hK}OAwKaYH2RZTHH;6vwS40 zUT~Wc$$DNgu)jGy%y5qc;w)yEGwi)jFtloGvSV;wOR57j11MVo&BpfE8C>?sm9HF_ zQW*}K$aG_HfS;X(0RjX{wUG6@2_EX?R3HRk48{Ok#NJQ&0?*ya6-QJI$cYs<%3srR+X#WtBdyzhf`XkA>(^VG&Rg! z+H~X!9MuR+P4UPuYbtKNw)GCVq_B;E*JN4*4mEeq2@6o!ekuZL4&&G3$aGW{6SsQh z@$W_4K?Fc>tQ5P51VM|;m-%-u5pYv)ht!ew>y_MQ2=g{3{aEv>)J=c!SwH-csW0000