-
-
Save fwaris/28824fca92e020f7fcf5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
open System.IO | |
open System | |
open System.Xml | |
type ComplaintRecord = {Company:string; Make:string; Model:string; Year:string; Date:DateTime} | |
let complaintsFile = @"C:\ws\nhtsa\FLAT_CMPL\FLAT_CMPL.txt" | |
let toDate s = if s="" then DateTime.MinValue else XmlConvert.ToDateTime(s,"yyyyMMdd") | |
let mapComplaint = (fun (line:string) -> | |
let fs = line.Split('\t') | |
let date = fs.[7].Trim() |> toDate | |
{Company=fs.[2]; Make=fs.[3]; Model=fs.[4]; Year=fs.[5]; Date=date}) | |
let complaints = complaintsFile |> File.ReadLines |> Seq.map mapComplaint |> Seq.toArray | |
let complaintCountByModelYear = | |
complaints | |
|> Seq.filter (fun r -> r.Make = "HONDA") | |
|> Seq.countBy (fun r -> (r.Model, r.Year)) | |
|> Seq.sortBy (fun (modelYear,count) -> -count) | |
|> Seq.toArray | |
;; | |
printfn "%A" complaintCountByModelYear | |
let calcAverage filterFunction = | |
complaints | |
|> Seq.filter filterFunction | |
|> Seq.countBy (fun r -> (r.Model, r.Year)) | |
|> Seq.averageBy (fun (_,count) -> (float)count) | |
let fordBefore2k7 = calcAverage (fun r -> r.Make = "FORD" && r.Date.Year < 2007) | |
let fordAFter2k7 = calcAverage (fun r -> r.Make = "FORD" && r.Date.Year >= 2007) | |
let hondaBefore2k7 = calcAverage (fun r -> r.Make = "HONDA" && r.Date.Year < 2007) | |
let hondaAFter2k7 = calcAverage (fun r -> r.Make = "HONDA" && r.Date.Year >= 2007) | |
let toyotaBefore2k7 = calcAverage (fun r -> r.Make = "TOYOTA" && r.Date.Year < 2007) | |
let toyotaAFter2k7 = calcAverage (fun r -> r.Make = "TOYOTA" && r.Date.Year >= 2007) | |
;; | |
printfn "Ford %0.2f/%0.2f; Honda %0.2f/%0.2f; Toyota %0.2f/%0.2f" | |
fordBefore2k7 fordAFter2k7 hondaBefore2k7 | |
hondaAFter2k7 toyotaBefore2k7 toyotaAFter2k7 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment