Aggregate Script¶
- Table of contents
- Aggregate Script
The AMR data in a tracker module is exported using an ETL developed using R-Script. The steps are elaborated below.
- The Aggregate for RIS results developed on the Aggregate module.
- Program Indicators created to calculate the RIS results. Each of the program indicators are assigned with code formed by UID representing Data element and CategoryOptionCombo which are separated by Hyphen. The mapping of Data-Element and CategoryOptionCombo has been done on program indicator to reduce the Mapping work of ETL on R-scripts.
- The source for the assigned UIDs are Aggregate data module which is Destination Database.
- Each of the program indicators from tracker is representing one dimension of the data element on Aggregate module.
- R-Scripts is extracting the RIS report using APIs. The data extraction is divided into 4 different categories of data. The categories representing Resistant, Intermediate, Susceptible and Not-tested.
- The report’s Organisation Units is fetched based on Organisation Unit group. User need to create an organization unit group for all facilities collected AMR data.
- R-Script blend the four categories of the report and is transformed to the CSV format which is acceptable by DHIS2. The data element and the CategoryOptionCombo is separate to have two columns of the data.
- The CSV file is imported in the DHIS2. So far, the Import is done via automated Curl command. The Curl for data import is set to run on a time set on Cronjob. It runs once in a month.
Running the Aggregate ScriptLink to Running the Aggregate Script¶
R-Script for Extraction and transformation of Data from program indicators to Aggregate RIS formLink to R-Script for Extraction and transformation of Data from program indicators to Aggregate RIS form¶
library(RCurl)
library(tidyr)
# For Resistance --------
Resistance <- getURL(paste0("https://amr-host.zm.dhis2.site/ohs/api/29/analytics.csv?dimension=pe:LAST_3_MONTHS&dimension=ou:OU_GROUP-lvbz0mkIFZU;AWn3s2RqgAN;utIjliUdjp8;J7PQPWAeRUk;KozcEjeTyuD;B1u1bVtIA92;dbTLdTi7s8F;SwwuteU1Ajk;q5hODNmn021;oPLMrarKeEY;g1bv2xjtV0w&dimension=dx:i71f1k6Ywde;KxQyBaNVWgC;Xk6MCCq2kzg;Z7TaC971IsX;baZQUWE0rFO;GJwNfMRp4EL;leW6h3Eple6;ZJa9rOeQkE2;b7w7gTWKUXZ;kT4dDT0NHMw;r9IrIM1V3Sx;frqTEQgrnbk;nBwIHoBbLrF;Xt9NX9Rh0fw;GfNVo7CssHk;TQQKwPDrwjk;yok8UJguhxJ;EoCTRsqqQ5M;O0pIw0kBdSn;O0pXsCrMt1E;X0g7rtM8P3X;ljZwDLquJcO;fYO7ZxJu2sZ;pzcQ6n1pcLJ;JFn7FxXavzU;Q9Qgq3nYpSP;YFsuusHcn26;DQPMqlJhoWm;Bxm9pOn5kl6;XY1c0GCIxhZ;JovFRVcpy6A;O0nV31FSGgZ;I4EucOsoVE3;AxLQmQhDHoC;Gq2xErOEyrE;BzGNBjXpmck;VPif922L8Ya;QJEikxjqlYP;lxgHMBUNUHl;V96DmUE7zMO;W2o4mOFxTuj;Ug6w2Wln6Vb;lzWp3t9V0oV;JsJFIo3C7z5;urFE2aMk8lj;lvmXRGVKZWa;Mk09Dsq0tMA;N6iaSLAUy1g;Hhv28risZ28;sTngPsOIb6o;nBOQt6Yer67;INZh9xg4jFb;efVDLeFKcDv;BfiY4gHGrin;l770nnL2NJK;pGc1UYaHqg8;EDftWGalKD7;EuLIpr1yX6I;ZFneNFHArkf;aMSfsX5C85q;bDXGA2lqXlk;yVWulHu8R2K;zSLu3UI76iU;GEWbLnlIYK5;jzHDpTnJW8O;TmeDAz5IFpo;jXhR1PIGYMT;UD3EOf1mNAj;upBBr3vnDuR;ZtitY01ETbs;KgFt0Q3mZxT;KBImbKOBglL;GcSr8JobxFZ;cYeVvQcAbqJ;QMRkBj7Xfwu;p56phNR5fiY;eXWqNo9OS9R;MMnM9163Ksg;YHbScScQ30h;sU0BC11JP0f;E4c7Xdzhjz7;FFzA1WidSuf;NnEYj9rdb8j;OXfeRjdO4rN;JXxmCy3cXH0;v2JHsDh1Tr1;wxKHTIuKd7U;B8jPEkHAsrp;piIaISz4dH4;SGl0md193h1;P2Kc9MVMrxZ;kKR7UL9xvTg;D3c6fZP4BF0;hMIeVlY7aNC;ayO1RMYxIMv;EjWyEomiGkb;DvhXH147Udr;kg6G53utwNy;bMU6ymDNfIC;GXzOn9OjTat;uwV4xxzG0N6;w8voRMKRK5o;S6yRhRhOP0t;frTB3cRciLv;WDKOG01PuaH;BBhJ811gdBh;sGY12KR57Cc;tB4myWwnaZ1;XlFGswbe7FL;x48hu3uKfnB;ujvCyU94rQE;Ty5W2wGjhtO;u8hvV4V2ZnK;YP2FmASQDYG;r0AQQyVS5GA;YI1CHzzDd2x;kDi18b7DgWi;kOqV3yBeqye;TM0YRhDN5z7;tFOy3mQa0Wp;gxWsXYOGr1A;yvuoMkSkKQ3;ubrfPpmfWJT;YLZiG343xpO;HogCPE1IgM0;BTDn3aK059M;zlfjL8trGAs;ClvXlm6Srtd;J8A93c5XZdk;Hjbfw7cKD6f;qFQNMfdDTZ8;jJUvCu7gsTZ;c4dXd7kiUTW;j1OsDEOnX0E;EEmEgSscHZo;fjhNTx5q41D;QTOVK6fd1zO;mLvGBD3IkQ9;PX28x18pNsn;e1HUbQ6O84C;Bef0Sp8uLHI;dLpsPmXfZxK;tN1vkI8QEv5;HFKtvDsnWGl;jHvGLv76IA7;z76mlay2t6j;BH0ehCFL5D7;z12GwGtS84X;u84T3p4Kg18;BTrI4DnaedM;bK6Wl3dqUo1;Kdr3oDVwiu7;imHqWk6ppSz;M0con4RGA4w;gOfbqxQxvgT;txPv34uwREH&displayProperty=NAME&outputIdScheme=CODE"), userpwd="UserName:Password", httpauth = 1L)
Resistance <- read.table(text = Resistance, sep =",", header = TRUE, stringsAsFactors = FALSE)
# head(Resistance)
# For Intermediate ------
Intermediate <- getURL(paste0("https://amr-host.zm.dhis2.site/ohs/api/29/analytics.csv?dimension=pe:LAST_3_MONTHS&dimension=ou:OU_GROUP-lvbz0mkIFZU;AWn3s2RqgAN;utIjliUdjp8;J7PQPWAeRUk;KozcEjeTyuD;B1u1bVtIA92;dbTLdTi7s8F;SwwuteU1Ajk;q5hODNmn021;oPLMrarKeEY;g1bv2xjtV0w&dimension=dx:ngA4xOdqgxe;zZa0d8aOXnP;EMYG1Cd6IuY;PI2BHpiykg3;dRczpnCjpK0;mW6WyIHiDbW;LInPyvFbkui;XQEcH5oEZBb;ljLv3aFGVT3;zIhNjNEZtGD;zB4TAB8ePrV;fSCC7cdqGzp;WE10IzzxXry;sHVz8TSkrwf;px0mFynZu1Y;iqo7yTxTjYc;ckXHRGoSCrH;IuB58NfylWy;xpdmCteYBZL;yqC5qDpavqe;xt8YjoHmTjB;nIVeLcaNyba;X08rKHidXXX;poTDSqQ1eoG;b2TxNaUjUaP;ubB2YdRVO6J;LCo2wZO9FNk;Rxqg7LWPxtT;HFyxLiUrvVs;KrUiSi2PMFL;GShTZi0eIP7;PXEg4cCkTD8;pAtcpF6htZO;Ovf5eUvJWyH;vqzcMlZwauX;pBSIF2PXFU3;x6XAgb1n2ti;h1R68dlfd3r;GN1xfWLMYuZ;dnmw0RtsCEP;qkSuNHJnLPL;txsZCpIpWzg;b6JULkeYOde;kAFWQZOYjQC;E01v8P8WGNZ;LpRzsK8dDJB;WINRGUnoGty;aE3BTI0szrd;OZo06JtMIhY;Y1uydfRNkZM;BAEqtWpqxTP;iQQvVGSRxEs;qsX20M2B6Ux;p0z0Oal67DS;ZZL8Ovs3uAh;HZw6pGWIXzS;uKRPLp3EZrY;cGJI9K5Nw7v;bkVVjt9ipCW;uo9NAz5vc3m;a2n3SKxGMPb;qEQQHPvbZuQ;CvgJKRz1EhD;G7g5wp5ihje;VyGmb1B1WqU;GMbI9GIBPe6;CTOfrhby8pL;FTIIoKaNEUS;Tq5xPpIpD2P;gfmtm0tpHLW;Zzq1cqAAj36;C0caoP91AVK;JoiW4sOwAun;HzBypt3Nxvj;z6uW9leRCGk;Qeex7ygYxED;NUYMcH8Zc05;XPA4wQAREUx;tfGARI1qcyw;hadatRJ8eVK;Yrx5DrCGTMa;ZAlmDkNuylh;ItZ5Yxv5G3i;dFEufZ5xQBK;VrHT0o7hRm3;fh3qIB7F8mc;ip2u55l8gaW;cIofft82ABQ;A9OCT1zhvjH;G6pN02X1JNX;cwy3ZX0xhDh;k1ogu1DwP6A;gEqXANGGrGM;WpPGXswH4Iu;c87KevTn9YS;MFDMfUBhLTN;U2m9P0Z3XSG;bkjv0fLmfJM;u3CVZsBrZct;GHU2wsQMMXe;uNmQm86U687;sXAD0arxQLs;q4L1Fr4F0Un;wpRwzlPxoY5;DNhuheEjwax;w4HMUgc9lmp;eDVQpZXQ12Q;w4VFqBkCu67;ZZ4y9mcangW;tmMsTKp1urO;FmZu69GBy2E;aTXVTAdI4x9;jUWOCM14xBb;h3JGMKt2cJf;mQaSpaJaUQ2;FemLR1qpNdB;lwv1Ekk2SVA;pY3MLQazWpr;HxsDjAJM6k9;VO2e9LNx8cz;dD5lPC6ge6E;ThpCH25wncc;hzYrv8SEWVj;uw6H8GiWMV9;mezlxMZztNh;rAjF7tknpU6;H6mkpuB6ih9;QvUnqgsEx6c;wRhLx8dgU3z;jB9ATEMUAzp;ss78TKHm7WG;onUAlZmWFLf;y4WKdIOJfIy;j6qcfe7kHh2;GNIcBXvw85A;x9jQ1xWT41j;ikfWi2F5wvF;BQLnSAcIbbU;tJP27qp0Q66;FN3GOoBLiJ0;KO5KjWpDXMi;Qw5pJ5q5Akh;RDqfkJz7W1n;IDK8Wo2JGcO;MhRBio0OLDY;UGcAHzk77XK;RhKOVMYFrbT;SICusRcYKgm;GJkxyy3Z6gp;vESSJyUaLtH&displayProperty=NAME&outputIdScheme=CODE"), userpwd="UserName:Password", httpauth = 1L)
Intermediate <- read.table(text = Intermediate, sep =",", header = TRUE, stringsAsFactors = FALSE)
# head(Intermediate)
# For Susceptible ------
Susceptible <- getURL(paste0("https://amr-host.zm.dhis2.site/ohs/api/29/analytics.csv?dimension=pe:LAST_3_MONTHS&dimension=ou:OU_GROUP-lvbz0mkIFZU;AWn3s2RqgAN;utIjliUdjp8;J7PQPWAeRUk;KozcEjeTyuD;B1u1bVtIA92;dbTLdTi7s8F;SwwuteU1Ajk;q5hODNmn021;oPLMrarKeEY;g1bv2xjtV0w&dimension=dx:w10DvjAoX5b;TXxhNIiRWG3;p7DKI2P8DhX;vAq0xfHyaDt;wtRG7uuFaB4;IQawXWSRZFy;czap5LIrHvt;j1OCvwnf2Er;qsr5ofdwOgC;eylCJ3gj3nA;hy7XUaWuRIV;kUia6DzmeFJ;NE1szb2KYfH;bKd9D3iAp58;AnA7OmTIC8c;PYc5G6n1JLL;c4FNZgtcOJq;Id4oqKXV5CI;Ty1TlWLMDLK;pVRBP6uNlpW;DA6dsII6AiP;dZgPuilm57X;ONZBDygpbNT;wfol48XS1PY;ULGsa8x4Qlr;grWHhriaiJg;Q3XWVb4BR4R;uCubjY5FyZ6;YcUP7doT4gK;CRcXr1694GJ;K0vimdA07vD;A49JgPIRxmD;yqcgL2OyBAD;kPxEN8V8Z29;fWM2kZhSiFO;yuVvIV7fB0o;cUjVbWil3gA;qB7mpfacjIU;LgITUDUkQX7;x1DHufnmKTs;KS1M8LS4muK;Hk78xE0lIrk;TMPHUevWLjX;HKSxrDgIKT7;WAM1Fs0xLsL;YnOdfZSwOKr;jCtnP7cYOaX;k4gUKT9kvCH;Jc0WaNlOxc9;cOVkf0FmB4m;ZBrMkOpcdny;Mczuf1kebf3;JlqTrUWImzW;odi5xXTiP9L;PW7TmgEOzfI;qC34bZWQRdJ;OMMJBXJ7pYa;Tjxgbk8rPjM;fQAz8Iv7wea;XGETAoqFw78;DrOIJdtufY2;dROYrYjnXRV;xmAIiaNfvXR;haW0MPgyNIb;ez87C6faFbi;wfZnu2da30Y;qGaUxNFnsz0;Qqk88yrl6Lf;VgELzsjLdSK;LsKUExesXVZ;pWWB4qN7e9S;PMwr5nuXjir;w4QI2DjORlk;UWJGnRrdN8j;XbwQByrHoCO;Gluj6UhubN3;wmyR2G9ESzS;Xvn0ElEO4ki;ty3XSu6Ppm0;RIiNeyJZX29;l38EX2Nm2a2;cb1dJRpQ8Rw;kYRc6Sq0Xbl;HOX7kcnVI79;hATddnQQMUS;pOfaUWBCVX7;UTEWHKXBFWF;KFIgSlACd6R;cZpKPLmsnHD;Ul7nKdSiXhj;DGoYXNwH5jz;esjYggc3aJS;gZkT7ukYV67;y26GCqR0h09;Y8KdBTl5KXa;tWT04TSUSgO;cnf2ynsuwAa;HAJqBQAMME9;amX3IgzO2pQ;wJsXVu0MVKI;od2qBd9xWGF;BZ42PHD4kov;Ck18GqpcxzJ;O1QafHB1NPe;Co3JU6cXapA;m3AUXJgbNSp;OSReFy9Jzkz;hf661KHlEN5;jWscaNhpicn;WdNoToiX1ci;r2zsOSIzSJX;vlxC8yBNBIA;ff20peq5QBg;IGS1ufQkFUH;udbfGPH7MoW;RupGJJdPkke;oZABAj5UgLi;Cwn8fAU6zWH;vgeKJq5xq5L;LU0N0RPB7oy;U06uZ1UaB4F;R30uLApE4bN;IpusnWEIbZH;FQmRbKrBKrt;EVCgxHSFBQf;I5yJTR5l0Ed;VW84KYAgrFj;pH6h60ULW8O;GopKOwl50Yn;bcd8HYyQSBp;BbfzQ3vlpgk;FKqw130og3t;BKdGdTGRPLX;fNuSbGryeEN;j2QdpLMjD34;KyCPNjQLxmS;z7QBlpuwKKe;DL6rirddhet;Q7MuMzjmGCE;TwjslaSpfU6;h1bnuAWhZBc;ZJA6SSwlZHR;URhXa8eUok7;YloyiP9yLI8;CIyxv21uXjJ;ir9xLQbdfmq;erUtSTtEdT5;F3nmrZvSUXO;WYKaq23JGps;eQAHVtJjmAJ;CJZO8sb9Xql;RXQ4jzI771L;zorjLbFuwBq;XjxW7LjyQKA;jI7GwBrejxC&displayProperty=NAME&outputIdScheme=CODE"), userpwd="UserName:Password", httpauth = 1L)
Susceptible <- read.table(text = Susceptible, sep =",", header = TRUE, stringsAsFactors = FALSE)
# head(Susceptible)
# For Not_tested
Not_tested <- getURL(paste0("https://amr-host.zm.dhis2.site/ohs/api/29/analytics.csv?dimension=pe:LAST_3_MONTHS&dimension=ou:OU_GROUP-lvbz0mkIFZU;Ot1P2HjvtvL&dimension=dx:nb3h2GxXoKa;uqOCZNOhbv5;ZMIqcVMsUgr;gxkchFhlReb;nW7I08Z8V91;EsaPkvtVWWa;em22fOVEV62;jwDfTKxRnxU;I3DL7vRaN6m;zmJ2vrtc8nC;oFBW8X4br7A;sB9NowuDaZr;kdXAYSrqTQ1;A995TFMy5XE;QGGycYsDb9i;lzokvvadU8t;vqu5JDao1Y1;iDVXqLTQaLi;qrGLCkURCuQ;xGTM2E3kMvt;Th1qEqGDWaW;jUgJhlQPGqj;Qfh7Rq0SCG6;qF1b8Jie35Y;GVlHFxzDqGu;YPjdRuUEdwK;cjIYkZ19GGi;ndYm1QLu7u9;czvwjrFVfuc;xbFe2DwVLEK;cT4r66gVNwy;JydtSoEvjqw;XvJiTMULujb;yMNogmQ6UXB;ACq7Q64vytf;PLMC0aF02LO;HEF12SNvgL9;DHuhuiKCPvE;vsKlNGrjzwv;nuPhFeCU5aV;Wv3M7ytxW8C;uLoRTxf68Rz;jaH1yUKgnfM;AbOkSE4cIVn;KLHG5ew6veL;grW3VDMLRbT;v6hNWCor7BM;ohPZTOACvHH;A8CADbDfAbe;kjcRbghCsMm;sZJfll3rFDx;Jrv2wzEAF6M;Mkg4LkvHPph;mBsEQN98yN8;HlU9uVPvBAw;BY5gZgKGmeS;AMIon8Q6mgD;PpVHRCeRLLl;oHAmHR6yofc;RpOjuigYAbv;GovQy8ky2Nl;I9A4IUHaB89;sF15kLzHHhK;urO7suYOqbK;ONqWN49Mf11;t0A6KwFrvkt;ONLlNrmHAiW;fCH4JznPrJc;xoQQcvCQaPa;Qd5ds8UdjW7;FqIOtcIclig;LiyLKcyVMz1;C3CMBQsTbvr;WWZHDnW63kF;fKgY0evZnmk;ygewzmLUCnA;MIULlGfrvyt;mBIUWijrMNR;FqZhtpLClKl;K59CcCd2dai;hOrr8lBFoPW;sYIAfO2fDVT;KskvTjPx7Iv;T3yMMp1toRo;VBZz3fvN5sn;uFDb4iiGxfp;vJIuTgb92cI;p8yALFjSgzn;nKMLTcTvmSS;AiIocdRAB4f;x3vFa0h3MdQ;FnCw7vGwhPK;RONKWYLR62n;qySM1eL0TPj;Kjszz3YyoTr;lwbriETvsxr;OizautezwKv;Y9MgMDjwlLR;wTJhMC93iNd;oOW0mL4JgUN;ir2YjUDKX2Q;F0YqBkIbMXc;TPCs1blb9cO;yRRHafMHMSQ;Bico5WsiyMf;z3xwUEg08Y9;z8plOBpLIjl;snpbY5mzfZD;MhcQE56MYi9;eoj9AxwqBaG;MOjhRlmQYPA;H70JDP3Y7tk;BndDjoeGQRx;vYNfZeq6J8G;Hx8CNHFW8KS;EnIPYeIlMkz;sI02Fp8QwIF;gGIcu6iqCL7;l9R5rgYaOhv;TkHIYTURSQs;xHI71NGhWCS;Z1nJbxttCmP;pEAISCVle7P;rJOIwWOGReb;HcQjezUcr3R;BfAJnD7KMIS;aBBsjaTPvGj;Ou7SCIMyfzw;bmdbr0m98RP;MwunTwLZIiR;ErusjL6v23Q;nTX8H5SD54Y;UFevOKYTLSN;qgAU2qNjQ1t;CyBgKUL2PcX;Pggaqn871Gg;kRDqk0FVrnK;dCCT7cK9a1b;pCCj1Zlka3b;Qq6A4ieuGkV;BWXSDmZSmwd;OR98ixTejrc;TVUHc21zgww;nxIYK1VF0U6;YPiFanzXOsc;u0T0lR8zxAy;mW5XrEFTspW;K37A10Y3ODh;kBHqXQrLITE;lGEIZeHCxg7;sYRiS83BTTB;kmN4MsaatB0;iSVBmMNk8zz;qx9VSSvz2DP;OIPXozD6gUJ&displayProperty=NAME&outputIdScheme=CODE"), userpwd="UserName:Password", httpauth = 1L)
Not_tested <- read.table(text = Not_tested, sep =",", header = TRUE, stringsAsFactors = FALSE)
# head(Not_tested)
# ========================== Blending the data categories and Processing for CSV format file =========================
# To combine all dataframe into one frame.
RIS <- rbind(Resistance, Intermediate, Susceptible, Not_tested)
# To split Data into Data element and Category combination.
RIS <- RIS %>% separate(Data, c("Dataelement", "Category"), sep = "-", fill = 'right')
if (NROW(RIS) > 0){
# Assign attribute into dataframe.
RIS$attr = ''
# Renaming
colnames(RIS)[4] <- "Org_unit"
# Rearrange for importing.
RIS <- RIS[, c(1,3,4,2,6,5)]
# miss <- RIS[is.na(RIS$Category), ]
# miss
# RIS
# File exporting
write.csv(RIS, '/home/DHIS2-Aggregate/AMR_data.csv', row.names = F, quote= T)
print('========== Successfully file exported ===========')
} else{
print('========== No data found ==========')
}
Updated by Steven (eSHIFT) Uggowitzer over 2 years ago · 2 revisions
Go to top