You can "splat" multiple files into a tree by returning maketree("." => fs)
. This will place the files fs
in the same directory as the file it replaces.
In map
or mapsubtrees
you can use maketree("." => fs)
where fs
is a vector to "splat" files into multiple files.
A convenience function will come in handy:
splatfiles(fs) = maketree("." => fs)
splatfiles (generic function with 1 method)
using FileTrees
using DataFrames, CSV
taxi_dir = FileTree("taxi-data")
dfs = FileTrees.load(taxi_dir) do file
DataFrame(CSV.File(path(file)))
end
taxi-data/
├─ 2019/
│ ├─ 01/
│ │ ├─ green.csv (9×20 DataFrame)
│ │ └─ yellow.csv (9×18 DataFrame)
│ └─ 02/
│ ├─ green.csv (9×20 DataFrame)
│ └─ yellow.csv (9×18 DataFrame)
└─ 2020/
├─ 01/
│ ├─ green.csv (9×20 DataFrame)
│ └─ yellow.csv (9×18 DataFrame)
└─ 02/
├─ green.csv (9×20 DataFrame)
└─ yellow.csv (9×18 DataFrame)
Split up each yellow file into multiple files:
yellowdfs = dfs[r"yellow.csv$"]
expanded_tree = mapsubtrees(yellowdfs, glob"*/*/yellow.csv") do df
map(groupby(get(df), :RatecodeID) |> collect) do group
(name=string("yellow-ratecode-", group.RatecodeID[1], ".df"), value=DataFrame(group))
end |> splatfiles
end
taxi-data/
├─ 2019/
│ ├─ 01/
│ │ ├─ yellow-ratecode-1.df (7×18 DataFrame)
│ │ └─ yellow-ratecode-2.df (2×18 DataFrame)
│ └─ 02/
│ └─ yellow-ratecode-1.df (9×18 DataFrame)
└─ 2020/
├─ 01/
│ ├─ yellow-ratecode-1.df (8×18 DataFrame)
│ └─ yellow-ratecode-5.df (1×18 DataFrame)
└─ 02/
└─ yellow-ratecode-1.df (9×18 DataFrame)
You can save these files if you wish.
If the value
field of a file passed to splatfiles
is a Thunk
, then it becomes a lazy value.
A thunk can be created with the syntax lazy(f)(x...)
. where the result is a Thunk
which represents the result of executing f(x...)
.
yellowdfs = dfs[r"yellow.csv$"]
expanded_tree = mapsubtrees(yellowdfs, glob"*/*/yellow.csv") do df
map(groupby(get(df), :payment_type) |> collect) do group
id = group.payment_type[1]
(name=string("yellow-ptype-", group.payment_type[1], ".df"), value=lazy(repr)(group))
end |> splatfiles
end
taxi-data/
├─ 2019/
│ ├─ 01/
│ │ ├─ yellow-ptype-1.df (Thunk(repr, (5×18 SubDataFrame
│ │ │ │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│ │ │ │ │ Int64 │ String │ String │ Int64 │ Float64 │ Int64 │ String │ Int64 │ Int64 │ Int64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Missing │
│ │ │ ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ │ │ │ 1 │ 1 │ 2019-01-01 00:46:40 │ 2019-01-01 00:53:20 │ 1 │ 1.5 │ 1 │ N │ 151 │ 239 │ 1 │ 7.0 │ 0.5 │ 0.5 │ 1.65 │ 0.0 │ 0.3 │ 9.95 │ missing │
│ │ │ │ 2 │ 1 │ 2019-01-01 00:59:47 │ 2019-01-01 01:18:59 │ 1 │ 2.6 │ 1 │ N │ 239 │ 246 │ 1 │ 14.0 │ 0.5 │ 0.5 │ 1.0 │ 0.0 │ 0.3 │ 16.3 │ missing │
│ │ │ │ 3 │ 2 │ 2018-12-21 13:48:30 │ 2018-12-21 13:52:40 │ 3 │ 0.0 │ 1 │ N │ 236 │ 236 │ 1 │ 4.5 │ 0.5 │ 0.5 │ 0.0 │ 0.0 │ 0.3 │ 5.8 │ missing │
│ │ │ │ 4 │ 1 │ 2019-01-01 00:21:28 │ 2019-01-01 00:28:37 │ 1 │ 1.3 │ 1 │ N │ 163 │ 229 │ 1 │ 6.5 │ 0.5 │ 0.5 │ 1.25 │ 0.0 │ 0.3 │ 9.05 │ missing │
│ │ │ │ 5 │ 1 │ 2019-01-01 00:32:01 │ 2019-01-01 00:45:39 │ 1 │ 3.7 │ 1 │ N │ 229 │ 7 │ 1 │ 13.5 │ 0.5 │ 0.5 │ 3.7 │ 0.0 │ 0.3 │ 18.5 │ missing │,)))
│ │ └─ yellow-ptype-2.df (Thunk(repr, (4×18 SubDataFrame
│ │ │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│ │ │ │ Int64 │ String │ String │ Int64 │ Float64 │ Int64 │ String │ Int64 │ Int64 │ Int64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Missing │
│ │ ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ │ │ 1 │ 2 │ 2018-11-28 15:52:25 │ 2018-11-28 15:55:45 │ 5 │ 0.0 │ 1 │ N │ 193 │ 193 │ 2 │ 3.5 │ 0.5 │ 0.5 │ 0.0 │ 0.0 │ 0.3 │ 7.55 │ missing │
│ │ │ 2 │ 2 │ 2018-11-28 15:56:57 │ 2018-11-28 15:58:33 │ 5 │ 0.0 │ 2 │ N │ 193 │ 193 │ 2 │ 52.0 │ 0.0 │ 0.5 │ 0.0 │ 0.0 │ 0.3 │ 55.55 │ missing │
│ │ │ 3 │ 2 │ 2018-11-28 16:25:49 │ 2018-11-28 16:28:26 │ 5 │ 0.0 │ 1 │ N │ 193 │ 193 │ 2 │ 3.5 │ 0.5 │ 0.5 │ 0.0 │ 5.76 │ 0.3 │ 13.31 │ missing │
│ │ │ 4 │ 2 │ 2018-11-28 16:29:37 │ 2018-11-28 16:33:43 │ 5 │ 0.0 │ 2 │ N │ 193 │ 193 │ 2 │ 52.0 │ 0.0 │ 0.5 │ 0.0 │ 0.0 │ 0.3 │ 55.55 │ missing │,)))
│ └─ 02/
│ ├─ yellow-ptype-1.df (Thunk(repr, (1×18 SubDataFrame
│ │ │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│ │ │ │ Int64 │ String │ String │ Int64 │ Float64 │ Int64 │ String │ Int64 │ Int64 │ Int64 │ Float64 │ Float64 │ Float64 │ Int64 │ Int64 │ Float64 │ Float64 │ Int64 │
│ │ ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ │ │ 1 │ 1 │ 2019-02-01 00:59:04 │ 2019-02-01 01:07:27 │ 1 │ 2.1 │ 1 │ N │ 48 │ 234 │ 1 │ 9.0 │ 0.5 │ 0.5 │ 2 │ 0 │ 0.3 │ 12.3 │ 0 │,)))
│ └─ yellow-ptype-2.df (Thunk(repr, (8×18 SubDataFrame
│ │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│ │ │ Int64 │ String │ String │ Int64 │ Float64 │ Int64 │ String │ Int64 │ Int64 │ Int64 │ Float64 │ Float64 │ Float64 │ Int64 │ Int64 │ Float64 │ Float64 │ Int64 │
│ ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ │ 1 │ 1 │ 2019-02-01 00:33:09 │ 2019-02-01 01:03:58 │ 1 │ 9.8 │ 1 │ N │ 230 │ 93 │ 2 │ 32.0 │ 0.5 │ 0.5 │ 0 │ 0 │ 0.3 │ 33.3 │ 0 │
│ │ 2 │ 1 │ 2019-02-01 00:09:03 │ 2019-02-01 00:09:16 │ 1 │ 0.0 │ 1 │ N │ 145 │ 145 │ 2 │ 2.5 │ 0.5 │ 0.5 │ 0 │ 0 │ 0.3 │ 3.8 │ 0 │
│ │ 3 │ 1 │ 2019-02-01 00:45:38 │ 2019-02-01 00:51:10 │ 1 │ 0.8 │ 1 │ N │ 95 │ 95 │ 2 │ 5.5 │ 0.5 │ 0.5 │ 0 │ 0 │ 0.3 │ 6.8 │ 0 │
│ │ 4 │ 1 │ 2019-02-01 00:25:30 │ 2019-02-01 00:28:14 │ 1 │ 0.8 │ 1 │ N │ 140 │ 263 │ 2 │ 5.0 │ 0.5 │ 0.5 │ 0 │ 0 │ 0.3 │ 6.3 │ 0 │
│ │ 5 │ 1 │ 2019-02-01 00:38:02 │ 2019-02-01 00:40:57 │ 1 │ 0.8 │ 1 │ N │ 229 │ 141 │ 2 │ 4.5 │ 0.5 │ 0.5 │ 0 │ 0 │ 0.3 │ 5.8 │ 0 │
│ │ 6 │ 1 │ 2019-02-01 00:06:49 │ 2019-02-01 00:10:34 │ 1 │ 0.9 │ 1 │ N │ 75 │ 41 │ 2 │ 5.0 │ 0.5 │ 0.5 │ 0 │ 0 │ 0.3 │ 6.3 │ 0 │
│ │ 7 │ 1 │ 2019-02-01 00:04:04 │ 2019-02-01 00:24:27 │ 1 │ 2.8 │ 1 │ N │ 246 │ 229 │ 2 │ 14.0 │ 0.5 │ 0.5 │ 0 │ 0 │ 0.3 │ 15.3 │ 0 │
│ │ 8 │ 1 │ 2019-02-01 00:28:20 │ 2019-02-01 00:40:31 │ 1 │ 2.1 │ 1 │ N │ 79 │ 232 │ 2 │ 10.5 │ 0.5 │ 0.5 │ 0 │ 0 │ 0.3 │ 11.8 │ 0 │,)))
└─ 2020/
├─ 01/
│ ├─ yellow-ptype-1.df (Thunk(repr, (7×18 SubDataFrame
│ │ │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│ │ │ │ Int64 │ String │ String │ Int64 │ Float64 │ Int64 │ String │ Int64 │ Int64 │ Int64 │ Float64 │ Float64 │ Float64 │ Float64 │ Int64 │ Float64 │ Float64 │ Float64 │
│ │ ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ │ │ 1 │ 1 │ 2020-01-01 00:28:15 │ 2020-01-01 00:33:03 │ 1 │ 1.2 │ 1 │ N │ 238 │ 239 │ 1 │ 6.0 │ 3.0 │ 0.5 │ 1.47 │ 0 │ 0.3 │ 11.27 │ 2.5 │
│ │ │ 2 │ 1 │ 2020-01-01 00:35:39 │ 2020-01-01 00:43:04 │ 1 │ 1.2 │ 1 │ N │ 239 │ 238 │ 1 │ 7.0 │ 3.0 │ 0.5 │ 1.5 │ 0 │ 0.3 │ 12.3 │ 2.5 │
│ │ │ 3 │ 1 │ 2020-01-01 00:47:41 │ 2020-01-01 00:53:52 │ 1 │ 0.6 │ 1 │ N │ 238 │ 238 │ 1 │ 6.0 │ 3.0 │ 0.5 │ 1.0 │ 0 │ 0.3 │ 10.8 │ 2.5 │
│ │ │ 4 │ 1 │ 2020-01-01 00:55:23 │ 2020-01-01 01:00:14 │ 1 │ 0.8 │ 1 │ N │ 238 │ 151 │ 1 │ 5.5 │ 0.5 │ 0.5 │ 1.36 │ 0 │ 0.3 │ 8.16 │ 0.0 │
│ │ │ 5 │ 2 │ 2020-01-01 00:39:25 │ 2020-01-01 00:39:29 │ 1 │ 0.0 │ 1 │ N │ 193 │ 193 │ 1 │ 2.5 │ 0.5 │ 0.5 │ 0.01 │ 0 │ 0.3 │ 3.81 │ 0.0 │
│ │ │ 6 │ 2 │ 2019-12-18 15:27:49 │ 2019-12-18 15:28:59 │ 1 │ 0.0 │ 5 │ N │ 193 │ 193 │ 1 │ 0.01 │ 0.0 │ 0.0 │ 0.0 │ 0 │ 0.3 │ 2.81 │ 2.5 │
│ │ │ 7 │ 2 │ 2019-12-18 15:30:35 │ 2019-12-18 15:31:35 │ 4 │ 0.0 │ 1 │ N │ 193 │ 193 │ 1 │ 2.5 │ 0.5 │ 0.5 │ 0.0 │ 0 │ 0.3 │ 6.3 │ 2.5 │,)))
│ └─ yellow-ptype-2.df (Thunk(repr, (2×18 SubDataFrame
│ │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│ │ │ Int64 │ String │ String │ Int64 │ Float64 │ Int64 │ String │ Int64 │ Int64 │ Int64 │ Float64 │ Float64 │ Float64 │ Float64 │ Int64 │ Float64 │ Float64 │ Float64 │
│ ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ │ 1 │ 2 │ 2020-01-01 00:01:58 │ 2020-01-01 00:04:16 │ 1 │ 0.0 │ 1 │ N │ 193 │ 193 │ 2 │ 3.5 │ 0.5 │ 0.5 │ 0.0 │ 0 │ 0.3 │ 4.8 │ 0.0 │
│ │ 2 │ 2 │ 2020-01-01 00:09:44 │ 2020-01-01 00:10:37 │ 1 │ 0.03 │ 1 │ N │ 7 │ 193 │ 2 │ 2.5 │ 0.5 │ 0.5 │ 0.0 │ 0 │ 0.3 │ 3.8 │ 0.0 │,)))
└─ 02/
├─ yellow-ptype-1.df (Thunk(repr, (7×18 SubDataFrame
│ │ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│ │ │ Int64 │ String │ String │ Int64 │ Float64 │ Int64 │ String │ Int64 │ Int64 │ Int64 │ Float64 │ Float64 │ Float64 │ Float64 │ Int64 │ Float64 │ Float64 │ Float64 │
│ ├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ │ 1 │ 1 │ 2020-02-01 00:17:35 │ 2020-02-01 00:30:32 │ 1 │ 2.6 │ 1 │ N │ 145 │ 7 │ 1 │ 11.0 │ 0.5 │ 0.5 │ 2.45 │ 0 │ 0.3 │ 14.75 │ 0.0 │
│ │ 2 │ 1 │ 2020-02-01 00:32:47 │ 2020-02-01 01:05:36 │ 1 │ 4.8 │ 1 │ N │ 45 │ 61 │ 1 │ 21.5 │ 3.0 │ 0.5 │ 6.3 │ 0 │ 0.3 │ 31.6 │ 2.5 │
│ │ 3 │ 1 │ 2020-02-01 00:31:44 │ 2020-02-01 00:43:28 │ 1 │ 3.2 │ 1 │ N │ 186 │ 140 │ 1 │ 11.0 │ 3.0 │ 0.5 │ 1.0 │ 0 │ 0.3 │ 15.8 │ 2.5 │
│ │ 4 │ 2 │ 2020-02-01 00:07:35 │ 2020-02-01 00:31:39 │ 1 │ 4.38 │ 1 │ N │ 144 │ 140 │ 1 │ 18.0 │ 0.5 │ 0.5 │ 3.0 │ 0 │ 0.3 │ 24.8 │ 2.5 │
│ │ 5 │ 1 │ 2020-02-01 00:15:49 │ 2020-02-01 00:20:48 │ 2 │ 1.0 │ 1 │ N │ 249 │ 107 │ 1 │ 5.5 │ 3.0 │ 0.5 │ 1.85 │ 0 │ 0.3 │ 11.15 │ 2.5 │
│ │ 6 │ 1 │ 2020-02-01 00:25:31 │ 2020-02-01 00:50:22 │ 2 │ 3.4 │ 1 │ N │ 79 │ 256 │ 1 │ 18.5 │ 3.0 │ 0.5 │ 4.45 │ 0 │ 0.3 │ 26.75 │ 2.5 │
│ │ 7 │ 2 │ 2020-02-01 00:58:26 │ 2020-02-01 01:02:26 │ 1 │ 0.8 │ 1 │ N │ 116 │ 42 │ 1 │ 5.0 │ 0.5 │ 0.5 │ 1.26 │ 0 │ 0.3 │ 7.56 │ 0.0 │,)))
└─ yellow-ptype-2.df (Thunk(repr, (2×18 SubDataFrame
│ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│ │ Int64 │ String │ String │ Int64 │ Float64 │ Int64 │ String │ Int64 │ Int64 │ Int64 │ Float64 │ Float64 │ Float64 │ Float64 │ Int64 │ Float64 │ Float64 │ Float64 │
├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ 1 │ 2 │ 2020-02-01 00:51:43 │ 2020-02-01 01:01:29 │ 1 │ 2.28 │ 1 │ N │ 238 │ 152 │ 2 │ 9.5 │ 0.5 │ 0.5 │ 0.0 │ 0 │ 0.3 │ 10.8 │ 0.0 │
│ 2 │ 1 │ 2020-02-01 00:11:15 │ 2020-02-01 00:24:29 │ 1 │ 2.1 │ 1 │ N │ 224 │ 68 │ 2 │ 10.5 │ 3.0 │ 0.5 │ 0.0 │ 0 │ 0.3 │ 14.3 │ 2.5 │,)))
exec(expanded_tree)
taxi-data/
├─ 2019/
│ ├─ 01/
│ │ ├─ yellow-ptype-1.df (String)
│ │ └─ yellow-ptype-2.df (String)
│ └─ 02/
│ ├─ yellow-ptype-1.df (String)
│ └─ yellow-ptype-2.df (String)
└─ 2020/
├─ 01/
│ ├─ yellow-ptype-1.df (String)
│ └─ yellow-ptype-2.df (String)
└─ 02/
├─ yellow-ptype-1.df (String)
└─ yellow-ptype-2.df (String)
exec(expanded_tree) |> files |> first |> get |> print
5×18 SubDataFrame
│ Row │ VendorID │ tpep_pickup_datetime │ tpep_dropoff_datetime │ passenger_count │ trip_distance │ RatecodeID │ store_and_fwd_flag │ PULocationID │ DOLocationID │ payment_type │ fare_amount │ extra │ mta_tax │ tip_amount │ tolls_amount │ improvement_surcharge │ total_amount │ congestion_surcharge │
│ │ Int64 │ String │ String │ Int64 │ Float64 │ Int64 │ String │ Int64 │ Int64 │ Int64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Float64 │ Missing │
├─────┼──────────┼──────────────────────┼───────────────────────┼─────────────────┼───────────────┼────────────┼────────────────────┼──────────────┼──────────────┼──────────────┼─────────────┼─────────┼─────────┼────────────┼──────────────┼───────────────────────┼──────────────┼──────────────────────┤
│ 1 │ 1 │ 2019-01-01 00:46:40 │ 2019-01-01 00:53:20 │ 1 │ 1.5 │ 1 │ N │ 151 │ 239 │ 1 │ 7.0 │ 0.5 │ 0.5 │ 1.65 │ 0.0 │ 0.3 │ 9.95 │ missing │
│ 2 │ 1 │ 2019-01-01 00:59:47 │ 2019-01-01 01:18:59 │ 1 │ 2.6 │ 1 │ N │ 239 │ 246 │ 1 │ 14.0 │ 0.5 │ 0.5 │ 1.0 │ 0.0 │ 0.3 │ 16.3 │ missing │
│ 3 │ 2 │ 2018-12-21 13:48:30 │ 2018-12-21 13:52:40 │ 3 │ 0.0 │ 1 │ N │ 236 │ 236 │ 1 │ 4.5 │ 0.5 │ 0.5 │ 0.0 │ 0.0 │ 0.3 │ 5.8 │ missing │
│ 4 │ 1 │ 2019-01-01 00:21:28 │ 2019-01-01 00:28:37 │ 1 │ 1.3 │ 1 │ N │ 163 │ 229 │ 1 │ 6.5 │ 0.5 │ 0.5 │ 1.25 │ 0.0 │ 0.3 │ 9.05 │ missing │
│ 5 │ 1 │ 2019-01-01 00:32:01 │ 2019-01-01 00:45:39 │ 1 │ 3.7 │ 1 │ N │ 229 │ 7 │ 1 │ 13.5 │ 0.5 │ 0.5 │ 3.7 │ 0.0 │ 0.3 │ 18.5 │ missing │