我是一个对F#很有兴趣的R开发人员,所以这个问题是如何塑造和重塑数据这个更广泛主题的一部分。
问题
在纽约航班延误数据集有三个月的时间里,有超过7000次天气延误。我想过滤掉所有其他几个月,这样我就只有这三个月可以分析了。如何在F#中做到这一点?长期的F#解决方案只是打电话给R吗?或者.NET中是否有健壮的数据库可以完成这些任务。
发布于 2015-11-23 17:34:36
您可以使用来自FSharp.Data的CSV类型提供程序对您的数据进行强类型访问,甚至直接从internet地址:
#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">这使您可以对数据源进行强类型访问。例如,要查找所有天气延迟超过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.)数据转换为列表,如下所示:
> 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)]现在可以使用monthsWithDelaysOver7k获取这些月份中的所有行。
您可能可以编写一些比上面的查询更有效的查询,但是这应该会让您了解如何处理这个问题。
https://stackoverflow.com/questions/33875482
复制相似问题