csvfile.loadからの配列として名前で列を取得する(またはCSVからの配列の辞書の作成)
質問
CSVをロードするための次のコードがあります。配列として「MSFT」(好ましくは名前で)から列を取得するための最良の方法は何ですか?またはこれを行うために別の方法でデータをロードする必要がありますか?
#r "FSharp.Data.dll"
open FSharp.Data.Csv
let msft = CsvFile.Load("http://ichart.finance.yahoo.com/table.csv?s=MSFT").Cache()
.
編集:あるいは、CSVを列名でキー入力された辞書にインポートする効率的な方法は何でしょうか。私が本当にこれに新しい質問を作成するべきなら、私に知らせてください。まだすべてのスタックオーバーフロー標準に精通していません。
解決
「名前で」列を列したいと言ったら、「誰かが列名を文字列として渡す」または「コードで列名を使用している」という意味ではありません。タイププロバイダーは後者の場合に最適ですが、前者には本当に役に立ちません。
後者の場合は、これを使用できます。
let closes = [| yield! msft.Data |> Seq.map (fun x -> x.Close) |]
.
前者の場合は、列名で鍵を入力した辞書に、他の方法でデータを読むことを検討したい場合があります。
型プロバイダの全体のポイントは、この強く型付けされたコードに焦点を合わせ、列名を渡すことから、または有効でない可能性がある文字列として離れるように移動することです。
他のヒント
ラトキンの答えの建物、これはあなたが望むものをやることのより機能的またはf#のようなようです。
let getVector columnAccessor msft =
[| yield! msft.Data |> Seq.map columnAccessor |]
(* Now we can get the column all at once *)
let closes = getVector (fun x -> x.Close) msft
(* Or we can create an accessor and pipe our data to it. *)
let getCloses = getVector (fun x -> x.Close)
let closes = msft |> getCloses
.
これが助けを願っています。
私は
所属していません StackOverflow