Prezentacje zaliczeniowe
2023-01-25
Opis wybranych danych
Emisje według krajów, 2002-2022
Kwantyfikacja źródeł i poziomów emisji
Ten zestaw danych zapewnia dogłębne spojrzenie na globalne emisje CO2 na poziomie kraju w latach 2002-2022, umożliwiając lepsze zrozumienie, w jakim stopniu każdy kraj przyczynia się do globalnego skumulowanego wpływu człowieka na klimat.
Zawiera informacje o emisjach całkowitych, a także z produkcji węgla, ropy naftowej, gazu, cementu i spalania w pochodniach oraz innych źródeł. Dane zawierają również zestawienie emisji CO2 na mieszkańca w podziale na kraje - pokazując, które kraje przodują pod względem poziomu zanieczyszczenia i identyfikując potencjalne obszary, na których należy skoncentrować działania redukujące.
Nazwa kolumny | Opis |
---|---|
Country | Nazwa kraju. (String) |
ISO 3166-1 alpha-3 | Trzyliterowy kod kraju. (String) |
Year | Rok danych. (Integer) |
Total | Suma emisji CO2 dla kraju w danym roku. (Float) |
Coal | Ilość emisji CO2 z węgla dla kraju w danym roku. (Float) |
Oil | Wielkość emisji CO2 z ropy dla kraju w danym roku. (Float) |
Gas | Wielkość emisji CO2 z gazu dla kraju w danym roku. (Float) |
Cement | Wielkość emisji CO2 z produkcji cementu dla kraju w danym roku. (Float) |
Flaring | Wielkość emisji CO2 z operacji spalania na pochodniach dla kraju w danym roku. (Float) |
Other | Wielkość emisji CO2 z innych źródeł dla kraju w danym roku. (Float) |
Per Capita | Wielkość emisji CO2 na mieszkańca dla kraju w danym roku. (Float) |
# Hostowałem dane na Github Gist
= "https://gist.githubusercontent.com/MellKam/36d27fc96249949e38749f47faf276c2/raw/5d9957fd67b6fd731726aa9dbf055d1cff8d4d2b/emissions_by_country.csv" # nolint
DATA_LINK
<- read.csv(DATA_LINK, sep = ",", dec = ".", head = TRUE)
source_data head(source_data)
## Country ISO.3166.1.alpha.3 Year Total Coal Oil Gas Cement Flaring Other
## 1 Afghanistan AFG 1750 0 NA NA NA NA NA NA
## 2 Afghanistan AFG 1751 0 NA NA NA NA NA NA
## 3 Afghanistan AFG 1752 0 NA NA NA NA NA NA
## 4 Afghanistan AFG 1753 0 NA NA NA NA NA NA
## 5 Afghanistan AFG 1754 0 NA NA NA NA NA NA
## 6 Afghanistan AFG 1755 0 NA NA NA NA NA NA
## Per.Capita
## 1 NA
## 2 NA
## 3 NA
## 4 NA
## 5 NA
## 6 NA
Statystyki opisowe z wnioskami
Całkowita liczba krajów
<- length(unique(source_data$Country))
total_countries
sprintf("Total countries: %d", total_countries)
## [1] "Total countries: 232"
Okres czasu
<- min(source_data$Year)
min_year <- max(source_data$Year)
max_year
sprintf(
"Dane są opisane w okresie od %d do %d roku",
min_year,
max_year )
## [1] "Dane są opisane w okresie od 1750 do 2021 roku"
Kwantyl emisji na człowieka dla 2021 r.
<- source_data[
data_2021 $Year == "2021"
source_data& source_data$Country != "Global"
& source_data$Country != "International Transport",
]
quantile(data_2021$Per.Capita, na.rm = TRUE)
## 0% 25% 50% 75% 100%
## 0.0000000 0.7070697 2.7121380 5.6580427 35.5873570
Mediana emisji na człowieka dla 2021 r.
median(data_2021$Per.Capita, na.rm = TRUE)
## [1] 2.712138
Średnia wartość emisji na człowieka dla 2021 r.
mean(data_2021$Per.Capita, na.rm = TRUE)
## [1] 4.395642
Odchylenie standardowe emisji na człowieka dla 2021 r.
sd(data_2021$Per.Capita, na.rm = TRUE)
## [1] 5.357284
Ilustrację danych na wykresach
Emisja w Polsce
# Select data for country Poland
<- source_data[
pol_data $Country == "Poland",
source_data
]
<- smooth.spline(pol_data$Year, pol_data$Total, spar = 0.4)
lo
plot(pol_data$Year, pol_data$Total,
type = "l",
col = "darkblue",
xlab = "Year",
ylab = "Total emission",
# log = "y" # toggle to make logarithmic
)
lines(predict(lo), col = "red", lwd = 2, )
grid(nx = NULL, ny = NULL,
lty = 1, col = "gray", lwd = 1)
Widzimy, że od 2000 roku kwestia ta ustabilizowała się i nie ma tendencji wzrostowej.
Porównanie całkowitej emisji w krajach europejskich
<- function(country_names, df_column) {
compare_lines <- data.frame(
data_frame matrix(ncol = length(unique(source_data$Year)), nrow = 0)
)
for (country_name in country_names) {
<- source_data[
country_data $Country == country_name,
source_data
]
nrow(data_frame) + 1, ] <- t(country_data[df_column])
data_frame[
}
<- rainbow(nrow(data_frame))
col_set
matplot(
unique(source_data$Year),
t(data_frame),
xlab = "Year",
ylab = sprintf("Emissions from %s", df_column),
type = "l",
lty = "solid",
col = col_set,
lwd = 2
)
legend(
"left",
legend = country_names,
lty = c(1, 1),
lwd = c(2.5, 2.5),
col = col_set
)
}
compare_lines(
c(
"Poland",
"Ukraine",
"Germany",
"Italy",
"Portugal"
),"Total"
)
Wykres kołowy dla całkowitego udziału emisji w 2021 r.
<- data_2021[
ordered_data_2021 order(data_2021$Total, decreasing = TRUE),
]
pie(ordered_data_2021$Total, ordered_data_2021$Country)
Top 10 krajów o największej emisji w 2021 roku
<- source_data[
data_2021 $Year == 2021
source_data& source_data$Country != "Global"
& source_data$Country != "International Transport",
]
<- ordered_data_2021[1:10, ]
largest_data_2021
barplot(
$Total,
largest_data_2021names.arg = largest_data_2021$Country,
col = "darkred",
ylab = "Total emission",
xlab = "Country name",
font.lab = 2,
panel.first = {
axis(
2,
tck = 1,
col.ticks = "light gray",
lwd.ticks = "1",
at = seq(0, 1, by = 0.06),
labels = FALSE
)box()
} )
Porównanie emisji w czasie w tych krajach (Total)
compare_lines(unique(largest_data_2021$Country), "Total")
Porównanie emisji w czasie w tych krajach (Gas)
compare_lines(unique(largest_data_2021$Country), "Gas")
Porównanie emisji w czasie w tych krajach (Oil)
compare_lines(unique(largest_data_2021$Country), "Oil")
Porównanie emisji w czasie w tych krajach (Coal)
compare_lines(unique(largest_data_2021$Country), "Coal")
Porównanie emisji w czasie w tych krajach (Cement)
compare_lines(unique(largest_data_2021$Country), "Cement")
Widzimy, że w ostatnim czasie emisje w Chinach znacznie wzrosły, zwłaszcza z produkcji węgla i cementu. Emisja CO2 szybko rośnie również w Indiach.
Przedział ufności dla średniej
<- function(vector) {
get_confidence_interval <- length(vector)
n <- mean(vector)
m <- sd(vector)
s
<- 1 - 0.98
alfa <- qt(1 - alfa / 2, n - 1)
e <- e * s / sqrt(n)
E
return(m + c(-E, +E))
}
get_confidence_interval(data_2021$Total)
## [1] 24.85679 289.07452
get_confidence_interval(data_2021$Per.Capita)
## [1] 3.568072 5.223213
Minimalną liczebność próby dla średniej
<- length(data_2021$Per.Capita)
n <- sd(data_2021$Per.Capita, na.rm = TRUE)
sigma
# Wartość przyjętego błędu :
<- 1.2
d # Kwantyl rozkładu Normalego :
<- 0.05
alfa
<- qnorm(1 - alfa)
e # Wyznaczona liczebność :
print(licz <- e^2 * sigma^2 / d^2)
## [1] 53.92391
print(n)
## [1] 230
Testowanie hipotezy o wartości średniej
# Definiujemy hipotezę zerową i alternatywną
<- "Średnia populacji jest większa niż 4.5"
H0 <- "Średnia populacji jest mniejsza niż 4.5"
H1
# Przeprowadzamy jednorodny test t
<- t.test(
result $Per.Capita,
data_2021mu = 4.5,
alternative = "less",
var.equal = TRUE
)
print(result)
##
## One Sample t-test
##
## data: data_2021$Per.Capita
## t = -0.29542, df = 229, p-value = 0.384
## alternative hypothesis: true mean is less than 4.5
## 95 percent confidence interval:
## -Inf 4.979045
## sample estimates:
## mean of x
## 4.395642
# Pobieramy wartość p
<- result$p.value
p_value
# Sprawdzamy czy wartość p jest mniejsza od poziomu istotności
if (p_value < 0.05) {
print(
paste(
"Odrzucamy hipotezę zerową",
H0,"ponieważ wartość p jest",
p_value
)
)else{
}print(
paste(
"Nie jesteśmy w stanie odrzucić hipotezy zerowej",
H0,"ponieważ wartość p jest",
p_value
)
) }
## [1] "Nie jesteśmy w stanie odrzucić hipotezy zerowej Średnia populacji jest większa niż 4.5 ponieważ wartość p jest 0.38396952108341"
Testowanie hipotezy o normalności rozkładu
# H0: dane mają rozkład normalny
# H1: dane nie mają rozkłady normalnego
<- shapiro.test(data_2021$Total)
result
print(result)
##
## Shapiro-Wilk normality test
##
## data: data_2021$Total
## W = 0.15625, p-value < 2.2e-16
# W tym przypadku, ponieważ wartość p jest mniejsza niż 0.05,
# można odrzucić hipotezę zerową, że dane mają rozkład normalny
# i stwierdzić, że dane nie mają rozkładu normalnego.
Analiza wariancji
plot.design(as.factor(Total) ~ Per.Capita, data = data_2021, col = "blue")
# H0: średnie wartości dla badanych grup są równe
# H1: średnie wartości dla badanych grup są różne
# Przeprowadzenie ANOVA
<- aov(data_2021$Total ~ data_2021$Per.Capita)
result summary(result)
## Df Sum Sq Mean Sq F value Pr(>F)
## data_2021$Per.Capita 1 3476963 3476963 4.834 0.0289 *
## Residuals 228 164009008 719338
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
P-value 4.834 oznacza, że nie ma wystarczającego dowodu na istnienie różnicy między średnimi wartościami dla badanych grup. Nie ma podstaw do odrzucenia hipotezy zerowej, czyli braku różnicy między grupami.