Skip to content

Instantly share code, notes, and snippets.

@magnushammar
Created February 16, 2022 15:38
Show Gist options
  • Save magnushammar/c81abe804edff324b258291e1fe779cd to your computer and use it in GitHub Desktop.
Save magnushammar/c81abe804edff324b258291e1fe779cd to your computer and use it in GitHub Desktop.
(* Sample CSV
Date,Sales
2022-01-08 16:06:29,1
2022-01-08 12:06:29,2
2022-01-09 12:06:29,4
*)
#r "nuget: FSharp.Data"
#r "nuget: Plotly.NET, 2.0.0-preview.17"
open FSharp.Data
open Plotly.NET
[<Literal>]
let ResolutionFolder = __SOURCE_DIRECTORY__
type Sales = CsvProvider<"./data/Pingo.csv",ResolutionFolder=ResolutionFolder>
let sales = Sales.Load(__SOURCE_DIRECTORY__ + "/data/Pingo.csv")
let groupedByDayOfWeek =
sales.Rows
// Delar upp raderna i grupper baserade på veckodag
|> Seq.groupBy (fun row -> row.Date.DayOfWeek)
// Bearbetar sedan varje veckodag för sig
// Denna funktion anropas en gång för varje grupp (veckodag)
|> Seq.map (fun (category, rows) ->
// Summera all försäljning som tillhör denna veckodag
let salesPerDayOfWeek = rows |> Seq.sumBy (fun x -> x.Sales)
//returnera veckodag och delsumma som ett par värden (Tuple)
(category.ToString(), salesPerDayOfWeek)
)
let dayOfWeekChart = Chart.Column(groupedByDayOfWeek)
let groupedByHour =
sales.Rows
|> Seq.groupBy (fun row -> row.Date.Hour)
|> Seq.map (fun (category, rows) ->
let salesByHour = rows |> Seq.sumBy (fun x -> x.Sales)
(category, salesByHour)
)
let hourChart = Chart.Column(groupedByHour)
let groupedByDay =
sales.Rows
|> Seq.groupBy (fun row -> row.Date.ToShortDateString())
|> Seq.map (fun (category, rows) ->
let salesPerDay = rows |> Seq.sumBy (fun x -> x.Sales)
(category, salesPerDay)
)
let dayChart = Chart.Column(groupedByDay)
dayOfWeekChart |> Chart.show
dayChart |> Chart.show
hourChart |> Chart.show
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment