Time Series Interpolation, Slices, and Joins¶
One of the major problems with working with time series models is cleaning the data. Most time series models need to have equally sliced data, and most tools don’t offer an easy way to do this.
Not only that, but missing values can distort predictions. You can fill these gaps with various interpolation methods. Luckily, VerticaPy can easily slice and interpolate time series data. We’ll demonstrate these functions with the Smart Meter datasets.
import verticapy as vp
sm_consumption = vp.read_csv(
"sm_consumption.csv",
dtype = {
"meterID": "Integer",
"dateUTC": "Timestamp(6)",
"value": "Float(22)",
}
)
sm_weather = vp.read_csv(
"sm_weather.csv",
dtype = {
"dateUTC": "Timestamp(6)",
"temperature": "Float(22)",
"humidity": "Float(22)",
}
)
sm_meters = vp.read_csv("sm_meters.csv")
Note
You can let Vertica automatically decide the data type, or you can manually force the data type on any column as seen above.
sm_consumption.head(100)
123 meterID100% | ... | 📅 dateUTC100% | 123 value99% | |
| 1 | 0 | ... | 2014-01-02 10:45:00 | 0.321 |
| 2 | 0 | ... | 2014-01-02 11:15:00 | 0.305 |
| 3 | 0 | ... | 2014-01-13 20:15:00 | 0.34 |
| 4 | 0 | ... | 2014-01-18 00:30:00 | 0.828 |
| 5 | 0 | ... | 2014-01-20 19:30:00 | 0.59 |
| 6 | 0 | ... | 2014-01-21 12:30:00 | 0.327 |
| 7 | 0 | ... | 2014-01-24 12:15:00 | 0.168 |
| 8 | 0 | ... | 2014-01-27 22:45:00 | 0.495 |
| 9 | 0 | ... | 2014-01-28 06:15:00 | 0.056 |
| 10 | 0 | ... | 2014-01-28 19:00:00 | 1.566 |
| 11 | 0 | ... | 2014-01-29 13:00:00 | 1.719 |
| 12 | 0 | ... | 2014-02-04 03:45:00 | 0.045 |
| 13 | 0 | ... | 2014-02-04 18:45:00 | 0.912 |
| 14 | 0 | ... | 2014-02-05 06:45:00 | 0.018 |
| 15 | 0 | ... | 2014-02-07 11:00:00 | 0.868 |
| 16 | 0 | ... | 2014-02-07 22:15:00 | 1.262 |
| 17 | 0 | ... | 2014-02-09 08:30:00 | 0.007 |
| 18 | 0 | ... | 2014-02-11 19:00:00 | 0.094 |
| 19 | 0 | ... | 2014-02-12 02:30:00 | 0.102 |
| 20 | 0 | ... | 2014-02-13 02:45:00 | 0.097 |
| 21 | 0 | ... | 2014-02-14 13:45:00 | 0.033 |
| 22 | 0 | ... | 2014-02-15 02:00:00 | 0.181 |
| 23 | 0 | ... | 2014-02-15 15:00:00 | 0.483 |
| 24 | 0 | ... | 2014-02-16 00:00:00 | 0.195 |
| 25 | 0 | ... | 2014-02-17 02:45:00 | 0.094 |
| 26 | 0 | ... | 2014-02-19 07:00:00 | 0.095 |
| 27 | 0 | ... | 2014-02-20 19:00:00 | 1.208 |
| 28 | 0 | ... | 2014-02-23 14:45:00 | 0.75 |
| 29 | 0 | ... | 2014-02-25 21:30:00 | 0.267 |
| 30 | 0 | ... | 2014-03-07 15:15:00 | 0.415 |
| 31 | 0 | ... | 2014-03-08 00:45:00 | 0.353 |
| 32 | 0 | ... | 2014-03-12 22:30:00 | 0.511 |
| 33 | 0 | ... | 2014-03-14 20:15:00 | 0.124 |
| 34 | 0 | ... | 2014-03-16 06:45:00 | 0.42 |
| 35 | 0 | ... | 2014-03-18 11:15:00 | 0.026 |
| 36 | 0 | ... | 2014-03-20 19:00:00 | 0.239 |
| 37 | 0 | ... | 2014-03-26 20:45:00 | 0.293 |
| 38 | 0 | ... | 2014-04-01 01:00:00 | 0.167 |
| 39 | 0 | ... | 2014-04-06 21:00:00 | 0.253 |
| 40 | 0 | ... | 2014-04-11 16:45:00 | 0.22 |
| 41 | 0 | ... | 2014-04-12 15:30:00 | 0.709 |
| 42 | 0 | ... | 2014-04-13 09:15:00 | 0.192 |
| 43 | 0 | ... | 2014-04-16 17:30:00 | 0.527 |
| 44 | 0 | ... | 2014-04-21 09:45:00 | 0.133 |
| 45 | 0 | ... | 2014-04-24 20:30:00 | 0.244 |
| 46 | 0 | ... | 2014-04-26 03:00:00 | 0.047 |
| 47 | 0 | ... | 2014-04-29 15:15:00 | 0.062 |
| 48 | 0 | ... | 2014-05-05 07:30:00 | 0.182 |
| 49 | 0 | ... | 2014-05-06 15:45:00 | 0.067 |
| 50 | 0 | ... | 2014-05-06 18:45:00 | 0.192 |
| 51 | 0 | ... | 2014-05-08 12:30:00 | 0.054 |
| 52 | 0 | ... | 2014-05-14 00:15:00 | 0.577 |
| 53 | 0 | ... | 2014-05-14 04:15:00 | 0.112 |
| 54 | 0 | ... | 2014-05-16 16:00:00 | 0.064 |
| 55 | 0 | ... | 2014-05-17 05:00:00 | 0.096 |
| 56 | 0 | ... | 2014-05-18 09:30:00 | 0.065 |
| 57 | 0 | ... | 2014-05-18 23:15:00 | 0.604 |
| 58 | 0 | ... | 2014-05-19 08:30:00 | 0.134 |
| 59 | 0 | ... | 2014-05-19 22:30:00 | 0.112 |
| 60 | 0 | ... | 2014-05-28 01:00:00 | 0.284 |
| 61 | 0 | ... | 2014-05-30 04:00:00 | 0.153 |
| 62 | 0 | ... | 2014-06-02 18:15:00 | 0.558 |
| 63 | 0 | ... | 2014-06-04 03:15:00 | 0.139 |
| 64 | 0 | ... | 2014-06-06 02:30:00 | 0.085 |
| 65 | 0 | ... | 2014-06-07 06:30:00 | 0.074 |
| 66 | 0 | ... | 2014-06-11 08:00:00 | 0.092 |
| 67 | 0 | ... | 2014-06-12 02:15:00 | 0.017 |
| 68 | 0 | ... | 2014-06-14 14:00:00 | 0.016 |
| 69 | 0 | ... | 2014-06-15 18:15:00 | 0.194 |
| 70 | 0 | ... | 2014-06-16 18:30:00 | 0.78 |
| 71 | 0 | ... | 2014-06-21 02:45:00 | 0.054 |
| 72 | 0 | ... | 2014-06-24 05:30:00 | 0.048 |
| 73 | 0 | ... | 2014-06-24 21:45:00 | 0.286 |
| 74 | 0 | ... | 2014-06-25 08:00:00 | 0.618 |
| 75 | 0 | ... | 2014-06-27 14:30:00 | 0.243 |
| 76 | 0 | ... | 2014-07-02 22:30:00 | 0.617 |
| 77 | 0 | ... | 2014-07-02 23:15:00 | 0.14 |
| 78 | 0 | ... | 2014-07-03 13:15:00 | 0.976 |
| 79 | 0 | ... | 2014-07-04 11:30:00 | 0.133 |
| 80 | 0 | ... | 2014-07-06 07:00:00 | 0.037 |
| 81 | 0 | ... | 2014-07-08 10:00:00 | 0.014 |
| 82 | 0 | ... | 2014-07-10 12:45:00 | 0.163 |
| 83 | 0 | ... | 2014-07-11 03:45:00 | 0.044 |
| 84 | 0 | ... | 2014-07-15 04:30:00 | 0.068 |
| 85 | 0 | ... | 2014-07-16 10:15:00 | 0.026 |
| 86 | 0 | ... | 2014-07-20 11:45:00 | 1.227 |
| 87 | 0 | ... | 2014-07-25 11:00:00 | 0.038 |
| 88 | 0 | ... | 2014-07-25 11:45:00 | 0.05 |
| 89 | 0 | ... | 2014-07-26 04:15:00 | 0.096 |
| 90 | 0 | ... | 2014-07-27 10:00:00 | 0.157 |
| 91 | 0 | ... | 2014-07-29 17:30:00 | 0.729 |
| 92 | 0 | ... | 2014-07-30 04:15:00 | 0.437 |
| 93 | 0 | ... | 2014-07-31 02:15:00 | 0.068 |
| 94 | 0 | ... | 2014-07-31 12:30:00 | 2.76 |
| 95 | 0 | ... | 2014-08-03 05:00:00 | 0.088 |
| 96 | 0 | ... | 2014-08-03 23:30:00 | 0.748 |
| 97 | 0 | ... | 2014-08-04 15:30:00 | 0.074 |
| 98 | 0 | ... | 2014-08-05 13:15:00 | 0.339 |
| 99 | 0 | ... | 2014-08-09 06:00:00 | 0.026 |
| 100 | 0 | ... | 2014-08-13 08:30:00 | 0.043 |
sm_weather.head(100)
📅 dateUTC100% | ... | 123 temperature100% | 123 humidity100% | |
| 1 | 2014-01-01 01:30:00 | ... | 37.4 | 100.0 |
| 2 | 2014-01-01 02:00:00 | ... | 39.2 | 93.0 |
| 3 | 2014-01-01 05:30:00 | ... | 39.2 | 87.0 |
| 4 | 2014-01-01 08:30:00 | ... | 37.4 | 87.0 |
| 5 | 2014-01-01 10:00:00 | ... | 37.4 | 93.0 |
| 6 | 2014-01-01 11:30:00 | ... | 37.4 | 93.0 |
| 7 | 2014-01-01 13:00:00 | ... | 39.2 | 87.0 |
| 8 | 2014-01-01 15:30:00 | ... | 39.2 | 87.0 |
| 9 | 2014-01-01 17:00:00 | ... | 39.2 | 87.0 |
| 10 | 2014-01-01 19:30:00 | ... | 37.4 | 93.0 |
| 11 | 2014-01-01 20:00:00 | ... | 39.2 | 87.0 |
| 12 | 2014-01-01 22:30:00 | ... | 39.2 | 87.0 |
| 13 | 2014-01-01 23:00:00 | ... | 39.2 | 87.0 |
| 14 | 2014-01-01 23:30:00 | ... | 39.2 | 81.0 |
| 15 | 2014-01-02 00:00:00 | ... | 38.0 | 76.0 |
| 16 | 2014-01-02 02:30:00 | ... | 37.4 | 81.0 |
| 17 | 2014-01-02 03:00:00 | ... | 37.4 | 81.0 |
| 18 | 2014-01-02 04:00:00 | ... | 37.4 | 81.0 |
| 19 | 2014-01-02 05:00:00 | ... | 35.6 | 93.0 |
| 20 | 2014-01-02 05:30:00 | ... | 37.4 | 81.0 |
| 21 | 2014-01-02 07:30:00 | ... | 37.4 | 81.0 |
| 22 | 2014-01-02 09:00:00 | ... | 37.4 | 75.0 |
| 23 | 2014-01-02 09:30:00 | ... | 37.4 | 81.0 |
| 24 | 2014-01-02 12:30:00 | ... | 41.0 | 70.0 |
| 25 | 2014-01-02 13:30:00 | ... | 41.0 | 76.0 |
| 26 | 2014-01-02 14:00:00 | ... | 41.0 | 76.0 |
| 27 | 2014-01-02 15:00:00 | ... | 41.0 | 76.0 |
| 28 | 2014-01-02 18:00:00 | ... | 39.0 | 70.0 |
| 29 | 2014-01-02 18:30:00 | ... | 37.4 | 81.0 |
| 30 | 2014-01-02 20:00:00 | ... | 37.4 | 81.0 |
| 31 | 2014-01-02 21:00:00 | ... | 39.2 | 65.0 |
| 32 | 2014-01-02 23:30:00 | ... | 39.2 | 65.0 |
| 33 | 2014-01-03 00:00:00 | ... | 39.0 | 48.0 |
| 34 | 2014-01-03 04:00:00 | ... | 37.4 | 70.0 |
| 35 | 2014-01-03 05:00:00 | ... | 37.4 | 70.0 |
| 36 | 2014-01-03 06:00:00 | ... | 38.0 | 50.0 |
| 37 | 2014-01-03 10:30:00 | ... | 39.2 | 61.0 |
| 38 | 2014-01-03 11:30:00 | ... | 39.2 | 61.0 |
| 39 | 2014-01-03 12:00:00 | ... | 39.0 | 48.0 |
| 40 | 2014-01-03 17:00:00 | ... | 35.6 | 70.0 |
| 41 | 2014-01-03 22:00:00 | ... | 33.8 | 81.0 |
| 42 | 2014-01-04 01:30:00 | ... | 33.8 | 81.0 |
| 43 | 2014-01-04 04:30:00 | ... | 35.6 | 75.0 |
| 44 | 2014-01-04 12:30:00 | ... | 35.6 | 100.0 |
| 45 | 2014-01-04 16:00:00 | ... | 33.8 | 93.0 |
| 46 | 2014-01-04 16:30:00 | ... | 33.8 | 93.0 |
| 47 | 2014-01-04 17:30:00 | ... | 32.0 | 100.0 |
| 48 | 2014-01-04 18:30:00 | ... | 32.0 | 100.0 |
| 49 | 2014-01-04 22:30:00 | ... | 28.4 | 100.0 |
| 50 | 2014-01-05 00:00:00 | ... | 38.0 | 83.0 |
| 51 | 2014-01-05 07:30:00 | ... | 33.8 | 100.0 |
| 52 | 2014-01-05 10:30:00 | ... | 39.2 | 81.0 |
| 53 | 2014-01-05 11:00:00 | ... | 39.2 | 81.0 |
| 54 | 2014-01-05 12:00:00 | ... | 41.0 | 62.0 |
| 55 | 2014-01-05 16:30:00 | ... | 33.8 | 87.0 |
| 56 | 2014-01-05 17:00:00 | ... | 33.8 | 87.0 |
| 57 | 2014-01-05 19:30:00 | ... | 32.0 | 80.0 |
| 58 | 2014-01-05 21:00:00 | ... | 30.2 | 80.0 |
| 59 | 2014-01-05 22:00:00 | ... | 30.2 | 86.0 |
| 60 | 2014-01-05 22:30:00 | ... | 32.0 | 80.0 |
| 61 | 2014-01-05 23:30:00 | ... | 33.8 | 75.0 |
| 62 | 2014-01-06 00:30:00 | ... | 33.8 | 75.0 |
| 63 | 2014-01-06 02:00:00 | ... | 32.0 | 75.0 |
| 64 | 2014-01-06 02:30:00 | ... | 32.0 | 80.0 |
| 65 | 2014-01-06 03:00:00 | ... | 32.0 | 80.0 |
| 66 | 2014-01-06 04:00:00 | ... | 33.8 | 70.0 |
| 67 | 2014-01-06 04:30:00 | ... | 33.8 | 65.0 |
| 68 | 2014-01-06 08:30:00 | ... | 28.4 | 86.0 |
| 69 | 2014-01-06 11:30:00 | ... | 32.0 | 75.0 |
| 70 | 2014-01-06 15:00:00 | ... | 35.6 | 60.0 |
| 71 | 2014-01-06 16:00:00 | ... | 32.0 | 69.0 |
| 72 | 2014-01-06 16:30:00 | ... | 30.2 | 75.0 |
| 73 | 2014-01-06 19:30:00 | ... | 28.4 | 86.0 |
| 74 | 2014-01-06 22:00:00 | ... | 28.4 | 80.0 |
| 75 | 2014-01-06 22:30:00 | ... | 26.6 | 86.0 |
| 76 | 2014-01-07 01:00:00 | ... | 28.4 | 80.0 |
| 77 | 2014-01-07 02:30:00 | ... | 28.4 | 80.0 |
| 78 | 2014-01-07 08:00:00 | ... | 28.4 | 86.0 |
| 79 | 2014-01-07 09:30:00 | ... | 30.2 | 80.0 |
| 80 | 2014-01-07 11:30:00 | ... | 33.8 | 75.0 |
| 81 | 2014-01-07 13:00:00 | ... | 35.6 | 75.0 |
| 82 | 2014-01-07 13:30:00 | ... | 37.4 | 65.0 |
| 83 | 2014-01-07 14:00:00 | ... | 37.4 | 65.0 |
| 84 | 2014-01-07 15:00:00 | ... | 37.4 | 65.0 |
| 85 | 2014-01-07 15:30:00 | ... | 35.6 | 75.0 |
| 86 | 2014-01-07 17:30:00 | ... | 32.0 | 80.0 |
| 87 | 2014-01-07 18:00:00 | ... | 30.0 | 85.0 |
| 88 | 2014-01-07 18:30:00 | ... | 32.0 | 80.0 |
| 89 | 2014-01-07 20:30:00 | ... | 30.2 | 86.0 |
| 90 | 2014-01-07 21:00:00 | ... | 32.0 | 80.0 |
| 91 | 2014-01-07 21:30:00 | ... | 28.4 | 93.0 |
| 92 | 2014-01-07 22:30:00 | ... | 30.2 | 86.0 |
| 93 | 2014-01-08 03:30:00 | ... | 35.6 | 81.0 |
| 94 | 2014-01-08 05:00:00 | ... | 35.6 | 93.0 |
| 95 | 2014-01-08 06:00:00 | ... | 33.0 | 90.0 |
| 96 | 2014-01-08 06:30:00 | ... | 32.0 | 93.0 |
| 97 | 2014-01-08 08:30:00 | ... | 32.0 | 93.0 |
| 98 | 2014-01-08 09:00:00 | ... | 33.8 | 87.0 |
| 99 | 2014-01-08 10:30:00 | ... | 37.4 | 75.0 |
| 100 | 2014-01-08 12:30:00 | ... | 41.0 | 70.0 |
Our first dataset has a lot of gaps, so let’s slice and interpolate the energy consumption every 30 minutes.
interpolate = sm_consumption.interpolate(
ts = "dateUTC",
rule = "30 minutes",
method = {"value": "linear"},
by = ["meterID"],
)
interpolate.head(100)
📅 dateUTC100% | ... | 123 meterID100% | 123 value99% | |
| 1 | 2014-01-01 03:00:00 | ... | 1 | 0.081 |
| 2 | 2014-01-01 03:30:00 | ... | 1 | 0.0977719298245614 |
| 3 | 2014-01-01 04:00:00 | ... | 1 | 0.114543859649123 |
| 4 | 2014-01-01 04:30:00 | ... | 1 | 0.131315789473684 |
| 5 | 2014-01-01 05:00:00 | ... | 1 | 0.148087719298246 |
| 6 | 2014-01-01 05:30:00 | ... | 1 | 0.164859649122807 |
| 7 | 2014-01-01 06:00:00 | ... | 1 | 0.181631578947368 |
| 8 | 2014-01-01 06:30:00 | ... | 1 | 0.19840350877193 |
| 9 | 2014-01-01 07:00:00 | ... | 1 | 0.215175438596491 |
| 10 | 2014-01-01 07:30:00 | ... | 1 | 0.231947368421053 |
| 11 | 2014-01-01 08:00:00 | ... | 1 | 0.248719298245614 |
| 12 | 2014-01-01 08:30:00 | ... | 1 | 0.265491228070175 |
| 13 | 2014-01-01 09:00:00 | ... | 1 | 0.282263157894737 |
| 14 | 2014-01-01 09:30:00 | ... | 1 | 0.299035087719298 |
| 15 | 2014-01-01 10:00:00 | ... | 1 | 0.31580701754386 |
| 16 | 2014-01-01 10:30:00 | ... | 1 | 0.332578947368421 |
| 17 | 2014-01-01 11:00:00 | ... | 1 | 0.349350877192982 |
| 18 | 2014-01-01 11:30:00 | ... | 1 | 0.366122807017544 |
| 19 | 2014-01-01 12:00:00 | ... | 1 | 0.382894736842105 |
| 20 | 2014-01-01 12:30:00 | ... | 1 | 0.399666666666667 |
| 21 | 2014-01-01 13:00:00 | ... | 1 | 0.416438596491228 |
| 22 | 2014-01-01 13:30:00 | ... | 1 | 0.433210526315789 |
| 23 | 2014-01-01 14:00:00 | ... | 1 | 0.449982456140351 |
| 24 | 2014-01-01 14:30:00 | ... | 1 | 0.466754385964912 |
| 25 | 2014-01-01 15:00:00 | ... | 1 | 0.483526315789474 |
| 26 | 2014-01-01 15:30:00 | ... | 1 | 0.500298245614035 |
| 27 | 2014-01-01 16:00:00 | ... | 1 | 0.517070175438597 |
| 28 | 2014-01-01 16:30:00 | ... | 1 | 0.533842105263158 |
| 29 | 2014-01-01 17:00:00 | ... | 1 | 0.550614035087719 |
| 30 | 2014-01-01 17:30:00 | ... | 1 | 0.536 |
| 31 | 2014-01-01 18:00:00 | ... | 1 | 0.49 |
| 32 | 2014-01-01 18:30:00 | ... | 1 | 0.444 |
| 33 | 2014-01-01 19:00:00 | ... | 1 | 0.398 |
| 34 | 2014-01-01 19:30:00 | ... | 1 | 0.364969696969697 |
| 35 | 2014-01-01 20:00:00 | ... | 1 | 0.344909090909091 |
| 36 | 2014-01-01 20:30:00 | ... | 1 | 0.324848484848485 |
| 37 | 2014-01-01 21:00:00 | ... | 1 | 0.304787878787879 |
| 38 | 2014-01-01 21:30:00 | ... | 1 | 0.284727272727273 |
| 39 | 2014-01-01 22:00:00 | ... | 1 | 0.264666666666667 |
| 40 | 2014-01-01 22:30:00 | ... | 1 | 0.244606060606061 |
| 41 | 2014-01-01 23:00:00 | ... | 1 | 0.224545454545455 |
| 42 | 2014-01-01 23:30:00 | ... | 1 | 0.204484848484848 |
| 43 | 2014-01-02 00:00:00 | ... | 1 | 0.184424242424242 |
| 44 | 2014-01-02 00:30:00 | ... | 1 | 0.164363636363636 |
| 45 | 2014-01-02 01:00:00 | ... | 1 | 0.14430303030303 |
| 46 | 2014-01-02 01:30:00 | ... | 1 | 0.124242424242424 |
| 47 | 2014-01-02 02:00:00 | ... | 1 | 0.104181818181818 |
| 48 | 2014-01-02 02:30:00 | ... | 1 | 0.0841212121212121 |
| 49 | 2014-01-02 03:00:00 | ... | 1 | 0.0640606060606061 |
| 50 | 2014-01-02 03:30:00 | ... | 1 | 0.044 |
| 51 | 2014-01-02 04:00:00 | ... | 1 | 0.044 |
| 52 | 2014-01-02 04:30:00 | ... | 1 | 0.044 |
| 53 | 2014-01-02 05:00:00 | ... | 1 | 0.044 |
| 54 | 2014-01-02 05:30:00 | ... | 1 | 0.044 |
| 55 | 2014-01-02 06:00:00 | ... | 1 | 0.0456 |
| 56 | 2014-01-02 06:30:00 | ... | 1 | 0.0472 |
| 57 | 2014-01-02 07:00:00 | ... | 1 | 0.0504285714285714 |
| 58 | 2014-01-02 07:30:00 | ... | 1 | 0.0552857142857143 |
| 59 | 2014-01-02 08:00:00 | ... | 1 | 0.0601428571428571 |
| 60 | 2014-01-02 08:30:00 | ... | 1 | 0.065 |
| 61 | 2014-01-02 09:00:00 | ... | 1 | 0.0698571428571429 |
| 62 | 2014-01-02 09:30:00 | ... | 1 | 0.0747142857142857 |
| 63 | 2014-01-02 10:00:00 | ... | 1 | 0.0795714285714286 |
| 64 | 2014-01-02 10:30:00 | ... | 1 | 0.0818082191780822 |
| 65 | 2014-01-02 11:00:00 | ... | 1 | 0.0814246575342466 |
| 66 | 2014-01-02 11:30:00 | ... | 1 | 0.081041095890411 |
| 67 | 2014-01-02 12:00:00 | ... | 1 | 0.0806575342465753 |
| 68 | 2014-01-02 12:30:00 | ... | 1 | 0.0802739726027397 |
| 69 | 2014-01-02 13:00:00 | ... | 1 | 0.0798904109589041 |
| 70 | 2014-01-02 13:30:00 | ... | 1 | 0.0795068493150685 |
| 71 | 2014-01-02 14:00:00 | ... | 1 | 0.0791232876712329 |
| 72 | 2014-01-02 14:30:00 | ... | 1 | 0.0787397260273973 |
| 73 | 2014-01-02 15:00:00 | ... | 1 | 0.0783561643835616 |
| 74 | 2014-01-02 15:30:00 | ... | 1 | 0.077972602739726 |
| 75 | 2014-01-02 16:00:00 | ... | 1 | 0.0775890410958904 |
| 76 | 2014-01-02 16:30:00 | ... | 1 | 0.0772054794520548 |
| 77 | 2014-01-02 17:00:00 | ... | 1 | 0.0768219178082192 |
| 78 | 2014-01-02 17:30:00 | ... | 1 | 0.0764383561643836 |
| 79 | 2014-01-02 18:00:00 | ... | 1 | 0.0760547945205479 |
| 80 | 2014-01-02 18:30:00 | ... | 1 | 0.0756712328767123 |
| 81 | 2014-01-02 19:00:00 | ... | 1 | 0.0752876712328767 |
| 82 | 2014-01-02 19:30:00 | ... | 1 | 0.0749041095890411 |
| 83 | 2014-01-02 20:00:00 | ... | 1 | 0.0745205479452055 |
| 84 | 2014-01-02 20:30:00 | ... | 1 | 0.0741369863013699 |
| 85 | 2014-01-02 21:00:00 | ... | 1 | 0.0737534246575342 |
| 86 | 2014-01-02 21:30:00 | ... | 1 | 0.0733698630136986 |
| 87 | 2014-01-02 22:00:00 | ... | 1 | 0.072986301369863 |
| 88 | 2014-01-02 22:30:00 | ... | 1 | 0.0726027397260274 |
| 89 | 2014-01-02 23:00:00 | ... | 1 | 0.0722191780821918 |
| 90 | 2014-01-02 23:30:00 | ... | 1 | 0.0718356164383562 |
| 91 | 2014-01-03 00:00:00 | ... | 1 | 0.0714520547945205 |
| 92 | 2014-01-03 00:30:00 | ... | 1 | 0.0710684931506849 |
| 93 | 2014-01-03 01:00:00 | ... | 1 | 0.0706849315068493 |
| 94 | 2014-01-03 01:30:00 | ... | 1 | 0.0703013698630137 |
| 95 | 2014-01-03 02:00:00 | ... | 1 | 0.0699178082191781 |
| 96 | 2014-01-03 02:30:00 | ... | 1 | 0.0695342465753425 |
| 97 | 2014-01-03 03:00:00 | ... | 1 | 0.0691506849315068 |
| 98 | 2014-01-03 03:30:00 | ... | 1 | 0.0687671232876712 |
| 99 | 2014-01-03 04:00:00 | ... | 1 | 0.0683835616438356 |
| 100 | 2014-01-03 04:30:00 | ... | 1 | 0.068 |
VerticaPy achieves this with its close integration with Vertica; by leveraging Vertica’s comutational power and the TIMESERIES clause, slicing and interpolation is easy.
print(interpolate.current_relation())
(
SELECT
slice_time AS "dateUTC",
"meterID",
TS_FIRST_VALUE("value", 'linear') AS "value"
FROM
"v_temp_schema"."_verticapy_tmp_sm_consumption_v_mldb_9ea03f2297bd11efa8720242ac120002_" TIMESERIES slice_time AS '30 minutes' OVER (PARTITION BY "meterID" ORDER BY "dateUTC"::timestamp))
VERTICAPY_SUBTABLE
Having sliced data on regular interval of time can often make it easier to join your the data with other datasets. For example, let’s join the weather dataset with the smart_meters_consumption dataset on dateUTC.
interpolate.join(
sm_weather,
how = "left",
on = {"dateUTC": "dateUTC"},
expr2 = ["temperature", "humidity"],
)
📅 dateUTC100% | ... | 123 temperature99% | 123 humidity99% | |
| 1 | 2014-01-01 02:30:00 | ... | 39.2 | 93.0 |
| 2 | 2014-01-01 03:00:00 | ... | 39.2 | 93.0 |
| 3 | 2014-01-01 03:30:00 | ... | 39.2 | 93.0 |
| 4 | 2014-01-01 04:00:00 | ... | 39.2 | 93.0 |
| 5 | 2014-01-01 04:30:00 | ... | 39.2 | 93.0 |
| 6 | 2014-01-01 05:00:00 | ... | 39.2 | 93.0 |
| 7 | 2014-01-01 05:30:00 | ... | 39.2 | 87.0 |
| 8 | 2014-01-01 06:00:00 | ... | 38.0 | 89.0 |
| 9 | 2014-01-01 06:30:00 | ... | 37.4 | 93.0 |
| 10 | 2014-01-01 07:00:00 | ... | 37.4 | 93.0 |
| 11 | 2014-01-01 07:30:00 | ... | 37.4 | 93.0 |
| 12 | 2014-01-01 08:00:00 | ... | 37.4 | 93.0 |
| 13 | 2014-01-01 08:30:00 | ... | 37.4 | 87.0 |
| 14 | 2014-01-01 09:00:00 | ... | 37.4 | 87.0 |
| 15 | 2014-01-01 09:30:00 | ... | 37.4 | 87.0 |
| 16 | 2014-01-01 10:00:00 | ... | 37.4 | 93.0 |
| 17 | 2014-01-01 10:30:00 | ... | 37.4 | 93.0 |
| 18 | 2014-01-01 11:00:00 | ... | 37.4 | 87.0 |
| 19 | 2014-01-01 11:30:00 | ... | 37.4 | 93.0 |
| 20 | 2014-01-01 12:00:00 | ... | 38.0 | 85.0 |
Keep in mind that slicing, interpolating, and joins can be computationally expensive.
Thanks to Vertica’s built-in clauses and options, VerticaPy can perform joins based on interpolated data. In the following example, we’ll have Vertica identify the closest time series to our key and merge the two datasets.
sm_consumption.join(
sm_weather,
how = "left",
on_interpolate = {"dateUTC": "dateUTC"},
expr2 = ["temperature", "humidity"],
)
123 meterID100% | ... | 123 temperature100% | 123 humidity100% | |
| 1 | 913 | ... | 38.0 | 95.0 |
| 2 | 895 | ... | 38.0 | 95.0 |
| 3 | 795 | ... | 38.0 | 95.0 |
| 4 | 780 | ... | 38.0 | 95.0 |
| 5 | 747 | ... | 38.0 | 95.0 |
| 6 | 660 | ... | 38.0 | 95.0 |
| 7 | 640 | ... | 38.0 | 95.0 |
| 8 | 605 | ... | 38.0 | 95.0 |
| 9 | 484 | ... | 38.0 | 95.0 |
| 10 | 474 | ... | 38.0 | 95.0 |
| 11 | 457 | ... | 38.0 | 95.0 |
| 12 | 371 | ... | 38.0 | 95.0 |
| 13 | 355 | ... | 38.0 | 95.0 |
| 14 | 348 | ... | 38.0 | 95.0 |
| 15 | 307 | ... | 38.0 | 95.0 |
| 16 | 188 | ... | 38.0 | 95.0 |
| 17 | 181 | ... | 38.0 | 95.0 |
| 18 | 179 | ... | 38.0 | 95.0 |
| 19 | 129 | ... | 38.0 | 95.0 |
| 20 | 116 | ... | 38.0 | 95.0 |
print(
sm_consumption.join(
sm_weather,
how = "left",
on_interpolate = {"dateUTC": "dateUTC"},
expr2 = ["temperature", "humidity"],
).current_relation()
)
(
SELECT
x.*,
y.temperature,
y.humidity
FROM
"v_temp_schema"."_verticapy_tmp_sm_consumption_v_mldb_9ea03f2297bd11efa8720242ac120002_" AS "x" LEFT JOIN "v_temp_schema"."_verticapy_tmp_sm_weather_v_mldb_a6290d4697bd11efa8720242ac120002_" AS "y" ON x."dateUTC" INTERPOLATE PREVIOUS VALUE y."dateUTC")
VERTICAPY_SUBTABLE
Vertica offers powerful methods for cleaning time series data, and you can leverage it all with the flexibility of Python.