Я изо всех сил пытаюсь обойти меня, используя провайдер типа CSV в F # для простых задач анализа данных. Я сделал несколько поисковых запросов вокруг функции «Seq» и поставщика типа csv в целом, но не могу найти ресурсы, имеющие отношение к моей проблеме, поэтому помощь приветствуется.Вопросы провайдера типа # # # # # # # # #
Я пытаюсь использовать F # для создания показателей на данных Horse Racing (за каждого бегуна в гонке). Мои данные в формате CSV и имеет структуру, подобную этой: raceId, runnerId, имя, finishingPosition, startingPrice и т.д.
Так что я хочу сделать изначально группу, каждая из CSV строки по raceId и создать дополнительные «идеи» на каждой гонке (примером здесь будет «positionInBetting» с использованием «startPrice» для каждого бегуна в гонке).
это то, что у меня есть:
open FSharp.Data
type Runner = CsvProvider<Sample="runners.csv",AssumeMissingValues=true>
let dataset = Runner.Load("runners.csv")
let racesSince2010 = dataset.Rows |> Seq.filter (fun r -> r.Meeting_date.IsSome && r.Meeting_date.Value > new System.DateTime(2010,1,1)) |> Seq.groupBy (fun r -> r.Race_id)
Таким образом, это достигает первую часть группировки бегунов от гонок и дает мне SEQ кортежей, где ключ является raceId и значение является следом полозьев (I предположим, но VS говорит мне, что это на самом деле seq<CsvProvider<...>.Row>
)
тогда я ожидал, что это работает:
let raceDetails (raceId, runnersList:seq<Runner>) = runnersList |> Seq.iter (fun r -> printfn "race: %i runner: %s" raceId r.)
но r.name не доступен в VS IntelliSense. Я знаю, что не понимаю, почему вывод моей функции группировки определяется как seq<CsvProvider<...>.Row>
вместо seq<Runner>
, но я не могу найти что-либо, чтобы объяснить это мне, или как атаковать проблему, которую я испытываю.
Alex
понял это - необходимый «Runner», чтобы быть изменен на «Бегуны» и новой линии типа Runner = Runners.Row –