In [2]:
import numpy as np
import pandas as pd
In [4]:
csvfile_link = "../../../data/ozone-la_missing_signal.csv"
df = pd.read_csv(csvfile_link);
import datetime
df['Month'] = df['Month'].apply(lambda x : datetime.datetime.strptime(x, "%Y-%m"))
In [5]:
df
Out[5]:
Month
Ozone
0
1955-01-01
NaN
1
1955-02-01
2.0
2
1955-03-01
3.6
3
1955-04-01
5.0
4
1955-05-01
6.5
5
1955-06-01
6.1
6
1955-07-01
5.9
7
1955-08-01
5.0
8
1955-09-01
NaN
9
1955-10-01
NaN
10
1955-11-01
NaN
11
1955-12-01
3.9
12
1956-01-01
NaN
13
1956-02-01
NaN
14
1956-03-01
5.5
15
1956-04-01
3.8
16
1956-05-01
4.8
17
1956-06-01
5.6
18
1956-07-01
6.3
19
1956-08-01
5.9
20
1956-09-01
NaN
21
1956-10-01
5.3
22
1956-11-01
5.7
23
1956-12-01
5.7
24
1957-01-01
3.0
25
1957-02-01
3.4
26
1957-03-01
4.9
27
1957-04-01
4.5
28
1957-05-01
4.0
29
1957-06-01
5.7
...
...
...
186
1970-07-01
3.8
187
1970-08-01
4.7
188
1970-09-01
4.6
189
1970-10-01
2.9
190
1970-11-01
1.7
191
1970-12-01
1.3
192
1971-01-01
1.8
193
1971-02-01
2.0
194
1971-03-01
2.2
195
1971-04-01
3.0
196
1971-05-01
2.4
197
1971-06-01
3.5
198
1971-07-01
3.5
199
1971-08-01
3.3
200
1971-09-01
2.7
201
1971-10-01
2.5
202
1971-11-01
1.6
203
1971-12-01
1.2
204
1972-01-01
1.5
205
1972-02-01
2.0
206
1972-03-01
3.1
207
1972-04-01
3.0
208
1972-05-01
3.5
209
1972-06-01
3.4
210
1972-07-01
4.0
211
1972-08-01
3.8
212
1972-09-01
NaN
213
1972-10-01
NaN
214
1972-11-01
NaN
215
1972-12-01
NaN
216 rows × 2 columns
In [6]:
%matplotlib inline
In [ ]:
In [ ]:
In [7]:
df.plot('Month' , 'Ozone')
Out[7]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f3b32dfc7b8>
In [12]:
methods=['linear', 'index', 'values', 'nearest', 'zero', 'slinear', 'quadratic',
'cubic', 'barycentric', 'krogh',
'piecewise_polynomial',
'from_derivatives', 'pchip', 'akima']
for meth in methods:
df['signal_' + meth] = df['Ozone'].interpolate(method=meth, limit_direction='both', axis=0)
df.head(5)
/home/antoine/.local/lib/python3.6/site-packages/scipy/interpolate/polyint.py:511: RuntimeWarning: overflow encountered in multiply
self.wi[:j] *= (self.xi[j]-self.xi[:j])
/home/antoine/.local/lib/python3.6/site-packages/scipy/interpolate/polyint.py:513: RuntimeWarning: divide by zero encountered in reciprocal
self.wi **= -1
/home/antoine/.local/lib/python3.6/site-packages/scipy/interpolate/polyint.py:609: RuntimeWarning: invalid value encountered in true_divide
p = np.dot(c,self.yi)/np.sum(c,axis=-1)[...,np.newaxis]
/home/antoine/.local/lib/python3.6/site-packages/scipy/interpolate/polyint.py:324: RuntimeWarning: overflow encountered in multiply
pi = w*pi
/home/antoine/.local/lib/python3.6/site-packages/scipy/interpolate/polyint.py:325: RuntimeWarning: invalid value encountered in add
p += pi[:,np.newaxis] * self.c[k]
Out[12]:
Month
Ozone
signal_linear
signal_index
signal_values
signal_nearest
signal_zero
signal_slinear
signal_quadratic
signal_cubic
signal_barycentric
signal_krogh
signal_piecewise_polynomial
signal_from_derivatives
signal_pchip
signal_akima
0
1955-01-01
NaN
2.0
2.0
2.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
0.213333
NaN
1
1955-02-01
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.000000
2.0
2
1955-03-01
3.6
3.6
3.6
3.6
3.6
3.6
3.6
3.6
3.6
3.6
3.6
3.6
3.6
3.600000
3.6
3
1955-04-01
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.000000
5.0
4
1955-05-01
6.5
6.5
6.5
6.5
6.5
6.5
6.5
6.5
6.5
6.5
6.5
6.5
6.5
6.500000
6.5
In [10]:
for col in df.columns:
df.plot('Ozone' , col )
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2521 try:
-> 2522 return self._engine.get_loc(key)
2523 except KeyError:
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'Ozone'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-10-e087b1cf65c2> in <module>()
1 for col in df.columns:
----> 2 df.plot('Ozone' , col )
/home/antoine/.local/lib/python3.6/site-packages/pandas/plotting/_core.py in __call__(self, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
2671 fontsize=fontsize, colormap=colormap, table=table,
2672 yerr=yerr, xerr=xerr, secondary_y=secondary_y,
-> 2673 sort_columns=sort_columns, **kwds)
2674 __call__.__doc__ = plot_frame.__doc__
2675
/home/antoine/.local/lib/python3.6/site-packages/pandas/plotting/_core.py in plot_frame(data, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
1898 yerr=yerr, xerr=xerr,
1899 secondary_y=secondary_y, sort_columns=sort_columns,
-> 1900 **kwds)
1901
1902
/home/antoine/.local/lib/python3.6/site-packages/pandas/plotting/_core.py in _plot(data, x, y, subplots, ax, kind, **kwds)
1711 y = data.columns[y]
1712 label = kwds['label'] if 'label' in kwds else y
-> 1713 series = data[y].copy() # Don't modify
1714 series.name = label
1715
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/frame.py in __getitem__(self, key)
2137 return self._getitem_multilevel(key)
2138 else:
-> 2139 return self._getitem_column(key)
2140
2141 def _getitem_column(self, key):
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/frame.py in _getitem_column(self, key)
2144 # get column
2145 if self.columns.is_unique:
-> 2146 return self._get_item_cache(key)
2147
2148 # duplicate columns & possible reduce dimensionality
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/generic.py in _get_item_cache(self, item)
1840 res = cache.get(item)
1841 if res is None:
-> 1842 values = self._data.get(item)
1843 res = self._box_item_values(item, values)
1844 cache[item] = res
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/internals.py in get(self, item, fastpath)
3836
3837 if not isna(item):
-> 3838 loc = self.items.get_loc(item)
3839 else:
3840 indexer = np.arange(len(self.items))[isna(self.items)]
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2522 return self._engine.get_loc(key)
2523 except KeyError:
-> 2524 return self._engine.get_loc(self._maybe_cast_indexer(key))
2525
2526 indexer = self.get_indexer([key], method=method, tolerance=tolerance)
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'Ozone'
In [25]:
import datetime
def convert_date(x):
y = np.nan
try:
y = datetime.datetime.strptime(str(x), "%Y")
except:
pass
return y
df['date'] = df['date'].apply(convert_date)
df_train = df.dropna()
In [26]:
df_train
Out[26]:
date
number
info
0
1890-01-01
328.0
prince de Galles futur Edouard VII
1
1900-01-01
6043.0
grand-duc Vladimir de Russie
3
1914-01-01
40362.0
Alphonse XII
4
1921-01-01
51327.0
Thomas Rockefeller
5
1921-01-01
53211.0
l'empereur Hirohito.
6
1929-01-01
112151.0
Franklin D. Roosevelt
7
1938-01-01
147844.0
le duc de Windsor
8
1948-01-01
185397.0
Princesse Elisabeth d'Angleterre
12
1950-01-01
285793.0
17
1976-01-01
536814.0
Gainsbourg
18
1978-01-01
531147.0
Mick Jagger
19
1979-01-01
554711.0
Roman Polanski
28
2010-01-01
1089170.0
Buzz
29
2012-01-01
1113000.0
In [27]:
import pyaf.ForecastEngine as autof
lEngine = autof.cForecastEngine()
lEngine.train(iInputDS = df_train, iTime = 'date', iSignal = 'number', iHorizon = 7);
lEngine.getModelInfo()
INFO:pyaf.std:START_TRAINING 'number'
INFO:pyaf.std:END_TRAINING_TIME_IN_SECONDS 'number' 2.8104207515716553
INFO:pyaf.std:TIME_DETAIL TimeVariable='date' TimeMin=1890-01-01T00:00:00.000000 TimeMax=2012-01-01T00:00:00.000000 TimeDelta=3427 days 14:46:09.230769 Estimation = (0 , 14) Validation = (0 , 14) Test = (0 , 14) Horizon=7
INFO:pyaf.std:SIGNAL_DETAIL SignalVariable='CumSum_number' Min=328.0 Max=4707298.0 Mean=1188070.07143 StdDev=1434737.29059
INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE 'CumSum_'
INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_number_Lag1Trend_residue_zeroCycle_residue_AR(3)' [Lag1Trend + NoCycle + AR(3)]
INFO:pyaf.std:TREND_DETAIL 'CumSum_number_Lag1Trend' [Lag1Trend]
INFO:pyaf.std:CYCLE_DETAIL 'CumSum_number_Lag1Trend_residue_zeroCycle' [NoCycle]
INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_number_Lag1Trend_residue_zeroCycle_residue_AR(3)' [AR(3)]
INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2965 MAPE_Forecast=0.2965 MAPE_Test=0.2965
INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.4822 SMAPE_Forecast=0.4822 SMAPE_Test=0.4822
INFO:pyaf.std:MODEL_MASE MASE_Fit=0.5357 MASE_Forecast=0.5357 MASE_Test=0.5357
INFO:pyaf.std:MODEL_L1 L1_Fit=46318.1679123 L1_Forecast=46318.1679123 L1_Test=46318.1679123
INFO:pyaf.std:MODEL_L2 L2_Fit=70082.7714655 L2_Forecast=70082.7714655 L2_Test=70082.7714655
INFO:pyaf.std:MODEL_COMPLEXITY 67
INFO:pyaf.std:AR_MODEL_DETAIL_START
INFO:pyaf.std:AR_MODEL_COEFF 1 CumSum_number_Lag1Trend_residue_zeroCycle_residue_Lag3 1.83751069759
INFO:pyaf.std:AR_MODEL_COEFF 2 CumSum_number_Lag1Trend_residue_zeroCycle_residue_Lag1 0.225997870452
INFO:pyaf.std:AR_MODEL_COEFF 3 CumSum_number_Lag1Trend_residue_zeroCycle_residue_Lag2 -0.17684817679
INFO:pyaf.std:AR_MODEL_DETAIL_END
In [28]:
lEngine.standardPlots()
INFO:pyaf.std:START_PLOTTING
/home/antoine/dev/python/packages/pyaf/TS/Plots.py:31: UserWarning:
This call to matplotlib.use() has no effect because the backend has already
been chosen; matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
The backend was *originally* set to 'module://ipykernel.pylab.backend_inline' by the following code:
File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py", line 16, in <module>
app.launch_new_instance()
File "/home/antoine/.local/lib/python3.6/site-packages/traitlets/config/application.py", line 658, in launch_instance
app.start()
File "/usr/local/lib/python3.6/dist-packages/ipykernel/kernelapp.py", line 477, in start
ioloop.IOLoop.instance().start()
File "/home/antoine/.local/lib/python3.6/site-packages/zmq/eventloop/ioloop.py", line 177, in start
super(ZMQIOLoop, self).start()
File "/home/antoine/.local/lib/python3.6/site-packages/tornado/ioloop.py", line 888, in start
handler_func(fd_obj, events)
File "/home/antoine/.local/lib/python3.6/site-packages/tornado/stack_context.py", line 277, in null_wrapper
return fn(*args, **kwargs)
File "/home/antoine/.local/lib/python3.6/site-packages/zmq/eventloop/zmqstream.py", line 440, in _handle_events
self._handle_recv()
File "/home/antoine/.local/lib/python3.6/site-packages/zmq/eventloop/zmqstream.py", line 472, in _handle_recv
self._run_callback(callback, msg)
File "/home/antoine/.local/lib/python3.6/site-packages/zmq/eventloop/zmqstream.py", line 414, in _run_callback
callback(*args, **kwargs)
File "/home/antoine/.local/lib/python3.6/site-packages/tornado/stack_context.py", line 277, in null_wrapper
return fn(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/ipykernel/kernelbase.py", line 283, in dispatcher
return self.dispatch_shell(stream, msg)
File "/usr/local/lib/python3.6/dist-packages/ipykernel/kernelbase.py", line 235, in dispatch_shell
handler(stream, idents, msg)
File "/usr/local/lib/python3.6/dist-packages/ipykernel/kernelbase.py", line 399, in execute_request
user_expressions, allow_stdin)
File "/usr/local/lib/python3.6/dist-packages/ipykernel/ipkernel.py", line 196, in do_execute
res = shell.run_cell(code, store_history=store_history, silent=silent)
File "/usr/local/lib/python3.6/dist-packages/ipykernel/zmqshell.py", line 533, in run_cell
return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2718, in run_cell
interactivity=interactivity, compiler=compiler, result=result)
File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2828, in run_ast_nodes
if self.run_code(code, result):
File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2882, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-11-e63dad7f4786>", line 1, in <module>
get_ipython().magic('matplotlib inline')
File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2160, in magic
return self.run_line_magic(magic_name, magic_arg_s)
File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2081, in run_line_magic
result = fn(*args,**kwargs)
File "<decorator-gen-105>", line 2, in matplotlib
File "/usr/lib/python3/dist-packages/IPython/core/magic.py", line 188, in <lambda>
call = lambda f, *a, **k: f(*a, **k)
File "/usr/lib/python3/dist-packages/IPython/core/magics/pylab.py", line 100, in matplotlib
gui, backend = self.shell.enable_matplotlib(args.gui)
File "/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py", line 2950, in enable_matplotlib
pt.activate_matplotlib(backend)
File "/usr/lib/python3/dist-packages/IPython/core/pylabtools.py", line 309, in activate_matplotlib
matplotlib.pyplot.switch_backend(backend)
File "/home/antoine/.local/lib/python3.6/site-packages/matplotlib/pyplot.py", line 229, in switch_backend
matplotlib.use(newbackend, warn=False, force=True)
File "/home/antoine/.local/lib/python3.6/site-packages/matplotlib/__init__.py", line 1305, in use
reload(sys.modules['matplotlib.backends'])
File "/usr/lib/python3.6/importlib/__init__.py", line 166, in reload
_bootstrap._exec(spec, module)
File "/home/antoine/.local/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 14, in <module>
line for line in traceback.format_stack()
matplotlib.use('Agg')
/home/antoine/.local/lib/python3.6/site-packages/pandas/plotting/_core.py:1714: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access
series.name = label
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-28-f0a4d8ebc9c6> in <module>()
----> 1 lEngine.standardPlots()
/home/antoine/dev/python/packages/pyaf/ForecastEngine.py in standardPlots(self, name, format)
46
47 def standardPlots(self , name = None, format = 'png'):
---> 48 self.mSignalDecomposition.standardPlots(name, format);
49
50 def getPlotsAsDict(self):
/home/antoine/dev/python/packages/pyaf/TS/SignalDecomposition.py in standardPlots(self, name, format)
623 logger.info("START_PLOTTING")
624 start_time = time.time()
--> 625 self.mBestModel.standardPlots(name, format);
626 lPlotTime = time.time() - start_time;
627 logger.info("END_PLOTTING_TIME_IN_SECONDS " + str(lPlotTime))
/home/antoine/dev/python/packages/pyaf/TS/TimeSeriesModel.py in standardPlots(self, name, format)
309 lForecastColumn + '_Upper_Bound',
310 name = name,
--> 311 format= format);
312 #lOutput.plot()
313
/home/antoine/dev/python/packages/pyaf/TS/Plots.py in prediction_interval_plot(df, time, signal, estimator, lower, upper, name, format, max_length)
100 # last value of the signal
101 lLastSignalPos = df1[signal].dropna().tail(1).index;
--> 102 lEstimtorValue = df1[estimator][lLastSignalPos];
103 df1.loc[lLastSignalPos , lower] = lEstimtorValue;
104 df1.loc[lLastSignalPos , upper] = lEstimtorValue;
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/series.py in __getitem__(self, key)
662 key = check_bool_indexer(self.index, key)
663
--> 664 return self._get_with(key)
665
666 def _get_with(self, key):
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/series.py in _get_with(self, key)
705 return self.loc[key]
706
--> 707 return self.reindex(key)
708 except Exception:
709 # [slice(0, 5, None)] will break if you convert to ndarray,
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/series.py in reindex(self, index, **kwargs)
2638 @Appender(generic._shared_docs['reindex'] % _shared_doc_kwargs)
2639 def reindex(self, index=None, **kwargs):
-> 2640 return super(Series, self).reindex(index=index, **kwargs)
2641
2642 @Appender(generic._shared_docs['fillna'] % _shared_doc_kwargs)
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/generic.py in reindex(self, *args, **kwargs)
3021 # perform the reindex on the axes
3022 return self._reindex_axes(axes, level, limit, tolerance, method,
-> 3023 fill_value, copy).__finalize__(self)
3024
3025 def _reindex_axes(self, axes, level, limit, tolerance, method, fill_value,
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/generic.py in _reindex_axes(self, axes, level, limit, tolerance, method, fill_value, copy)
3039 obj = obj._reindex_with_indexers({axis: [new_index, indexer]},
3040 fill_value=fill_value,
-> 3041 copy=copy, allow_dups=False)
3042
3043 return obj
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/generic.py in _reindex_with_indexers(self, reindexers, fill_value, copy, allow_dups)
3143 fill_value=fill_value,
3144 allow_dups=allow_dups,
-> 3145 copy=copy)
3146
3147 if copy and new_data is self._data:
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/internals.py in reindex_indexer(self, new_axis, indexer, axis, fill_value, allow_dups, copy)
4132 # some axes don't allow reindexing with dups
4133 if not allow_dups:
-> 4134 self.axes[axis]._can_reindex(indexer)
4135
4136 if axis >= self.ndim:
/home/antoine/.local/lib/python3.6/site-packages/pandas/core/indexes/base.py in _can_reindex(self, indexer)
2939 # trying to reindex on an axis with duplicates
2940 if not self.is_unique and len(indexer):
-> 2941 raise ValueError("cannot reindex from a duplicate axis")
2942
2943 def reindex(self, target, method=None, level=None, limit=None,
ValueError: cannot reindex from a duplicate axis
In [32]:
df_forecast = lEngine.forecast(iInputDS = df_train, iHorizon = 7)
print(df_forecast.columns)
df_forecast[['date', 'number_Forecast', 'number_Forecast_Lower_Bound', 'number_Forecast_Upper_Bound']].tail(7)
INFO:pyaf.std:START_FORECASTING
INFO:pyaf.std:END_FORECAST_TIME_IN_SECONDS 0.20051145553588867
Index(['CumSum_number', 'date', 'number', 'row_number', 'date_Normalized',
'CumSum_number_Lag1Trend', 'CumSum_number_Lag1Trend_residue',
'CumSum_number_Lag1Trend_residue_zeroCycle',
'CumSum_number_Lag1Trend_residue_zeroCycle_residue',
'CumSum_number_Lag1Trend_residue_zeroCycle_residue_AR(3)',
'CumSum_number_Lag1Trend_residue_zeroCycle_residue_AR(3)_residue',
'CumSum_number_Trend', 'CumSum_number_Trend_residue',
'CumSum_number_Cycle', 'CumSum_number_Cycle_residue',
'CumSum_number_AR', 'CumSum_number_AR_residue',
'CumSum_number_TransformedForecast', 'number_Forecast',
'CumSum_number_TransformedResidue', 'number_Residue',
'number_Forecast_Lower_Bound', 'number_Forecast_Upper_Bound'],
dtype='object')
Out[32]:
date
number_Forecast
number_Forecast_Lower_Bound
number_Forecast_Upper_Bound
14
2021-05-20 14:46:09.230769216
1.067167e+06
9.298043e+05
1.204529e+06
15
2030-10-08 05:32:18.461538432
2.034668e+06
1.634727e+06
2.434609e+06
16
2040-02-25 20:18:27.692307648
2.305215e+06
1.951239e+06
2.659191e+06
17
2049-07-15 11:04:36.923076864
2.111037e+06
1.613392e+06
2.608682e+06
18
2058-12-03 01:50:46.153846080
3.797103e+06
1.929540e+06
5.664665e+06
19
2068-04-21 16:36:55.384615296
4.709622e+06
1.929136e+06
7.490109e+06
20
2077-09-09 07:23:04.615384512
4.260869e+06
1.424380e+06
7.097359e+06
In [ ]:
Content source: antoinecarme/pyaf
Similar notebooks: