## package 'dplyr' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\trngo\AppData\Local\Temp\RtmpyoHx1H\downloaded_packages
## package 'lubridate' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\trngo\AppData\Local\Temp\RtmpyoHx1H\downloaded_packages
## package 'ggplot2' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\trngo\AppData\Local\Temp\RtmpyoHx1H\downloaded_packages
## package 'scales' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\trngo\AppData\Local\Temp\RtmpyoHx1H\downloaded_packages
## package 'knitr' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\trngo\AppData\Local\Temp\RtmpyoHx1H\downloaded_packages
Chúng ta sẽ kiểm tra các thông tin tổng quan như số lượng quan sát, số lượng biến, kiểm tra các giá trị bị thiếu, kiểm tra số quan sát trùng lặp.
## Số lượng quan sát: 278512
## Số lượng biến: 19
# Kiểm tra các giá trị bị thiếu (NA) trên mỗi cột
missing_values <- colSums(is.na(dataUK))
cat("\nSố giá trị thiếu trên mỗi biến:\n")##
## Số giá trị thiếu trên mỗi biến:
# Kiểm tra số lượng quan sát trùng lặp
duplicate_rows <- sum(duplicated(dataUK))
cat(paste("\nSố lượng quan sát bị trùng lặp:", duplicate_rows, "\n"))##
## Số lượng quan sát bị trùng lặp: 0
Thống kê mô tả:
## 'data.frame': 278512 obs. of 19 variables:
## $ settlement_date : chr "01/01/2009 00:00" "01/01/2009 00:30" "01/01/2009 01:00" "01/01/2009 01:30" ...
## $ settlement_period : int 1 2 3 4 5 6 7 8 9 10 ...
## $ period_hour : chr "00:00:00" "00:30:00" "01:00:00" "01:30:00" ...
## $ nd : int 37910 38047 37380 36426 35687 35408 34322 33076 31970 31270 ...
## $ tsd : int 38704 38964 38651 37775 37298 37135 36844 35678 34635 33934 ...
## $ england_wales_demand : int 33939 34072 33615 32526 31877 31604 30486 29390 28452 27842 ...
## $ embedded_wind_generation : int 54 53 53 50 50 43 43 56 56 56 ...
## $ embedded_wind_capacity : int 1403 1403 1403 1403 1403 1403 1403 1403 1403 1403 ...
## $ embedded_solar_generation: int 0 0 0 0 0 0 0 0 0 0 ...
## $ embedded_solar_capacity : int 0 0 0 0 0 0 0 0 0 0 ...
## $ non_bm_stor : int 0 0 0 0 0 0 0 0 0 0 ...
## $ pump_storage_pumping : int 33 157 511 589 851 967 1762 1842 1905 1904 ...
## $ ifa_flow : int 2002 2002 2002 1772 1753 1754 1754 1755 1755 1754 ...
## $ ifa2_flow : int 0 0 0 0 0 0 0 0 0 0 ...
## $ britned_flow : int 0 0 0 0 0 0 0 0 0 0 ...
## $ moyle_flow : int -161 -160 -160 -160 -160 -160 -160 -160 -160 -160 ...
## $ east_west_flow : int 0 0 0 0 0 0 0 0 0 0 ...
## $ nemo_flow : int 0 0 0 0 0 0 0 0 0 0 ...
## $ is_holiday : int 1 1 1 1 1 1 1 1 1 1 ...
## settlement_date settlement_period period_hour nd
## Length:278512 Min. : 1.0 Length:278512 Min. :13367
## Class :character 1st Qu.:12.0 Class :character 1st Qu.:24908
## Mode :character Median :24.0 Mode :character Median :30491
## Mean :24.5 Mean :31187
## 3rd Qu.:36.0 3rd Qu.:36914
## Max. :48.0 Max. :59095
## tsd england_wales_demand embedded_wind_generation
## Min. :16513 Min. : 0 Min. : 0
## 1st Qu.:26608 1st Qu.:22677 1st Qu.: 552
## Median :31800 Median :27753 Median :1018
## Mean :32686 Mean :28390 Mean :1272
## 3rd Qu.:38112 3rd Qu.:33616 3rd Qu.:1729
## Max. :60147 Max. :53325 Max. :5930
## embedded_wind_capacity embedded_solar_generation embedded_solar_capacity
## Min. :1403 Min. : 0.0 Min. : 0
## 1st Qu.:2109 1st Qu.: 0.0 1st Qu.: 2046
## Median :4831 Median : 0.0 Median :11503
## Mean :4454 Mean : 880.2 Mean : 8705
## 3rd Qu.:6527 3rd Qu.: 889.0 3rd Qu.:13080
## Max. :6622 Max. :11224.0 Max. :17197
## non_bm_stor pump_storage_pumping ifa_flow ifa2_flow
## Min. :-24.000 Min. : 0.0 Min. :-2056.0 Min. :-1030
## 1st Qu.: 0.000 1st Qu.: 8.0 1st Qu.: 271.0 1st Qu.: 0
## Median : 0.000 Median : 11.0 Median : 1183.0 Median : 0
## Mean : 6.668 Mean : 304.5 Mean : 926.2 Mean : 54
## 3rd Qu.: 0.000 3rd Qu.: 366.0 3rd Qu.: 1892.0 3rd Qu.: 0
## Max. :893.000 Max. :2019.0 Max. : 2066.0 Max. : 1016
## britned_flow moyle_flow east_west_flow nemo_flow
## Min. :-1215.0 Min. :-505.0 Min. :-585.00 Min. :-1023.0
## 1st Qu.: 0.0 1st Qu.:-303.0 1st Qu.:-209.00 1st Qu.: 0.0
## Median : 726.0 Median :-148.0 Median : 0.00 Median : 0.0
## Mean : 504.1 Mean :-125.1 Mean : -51.11 Mean : 176.3
## 3rd Qu.: 994.0 3rd Qu.: 25.0 3rd Qu.: 0.00 3rd Qu.: 338.0
## Max. : 1143.0 Max. : 499.0 Max. : 504.00 Max. : 1033.0
## is_holiday
## Min. :0.0000
## 1st Qu.:0.0000
## Median :0.0000
## Mean :0.0224
## 3rd Qu.:0.0000
## Max. :1.0000
settlement_date: ngày ghi nhận dữ liệu theo định dạng dd/mm/yy.
settlement_period: chu kỳ nửa giờ cho sản lượng lịch sử đã xảy ra.
nd (National Demand): tổng sản lượng điện được đo đếm, nhưng không bao gồm sản lượng điện cần thiết để đáp ứng tải tại các trạm, bơm tích trữ và xuất khẩu liên kết. Nhu cầu Quốc gia được tính bằng tổng sản lượng điện dựa trên công tơ đo đếm phát điện vận hành của National Grid ESO. Đơn vị đo là MW.
tsd (Transmission System Demand): bằng nd cộng với sản lượng điện bổ sung cần thiết để đáp ứng tải tại các trạm, bơm tích trữ và xuất khẩu liên kết. Đơn vị đo là MW.
england_wales_demand: nhu cầu của Anh và xứ Wales, như ND ở trên nhưng dựa trên cơ sở Anh và xứ Wales. Đơn vị đo là MW.
embedded_wind_generation: ước tính sản lượng điện gió của Vương quốc Anh từ các trang trại gió không lắp đặt công tơ đo đếm Hệ thống Truyền tải. Các trang trại gió này được nhúng trong mạng lưới phân phối và không được ESO của National Grid ESO theo dõi. Tác dụng của chúng là giảm nhu cầu điện trong thời kỳ gió mạnh. Công suất thực tế của các máy phát điện này chưa được biết rõ, do đó, ước tính được đưa ra dựa trên mô hình tốt nhất của National Grid ESO. Được đo bằng MW.
embedded_wind_capacity: đây là góc nhìn tốt nhất của National Grid ESO về công suất điện gió nhúng đã lắp đặt tính bằng GB. Thông tin này dựa trên thông tin công khai được tổng hợp từ nhiều nguồn khác nhau và không phải là góc nhìn chính thức. Nó phù hợp với ước tính sản lượng điện được cung cấp ở trên. Được đo bằng MW.
england_wales_demand: nhu cầu của Anh và xứ Wales, như ND ở trên nhưng dựa trên cơ sở Anh và xứ Wales. Đơn vị đo là MW.
embedded_solar_generation: ước tính sản lượng điện mặt trời của GB từ các tấm pin quang điện. Các tấm pin này được lắp đặt trong lưới điện phân phối và không được National Grid ESO phát hiện. Tác dụng của chúng là giảm nhu cầu điện trong thời kỳ bức xạ mạnh. Công suất thực tế của các máy phát điện này chưa được biết rõ, do đó, ước tính được đưa ra dựa trên mô hình tốt nhất của National Grid ESO. Được đo bằng MW.
embedded_solar_capacity: giống như công suất điện gió nhúng ở trên, nhưng dành cho sản lượng điện mặt trời. Được đo bằng MW.
non_bm_stor (Non-Balancing Mechanism SHort-Term Operating Reserve): dành cho các đơn vị không được bao gồm trong định nghĩa máy phát điện ND. Điều này có thể ở dạng giảm phát điện hoặc giảm nhu cầu. Được đo bằng MW.
pump_storage_pumping: nhu cầu do bơm tại các đơn vị lưu trữ bơm thủy điện; -ve biểu thị tải bơm.
ifa_flow (IFA Interconnector Flow): dòng chảy trên liên kết tương ứng. -ve biểu thị công suất xuất ra từ GB; +ve biểu thị công suất nhập vào GB. Được đo bằng MW.
britned_flow : lưu lượng trên liên kết tương ứng. -ve biểu thị công suất xuất ra từ Vương quốc Anh; +ve biểu thị công suất nhập vào Vương quốc Anh. Được đo bằng MW.
moyle_flow (Moyle Interconnector FLow): dòng chảy trên liên kết tương ứng. -ve biểu thị công suất xuất ra từ GB; +ve biểu thị công suất nhập vào GB. Được đo bằng MW.
east_flow (East West Innterconnector FLow): lưu lượng trên liên kết tương ứng. -ve biểu thị công suất xuất ra từ Vương quốc Anh; +ve biểu thị công suất nhập vào Vương quốc Anh. Được đo bằng MW.
nemo_flow (Nemo Interconnector FLow): lưu lượng trên liên kết tương ứng. -ve biểu thị công suất xuất ra từ Vương quốc Anh; +ve biểu thị công suất nhập vào Vương quốc Anh. Được đo bằng MW.
is_holiday: biến nhị phân (1 = Ngày lễ, 0 = Ngày thường).
Ở đây, nhóm chúng em đã phân tổ dữ liệu theo các tiêu chí sau:
Phân tổ theo mùa: Spring (Mùa Xuân), Summer (Mùa Hạ), Autumn (Mùa Thu), Winter (Mùa Đông).
Phân tổ theo tháng: January (Tháng 1), February (Tháng 2), March (Tháng 3), April (Tháng 4), May (Tháng 5), June (Tháng 6), July (Tháng 7), August (Tháng 8), September (Tháng 9), October (Tháng 10), November (Tháng 11), December (Tháng 12).
Phân tổ theo buổi trong ngày: Morning (Sáng), Afternoon (Chiều), Evening (Tối).
Phân tổ theo nhu cầu: Nhu cầu thấp, Nhu cầu trung bình, Nhu cầu cao.
data_processed <- dataUK %>%
mutate(
settlement_date = dmy_hm(settlement_date),
year = year(settlement_date),
month = month(settlement_date, label = TRUE, abbr = FALSE),
weekday = wday(settlement_date, label = TRUE, abbr = FALSE),
hour = as.numeric(substr(period_hour, 1, 2)),
season = case_when(
month %in% c("December", "January", "February") ~ "Winter",
month %in% c("March", "April", "May") ~ "Spring",
month %in% c("June", "July", "August") ~ "Summer",
month %in% c("September", "October", "November") ~ "Autumn"
),
time_of_day = case_when(
hour >= 5 & hour < 12 ~ "Morning",
hour >= 12 & hour < 17 ~ "Afternoon",
hour >= 17 & hour < 22 ~ "Evening",
TRUE ~ "Night"
),
demand_group = case_when(
england_wales_demand <= 20000 ~ "Nhu cầu thấp",
england_wales_demand > 20000 & england_wales_demand <= 40000 ~ "Nhu cầu trung bình",
england_wales_demand > 40000 ~ "Nhu cầu cao"
)
)
data_processed$season <- factor(data_processed$season,
levels = c("Spring", "Summer", "Autumn", "Winter"))
data_processed$time_of_day <- factor(data_processed$time_of_day,
levels = c("Morning", "Afternoon", "Evening", "Night"))
data_10 <- head(data_processed, 10)
kable(
data_10,
caption = "Bảng 1",
align = "c"
)| settlement_date | settlement_period | period_hour | nd | tsd | england_wales_demand | embedded_wind_generation | embedded_wind_capacity | embedded_solar_generation | embedded_solar_capacity | non_bm_stor | pump_storage_pumping | ifa_flow | ifa2_flow | britned_flow | moyle_flow | east_west_flow | nemo_flow | is_holiday | year | month | weekday | hour | season | time_of_day | demand_group |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2009-01-01 00:00:00 | 1 | 00:00:00 | 37910 | 38704 | 33939 | 54 | 1403 | 0 | 0 | 0 | 33 | 2002 | 0 | 0 | -161 | 0 | 0 | 1 | 2009 | January | Thursday | 0 | Winter | Night | Nhu cầu trung bình |
| 2009-01-01 00:30:00 | 2 | 00:30:00 | 38047 | 38964 | 34072 | 53 | 1403 | 0 | 0 | 0 | 157 | 2002 | 0 | 0 | -160 | 0 | 0 | 1 | 2009 | January | Thursday | 0 | Winter | Night | Nhu cầu trung bình |
| 2009-01-01 01:00:00 | 3 | 01:00:00 | 37380 | 38651 | 33615 | 53 | 1403 | 0 | 0 | 0 | 511 | 2002 | 0 | 0 | -160 | 0 | 0 | 1 | 2009 | January | Thursday | 1 | Winter | Night | Nhu cầu trung bình |
| 2009-01-01 01:30:00 | 4 | 01:30:00 | 36426 | 37775 | 32526 | 50 | 1403 | 0 | 0 | 0 | 589 | 1772 | 0 | 0 | -160 | 0 | 0 | 1 | 2009 | January | Thursday | 1 | Winter | Night | Nhu cầu trung bình |
| 2009-01-01 02:00:00 | 5 | 02:00:00 | 35687 | 37298 | 31877 | 50 | 1403 | 0 | 0 | 0 | 851 | 1753 | 0 | 0 | -160 | 0 | 0 | 1 | 2009 | January | Thursday | 2 | Winter | Night | Nhu cầu trung bình |
| 2009-01-01 02:30:00 | 6 | 02:30:00 | 35408 | 37135 | 31604 | 43 | 1403 | 0 | 0 | 0 | 967 | 1754 | 0 | 0 | -160 | 0 | 0 | 1 | 2009 | January | Thursday | 2 | Winter | Night | Nhu cầu trung bình |
| 2009-01-01 03:00:00 | 7 | 03:00:00 | 34322 | 36844 | 30486 | 43 | 1403 | 0 | 0 | 0 | 1762 | 1754 | 0 | 0 | -160 | 0 | 0 | 1 | 2009 | January | Thursday | 3 | Winter | Night | Nhu cầu trung bình |
| 2009-01-01 03:30:00 | 8 | 03:30:00 | 33076 | 35678 | 29390 | 56 | 1403 | 0 | 0 | 0 | 1842 | 1755 | 0 | 0 | -160 | 0 | 0 | 1 | 2009 | January | Thursday | 3 | Winter | Night | Nhu cầu trung bình |
| 2009-01-01 04:00:00 | 9 | 04:00:00 | 31970 | 34635 | 28452 | 56 | 1403 | 0 | 0 | 0 | 1905 | 1755 | 0 | 0 | -160 | 0 | 0 | 1 | 2009 | January | Thursday | 4 | Winter | Night | Nhu cầu trung bình |
| 2009-01-01 04:30:00 | 10 | 04:30:00 | 31270 | 33934 | 27842 | 56 | 1403 | 0 | 0 | 0 | 1904 | 1754 | 0 | 0 | -160 | 0 | 0 | 1 | 2009 | January | Thursday | 4 | Winter | Night | Nhu cầu trung bình |
Trong phần này, nhóm chúng em sẽ tập trung phân tích 3 biến chính: Nhu cầu quốc gia (nd), Sản lượng điện gió (embedded_wind_genaraion) và Dòng điện liên kết với Pháp (ifa_flow).
data_processed %>%
group_by(year, month) %>%
summarise(avg_nd = mean(nd, na.rm = TRUE)) %>%
mutate(date = make_date(year, month)) %>%
ggplot(aes(x = date, y = avg_nd)) +
geom_line(color = "blue", size = 0.8) +
geom_smooth(method = "loess", se = FALSE, color = "red", linetype = "dashed") +
scale_y_continuous(labels = comma) +
labs(
title = "Xu hướng Nhu cầu Điện trung bình hàng tháng tại Anh (2009 - 2024)",
subtitle = "Đường nét đứt thể hiện xu hướng chung",
x = "Năm",
y = "Nhu cầu điện trung bình (MW)"
) +
theme(
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5)
)=> Nhận xét:
data_processed %>%
ggplot(aes(x = hour, y = nd, color = season)) +
stat_summary(fun = "mean", geom = "line", size = 1.2) +
facet_wrap(~season) +
scale_y_continuous(labels = comma) +
labs(
title = "Chu kỳ Nhu cầu điện trung bình trong ngày theo từng Mùa",
x = "Giờ trong ngày",
y = "Nhu cầu điện trung bình (MW)",
color = "Mùa"
) +
theme_bw() +
theme(legend.position = "none") +
theme(
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5)
)=> Nhận xét:
data_processed %>%
group_by(year) %>%
summarise(avg_wind_gen = mean(embedded_wind_generation, na.rm = TRUE)) %>%
ggplot(aes(x= year, y = avg_wind_gen)) +
geom_col(fill = "green") +
geom_text(aes(label = round(avg_wind_gen)), vjust = -0.5, size = 3) +
scale_y_continuous(labels = comma) +
labs(
title = "Sự tăng trưởng của sản lượng điện gió trung bình tại Anh (2009 - 2024)",
x = "Năm",
y = "Sản lượng điện gió trung bình (MW)"
) +
theme(
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5)
)=> Nhận xét: Biểu đồ cho thấy một sự tăng trưởng vượt bậc trong sản lượng điện từ gió. Sản lượng trung bình đã tăng từ mức rất thấp vào năm 2009 lên mức đáng kể vào những năm gần đây, phản ánh sự đầu tư mạnh mẽ của Anh vào năng lượng tái tạo.
Đường dây IFA là một trong những kết nối quan trọng nhất, cho phép Anh trao đổi điện với Pháp.
data_processed %>%
filter(year >= 2012) %>%
ggplot(aes(x = settlement_date, y = ifa_flow)) +
geom_line(alpha = 0.1, color = "grey") +
geom_smooth(color = "purple", se = FALSE) +
geom_hline(yintercept = 0, linetype = "dashed", color = "red") +
scale_y_continuous(labels = comma) +
labs(
title = "Dòng điện trao đổi với Pháp qua đường dây IFA (2009 - 2024)",
x = "Ngày",
y = "Dòng điện (MW)"
) +
theme(
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5)
)=> Nhận xét:
Qua phân tích sơ bộ, chúng ta có thể rút ra một số kết luận chính: