Created
February 16, 2022 15:38
-
-
Save magnushammar/c81abe804edff324b258291e1fe779cd 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
(* 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