Business Intelligence with R From Acquiring Data to Pattern Exploration Dwight Barry This version was published on 2016-09-28 ThisworkislicensedunderaCreativeCommonsAttribution-ShareAlike3.0UnportedLicense Contents About . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 AbouttheAuthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 SessionInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 VersionInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 CodeandData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 CoverImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Proceeds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Contact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 install.packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Whatyouneed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Website/Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Happycoding! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Chapter1:Anentireprojectinafewlinesofcode . . . . . . . . . . . . . . . . . . . . . . 9 Theanalyticsproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Acquiredata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Wranglingdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Analytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Explorethedata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Runaforecastingmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 CreateaninteractiveHTMLplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Documentingtheproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Chapter2:GettingData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Workingwithfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 CONTENTS Readingflatfilesfromdiskortheweb . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Readingbigfileswithdata.table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 UnzippingfileswithinR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 ReadingExcelfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Creatingadataframefromtheclipboardordirectentry . . . . . . . . . . . . . . . . . 27 ReadingXMLfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 ReadingJSONfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Workingwithdatabases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Connectingtoadatabase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Creatingdataframesfromadatabase . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Disconnectingfromadatabase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 CreatingaSQLitedatabaseinsideR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 CreatingadataframefromaSQLitedatabase . . . . . . . . . . . . . . . . . . . . . . . 37 Gettingdatafromtheweb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Workingthroughaproxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Scrapingdatafromawebtable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 WorkingwithAPIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Creatingfakedatatotestcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Writingfilestodisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Chapter3:CleaningandPreparingData . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Understandingyourdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Identifyingdatatypesandoverallstructure . . . . . . . . . . . . . . . . . . . . . . . . 46 Identifying(andordering)factorlevels . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Identifyinguniquevaluesorduplicates . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Cleaningup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Convertingbetweendatatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Cleaningupaweb-scrapedtable:Regularexpressionsandmore . . . . . . . . . . . . 50 Missingdata:ConvertingdummyNAvalues . . . . . . . . . . . . . . . . . . . . . . . 52 Rounding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Mergingdataframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Unionsandbindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Subsetting:filterandselectfromadataframe . . . . . . . . . . . . . . . . . . . . . . . . 61 Creatingaderivedcolumn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Peekingattheoutcomewithdplyr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Reshapingadataframebetweenwideandlong . . . . . . . . . . . . . . . . . . . . . . . 64 Reshaping:meltandcast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Reshaping:Crossingvariableswith(cid:24)and+ . . . . . . . . . . . . . . . . . . . . . . . 66 Summarizingwhilereshaping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Pipingwith%>%:Stringingittogetherindplyr . . . . . . . . . . . . . . . . . . . . . . . 68 CONTENTS Chapter4:KnowThyData—ExploratoryDataAnalysis . . . . . . . . . . . . . . . . . . . 70 Creatingsummaryplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Everythingatonce:ggpairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Createhistogramsofallnumericvariablesinoneplot . . . . . . . . . . . . . . . . . . 73 Abetter“pairs”plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Mosaicplotmatrix:“Scatterplot”matrixforcategoricaldata . . . . . . . . . . . . . . 75 Plottingunivariatedistributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Histogramsanddensityplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Baranddotplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Plottingmultipleunivariatedistributionswithfaceting . . . . . . . . . . . . . . . . . 78 Plottingbivariateandcomparativedistributions . . . . . . . . . . . . . . . . . . . . . . . 80 Doubledensityplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Boxplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Beanplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Scatterplotsandmarginaldistributions . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Mosaicplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Multiplebivariatecomparisonswithfaceting . . . . . . . . . . . . . . . . . . . . . . . 88 Paretocharts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Plottingsurveydata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Obtainingsummaryandconditionalstatistics . . . . . . . . . . . . . . . . . . . . . . . . 92 Findingthemodeorlocalmaxima/minima . . . . . . . . . . . . . . . . . . . . . . . . . 96 Inferenceonsummarystatistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Confidenceintervals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Toleranceintervals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Dealingwithmissingdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Visualizingmissingdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Imputationformissingvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Chapter5:EffectSizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Effectsizes:Measuringdifferences betweengroups . . . . . . . . . . . . . . . . . . . . . 115 Basicdifferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Standardizeddifferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Determiningtheprobabilityofadifference . . . . . . . . . . . . . . . . . . . . . . . . 122 Effectsizes:Measuringsimilarities betweengroups . . . . . . . . . . . . . . . . . . . . . 127 Correlation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 BootstrappingBCaCIsfornon-parametriccorrelation . . . . . . . . . . . . . . . . . . 130 Determiningtheprobabilityofacorrelation . . . . . . . . . . . . . . . . . . . . . . . 131 Partialcorrelations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Polychoricandpolyserialcorrelationforordinaldata . . . . . . . . . . . . . . . . . . 133 Associationsbetweencategoricalvariables . . . . . . . . . . . . . . . . . . . . . . . . 134 Cohen’skappaforcomparisonsofagreement . . . . . . . . . . . . . . . . . . . . . . . 135 Regressioncoefficient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 CONTENTS R²:Proportionofvarianceexplained . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Chapter6:TrendsandTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Describingtrendsinnon-temporaldata . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Smoothedtrends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Quantiletrends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Simplelineartrends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Segmentedlineartrends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Themanyflavorsofregression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Plottingregressioncoefficients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Workingwithtemporaldata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Calculateameanorcorrelationincirculartime(clocktime) . . . . . . . . . . . . . . 149 Plottingtime-seriesdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Detectingautocorrelation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Plottingmonthlyandseasonalpatterns . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Plottingseasonaladjustmentonthefly . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Decomposingtimeseriesintocomponents . . . . . . . . . . . . . . . . . . . . . . . . 155 Usingspectralanalysistoidentifyperiodicity . . . . . . . . . . . . . . . . . . . . . . 159 Plottingsurvivalcurves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Evaluatingqualitywithcontrolcharts . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Identifyingpossiblebreakpointsinatimeseries . . . . . . . . . . . . . . . . . . . . . 163 Exploringrelationshipsbetweentimeseries:cross-correlation . . . . . . . . . . . . . . 165 Basicforecasting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Chapter7:ADog’sBreakfastofDataviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Plottingmultivariatedistributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Heatmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Creatingcalendarheatmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Parallelcoordinatesplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Peekingatmultivariatedatawithdplyrandabubblechart . . . . . . . . . . . . . . . 175 Plottingatable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Interactivedataviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Basicinteractiveplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Scatterplotmatrix. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Motionchart:amovingbubblechart . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Interactiveparallelcoordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 InteractivetableswithDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 MakingmapsinR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Basicpointmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Chloroplethmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 ChloroplethmappingwiththeAmericanCommunitySurvey . . . . . . . . . . . . . . 188 Usingshapefilesandrawdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Usingggmapforpointdataandheatmaps . . . . . . . . . . . . . . . . . . . . . . . . 191 CONTENTS Interactivemapswithleaflet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 WhymapwithR? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Chapter8:PatternDiscoveryandDimensionReduction . . . . . . . . . . . . . . . . . . . 197 Mappingmultivariaterelationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Non-metricmultidimensionalscaling(nMDS) . . . . . . . . . . . . . . . . . . . . . . 197 DiagnosticsfornMDSresults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 VectormappinginfluentialvariablesoverthenMDSplot . . . . . . . . . . . . . . . . 203 ContourmappinginfluentialvariablesoverthenMDSplot . . . . . . . . . . . . . . . 204 PrincipalComponentsAnalysis(PCA) . . . . . . . . . . . . . . . . . . . . . . . . . . 205 nMDSforCategories:CorrespondenceAnalysis . . . . . . . . . . . . . . . . . . . . . 207 Clusteranalysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Groupingobservationswithhierarchicalclustering . . . . . . . . . . . . . . . . . . . 209 Plottingaclusterdendrogramwithggplot . . . . . . . . . . . . . . . . . . . . . . . . 210 ExploringhierarchicalclusteringofnMDSresults . . . . . . . . . . . . . . . . . . . . 213 Howtopartitiontheresultsofahierarchicalclusteranalysis . . . . . . . . . . . . . . 213 IdentifyinganddescribinggroupmembershipwithkMeansandPAM . . . . . . . . . 215 Howtochooseanoptimalnumberofclusterswithbootstrapping. . . . . . . . . . . . 218 Determiningoptimalnumbersofclusterswithmodel-basedclustering . . . . . . . . . 219 Identifyinggroupmembershipwithirregularclusters . . . . . . . . . . . . . . . . . . 228 Variableselectioninclusteranalysis . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Error-checkingclusterresultswithknownoutcomes . . . . . . . . . . . . . . . . . . . 233 Exploringoutliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Identifyingoutlierswithdistancefunctions . . . . . . . . . . . . . . . . . . . . . . . . 235 Identifyingoutlierswiththelocaloutlierfactor . . . . . . . . . . . . . . . . . . . . . 237 Anomalydetection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Extremevalueanalysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Findingassociationsinshoppingcarts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Chapter9:ReportingandDashboarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Outputformatsfor.Rmddocuments . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Dashboards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 SimpledashboardingwithRMarkdown . . . . . . . . . . . . . . . . . . . . . . . . . 254 Dashboardingandreportingwithflexdashboard . . . . . . . . . . . . . . . . . . . . . 256 Reportsandtechnicalmemos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Slidedecks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 purl:scrapingtherawcodefromyour.Rmdfiles . . . . . . . . . . . . . . . . . . . . . . 260 Shinyapps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 TweakingtheYAMLheaders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Appendix1:Settingupprojectsandusing“Make”files . . . . . . . . . . . . . . . . . . . . 266 SettingupaprojectwithRStudioandGit . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Committingyourchanges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 CONTENTS Rollingbacktoapreviousstate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Packagingaproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 “Make”filesinR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Appendix2:.RmdFilefortheChapter1finalreportexample . . . . . . . . . . . . . . . . 270 Appendix3:.RfileforChapter9 Shinyappexample . . . . . . . . . . . . . . . . . . . . . 278 Appendix4:.RmdfilefortheChapter9 flexdashboardexample . . . . . . . . . . . . . . 285 Appendix5:RMarkdownQuickReference . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 About About the Author DwightBarryisaLeadDataScientistatSeattleChildren’sHospital,inSeattle,Washington,USA. Session Info Thecodeinthisbookwastestedon: R version 3.3.1 (2016-06-21) Platform: x86_64-apple-darwin13.4.0 (64-bit) Running under: OS X 10.10.5 (Yosemite) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 14.04.5 LTS Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows Server 2008 R2 x64 (build 7601) Service Pack 1 Version Info Version1.0,September2016 Code and Data Thecodeanddataareavailablefromthebook’sGitHubsite. Due to page width constraints, some lines of code as printed in the book have unnecessary line breaks, primarily in long URLs to acquire data or code from the web. The book’s code on Github doesnotcontaintheselinebreaks,soitshouldworkas-is.So,ifyoucut&pastefromthebook,note thatlongURLsmayrequirethatyouremovealinebreakforthecodetofunctioncorrectly. Cover Image ThecoverphotowastakenbyGerdAltmann,andwasreleasedasCC0. About 2 Proceeds All proceeds will benefit the Agape Girls Junior Guild, supporting mitochondrial disorder researchatSeattleChildren’sResearchInstitute andSeattleChildren’sHospital. Contact Rmadillo DwightBarry DwightBarry @healthstatsdude
Description: