Skip to content

Instantly share code, notes, and snippets.

@terapyon
Last active February 23, 2018 11:24
Show Gist options
  • Save terapyon/14b00d1d41c4053c7d38980679c48307 to your computer and use it in GitHub Desktop.
Save terapyon/14b00d1d41c4053c7d38980679c48307 to your computer and use it in GitHub Desktop.
アイスクリーム売上相関
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# アイスクリームと気温の相関\n",
"Pythonによるテキストマイニング入門から"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"アイスクリームの売上 (一般社団法人日本アイスクリーム協会サイトから)\n",
"https://www.icecream.or.jp/data/expenditures.html\n",
"\n",
"平均気温 (気象庁のサイトから)\n",
"http://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=44&block_no=47662&year=2016&month=&day=&view=a2"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"icecream_data_tables = pd.read_html(\"https://www.icecream.or.jp/data/expenditures.html\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(icecream_data_tables)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"icecream = icecream_data_tables[0]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>NaN</td>\n",
" <td>2012年</td>\n",
" <td>2013年</td>\n",
" <td>2014年</td>\n",
" <td>2015年</td>\n",
" <td>2016年</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1 月</td>\n",
" <td>339</td>\n",
" <td>363</td>\n",
" <td>396</td>\n",
" <td>401</td>\n",
" <td>464</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2 月</td>\n",
" <td>274</td>\n",
" <td>322</td>\n",
" <td>309</td>\n",
" <td>345</td>\n",
" <td>397</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3 月</td>\n",
" <td>385</td>\n",
" <td>438</td>\n",
" <td>447</td>\n",
" <td>480</td>\n",
" <td>493</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4 月</td>\n",
" <td>524</td>\n",
" <td>525</td>\n",
" <td>520</td>\n",
" <td>590</td>\n",
" <td>617</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5 月</td>\n",
" <td>671</td>\n",
" <td>761</td>\n",
" <td>803</td>\n",
" <td>928</td>\n",
" <td>890</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6 月</td>\n",
" <td>798</td>\n",
" <td>878</td>\n",
" <td>900</td>\n",
" <td>894</td>\n",
" <td>883</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>7 月</td>\n",
" <td>1165</td>\n",
" <td>1234</td>\n",
" <td>1202</td>\n",
" <td>1257</td>\n",
" <td>1292</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8 月</td>\n",
" <td>1332</td>\n",
" <td>1437</td>\n",
" <td>1238</td>\n",
" <td>1384</td>\n",
" <td>1387</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>9 月</td>\n",
" <td>849</td>\n",
" <td>794</td>\n",
" <td>748</td>\n",
" <td>768</td>\n",
" <td>843</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>10 月</td>\n",
" <td>515</td>\n",
" <td>549</td>\n",
" <td>570</td>\n",
" <td>603</td>\n",
" <td>621</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>11 月</td>\n",
" <td>326</td>\n",
" <td>370</td>\n",
" <td>419</td>\n",
" <td>478</td>\n",
" <td>459</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>12 月</td>\n",
" <td>414</td>\n",
" <td>445</td>\n",
" <td>455</td>\n",
" <td>581</td>\n",
" <td>561</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>年 計</td>\n",
" <td>7591</td>\n",
" <td>8115</td>\n",
" <td>8006</td>\n",
" <td>8708</td>\n",
" <td>8908</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 4 5\n",
"0 NaN 2012年 2013年 2014年 2015年 2016年\n",
"1 1 月 339 363 396 401 464\n",
"2 2 月 274 322 309 345 397\n",
"3 3 月 385 438 447 480 493\n",
"4 4 月 524 525 520 590 617\n",
"5 5 月 671 761 803 928 890\n",
"6 6 月 798 878 900 894 883\n",
"7 7 月 1165 1234 1202 1257 1292\n",
"8 8 月 1332 1437 1238 1384 1387\n",
"9 9 月 849 794 748 768 843\n",
"10 10 月 515 549 570 603 621\n",
"11 11 月 326 370 419 478 459\n",
"12 12 月 414 445 455 581 561\n",
"13 年 計 7591 8115 8006 8708 8908"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"icecream"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"icecream_2016 = icecream.iloc[1:13, 5]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 464\n",
"2 397\n",
"3 493\n",
"4 617\n",
"5 890\n",
"6 883\n",
"7 1292\n",
"8 1387\n",
"9 843\n",
"10 621\n",
"11 459\n",
"12 561\n",
"Name: 5, dtype: object"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"icecream_2016"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"icecream_2016 = icecream_2016.apply(lambda x: np.int32(x))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 464\n",
"2 397\n",
"3 493\n",
"4 617\n",
"5 890\n",
"6 883\n",
"7 1292\n",
"8 1387\n",
"9 843\n",
"10 621\n",
"11 459\n",
"12 561\n",
"Name: 5, dtype: int64"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"icecream_2016"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"temperature_data_tables = pd.read_html(\"http://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=44&block_no=47662&year=2016&month=&day=&view=a2\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(temperature_data_tables)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>10</th>\n",
" <th>11</th>\n",
" <th>12</th>\n",
" <th>13</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>年</td>\n",
" <td>1月</td>\n",
" <td>2月</td>\n",
" <td>3月</td>\n",
" <td>4月</td>\n",
" <td>5月</td>\n",
" <td>6月</td>\n",
" <td>7月</td>\n",
" <td>8月</td>\n",
" <td>9月</td>\n",
" <td>10月</td>\n",
" <td>11月</td>\n",
" <td>12月</td>\n",
" <td>年の値</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1875</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>25.5 ]</td>\n",
" <td>30.1 )</td>\n",
" <td>29.4</td>\n",
" <td>25.6</td>\n",
" <td>19.9</td>\n",
" <td>16.1 )</td>\n",
" <td>10.2</td>\n",
" <td>21.9 ]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1876</td>\n",
" <td>6.6</td>\n",
" <td>8.2</td>\n",
" <td>13.6</td>\n",
" <td>17.5</td>\n",
" <td>21.7</td>\n",
" <td>22.8</td>\n",
" <td>28.6</td>\n",
" <td>31.6</td>\n",
" <td>26.8 )</td>\n",
" <td>20.4 )</td>\n",
" <td>15.8</td>\n",
" <td>11.0</td>\n",
" <td>18.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1877</td>\n",
" <td>8.8</td>\n",
" <td>8.8</td>\n",
" <td>11.3 )</td>\n",
" <td>19.1 )</td>\n",
" <td>21.5 )</td>\n",
" <td>26.0</td>\n",
" <td>31.0</td>\n",
" <td>30.5</td>\n",
" <td>25.8</td>\n",
" <td>21.3</td>\n",
" <td>14.4</td>\n",
" <td>10.2</td>\n",
" <td>19.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1878</td>\n",
" <td>7.2</td>\n",
" <td>7.1</td>\n",
" <td>12.9</td>\n",
" <td>16.2</td>\n",
" <td>22.7</td>\n",
" <td>24.1</td>\n",
" <td>29.8</td>\n",
" <td>28.5</td>\n",
" <td>26.3</td>\n",
" <td>20.2</td>\n",
" <td>14.1</td>\n",
" <td>10.9</td>\n",
" <td>18.3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 4 5 6 7 8 9 \\\n",
"0 年 1月 2月 3月 4月 5月 6月 7月 8月 9月 \n",
"1 1875 NaN NaN NaN NaN NaN 25.5 ] 30.1 ) 29.4 25.6 \n",
"2 1876 6.6 8.2 13.6 17.5 21.7 22.8 28.6 31.6 26.8 ) \n",
"3 1877 8.8 8.8 11.3 ) 19.1 ) 21.5 ) 26.0 31.0 30.5 25.8 \n",
"4 1878 7.2 7.1 12.9 16.2 22.7 24.1 29.8 28.5 26.3 \n",
"\n",
" 10 11 12 13 \n",
"0 10月 11月 12月 年の値 \n",
"1 19.9 16.1 ) 10.2 21.9 ] \n",
"2 20.4 ) 15.8 11.0 18.7 \n",
"3 21.3 14.4 10.2 19.1 \n",
"4 20.2 14.1 10.9 18.3 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temperature_data_tables[0].head()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>利用される方へ</td>\n",
" <td>よくある質問(FAQ)</td>\n",
" <td>気象観測統計の解説</td>\n",
" <td>年・季節・各月の天候</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3\n",
"0 利用される方へ よくある質問(FAQ) 気象観測統計の解説 年・季節・各月の天候"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temperature_data_tables[1].head()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"temperature = temperature_data_tables[0]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>10</th>\n",
" <th>11</th>\n",
" <th>12</th>\n",
" <th>13</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>年</td>\n",
" <td>1月</td>\n",
" <td>2月</td>\n",
" <td>3月</td>\n",
" <td>4月</td>\n",
" <td>5月</td>\n",
" <td>6月</td>\n",
" <td>7月</td>\n",
" <td>8月</td>\n",
" <td>9月</td>\n",
" <td>10月</td>\n",
" <td>11月</td>\n",
" <td>12月</td>\n",
" <td>年の値</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1875</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>25.5 ]</td>\n",
" <td>30.1 )</td>\n",
" <td>29.4</td>\n",
" <td>25.6</td>\n",
" <td>19.9</td>\n",
" <td>16.1 )</td>\n",
" <td>10.2</td>\n",
" <td>21.9 ]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1876</td>\n",
" <td>6.6</td>\n",
" <td>8.2</td>\n",
" <td>13.6</td>\n",
" <td>17.5</td>\n",
" <td>21.7</td>\n",
" <td>22.8</td>\n",
" <td>28.6</td>\n",
" <td>31.6</td>\n",
" <td>26.8 )</td>\n",
" <td>20.4 )</td>\n",
" <td>15.8</td>\n",
" <td>11.0</td>\n",
" <td>18.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1877</td>\n",
" <td>8.8</td>\n",
" <td>8.8</td>\n",
" <td>11.3 )</td>\n",
" <td>19.1 )</td>\n",
" <td>21.5 )</td>\n",
" <td>26.0</td>\n",
" <td>31.0</td>\n",
" <td>30.5</td>\n",
" <td>25.8</td>\n",
" <td>21.3</td>\n",
" <td>14.4</td>\n",
" <td>10.2</td>\n",
" <td>19.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1878</td>\n",
" <td>7.2</td>\n",
" <td>7.1</td>\n",
" <td>12.9</td>\n",
" <td>16.2</td>\n",
" <td>22.7</td>\n",
" <td>24.1</td>\n",
" <td>29.8</td>\n",
" <td>28.5</td>\n",
" <td>26.3</td>\n",
" <td>20.2</td>\n",
" <td>14.1</td>\n",
" <td>10.9</td>\n",
" <td>18.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1879</td>\n",
" <td>9.0</td>\n",
" <td>10.9</td>\n",
" <td>13.0</td>\n",
" <td>17.1</td>\n",
" <td>21.9</td>\n",
" <td>25.2</td>\n",
" <td>30.4</td>\n",
" <td>31.1</td>\n",
" <td>25.4</td>\n",
" <td>19.4</td>\n",
" <td>15.7</td>\n",
" <td>14.0</td>\n",
" <td>19.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1880</td>\n",
" <td>8.8</td>\n",
" <td>10.1</td>\n",
" <td>13.8</td>\n",
" <td>16.7</td>\n",
" <td>22.6</td>\n",
" <td>23.9</td>\n",
" <td>28.0</td>\n",
" <td>29.5</td>\n",
" <td>27.0</td>\n",
" <td>21.6</td>\n",
" <td>16.8</td>\n",
" <td>11.1</td>\n",
" <td>19.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1881</td>\n",
" <td>8.9</td>\n",
" <td>9.4</td>\n",
" <td>10.5</td>\n",
" <td>16.9</td>\n",
" <td>22.5</td>\n",
" <td>25.6</td>\n",
" <td>27.9</td>\n",
" <td>31.1</td>\n",
" <td>26.2</td>\n",
" <td>20.7</td>\n",
" <td>16.6</td>\n",
" <td>9.6</td>\n",
" <td>18.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1882</td>\n",
" <td>10.2</td>\n",
" <td>9.6</td>\n",
" <td>12.5</td>\n",
" <td>18.4</td>\n",
" <td>21.9</td>\n",
" <td>24.0</td>\n",
" <td>28.2</td>\n",
" <td>28.5</td>\n",
" <td>24.8</td>\n",
" <td>20.0</td>\n",
" <td>14.8</td>\n",
" <td>10.8</td>\n",
" <td>18.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1883</td>\n",
" <td>8.6</td>\n",
" <td>5.8</td>\n",
" <td>10.2</td>\n",
" <td>16.6</td>\n",
" <td>19.9</td>\n",
" <td>23.6</td>\n",
" <td>27.2</td>\n",
" <td>29.3</td>\n",
" <td>25.6</td>\n",
" <td>20.5</td>\n",
" <td>15.4</td>\n",
" <td>11.1</td>\n",
" <td>17.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1884</td>\n",
" <td>8.4</td>\n",
" <td>8.1</td>\n",
" <td>10.7</td>\n",
" <td>16.2</td>\n",
" <td>20.2</td>\n",
" <td>23.6</td>\n",
" <td>27.0</td>\n",
" <td>28.1</td>\n",
" <td>26.5</td>\n",
" <td>20.6</td>\n",
" <td>12.9</td>\n",
" <td>9.5</td>\n",
" <td>17.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>1885</td>\n",
" <td>5.7</td>\n",
" <td>7.2</td>\n",
" <td>10.0</td>\n",
" <td>14.8</td>\n",
" <td>19.3</td>\n",
" <td>23.4</td>\n",
" <td>26.6</td>\n",
" <td>29.0</td>\n",
" <td>26.0</td>\n",
" <td>20.5</td>\n",
" <td>15.6</td>\n",
" <td>11.3</td>\n",
" <td>17.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>1886</td>\n",
" <td>8.2</td>\n",
" <td>7.3</td>\n",
" <td>12.0</td>\n",
" <td>16.9</td>\n",
" <td>20.3</td>\n",
" <td>25.1</td>\n",
" <td>29.3</td>\n",
" <td>31.2</td>\n",
" <td>26.9</td>\n",
" <td>21.0</td>\n",
" <td>15.6</td>\n",
" <td>11.0</td>\n",
" <td>18.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>1887</td>\n",
" <td>6.2</td>\n",
" <td>9.8</td>\n",
" <td>12.8</td>\n",
" <td>17.3</td>\n",
" <td>19.2</td>\n",
" <td>24.1</td>\n",
" <td>27.4</td>\n",
" <td>29.3</td>\n",
" <td>25.4</td>\n",
" <td>21.4</td>\n",
" <td>17.5</td>\n",
" <td>12.7</td>\n",
" <td>18.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>1888</td>\n",
" <td>9.8</td>\n",
" <td>7.3</td>\n",
" <td>13.1</td>\n",
" <td>17.5</td>\n",
" <td>20.4</td>\n",
" <td>22.8</td>\n",
" <td>28.3</td>\n",
" <td>29.7</td>\n",
" <td>25.1</td>\n",
" <td>20.0</td>\n",
" <td>16.4</td>\n",
" <td>11.0</td>\n",
" <td>18.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>1889</td>\n",
" <td>7.5</td>\n",
" <td>8.4</td>\n",
" <td>12.2</td>\n",
" <td>16.3</td>\n",
" <td>20.3</td>\n",
" <td>25.0</td>\n",
" <td>26.9</td>\n",
" <td>30.0</td>\n",
" <td>24.1</td>\n",
" <td>19.6</td>\n",
" <td>14.8</td>\n",
" <td>10.6</td>\n",
" <td>18.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>1890</td>\n",
" <td>8.6</td>\n",
" <td>11.1</td>\n",
" <td>13.2</td>\n",
" <td>18.7</td>\n",
" <td>19.9</td>\n",
" <td>26.0</td>\n",
" <td>27.3</td>\n",
" <td>29.0</td>\n",
" <td>28.3</td>\n",
" <td>20.3</td>\n",
" <td>16.2</td>\n",
" <td>14.7</td>\n",
" <td>19.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>1891</td>\n",
" <td>8.8</td>\n",
" <td>8.6</td>\n",
" <td>13.7</td>\n",
" <td>16.6</td>\n",
" <td>23.4</td>\n",
" <td>24.2</td>\n",
" <td>28.7</td>\n",
" <td>29.6</td>\n",
" <td>28.4</td>\n",
" <td>21.8</td>\n",
" <td>16.0</td>\n",
" <td>11.9</td>\n",
" <td>19.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>1892</td>\n",
" <td>9.0</td>\n",
" <td>9.0</td>\n",
" <td>9.9</td>\n",
" <td>17.9</td>\n",
" <td>21.1</td>\n",
" <td>24.1</td>\n",
" <td>29.7</td>\n",
" <td>31.1</td>\n",
" <td>26.8</td>\n",
" <td>20.3</td>\n",
" <td>15.0</td>\n",
" <td>9.3</td>\n",
" <td>18.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>1893</td>\n",
" <td>8.5</td>\n",
" <td>6.9</td>\n",
" <td>11.8</td>\n",
" <td>18.2</td>\n",
" <td>20.1</td>\n",
" <td>24.6</td>\n",
" <td>30.2</td>\n",
" <td>30.6</td>\n",
" <td>26.9</td>\n",
" <td>20.3</td>\n",
" <td>15.8</td>\n",
" <td>11.1</td>\n",
" <td>18.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>1894</td>\n",
" <td>8.2</td>\n",
" <td>9.3</td>\n",
" <td>13.0</td>\n",
" <td>18.6</td>\n",
" <td>20.9</td>\n",
" <td>28.1</td>\n",
" <td>31.6</td>\n",
" <td>31.5</td>\n",
" <td>25.5</td>\n",
" <td>19.5</td>\n",
" <td>17.2</td>\n",
" <td>11.7</td>\n",
" <td>19.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>1895</td>\n",
" <td>7.7</td>\n",
" <td>9.4</td>\n",
" <td>11.8</td>\n",
" <td>18.2</td>\n",
" <td>22.2</td>\n",
" <td>24.5</td>\n",
" <td>25.7</td>\n",
" <td>29.7</td>\n",
" <td>27.1</td>\n",
" <td>20.9</td>\n",
" <td>15.2</td>\n",
" <td>11.4</td>\n",
" <td>18.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>1896</td>\n",
" <td>9.3</td>\n",
" <td>8.5</td>\n",
" <td>10.9</td>\n",
" <td>18.2</td>\n",
" <td>20.8</td>\n",
" <td>25.7</td>\n",
" <td>28.1</td>\n",
" <td>30.4</td>\n",
" <td>26.2</td>\n",
" <td>20.0</td>\n",
" <td>16.1</td>\n",
" <td>10.2</td>\n",
" <td>18.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>1897</td>\n",
" <td>8.1</td>\n",
" <td>8.4</td>\n",
" <td>10.1</td>\n",
" <td>15.7</td>\n",
" <td>21.9</td>\n",
" <td>22.9</td>\n",
" <td>26.5</td>\n",
" <td>29.2</td>\n",
" <td>24.7</td>\n",
" <td>20.2</td>\n",
" <td>15.1</td>\n",
" <td>10.0</td>\n",
" <td>17.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>1898</td>\n",
" <td>7.9</td>\n",
" <td>9.3</td>\n",
" <td>10.1</td>\n",
" <td>16.0</td>\n",
" <td>21.3</td>\n",
" <td>23.2</td>\n",
" <td>30.3</td>\n",
" <td>30.6</td>\n",
" <td>25.6</td>\n",
" <td>20.6</td>\n",
" <td>15.7</td>\n",
" <td>11.3</td>\n",
" <td>18.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>1899</td>\n",
" <td>8.9</td>\n",
" <td>9.2</td>\n",
" <td>13.6</td>\n",
" <td>17.8</td>\n",
" <td>22.7</td>\n",
" <td>25.8</td>\n",
" <td>26.9</td>\n",
" <td>30.2</td>\n",
" <td>23.5</td>\n",
" <td>19.7</td>\n",
" <td>14.6</td>\n",
" <td>10.3</td>\n",
" <td>18.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>1900</td>\n",
" <td>6.0</td>\n",
" <td>8.2</td>\n",
" <td>10.8</td>\n",
" <td>15.7</td>\n",
" <td>22.3</td>\n",
" <td>24.0</td>\n",
" <td>26.5</td>\n",
" <td>30.5</td>\n",
" <td>26.9</td>\n",
" <td>21.6</td>\n",
" <td>16.3</td>\n",
" <td>11.5</td>\n",
" <td>18.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>1901</td>\n",
" <td>9.0</td>\n",
" <td>9.5</td>\n",
" <td>12.9</td>\n",
" <td>18.1</td>\n",
" <td>20.8</td>\n",
" <td>24.6</td>\n",
" <td>26.0</td>\n",
" <td>29.9</td>\n",
" <td>26.7</td>\n",
" <td>21.2</td>\n",
" <td>15.7</td>\n",
" <td>10.7</td>\n",
" <td>18.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>1902</td>\n",
" <td>8.6</td>\n",
" <td>9.1</td>\n",
" <td>13.5</td>\n",
" <td>16.9</td>\n",
" <td>20.7</td>\n",
" <td>24.1</td>\n",
" <td>25.6</td>\n",
" <td>26.2</td>\n",
" <td>26.4</td>\n",
" <td>21.3</td>\n",
" <td>16.3</td>\n",
" <td>11.4</td>\n",
" <td>18.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>1903</td>\n",
" <td>9.0</td>\n",
" <td>8.9</td>\n",
" <td>12.1</td>\n",
" <td>17.2</td>\n",
" <td>20.6</td>\n",
" <td>24.2</td>\n",
" <td>26.9</td>\n",
" <td>31.0</td>\n",
" <td>26.6</td>\n",
" <td>18.9</td>\n",
" <td>14.0</td>\n",
" <td>9.2</td>\n",
" <td>18.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115</th>\n",
" <td>1989</td>\n",
" <td>11.4</td>\n",
" <td>11.1</td>\n",
" <td>13.6</td>\n",
" <td>19.6</td>\n",
" <td>21.5</td>\n",
" <td>23.8</td>\n",
" <td>27.4</td>\n",
" <td>30.5</td>\n",
" <td>28.4</td>\n",
" <td>20.7</td>\n",
" <td>17.7</td>\n",
" <td>12.8</td>\n",
" <td>19.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>1990</td>\n",
" <td>8.8</td>\n",
" <td>10.5</td>\n",
" <td>14.4</td>\n",
" <td>18.6</td>\n",
" <td>23.1</td>\n",
" <td>27.0</td>\n",
" <td>29.2</td>\n",
" <td>32.4</td>\n",
" <td>28.1</td>\n",
" <td>22.4</td>\n",
" <td>19.0</td>\n",
" <td>13.6</td>\n",
" <td>20.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>117</th>\n",
" <td>1991</td>\n",
" <td>10.1</td>\n",
" <td>10.5</td>\n",
" <td>13.1</td>\n",
" <td>18.8</td>\n",
" <td>22.7</td>\n",
" <td>26.9</td>\n",
" <td>30.1</td>\n",
" <td>29.1</td>\n",
" <td>26.9</td>\n",
" <td>20.7</td>\n",
" <td>16.4</td>\n",
" <td>12.7</td>\n",
" <td>19.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>1992</td>\n",
" <td>10.5</td>\n",
" <td>10.8</td>\n",
" <td>13.1</td>\n",
" <td>19.1</td>\n",
" <td>21.1</td>\n",
" <td>23.7</td>\n",
" <td>29.2</td>\n",
" <td>30.4</td>\n",
" <td>26.9</td>\n",
" <td>20.5</td>\n",
" <td>16.9</td>\n",
" <td>12.9</td>\n",
" <td>19.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>119</th>\n",
" <td>1993</td>\n",
" <td>9.1</td>\n",
" <td>11.8</td>\n",
" <td>12.5</td>\n",
" <td>17.8</td>\n",
" <td>22.3</td>\n",
" <td>25.0</td>\n",
" <td>25.3</td>\n",
" <td>28.0</td>\n",
" <td>25.8</td>\n",
" <td>20.8</td>\n",
" <td>17.7</td>\n",
" <td>12.3</td>\n",
" <td>19.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>1994</td>\n",
" <td>9.1</td>\n",
" <td>10.6</td>\n",
" <td>11.6</td>\n",
" <td>19.8</td>\n",
" <td>23.4</td>\n",
" <td>26.0</td>\n",
" <td>31.8</td>\n",
" <td>32.9</td>\n",
" <td>28.1</td>\n",
" <td>23.0</td>\n",
" <td>17.1</td>\n",
" <td>12.8</td>\n",
" <td>20.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>121</th>\n",
" <td>1995</td>\n",
" <td>10.2</td>\n",
" <td>10.1</td>\n",
" <td>13.0</td>\n",
" <td>19.1</td>\n",
" <td>22.7</td>\n",
" <td>23.5</td>\n",
" <td>29.6</td>\n",
" <td>33.7</td>\n",
" <td>27.4</td>\n",
" <td>23.0</td>\n",
" <td>16.7</td>\n",
" <td>12.1</td>\n",
" <td>20.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>122</th>\n",
" <td>1996</td>\n",
" <td>10.4</td>\n",
" <td>9.4</td>\n",
" <td>13.1</td>\n",
" <td>17.0</td>\n",
" <td>22.0</td>\n",
" <td>26.4</td>\n",
" <td>30.0</td>\n",
" <td>30.0</td>\n",
" <td>26.3</td>\n",
" <td>21.7</td>\n",
" <td>16.7</td>\n",
" <td>13.6</td>\n",
" <td>19.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>123</th>\n",
" <td>1997</td>\n",
" <td>11.3</td>\n",
" <td>11.2</td>\n",
" <td>14.7</td>\n",
" <td>19.2</td>\n",
" <td>23.2</td>\n",
" <td>26.6</td>\n",
" <td>30.7</td>\n",
" <td>30.7</td>\n",
" <td>26.4</td>\n",
" <td>22.8</td>\n",
" <td>18.1</td>\n",
" <td>12.4</td>\n",
" <td>20.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>124</th>\n",
" <td>1998</td>\n",
" <td>9.3</td>\n",
" <td>11.3</td>\n",
" <td>14.4</td>\n",
" <td>20.1</td>\n",
" <td>24.6</td>\n",
" <td>24.6</td>\n",
" <td>29.0</td>\n",
" <td>31.0</td>\n",
" <td>27.7</td>\n",
" <td>23.5</td>\n",
" <td>17.7</td>\n",
" <td>12.6</td>\n",
" <td>20.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>125</th>\n",
" <td>1999</td>\n",
" <td>10.8</td>\n",
" <td>11.2</td>\n",
" <td>13.7</td>\n",
" <td>18.7</td>\n",
" <td>24.0</td>\n",
" <td>26.5</td>\n",
" <td>29.9</td>\n",
" <td>32.3</td>\n",
" <td>29.6</td>\n",
" <td>23.0</td>\n",
" <td>17.8</td>\n",
" <td>12.7</td>\n",
" <td>20.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>126</th>\n",
" <td>2000</td>\n",
" <td>11.2</td>\n",
" <td>9.9</td>\n",
" <td>13.5</td>\n",
" <td>18.7</td>\n",
" <td>24.0</td>\n",
" <td>26.1</td>\n",
" <td>31.6</td>\n",
" <td>32.4</td>\n",
" <td>28.9</td>\n",
" <td>21.9</td>\n",
" <td>16.7</td>\n",
" <td>12.6</td>\n",
" <td>20.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>127</th>\n",
" <td>2001</td>\n",
" <td>8.6</td>\n",
" <td>10.7</td>\n",
" <td>14.4</td>\n",
" <td>20.4</td>\n",
" <td>23.0</td>\n",
" <td>26.6</td>\n",
" <td>33.0</td>\n",
" <td>30.0</td>\n",
" <td>26.4</td>\n",
" <td>22.5</td>\n",
" <td>16.7</td>\n",
" <td>12.0</td>\n",
" <td>20.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>128</th>\n",
" <td>2002</td>\n",
" <td>11.5</td>\n",
" <td>11.9</td>\n",
" <td>16.5</td>\n",
" <td>20.3</td>\n",
" <td>22.3</td>\n",
" <td>25.3</td>\n",
" <td>31.7</td>\n",
" <td>32.1</td>\n",
" <td>26.2</td>\n",
" <td>22.6</td>\n",
" <td>15.2</td>\n",
" <td>10.4</td>\n",
" <td>20.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>129</th>\n",
" <td>2003</td>\n",
" <td>9.3</td>\n",
" <td>9.9</td>\n",
" <td>12.7</td>\n",
" <td>19.2</td>\n",
" <td>22.4</td>\n",
" <td>26.6</td>\n",
" <td>26.0</td>\n",
" <td>29.5</td>\n",
" <td>28.1</td>\n",
" <td>21.4</td>\n",
" <td>17.4</td>\n",
" <td>13.2</td>\n",
" <td>19.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>130</th>\n",
" <td>2004</td>\n",
" <td>10.1</td>\n",
" <td>12.9</td>\n",
" <td>14.0</td>\n",
" <td>21.3</td>\n",
" <td>23.7</td>\n",
" <td>27.5</td>\n",
" <td>33.1</td>\n",
" <td>31.0</td>\n",
" <td>28.7</td>\n",
" <td>20.7</td>\n",
" <td>19.0</td>\n",
" <td>13.4</td>\n",
" <td>21.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>131</th>\n",
" <td>2005</td>\n",
" <td>10.0</td>\n",
" <td>9.9</td>\n",
" <td>13.1</td>\n",
" <td>19.6</td>\n",
" <td>21.9</td>\n",
" <td>26.7</td>\n",
" <td>29.1</td>\n",
" <td>31.8</td>\n",
" <td>28.2</td>\n",
" <td>22.3</td>\n",
" <td>17.0</td>\n",
" <td>10.2</td>\n",
" <td>20.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>132</th>\n",
" <td>2006</td>\n",
" <td>8.5</td>\n",
" <td>10.5</td>\n",
" <td>14.0</td>\n",
" <td>17.5</td>\n",
" <td>22.7</td>\n",
" <td>25.4</td>\n",
" <td>28.6</td>\n",
" <td>31.1</td>\n",
" <td>27.1</td>\n",
" <td>22.9</td>\n",
" <td>17.9</td>\n",
" <td>12.5</td>\n",
" <td>19.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>133</th>\n",
" <td>2007</td>\n",
" <td>10.9</td>\n",
" <td>12.8</td>\n",
" <td>15.0</td>\n",
" <td>17.9</td>\n",
" <td>24.0</td>\n",
" <td>27.1</td>\n",
" <td>27.4</td>\n",
" <td>33.0</td>\n",
" <td>28.5</td>\n",
" <td>22.2</td>\n",
" <td>16.6</td>\n",
" <td>12.6</td>\n",
" <td>20.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>134</th>\n",
" <td>2008</td>\n",
" <td>9.4</td>\n",
" <td>9.6</td>\n",
" <td>14.9</td>\n",
" <td>18.4</td>\n",
" <td>22.0</td>\n",
" <td>24.6</td>\n",
" <td>30.9</td>\n",
" <td>30.7</td>\n",
" <td>27.7</td>\n",
" <td>22.6</td>\n",
" <td>16.4</td>\n",
" <td>13.7</td>\n",
" <td>20.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>135</th>\n",
" <td>2009</td>\n",
" <td>10.2</td>\n",
" <td>11.5</td>\n",
" <td>13.7</td>\n",
" <td>20.2</td>\n",
" <td>23.6</td>\n",
" <td>25.8</td>\n",
" <td>29.3</td>\n",
" <td>30.1</td>\n",
" <td>26.5</td>\n",
" <td>22.3</td>\n",
" <td>17.0</td>\n",
" <td>12.4</td>\n",
" <td>20.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>136</th>\n",
" <td>2010</td>\n",
" <td>11.0</td>\n",
" <td>9.9</td>\n",
" <td>13.2</td>\n",
" <td>16.6</td>\n",
" <td>23.0</td>\n",
" <td>27.5</td>\n",
" <td>31.6</td>\n",
" <td>33.5</td>\n",
" <td>29.0</td>\n",
" <td>21.8</td>\n",
" <td>17.2</td>\n",
" <td>13.7</td>\n",
" <td>20.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>137</th>\n",
" <td>2011</td>\n",
" <td>9.1</td>\n",
" <td>11.2</td>\n",
" <td>12.3</td>\n",
" <td>18.9</td>\n",
" <td>22.2</td>\n",
" <td>26.0</td>\n",
" <td>30.9</td>\n",
" <td>31.2</td>\n",
" <td>28.8</td>\n",
" <td>23.0</td>\n",
" <td>18.3</td>\n",
" <td>11.1</td>\n",
" <td>20.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>138</th>\n",
" <td>2012</td>\n",
" <td>8.3</td>\n",
" <td>9.1</td>\n",
" <td>12.5</td>\n",
" <td>18.5</td>\n",
" <td>23.6</td>\n",
" <td>24.8</td>\n",
" <td>30.1</td>\n",
" <td>33.1</td>\n",
" <td>29.8</td>\n",
" <td>23.0</td>\n",
" <td>16.3</td>\n",
" <td>11.2</td>\n",
" <td>20.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>139</th>\n",
" <td>2013</td>\n",
" <td>9.6</td>\n",
" <td>10.3</td>\n",
" <td>16.4</td>\n",
" <td>19.2</td>\n",
" <td>24.1</td>\n",
" <td>26.5</td>\n",
" <td>31.4</td>\n",
" <td>33.2</td>\n",
" <td>28.8</td>\n",
" <td>23.0</td>\n",
" <td>17.4</td>\n",
" <td>12.1</td>\n",
" <td>21.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>140</th>\n",
" <td>2014</td>\n",
" <td>10.6</td>\n",
" <td>9.8</td>\n",
" <td>14.5</td>\n",
" <td>19.6</td>\n",
" <td>24.7</td>\n",
" <td>26.9</td>\n",
" <td>30.5</td>\n",
" <td>31.2</td>\n",
" <td>26.9</td>\n",
" <td>23.0</td>\n",
" <td>17.4</td>\n",
" <td>11.0</td>\n",
" <td>20.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>141</th>\n",
" <td>2015</td>\n",
" <td>10.4</td>\n",
" <td>10.4</td>\n",
" <td>15.5</td>\n",
" <td>19.3</td>\n",
" <td>26.4</td>\n",
" <td>26.4</td>\n",
" <td>30.1</td>\n",
" <td>30.5</td>\n",
" <td>26.4</td>\n",
" <td>22.7</td>\n",
" <td>17.8</td>\n",
" <td>13.4</td>\n",
" <td>20.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>142</th>\n",
" <td>2016</td>\n",
" <td>10.6</td>\n",
" <td>12.2</td>\n",
" <td>14.9</td>\n",
" <td>20.3</td>\n",
" <td>25.2</td>\n",
" <td>26.3</td>\n",
" <td>29.7</td>\n",
" <td>31.6</td>\n",
" <td>27.7</td>\n",
" <td>22.6</td>\n",
" <td>15.5</td>\n",
" <td>13.8</td>\n",
" <td>20.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>143</th>\n",
" <td>2017</td>\n",
" <td>10.8</td>\n",
" <td>12.1</td>\n",
" <td>13.4</td>\n",
" <td>19.9</td>\n",
" <td>25.1</td>\n",
" <td>26.4</td>\n",
" <td>31.8</td>\n",
" <td>30.4</td>\n",
" <td>26.8</td>\n",
" <td>20.1</td>\n",
" <td>16.6</td>\n",
" <td>11.1</td>\n",
" <td>20.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>144</th>\n",
" <td>2018</td>\n",
" <td>10.1 ]</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>×</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>145 rows × 14 columns</p>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 4 5 6 7 8 9 \\\n",
"0 年 1月 2月 3月 4月 5月 6月 7月 8月 9月 \n",
"1 1875 NaN NaN NaN NaN NaN 25.5 ] 30.1 ) 29.4 25.6 \n",
"2 1876 6.6 8.2 13.6 17.5 21.7 22.8 28.6 31.6 26.8 ) \n",
"3 1877 8.8 8.8 11.3 ) 19.1 ) 21.5 ) 26.0 31.0 30.5 25.8 \n",
"4 1878 7.2 7.1 12.9 16.2 22.7 24.1 29.8 28.5 26.3 \n",
"5 1879 9.0 10.9 13.0 17.1 21.9 25.2 30.4 31.1 25.4 \n",
"6 1880 8.8 10.1 13.8 16.7 22.6 23.9 28.0 29.5 27.0 \n",
"7 1881 8.9 9.4 10.5 16.9 22.5 25.6 27.9 31.1 26.2 \n",
"8 1882 10.2 9.6 12.5 18.4 21.9 24.0 28.2 28.5 24.8 \n",
"9 1883 8.6 5.8 10.2 16.6 19.9 23.6 27.2 29.3 25.6 \n",
"10 1884 8.4 8.1 10.7 16.2 20.2 23.6 27.0 28.1 26.5 \n",
"11 1885 5.7 7.2 10.0 14.8 19.3 23.4 26.6 29.0 26.0 \n",
"12 1886 8.2 7.3 12.0 16.9 20.3 25.1 29.3 31.2 26.9 \n",
"13 1887 6.2 9.8 12.8 17.3 19.2 24.1 27.4 29.3 25.4 \n",
"14 1888 9.8 7.3 13.1 17.5 20.4 22.8 28.3 29.7 25.1 \n",
"15 1889 7.5 8.4 12.2 16.3 20.3 25.0 26.9 30.0 24.1 \n",
"16 1890 8.6 11.1 13.2 18.7 19.9 26.0 27.3 29.0 28.3 \n",
"17 1891 8.8 8.6 13.7 16.6 23.4 24.2 28.7 29.6 28.4 \n",
"18 1892 9.0 9.0 9.9 17.9 21.1 24.1 29.7 31.1 26.8 \n",
"19 1893 8.5 6.9 11.8 18.2 20.1 24.6 30.2 30.6 26.9 \n",
"20 1894 8.2 9.3 13.0 18.6 20.9 28.1 31.6 31.5 25.5 \n",
"21 1895 7.7 9.4 11.8 18.2 22.2 24.5 25.7 29.7 27.1 \n",
"22 1896 9.3 8.5 10.9 18.2 20.8 25.7 28.1 30.4 26.2 \n",
"23 1897 8.1 8.4 10.1 15.7 21.9 22.9 26.5 29.2 24.7 \n",
"24 1898 7.9 9.3 10.1 16.0 21.3 23.2 30.3 30.6 25.6 \n",
"25 1899 8.9 9.2 13.6 17.8 22.7 25.8 26.9 30.2 23.5 \n",
"26 1900 6.0 8.2 10.8 15.7 22.3 24.0 26.5 30.5 26.9 \n",
"27 1901 9.0 9.5 12.9 18.1 20.8 24.6 26.0 29.9 26.7 \n",
"28 1902 8.6 9.1 13.5 16.9 20.7 24.1 25.6 26.2 26.4 \n",
"29 1903 9.0 8.9 12.1 17.2 20.6 24.2 26.9 31.0 26.6 \n",
".. ... ... ... ... ... ... ... ... ... ... \n",
"115 1989 11.4 11.1 13.6 19.6 21.5 23.8 27.4 30.5 28.4 \n",
"116 1990 8.8 10.5 14.4 18.6 23.1 27.0 29.2 32.4 28.1 \n",
"117 1991 10.1 10.5 13.1 18.8 22.7 26.9 30.1 29.1 26.9 \n",
"118 1992 10.5 10.8 13.1 19.1 21.1 23.7 29.2 30.4 26.9 \n",
"119 1993 9.1 11.8 12.5 17.8 22.3 25.0 25.3 28.0 25.8 \n",
"120 1994 9.1 10.6 11.6 19.8 23.4 26.0 31.8 32.9 28.1 \n",
"121 1995 10.2 10.1 13.0 19.1 22.7 23.5 29.6 33.7 27.4 \n",
"122 1996 10.4 9.4 13.1 17.0 22.0 26.4 30.0 30.0 26.3 \n",
"123 1997 11.3 11.2 14.7 19.2 23.2 26.6 30.7 30.7 26.4 \n",
"124 1998 9.3 11.3 14.4 20.1 24.6 24.6 29.0 31.0 27.7 \n",
"125 1999 10.8 11.2 13.7 18.7 24.0 26.5 29.9 32.3 29.6 \n",
"126 2000 11.2 9.9 13.5 18.7 24.0 26.1 31.6 32.4 28.9 \n",
"127 2001 8.6 10.7 14.4 20.4 23.0 26.6 33.0 30.0 26.4 \n",
"128 2002 11.5 11.9 16.5 20.3 22.3 25.3 31.7 32.1 26.2 \n",
"129 2003 9.3 9.9 12.7 19.2 22.4 26.6 26.0 29.5 28.1 \n",
"130 2004 10.1 12.9 14.0 21.3 23.7 27.5 33.1 31.0 28.7 \n",
"131 2005 10.0 9.9 13.1 19.6 21.9 26.7 29.1 31.8 28.2 \n",
"132 2006 8.5 10.5 14.0 17.5 22.7 25.4 28.6 31.1 27.1 \n",
"133 2007 10.9 12.8 15.0 17.9 24.0 27.1 27.4 33.0 28.5 \n",
"134 2008 9.4 9.6 14.9 18.4 22.0 24.6 30.9 30.7 27.7 \n",
"135 2009 10.2 11.5 13.7 20.2 23.6 25.8 29.3 30.1 26.5 \n",
"136 2010 11.0 9.9 13.2 16.6 23.0 27.5 31.6 33.5 29.0 \n",
"137 2011 9.1 11.2 12.3 18.9 22.2 26.0 30.9 31.2 28.8 \n",
"138 2012 8.3 9.1 12.5 18.5 23.6 24.8 30.1 33.1 29.8 \n",
"139 2013 9.6 10.3 16.4 19.2 24.1 26.5 31.4 33.2 28.8 \n",
"140 2014 10.6 9.8 14.5 19.6 24.7 26.9 30.5 31.2 26.9 \n",
"141 2015 10.4 10.4 15.5 19.3 26.4 26.4 30.1 30.5 26.4 \n",
"142 2016 10.6 12.2 14.9 20.3 25.2 26.3 29.7 31.6 27.7 \n",
"143 2017 10.8 12.1 13.4 19.9 25.1 26.4 31.8 30.4 26.8 \n",
"144 2018 10.1 ] NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
" 10 11 12 13 \n",
"0 10月 11月 12月 年の値 \n",
"1 19.9 16.1 ) 10.2 21.9 ] \n",
"2 20.4 ) 15.8 11.0 18.7 \n",
"3 21.3 14.4 10.2 19.1 \n",
"4 20.2 14.1 10.9 18.3 \n",
"5 19.4 15.7 14.0 19.4 \n",
"6 21.6 16.8 11.1 19.2 \n",
"7 20.7 16.6 9.6 18.8 \n",
"8 20.0 14.8 10.8 18.6 \n",
"9 20.5 15.4 11.1 17.8 \n",
"10 20.6 12.9 9.5 17.7 \n",
"11 20.5 15.6 11.3 17.5 \n",
"12 21.0 15.6 11.0 18.7 \n",
"13 21.4 17.5 12.7 18.6 \n",
"14 20.0 16.4 11.0 18.5 \n",
"15 19.6 14.8 10.6 18.0 \n",
"16 20.3 16.2 14.7 19.4 \n",
"17 21.8 16.0 11.9 19.3 \n",
"18 20.3 15.0 9.3 18.6 \n",
"19 20.3 15.8 11.1 18.8 \n",
"20 19.5 17.2 11.7 19.6 \n",
"21 20.9 15.2 11.4 18.7 \n",
"22 20.0 16.1 10.2 18.7 \n",
"23 20.2 15.1 10.0 17.7 \n",
"24 20.6 15.7 11.3 18.5 \n",
"25 19.7 14.6 10.3 18.6 \n",
"26 21.6 16.3 11.5 18.4 \n",
"27 21.2 15.7 10.7 18.8 \n",
"28 21.3 16.3 11.4 18.3 \n",
"29 18.9 14.0 9.2 18.2 \n",
".. ... ... ... ... \n",
"115 20.7 17.7 12.8 19.9 \n",
"116 22.4 19.0 13.6 20.6 \n",
"117 20.7 16.4 12.7 19.8 \n",
"118 20.5 16.9 12.9 19.6 \n",
"119 20.8 17.7 12.3 19.0 \n",
"120 23.0 17.1 12.8 20.5 \n",
"121 23.0 16.7 12.1 20.1 \n",
"122 21.7 16.7 13.6 19.7 \n",
"123 22.8 18.1 12.4 20.6 \n",
"124 23.5 17.7 12.6 20.5 \n",
"125 23.0 17.8 12.7 20.9 \n",
"126 21.9 16.7 12.6 20.6 \n",
"127 22.5 16.7 12.0 20.4 \n",
"128 22.6 15.2 10.4 20.5 \n",
"129 21.4 17.4 13.2 19.6 \n",
"130 20.7 19.0 13.4 21.3 \n",
"131 22.3 17.0 10.2 20.0 \n",
"132 22.9 17.9 12.5 19.9 \n",
"133 22.2 16.6 12.6 20.7 \n",
"134 22.6 16.4 13.7 20.1 \n",
"135 22.3 17.0 12.4 20.2 \n",
"136 21.8 17.2 13.7 20.7 \n",
"137 23.0 18.3 11.1 20.3 \n",
"138 23.0 16.3 11.2 20.0 \n",
"139 23.0 17.4 12.1 21.0 \n",
"140 23.0 17.4 11.0 20.5 \n",
"141 22.7 17.8 13.4 20.8 \n",
"142 22.6 15.5 13.8 20.9 \n",
"143 20.1 16.6 11.1 20.4 \n",
"144 NaN NaN NaN × \n",
"\n",
"[145 rows x 14 columns]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temperature"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>10</th>\n",
" <th>11</th>\n",
" <th>12</th>\n",
" <th>13</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>142</th>\n",
" <td>2016</td>\n",
" <td>10.6</td>\n",
" <td>12.2</td>\n",
" <td>14.9</td>\n",
" <td>20.3</td>\n",
" <td>25.2</td>\n",
" <td>26.3</td>\n",
" <td>29.7</td>\n",
" <td>31.6</td>\n",
" <td>27.7</td>\n",
" <td>22.6</td>\n",
" <td>15.5</td>\n",
" <td>13.8</td>\n",
" <td>20.9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 4 5 6 7 8 9 10 11 \\\n",
"142 2016 10.6 12.2 14.9 20.3 25.2 26.3 29.7 31.6 27.7 22.6 15.5 \n",
"\n",
" 12 13 \n",
"142 13.8 20.9 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temperature[temperature.iloc[:, 0] == \"2016\"]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"temperature_2016 = temperature[temperature.iloc[:, 0] == \"2016\"].iloc[0, 1:13]"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 10.6\n",
"2 12.2\n",
"3 14.9\n",
"4 20.3\n",
"5 25.2\n",
"6 26.3\n",
"7 29.7\n",
"8 31.6\n",
"9 27.7\n",
"10 22.6\n",
"11 15.5\n",
"12 13.8\n",
"Name: 142, dtype: object"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temperature_2016"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"temperature_2016 = temperature_2016.apply(lambda x: np.float32(x))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1 10.600000\n",
"2 12.200000\n",
"3 14.900000\n",
"4 20.299999\n",
"5 25.200001\n",
"6 26.299999\n",
"7 29.700001\n",
"8 31.600000\n",
"9 27.700001\n",
"10 22.600000\n",
"11 15.500000\n",
"12 13.800000\n",
"Name: 142, dtype: float64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"temperature_2016"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"df = pd.DataFrame([temperature_2016, icecream_2016])"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>10</th>\n",
" <th>11</th>\n",
" <th>12</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>142</th>\n",
" <td>10.6</td>\n",
" <td>12.2</td>\n",
" <td>14.9</td>\n",
" <td>20.299999</td>\n",
" <td>25.200001</td>\n",
" <td>26.299999</td>\n",
" <td>29.700001</td>\n",
" <td>31.6</td>\n",
" <td>27.700001</td>\n",
" <td>22.6</td>\n",
" <td>15.5</td>\n",
" <td>13.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>464.0</td>\n",
" <td>397.0</td>\n",
" <td>493.0</td>\n",
" <td>617.000000</td>\n",
" <td>890.000000</td>\n",
" <td>883.000000</td>\n",
" <td>1292.000000</td>\n",
" <td>1387.0</td>\n",
" <td>843.000000</td>\n",
" <td>621.0</td>\n",
" <td>459.0</td>\n",
" <td>561.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 1 2 3 4 5 6 7 \\\n",
"142 10.6 12.2 14.9 20.299999 25.200001 26.299999 29.700001 \n",
"5 464.0 397.0 493.0 617.000000 890.000000 883.000000 1292.000000 \n",
"\n",
" 8 9 10 11 12 \n",
"142 31.6 27.700001 22.6 15.5 13.8 \n",
"5 1387.0 843.000000 621.0 459.0 561.0 "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"df = df.T"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"df.columns = (\"気温\", \"売上\")"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Int64Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], dtype='int64')"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.index"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"df.index = [\"{}月\".format(str(i)) for i in df.index]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>気温</th>\n",
" <th>売上</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1月</th>\n",
" <td>10.600000</td>\n",
" <td>464.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2月</th>\n",
" <td>12.200000</td>\n",
" <td>397.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3月</th>\n",
" <td>14.900000</td>\n",
" <td>493.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4月</th>\n",
" <td>20.299999</td>\n",
" <td>617.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5月</th>\n",
" <td>25.200001</td>\n",
" <td>890.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6月</th>\n",
" <td>26.299999</td>\n",
" <td>883.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7月</th>\n",
" <td>29.700001</td>\n",
" <td>1292.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8月</th>\n",
" <td>31.600000</td>\n",
" <td>1387.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9月</th>\n",
" <td>27.700001</td>\n",
" <td>843.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10月</th>\n",
" <td>22.600000</td>\n",
" <td>621.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11月</th>\n",
" <td>15.500000</td>\n",
" <td>459.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12月</th>\n",
" <td>13.800000</td>\n",
" <td>561.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 気温 売上\n",
"1月 10.600000 464.0\n",
"2月 12.200000 397.0\n",
"3月 14.900000 493.0\n",
"4月 20.299999 617.0\n",
"5月 25.200001 890.0\n",
"6月 26.299999 883.0\n",
"7月 29.700001 1292.0\n",
"8月 31.600000 1387.0\n",
"9月 27.700001 843.0\n",
"10月 22.600000 621.0\n",
"11月 15.500000 459.0\n",
"12月 13.800000 561.0"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import rcParams"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"rcParams['font.sans-serif'] = \"Source Han Code JP\"\n",
"rcParams['font.weight'] = \"regular\"\n",
"rcParams['axes.titlesize'] = 15\n",
"rcParams['ytick.labelsize'] = 12\n",
"rcParams['xtick.labelsize'] = 12"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x10da5d7b8>"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10da5c2b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.plot()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x10da64390>"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10da6f2b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.plot(kind='scatter', x=\"気温\", y=\"売上\")"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 10.60000038, 464. ],\n",
" [ 12.19999981, 397. ],\n",
" [ 14.89999962, 493. ],\n",
" [ 20.29999924, 617. ],\n",
" [ 25.20000076, 890. ],\n",
" [ 26.29999924, 883. ],\n",
" [ 29.70000076, 1292. ],\n",
" [ 31.60000038, 1387. ],\n",
" [ 27.70000076, 843. ],\n",
" [ 22.60000038, 621. ],\n",
" [ 15.5 , 459. ],\n",
" [ 13.80000019, 561. ]])"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.as_matrix()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最小二乗法を線形代数を用いて解く\n",
"\n",
"b = C + Dt\n",
"\n",
"より、\n",
"\n",
"b = y # アイスクリーム売上\n",
"t1 = x[0] # 1月の気温\n",
"t2 = x[1] # 2月の気温\n",
"...\n",
"\n",
"となるので、\n",
"\n",
"\n",
"\\begin{equation*}\n",
"\\mathbf{A} =\n",
"\\left[ \\begin{array}{cccc}\n",
"1 & t_{1} \\\\\n",
"1 & t_{2} \\\\\n",
"1 & t_{3} \\\\\n",
"\\ldots\\\\\n",
"\\end{array} \\right]\n",
"\\end{equation*}\n",
"\n",
"これは、「Cの係数すべて1」と「D係数t」の行列である\n",
"\n",
"\\begin{equation*}\n",
"\\mathbf{x} =\n",
"\\left[ \\begin{array}{cccc}\n",
"C \\\\\n",
"D \\\\\n",
"\\end{array} \\right]\n",
"\\end{equation*}\n",
"\n",
"\\begin{equation*}\n",
"\\mathbf{b} =\n",
"\\left[ \\begin{array}{cccc}\n",
"y_{1} \\\\\n",
"y_{2} \\\\\n",
"y_{3} \\\\\n",
"\\ldots\\\\\n",
"\\end{array} \\right]\n",
"\\end{equation*}\n",
"\n",
"Ax = b の解はない。\n",
"\n",
"A = QR を求めて、誤差が最小になる、 `b = C + Dt` を求める"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"# A を作る (Aは、要素がすべて1の列ベクトルと、気温の列ベクトル)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>気温</th>\n",
" <th>売上</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1月</th>\n",
" <td>10.600000</td>\n",
" <td>464.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2月</th>\n",
" <td>12.200000</td>\n",
" <td>397.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3月</th>\n",
" <td>14.900000</td>\n",
" <td>493.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4月</th>\n",
" <td>20.299999</td>\n",
" <td>617.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5月</th>\n",
" <td>25.200001</td>\n",
" <td>890.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6月</th>\n",
" <td>26.299999</td>\n",
" <td>883.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7月</th>\n",
" <td>29.700001</td>\n",
" <td>1292.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8月</th>\n",
" <td>31.600000</td>\n",
" <td>1387.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9月</th>\n",
" <td>27.700001</td>\n",
" <td>843.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10月</th>\n",
" <td>22.600000</td>\n",
" <td>621.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11月</th>\n",
" <td>15.500000</td>\n",
" <td>459.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12月</th>\n",
" <td>13.800000</td>\n",
" <td>561.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 気温 売上\n",
"1月 10.600000 464.0\n",
"2月 12.200000 397.0\n",
"3月 14.900000 493.0\n",
"4月 20.299999 617.0\n",
"5月 25.200001 890.0\n",
"6月 26.299999 883.0\n",
"7月 29.700001 1292.0\n",
"8月 31.600000 1387.0\n",
"9月 27.700001 843.0\n",
"10月 22.600000 621.0\n",
"11月 15.500000 459.0\n",
"12月 13.800000 561.0"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 10.60000038, 12.19999981, 14.89999962, 20.29999924,\n",
" 25.20000076, 26.29999924, 29.70000076, 31.60000038,\n",
" 27.70000076, 22.60000038, 15.5 , 13.80000019])"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[:, \"気温\"].as_matrix()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 10.60000038],\n",
" [ 12.19999981],\n",
" [ 14.89999962],\n",
" [ 20.29999924],\n",
" [ 25.20000076],\n",
" [ 26.29999924],\n",
" [ 29.70000076],\n",
" [ 31.60000038],\n",
" [ 27.70000076],\n",
" [ 22.60000038],\n",
" [ 15.5 ],\n",
" [ 13.80000019]])"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[:, \"気温\"].as_matrix()[:, np.newaxis]"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"A2 = df.loc[:, \"気温\"].as_matrix()[:, np.newaxis]"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(12, 1)"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A2.shape"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.ones(A2.shape[0])"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1.],\n",
" [ 1.],\n",
" [ 1.],\n",
" [ 1.],\n",
" [ 1.],\n",
" [ 1.],\n",
" [ 1.],\n",
" [ 1.],\n",
" [ 1.],\n",
" [ 1.],\n",
" [ 1.],\n",
" [ 1.]])"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.ones(A2.shape[0])[:, np.newaxis]"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"A1 = np.ones(A2.shape[0])[:, np.newaxis]"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"A = np.concatenate([A1, A2], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1. , 10.60000038],\n",
" [ 1. , 12.19999981],\n",
" [ 1. , 14.89999962],\n",
" [ 1. , 20.29999924],\n",
" [ 1. , 25.20000076],\n",
" [ 1. , 26.29999924],\n",
" [ 1. , 29.70000076],\n",
" [ 1. , 31.60000038],\n",
" [ 1. , 27.70000076],\n",
" [ 1. , 22.60000038],\n",
" [ 1. , 15.5 ],\n",
" [ 1. , 13.80000019]])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"# b を作る (bは、y(売上)の列ベクトル)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"b = df.loc[:, \"売上\"].as_matrix()[:, np.newaxis]"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 464.],\n",
" [ 397.],\n",
" [ 493.],\n",
" [ 617.],\n",
" [ 890.],\n",
" [ 883.],\n",
" [ 1292.],\n",
" [ 1387.],\n",
" [ 843.],\n",
" [ 621.],\n",
" [ 459.],\n",
" [ 561.]])"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"# SciPyを使って計算"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [],
"source": [
"import scipy.linalg"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"# 最小二乗法で解く\n",
"X, residues, rank, s = scipy.linalg.lstsq(A, b, lapack_driver=\"gelsy\") ## Errorが出るケースがあり、Driverの選択が必要な場面があった。\n",
"\n",
"# 最小二乗解P, 残差の合計residues, 係数行列Aのランクrank, Aのsingular value"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-107.05708154],\n",
" [ 40.70161708]])"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2, 1)"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.shape"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [],
"source": [
"C = X[0, 0]\n",
"D = X[1, 0]"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Line: b = 40.702t -107.057\n"
]
}
],
"source": [
"print(\"Line: b = {:.3f}t {:+.3f}\".format(D, C))"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"# グラフ化準備"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"# scatter データ\n",
"xd = df.loc[:, \"気温\"].as_matrix()\n",
"yd = df.loc[:, \"売上\"].as_matrix()"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 10.60000038, 11.02857181, 11.45714324, 11.88571467,\n",
" 12.3142861 , 12.74285752, 13.17142895, 13.60000038,\n",
" 14.02857181, 14.45714324, 14.88571467, 15.3142861 ,\n",
" 15.74285752, 16.17142895, 16.60000038, 17.02857181,\n",
" 17.45714324, 17.88571467, 18.3142861 , 18.74285752,\n",
" 19.17142895, 19.60000038, 20.02857181, 20.45714324,\n",
" 20.88571467, 21.3142861 , 21.74285752, 22.17142895,\n",
" 22.60000038, 23.02857181, 23.45714324, 23.88571467,\n",
" 24.3142861 , 24.74285752, 25.17142895, 25.60000038,\n",
" 26.02857181, 26.45714324, 26.88571467, 27.3142861 ,\n",
" 27.74285752, 28.17142895, 28.60000038, 29.02857181,\n",
" 29.45714324, 29.88571467, 30.3142861 , 30.74285752,\n",
" 31.17142895, 31.60000038])"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 表示範囲のx軸の範囲データ\n",
"np.linspace(min(xd), max(xd), 50)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"# linaer データ\n",
"xs = np.linspace(min(xd), max(xd), 50)\n",
"ys = D * xs + C"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAD/CAYAAAAaGBpmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzt3Xl0FGW+//H3NywGCAwSEHUiEBeUyCBIZHEDZVTWGZxRGR0W/R1lFpbjKCrouRcZr4AgygUHBOeOLC7IzDguIKg4LqBEDIiCIIiKgAOyr0KC4fn9UZXYdCfphnTS2+d1Tp2m66lOP6kU9emq6m895pxDREQkUFqsOyAiIvFH4SAiIiEUDiIiEkLhICIiIRQOIiISQuEgIiIhFA4iIhJC4SAiIiEUDiIiEqJ6rDtwsho2bOiaNWsW626IiCSU5cuX73TONQq3XMKGQ7NmzcjPz491N0REEoqZfRPJcjqtJCIiIRQOIiISQuEgIiIhEvaaQ2mOHj3Kli1bOHLkSKy7IgkkPT2drKwsatSoEeuuiMSNpAqHLVu2ULduXZo1a4aZxbo7kgCcc+zatYstW7aQnZ0d6+6IxI2wp5XMLNPMHjKz9WZW6shAZlbfzDaYmTOzZgHz08xslJlt9qdRZpYWafuJOnLkCJmZmQoGiZiZkZmZqaNNkSCRHDmcBrQACkprNG9P/HQZ7UOAof4EMAnY5T9G0n7CFAxyorTNiIQK+yndObfWOXcDMLOMRe4G2gAjSmkbDDzknJvtnJsNPAwMOoF2ERGJgQpdczCzK4CRQCegXlBbTeBcYImZTQMcXsCMM7MagJXX7pw7Wsr7DQQGAjRp0qQiXZcyfPvtt7Rv356pU6fSq1evWHdHJLUtWQFFx0LnV0uDyy+u1Lc+6fP7ZtYYeAEY4pxbUcoimf7jXqCOP+3GC4WGEbSHcM5Nd87lOudyGzUKW/0tJyE9PZ3mzZtz6qmnxrorIlJaMJQ3P4oqUufwO+AM4EkzOwK84c9fZ2b98K4dOKCBc66vc64fXiA4YGcE7QnpwQcf5L777mPy5MmcffbZNG/enGPHvD/k/PnzycnJoV69etx4443s27cPgD179tCjRw/S09MxM8yMrl27AjBjxgz69OnDCy+8QMuWLWnUqBF79+4FIC8vj9zcXDIyMrj22mvZsmULALt376ZXr17UrVuXs88+mwceeIAffvgBgNdff52cnBzq1KlDx44def311wGYN28eZkbDhg15++23S34WQEFBAUOGDCEzM5Ps7GxmzJhR0ta5c2cmTpxI586dqVevHsOGDYtoPb333nt06NCBjIwMLrnkEj766CPAuy3KnDlzAMjPzz/uekBZ63bQoEHccccdJcs9/fTTXHnllQAUFhZy11130bBhQ7KyspgyZUpE/RNJdRU5rTQFmBvwvB3eaaHuQL5zrtDM1gNXAnn+Mp2Az4tPGYVrr5AHFsPqHRX+Mcdp2QgeviLsYrNnz+ayyy5j/vz51KxZk7S0NL788kv69evHrFmzuPDCCxk2bBhjx45lzJgxPPbYY+zZs4fVq1fz+OOPk5aWxrhx40p+3jvvvMPOnTuZPXs2GRkZ1K9fn71799K7d2/Gjh3L1Vdfzbhx47jnnnt4/vnnmTlzJqtWrWLVqlUcPHiQvLw8qlf3/tT33nsvP//5zxkxYgQrV66kTp06AHTt2pUDBw4AkJOTc9zv88gjj/DGG2+wdOlSvv76a3r27ElOTg7t2rUDYPr06Tz77LMsX76cO+64g7vuuoszzzyzzPWzceNGunfvzsiRI3nxxRf54IMP+MlPfhLRn6C0ddu/f3+6d+/OlClTqFGjBnPmzKFfv34APProoyxfvpzFixezf/9+evTowVVXXUWLFi0iej+RVBU2HMwsB+96QlP/eQe/6WPn3M6A5U73//mlc26f/+/JwGgz2+Y/H87xF67DtSekOnXqMGvWLGrVqlUy74033uDAgQPceuutgPdp/NChQwBUr16devXqkZWVRePGjVm1atVxry0sLGTOnDkEnkpbunQp27dvL/mk/sMPP3D66d6foEuXLkycOJE777yTm266ib59+5a87uabb+Yvf/kLzjkGDBhAbm5uSR8yMjIASEs7/oBy3rx59O3bl+bNm9O8eXPatWvH/PnzS8Khf//+tGnThhYtWnDHHXewZcuWcsNh4cKFnHPOOdxzzz0A3HDDDRVat+3ataNhw4YsWrSItm3bsmTJEl544QUAXn75ZT777DOuuMIL9f379/PJJ58oHETCiOTIYQreJ/piS/3HbGBjBK9tiPctJIAJwNQTaD95EXzCryznnHPOcTsv8IqtWrZsyauvvloyLz09HYABAwYwfvx46tatS8OGDXnllVeOe23jxo0JvsbinCMzM5MVK1aUnHopPjpo1aoVX331FW+++SbPPfccQ4cOZenSpZx33nkMHz6cO+64gzlz5nD77bfTtGlTXn755aj83sW/T/FptLIcO3aszK+PmllJzYFzoWU1pa1bM6N///7MnTuXTZs20a1bN+rXr1/yM+6//3769+9fsnyDBg0i/6VEUlQkX2Xt7JyzUqaNQcu9EzzfeUY5587ypz+7gP/x4dqTybXXXsvnn3/OK6+8Qo0aNVizZg27d+8GvHPkt9xyCxs2bGDDhg1ccsklYX9ex44dAZg2bRrVq1dn06ZNbNq0CYAnn3ySZ599lhYtWjBs2DCOHDnC2rVrOXLkCHfeeSdr1qzh17/+NX369GHx4sVh36tnz548++yzfPHFF7z55pssW7aM7t27V3hdTJw4ka1bt/Lqq6+yaNEiAM4880z+9a9/8emnnzJmzJiIf2bfvn2ZN28e//znP0tOKQH84he/4K9//Sv/+c9/MDPefvvtkHARiVvVythFlzU/mpxzCTm1bdvWBVuzZk3IvKo2cuRId91115XaNn/+fNeyZUtXu3Zt17FjR/fRRx8555x788033SmnnOKqVavmAHfWWWe5KVOmOOece/rpp935559f6s/Ly8tz7du3d7Vr13atWrVyCxcudM4598EHH7jrrrvO1a9f32VmZrrBgwe7o0ePusLCQjdx4kTXqlUrl56e7s4//3z30ksvhfzcpk2buueff77k+ZEjR9ygQYPcqaee6po0aeL+9re/lbR16tTJjRkzpuQ54JYuXRp2PS1YsMBddNFFrnbt2q59+/bu/fffL1lHjRo1KukbJZ8hyl+3zjnXuXNn16BBA1dQUFAyr6CgwA0bNsw1btzYZWZmultvvdUdPnw45LXxsO2IVAW8a8Jh97HmEvSDem5urgse7Gft2rUJeS75sssu4/rrr2fAgAFs376dP/zhDzRp0oRnnnkm1l1LGYm67YicKDNb7pzLDbecbtkdB26//XbmzJlD06ZN6dKlC9nZ2UycODHW3RKRFJZUd2VNVLfddhu33XZbrLshIlJCRw4iIhJC4SAiIiEUDiIiEkLhICIiIRQOlejRRx+lc+fOES27bNkyLrjggsrtUARq167Ntm3bwi8oIklN4RAndu6M/Y1ov//+ew4fPhzrbohIHEjdcFiyAt7ND52WlDY0ReReffVVmjZtStOmTXnrrbdK5hcUFDBy5EhatGhBRkYG119/PQcPHgTg3HPPpUePHqxbt67klt0vvfQS4N2krvh22BdccAFLliwJ24fybtm9detWfvnLX1K3bl1+9rOfldw+4/bbby+5Q+sZZ5yBmXHnnXdWaF2IJKVK2nfEm9QNh0oYRGPnzp3ccsstDB48mCVLlhx3d9OaNWuSkZHB3LlzWbx4MStXruSpp54C4JNPPmHq1Kmcd955HDhwgAMHDtCzZ0/AC5V77rmHVatWccUVVzBoUPhRVANv2f3KK6+QnZ1dclO+AQMG0KxZM1avXs2wYcPo06cPx44d44knnmD16tUAbNiwgQMHDvDII4+c9LoQSVoxHICnKqVuOFSCvLw8ioqKGDx4MGeddVbJzfHAu3PozTffzIIFCxg/fjyHDx/ms88+A7zbUKenp5OWlkZGRgYZGRklO/OuXbty6NAhRo8ezcqVK0teU54uXbrgnOPOO+/k008/Lbll98GDB1m0aBGzZs2ibdu23H333WzdupXt27eTnp5ecuRQp04dMjIyOOWUU6K9ikQkQSgcouiHH34gLS2tZMceaOPGjbRp04aaNWsyfPhwevfuXXKqB7wxFAoKCkJe95vf/Ia5c+fSp08fxo4dS1FRUdh+FN+y+/e//z0LFy4kKyuLL774AvButPjiiy+ycuVKVq5cyebNm0tuB158pFNaP0QktSgcoig3N5eCggJmzpzJl19+ycKFC0vaVqxYweHDh+natSv79+/nnXfeOe612dnZbNy4kX//+998++237NjhjWL31ltv0aFDB7Kzs0sGsAmnrFt2Z2Rk0KVLF8aPH09hYSGHDh1ixYoVVKtWDfDGjahVqxbPPPMMO3bsYOPGjVFZLyKSeBQOUZSVlcXUqVN54IEH6N69O61bty5pu+aaa+jWrRuXXnop48ePDxkP4fLLL2fgwIH07t2byy+/nHfffReAMWPGMGnSJHr16nXcaaryXHTRRTz33HO0bt2aq6++mttuu63k/WbPnk16ejqtW7fmuuuuY/369SWvO+WUU5g0aRKTJk0iJyeHadOmVXSViEiCSt1bdi9ZUfoFpGppcPnFUeihJBLdslsiluD7jkhv2Z26d2VNgD+iiMShFNl36LSSiIiESLpwSNTTZBI72mZEQiVVOKSnp7Nr1y79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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10d983860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"plt.plot(xs, ys, color='deeppink', label='regression curve')\n",
"plt.scatter(xd, yd, color='pink', marker='s', label='data set')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment