This overview is based on the data-set Population aged 16 to under 75 in primary residence households: Germany, years, age groups, private Internet purchases in the last 3 months from the Destatis site. It looks at how many internet purchases were made per age group in Germany, categorising them by product type.
library(tidyverse)
library(readxl)
# Get data-set
df <- read_excel("Destatis internet purchases.xlsx")
# Isolate the desired columns, and remove the rows without data
mask <- c(TRUE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)
df <- df[5:20,mask]
# Convert cells without numeric data into NA
df <- df[2:nrow(df),]
df[df == "-" | df == "/"] <- NA
# Remove rows with only NA values
df <- df[complete.cases(df[, c(2,3,4,5,6)]), ]
# Rename columns
df <- df %>% rename(
Item = "Population aged 16 to under 75 in primary residence\nhouseholds: Germany, years, age groups, private Internet\npurchases in the last 3 months",
"16_25" = ...2,
"25_45" = ...4,
"45_65" = ...6,
"65_75" = ...8,
Total = ...10
)
# Make numbers into numeric data for further operations
df$`16_25` <- as.numeric(df$`16_25`)
df$`25_45` <- as.numeric(df$`25_45`)
df$`45_65` <- as.numeric(df$`45_65`)
df$`65_75` <- as.numeric(df$`65_75`)
df$Total <- as.numeric(df$Total)
# Rearrange into a larger data-set with two columns
# Isolate age groups into separate data-sets
df16 <- df[,c(1,2)]
df25 <- df[,c(1,3)]
df45 <- df[,c(1,4)]
df65 <- df[,c(1,5)]
# Set the equal column names for later concatenation
# Add column identifying the age group
df16$AgeGroup <- "16-u25"
df16 <- df16 %>% rename(Purchases = `16_25`)
df25$AgeGroup <- "25-u45"
df25 <- df25 %>% rename(Purchases = `25_45`)
df45$AgeGroup <- "45-u65"
df45 <- df45 %>% rename(Purchases = `45_65`)
df65$AgeGroup <- "65-u75"
df65 <- df65 %>% rename(Purchases = `65_75`)
# Join data-sets into longer data-set
df_long <- bind_rows(df16,df25,df45,df65)
# Draw the graph
ggplot(
df_long,
aes(
Item,
Purchases,
colour = AgeGroup
)
)+
geom_point(size = 6)+
theme(
axis.text.x = element_text(angle = 10)
)+
labs(
title = "Internet purchases per product and age group in Germany"
)
The graph shows that the 25-45 age group is the one that carries most internet purchases across the age groups surveyed. The gap between them and other groups varies, however. The largest gap, by far, is in movies and music, with digital products included, and the smallest is in subscriptions. However, the grouping of the sets also varies. Under subscription, all age groups have low numbers of purchases, whereas in multimedia (movies and music) the 65-75 age group still makes little purchases while the gaps between each age group is very large.
There is a common trend in the order that age groups are set in for all categories: 25-45 do most internet purchases, followed by 45-65, then 65-75 and finally 16-25. This makes sense, given that teens are more likely not to own a credit or debit card, making it possible that some of those years include people who simply cannot make internet purchases. Younger adults are also likely not to have stable jobs, cutting down their ability to spend money on internet purchases.
Furthermore, the 25-45 and 45-65 age groups also tend to group together far from the other two groups. Accommodation and books and newspapers are the categories where this phenomenon is most extreme. The category of accommodation is likely affected by this because people between 25 and 65 years of age are more likely to be independent. Younger adults and teens are more likely to live with family and older adults are likely to live either with family or in care homes. Media such as newspapers could be indicating the political involvement or interest of middle age adults. It is hard to draw speculations as to the causes behind this, as the content or genre of the books is not specified. It can be speculated, however, that the reading of any type of literature is most popular among middle aged adults.
This links, nevertheless, to a flaw in the data-set: sampling methods and sample sizes are not specified, which draw questions to the comparability of the age groups. The middle aged groups span numerically across a wider portion of a person’s life. There is no justification given as to why the age groups should be of different sizes. This might indicate that there is more people in those age groups, that there is a sample of the same size but more widely spread across a greater number of ages, or that most of the respondents in this age group are concentrated in one or another end of the age range. This calls questions to the validity of the results.
Analysis of Separate Age Groups
Looking at the trends of individual age groups, the graph shows that the products that people across age groups do their online purchases in largely the same products. The only noticeable difference is between Books, newspapers and magazines and Computer software or others, which switch as respondents age. The change, however, follows a predictable trend, with younger generation purchasing more ICT items than older generations.
Moreover, the variance from most bought product to least bought product product gets progressively smaller as age groups become older. This shows an interesting trend where older generations are little but more or less equally interested in buying all of the surveyed product types, and younger generations get progressively more interested in all types but with a faster growth in some types as compared to others.
`16max` <- max(df16$Purchases)
`16min` <- min(df16$Purchases)
`25max` <- max(df25$Purchases)
`25min` <- min(df25$Purchases)
`45max` <- max(df45$Purchases)
`45min` <- min(df45$Purchases)
`65max` <- max(df65$Purchases)
`65min` <- min(df65$Purchases)
# Create a data-frame with the maximum and minimum purchase counts
df_max_min <- data.frame(
AgeGroup = c("16-u25","25-u45","45-u65","65-u75"),
MaxPurchases = c(`16max`,`25max`,`45max`,`65max`),
MinPurchases = c(`16min`,`25min`,`45min`,`65min`)
)
# Calculate the range size between these quantities
df_max_min$Difference = df_max_min$MaxPurchases - df_max_min$MinPurchases
df_max_min <- df_max_min[order(df_max_min$Difference),]
ggplot(
df_max_min,
aes(
AgeGroup,
Difference
)
)+
geom_col()+
labs(
title = "Progression of the Variance between Popularity of Product per Age Group"
)
The graph above confirms that, with the exception of teens and younger
adults, there is a shrinking of the variance between the highest and the
lowest count of internet purchases.
A limitation hereby is that four groups (or three, considering one of them gave an extraneous result) are hardly enough to confidently draw a pattern. It would be necessary to further divide the age groups to ranges of ten or even five years, and see if the trend remains. This might also reveal new trends and changes in the development of online purchasing behaviour in Germany.