From 464a643bef25ee8cb21c5fcf1d50c1bd0d6c54b8 Mon Sep 17 00:00:00 2001 From: hadley Date: Tue, 19 Jul 2016 09:39:00 -0500 Subject: [PATCH] Consistent part intros --- EDA.Rmd | 6 +- communicate.Rmd | 6 ++ diagrams/data-science-communicate.png | Bin 0 -> 14417 bytes diagrams/data-science-explore.png | Bin 0 -> 14224 bytes diagrams/data-science-model.png | Bin 0 -> 13892 bytes diagrams/data-science-program.png | Bin 0 -> 13506 bytes diagrams/data-science-wrangle.png | Bin 0 -> 15668 bytes diagrams/data-science.graffle | Bin 2383 -> 3740 bytes explore.Rmd | 23 +++++- model.Rmd | 6 ++ program.Rmd | 8 +- wrangle.Rmd | 110 +++++--------------------- 12 files changed, 60 insertions(+), 99 deletions(-) create mode 100644 diagrams/data-science-communicate.png create mode 100644 diagrams/data-science-explore.png create mode 100644 diagrams/data-science-model.png create mode 100644 diagrams/data-science-program.png create mode 100644 diagrams/data-science-wrangle.png diff --git a/EDA.Rmd b/EDA.Rmd index 262634e..3dd884d 100644 --- a/EDA.Rmd +++ b/EDA.Rmd @@ -1,9 +1,9 @@ +# Exploratory Data Analysis + ```{r include=FALSE} knitr::opts_chunk$set(fig.height = 2) ``` -# Exploratory Data Analysis (EDA) - ## Introduction This chapter will show you how to use visualization and transformation to explore your data in a systematic way, a task that statisticians call Exploratory Data Analysis, or EDA for short. EDA is an interative cycle that involves: @@ -552,3 +552,5 @@ ggplot(data = diamonds2, mapping = aes(x = carat, y = resid)) + ggplot(data = diamonds2, mapping = aes(x = cut, y = resid)) + geom_boxplot() ``` + +Modelling is important because once you have recognised a pattern, a model allows you to make that pattern quantitative and precise, and partition it out from what remains. That supports a powerful interative approach where you indentify a pattern with visualisation, then subtract with a model, allowing you to see the subtler trends that remain. I deliberately chose not to teach modelling yet, because understanding what models are and how they work are easiest once you have some other tools in hand: data wrangling, and programming. diff --git a/communicate.Rmd b/communicate.Rmd index 8127dbe..27483e8 100644 --- a/communicate.Rmd +++ b/communicate.Rmd @@ -2,6 +2,12 @@ # Introduction +The successful completion of a data science project you will have built up a good understand of what is going on with the data. It doesn't matter how brilliant your understand is unless you can communicate it with others. You will need to share your work in a way that your audience can understand. Your audience might be fellow scientists who will want to reproduce the work, non-scientists who will want to understand your findings in plain terms, or yourself (in the future) who will be thankful if you make your work easy to re-learn and recreate. __Part 5__ discusses communication, and how you can use RMarkdown to generate reproducible artefacts that combine prose and code. + +```{r echo = FALSE, out.width = "75%"} +knitr::include_graphics("diagrams/data-science-communicate.png") +``` + Reproducible, literate code is the data science equivalent of the Scientific Report (i.e, Intro, Methods and materials, Results, Discussion). Recommendations for learning more about communication: diff --git a/diagrams/data-science-communicate.png b/diagrams/data-science-communicate.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b8d0019480dd8ae12f9058fd1b1a6ddeec7f9a GIT binary patch literal 14417 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 literal 0 HcmV?d00001 diff --git a/diagrams/data-science-explore.png b/diagrams/data-science-explore.png new file mode 100644 index 0000000000000000000000000000000000000000..bd84df327fb6aea5057ca1df5a54054aee6a7818 GIT binary patch literal 14224 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 BJBI)O literal 0 HcmV?d00001 diff --git a/diagrams/data-science-program.png b/diagrams/data-science-program.png new file mode 100644 index 0000000000000000000000000000000000000000..fb49141d9c2cc8c5fc79367606b78971c259b17c GIT binary patch literal 13506 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 MtgZA$!6x$m0s0tb`2YX_ literal 0 HcmV?d00001 diff --git a/diagrams/data-science-wrangle.png b/diagrams/data-science-wrangle.png new file mode 100644 index 0000000000000000000000000000000000000000..710076a0edfa1f0235d501ed2633c4425fb75914 GIT binary patch literal 15668 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 D0OTzj literal 2383 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 BvEl## diff --git a/explore.Rmd b/explore.Rmd index e3eb1ab..dc5f653 100644 --- a/explore.Rmd +++ b/explore.Rmd @@ -2,6 +2,12 @@ # Introduction +The goal of the first part of this book is to get your up to speed with the basic tools of data exploration as quickly as possible: + +```{r echo = FALSE, out.width = "75%"} +knitr::include_graphics("diagrams/data-science-explore.png") +``` + ```{r setup, include = FALSE} library(ggplot2) library(dplyr) @@ -21,7 +27,7 @@ circle %>% knitr::kable(digits = 2) ``` -While we may stumble over raw data, we can easily process visual information. Within your mind is a powerful visual processing system fine-tuned by millions of years of evolution. As a result, often the quickest way to understand your data is to visualize it. Once you plot your data, you can instantly see the relationships between values. Here, we see that the values fall on a circle. +While we may stumble over raw data, we can easily process visual information. Visualization works because your brain processes visual information in a different (and much wider) channel than it processes symbolic information, like words and numbers. Within your brain is a powerful visual processing system fine-tuned by millions of years of evolution. As a result, often the quickest way to understand your data is to visualize it. Once you plot your data, you can instantly see the relationships between values. Here, we see that the values fall on a circle. ```{r echo=FALSE, dependson = data, fig.asp = 1, out.width = "30%", fig.width = 3} ggplot(circle, aes(x, y)) + @@ -29,8 +35,17 @@ ggplot(circle, aes(x, y)) + coord_fixed() ``` -Visualization works because your brain processes visual information in a different (and much wider) channel than it processes symbolic information, like words and numbers. However, visualization is not the only way to comprehend data. +In the following chapters you will: -You can also comprehend data by transforming it. You can easily attend to a small set of summary values, which lets you absorb important information about the data. This is why it feels natural to work with things like averages, maximums, minimums, medians, and so on. +* Dive into ggplot2 in [data visualisation], learning powerful + and general techniques for turning raw data into visual insights. -Together, visualisation and transformation form a powerful set of tools known as exploratory data analysis, or EDA for short. In this part of the book, you'll learn R through EDA, mastering the minimal set of skills to start gaining insight from your data. +* Visualisation alone is typically not enough, so in [data transformation] + you'll learn the key verbs that allow you select important variables, + filter out key observations, and create new variables and summaries. + +* In [exploratory data analysis], you'll combine visualisation and + transformation with your curiosity and scepticism to ask and answer + interesting questions about data. + +Modelling is an important part of the exploratory process, but you don't have the skills to effectively learn or apply it yet. We'll come back to modelling in [model], once you're better equipped with more data wrangling and programming tools. diff --git a/model.Rmd b/model.Rmd index 2d9423a..5f170bb 100644 --- a/model.Rmd +++ b/model.Rmd @@ -2,6 +2,12 @@ # Introduction +Now that you are equipped with powerful programming tools we can finally return to modelling. You'll use your new tools of data wrangling and programming, to fit many models and understand how they work. The focus of this book is on exploration, not confirmation or formal inference. But you'll learn a few basic tools that help you understand the variation within your models. + +```{r echo = FALSE, out.width = "75%"} +knitr::include_graphics("diagrams/data-science-model.png") +``` + The goal of a model is to provide a simple low-dimensional summary of a dataset. Ideally, the model will capture true "signals" (i.e. patterns generated by the phenomenon of interest), and ignore "noise" (i.e. random variation that you're not interested in). Here we only cover "predictive" models, which, as the name suggests, generate predictions. There is another type of model that we're not going to discuss: "data discovery" models. These models don't make predictions, but instead help you discover interesting relationships within your data. This book is not going to give you a deep understanding of the mathematical theory that underlies models. It will, however, build your intution about how statisitcal models work, and give you a family of useful tools that allow you to use models to better understand your data: diff --git a/program.Rmd b/program.Rmd index 3055f58..a309e00 100644 --- a/program.Rmd +++ b/program.Rmd @@ -2,9 +2,15 @@ # Introduction +In this part of the book, you'll enrich your programming skills. Programming is a cross-cutting skill needed for all data science work. You must use a computer; you cannot do it in your head, nor with paper and pencil. And to work efficiently, you will need to know how to program in a computer language, such as R. + +```{r echo = FALSE, out.width = "75%"} +knitr::include_graphics("diagrams/data-science-program.png") +``` + Code is a tool of communication, not just to the computer, but to other people. This is important because every project you undertake is fundamentally collaborative. Even if you're not working with other people, you'll definitely be working with future-you. You want to write clear code so that future-you doesn't curse present-you when you look at a project again after several months have passed. -To me, improving your communication skills is a key part of mastering R as a programming language. Over time, you want your code to become more and more clear, and easier to write. Removing duplication is an important part of expressing yourself clearly because it lets the reader (i.e. future-you!) focus on what's different between operations rather than what's the same. The goal is not just to write better functions or to do things that you couldn't do before, but to code with more "ease". As you internalise the ideas in this chapter, you should find it easier to re-tackle problems that you've struggled to solve in the past. +Improving your communication skills is a key part of mastering R as a programming language. Over time, you want your code to become more and more clear, and easier to write. Removing duplication is an important part of expressing yourself clearly because it lets the reader (i.e. future-you!) focus on what's different between operations rather than what's the same. The goal is not just to write better functions or to do things that you couldn't do before, but to code with more "ease". As you internalise the ideas in this chapter, you should find it easier to re-tackle problems that you've struggled to solve in the past. In the following chapters, you'll learn important programming skills: diff --git a/wrangle.Rmd b/wrangle.Rmd index e0c2917..bf25ef0 100644 --- a/wrangle.Rmd +++ b/wrangle.Rmd @@ -2,103 +2,29 @@ # Introduction -Throughout this book we work with "tibbles" instead of the traditional data frame. Tibbles _are_ data frames, but tweak some older behaviours to make life a littler easier. R is an old language, and some things that were true 10 or 20 years ago no longer apply. It's difficult to change base R without breaking existing code, so most innovation occurs in packages. Here we will describe the tibble package, which provides opinionated data frames that make working in the tidyverse a little easier. You can learn more about tibbles in the accompanying vignette: `vignette("tibble")`. +In this part of the book, you'll learn about data wrangling, the art of getting your data into R in a useful form. Data wrangling encompasses three main pieces: -```{r setup} -library(tibble) +```{r echo = FALSE, out.width = "75%"} +knitr::include_graphics("diagrams/data-science-wrangle.png") ``` -## Creating tibbles {#tibbles} +* In [data import], you'll learn the art of data import: how to get your data + off of disk and into R. -The majority of the functions that you'll use in this book already produce tibbles. If you're working with functions from other packages, you might need to coerce a regular data frame a tibble. You can do that with `as_tibble()`: +* In [tidy data], you'll learn about tidy data, a consistent way of storing your + data that makes transformation, visualiation, and modelling easier. -```{r} -as_tibble(iris) -``` +* You've already learned the basics of data transformation. In this part of the + book we'll dive deeper into tools useful for specific types of data: -`as_tibble()` knows how to convert data frames, lists (provided the elements are equal length vectors), matrices, and tables. + * [Dates and times] will give you the key tools for working with + dates, and date times. + + * [Strings] will introduce regular expressions, a powerful tool for + manipulating strings. + + * [Relational data] will give you tools for working with multiple + interrelated datasets. -You can create a new tibble from individual vectors with `tibble()`: +Before we get to those chapters we'll take a brief discussion to discuss the "tibble" in more detail, in [tibbles]. -```{r} -tibble(x = 1:5, y = 1, z = x ^ 2 + y) -``` - -`tibble()` automatically recycles inputs of length 1, and you can refer to variables that you just created. Compared to `data.frame()`, `tibble()` does much less: it never changes the type of the inputs (e.g. it never converts strings to factors!), it never changes the names of variables, and it never creates `row.names()`. - -Another way to create a tibble is with `frame_data()`, which is customised for data entry in R code. Column headings are defined by formulas (`~`), and entries are separated by commas: - -```{r} -frame_data( - ~x, ~y, ~z, - "a", 2, 3.6, - "b", 1, 8.5 -) -``` - -## Tibbles vs. data frames - -There are two main differences in the usage of a data frame vs a tibble: printing, and subsetting. - -### Printing - -Tibbles have a refined print method that shows only the first 10 rows, and all the columns that fit on screen. This makes it much easier to work with large data. In addition to its name, each column reports its type, a nice feature borrowed from `str()`: - -```{r} -tibble( - a = lubridate::now() + runif(1e3) * 60, - b = lubridate::today() + runif(1e3), - c = 1:1e3, - d = runif(1e3), - e = sample(letters, 1e3, replace = TRUE) -) -``` - -You can control the default appearance with options: - -* `options(tibble.print_max = n, tibble.print_min = m)`: if more than `m` - rows, print `n` rows. Use `options(dplyr.print_max = Inf)` to always - show all rows. - -* `options(tibble.width = Inf)` will always print all columns, regardless - of the width of the screen. - -You can see a complete list of options by looking at the package help: `package?tibble`. - -### Subsetting - -Tibbles are stricter about subsetting. If you try to access a variable that does not exist, you'll get a warning. Unlike data frames, tibbles do not use partial matching on column names: - -```{r} -df <- data.frame( - abc = 1:10, - def = runif(10), - xyz = sample(letters, 10) -) -tb <- as_tibble(df) - -df$a -tb$a -``` - -Tibbles clearly delineate `[` and `[[`: `[` always returns another tibble, `[[` always returns a vector. - -```{r} -# With data frames, [ sometimes returns a data frame, and sometimes returns -# a vector -df[, 1] - -# With tibbles, [ always returns another tibble -tb[, 1] - -# To extract a single element, you should always use [[ -tb[[1]] -``` - -## Interacting with legacy code - -Some older functions don't work with tibbles because they expect `df[, 1]` to return a vector, not a data frame. If you encounter one of these functions, use `as.data.frame()` to turn a tibble back to a data frame: - -```{r} -class(as.data.frame(tb)) -```