Global Internet Usage Trend Analysis

Global Internet Usage Trend Analysis

This map illustrates the magnitudes of internet usage across the world, represented by the percentage of a population that accessed the Internet during the last quarter of 2019.

1. Introduction

1.1. Objectives

This report presents the state of internet accessibility across the world by answering these specific questions:

  1. What are the top five (5) countries with the highest internet use (by population share)? How many people had internet access in those countries in 2019
  2. What are the top five (5) countries with the highest internet use for each of the following regions: Africa Eastern and Southern, Africa Western and Central, Latin America & Caribbean, East Asia & Pacific, South Asia, North America, and European Union? How do we describe these regions’ internet usage over time?
  3. What are the top five (5) countries with the most internet users?
  4. What is the correlation between internet usage (population share) and broadband subscriptions for 2019?

1.2. Libraries & Functions

# Load required packages
library(tidyverse)
library(dplyr)
library(ggplot2)
library(scales)
library(scales) # used for percentage values
library(countrycode) # identify the region of a country

# Create a function for plotting time series in ggplot
plot_series <- function(
    data = NULL,
    x = NULL,
    xlabs = "",
    y = NULL,
    ylabs = "",
    group = NULL,
    title = "",
    title.s = 10,
    by = 10,
    colors = NULL
) {
    
    # Plot
    p <- data %>%
        ggplot(aes(x = !!sym(x), 
                   y = !!sym(y),
                   group = !!sym(group))) + 
        	geom_line(aes(color = !!sym(group)),
                    	  linewidth = 0.65) +
        	geom_point(aes(color = !!sym(group)), 
                           size = 0) +
        	theme(legend.position = "top",
                  legend.justification = -0.12,
                  legend.direction = "horizontal",
                  legend.key.size = unit(0, 'pt'),
                  legend.text = element_text(margin = margin(r = 5, unit = "pt"),
                                             color = "#65707C"),
                  legend.title = element_blank(),
                  legend.key = element_blank(),
                  axis.title = element_text(color = "#65707C",
                                            face = "bold"),
                  axis.text = element_text(color = "#65707C"),
                  axis.line = element_line(colour = "grey",
                                           linewidth = 0.5),
                  panel.grid.major = element_line(color = "grey",
                                                  linetype = "dashed",
                                                  linewidth = 0.25),
                  panel.background = element_blank(),
                  plot.title = element_text(color = "#65707C",
                                            hjust = 0.5,
                                            size = title.s,
                                            face = "bold")
                 ) +
        	labs(x = paste0("\n",xlabs), y = paste0(ylabs,"\n")) +
        	ggtitle(paste0("\n",title,"\n")) +
        	scale_x_continuous(expand = c(0.02, 0),
    						   limits = c(min(data[x]), 2019), 
    						   breaks = seq(min(data[x]), 2019, by = 4)
            ) +
        	scale_y_continuous(expand = c(0, 0),
    						   limits = c(min(data[y]), max(data[y])+4), 
    						   breaks = seq(min(data[y]), max(data[y]+4), by = by)
            ) +
            guides(color = guide_legend(
                       override.aes = list(
                				 shape = 15,
                				 size = 4,
                                 linetype = "blank"
                       )
                   )
            )
    
    if (!is.null(colors)) {
        p <- p + scale_color_manual(values = colors)    
    }

    print(p)
}

# Create a function for plotting bar graphs in ggplot
plot_bar <- function(
    data = NULL,
    group = "",
    xlabs = "",
    num = "",
    ylabs = "",
    title = "",
    title.s = 10
) {
    ggplot(data, aes(y = fct_reorder(!!sym(group), !!sym(num)), x = !!sym(num))) + 
    geom_col(fill = "#6568A0") +
	#coord_flip() +
	geom_text(aes(label = comma_format()(!!sym(num)), y = !!sym(group), x = !!sym(num)),
              hjust = -0.1,
              size = 3.0
    ) +
	theme_minimal() +
	theme(panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          plot.title = element_text(face = "bold", size = title.s)
    ) +
    labs(x = paste0("\n",xlabs), y = paste0(ylabs,"\n")) +
    ggtitle(paste0("\n",title,"\n")) +
	scale_x_continuous(labels = scales::label_number(scale_cut = cut_short_scale()),
                       expand = expansion(mult = c(0.05, 0.30))
    )
}

1.3. Datasets

The following datasets are part of The World Bank’s World Development Indicators (WDI).

# Read data from CSV files
internet <- read_csv('data/internet.csv', show_col_types = FALSE)
people <- read_csv('data/people.csv', show_col_types = FALSE)
broadband <- read_csv('data/broadband.csv', show_col_types = FALSE)

1.3.1. Internet

VariableDescription
EntityName of the country, region, or group
CodeUnique id for the country (null for other entities)
YearYear from 1990 to 2019
Internet_UsageShare of the entity’s population who have used the internet in the last three months
# View the 'internet' dataset
head(internet)
tail(internet)
EntityCodeYearInternet_Usage
AfghanistanAFG19900
AfghanistanAFG19910
AfghanistanAFG19920
AfghanistanAFG19930
AfghanistanAFG19940
AfghanistanAFG19950
EntityCodeYearInternet_Usage
ZimbabweZWE201212.00000
ZimbabweZWE201315.50000
ZimbabweZWE201416.36474
ZimbabweZWE201522.74282
ZimbabweZWE201623.11999
ZimbabweZWE201727.05549

1.3.2. People

VariableDescription
EntityName of the country, region, or group
CodeUnique id for the country (null for other entities)
YearYear from 1990 to 2020
UsersNumber of people who have used the internet in the last three months for that country, region, or group
# View the 'people' dataset
head(people)
tail(people)
EntityCodeYearUsers
AfghanistanAFG19900
AfghanistanAFG19910
AfghanistanAFG19920
AfghanistanAFG19930
AfghanistanAFG19940
AfghanistanAFG19950
EntityCodeYearUsers
ZimbabweZWE20153219232
ZimbabweZWE20163341464
ZimbabweZWE20173599269
ZimbabweZWE20183763048
ZimbabweZWE20193854006
ZimbabweZWE20204591211

1.3.3. Broadband

VariableDescription
EntityName of the country, region, or group
CodeUnique id for the country (null for other entities)
YearYear from 1998 to 2020
Broadband_SubscriptionsNumber of fixed subscriptions to high-speed internet at downstream speeds >= 256 kbit/s for that country, region, or group
# View the 'broadband' dataset
head(broadband)
tail(broadband)
EntityCodeYearBroadband_Subscriptions
AfghanistanAFG20040.000808843
AfghanistanAFG20050.000857557
AfghanistanAFG20060.001891571
AfghanistanAFG20070.001844982
AfghanistanAFG20080.001803604
AfghanistanAFG20090.003521770
EntityCodeYearBroadband_Subscriptions
ZimbabweZWE20151.187053
ZimbabweZWE20161.217633
ZimbabweZWE20171.315694
ZimbabweZWE20181.406322
ZimbabweZWE20191.395818
ZimbabweZWE20201.368916

2. Results and Discussion

2.1. Countries with the Highest Internet Use by Population Share

Based on the most recent 2019 data, four of the top five countries with the highest internet usage by population share are located in the Middle East. These countries are Bahrain, Qatar, Kuwait, and the United Arab Emirates (UAE).

# Top 5 countries with the highest internet use by population share
top_five_internet_use <- internet %>%
    group_by(Entity) %>% 
	filter(Year == 2019) %>%
    arrange(desc(Internet_Usage)) %>%
    ungroup() %>%
    top_n(5, Internet_Usage) %>%
	mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
	select(c("Entity", "Internet_Usage")) %>%
	rename(Country = Entity)
CountryInternet_Usage
Bahrain99.70%
Qatar99.65%
Kuwait99.54%
United Arab Emirates99.15%
Denmark98.05%
# Top 5 countries with the highest internet use by population share
top_five_internet_use <- internet %>%
    group_by(Entity) %>% 
	filter(Year == 2019) %>%
    arrange(desc(Internet_Usage)) %>%
    ungroup() %>%
    top_n(5, Internet_Usage) %>%
	mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
	select(c("Entity", "Internet_Usage")) %>%
	rename(Country = Entity)

# Subset data for plot
plotData_top_five_internet_use <- internet %>% filter(Entity %in% top_five_internet_use$Country)

# Plot time series
plot_series(
    data = plotData_top_five_internet_use,
    x = "Year",
    xlabs = "Year",
    y = "Internet_Usage",
    ylabs = "Internet Usage (%)",
    group = "Entity",
    title = "Internet Usage Trends in Top Countries, 2019",
    title.s = 12,
    colors = c("#443A83", "#31688E", "#21918D", "#35B779", "#8FD744")
)

Internet Usage Trends in Top Countries, 2019

2.2. Top Countries’ Number of Internet Users, 2019

Among these countries, the United Arab Emirates (UAE) had the highest number of internet users in 2019.

# Number of internet users in 2019 of the countries with the highest internet use by population share
top_five_internet_users_2019 <- people %>% 
  filter(Entity %in% top_five_internet_use$Country, Year == 2019) %>%
  arrange(desc(Users)) %>% 
  mutate(Users = comma_format()(Users)) %>%
  select(c("Entity", "Users")) %>%
  rename(Country = Entity, Number_of_Internet_Users = Users)

# Subset data for plot
barData_top_five_internet_users_2019 <- people %>%
  filter(Entity %in% top_five_internet_users_2019$Country, Year == 2019) %>%
  arrange(desc(Users)) %>%
  select(c("Entity", "Users"))

# Plot bar graph
plot_bar(
    data = barData_top_five_internet_users_2019, #NULL,
    group = "Entity",
    xlabs = "Number of Internet Users",
    num = "Users",
    ylabs ="",
    title = "Top Countries by Number of Internet Users, 2019",
    title.s = 12
)

Top Countries by Number of Internet Users, 2019

2.3. Regional Leaders in Internet Usage

  • The countries with the highest internet usage by population share in their respective regions are Seychelles (Africa Eastern and Southern), Cape Verde (Africa Western and Central), Aruba (Latin America & Caribbean), South Korea (East Asia & Pacific), Maldives (South Asia), Bermuda (North America), and Luxembourg (European Union).

  • Notably, these countries are generally not the largest in terms of land area when compared to others.

Note: The 2017 data was used for this comparison because it was the most recent year with the most available country data.

# The 'region' destination (7 Regions as defined in the World Bank Development Indicators) was used for Latin America & Caribbean, East Asia & Pacific, South Asia, and North America.
code_region <- distinct(data.frame( Code = (internet %>% filter(Code != 'null'))$Code, 
               		Region = countrycode((internet %>% filter(Code != 'null'))$Code, 
                  		'wb', 'region')), Code, .keep_all = TRUE) %>% 
				  		filter(Code != 'OWID_WRL') %>%
			     		mutate(Region = ifelse(Code == 'OWID_KOS', 'Europe & Central Asia', Region)) 

# The 'region23' destination (23 Regions as used to be in the World Bank Development Indicators) was used for Africa Eastern and Southern and Africa Western and Central.
code_region23 <- distinct(data.frame(Code = (internet %>% filter(Code != 'null'))$Code, 
                 	Region = countrycode((internet %>% filter(Code != 'null'))$Code, 
                  		'wb', 'region23')), Code, .keep_all = TRUE) %>%
				  		filter(Code != 'OWID_WRL') %>%
			     		mutate(Region = ifelse(Code == 'OWID_KOS', 'Southern Europe', Region)) 

# Join 'Code' from 'internet' to 'code_region' and 'code_region23' tables to identify a country's region
internet_with_region <- merge(internet, code_region, by = 'Code', all = TRUE)
internet_with_region23 <- merge(internet, code_region23, by = 'Code', all = TRUE)

# The country Kosovo was not matched**, so its regions(https://data.worldbank.org/country/XK) was inputted manually. 
# The row with a Code = 'OWID_WRL' for World was excluded in the analysis.
# Since EU codes are incompatible, a different coding approach was used.

2.3.1. Africa Eastern and Southern

# Top five countries
top_five_internet_use_aes <- internet_with_region23 %>%
    group_by(Entity) %>% 
  filter(Year == 2017, Region %in% c('Eastern Africa', 'Southern Africa')) %>%
    arrange(desc(Internet_Usage)) %>%
    ungroup() %>%
    top_n(5, Internet_Usage) %>%
  mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
  select(c("Entity", "Internet_Usage")) %>%
  rename(Country = Entity)
CountryInternet_Usage
Seychelles58.77%
South Africa56.17%
Djibouti55.68%
Mauritius55.40%
Botswana41.41%
# Subset data for plot
plotData_top_five_aes <- internet %>% filter(Entity %in% top_five_internet_use_aes$Country) 

# Plot time series
plot_series(
    data = plotData_top_five_aes,
    x = "Year",
    xlabs = "\nYear",
    y = "Internet_Usage",
    ylabs = "Internet Usage (%)\n",
    group = "Entity",
    title = "Internet Usage Trends in Top East and South African Countries, 2017",
    title.s = 12,
    by = 5,
    colors = c("#443A83", "#31688E", "#21918D", "#35B779", "#8FD744")
)

Internet Usage Trends in Top East and South African Countries, 2017

2.3.2. Africa Western and Central

# Top five countries
top_five_internet_use_awc <- internet_with_region23 %>%
    group_by(Entity) %>% 
  filter(Year == 2017, Region %in% c('Western Africa', 'Middle Africa')) %>%
    arrange(desc(Internet_Usage)) %>%
    ungroup() %>%
    top_n(5, Internet_Usage) %>%
  mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
  select(c("Entity", "Internet_Usage")) %>%
  rename(Country = Entity)
CountryInternet_Usage
Cape Verde57.16%
Gabon50.32%
Cote d'Ivoire43.84%
Ghana37.88%
Sao Tome and Principe29.93%
# Subset data for plot
plotData_top_five_awc <- internet %>% filter(Entity %in% top_five_internet_use_awc$Country) 

# Plot time series
plot_series(
    data = plotData_top_five_awc,
    x = "Year",
    xlabs = "Year",
    y = "Internet_Usage",
    ylabs = "Internet Usage (%)",
    group = "Entity",
    title = "Internet Usage Trends in Top West and Central African Countries, 2017",
    title.s = 12,
    by = 5,
    colors = c("#443A83", "#31688E", "#21918D", "#35B779", "#8FD744")
)

Internet Usage Trends in Top West and Central African Countries, 2017

2.3.3. Latin America & Caribbean

# Top five countries
top_five_internet_use_lac <- internet_with_region %>%
    distinct(Internet_Usage, .keep_all = TRUE) %>%
    group_by(Entity) %>% 
	filter(Year == 2017, Region == 'Latin America & Caribbean') %>%
    arrange(desc(Internet_Usage)) %>%
    ungroup() %>%
    top_n(5, Internet_Usage) %>%
	mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
	select(c("Entity", "Internet_Usage")) %>%
	rename(Country = Entity)
CountryInternet_Usage
Aruba97.17%
Chile82.33%
Barbados81.76%
Cayman Islands81.07%
Saint Kitts and Nevis80.71%
# Subset data for plot
plotData_top_five_lac <- internet %>% filter(Entity %in% top_five_internet_use_lac$Country) 

# Plot time series
plot_series(
    data = plotData_top_five_lac,
    x = "Year",
    xlabs = "Year",
    y = "Internet_Usage",
    ylabs = "Internet Usage (%)",
    group = "Entity",
    title = "Internet Usage Trends in Top Latin American and Caribbean Countries, 2017",
    title.s = 12,
    by = 10,
    colors = c("#443A83", "#31688E", "#21918D", "#35B779", "#8FD744")
)

Internet Usage Trends in Top Latin American and Caribbean Countries, 2017

2.3.4. East Asia & Pacific

# Top five countries
top_five_internet_use_eap <- internet_with_region %>%
    distinct(Internet_Usage, .keep_all = TRUE) %>%
    group_by(Entity) %>% 
  filter(Year == 2017, Region == 'East Asia & Pacific') %>%
    arrange(desc(Internet_Usage)) %>%
    ungroup() %>%
    top_n(5, Internet_Usage) %>%
  mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
  select(c("Entity", "Internet_Usage")) %>%
  rename(Country = Entity)
CountryInternet_Usage
South Korea95.07%
Brunei94.87%
Japan91.73%
New Zealand90.81%
Hong Kong89.42%
# Subset data for plot
plotData_top_five_eap <- internet %>% filter(Entity %in% top_five_internet_use_eap$Country) 

