Tables.jl Interface Integration
Quoted from the home page of Tables.jl:
The Table.jl package provides simple, yet powerful interface functions for working with all kinds tabular data through predictable access patterns.
The integration provides handy constructor to convert a table between several types. The time index of a TimeArray
is considered as a normal data column named timestamp
.
Here this doc shows some example usages of this integration. Converting table between DataFrame
s or CSV
are quite common cases.
eachrow
and eachcol
iterators
In Julia v1.1+, these two functions are supported and baked by Tables.jl
.
julia> using MarketData
julia> for row ∈ eachrow(ohlc)
time = row.timestamp
c = row.Close
# ...
end
TimeArray
to DataFrame
julia> using MarketData, DataFrames
julia> df = DataFrame(ohlc)
500×5 DataFrame
Row │ timestamp Open High Low Close
│ Date Float64 Float64 Float64 Float64
─────┼────────────────────────────────────────────────
1 │ 2000-01-03 104.88 112.5 101.69 111.94
2 │ 2000-01-04 108.25 110.62 101.19 102.5
3 │ 2000-01-05 103.75 110.56 103.0 104.0
4 │ 2000-01-06 106.12 107.0 95.0 95.0
5 │ 2000-01-07 96.5 101.0 95.5 99.5
6 │ 2000-01-10 102.0 102.25 94.75 97.75
7 │ 2000-01-11 95.94 99.38 90.5 92.75
8 │ 2000-01-12 95.0 95.5 86.5 87.19
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮
494 │ 2001-12-20 21.4 21.47 20.62 20.67
495 │ 2001-12-21 21.01 21.54 20.8 21.0
496 │ 2001-12-24 20.9 21.45 20.9 21.36
497 │ 2001-12-26 21.35 22.3 21.14 21.49
498 │ 2001-12-27 21.58 22.25 21.58 22.07
499 │ 2001-12-28 21.97 23.0 21.96 22.43
500 │ 2001-12-31 22.51 22.66 21.83 21.9
485 rows omitted
DataFrame
to TimeArray
In this case, user needs to point out the column of time index via the timestamp
keyword argument.
julia> df′ = DataFrames.rename(df, :timestamp => :A);
julia> df′ |> first
DataFrameRow
Row │ A Open High Low Close
│ Date Float64 Float64 Float64 Float64
─────┼────────────────────────────────────────────────
1 │ 2000-01-03 104.88 112.5 101.69 111.94
julia> TimeArray(df′, timestamp = :A)
500×4 TimeArray{Float64,2,Date,Array{Float64,2}} 2000-01-03 to 2001-12-31
│ │ Open │ High │ Low │ Close │
├────────────┼────────┼────────┼────────┼────────┤
│ 2000-01-03 │ 104.88 │ 112.5 │ 101.69 │ 111.94 │
│ 2000-01-04 │ 108.25 │ 110.62 │ 101.19 │ 102.5 │
│ 2000-01-05 │ 103.75 │ 110.56 │ 103.0 │ 104.0 │
│ 2000-01-06 │ 106.12 │ 107.0 │ 95.0 │ 95.0 │
│ 2000-01-07 │ 96.5 │ 101.0 │ 95.5 │ 99.5 │
│ 2000-01-10 │ 102.0 │ 102.25 │ 94.75 │ 97.75 │
│ 2000-01-11 │ 95.94 │ 99.38 │ 90.5 │ 92.75 │
│ 2000-01-12 │ 95.0 │ 95.5 │ 86.5 │ 87.19 │
│ ⋮ │ ⋮ │ ⋮ │ ⋮ │ ⋮ │
│ 2001-12-20 │ 21.4 │ 21.47 │ 20.62 │ 20.67 │
│ 2001-12-21 │ 21.01 │ 21.54 │ 20.8 │ 21.0 │
│ 2001-12-24 │ 20.9 │ 21.45 │ 20.9 │ 21.36 │
│ 2001-12-26 │ 21.35 │ 22.3 │ 21.14 │ 21.49 │
│ 2001-12-27 │ 21.58 │ 22.25 │ 21.58 │ 22.07 │
│ 2001-12-28 │ 21.97 │ 23.0 │ 21.96 │ 22.43 │
│ 2001-12-31 │ 22.51 │ 22.66 │ 21.83 │ 21.9 │
Save a TimeArray
via CSV.jl
using CSV
CSV.write(filename, ta)
Load a TimeArray
from csv file via CSV.jl
using CSV
TimeArray(CSV.File(filename), timestamp = :timestamp)