Chapter 3 Data Visualization
We begin the development of your data science toolbox with data visualization. By visualizing our data, we gain valuable insights that we couldn’t initially see from just looking at the raw data in spreadsheet form. We will use the ggplot2
package as it provides an easy way to customize your plots. ggplot2
is rooted in the data visualization theory known as The Grammar of Graphics (Wilkinson 2005), developed by Leland Wilkinson.
At the most basic level, graphics/plots/charts (we use these terms interchangeably in this book) provide a nice way for us to get a sense for how quantitative variables compare in terms of their center (where the values tend to be located) and their spread (how they vary around the center). Graphics should be designed to emphasize the findings and insight you want your audience to understand. This does however require a balancing act. On the one hand, you want to highlight as many meaningful relationships and interesting findings as possible; on the other you don’t want to include so many as to overwhelm your audience.
As we will see, plots/graphics also help us to identify patterns and outliers in our data. We will see that a common extension of these ideas is to compare the distribution of one quantitative variable (i.e., what the spread of a variable looks like or how the variable is distributed in terms of its values) as we go across the levels of a different categorical variable.
Needed packages
Let’s load all the packages needed for this chapter (this assumes you’ve already installed them). Read Section 2.3 for information on how to install and load R packages.
library(nycflights13)
library(ggplot2)
library(dplyr)
3.1 The Grammar of Graphics
We begin with a discussion of a theoretical framework for data visualization known as “The Grammar of Graphics,” which serves as the foundation for the ggplot2
package. Think of how we construct sentences in English to form sentences by combining different elements, like nouns, verbs, particles, subjects, objects, etc. However, we can’t just combine these elements in any arbitrary order; we must do so following a set of rules known as a linguistic grammar. Similarly to a linguistic grammar, “The Grammar of Graphics” define a set of rules for constructing statistical graphics by combining different types of layers. This grammar was created by Leland Wilkinson (Wilkinson 2005) and has been implemented in a variety of data visualization software including R.
3.1.1 Components of the Grammar
In short, the grammar tells us that:
A statistical graphic is a
mapping
ofdata
variables toaes
thetic attributes ofgeom
etric objects.
Specifically, we can break a graphic into the following three essential components:
data
: the data set composed of variables that we map.geom
: the geometric object in question. This refers to the type of object we can observe in a plot. For example: points, lines, and bars.aes
: aesthetic attributes of the geometric object. For example, x/y position, color, shape, and size. Each assigned aesthetic attribute can be mapped to a variable in our data set.
You might be wondering why we wrote the terms data
, geom
, and aes
in a computer code type font. We’ll see very shortly that we’ll specify the elements of the grammar in R using these terms. However, let’s first break down the grammar with an example.
3.1.2 Gapminder data
In February 2006, a statistician named Hans Rosling gave a TED talk titled “The best stats you’ve ever seen” where he presented global economic, health, and development data from the website gapminder.org. For example, for the 142 countries included from 2007, let’s consider only the first 6 countries when listed alphabetically in Table 3.1.
| Country | Continent | Life Expectancy | Population | GDP per Capita |
|---|---|---|---|---|
| Afghanistan | Asia | 43.8 | 31889923 | 975 |
| Albania | Europe | 76.4 | 3600523 | 5937 |
| Algeria | Africa | 72.3 | 33333216 | 6223 |
| Angola | Africa | 42.7 | 12420476 | 4797 |
| Argentina | Americas | 75.3 | 40301927 | 12779 |
| Australia | Oceania | 81.2 | 20434176 | 34435 |
Each row in this table corresponds to a country in 2007. For each row, we have 5 columns:
- Country: Name of country.
- Continent: Which of the five continents the country is part of. (Note that “Americas” includes countries in both North and South America and that Antarctica is excluded.)
- Life Expectancy: Life expectancy in years.
- Population: Number of people living in the country.
- GDP per Capita: Gross domestic product (in US dollars).
Now consider Figure 3.1, which plots this data for all 142 countries in the data.
Let’s view this plot through the grammar of graphics:
- The
data
variable GDP per Capita gets mapped to thex
-positionaes
thetic of the points. - The
data
variable Life Expectancy gets mapped to they
-positionaes
thetic of the points. - The
data
variable Population gets mapped to thesize
aes
thetic of the points. - The
data
variable Continent gets mapped to thecolor
aes
thetic of the points.
We’ll see shortly that data
corresponds to the particular data frame where our data is saved and a “data variable” corresponds to a particular column in the data frame. Furthermore, the type of geom
etric object considered in this plot are points. That being said, while in this example we are considering points, graphics are not limited to just points. Other plots involve lines while others involve bars.
Let’s summarize the three essential components of the Grammar in Table 3.2.
| data variable | aes | geom |
|---|---|---|
| GDP per Capita | x | point |
| Life Expectancy | y | point |
| Population | size | point |
| Continent | color | point |
3.1.3 Other components
There are other components of the Grammar of Graphics we can control as well. As you start to delve deeper into the Grammar of Graphics, you’ll start to encounter these topics more frequently. In this book however, we’ll keep things simple and only work with the two additional components listed below:
facet
ing breaks up a plot into small multiples corresponding to the levels of another variable (Section 3.6)position
adjustments for barplots (Section 3.8)
Other more complex components like scales
and coord
inate systems are left for a more advanced text such as R for Data Science (Grolemund and Wickham 2016). Generally speaking, the Grammar of Graphics allows for a high degree of customization of plots and also a consistent framework for easily updating and modifying them.
3.1.4 ggplot2 package
In this book, we will be using the ggplot2
package for data visualization, which is an implementation of the Grammar of Graphics for R (Wickham et al. 2019). As we noted earlier, a lot of the previous section was written in a computer code type font. This is because the various components of the Grammar of Graphics are specified in the ggplot()
function included in the ggplot2
package, which expects at a minimum as arguments (i.e. inputs):
- The data frame where the variables exist: the
data
argument. - The mapping of the variables to aesthetic attributes: the
mapping
argument which specifies theaes
thetic attributes involved.
After we’ve specified these components, we then add layers to the plot using the +
sign. The most essential layer to add to a plot is the layer that specifies which type of geom
etric object we want the plot to involve: points, lines, bars, and others. Other layers we can add to a plot include layers specifying the plot title, axes labels, visual themes for the plots, and facets (which we’ll see in Section 3.6).
Let’s now put the theory of the Grammar of Graphics into practice.
3.2 Five Named Graphs - The 5NG
In order to keep things simple, we will only focus on five different types of graphics in this book, each with a commonly given name. We term these “five named graphs” the 5NG:
- scatterplots
- linegraphs
- boxplots
- histograms
- barplots
We will discuss some variations of these plots, but with this basic repertoire of graphics in your toolbox you can visualize a wide array of different variable types. Note that certain plots are only appropriate for categorical variables and while others are only appropriate for quantitative variables. You’ll want to quiz yourself often as we go along on which plot makes sense for a particular problem or data set.
3.3 5NG#1: Scatterplots
The simplest of the 5NG are scatterplots, also called bivariate plots. They allow you to visualize the relationship between two numerical variables. While you may already be familiar with scatterplots, let’s view them through the lens of the Grammar of Graphics. Specifically, we will visualize the relationship between the following two numerical variables in the flights
data frame included in the nycflights13
package:
dep_delay
: departure delay on the horizontal “x” axis andarr_delay
: arrival delay on the vertical “y” axis
for Alaska Airlines flights leaving NYC in 2013. This requires paring down the data from all 336,776 flights that left NYC in 2013, to only the 714 Alaska Airlines flights that left NYC in 2013.
What this means computationally is: we’ll take the flights
data frame, extract only the 714 rows corresponding to Alaska Airlines flights, and save this in a new data frame called alaska_flights
. Run the code below to do this:
alaska_flights <- flights %>%
filter(carrier == "AS")
For now we suggest you ignore how this code works; we’ll explain this in detail in Chapter 4 when we cover data wrangling. However, convince yourself that this code does what it is supposed to by running View(alaska_flights)
: it creates a new data frame with name alaska_flights
consisting of only the 714 Alaska Airlines flights. Note the use of the <-
operator here. This is what gives the name of alaska_flights
to the data frame returned from the operation on the right-hand-side of it.
We’ll see later in Chapter 4 on data wrangling that this code uses the dplyr
package for data wrangling to achieve our goal: it takes the flights
data frame and filter
s it to only return the rows where carrier
is equal to "AS"
, Alaska Airlines’ carrier code. Other examples of carrier codes include “AA” for American Airlines and “UA” for United Airlines. Recall from Section 2.2 that testing for equality is specified with ==
and not =
. Fasten your seat belts and sit tight for now however, we’ll introduce these ideas more fully in Chapter 4.
Learning check
(LC3.1) Take a look at both the flights
and alaska_flights
data frames by running View(flights)
and View(alaska_flights)
. In what respect do these data frames differ? For example, think about the number of rows in each dataset.
3.3.1 Scatterplots via geom_point
Let’s now go over the code that will create the desired scatterplot, keeping in mind our discussion on the Grammar of Graphics in Section 3.1. We’ll be using the ggplot()
function included in the ggplot2
package.
ggplot(data = alaska_flights, mapping = aes(x = dep_delay, y = arr_delay)) +
geom_point()
Let’s break this down piece-by-piece:
- Within the
ggplot()
function, we specify two of the components of the Grammar of Graphics as arguments (i.e. inputs):- The
data
frame to bealaska_flights
by settingdata = alaska_flights
. - The
aes
theticmapping
by settingaes(x = dep_delay, y = arr_delay)
. Specifically:- the variable
dep_delay
maps to thex
position aesthetic - the variable
arr_delay
maps to they
position aesthetic
- the variable
- The
- We add a layer to the
ggplot()
function call using the+
sign. The layer in question specifies the third component of the grammar: thegeom
etric object. In this case the geometric object is set to points by specifyinggeom_point()
.
After running the above code, you’ll notice two outputs: a warning message and the graphic shown in Figure 3.2. Let’s first unpack the warning message:
Warning: Removed 5 rows containing missing values (geom_point).
After running the above code, R returns a warning message alerting us to the fact that 5 rows were ignored due to them being missing. For 5 rows either the value for dep_delay
or arr_delay
or both were missing (recorded in R as NA
), and thus these rows were ignored in our plot. Turning our attention to the resulting scatterplot in Figure 3.2, we see that a positive relationship exists between dep_delay
and arr_delay
: as departure delays increase, arrival delays tend to also increase. We also note the large mass of points clustered near (0, 0).
Before we continue, let’s consider a few more notes on the layers in the above code that generated the scatterplot:
- Note that the
+
sign comes at the end of lines, and not at the beginning. You’ll get an error in R if you put it at the beginning. - When adding layers to a plot, you are encouraged to start a new line after the
+
so that the code for each layer is on a new line. As we add more and more layers to plots, you’ll see this will greatly improve the legibility of your code. - To stress the importance of adding layers in particular the layer specifying the
geom
etric object, consider Figure 3.3 where no layers are added. A not very useful plot!
ggplot(data = alaska_flights, mapping = aes(x = dep_delay, y = arr_delay))
Learning check
(LC3.2) What are some practical reasons why dep_delay
and arr_delay
have a positive relationship?
(LC3.3) What variables in the weather
data frame would you expect to have a negative correlation (i.e. a negative relationship) with dep_delay
? Why? Remember that we are focusing on numerical variables here. Hint: Explore the weather
dataset by using the View()
function.
(LC3.4) Why do you believe there is a cluster of points near (0, 0)? What does (0, 0) correspond to in terms of the Alaskan flights?
(LC3.5) What are some other features of the plot that stand out to you?
(LC3.6) Create a new scatterplot using different variables in the alaska_flights
data frame by modifying the example above.
3.3.2 Over-plotting
The large mass of points near (0, 0) in Figure 3.2 can cause some confusion as it is hard to tell the true number of points that are plotted. This is the result of a phenomenon called overplotting. As one may guess, this corresponds to values being plotted on top of each other over and over again. It is often difficult to know just how many values are plotted in this way when looking at a basic scatterplot as we have here. There are two methods to address the issue of overplotting:
- By adjusting the transparency of the points.
- By adding a little random “jitter”, or random “nudges”, to each of the points.
Method 1: Changing the transparency
The first way of addressing overplotting is by changing the transparency of the points by using the alpha
argument in geom_point()
. By default, this value is set to 1
. We can change this to any value between 0
and 1
, where 0
sets the points to be 100% transparent and 1
sets the points to be 100% opaque. Note how the following code is identical to the code in Section 3.3 that created the scatterplot with overplotting, but with alpha = 0.2
added to the geom_point()
:
ggplot(data = alaska_flights, mapping = aes(x = dep_delay, y = arr_delay)) +
geom_point(alpha = 0.2)
The key feature to note in Figure 3.4 is that the transparency of the points is cumulative: areas with a high-degree of overplotting are darker, whereas areas with a lower degree are less dark. Note furthermore that there is no aes()
surrounding alpha = 0.2
. This is because we are not mapping a variable to an aesthetic attribute, but rather merely changing the default setting of alpha
. In fact, you’ll receive an error if you try to change the second line above to read geom_point(aes(alpha = 0.2))
.
Method 2: Jittering the points
The second way of addressing overplotting is by jittering all the points, in other words give each point a small nudge in a random direction. You can think of “jittering” as shaking the points around a bit on the plot. Let’s illustrate using a simple example first. Say we have a data frame jitter_example
with 4 rows of identical value 0 for both x
and y
:
# A tibble: 4 x 2
x y
<dbl> <dbl>
1 0 0
2 0 0
3 0 0
4 0 0
We display the resulting scatterplot in Figure 3.5; observe that the 4 points are superimposed on top of each other. While we know there are 4 values being plotted, this fact might not be apparent to others.
In Figure 3.6 we instead display a jittered scatterplot where each point is given a random “nudge.” It is now plainly evident that this plot involves four points. Keep in mind that jittering is strictly a visualization tool; even after creating a jittered scatterplot, the original values saved in jitter_example
remain unchanged.
To create a jittered scatterplot, instead of using geom_point()
, we use geom_jitter()
. To specify how much jitter to add, we adjust the width
and height
arguments. This corresponds to how hard you’d like to shake the plot in units corresponding to those for both the horizontal and vertical variables (in this case minutes).
ggplot(data = alaska_flights, mapping = aes(x = dep_delay, y = arr_delay)) +
geom_jitter(width = 30, height = 30)
Observe how the above code is identical to the code that created the scatterplot with overplotting in Subsection 3.3.1, but with geom_point()
replaced with geom_jitter()
.
The resulting plot in Figure 3.7 helps us a little bit in getting a sense for the overplotting, but with a relatively large data set like this one (714 flights), it can be argued that changing the transparency of the points by setting alpha
proved more effective. In terms of how much jitter one should add using the width
and height
arguments, it is important to add just enough jitter to break any overlap in points, but not so much that we completely alter the overall pattern in points.
When would it be better to use a jittered scatterplot? When would it be better to alter the points’ transparency? There is no single right answer that applies to all situations. You need to make a subjective choice and own that choice. At the very least, when confronted with overplotting, we suggest making both types of plots and seeing which plot better emphasizes the point you are trying to make.
Learning check
(LC3.7) Why is setting the alpha
argument value useful with scatterplots? What further information does it give you that a regular scatterplot cannot?
(LC3.8) After viewing the Figure 3.4 above, give an approximate range of arrival delays and departure delays that occur the most frequently. How has that region changed compared to when you observed the same plot without the alpha = 0.2
set in Figure 3.2?
3.3.3 Summary
Scatterplots display the relationship between two numerical variables. They are among the most commonly used plots because they can provide an immediate way to see the trend in one variable versus another. However, if you try to create a scatterplot where either one of the two variables is not numerical, you might get strange results. Be careful!
With medium to large data sets, you may need to play around with the different modifications one can make to a scatterplot. This tweaking is often a fun part of data visualization, since you’ll have the chance to see different relationships come about as you make subtle changes to your plots.
3.4 5NG#2: Linegraphs
The next of the five named graphs are linegraphs. Linegraphs show the relationship between two numerical variables when the variable on the x-axis, also called the explanatory variable, is of a sequential nature; in other words there is an inherent ordering to the variable. The most common example of linegraphs have some notion of time on the x-axis: hours, days, weeks, years, etc. Since time is sequential, we connect consecutive observations of the variable on the y-axis with a line. Linegraphs that have some notion of time on the x-axis are also called time series plots. Linegraphs should be avoided when there is not a clear sequential ordering to the variable on the x-axis. Let’s illustrate linegraphs using another data set in the nycflights13
package: the weather
data frame.
Let’s get a sense for the weather
data frame:
- Explore the
weather
data by runningView(weather)
. - Run
?weather
to bring up the help file.
We can see that there is a variable called temp
of hourly temperature recordings in Fahrenheit at weather stations near all three airports in New York City: Newark (origin
code EWR
), JFK, and La Guardia (LGA
). Instead of considering hourly temperatures for all days in 2013 for all three airports however, for simplicity let’s only consider hourly temperatures at only Newark airport for the first 15 days in January.
Recall in Section 3.3 we used the filter()
function to only choose the subset of rows of flights
corresponding to Alaska Airlines flights. We similarly use filter()
here, but by using the &
operator we only choose the subset of rows of weather
where
- The
origin
is"EWR"
and - the
month
is January and - the
day
is between1
and15
early_january_weather <- weather %>%
filter(origin == "EWR" & month == 1 & day <= 15)
Learning check
(LC3.9) Take a look at both the weather
and early_january_weather
data frames by running View(weather)
and View(early_january_weather)
. In what respect do these data frames differ?
(LC3.10) View()
the flights
data frame again. Why does the time_hour
variable uniquely identify the hour of the measurement whereas the hour
variable does not?
3.4.1 Linegraphs via geom_line
Let’s plot a linegraph of hourly temperatures in early_january_weather
by using geom_line()
instead of geom_point()
like we did for scatterplots:
ggplot(data = early_january_weather, mapping = aes(x = time_hour, y = temp)) +
geom_line()
Much as with the ggplot()
code that created the scatterplot of departure and arrival delays for Alaska Airlines flights in Figure 3.2, let’s break down the above code piece-by-piece in terms of the Grammar of Graphics:
- Within the
ggplot()
function call, we specify two of the components of the Grammar of Graphics as arguments:- The
data
frame to beearly_january_weather
by settingdata = early_january_weather
- The
aes
thetic mapping by settingaes(x = time_hour, y = temp)
. Specifically:- the variable
time_hour
maps to thex
position aesthetic. - the variable
temp
maps to they
position aesthetic
- the variable
- The
- We add a layer to the
ggplot()
function call using the+
sign. The layer in question specifies the third component of the grammar: thegeom
etric object in question. In this case the geometric object is aline
, set by specifyinggeom_line()
.
Learning check
(LC3.11) Why should linegraphs be avoided when there is not a clear ordering of the horizontal axis?
(LC3.12) Why are linegraphs frequently used when time is the explanatory variable on the x-axis?
(LC3.13) Plot a time series of a variable other than temp
for Newark Airport in the first 15 days of January 2013.
3.4.2 Summary
Linegraphs, just like scatterplots, display the relationship between two numerical variables. However it is preferred to use linegraphs over scatterplots when the variable on the x-axis (i.e. the explanatory variable) has an inherent ordering, like some notion of time.
3.5 5NG#3: Histograms
Let’s consider the temp
variable in the weather
data frame once again, but unlike with the linegraphs in Section 3.4, let’s say we don’t care about the relationship of temperature to time, but rather we only care about how the values of temp
distribute. In other words:
- What are the smallest and largest values?
- What is the “center” value?
- How do the values spread out?
- What are frequent and infrequent values?
One way to visualize this distribution of this single variable temp
is to plot them on a horizontal line as we do in Figure 3.9:
This gives us a general idea of how the values of temp
distribute: observe that temperatures vary from around 11°F up to 100°F. Furthermore, there appear to be more recorded temperatures between 40°F and 60°F than outside this range. However, because of the high degree of overlap in the points, it’s hard to get a sense of exactly how many values are between, say, 50°F and 55°F.
What is commonly produced instead of the above plot is known as a histogram. A histogram is a plot that visualizes the distribution of a numerical value as follows:
- We first cut up the x-axis into a series of bins, where each bin represents a range of values.
- For each bin, we count the number of observations that fall in the range corresponding to that bin.
- Then for each bin, we draw a bar whose height marks the corresponding count.
Let’s drill-down on an example of a histogram, shown in Figure 3.10.
Observe that there are three bins of equal width between 30°F and 60°F, thus we have three bins of width 10°F each: one bin for the 30-40°F range, another bin for the 40-50°F range, and another bin for the 50-60°F range. Since:
- The bin for the 30-40°F range has a height of around 5000, this histogram is telling us that around 5000 of the hourly temperature recordings are between 30°F and 40°F.
- The bin for the 40-50°F range has a height of around 4300, this histogram is telling us that around 4300 of the hourly temperature recordings are between 40°F and 50°F.
- The bin for the 50-60°F range has a height of around 3500, this histogram is telling us that around 3500 of the hourly temperature recordings are between 50°F and 60°F.
The remaining bins all have a similar interpretation.
3.5.1 Histograms via geom_histogram
Let’s now present the ggplot()
code to plot your first histogram! Unlike with scatterplots and linegraphs, there is now only one variable being mapped in aes()
: the single numerical variable temp
. The y-aesthetic of a histogram gets computed for you automatically. Furthermore, the geometric object layer is now a geom_histogram()
.
ggplot(data = weather, mapping = aes(x = temp)) +
geom_histogram()
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Warning: Removed 1 rows containing non-finite values (stat_bin).
Let’s unpack the messages R sent us first. The first message is telling us that the histogram was constructed using bins = 30
, in other words 30 equally spaced bins. This is known in computer programming as a default value; unless you override this default number of bins with a number you specify, R will choose 30 by default. We’ll see in the next section how to change this default number of bins. The second message is telling us something similar to the warning message we received when we ran the code to create a scatterplot of departure and arrival delays for Alaska Airlines flights in Figure 3.2: that because one row has a missing NA
value for temp
, it was omitted from the histogram. R is just giving us a friendly heads up that this was the case.
Now’s let’s unpack the resulting histogram in Figure 3.11. Observe that values less than 25°F as well as values above 80°F are rather rare. However, because of the large number of bins, its hard to get a sense for which range of temperatures is covered by each bin; everything is one giant amorphous blob. So let’s add white vertical borders demarcating the bins by adding a color = "white"
argument to geom_histogram()
:
ggplot(data = weather, mapping = aes(x = temp)) +
geom_histogram(color = "white")
We can now better associate ranges of temperatures to each of the bins. We can also vary the color of the bars by setting the fill
argument. Run colors()
to see all 657 possible choice of colors!
ggplot(data = weather, mapping = aes(x = temp)) +
geom_histogram(color = "white", fill = "steelblue")
3.5.2 Adjusting the bins
Observe in both Figure 3.12 and Figure 3.13 that in the 50-75°F range there appear to be roughly 8 bins. Thus each bin has width 25 divided by 8, or roughly 3.12°F which is not a very easily interpretable range to work with. Let’s now adjust the number of bins in our histogram in one of two methods:
- By adjusting the number of bins via the
bins
argument togeom_histogram()
. - By adjusting the width of the bins via the
binwidth
argument togeom_histogram()
.
Using the first method, we have the power to specify how many bins we would like to cut the x-axis up in. As mentioned in the previous section, the default number of bins is 30. We can override this default, to say 40 bins, as follows:
ggplot(data = weather, mapping = aes(x = temp)) +
geom_histogram(bins = 40, color = "white")
Using the second method, instead of specifying the number of bins, we specify the width of the bins by using the binwidth
argument in the geom_histogram()
layer. For example, let’s set the width of each bin to be 10°F.
ggplot(data = weather, mapping = aes(x = temp)) +
geom_histogram(binwidth = 10, color = "white")
Learning check
(LC3.14) What does changing the number of bins from 30 to 40 tell us about the distribution of temperatures?
(LC3.15) Would you classify the distribution of temperatures as symmetric or skewed?
(LC3.16) What would you guess is the “center” value in this distribution? Why did you make that choice?
(LC3.17) Is this data spread out greatly from the center or is it close? Why?
3.5.3 Summary
Histograms, unlike scatterplots and linegraphs, present information on only a single numerical variable. Specifically, they are visualizations of the distribution of the numerical variable in question.
3.6 Facets
Before continuing the 5NG, let’s briefly introduce a new concept called faceting. Faceting is used when we’d like to split a particular visualization of variables by another variable. This will create multiple copies of the same type of plot with matching x and y axes, but whose content will differ.
For example, suppose we were interested in looking at how the histogram of hourly temperature recordings at the three NYC airports we saw in Section 3.5 differed by month. We would “split” this histogram by the 12 possible months in a given year, in other words plot histograms of temp
for each month
. We do this by adding facet_wrap(~ month)
layer.
ggplot(data = weather, mapping = aes(x = temp)) +
geom_histogram(binwidth = 5, color = "white") +
facet_wrap(~ month)
Note the use of the tilde ~
before month
in facet_wrap()
. The tilde is required and you’ll receive the error Error in as.quoted(facets) : object 'month' not found
if you don’t include it before month
here. We can also specify the number of rows and columns in the grid by using the nrow
and ncol
arguments inside of facet_wrap()
. For example, say we would like our faceted plot to have 4 rows instead of 3. Add the nrow = 4
argument to facet_wrap(~ month)
ggplot(data = weather, mapping = aes(x = temp)) +
geom_histogram(binwidth = 5, color = "white") +
facet_wrap(~ month, nrow = 4)
Observe in both Figure 3.16 and Figure 3.17 that as we might expect in the Northern Hemisphere, temperatures tend to be higher in the summer months, while they tend to be lower in the winter.
Learning check
(LC3.18) What other things do you notice about the faceted plot above? How does a faceted plot help us see relationships between two variables?
(LC3.19) What do the numbers 1-12 correspond to in the plot above? What about 25, 50, 75, 100?
(LC3.20) For which types of data sets would these types of faceted plots not work well in comparing relationships between variables? Give an example describing the nature of these variables and other important characteristics.
(LC3.21) Does the temp
variable in the weather
data set have a lot of variability? Why do you say that?
3.7 5NG#4: Boxplots
While faceted histograms are one visualization that allows us to compare distributions of a numerical variable split by another variable, another visualization that achieves this same goal are side-by-side boxplots. A boxplot is constructed from the information provided in the five-number summary of a numerical variable (see Appendix A). To keep things simple for now, let’s only consider hourly temperature recordings for the month of November in Figure 3.18.
These 2141 observations have the following five-number summary:
- Minimum: 21.02°F
- First quartile AKA 25th percentile: 35.96°F
- Median AKA second quartile AKA 50th percentile: 44.96°F
- Third quartile AKA 75th percentile: 51.98°F
- Maximum: 71.06°F
Let’s mark these 5 values with dashed horizontal lines in Figure 3.19.
Let’s add the boxplot underneath these points and dashed horizontal lines in Figure 3.20.
What the boxplot does summarize the 2141 points by emphasizing that:
- 25% of points (about 534 observations) fall below the bottom edge of the box, which is the first quartile of 35.96°F. In other words 25% of observations were colder than 35.96°F.
- 25% of points fall between the bottom edge of the box and the solid middle line, which is the median of 44.96°F. In other words 25% of observations were between 35.96 and 44.96°F and 50% of observations were colder than 44.96°F.
- 25% of points fall between the solid middle line and the top edge of the box, which is the third quartile of 51.98°F. In other words 25% of observations were between 44.96 and 51.98°F and 75% of observations were colder than 51.98°F.
- 25% of points fall over the top edge of the box. In other words 25% of observations were warmer than 51.98°F.
- The middle 50% of points lie within the interquartile range between the first and third quartile of 51.98 - 35.96 = 16.02°F.
Lastly, for clarity’s sake let’s remove the points but keep the dashed horizontal lines in Figure 3.21.
We can now better see the whiskers of the boxplot. They stick out from either end of the box all the way to the minimum and maximum observed temperatures of 21.02°F and 71.06°F respectively. However, the whiskers don’t always extend to the smallest and largest observed values. They in fact can extend no more than 1.5 \(\times\) the interquartile range from either end of the box, in this case 1.5 \(\times\) 16.02°F = 24.03°F from either end of the box. Any observed values outside this whiskers get marked with points called outliers, which we’ll see in the next section.
3.7.1 Boxplots via geom_boxplot
Let’s now create a side-by-side boxplot of hourly temperatures split by the 12 months as we did above with the faceted histograms. We do this by mapping the month
variable to the x-position aesthetic, the temp
variable to the y-position aesthetic, and by adding a geom_boxplot()
layer:
ggplot(data = weather, mapping = aes(x = month, y = temp)) +
geom_boxplot()
Warning messages:
1: Continuous x aesthetic -- did you forget aes(group=...)?
2: Removed 1 rows containing non-finite values (stat_boxplot).
Observe in Figure 3.22 that this plot does not provide information about temperature separated by month. The warning messages clue us in as to why. The second warning message is identical to the warning message when plotting a histogram of hourly temperatures: that one of the values was recorded as NA
missing. However, the first warning message is telling us that we have a “continuous”, or numerical variable, on the x-position aesthetic. Boxplots however require a categorical variable on the x-axis.
We can convert the numerical variable month
into a categorical variable by using the factor()
function. So after applying factor(month)
, month goes from having numerical values 1, 2, …, 12 to having labels “1”, “2”, …, “12.”
ggplot(data = weather, mapping = aes(x = factor(month), y = temp)) +
geom_boxplot()
The resulting Figure 3.23 shows 12 separate “box and whiskers” plots with the features we saw earlier focusing only on November:
- The “box” portions of this visualization represent the 1st quartile, the median AKA the 2nd quartile, and the 3rd quartile.
- The height of each box, i.e. the value of the 3rd quartile minus the value of the 1st quartile, is the interquartile range. It is a measure of spread of the middle 50% of values, with longer boxes indicating more variability.
- The “whisker” portions of these plots extend out from the bottoms and tops of the boxes and represent points less than the 25th percentile and greater than the 75th percentiles respectively. They’re set to extend out no more than \(1.5 \times IQR\) units away from either end of the boxes. We say “no more than” because the ends of the whiskers have to correspond to observed temperatures. The length of these whiskers show how the data outside the middle 50% of values vary, with longer whiskers indicating more variability.
- The dots representing values falling outside the whiskers are called outliers. These can be thought of as anomalous values.
It is important to keep in mind that the definition of an outlier is somewhat arbitrary and not absolute. In this case, they are defined by the length of the whiskers, which are no more than \(1.5 \times IQR\) units long. Looking at this plot we can see, as expected, that summer months (6 through 8) have higher median temperatures as evidenced by the higher solid lines in the middle of the boxes. We can easily compare temperatures across months by drawing imaginary horizontal lines across the plot. Furthermore, the height of the 12 boxes as quantified by the interquartile ranges are informative too; they tell us about variability, or spread, of temperatures recorded in a given month.
Learning check
(LC3.22) What does the dot at the bottom of the plot for May correspond to? Explain what might have occurred in May to produce this point.
(LC3.23) Which months have the highest variability in temperature? What reasons can you give for this?
(LC3.24) We looked at the distribution of the numerical variable temp
split by the numerical variable month
that we converted to a categorical variable using the factor()
function. Why would a boxplot of temp
split by the numerical variable pressure
similarly converted to a categorical variable using the factor()
not be informative?
(LC3.25) Boxplots provide a simple way to identify outliers. Why may outliers be easier to identify when looking at a boxplot instead of a faceted histogram?
3.7.2 Summary
Side-by-side boxplots provide us with a way to compare and contrast the distribution of a quantitative variable across multiple levels of another categorical variable. One can see where the median falls across the different groups by looking at the center line in the boxes. To see how spread out the variable is across the different groups, look at both the width of the box and also how far the whiskers stretch out away from the box. Outliers are even more easily identified when looking at a boxplot than when looking at a histogram as they are marked with points.
3.8 5NG#5: Barplots
Both histograms and boxplots are tools to visualize the distribution of numerical variables. Another common task is visualize the distribution of a categorical variable. This is a simpler task, as we are simply counting different categories, also known as levels, of a categorical variable. Often the best way to visualize these different counts, also known as frequencies, is with a barplot (also known as a barchart).
One complication, however, is how your data is represented: is the categorical variable of interest “pre-counted” or not? For example, run the following code that manually creates two data frames representing a collection of fruit: 3 apples and 2 oranges.
fruits <- tibble(
fruit = c("apple", "apple", "orange", "apple", "orange")
)
fruits_counted <- tibble(
fruit = c("apple", "orange"),
number = c(3, 2)
)
We see both the fruits
and fruits_counted
data frames represent the same collection of fruit. Whereas fruits
just lists the fruit individually…
# A tibble: 5 x 1
fruit
<chr>
1 apple
2 apple
3 orange
4 apple
5 orange
… fruits_counted
has a variable count
which represents pre-counted values of each fruit.
# A tibble: 2 x 2
fruit number
<chr> <dbl>
1 apple 3
2 orange 2
Depending on how your categorical data is represented, you’ll need to use add a different geom
layer to your ggplot()
to create a barplot, as we now explore.
3.8.1 Barplots via geom_bar or geom_col
Let’s generate barplots using these two different representations of the same basket of fruit: 3 apples and 2 oranges. Using the fruits
data frame where all 5 fruits are listed individually in 5 rows, we map the fruit
variable to the x-position aesthetic and add a geom_bar()
layer.
ggplot(data = fruits, mapping = aes(x = fruit)) +
geom_bar()
However, using the fruits_counted
data frame where the fruit have been “pre-counted”, we map the fruit
variable to the x-position aesthetic as with geom_bar()
, but we also map the count
variable to the y-position aesthetic, and add a geom_col()
layer.
ggplot(data = fruits_counted, mapping = aes(x = fruit, y = number)) +
geom_col()
Compare the barplots in Figures 3.24 and 3.25. They are identical because they reflect count of the same five fruit. However depending on how our data is saved, either pre-counted or not, we must add a different geom
layer. When the categorical variable whose distribution you want to visualize is:
- Is not pre-counted in your data frame: use
geom_bar()
. - Is pre-counted in your data frame, use
geom_col()
with the y-position aesthetic mapped to the variable that has the counts.
Let’s now go back to the flights
data frame in the nycflights13
package and visualize the distribution of the categorical variable carrier
. In other words, let’s visualize the number of domestic flights out of the three New York City airports each airline company flew in 2013. Recall from Section 2.4.3 when you first explored the flights
data frame you saw that each row corresponds to a flight. In other words the flights
data frame is more like the fruits
data frame than the fruits_counted
data frame above, and thus we should use geom_bar()
instead of geom_col()
to create a barplot. Much like a geom_histogram()
, there is only one variable in the aes()
aesthetic mapping: the variable carrier
gets mapped to the x
-position.
ggplot(data = flights, mapping = aes(x = carrier)) +
geom_bar()
Observe in Figure 3.26 that United Air Lines (UA), JetBlue Airways (B6), and ExpressJet Airlines (EV) had the most flights depart New York City in 2013. If you don’t know which airlines correspond to which carrier codes, then run View(airlines)
to see a directory of airlines. For example: AA is American Airlines; B6 is JetBlue Airways; DL is Delta Airlines; EV is ExpressJet Airlines; MQ is Envoy Air; while UA is United Airlines.
Alternatively, say you had a data frame flights_counted
where the number of flights for each carrier
was pre-counted like in Table 3.3.
| carrier | number |
|---|---|
| 9E | 18460 |
| AA | 32729 |
| AS | 714 |
| B6 | 54635 |
| DL | 48110 |
| EV | 54173 |
| F9 | 685 |
| FL | 3260 |
| HA | 342 |
| MQ | 26397 |
| OO | 32 |
| UA | 58665 |
| US | 20536 |
| VX | 5162 |
| WN | 12275 |
| YV | 601 |
In order to create a barplot visualizing the distribution of the categorical variable carrier
in this case, we would use geom_col()
instead with x
mapped to carrier
and y
mapped to number
as seen below. The resulting barplot would be identical to Figure 3.26.
ggplot(data = flights_table, mapping = aes(x = carrier, y = number)) +
geom_col()
Learning check
(LC3.26) Why are histograms inappropriate for visualizing categorical variables?
(LC3.27) What is the difference between histograms and barplots?
(LC3.28) How many Envoy Air flights departed NYC in 2013?
(LC3.29) What was the seventh highest airline in terms of departed flights from NYC in 2013? How could we better present the table to get this answer quickly?
3.8.2 Must avoid pie charts!
Unfortunately, one of the most common plots seen today for categorical data is the pie chart. While they may seem harmless enough, they actually present a problem in that humans are unable to judge angles well. As Naomi Robbins describes in her book “Creating More Effective Graphs” (Robbins 2013), we overestimate angles greater than 90 degrees and we underestimate angles less than 90 degrees. In other words, it is difficult for us to determine relative size of one piece of the pie compared to another.
Let’s examine the same data used in our previous barplot of the number of flights departing NYC by airline in Figure 3.26, but this time we will use a pie chart in Figure 3.27.
Try to answer the following questions:
- How much larger the portion of the pie is for ExpressJet Airlines (
EV
) compared to US Airways (US
), - What the third largest carrier is in terms of departing flights, and
- How many carriers have fewer flights than United Airlines (
UA
)?
While it is quite difficult to answer these questions when looking at the pie chart in Figure 3.27, we can much more easily answer these questions using the barchart in Figure 3.26. This is true since barplots present the information in a way such that comparisons between categories can be made with single horizontal lines, whereas pie charts present the information in a way such that comparisons between categories must be made by comparing angles.
Learning check
(LC3.30) Why should pie charts be avoided and replaced by barplots?
(LC3.31) Why do you think people continue to use pie charts?
3.8.3 Two categorical variables
Barplots are the go-to way to visualize the frequency of different categories, or levels, of a single categorical variable. Another use of barplots is to visualize the joint distribution of two categorical variables at the same time. Let’s examine the joint distribution of outgoing domestic flights from NYC by carrier
and origin
, or in other words the number of flights for each carrier
and origin
combination. For example, the number of WestJet flights from JFK
, the number of WestJet flights from LGA
, the number of WestJet flights from EWR
, the number of American Airlines flights from JFK
, and so on. Recall the ggplot()
code that created the barplot of carrier
frequency in Figure 3.26:
ggplot(data = flights, mapping = aes(x = carrier)) +
geom_bar()
We can now map the additional variable origin
by adding a fill = origin
inside the aes()
aesthetic mapping; the fill
aesthetic of any bar corresponds to the color used to fill the bars.
ggplot(data = flights, mapping = aes(x = carrier, fill = origin)) +
geom_bar()
Figure 3.28 is an example of a stacked barplot. While simple to make, in certain aspects it is not ideal. For example, it is difficult to compare the heights of the different colors between the bars, corresponding to comparing the number of flights from each origin
airport between the carriers.
Before we continue, let’s address some common points of confusion amongst new R users. First, note that fill
is another aesthetic mapping much like x
-position; thus it must be included within the parentheses of the aes()
mapping. The following code, where the fill
aesthetic is specified outside the aes()
mapping will yield an error. This is a fairly common error that new ggplot
users make:
ggplot(data = flights, mapping = aes(x = carrier), fill = origin) +
geom_bar()
Second, the fill
aesthetic corresponds to the color used to fill the bars, while the color
aesthetic corresponds to the color of the outline of the bars. Observe in Figure 3.29 that mapping origin
to color
and not fill
yields grey bars with different colored outlines.
ggplot(data = flights, mapping = aes(x = carrier, color = origin)) +
geom_bar()
Learning check
(LC3.32) What kinds of questions are not easily answered by looking at the above figure?
(LC3.33) What can you say, if anything, about the relationship between airline and airport in NYC in 2013 in regards to the number of departing flights?
Another alternative to stacked barplots are side-by-side barplots, also known as a dodged barplot. The code to created a side-by-side barplot is identical to the code to create a stacked barplot, but with a position = "dodge"
argument added to geom_bar()
. In other words, we are overriding the default barplot type, which is a stacked barplot, and specifying it to be a side-by-side barplot.
ggplot(data = flights, mapping = aes(x = carrier, fill = origin)) +
geom_bar(position = "dodge")
Learning check
(LC3.34) Why might the side-by-side (AKA dodged) barplot be preferable to a stacked barplot in this case?
(LC3.35) What are the disadvantages of using a side-by-side (AKA dodged) barplot, in general?
Lastly, another type of barplot is a faceted barplot. Recall in Section 3.6 we visualized the distribution of hourly temperatures at the 3 NYC airports split by month using facets. We apply the same principle to our barplot visualizing the frequency of carrier
split by origin
: instead of mapping origin
ggplot(data = flights, mapping = aes(x = carrier)) +
geom_bar() +
facet_wrap(~ origin, ncol = 1)
Learning check
(LC3.36) Why is the faceted barplot preferred to the side-by-side and stacked barplots in this case?
(LC3.37) What information about the different carriers at different airports is more easily seen in the faceted barplot?
3.8.4 Summary
Barplots are the preferred way of displaying the distribution of a categorical variable, or in other words the frequency with which the different categories called levels occur. They are easy to understand and make it easy to make comparisons across levels. When trying to visualize two categorical variables, you have many options: stacked barplots, side-by-side barplots, and faceted barplots. Depending on what aspect of the joint distribution you are trying to emphasize, you will need to make a choice between these three types of barplots.
3.9 Conclusion
3.9.1 Summary table
Let’s recap all five of the Five Named Graphs (5NG) in Table 3.4 summarizing their differences. Using these 5NG, you’ll be able to visualize the distributions and relationships of variables contained in a wide array of datasets. This will be even more the case as we start to map more variables to more of each geom
etric object’s aes
thetic attribute options, further unlocking the awesome power of the ggplot2
package.
| Named graph | Shows | Geometric object | Notes | |
|---|---|---|---|---|
| 1 | Scatterplot | Relationship between 2 numerical variables |
geom_point()
|
|
| 2 | Linegraph | Relationship between 2 numerical variables |
geom_line()
|
Used when there is a sequential order to x-variable e.g. time |
| 3 | Histogram | Distribution of 1 numerical variable |
geom_histogram()
|
Facetted histograms show the distribution of 1 numerical variable split by values of another variable |
| 4 | Boxplot | Distribution of 1 numerical variable split by 1 categorical variable |
geom_boxplot()
|
|
| 5 | Barplot | Distribution of 1 categorical variable |
geom_bar() when counts are not pre-counted, geom_col() when counts are pre-counted
|
Stacked, side-by-side, and faceted barplots show the joint distribution of 2 categorical variables |
3.9.2 Argument specification
Run the following two segments of code. First this:
ggplot(data = flights, mapping = aes(x = carrier)) +
geom_bar()
then this:
ggplot(flights, aes(x = carrier)) +
geom_bar()
You’ll notice that that both code segments create the same barplot, even though in the second segment we omitted the data =
and mapping =
code argument names. This is because the ggplot()
by default assumes that the data
argument comes first and the mapping
argument comes second. So as long as you specify the data frame in question first and the aes()
mapping second, you can omit the explicit statement of the argument names data =
and mapping =
.
Going forward for the rest of this book, all ggplot()
will be like the second segment above: with the data =
and mapping =
explicit naming of the argument omitted and the default ordering of arguments respected.
3.9.3 Additional resources
An R script file of all R code used in this chapter is available here.
If you want to further unlock the power of the ggplot2
package for data visualization, we suggest you that you check out RStudio’s “Data Visualization with ggplot2” cheatsheet. This cheatsheet summarizes much more than what we’ve discussed in this chapter, in particular the many more than the 5 geom
geometric objects we covered in this Chapter, while providing quick and easy to read visual descriptions.
You can access this cheatsheet by going to the RStudio Menu Bar -> Help -> Cheatsheets -> “Data Visualization with ggplot2”:
3.9.4 What’s to come
Recall in Figure 3.2 in Section 3.3 we visualized the relationship between departure delay and arrival delay for Alaska Airlines flights. This necessitated paring down the flights
data frame to a new data frame alaska_flights
consisting of only carrier == AS
flights first:
alaska_flights <- flights %>%
filter(carrier == "AS")
ggplot(data = alaska_flights, mapping = aes(x = dep_delay, y = arr_delay)) +
geom_point()
Furthermore recall in Figure 3.8 in Section 3.4 we visualized hourly temperature recordings at Newark airport only for the first 15 days of January 2013. This necessitated paring down the weather
data frame to a new data frame early_january_weather
consisting of hourly temperature recordings only for origin == "EWR"
, month == 1
, and day less than or equal to 15
first:
early_january_weather <- weather %>%
filter(origin == "EWR" & month == 1 & day <= 15)
ggplot(data = early_january_weather, mapping = aes(x = time_hour, y = temp)) +
geom_line()
These two code segments were a preview of Chapter 4 on data wrangling where we’ll delve further into the dplyr
package. Data wrangling is the process of transforming and modifying existing data with the intent of making it more appropriate for analysis purposes. For example, the two code segments used the filter()
function to create new data frames (alaska_flights
and early_january_weather
) by choosing only a subset of rows of existing data frames (flights
and weather
). In this next chapter, we’ll formally introduce the filter()
and other data wrangling functions as well as the pipe operator %>%
which allows you to combine multiple data wrangling actions into a single sequential chain of actions. On to Chapter 4 on data wrangling!
References
Grolemund, Garrett, and Hadley Wickham. 2016. R for Data Science. http://r4ds.had.co.nz/.
Robbins, Naomi. 2013. Creating More Effective Graphs. Chart House.
Wickham, Hadley, Winston Chang, Lionel Henry, Thomas Lin Pedersen, Kohske Takahashi, Claus Wilke, Kara Woo, and Hiroaki Yutani. 2019. Ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics. https://CRAN.R-project.org/package=ggplot2.
Wilkinson, Leland. 2005. The Grammar of Graphics (Statistics and Computing). Secaucus, NJ, USA: Springer-Verlag New York, Inc.


