How to resolve the algorithm Merge and aggregate datasets step by step in the PureBasic programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Merge and aggregate datasets step by step in the PureBasic programming language

Table of Contents

Problem Statement

Merge and aggregate datasets

Merge and aggregate two datasets as provided in   .csv   files into a new resulting dataset. Use the appropriate methods and data structures depending on the programming language. Use the most common libraries only when built-in functionality is not sufficient.

Either load the data from the   .csv   files or create the required data structures hard-coded.

patients.csv   file contents:

visits.csv   file contents:

Create a resulting dataset in-memory or output it to screen or file, whichever is appropriate for the programming language at hand. Merge and group per patient id and last name,   get the maximum visit date,   and get the sum and average of the scores per patient to get the resulting dataset.

Note that the visit date is purposefully provided as ISO format,   so that it could also be processed as text and sorted alphabetically to determine the maximum date.

This task is aimed in particular at programming languages that are used in data science and data processing, such as F#, Python, R, SPSS, MATLAB etc.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Merge and aggregate datasets step by step in the PureBasic programming language

Source code in the purebasic programming language

Structure Person
  Name$
EndStructure

Structure Visits
  Datum$
  Score$
EndStructure

Structure Merge
  Patient.Person
  List PVisit.Visits()
EndStructure

NewMap P.Merge()
NewList ID$()

If ReadFile(1,"./Data/patients.csv")=0 : End 1 : EndIf
header=1
While Not Eof(1)
  buf1$=ReadString(1)
  If header=1 : header=0 : Continue : EndIf
  bufId$=StringField(buf1$,1,",")
  P(bufId$)\Patient\Name$=StringField(buf1$,2,",")
  AddElement(ID$()) : ID$()=bufId$
Wend
CloseFile(1)

If ReadFile(2,"./Data/visits.csv")=0 : End 2 : EndIf
header=1
While Not Eof(2)
  buf1$=ReadString(2)
  If header=1 : header=0 : Continue : EndIf 
  bufId$=StringField(buf1$,1,",")
  AddElement(P(bufId$)\PVisit()) 
  P(bufId$)\PVisit()\Datum$=StringField(buf1$,2,",")
  P(bufId$)\PVisit()\Score$=StringField(buf1$,3,",")
Wend
CloseFile(2)

If OpenConsole()=0 : End 3 : EndIf
SortList(ID$(),#PB_Sort_Ascending)
PrintN("| PATIENT_ID | LASTNAME | LAST_VISIT | SCORE_SUM | SCORE_AVG |")
ForEach ID$()
  Print("| "+LSet(ID$(),11))
  Print("| "+LSet(P(ID$())\Patient\Name$,9)+"|")
  SortStructuredList(P(ID$())\PVisit(),#PB_Sort_Ascending,OffsetOf(Visits\Datum$),TypeOf(Visits\Datum$))  
  ForEach P(ID$())\PVisit() 
    scs.f+ValF(p(ID$())\PVisit()\Score$) : c+Bool(ValF(p(ID$())\PVisit()\Score$))
  Next
  If LastElement(P(ID$())\PVisit())    
    sca.f=scs/c 
    Print(" "+LSet(P(ID$())\PVisit()\Datum$,10)+" |")
    Print(RSet(StrF(scs,1),10)+" |")
    If Not IsNAN(sca) : Print(RSet(StrF(sca,2),10)+" |") : Else : Print(Space(11)+"|") : EndIf
  Else
    Print(Space(12)+"|"+Space(11)+"|"+Space(11)+"|")
  EndIf  
  PrintN("") : scs=0 : c=0
Next
Input()

  

You may also check:How to resolve the algorithm Tonelli-Shanks algorithm step by step in the Wren programming language
You may also check:How to resolve the algorithm N-queens problem step by step in the BBC BASIC programming language
You may also check:How to resolve the algorithm Multiplication tables step by step in the Phixmonti programming language
You may also check:How to resolve the algorithm Sorting algorithms/Bogosort step by step in the Oz programming language
You may also check:How to resolve the algorithm Happy numbers step by step in the MAXScript programming language