我是一名R开发人员,有兴趣擅长F#所以这个问题是如何塑造和重塑数据的更广泛主题的一部分.
问题:NYC Flight Delays数据集中有
三个月有超过7000个天气延迟.我想过滤所有其他月份,以便我只有这三个月来分析.如何在F#中完成?长期的F#解决方案只是呼叫R吗?或者.NET中是否存在可以执行这些任务的强大数据库.
您可以使用CSV类型提供从FSharp.Data得到强类型的访问从互联网地址数据,甚至直接:
#r "../packages/FSharp.Data.2.2.5/lib/net40/FSharp.Data.dll"
open System
open FSharp.Data
type FlightDelays =
CsvProvider<"https://raw.githubusercontent.com/wiki/arunsrinivasan/flights/NYCflights14/delays14.csv">
Run Code Online (Sandbox Code Playgroud)
这为您提供了对数据源的强类型访问.例如,要查找天气延迟超过7000的所有月份,您可以执行以下操作:
let monthsWithDelaysOver7k =
FlightDelays.GetSample().Rows
|> Seq.filter (fun r -> not (Double.IsNaN r.Weather_delay))
|> Seq.groupBy (fun r -> r.Year, r.Month)
|> Seq.map (fun ((y, m), rs) -> y, m, rs |> Seq.sumBy (fun r -> r.Weather_delay))
|> Seq.filter (fun (y, m, d) -> d >= 7000.)
Run Code Online (Sandbox Code Playgroud)
转换为列表,数据如下所示:
> monthsWithDelaysOver7k |> Seq.toList;;
val it : (int * int * float) list =
[(2014, 1, 118753.0); (2014, 2, 59567.0); (2014, 4, 7618.0);
(2014, 5, 11594.0); (2014, 6, 15928.0); (2014, 7, 54298.0);
(2014, 10, 7241.0)]
Run Code Online (Sandbox Code Playgroud)
您现在可以使用它monthsWithDelaysOver7k
来获取这些月份中的所有行.
您可以编写一些比上述更有效的查询,但这可以让您了解如何解决问题.