Can I Make My Characters Talk?
New Background
New Character
Delete the cat (press and hold)
Position the characters by dragging them from the center of the screen
Welcome!
My name is Mr. Smith.
It is nice to meet you all!
Hi! My name is ________.
Hi! My name is ________.
Hi! My name is ________.


'Forces of Nature' (1999)
A movie review by Walter Frith
<EMAIL_ADDRESS>Member of the ‘Online Film Critics Society' http://ofcs.org/ofcs/
Suppose you are about to tie the knot. You are forced to travel on the road after your plane ride goes awry on the way to your wedding destination, a number of strangers you pass like a ship in the night strike up a friendly and time consuming conversation with you where you hear alleged horror stories about the padlock known as marriage where conservative belief is that in most cases it's all supposed to work out and things will remain rosy but the truth is that people, as different as they all are, sometimes have a hard time staying with the same person for their whole life. That is the premise behind 'Forces of Nature'.
Ben Affleck stars as Ben Holmes, a New York City writer who is engaged to a southern belle from Savannah, Georgia named Bridget (Maura Tierney). Her family is wealthy. Her father (Ronny Cox) is a straight shooting conservative businessman and her mother (Blythe Danner) voted twice for Clinton because as she puts it: "All the best presidents sleep around". Ben's mother and father are upper middle class and don't see eye to eye with their southern in-laws. As his coach flight is about to take off, a freak accident occurs that prevents the plane from taking off and Ben now has to find an alternative form of transportation. He travels with a woman who believes he saved her life named Sarah (Sandra Bullock), a free spirited woman who won't be held down by anything and travels in whatever direction the wind is blowing. They experience all the bad luck you can imagine such as the kind of fun (for the audience only) that Steve Martin and John Candy experienced in 1987's 'Planes, Trains & Automobiles'.
The film's entertainment value trickles down slowly like a pleasant light rain. It's constant and very relieving and even manages to remain very witty along the way. If you're going to tell a story about two people who learn something about each other and apply it separately to their own lives, it's a good idea to balance the amount of time each has on screen and this is done perfectly. And what really makes the film work is that neither Ben Affleck or Sandra Bullock try to upstage one another. Their personalities enhance the film extremely well and they have the perfect on screen chemistry needed to make any relationship picture work.
Director Bronwen Hughes ('Harriet the Spy'), gives his film a good pace but about half way through, it slows down considerably --- more than it should actually, but picks itself up for a satisfying conclusion.
'Forces of Nature' works for another good reason. The script by Marc Lawrence, Ian Bryce, and Donna Roth has a tendency to look for acute social observations on marriage, divorce, parenthood and relationships without making it look obvious. The film's dialogue flows so naturally that personality is the movie's strongest trait.
OUT OF 5 > * * * 1/2
Visit FILM FOLLOW-UP by Walter Frith http://www.cgocable.net/~wfrith/movies.htm
* * * * * - a must see * * * * 1/2 - don't miss it * * * * - an excellent film * * * 1/2 - a marginal recommendation * * * - can't quite recommend it * * 1/2 - don't recommend it * * - avoid it * 1/2 - avoid it seriously * - avoid it AT ALL COSTS 1/2 - see it at your own risk zero - may be hazardous to your health
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


A 'URL changer'. It makes some URLs shorter, others longer. Try it!
https://fcc-urlshort-otmeek.c9users.io/new/https://www.google.com
https://fcc-urlshort-otmeek.c9users.io/new/http://www.freecodecamp.com/
{ "original_url": "https://www.google.com", "short_url": "https://fcc-urlshort-otmeek.c9users.io/1" }


Add Round Key
In the AddRoundKey() transformation, a Round Key is added to the State by a simple bitwise XOR operation. Each Round Key consists of words from the key schedule. Those words are each added into the columns of the State, such that
where are the key schedule words
function [state] = AddRoundKey(state, w, Nb) w = gf(w, 8, Config.mx); state = gf(state, 8, Config.mx); for c = 1:Nb state(c, :) = state(c, :) + w(c, :); end state = int16(state.x); end


Home
Articles
Q & A
Contact Us
FlowerShop Website
CONTACT US
Fill in Contact Form..
Name:
Email:
Subject:
Comment:
Where are you enquiring from:
International
Australia
USA
under 30 years of age
over 30 years of age


“Kara is an amazing woman (she happened to guide me through the NYC marathon) and a health coach. She’s so knowledgeable and has a wonderful personality so if you are thinking you need some coaching to reach your health and personal goals, check out her info!!!”
Kathleen, 50
“I had such a great time working with coach Kara. She helped me to make subtle changes to my diet that had big impact to my health, as well as giving me the accountability to continue to crowd out the inflammatory foods I was eating with plant-based alternatives. I’ve lost weight, have more energy and am really pleased with my progress in just a short time - even while traveling the world as a nomad!”
Kate, 38
“I have been working with Kara for a few months now, and with her extensive insight and expertise, she developed an easy to understand, personal plan to attain and manage the goals that I set for myself.
Kara really opened my eyes to the entirety of mental as well as physical health. Not just how active I should strive to be or what foods and eating habits I should be mindful of, but how every aspect of the mind and body needs to work in harmony to achieve long lasting results. This approach allowed me to target very specific aspects of my lifestyle in order to arrive at larger milestones through careful planning and education.
I am thrilled to continue working with Kara and I would recommend her to anyone looking for motivation and accountability toward changes big or small, to find a happier future self.”
Joni, 29
“Ever since I had temporarily been diagnosed with a cervix pre-cancer condition 10 years ago, I have been obsessed with finding the right diet to stay on top of my health game, including genetic analysis, metabolic typing and much more. Being convinced that my body needs tons of protein and knowing Kara was vegan, I went into the coaching with a grain of salt. I have never been as positively surprised by the results of her influence on my nutrition and wellbeing. Not only is Kara a complete expert in her field, but she also finds a uniquely private approach to your individual situation, using a wealth of information from different angles relating to nutrition and exercise.
I had been healthy and conscious before, but after only a few weeks under her supervision, I feel much more healthy, awake, agile and strong than I had ever felt before, both physically and mentally. I can only highly recommend Kara in every area connected to health and physical wellbeing. I surely have fundamentally been changed by her coaching!”
Kathrin, 33


