csvfile.load의 배열로 이름으로 열을 가져 오거나 csv에서 배열 사전을 만듭니다).

StackOverflow https://stackoverflow.com//questions/21030203

  •  21-12-2019
  •  | 
  •  

문제

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를 가져 오는 효율적인 방법은 무엇입니까?이것에 대한 새로운 질문을 정말로 만들어야한다면 알려주세요.아직 모든 StackOverflow 표준에 익숙하지 않습니다.

도움이 되었습니까?

해결책

"이름으로"열을 원합니다. "누군가가 열 이름을 문자열로 전달하는"또는 "내 코드에서 열 이름을 사용하십시오."라고 말하면 분명하지 않습니다.유형 제공자는 후자의 경우에 적합하지만, 이전에 실제로 도움이되지는 않습니다.

후자의 경우, 당신은 이것을 사용할 수 있습니다 :

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
.

이것은 이것이 도움이되기를 바랍니다.

나는 이 예제 밖에갔습니다.다음과 같은 것과 같아야합니다.

let data = 
    msft.Data
    |> List.fold (fun acc row -> row.Date :: acc) List.Empty<DateTime>
.

여기에서는 MSFT 데이터 레코드의 MSFT.DATA 목록을 파이핑하고 해당 목록에서 한 항목 목록으로 접을 수 있습니다.언급 된 모든 기능에 대한 설명서를 확인하십시오.나는 이것을 실행하지 않았다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top