Tables.jl Interface Integration

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.

TimeArray to DataFrame

julia> using MarketData, DataFrames

julia> df = DataFrame(ohlc)
500×5 DataFrames.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   │
⋮
│ 493 │ 2001-12-19 │ 20.58   │ 21.68   │ 20.47   │ 21.62   │
│ 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    │

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  │
│ 2000-01-13 │ 94.48  │ 98.75  │ 92.5   │ 96.75  │
   ⋮
│ 2001-12-19 │ 20.58  │ 21.68  │ 20.47  │ 21.62  │
│ 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)