Questions 0
Answers 0
Submited projects 0
Active Attendies
Inactive Attendies
Total Attendies


When I smell a sizzling steak or juicy piece of meat, I find it very difficult to keep from eating, even if I have just finished a meal.
I deliberately take small helpings as a means of controlling my weight.
When I feel anxious, I find myself eating.
Sometimes when I start eating, I just can’t seem to stop.

When I feel blue, I often overeat.
When I see a real delicacy, I often get so hungry that I have to eat right away.
I get so hungry that my stomach often seems like a bottomless pit.
I am always hungry so it is hard for me to stop eating before I finish the food on my plate.
When I feel lonely, I console myself by eating.
I consciously hold back at meals in order not to weight gain.
I do not eat some foods because they make me fat.
I am always hungry enough to eat at any time.
How often do you feel hungry?
How frequently do you avoid 'stocking up' on tempting foods?

Do you go on eating binges though you are not hungry?


N early 15 years ago, our founder, Hank “Hip” Jones, discovered his passion. From his basement in Decatur, Hip entertained neighbors and friends, stirring flavorful alcoholic concoctions and preparing delicious meat and vegetarian dishes. Hip so enjoyed hosting these gatherings every week, he decided to bring his bartending and culinary prowess to the masses.
In 2005, he opened his first pop-up restaurant on the outskirts of Decatur. Each night, folks from across metro Atlanta packed Hip’s place, ordering everything from Prosciutto to Paprika Cured Pork Loin. But it wasn’t just the food that was a hit. Hip’s drinks, from the classic Tango Martini Cocktail to his famous Mint Martini, delighted faithful patrons — while fetching thousands of dollars in revenue.
Word of Hip’s pop-up spread, and soon his location was too small for the burgeoning crowd of 20-, 30-, and 40-somethings. In March 2013, Hip leased a 20,000-square-foot space on Decatur’s East Court Square. Hip hired an eager crew of chefs, waiters, and bartenders, even luring employees away from perennial iconic restaurants such as Rathbun’s and Sundial. Then he expanded his menu, serving up seafood bisque and hog chops, for instance, and he stocked his bar with artisanal craft beers and other drink favorites.
Hip & Stir was born -- to rave reviews.
In October 2013, Atlanta Journal-Constitution food critic John Kessler wrote that Hip & Stir “is a breath of fresh air in a sea of culinary sameness.” Patrons often remark that although Hip & Stir is an upscale food-and-drink venue, its appeal lies in the fact that it lacks the pomp and pretentiousness of restaurant competitors in Midtown, Virginia-Highland and Buckhead.
Could we see more Hip & Stir locations in the future?
“Perhaps,” says Hip, “but for right now, I’m just focused on making this location the swankiest spot for good food and good libations in Decatur.”


