Logo ROOT   6.14/05
Reference Guide
timeSeriesFromCSV_TDF.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_graphs
3 /// \notebook -js
4 /// This macro illustrates the use of the time axis on a TGraph
5 /// with data read from a text file containing the SWAN usage
6 /// statistics during July 2017.
7 /// We exploit the TDataFrame for reading from the file
8 ///
9 /// \macro_image
10 /// \macro_code
11 ///
12 /// \authors Danilo Piparo, Olivier Couet
13 
14 void timeSeriesFromCSV_TDF()
15 {
16  // Open the data file. This csv contains the usage statistics of a CERN IT
17  // service, SWAN, during two weeks. We would like to plot this data with
18  // ROOT to draw some conclusions from it.
19  TString dir = gROOT->GetTutorialDir();
20  dir.Append("/graphs/");
21  dir.ReplaceAll("/./", "/");
22 
23  // Read the data from the file using TDataFrame. We do not have headers and
24  // we would like the delimiter to be a space
25  auto tdf = ROOT::RDF::MakeCsvDataFrame(Form("%sSWAN2017.dat", dir.Data()), false, ' ');
26 
27  // We now prepare the graph input
28  auto d = tdf.Define("TimeStamp", "auto s = string(Col0) + ' ' + Col1; return (float) TDatime(s.c_str()).Convert();")
29  .Define("Value", "(float)Col2");
30  auto timeStamps = d.Take<float>("TimeStamp");
31  auto values = d.Take<float>("Value");
32 
33  // Create the time graph
34  auto g = new TGraph(values->size(), timeStamps->data(), values->data());
35  g->SetTitle("SWAN Users during July 2017;Time;Number of Sessions");
36 
37  // Draw the graph
38  auto c = new TCanvas("c", "c", 950, 500);
39  c->SetLeftMargin(0.07);
40  c->SetRightMargin(0.04);
41  c->SetGrid();
42  g->SetLineWidth(3);
43  g->SetLineColor(kBlue);
44  g->Draw("al");
45  g->GetYaxis()->CenterTitle();
46 
47  // Make the X axis labelled with time.
48  auto xaxis = g->GetXaxis();
49  xaxis->SetTimeDisplay(1);
50  xaxis->CenterTitle();
51  xaxis->SetTimeFormat("%a %d");
52  xaxis->SetTimeOffset(0);
53  xaxis->SetNdivisions(-219);
54  xaxis->SetLimits(TDatime(2017, 7, 3, 0, 0, 0).Convert(), TDatime(2017, 7, 22, 0, 0, 0).Convert());
55  xaxis->SetLabelSize(0.025);
56  xaxis->CenterLabels();
57 }
RDataFrame MakeCsvDataFrame(std::string_view fileName, bool readHeaders=true, char delimiter=',', Long64_t linesChunkSize=-1LL)
Factory method to create a CSV RDataFrame.
Definition: RCsvDS.cxx:439
#define g(i)
Definition: RSha256.hxx:105
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition: TString.h:687
#define gROOT
Definition: TROOT.h:410
Basic string class.
Definition: TString.h:131
virtual void SetTitle(const char *title="")
Set graph title.
Definition: TGraph.cxx:2216
TString & Append(const char *cs)
Definition: TString.h:559
char * Form(const char *fmt,...)
The Canvas class.
Definition: TCanvas.h:31
#define d(i)
Definition: RSha256.hxx:102
A Graph is a graphics object made of two arrays X and Y with npoints each.
Definition: TGraph.h:41
#define c(i)
Definition: RSha256.hxx:101
Definition: Rtypes.h:59
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
Definition: TDatime.h:37
const char * Data() const
Definition: TString.h:364