# Plot time series
plot_series(
    data = plotData_top_five_eap,
    x = "Year",
    xlabs = "Year",
    y = "Internet_Usage",
    ylabs = "Internet Usage (%)",
    group = "Entity",
    title = "Internet Usage Trends in Top East Asian and Pacific Countries, 2017",
    title.s = 12,
    by = 10,
    colors = c("#443A83", "#31688E", "#21918D", "#35B779", "#8FD744")
)

Internet Usage Trends in Top East Asian and Pacific Countries, 2017

2.3.5. South Asia

# Top five countries
top_five_internet_use_sa <- internet_with_region %>%
    distinct(Internet_Usage, .keep_all = TRUE) %>%
    group_by(Entity) %>% 
  filter(Year == 2017, Region == 'South Asia') %>%
    arrange(desc(Internet_Usage)) %>%
    ungroup() %>%
    top_n(5, Internet_Usage) %>%
  mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
  select(c("Entity", "Internet_Usage")) %>%
  rename(Country = Entity)
CountryInternet_Usage
Maldives63.19%
Sri Lanka34.11%
Nepal21.40%
Pakistan17.11%
Afghanistan11.45%
# Subset data for plot
plotData_top_five_sa <- internet %>% filter(Entity %in% top_five_internet_use_sa$Country) 

# Plot time series
plot_series(
    data = plotData_top_five_sa,
    x = "Year",
    xlabs = "Year",
    y = "Internet_Usage",
    ylabs = "Internet Usage (%)",
    group = "Entity",
    title = "Internet Usage Trends in Top South Asian Countries, 2017",
    title.s = 12,
    by = 5,
    colors = c("#443A83", "#31688E", "#21918D", "#35B779", "#8FD744")
)

Internet Usage Trends in Top South Asian Countries, 2017

2.3.6. North America

# Top countries
top_internet_use_na <- internet_with_region %>%
    distinct(Internet_Usage, .keep_all = TRUE) %>%
    group_by(Entity) %>% 
  filter(Year == 2017, Region == 'North America') %>%
    arrange(desc(Internet_Usage)) %>%
    ungroup() %>%
    top_n(5, Internet_Usage) %>%
  mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
  select(c("Entity", "Internet_Usage")) %>%
  rename(Country = Entity)
CountryInternet_Usage
Bermuda98.37%
Canada92.70%
United States87.27%
# Subset data for plot
plotData_top_na <- internet %>% filter(Entity %in% top_internet_use_na$Country) 

# Plot time series
plot_series(
    data = plotData_top_na,
    x = "Year",
    xlabs = "Year",
    y = "Internet_Usage",
    ylabs = "Internet Usage (%)",
    group = "Entity",
    title = "Internet Usage Trends in Top North American Countries, 2017",
    title.s = 12,
    by = 10,
    colors = c("#443A83", "#21918D", "#8FD744")
)

Internet Usage Trends in Top North American Countries, 2017

2.3.7. European Union

# EU country codes
EUCodes <- data.frame(
  Code = c('AUT', 'BEL', 'BGR', 'HRV', 'CYP', 'CZE', 'DNK', 'EST', 'FIN', 'FRA', 'DEU', 'GRC', 'HUN',	'IRL', 'ITA', 'LVA', 'LTU', 'LUX', 'MLT', 'NLD', 'POL', 'PRT', 'ROU', 'SVK', 'SVN', 'ESP', 'SWE'),
  Region = replicate(27, 'European Union')
)

# https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=141329
# This list was used for the country codes. As of writing, there are only twenty-seven (27) members (https://european-union.europa.eu/principles-countries-history/country-profiles_en), which means that United Kingdom was excluded from after formally leaving in 2020 (https://www.ema.europa.eu/en/about-us/history-ema/brexit-united-kingdoms-withdrawal-european-union).

# Join 'Code' from the internet and EUCodes tables to identify a country's region 
internet_eu <- merge(internet, EUCodes, by = 'Code', all = TRUE) %>%
  filter(Region == 'European Union')

# Top five countries
top_five_internet_use_eu <- internet_eu %>%
    distinct(Internet_Usage, .keep_all = TRUE) %>%
    group_by(Entity) %>% 
  filter(Year == 2017, Region == 'European Union') %>%
    arrange(desc(Internet_Usage)) %>%
    ungroup() %>%
    top_n(5, Internet_Usage) %>%
  mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
  select(c("Entity", "Internet_Usage")) %>%
  rename(Country = Entity)
CountryInternet_Usage
Luxembourg97.36%
Denmark97.10%
Netherlands93.20%
Sweden93.01%
Estonia88.10%
# Subset data for plot
plotData_top_five_eu <- internet %>% filter(Entity %in% top_five_internet_use_eu$Country) 

# Plot time series
plot_series(
    data = plotData_top_five_eu,
    x = "Year",
    xlabs = "Year",
    y = "Internet_Usage",
    ylabs = "Internet Usage (%)",
    group = "Entity",
    title = "Internet Usage Trends in Top European Union Countries, 2017",
    title.s = 12,
    by = 10,
    colors = c("#443A83", "#31688E", "#21918D", "#35B779", "#8FD744")
)

Internet Usage Trends in Top European Union Countries, 2017

2.4. Internet Usage by Region

# Top five countries per region
highlights <- rbind(
    top_five_internet_use_aes %>% mutate(Region="Africa Eastern and Southern"),
    top_five_internet_use_awc %>% mutate(Region="Africa Western and Central"),
    top_five_internet_use_lac %>% mutate(Region="Latin America & Caribbean"),
    top_five_internet_use_eap %>% mutate(Region="East Asia & Pacific"), 
    top_five_internet_use_sa %>% mutate(Region="South Asia"),
    top_three_internet_use_na %>% mutate(Region="North America"),
    top_five_internet_use_eu %>% mutate(Region="European Union")
)

# Top country per region
top_countries <- highlights %>%
    group_by(Region) %>%
    top_n(1, Internet_Usage)

# Internet usages of regions of interest
internet_regionsOfInterest <- rbind(
    internet_with_region %>% 
      filter(Region %in% c('Latin America & Caribbean', 
                             'East Asia & Pacific', 
                             'South Asia', 
                             'North America')),
    internet_with_region23 %>% 
      filter(Region %in% c('Eastern Africa', 
                             'Southern Africa', 
                             'Western Africa',  
                             'Middle Africa')) %>%
        mutate(Region = ifelse(Region %in% c('Eastern Africa','Southern Africa'),
                                'Africa Eastern and Southern', 'Africa Western and Central')),
    internet_eu
)

# Most recent data for the 'Africa Western and Central' region
most_recent_awc <- internet %>%
  filter(Year == 2015, Entity == 'Africa Western and Central')

# Seven regions' internet usages in 2017
internetUsage_regions <- internet %>%
  filter(Year == 2017, Entity %in% internet_regionsOfInterest$Region) %>%
  bind_rows(most_recent_awc) %>%
  mutate(Internet_Usage = label_percent(accuracy = 0.01)(Internet_Usage/100)) %>%
  select(c("Entity", "Internet_Usage")) %>%
  rename (Region = Entity) %>%
  arrange(desc(Internet_Usage))
RegionInternet_Usage
North America87.83%
European Union78.68%
Latin America & Caribbean62.47%
East Asia & Pacific54.93%
South Asia29.50%
Africa Western and Central25.57%
Africa Eastern and Southern21.28%
# Subset data for plot
plotData_region_internet <- internet %>% filter(Entity %in% internet_regionsOfInterest$Region)

# Plot time series
plot_series(
    data = plotData_region_internet,
    x = "Year",
    xlabs = "Year",
    y = "Internet_Usage",
    ylabs = "Internet Usage (in %)",
    group = "Entity",
    title = "Internet Usage Trends in Seven Global Regions",
    title.s = 13,
    by = 10,
    colors = c("#472D7B", "#3B528B", "#2C728E", "#21918D", "#28AE80", "#72D077", "#ACDC35")
)

Internet Usage Trends in Seven Global Regions

2.5. Countries with the Most Internet Users

Based on the World Population Review, all of these countries are among the top ten most populous nations, with four of them also ranking in the top five (excluding Brazil).

# Top five countries
top_five_internet_users <- people %>%
    group_by(Entity) %>% 
  filter(Year == max(Year), Code != 'null', Entity != 'World') %>%
    arrange(desc(Users)) %>%
    ungroup() %>%
    top_n(5, Users) %>%
  select(c("Entity", "Users"))