Who is Lyndon Dykes? Lowdown on Australian-born striker linked with Derby County
Latest Derby County transfer news | We take a look at the latest player to be linked with a move to Pride Park during the January transfer window
by Mark WakefieldDerby County have been linked with a move for Livingston striker Lyndon Dykes during the January transfer window.
Reports over the weekend claimed that the Rams are one of six clubs to have made an enquiry for the 24-year-old forward.
Middlesbrough, Cardiff, Swansea, Bristol City and Blackburn have also been credited with an interest in the player.
So who is the latest player to be linked with a move to Pride Park?
Dykes was born on October 7, 1995, in the Gold Coast in Australia, stands at 6ft2” tall and plays predominantly as a striker.
After growing up in Australia, Dykes toured Scotland, where his parents originate, and was signed by Queen of the South in the summer of 2016.
His first goal in professional football came in his sixth game as he scored in QoS’s 3-1 win over Hibernian in the Scottish League Cup tie in August 2016.
In his first season as a professional, Dykes scored just four goals in 40 appearances, but after eventually netting 22 times in 136 outings he was signed by Livingston in the summer.
Derby County latest
This is your round up of all things Derby; the one-stop shop that will keep you updated on the latest goings on at Pride Park and beyond.
Transfers, injuries, match-days and managers, we’ve got you covered.
We’ll be bringing the very latest on the Rams throughout the week and around the clock.
Make sure you keep yourself updated with our handy daily catch up...
Must reads...
- Scottish duo set to battle for transfer of former Derby County defender - reports
- These are the eight players Derby County fans want to leave the club in January
- Derby County transfer gossip - Rams looking north of border for striker
- 'Quality' - Could Derby County have set this guy on the road to greatness?
- 'As good' - Jayden Bogle compared favourably to Premier League right-backs
- Who is Luciano Acosta? Profile on D.C. United star invited to Derby County by Wayne Rooney
For all your latest Rams news, opinion, analysis and transfer gossip, click here
You can follow our Rams reporter Steve Nicholson on Twitter, and his email address is<EMAIL_ADDRESS>The 24-year-old started brightly at his new club, scored five goals in 14 appearances so far this season.
His disciplinary record is an area of his game that could do with improvement. He has already accumulated five yellow cards this term, and was sent of in Livingston’s 3-1 defeat to Rangers in September.
Dykes has proven that he can play in a number of positions in the final third, mainly featuring as the main striker he can also operate on either wing and in the No.10 role behind the lone frontman.


We sell metrics!
- reintermediate e-business e-services
- transform revolutionary e-tailers
- reintermediate real-time content
- reinvent one-to-one eyeballs
- embrace e-business models
- matrix strategic niches
- incentivize value-added metrics
- innovate dynamic methodologies
- maximize leading-edge e-business
- brand end-to-end initiatives
- whiteboard bricks-and-clicks systems


Eleventh session of the Conference of the Parties to the Climate Change Convention and first meeting of the Parties to the Kyoto Protocol
06-Dec-05 — original report
Consultations convened by Helen Plume (New Zealand) and Kishan Kumarsingh (Trinidad and Tobago) resumed on the SBSTA five year programme of work on adaptation, with informal discussions still continuing as of 11:45 pm.
Informal consultations on the Adaptation Fund continued through the day, while the contact group reconvened in the evening to take up other outstanding items.
Consultations on the Adaptation Fund resumed later in the evening.
Delegates engaged in line-by-line discussion of the Co-Chairs' draft text.
The Co-Chairs introduced a revised draft decision late in the evening that includes clean text in the preamble, but which has considerable bracketed text in the operational section.
Delegates agreed to revised draft SBI conclusions that are consistent with the contact group's previous decision that the conclusions should be short and focus on taking note of the report.
SBI Chair Becker began informal consultations to resolve bracketed text.
Key outstanding areas include language on the priority areas for the SCCF and the timing regarding the COP's review of the status of SCCF implementation in such areas.
Delegates agreed to the draft SBI conclusions that were considered at the previous meeting of the contact group.
Delegates agreed to a draft COP decision that focuses on requesting the GEF to provide additional information on the impact of the RAF on the climate change focal area.
The draft decision also includes language agreed to at a SBSTA contact group on potential support for carbon capture and storage technologies by the GEF.
The Co-Chairs introduced a draft decision, noting that while the decision would apply, mutatis mutandis, the MOU with respect to guidance to the entity entrusted with the operation of the financial mechanism of the Convention, it would not apply to the Adaptation Fund, as no decision has been taken on the operational entity for that fund.
Delegates will consult informally before reconsidering this item at the next contact group meeting.
During informal consultations, Parties considered parts of a Chair's draft COP/MOP decision.
Developing countries proposed deleting reference to small scale JI projects, explaining that CDM small scale guidelines were adopted due to concerns specific to developing countries and the CDM process.
An Annex I Party opposed the deletion, noting that many JI projects are small, and emphasizing the need to encourage mitigation measures.
Highlighting the need to assist vulnerable countries, developing countries suggested levying 2% of JI Emissions Reduction Units (ERUs) for the Adaptation Fund.
A developed country stressed the different objectives of JI and CDM under the Protocol and said that, unlike CDM, there is no need for JI projects to contribute to sustainable development in developing countries.
No agreement was reached.
Chair Daniela Stoycheva (Bulgaria) was to consult with interested Parties later in the evening, focusing on the use of the CDM's designated operational entities (DOEs), CDM methodologies and CDM project design document for second-track JI projects.
The group met informally in the afternoon and late into the night.
Discussions were continuing as of 11:45 pm.
Co-Chairs David Brackett (Canada) and André do Lago (Brazil) explained that five separate consultations had been held earlier on Monday with interested Parties on: administrative issues; additionality; carbon dioxide capture and storage under the CDM; share of proceeds to cover administrative expenses of the Executive Board; and whether local, national or regional policy standards and programmes can be considered CDM project activities.
The Co-Chairs distributed a new draft decision.
They characterized the informal consultations as constructive, although agreement had not been reached on the five topics listed above and on some other issues, including retroactive crediting and the CDM's continuity beyond 2012.
Outlining the brackets, Co-Chair Brackett identified the question of policy standards and programmes under the CDM as one of the key areas requiring further consultations.
The RUSSIAN FEDERATION proposed new text increasing the share of proceeds to cover the Board's administrative expenses to US$0.50 per CER.
BRAZIL responded that it was considering proposing to levy a share of proceeds from JI projects and emissions trading to the Adaptation Fund.
The Co-Chairs asked Parties to reconsider these proposals and said informal consultations with interested Parties would continue on Tuesday afternoon.
Privileges and Immunities for Individuals Serving on Constituted Bodies under the Kyoto Protocol: Contact group Chair Masao Nakayama (Micronesia) requested comments from Parties.
Nigeria, for the G-77/CHINA, proposed giving the matter further consideration at SBI 24.
The EU agreed, and suggested additional text requesting the UNFCCC Executive Secretary to liaise with the UN Secretary-General on this prior to SBI 24.
While the G-77/CHINA expressed concerns that SBI's future consideration should not be pre-determined by other work, a compromise text was eventually formulated.
The agreed text asks SBI 24 to consider this issue and requests submissions by 13 February 2006.
It also requests the UNFCCC Executive Secretary to consult with the UN Secretary-General on ensuring the necessary privileges and immunities, and to report to SBI 24.
NIGERIA said he would take this text back to the G-77/China for its consideration, and that if the Group agreed to the text, then the conclusions could be approved without the need for a further meeting.
Co-Chair Holger Liptow (Germany) reported to the contact group that a draft decision had been approved during informal consultations late Saturday, pending an agreement on draft conclusions.
The draft decision, inter alia: invites Parties to submit their view on the status and continuation of the Expert Group on Technology Transfer (EGTT); requests the Secretariat to organize a senior-level roundtable discussion on technology cooperation and partnerships, deployment and transfer; and requests SBSTA to take into account existing technology-based international cooperation when considering future work for enhancing the implementation of the framework.
Delegates agreed to the outstanding paragraph relating to the 2006 EGTT Work Programme, which dealt with a side event on public technologies.
They also agreed to conclusions on a technical paper by the Secretariat on adaptation technologies discussed in a recent workshop in Trinidad and Tobago.
Delegates were expressing growing concerns about divisions in negotiations on Monday night.
Although several less controversial issues were resolved, arguments over financial matters and the mechanisms intensified, with at least one 'shouting match' breaking out between delegates.
According to talk in the corridors, a major point of contention is over how to make the mechanisms more attractive.
Moves by developing countries to impose a levy on joint implementation projects to fund the Adaptation Fund were not well received by JI hosts and investors that stand to gain from JI.
The proposal prompted what one participant called 'a tit-for-tat response' from the Russian Federation aimed at increasing the levy on CDM - the mechanism focused on developing countries. 'It's like a competition between JI and CDM, with each side trying to make their mechanism more attractive to investors,' alleged one expert.
'This is the time to be taking issues off the negotiating table, not adding them,' said another. Others were more sanguine: 'This will go down to the wire on Friday, and it's too early to expect Parties to give up any negotiating chips just yet,' explained a veteran. Meanwhile, informal consultations on Article 3.9 (future commitments) were still continuing late into Monday night.
Delegates outside the room seemed confused as to what exactly was going on, and about how President Dion's latest initiative on future scenarios under the UNFCCC related to Article 3.9 talks.
Delegates convened in the evening for further informal consultations.
The meeting was held in a small group setting and involved only delegates from several Parties and country groups.
As of 11:45 pm, negotiations were ongoing and progress was slow.
The group met informally in the afternoon and late into the night.
Discussions were still continuing as of 11:45 pm.
Parties agreed to a draft COP/MOP decision and draft SBSTA conclusions presented by Chair Georg Børsting (Norway) on the implications of the establishment of new HCFC-22 facilities seeking to obtain CERs for the destruction of HFC-23.
The draft decision includes a definition of new HCFC-22 facilities, recognizes that issuing CERs for HFC-23 destruction could lead to higher global production of HCFC-22 and/or HFC-23, and encourages Annex I Parties and multilateral financial institutions to provide funding for destruction of HFC-23 in non-Annex I Parties.
The decision also requests SBSTA to continue deliberations on the issue with a view to preparing a draft recommendation with guidance to the CDM Executive Board for adoption at COP/MOP 2.
Parties met for informal consultations on the adoption of the compliance mechanism and Saudi Arabia's proposal to amend the Protocol.
Delegates had received a revised draft decision from Co-Chairs Mamadou Honadia (Burkina Faso) and Harald Dovland (Norway) on Sunday, and negotiations continued on Monday morning.
In the evening, the Co-Chairs provided a new proposal based on input from both developed and developing countries that included two key paragraphs on adopting the compliance mechanism at COP/MOP 1, and consideration of the amendment process.
Differences remained on whether there is a need to amend the Protocol as proposed by Saudi Arabia.
Informal consultations will continue on Tuesday, when the Co-Chairs will provide a new proposal.
Chair Hernán Carlino (Argentina) presented draft conclusions.
Papua New Guinea, for the G-77/CHINA and supported by many Parties, stressed the need to address both technical and policy aspects of this issue, and suggested including a reference to consideration by SBI as well as SBSTA.
The G-77/CHINA also called for more expedited consideration of this issue by the COP and, supported by AUSTRALIA, CANADA and others, proposed including reference to incentives.
The EU, US, ENVIRONMENTAL INTEGRITY GROUP and others preferred the text as presented, with the US emphasizing the discussion under SBSTA.
The EU said submissions could also be sought from observer organizations.
Informal consultations will continue.
Informal consultations were convened by Andrej Kranjc (Slovenia).
At least one negotiating group raised concerns that an amendment to the Protocol would be needed for Belarus to become an Annex B Party.
Further consultations are expected.
Bilateral and small-group consultations with interested Parties were convened by José Romero (Switzerland).
Discussions focused on a workshop on this issue.
Consultations in a larger group setting are expected on Tuesday.


Pictures: Jose Mourinho BRAZENLY strolls through Chelsea in full Tottenham gear
by Tom McNeilJose Mourinho’s comments about being devoted to Chelsea and never wanting to manage Spurs were always going to come back to bite him as soon as he took the job.
Despite that, Chelsea did sack him twice so he’s perfectly entitled to find work. The relationship with Mourinho and Chelsea has always been strong after he left, but it did show some signs of breaking down when some of the fans gave him a hostile reception during his spell at Manchester United.
READ MORE: Video: Cringey moment as Sky Sports confuse picture of two Chelsea stars
It will be fascinating to see what it’s like when he takes his Spurs team to Stamford Bridge for the first time, and these images certainly won’t help – (credit to GC Images and The Mirror) :
According to a report from The Mirror, this is Mourinho walking about the Chelsea area where he lives donning a full Spurs outfit. They also quote him from four years ago when he spoke about taking the Spurs job, he said “I would not take the job because I love Chelsea too much”.
It’s fair to point out on one hand this is just a man walking near his house in his work uniform. The problem is, it’s Jose Mourinho we’re talking about, it’s likely he knows exactly what he’s doing.


Closure Plots for Basic Arithmetics
This is visualization tool for plotting the simulation of floating point with Basic Arithmetics
Floating point precision
Half
Single
Arithmetics operations
Addition
Subtraction
Multiplication
Division
Plot my requests


Functions
The following functions are available globally.
-
Compare two documents
Compera ids, etags and dictionaries
Declaration
Swift
public func == (lhs: RapidDocument, rhs: RapidDocument) -> Bool
Parameters
lhs
Left operand
rhs
Right operand
Return Value
true
if operands are equal


ED'S NEXT MOVE A film review by Steve Rhodes Copyright 1996 Steve Rhodes
RATING (0 TO ****): ** 1/2
ED'S NEXT MOVE is a charming little low budget picture where the actors seem less like actors than people on whom you are getting to eavesdrop. In the press kit, writer and director John Walsh says that after failing to secure funding, he "decided to make the film the old fashioned way: on credit cards." I glad he did for this delightful film had me in constant chuckles.
ED'S NEXT MOVE tells of the travails of Eddie Brodsky (Matt Ross from TWELVE MONKEYS) as he moves from placid Wisconsin to the hectic pace and strange rhythms of New York City. Eddie earns his living studying the genetics of rice plants and he comes to NYC to study under an expert in the field, but having little money, he goes on a hunt for an apartment to share.
Actually, his life and this film is spent in search of a woman with whom he can have a relationship. Ross is terrific as the classic awkward and shy guy, and his awkwardness mirrors the awkwardness of the script, funny thought it is. Although Eddie is twenty-five, his boyish looks make him look much younger. He had a girlfriend in Wisconsin, but she dumped him and even compiled a list of her complains about him.
Ray Obregon (Kevin Carroll) agrees to rent Eddie part of his apartment, but when they meet, Ray starts bragging of his sexual prowess. Ray tells how he recently got into an elevator and four of his ex-girlfriends were in it. Depressed Eddie says, "Four women in the same elevator. I haven't been with four women in the same time zone."
There are several little imaginary vignettes in the film. In one, Eddie and his old girlfriend get together with translators who tell each other what the other is really saying. When his ex says she doesn't like Eddie anymore, her translator says what she mean is, "there's a guy at work who makes the zipper on my jeans melt."
Another vignette involves the distribution of "Official Nice Guy" ID cards.  It is a great take-off on the late night cable TV commercials. All of the humor in the show walks the fine line between dialog that you laugh at versus laugh with. For me the script is precious and it works, but the two other reviews I have seen of the show range from a near perfect rating to a near bomb. Actually, I can understand both perspectives, but as Eddie says, "in some things, the more I analyze them the less clear they become." Don't analyze this film, just kick back and laugh with it.
Predictably, Eddie does finally get a woman, Lee Nicol (Callie Thorne), to go out on a date with him. Her main problem with him is that "You're so, so normal." Before she arrives, Eddie gets in an argument with Ray about his attitude about sex. Eddie corrects him, "Sex is not a transitive act. It is an intransitive act." Disgusted, Ray informs him that, "If you talk like that to her, it will be a non-existent act." All three of the principle actors show promise, but Ross is the best. His false starts in kissing are classics, but the funny setups provided by the script should get some of the credit.
The picture is helped by an excellent score which is quite unusual in a low budget film. At first the music is dominated by jazz pieces composed for the film and played by Benny Golson. Toward the end of the picture, it switches to funny folk songs sung by the San Francisco alternative band Ed's Redeeming Qualities. One of their best songs ends with the line, "I wish there were more bad times to see you through."
ED'S NEXT MOVE runs only 1:28. It is rated R for a few cuss words, one very brief sex scene, and a two swing fist fight. There is no nudity. I think this sweet and upbeat little picture would be fine for all teenagers and probably some slightly younger kids as well. I had fun with the show and recommend it to all except those of you who need a highly polished product. The show gets ** 1/2 from me.
**** = One of the top few films of this or any year. A must see film. *** = Excellent show. Look for it. ** = Average movie. Kind of enjoyable. * = Poor show.  Totally unbearable.
REVIEW WRITTEN ON: September 25, 1996
Opinions expressed are mine and not meant to reflect my employer's.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Contract
| Vendor Name | MEDIACO |
|---|---|
| Description of Work | Audio-visual services |
| Comments | AV Equipment and Technical Support |
| Reference Number | 5018643 |
| Contract Date | 2006-11-29 |
| Contract Period | 2006-11-29 to 2006-12-01 |
| Contract Value | $ 11,132.12 |
* Use either Contract Period or Delivery Date.


History.txt
- History.txt
- Last modified: Sat Jan 07 02:36:16 +0100 2012
3.0.10 / 2012-01-04
- 1 minor enhancement:
- Add test for bare hash at end of array in 1.9. (presidentbeef)
- 1 bug fix:
3.0.9 / 2011-12-07
- 1 minor enhancement:
- Add missing test for a ternary with nil without a space before the colon
(brynary)
3.0.8 / 2011-11-16
- 4 minor enhancements:
- Add 6 missing ruby 1.9 tests (brynary)
- Added new 1.9 hash tests to pt_testcase.rb
- Version specific tests are now skipped at runtime, not test creation time
- Added new block arg tests.
3.0.7 / 2011-09-21
- 2 bug fixes:
- Fixed and test to not have mandatory parens
- Fixed r2r’s handling of dregexp options
3.0.6 / 2011-08-16
- 5 minor enhancements:
- Added ParseTreeTestCase#add_19tests
- Added a bunch of FAILING 1.9 tests stolen from presidentbeef’s repo!
yay!
- Added add_19tests and add_18tests to segregate version specific parsing.
- Moved pt_testcase.rb to sexp_processor
- Segregated a bunch of 1.8 specific tests using add_18tests.
3.0.5 / 2010-09-01
- 2 minor enhancements:
- Added in_context to clean up code.
- optimize inspect to avoid needlessly caching @line
3.0.4 / 2010-03-27
- 1 minor enhancement:
- Added line number to pretty_print output if $VERBOSE
3.0.3 / 2009-08-14
- 1 minor enhancement:
- Pulled mass up from flog/flay
3.0.2 / 2009-06-23
- 2 minor enhancements:
- Pulled unique.rb from ParseTree to sexp_processor.
- Switched to minitest.
3.0.1 / 2009-01-20
- 3 minor enhancements:
- Filled out README
- Promoted file/line/comments from ruby_parser.
- Added sexp_type to compliment sexp_body.
3.0.0 / 2008-10-22
- 2 major enhancements:
- Released as its own project, splitting from ParseTree
- Added Environment to SexpProcessor and built it in.
YAY!
- 6 minor enhancements:


