pyFTSex/tutorial/pyFTS/developer/multivariate.ipynb

607 lines
1.3 MiB
Plaintext
Raw Permalink Normal View History

2024-08-15 12:15:32 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Multivariate FTS "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TAIEX Experiments"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data loading"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/lib/python3/dist-packages/IPython/core/magics/pylab.py:161: UserWarning: pylab import has clobbered these variables: ['plt']\n",
"`%matplotlib` prevents importing * from pylab and numpy\n",
" \"\\n`%matplotlib` prevents importing * from pylab and numpy\"\n"
]
}
],
"source": [
"import pandas as pd\n",
"import matplotlib.pylab as plt\n",
"from pyFTS.data import TAIEX as tx\n",
"\n",
"%pylab inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"df = tx.get_dataframe()\n",
"df = df.dropna()\n",
"\n",
"train = df.iloc[2000:2500]\n",
"test = df.iloc[2500:3000]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Variable, partitioning and model definitions"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABCwAAALICAYAAAC0F2E+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xd4VNX28PHvmbRJ7wkJKYQECEkg\nCV0sSEcUEZTeq9iu2PsV7FevXUF6rwICioCooIB0kpBAaCEhvfc+mdnvH8Hfy1UQkkwyk8n+PI8P\nMjPnnMU80/baa6+tCCGQJEmSJEmSJEmSJEkyJipDByBJkiRJkiRJkiRJkvRXMmEhSZIkSZIkSZIk\nSZLRkQkLSZIkSZIkSZIkSZKMjkxYSJIkSZIkSZIkSZJkdGTCQpIkSZIkSZIkSZIkoyMTFpIkSZIk\nSZIkSZIkGR2ZsJAkSZIkqVlTFGW3oihTbnJfG0VRhKIo5k0dlyRJkiRJDSMTFpIkSZLUgimKMlVR\nlFhFUcoVRclUFGWhoihOBopFURTlSUVRzlwXzwFFUcb+03FCiPuEEKuaKk5JkiRJkpqGTFhIkiRJ\nUgulKMpzwH+AFwBHoBfgD+xTFMXSACF9AcwFngNcgdbA68CQGz34WoJD/paRJEmSJBMlv+QlSZIk\nqQVSFMUBmA88JYTYI4TQCCGSgNFAG2DitcfNUxRli6IomxRFKVEU5bSiKOHXncdbUZStiqLkKIqS\nqCjKv667b56iKJsVRVl97diziqJ0u0k87YHHgbFCiH1CiAohhFYIcUgIMfW6xx1QFOVdRVEOA+VA\n22u3zbx2v5miKP9VFCVXUZQrwP16feIkSZIkSWoyMmEhSZIkSS1Tb0ANbLv+RiFEKfAjMPC6m4cD\n3wIuwHpgu6IoFteqG74HYqithugPzFUUZfB1xz4IbAScgJ3AVzeJpx+QIoQ4eRuxTwJmA/bA1b/c\nNwt4AIgEugGP3Mb5JEmSJEkyQjJhIUmSJEktkxuQK4SoucF9Gdfu/9MpIcQWIYQG+ITaREcvoDvg\nLoR4SwhRLYS4AiwBru85cUgI8aMQQgusAcK5MTcg8/obFEVJVRSlUFGUSkVR/K+7a6UQ4qwQouZa\nTNcbDXwmhEgRQuQD7//TkyBJkiRJkvGSHbMlSZIkqWXKBdwURTG/QdLC69r9f0r583+EEDpFUVIB\nb0AA3oqiFF73WDPg4HV/vz4JUQ6ob3LNvGvX/T9CCJ9ru3toAOVG8dyA91/u/2sFhiRJkiRJzYSs\nsJAkSZKklukIUAWMvP5GRVHsgPuAX6672fe6+1WAD5BObWIgUQjhdN1/9kKIofWI51fA52Y9Lv5C\n/MN9GdfHC/jVIxZJkiRJkoyATFhIkiRJUgskhCiitunml4qiDLnWk6INsBlIpXb5xp+6Kooy8lq1\nw1xqEx1HgeNAiaIoLymKYn2t4WWYoijd6xHPBWARsFFRlIF/no/aXht1sRn4l6IoPoqiOAMv1zUW\nSZIkSZKMg0xYSJIkSVILJYT4EHgV+C9QDByjtmqivxCi6rqH7gDGAAXUNrwceW1XES21DS4jgERq\nl5EspXaL1Pp4gtqtTT8B8qlNnLx97drJt3mOJcBeahuBnuYvTUUlSZIkSWo+FCH+qapSkiRJkqSW\nTFGUeUCQEGKioWORJEmSJKllkRUWkiRJkiRJkiRJkiQZnVsmLBRFWa4oSraiKHE3uV9RFOULRVEu\nK4pyRlGULtfdN0VRlEvX/puiz8AlSZIkSZIkSZIkSTJdt1wSoijKPUApsFoIEXaD+4cCTwFDgZ7A\n50KInoqiuAAngW7UdvM+BXQVQhTo958gSZIkSZIkSZIkSZKpuWWFhRDid2obX93McGqTGUIIcRRw\nUhTFCxgM7BNC5F9LUuwDhugjaEmSJEmSJEmSJEmSTJu5Hs7RmtqO4n9KvXbbzW7/G0VRZgOzAWxt\nbbsGBwfrISzpnwggtaCcwnINdlbm+LvaoFIUQ4dl2orToTQLLGzANRBU+nj7STeTX5lPRlkGlmaW\ntHFog4XKwtAhmTRtURGa1FQwM8eqjT+KWm3okExadWUNRTkVADi522ChNjNwRKZNU1VFYWY6Op0W\nR49WqG3tDB2SSRM1OmpyKxBagbmTFSpb+fndmHQ6HXl5eWg0Guzt7bG3tzd0SCZNCB0VFVfRakux\nsHBGrfYxdEgmTQDJFdUU1tTgYG6Gv7WVbOLYRE6dOpUrhHBv6HmMYsQkhFgMLAbo1q2bOHnypIEj\nMm2VGi1PbYgi71wWD3dqxZ64TNr6ObNsanccreWPAr3TaWHXs3BqJXQYDQm/grMVTPoOHLwNHZ3J\nEULwTcw3LIhZwGTvycTmxmJjbsPiQYtp69jW0OGZpIKNm8icPx/rh0agSU9HV1GB3+JFWEdEGDo0\nk3QlOoe9S+Nw8rBBCCjOrWDI7DDadHIzdGgmKfX8Wb77YD5Wtt2wc3Yh8/IlBj76JJ36DjJ0aCZJ\nk1VGztI40Oqw8Laj6nIhDoPbYH+vD4qcWNG7oqIiVq9eTVFREW3btuXixYt0796d++67D5VKDuv0\nTaMpJDpmBiUlpbi5jSUnZw8e7r0IDf0YlcrK0OGZnAqtjllnk0jLK2aKuyO7corwd7Jldae22JvL\nRH9jUxTlqj7Oo49PojTA97q/+1y77Wa3SwZUVlXD9JUn2Hcui/kPhrJgQle+Gt+FmNRCxi0+Sm5p\nlaFDNC1aDWybVZusuOtZGLseJmyBolRYPgTyEw0doUnRCR0fnviQBTELGB44nK/7f82KwSvQ6DRM\n3T2Vc3nnDB2iyclbupTMefOwvedu/FYsx3/dOsycnbg6fQZlf/xh6PBMzoWjGexZHIe7rz0jnuvC\niOcicfW2ZffCWC6eyDR0eCYnMfoUW9/9N7bOLoyd/yGjXn8Xv07h/PTNF5zatcPQ4Zmc6pQSchad\nAcD90c64TQvFJsKd4r1JFO1J4lZ916S6yc3NZfny5ZSWljJp0iTGjRtH7969OXHiBNu3b0er1Ro6\nRJNSVZXD6dPjKSk5R6ewr+jc6WvaBb1Kds5uYs48ilZbbugQTUpJjZZxMQn8klfMRx18WBoWwNch\n/hwvKuOR6MvkVdcYOkTpNukjYbETmHxtt5BeQJEQIgPYCwxSFMVZURRnYNC12yQDKSyvZsLSYxxL\nzOfjUeFM6d0GgKGdvFg6pTtXcksZ/c0R0gsrDBuoqdBUwMYJELcVBsyDAW+CokDA3TBlJ1QV1yYt\nsuQgWh9qdDW8+cebrI1fy8SOE3nrzrcwV5nTwaUDq+9bjdpczYy9MziVdcrQoZoEIQTZn3xK9n8/\nxmHoffh++SUqtRpLn9a0WbsWSx8fUh6dQ8nPPxs6VJNxZn8qP6+Mx7udEw8+HYHa1gJrO0uGz42k\nVaAj+5afI+53OS+gLxeOHGL7h2/j7N2asfM+wMHNHQu1mode/DftevbmwOol/PHtOjmI1pPKhEJy\nlsSiqM3xmNMZC09bFDMVzqM7YNvLi9LfUin87jJCJ59vfcjMzGTFihVoNBqmTJmCv78/iqIwcOBA\n+vXrx5kzZ9i8eTMajcbQoZqEiopUTp0eTUVlChHhS3F3r63Q8vObQcfg98nPP0xU9FQ0mmIDR2oa\n8qpreDj6MieLy1gY4s8k79oKxJGezqwIC+B8WSUjoi6TUVVt4Eil23E7u4RsAO4F3IAs4E3AAkAI\n8Y1SW5/3FbUNNcuBaUKIk9eOnQ68eu1U7wohVtwqILkkpHFkl1QyedlxruSU8cW4SIaEtfrbY04k\n5TN9xQkcrC1YO7MnAW62BojURFQWw4ZxcPUw3P8xdJ/x98dkx8Pqh0BbBRO3QuuuTR+niajWVvPy\nwZfZd3Ufj4U/xmPhj/2tdDizLJNZP80isyyTT/t+yl2t7zJQtM2f0OnIeucdCtZvwGnUKFrNexPF\n7H9LK7WFhSQ/+iiVcWf
"text/plain": [
"<matplotlib.figure.Figure at 0x7f54b00a8a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pyFTS.partitioners import Grid, Util as pUtil\n",
"from pyFTS.common import Transformations\n",
"from pyFTS.models.multivariate import common, variable, mvfts\n",
"\n",
"bc = Transformations.BoxCox(0)\n",
"diff = Transformations.Differential(1)\n",
"\n",
"np = 10\n",
"\n",
"model = mvfts.MVFTS(\"\")\n",
"\n",
"fig, axes = plt.subplots(nrows=5, ncols=1,figsize=[15,10])\n",
"\n",
"vopen = variable.Variable(\"Open\", data_label=\"Openly\", partitioner=Grid.GridPartitioner, npart=np, data=train,\n",
" transformation=diff)\n",
"model.append_variable(vopen)\n",
"vopen.partitioner.plot(axes[0])\n",
"vhigh = variable.Variable(\"High\", data_label=\"Highest\", partitioner=Grid.GridPartitioner, npart=np, data=train,\n",
" transformation=diff)\n",
"model.append_variable(vhigh)\n",
"vhigh.partitioner.plot(axes[1])\n",
"vlow = variable.Variable(\"Low\", data_label=\"Lowermost\", partitioner=Grid.GridPartitioner, npart=np, data=train,\n",
" transformation=diff)\n",
"model.append_variable(vlow)\n",
"vlow.partitioner.plot(axes[2])\n",
"vclose = variable.Variable(\"Close\", data_label=\"Close\", partitioner=Grid.GridPartitioner, npart=np, data=train,\n",
" transformation=diff)\n",
"model.append_variable(vclose)\n",
"vclose.partitioner.plot(axes[3])\n",
"vvol = variable.Variable(\"Volume\", data_label=\"Volume\", partitioner=Grid.GridPartitioner, npart=40, data=train,\n",
" transformation=diff)#train)\n",
"model.append_variable(vvol)\n",
"vvol.partitioner.plot(axes[4])\n",
"\n",
"model.target_variable = vvol\n",
"\n",
"plt.tight_layout()\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nyTWnw+ihMXVCBa01PM8
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5499b007b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(nrows=2, ncols=1,figsize=[15,10])\n",
"ax[0].plot(diff.apply(train[\"Volume\"].values), label=\"Volume\")\n",
"\n",
"ax[1].plot(diff.apply(train[\"Openly\"].values, label=\"Open\"))\n",
"ax[1].plot(diff.apply(train[\"Highest\"].values, label=\"Higher\"))\n",
"ax[1].plot(diff.apply(train[\"Lowermost\"].values, label=\"Lower\"))\n",
"ax[1].plot(diff.apply(train[\"Close\"].values, label=\"Close\"))\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model training and test"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2018-03-04 18:30:36 pycos - version 4.6.5 with epoll I/O notifier\n",
"2018-03-04 18:30:36 dispy - dispy client version: 4.8.4\n",
"2018-03-04 18:30:36 dispy - Storing fault recovery information in \"_dispy_20180304183036\"\n",
"2018-03-04 18:30:36 dispy - Started HTTP server at ('0.0.0.0', 8181)\n",
"[ 18:30:36] Distrituted Train Started\n",
"[ 18:30:36] Processing batch 1\n",
"[ 18:30:37] Finished batch 1\n",
"[ 18:30:37] Processing batch 2\n",
"[ 18:30:37] Finished batch 2\n",
"[ 18:30:37] Processing batch 3\n",
"[ 18:30:37] Finished batch 3\n",
"[ 18:30:37] Processing batch 4\n",
"[ 18:30:38] Finished batch 4\n",
"[ 18:30:38] Processing batch 5\n",
"[ 18:30:38] Finished batch 5\n",
"[ 18:30:38] Processing batch 6\n",
"[ 18:30:38] Finished batch 6\n",
"[ 18:30:38] Processing batch 7\n",
"[ 18:30:39] Finished batch 7\n",
"[ 18:30:39] Processing batch 8\n",
"[ 18:30:39] Finished batch 8\n",
"[ 18:30:39] Processing batch 9\n",
"[ 18:30:39] Finished batch 9\n",
"[ 18:30:39] Processing batch 10\n",
"[ 18:30:39] Finished batch 10\n",
"[ 18:30:39] Distrituted Train Finished\n",
"\n",
" Node | CPUs | Jobs | Sec/Job | Node Time Sec\n",
"------------------------------------------------------------------------------\n",
" 192.168.0.110 (petronio-notebo | 3 | 10 | 0.810 | 8.096\n",
"\n",
"Total job time: 8.096 sec, wall time: 3.277 sec, speedup: 2.471\n",
"\n",
"2018-03-04 18:30:39 dispy - HTTP server waiting for 10 seconds for client updates before quitting\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/pyFTS/models/multivariate/mvfts.py:119: RuntimeWarning: invalid value encountered in double_scalars\n",
" ret.append(np.dot(mv,mp.T)/np.sum(mv))\n"
]
}
],
"source": [
"model.fit(train, num_batches=10, distributed=True, nodes=['192.168.0.110'], save=False)\n",
"forecasted = model.forecast(test, distributed=True, nodes=['192.168.0.110'])"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nokEGkzaoFXmPxJAVdjk
"text/plain": [
"<matplotlib.figure.Figure at 0x7f548aa62198>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(nrows=2, ncols=1,figsize=[15,10])\n",
"ax[0].plot(test[\"Volume\"].values, label=\"Volume\")\n",
"\n",
"ax[1].plot(diff.apply(test[\"Openly\"].values, label=\"Open\"))\n",
"ax[1].plot(diff.apply(test[\"Highest\"].values, label=\"Higher\"))\n",
"ax[1].plot(diff.apply(test[\"Lowermost\"].values, label=\"Lower\"))\n",
"ax[1].plot(diff.apply(test[\"Close\"].values, label=\"Close\"))\n",
"\n",
"ax[0].plot(forecasted)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# SONDA Experiments"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data loading"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/lib/python3/dist-packages/IPython/core/magics/pylab.py:161: UserWarning: pylab import has clobbered these variables: ['plt']\n",
"`%matplotlib` prevents importing * from pylab and numpy\n",
" \"\\n`%matplotlib` prevents importing * from pylab and numpy\"\n"
]
}
],
"source": [
"import pandas as pd\n",
"import matplotlib.pylab as plt\n",
"\n",
"%pylab inline\n",
"\n",
"from pyFTS.data import SONDA\n",
"df = SONDA.get_dataframe()\n",
"train = df.iloc[0:1578241] #three years\n",
"test = df.iloc[1578241:] #ears\n",
"del df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Variable, partitioning and model definitions"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nZsaaNWvIycnRd5sGRZI
"text/plain": [
"<matplotlib.figure.Figure at 0x7f16f9904668>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pyFTS.partitioners import Grid, Util as pUtil\n",
"from pyFTS.common import Transformations\n",
"from pyFTS.models.multivariate import common, variable, mvfts\n",
"from pyFTS.models.seasonal import partitioner as seasonal\n",
"from pyFTS.models.seasonal.common import DateTime\n",
"\n",
"bc = Transformations.BoxCox(0)\n",
"diff = Transformations.Differential(1)\n",
"\n",
"np = 10\n",
"\n",
"model = mvfts.MVFTS(\"\")\n",
"\n",
"fig, axes = plt.subplots(nrows=5, ncols=1,figsize=[15,10])\n",
"\n",
"sp = {'seasonality': DateTime.day_of_year , 'names': ['Jan','Feb','Mar','Apr','May','Jun','Jul', 'Aug','Sep','Oct','Nov','Dec']}\n",
"\n",
"vmonth = variable.Variable(\"Month\", data_label=\"datahora\", partitioner=seasonal.TimeGridPartitioner, npart=12, \n",
" data=train, partitioner_specific=sp)\n",
"model.append_variable(vmonth)\n",
"vmonth.partitioner.plot(axes[0])\n",
"\n",
"sp = {'seasonality': DateTime.minute_of_day}\n",
"\n",
"vhour = variable.Variable(\"Hour\", data_label=\"datahora\", partitioner=seasonal.TimeGridPartitioner, npart=24, \n",
" data=train, partitioner_specific=sp)\n",
"model.append_variable(vhour)\n",
"vhour.partitioner.plot(axes[1])\n",
"\n",
"vhumid = variable.Variable(\"Humidity\", data_label=\"humid\", partitioner=Grid.GridPartitioner, npart=np, data=train)\n",
"model.append_variable(vhumid)\n",
"vhumid.partitioner.plot(axes[2])\n",
"\n",
"vpress = variable.Variable(\"AtmPress\", data_label=\"press\", partitioner=Grid.GridPartitioner, npart=np, data=train)\n",
"model.append_variable(vpress)\n",
"vpress.partitioner.plot(axes[3])\n",
"\n",
"vrain = variable.Variable(\"Rain\", data_label=\"rain\", partitioner=Grid.GridPartitioner, npart=20, data=train)#train)\n",
"model.append_variable(vrain)\n",
"vrain.partitioner.plot(axes[4])\n",
"\n",
"model.target_variable = vrain\n",
"\n",
"plt.tight_layout()\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nCwhMvC4SWTl5WLz9PLJ
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6d2215c6d8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pyFTS.common import Transformations\n",
"diff = Transformations.Differential(1)\n",
"\n",
"fig, ax = plt.subplots(nrows=3, ncols=1,figsize=[15,10])\n",
"\n",
"x = train[\"datahora\"].values\n",
"\n",
"ax[0].set_title(\"Humidity\")\n",
"ax[0].plot(x, diff.apply(train[\"humid\"].values))\n",
"\n",
"ax[1].set_title(\"Atm. Pressure\")\n",
"ax[1].plot(x, diff.apply(train[\"press\"].values))\n",
"\n",
"ax[2].set_title(\"Rain\")\n",
"ax[2].plot(x, train[\"rain\"].values)\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABZgAAAWYCAYAAAA7raPEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3X90ZGd95/nPV+VrKPHD1Ybmh0Q3\nTQwjL6YxCoI2x8kOeMMRcWKjacxAB7OBk4nPzDI75IRVxg0ONlln2jmasJMM2bAm4QRi0wHsRjHg\njE4SPAN4cRO15UY0oDgQ7KaajTt2lwGrsKtL3/2jqtSl0i3VrVtV91aV3q9zdFr13Ps89/s8t7p0\n9dVzn2vuLgAAAAAAAAAA2jWSdgAAAAAAAAAAgMFEghkAAAAAAAAAEAsJZgAAAAAAAABALCSYAQAA\nAAAAAACxkGAGAAAAAAAAAMRCghkAAAAAAAAAEAsJZgDoQ2b2fjP7ky22f9/MfiHKvv3KzD5qZr+d\ndhwAAAAYDFwjA0B/MndPOwYA6Htm9n1J/8bd/6au7F3Vsp/rh3iq5Xsk/aOkwN3P9jiGd0n6U0lF\nSWvV437A3b/Qy+MCAACgP3CNHBrDu8Q1MoBthhnMAIBOfM3dnykpJ+n/lvQXZpZLOSYAAAAgTVwj\nA9hWSDADQJeYmZvZS+te/5mZ3Vz9/vVm9gMz+y0ze8TMfmhmM2Z2pZn9vZk9Zmbvr6t7k5ndVvf6\nnWb2kJk9amYfaDhu/b5frv5bMLOfmNm/rLa9t27/55nZqpntDOnDH5vZnXWvf8/M/tbMbKu+u/ua\npD+X9AxJL6ur/1kz+//M7HEz+7KZXdJifN5XNz7v3uqYAAAA6H9cI3ONDGD4kWAGgOS8QNLTJY1L\n+qCkj0m6VtKrJf28pN82s5c0VjKzl0v6Y0nvlDQm6TmSXtTkGP9z9d+cuz/T3f+HpL+oHqfmgKS/\ndffTIfXfJ2mvmb3LzH5e0q9J+lVvsZ6SmWUkvVtSSdJDdZv+SpWL6edJul/S7Vs08wJJF6gyPr8m\n6Y/MbMdWxwUAAMDA4xqZa2QAA44EMwBEN29mhdqXKre7taMk6XfdvaTKBe1zJf2Bu//Y3U9I+pak\nS0PqXSPpC+7+ZXd/UtJvq7KeW1SfkHSgbobFO1WZSbGJu69Wt39Y0m2S/nd3/8EWbV9WHYufSvrP\n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\nXFaz0xOamRxPOywAAAA
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe55a7eda90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def comparevars(ax, x,y, x_lab, y_lab, title):\n",
" ax.scatter(x,y)\n",
" ax.set_title(title)\n",
" ax.set_xlabel(x_lab)\n",
" ax.set_ylabel(y_lab)\n",
" \n",
"from pyFTS.common import Transformations\n",
"diff = Transformations.Differential(1)\n",
"\n",
"data = test\n",
"\n",
"rain_diff = diff.apply(data[\"rain\"].values)\n",
"humid_diff = diff.apply(data[\"humid\"].values)\n",
"press_diff = diff.apply(data[\"press\"].values)\n",
" \n",
"fig, ax = plt.subplots(nrows=3, ncols=2,figsize=[20,20])\n",
"\n",
"comparevars(ax[0][0],data[\"humid\"].values,data[\"rain\"].values,\"humid\",\"rain\",\"Humidity x Rain\")\n",
"comparevars(ax[0][1],humid_diff,rain_diff,\"humid diff\",\"rain diff\",\"Humidity x Rain\")\n",
"comparevars(ax[1][0],data[\"press\"].values,data[\"rain\"].values,\"press\",\"press\",\"Atm. Pressure x Rain\")\n",
"comparevars(ax[1][1],press_diff,rain_diff,\"press diff\",\"rain diff\",\"Atm. Pressure x Rain\")\n",
"comparevars(ax[2][0],data[\"humid\"].values,data[\"press\"].values,\"humid\",\"press\",\"Humidity x Atm. Pressure\")\n",
"comparevars(ax[2][1],humid_diff, press_diff,\"humid diff\",\"press diff\",\"Humidity x Atm. Pressure\")\n",
"\n",
"plt.tight_layout()\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model training and test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This model take time (a couple of hours) to be learned, so it is advisable to run it in distributed mode. The distributed mode use the dispy tool.\n",
"\n",
"- Install dispy on all computer nodes:\n",
"```python\n",
"$sudo pip3 install dispy\n",
"```\n",
"\n",
"- Run the dispynode on all computer nodes:\n",
"```python\n",
"$sudo python3 /usr/local/lib/python3.6/dist-packages/dispy/dispynode.py -i [MACHINE IP]\n",
"```\n",
"\n",
"The *save* parameter save the fitted model on disk on *file_path* file."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"model.fit(train, num_batches=200, save=True, batch_save=True, file_path='mvfts_sonda', \n",
" distributed=True, nodes=['192.168.0.110','192.168.0.106'], \n",
" batch_save_interval=10)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from pyFTS.common import Util\n",
"\n",
"model = Util.load_obj('mvfts_sonda')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For one-year data the prediction task also takes time. Same approach of the training method is used here."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2018-03-06 12:07:39.412804\n",
"2018-03-06 12:07:39 pycos - version 4.6.5 with epoll I/O notifier\n",
"2018-03-06 12:07:39 dispy - dispy client version: 4.8.4\n",
"2018-03-06 12:07:39 dispy - Storing fault recovery information in \"_dispy_20180306120739\"\n",
"2018-03-06 12:07:39 dispy - Started HTTP server at ('0.0.0.0', 8181)\n",
"\n",
" Node | CPUs | Jobs | Sec/Job | Node Time Sec\n",
"------------------------------------------------------------------------------\n",
" 192.168.1.22 (petronio-noteboo | 3 | 20 | 0.741 | 14.815\n",
"\n",
"Total job time: 14.815 sec, wall time: 5.951 sec, speedup: 2.489\n",
"\n",
"2018-03-06 12:07:45 dispy - HTTP server waiting for 10 seconds for client updates before quitting\n",
"2018-03-06 12:07:56.086223\n"
]
}
],
"source": [
"from datetime import datetime\n",
"data = test \n",
"_range = data['datahora'].values\n",
"print(datetime.now())\n",
"forecasted = model.predict(data, num_batches=20, distributed=True, nodes=['192.168.1.22'])\n",
"print(datetime.now())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f6d1d7e7f28>]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n5fBdDdoKR1pmbdsyy9a
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6d1ca8fb00>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[15,5])\n",
"plot(_range,data['rain'].values)\n",
"plot(_range[:-1],forecasted)"
]
},
{
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}