# Plot bar graph
plot_bar(
    data = top_five_internet_users,
    group = "Entity",
    xlabs = "Number of Internet Users",
    num = "Users",
    ylabs = "",
    title = "Top Five Countries by Number of Internet Users",
    title.s = 13
)

Top Five Countries by Number of Internet Users

2.6. Relationship Between Internet Usage & Broadband Subscriptions, 2019

  • The correlational analysis revealed a moderately high positive correlation (\(r = 0.56\)) between internet usage and broadband subscriptions in 2019, which is statistically significant at a 0.01 level (\(p = 4.914e^{-07}\)), allowing us to reject the null hypothesis of no correlation.
  • We are at least 99% confident that the true correlation coefficient (\(ρ\)) lies within the range of 0.3730 to 0.7018.
  • This positive relationship is also visually apparent in the scatter plot below.
# Join 'internet' and 'broadband' tables
internet_and_broadband_2019 <- internet %>% 
  inner_join(broadband, by = c("Entity", "Code", "Year")) %>%
    filter(Year == 2019)

# Perform a Pearson correlation test
pearson_corr <- data.frame(
  Correlation_Coefficient = cor.test(internet_and_broadband_2019$Internet_Usage,
                        internet_and_broadband_2019$Broadband_Subscriptions,
                        method = "pearson")$estimate,
  P=cor.test(internet_and_broadband_2019$Internet_Usage,
                     internet_and_broadband_2019$Broadband_Subscriptions,
                     method = "pearson")$p.value,
  CI_Lower=(cor.test(internet_and_broadband_2019$Internet_Usage,
                       internet_and_broadband_2019$Broadband_Subscriptions,
                       method = "pearson")$conf.int)[1],
  CI_Upper=(cor.test(internet_and_broadband_2019$Internet_Usage,
                       internet_and_broadband_2019$Broadband_Subscriptions,
                       method = "pearson")$conf.int)[2]	
)
rownames(pearson_corr) <- "Value"

Correlation_CoefficientPCI_LowerCI_Upper
Value0.55900774.913904e-070.37303230.7017988
# Plot scatter points
scatter_for_corr <- ggplot(internet_and_broadband_2019, aes(x = Internet_Usage, y = Broadband_Subscriptions)) +
  geom_point(color = "#8486B3", size = 2.5) +
    theme(legend.position = "top",
        legend.justification = -0.12,
        legend.direction = "horizontal",
        legend.key.size = unit(0, 'pt'),
        legend.text = element_text(margin = margin(r = 5, unit = "pt"), color = "#65707C"),
        legend.title = element_blank(),
        legend.key = element_blank(),
        axis.title = element_text(color = "#65707C", face = "bold"),
        axis.text = element_text(color = "#65707C"),
        axis.line = element_line(colour = "grey", linewidth = 0.5),
        panel.grid.major = element_line(color = "grey", linetype = "dashed", linewidth = 0.25),
        panel.background = element_blank(),
        plot.title = element_text(color = "#65707C",
                                  hjust = 0.5,
                                  size = 12,
                                  face = "bold")
        ) +
  labs(x = '\nInternet Usage (%)', y = 'Broadband Subscriptions\n') +
  ggtitle("\nInternet Usage vs. Broadband Subscriptions, 2019\n") +
  scale_x_continuous(expand = c(0.00, 0),
                       limits = c(0, 110), 
                       breaks = seq(0, 100, by = 20)) +
  scale_y_continuous(expand = c(0.00, 0),
                       limits = c(0, 50),
                       breaks = seq(0, 50, by = 5))

Internet Usage vs. Broadband Subscriptions, 2019

3. Conclusion

Based on the data and results of the analyses, the following conclusions can be drawn about the global state of internet accessibility:

  • The highest internet usage by population share worldwide is concentrated in several Middle Eastern countries.
  • Western regions experienced a significantly quicker growth in internet accessibility compared to their eastern counterparts.
  • The countries with the highest internet usage within a region are not necessarily those with the largest land areas.
  • Conversely, the most populous countries tend to have the greatest total number of internet users.

  • In 2019, countries with a higher percentage of internet users in their population also had a corresponding increase in fixed broadband subscriptions (at downstream speeds of 256 kbit/s or more).