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 DataFrames 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
# ...
endTimeArray 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 omittedDataFrame 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)