38+ Logo Stikes Bali Pictures. Stikes buleleng, buleleng, bali, indonesia. Peraturan pps stikes bina usada bali 2015.
Stikes buleleng, buleleng, bali, indonesia. Jalur pmdk, reguler dan konversi.untuk tahun ajaran 2014. Posted by manah at 8:17 am.
Posted by manah at 8:17 am.
Makna logo stikes dan artinya. Over the time it has been ranked as high as 1 897 499 in the world, while most of its traffic comes from indonesia, where it reached as high as 32 918. Stikes bali is a university, campus located at jl. .stikes buleleng singaraja bali, jual grosir boneka wisuda stikes buleleng singaraja bali murah.


Hi, I am Krishna Vishakarma, an engineer by degree/profession. I love experimenting and learning new technologies. I have a keen interest in,Web Development, IOT, Data Engineering, Bike Riding, Gaming among many other things.
This work introduces the design and development of smart green environment of garbage monitoring system by measuring the garbage level in real time and to alert the municipality where never the bin is full.
By using a microcontroller, camera, and internet this project clicks the picture of any intruder and in realtime it will send it to your email address with attachment to inform you.
This System detects the leakage of LPG gas by using a sensor a microcontroller, alarm, and a modem to send massages to the house owner to alert them.
This website developed for a particular customer requirement. In which designing and development done by HTML, CSS & Boostrap 4 Framework.
By using microcontroller, camera and internet this project click the picture of any intruder and in real time it will send it to your email address with attachment to inform you.
This project developed on vb.net it is an online website for booking luxury busses for traveling adding passengers, selecting seat and destination used SQL for the recoded database.


Always check the domain before the approval !
Succesfuly delivered
Please try again
Invalid timestamp


✔ Appointment request submitted
Please keep this information for your records
Booking reference number
XXXX XXXX XXXX
Clinic
General Respiratory Medicine-Respiratory Medicine-Town (Name Hosp)-CODE
Location
Hospital St, City, PO5 7CO
Referred by
Dr Zubeir Smith at Colton Mill Medical Centre
Comments
I cannot be contacted Monday to Wednesday, 9am to 12 noon.
What happens next?
Your selected clinic will contact you.
Your selected clinic should contact you to agree the date and time for your appointment. The clinic should contact you by Friday 15 December 2017.
If you do not hear back by this date, contact the clinic on 0113 123 1234


| NHL Hockey | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Home | | | Scoreboard | | | Stats | | | Standings | | | Teams | | | Players | | | Player News | | | Injuries | | | Transactions | | | Odds |
NHL Recent Transactions |
| Date | Player | Status |
| 2/17 | Korbinian Holzer | Sent to minors San Diego-AHL for conditioning stint |
| 2/17 | Anton Khudobin | Sent to minors San Diego-AHL |
| Date | Player | Status |
| 2/16 | Niklas Treutle | Called up from minors from Springfield-AHL |
| 2/15 | Nathan Schoenfeld | Signed as Free Agent 24-hour tryout contract |
| 2/15 | Anders Lindback | Placed on IR Achilles |
| Date | Player | Status |
| 2/16 | Colin Miller | Sent to minors Providence-AHL |
| Date | Player | Status |
| 2/22 | Cal O'Reilly | Called up from minors from Rochester-AHL |
| 2/21 | Justin Bailey | Called up from minors from Rochester-AHL |
| 2/21 | Ryan O'Reilly | Placed on IR Lower-body injury |
| 2/19 | Daniel Catenacci | Sent to minors Rochester-AHL |
| 2/18 | Justin Bailey | Sent to minors Rochester-AHL |
| 2/17 | Evander Kane | Suspension Over |
| 2/15 | Evander Kane | Suspended One game by team for rules violation |
| Date | Player | Status |
| 2/22 | Hunter Shinkaruk | Traded for Markus Granlund |
| 2/19 | Tyler Wotherspoon | Called up from minors from Stockton-AHL |
| 2/18 | Ladislav Smid | Placed on IR Upper-body injury |
| Date | Player | Status |
| 2/17 | Daniel Altshuller | Sent to minors Florida-ECHL |
| 2/16 | Daniel Altshuller | Called up from minors from Charlotte-AHL |
| Date | Player | Status |
| 2/22 | Vincent Hinostroza | Sent to minors Rockford-AHL |
| 2/17 | Rob Scuderi | Sent to minors Rockford-AHL |
| Date | Player | Status |
| 2/23 | Andreas Martinsen | Sent to minors San Antonio-AHL |
| 2/21 | Shawn Matthias | Traded for Colin Smith, 2016 4th-rd pick |
| 2/18 | Nate Guenin | Sent to minors San Antonio-AHL |
| 2/18 | Reto Berra | Sent to minors San Antonio-AHL for conditioning stint |
| Date | Player | Status |
| 2/15 | Anton Forsberg | Sent to minors Lake Erie-AHL |
| Date | Player | Status |
| 2/17 | Curtis McKenzie | Sent to minors Texas-AHL |
| Date | Player | Status |
| 2/23 | Jakub Kindl | Sent to minors Grand Rapids-AHL |
| Date | Player | Status |
| 2/21 | Jordan Oesterle | Called up from minors from Bakersfield-AHL |
| 2/21 | Nikita Nikitin | Sent to minors Bakersfield-AHL |
| 2/17 | Nikita Nikitin | Called up from minors from Bakersfield-AHL |
| 2/17 | Anders Nilsson | Called up from minors from Bakersfield-AHL |
| 2/17 | Laurent Brossoit | Sent to minors Bakersfield-AHL |
| 2/17 | Eric Gryba | Placed on IR Knee |
| Date | Player | Status |
| 2/19 | Michael Matheson | Called up from minors from Portland-AHL |
| 2/19 | Kyle Rau | Called up from minors from Portland-AHL |
| 2/19 | Brent Regner | Sent to minors Portland-AHL |
| 2/19 | John McFarland | Sent to minors Portland-AHL |
| Date | Player | Status |
| 2/20 | Michael Mersch | Called up from minors from Ontario-AHL |
| 2/17 | Peter Budaj | Sent to minors Ontario-AHL |
| Date | Player | Status |
| No Recent Transactions for this team |
| Date | Player | Status |
| No Recent Transactions for this team |
| Date | Player | Status |
| 2/23 | Victor Bartley | Called up from minors from St. John's-AHL |
| 2/20 | Tom Gilbert | Placed on IR Left knee surgery |
| 2/16 | David Desharnais | Placed on IR Broken foot |
| Date | Player | Status |
| 2/22 | Colton Sissons | Contract extended Three-year contract extension |
| 2/21 | Gabriel Bourque | Called up from minors from Milwaukee-AHL |
| 2/17 | Gabriel Bourque | Sent to minors Milwaukee-AHL |
| Date | Player | Status |
| No Recent Transactions for this team |
| Date | Player | Status |
| 2/22 | Ryan Pulock | Called up from minors from Bridgeport-AHL |
| 2/16 | Calvin de Haan | Placed on IR Lower-body injury |
| Date | Player | Status |
| 2/23 | Brady Skjei | Called up from minors from Hartford-AHL |
| 2/21 | Marek Hrivik | Called up from minors from Hartford-AHL |
| 2/21 | Daniel Paille | Sent to minors Hartford-AHL |
| Date | Player | Status |
| 2/22 | Dave Dziurzynski | Sent to minors Binghamton-AHL |
| 2/16 | Nick Paul | Called up from minors from Binghamton-AHL |
| Date | Player | Status |
| No Recent Transactions for this team |
| Date | Player | Status |
| 2/16 | Jordan Weal | Placed on IR Upper-body injury |
| Date | Player | Status |
| 2/22 | Matt Murray | Sent to minors Wilkes-Barre/Scranton-AHL |
| 2/21 | Matt Murray | Called up from minors from Wilkes-Barre/Scanton-AHL |
| 2/21 | David Warsofsky | Sent to minors Wilkes-Barre/Scranton-AHL (conditioning) |
| Date | Player | Status |
| 2/22 | Nick Spaling | Traded w/ R. Polak for R. Torres, two picks |
| 2/22 | Roman Polak | Traded w/ N. Spaling for R. Torres, two picks |
| 2/21 | Barclay Goodrow | Called up from minors from San Jose-AHL |
| 2/20 | Mirco Mueller | Sent to minors San Jose-AHL |
| 2/19 | Tommy Wingels | Placed on IR Undisclosed injury |
| 2/15 | Mirco Mueller | Called up from minors from San Jose-AHL |
| Date | Player | Status |
| 2/23 | Pheonix Copley | Called up from minors from Chicago-AHL |
| 2/23 | Ty Rattie | Called up from minors from Chicago-AHL |
| 2/23 | Brian Elliott | Placed on IR Lower-body injury |
| 2/22 | Jordan Schmaltz | Called up from minors from Chicago-AHL |
| 2/21 | Dmitrij Jaskin | Called up from minors from Chicago-AHL |
| 2/21 | Jordan Binnington | Sent to minors Chicago -AHL |
| 2/21 | Peter Harrold | Sent to minors Chicago-AHL |
| 2/21 | Alexander Steen | Placed on IR Upper-body injury |
| 2/17 | Jordan Binnington | Called up from minors from Chicago-AHL |
| 2/17 | Pheonix Copley | Sent to minors Chicago-AHL |
| 2/17 | Dmitrij Jaskin | Sent to minors Chicago-AHL |
| Date | Player | Status |
| 2/22 | Matt Taormina | Called up from minors from Syracuse-AHL |
| 2/22 | Slater Koekkoek | Sent to minors Syracuse-AHL |
| Date | Player | Status |
| 2/22 | Stuart Percy | Called up from minors from Toronto-AHL |
| 2/22 | Brendan Leipsic | Called up from minors from Toronto-AHL |
| 2/22 | Raffi Torres | Traded w/ two picks for R. Polak, N. Spaling |
| 2/21 | Colin Smith | Traded w/ 2016 4th-rd pick for Shawn Matthias |
| 2/19 | Leo Komarov | Suspended Three games by NHL for elbowing |
| 2/18 | Viktor Loov | Called up from minors from Toronto-AHL |
| 2/16 | Brendan Leipsic | Sent to minors Toronto-AHL |
| Date | Player | Status |
| 2/22 | Alex Friesen | Sent to minors Utica-AHL |
| 2/22 | Markus Granlund | Traded for Hunter Shinkaruk |
| Date | Player | Status |
| 2/23 | Mike Weber | Traded for 2017 3rd Round Draft Pick |
| 2/19 | Taylor Chorney | Contract extended Two-year contract extension |
| Date | Player | Status |
| No Recent Transactions for this team |