Как я могу получить Фрейм данных Deedle из HttpResponseWithStream? - PullRequest
0 голосов
/ 23 сентября 2018

Я написал функцию, которая загружает данные из службы и сохраняет их в кадре данных Deedle:

/// Downloads data from EOD Historical Data for one stock.
let downloadFromEOD (storageDataPath: string) (symbol: string) : unit =

    // Token for the EOD service
    let apiToken = "9999999999999"

    let endStr = "?api_token=" + apiToken + "&period=d&order=d"

    printfn "Downloading symbol %s" symbol 

    let url = @"http://eodhistoricaldata.com/api/eod/" + symbol + endStr

    // The data is saved in a temporary file
    let lines : HttpResponseWithStream = Http.RequestStream(url)
    let tempPath : string = storageDataPath + @"temp\" + symbol + ".csv"
    let fileStream : FileStream = File.Create(tempPath)
    lines.ResponseStream.CopyTo(fileStream)
    fileStream.Close()

    let df : Frame<DateTime,string> =
        File.ReadLines(tempPath)
        |> List.ofSeq
        |> List.tail
        |> List.filter (fun str -> str.Contains ",")
        |> List.map eODRowFoo // not relevant for this SO question
        |> Frame.ofRows

    let path = storageDataPath + symbol + ".csv"

    FrameExtensions.SaveCsv(df, path, includeRowKeys=true, keyNames=["Date"])

Функция вызывает Http.RequestStream для вычисления lines, копирует lines в путь изатем читает файл и преобразует данные в Deedle DataFrame.

. Интересно, есть ли способ избежать записи данных в файл и последующего чтения.Можно ли создать какой-то объект, начиная с HttpResponseWithStream, который можно каким-то образом преобразовать в DataFrame менее надуманным способом?

...