CHƯƠNG 1 TỔNG QUAN VỀ Ô NHIỄM KHÔNG KHÍ
4.6 Môi trường phát triển và thực thi
Bảng 4.2, 4.3 mô tả các thành phần của môi trường phát triển và thực thì gồm các thành phần là phần cứng, phần mềm, hạ tầng mạng, cơ sở dữ liệu. Các tài nguyên này được cài đặt và thiết lập trên máy tính cá nhân và máy chủ thuộc trung tâm công nghệ tích hợp liên ngành và giám sát hiện trường – FIMO thuộc Đại Học Công Nghệ.
Bảng 4.2. Bảng mô tả môi trường phát triển hệ thống EnvPro
STT Tên thành phần Mô tả
1 Hệ điều hành
-Lập trình viên: Microsoft Windows 7, 8.1 (English)
-Máy chủ CSDL: Linux Cent OS 7.0
-Máy chủ ảo chạy ứng dụng: Linux Cent OS 7.0 -Máy chủ thật host các máy ảo: Cent OS 6.5
2
Tầng trung gian bao gồm cơ sở dữ liệu, máy
chủ web
-Hệ quản trị CSDL: PostgreSQL 9.4 -Máy chủ Web: Apache Web Server 2
3 Phần mềm
-R 3.2.3 -PHP 5.5
-PHP Yii2 Framework 2.0 -Microsoft Office 2007 -Adobe Flash Player 10+
4 Phần cứng
-Lập trình viên: Intel Core i5 – M450 2.40 Ghz/4GB RAM.
-Máy chủ CSDL: Intel Xeon 4 core 2.5GHz+/8GB RAM
-Máy chủ ảo chạy ứng dụng: Intel Xeon 4 core 2.5GHz+/8GB
-Máy chủ thật host các máy ảo: Intel Xeon 80 core 2.5GHz+/128GB 5 Ngôn ngữ lập trình và các công cụ phát triển hệ thống Ngôn ngữ phát triển hệ thống: -PHP Script 5.5 -R 3.2.3 -Jquery Công cụ phát triển hệ thống:
-JetBrains PhpStorm 10.0.3, PHP Composer -Yii2 Framework 2.0
-Rstudio 0.98.1103
-Google Chrome 50.0.2661.87
Môi trường thực thi
Bảng 4.3. Bảng mô tả môi trường thực thi hệ thống EnvPro
STT Tên thành phần Mô tả
1 Hệ điều hành
-Máy chủ CSDL: Linux Cent OS 7.0
-Máy chủ ảo chạy ứng dụng: Linux Cent OS 7.0 -Máy chủ thật host các máy ảo: Cent OS 6.5
2 Tầng trung gian -Hệ quản trị CSDL: PostgreSQL 9.4 9.1
-Máy chủ Web: Apache Web Server 2
3 Phần mềm
-R 3.2.3 -PHP 5.5
-PHP Yii2 Framework 2.0 -Microsoft Office 2007 -Adobe Flash Player 10+ -Google Chrome 50.0.2661.87
4 Phần cứng
-Máy chủ CSDL: Intel Xeon 4 core 2.5GHz+/8GB RAM
-Máy chủ ảo chạy ứng dụng: Intel Xeon 4 core -2.5GHz+/8GB
-Máy chủ thật host các máy ảo: Intel Xeon 80 core -2.5GHz+/128GB 5 Đường truyền mạng LAN, Internet -Tốc độ mạng LAN: 1 Gigabit/giây. -Tốc độ mạng Internet: 8 Megabit/giây. 4.7 Xây dựng hệ thống
Công cụ hỗ trợ xử lý dữ liệu quan trắc môi trường được xây dựng với các ngôn ngữ phát triển chính là R, PHP và Jquery. Trong đó R là ngôn ngữ chính được dùng để thao tác với dữ liệu. PHP và Jquery là ngôn ngữ hỗ trợ người dùng các thao tác xử lý và biểu diễn dữ liệu ra màn hình. Nhìn chung với công cụ mà tôi xây dựng, độ khó nằm ở việc xử lý dữ liệu quan trắc dựa vào ngôn ngữ thống kê R. Chính bởi vậy trong phạm vi luận văn này tôi sẽ tập trung vào công tác xử lý dữ liệu quan trắc.
Ngôn ngữ thống kê R
Có thể nói R là một phần mềm sử dụng cho phân tích thống kê và đồ thị. Thật ra, về bản chất, R là ngôn ngữ máy tính đa năng, có thể sử dụng cho nhiều mục tiêu khác nhau, từ tính toán đơn giản, toán học giải trí (recreational mathematics), tính toán ma trận (matrix), đến các phân tích thống kê phức tạp. Vì là một ngôn ngữ, cho nên ta có thể sử dụng R để phát triển thành các phần mềm chuyên môn cho một vấn đề tính toán cá biệt. R là một phần mềm miễn phí, là một phần mềm mã nguồn mở 4, nhưng khả năng xử lý số liệu không thua kém bất cứ một phần mềm phân tích số liệu thương mại đắt tiền hiện hành nào khác. Phần hấp dẫn khác của R, như bản chất mã nguồn mở là người sử dụng có thể tự viết chương trình theo ý của riêng mình một khi đã nắm vững ngôn ngữ R. Các tài liệu tham khảo luôn được cập nhật từ khắp nơi, thuận tiện cho việc tham khảo. R đang tạo nên sức mạnh cho cuộc cách mạng của dữ liệu lớn, đối với bất cứ ai có nhu cầu phân tích dữ liệu nghiêm túc. Từ khoa học và kinh doanh cho đến giải trí và truyền thông xã hội, R là ngôn ngữ dùng để phân tích thống kê trên gần
như mọi lĩnh vực cuộc sống. Với những đặc điểm vừa mô tả R là một công cụ thích hợp, tiện dụng, miễn phí mà có thể sử dụng rộng rãi để phục vụ công tác phát triển và mở rộng nghiên cứu khoa học ở Việt Nam.
Cách thức hoạt động giữa các thành phần.
Nói một cách đơn giản công cụ hỗ trợ xử lý dữ liệu quan trắc môi trường hoạt động với cơ chế như sau:
Dữ liệu đầu vào: Đầu tiên người dùng cần có dữ liệu để xử lý, dữ liệu quan trắc có thể được truy vấn trực tiếp từ cơ sở dữ liệu hoặc thông qua các tệp dữ liệu quan trắc mà người dùng có. Các tệp dữ liệu này cần tuân theo chuẩn cấu trúc và đơn vị đo như đã đề cập trong 3.2. Dựa trên những yêu cầu cụ thể của từng bàn toán phân tích. PHP hỗ trợ thiết kế giao diện cùng các thông tin ứng với các thao tác nghiệp vụ hỗ trợ xử lý dữ liệu quan trắc môi trường. Từ những yêu cầu này PHP đẩy dữ liệu quan trắc cùng những thông tin hỗ trợ xử lý qua R và R sẽ làm nhiệm vụ xử lý. Sau khi xử lý, R trả về dữ liệu theo yêu cầu phân tích. Dữ liệu này sẽ được biểu diễn trực quan qua các biểu đồ mô tả dữ liệu dựa vào Jquery.
Cách thức xử lý dữ liệu thông qua R từ PHP
Từ PHP muốn đẩy dữ liệu qua R xử lý cần chạy hàm exec() trong PHP. Cụ thể câu lệnh được khai báo thông qua lệnh sau:
$fullpath = $pathRexe . " " . $rScript . " " . $csvOrgPath . " " . $getVarSelect . " " . $csvTrainPath . " " . $getMultiVarSelect;
exec($fullpath, $response); Trong đó:
$pathRexe: Trỏ tới tệp C:/Program Files/R/R-3.2.3/bin/Rscript.exe.
Tệp xử lý chính của R
$rScript: Trỏ tới têp mã nguồn R xử lý dữ liệu, ứng với từng
chức năng cụ thể sẽ ứng với các tệp mã nguồn R khác nhau. Ví dụ ../r- files/default-regress.r
Các biến còn lại như $csvOrgPath, $getVarSelect,
$csvTrainPath, $getMultiVarSelect là những biến chứa dữ
$response: Đây là biến chứa dữ liệu được trả về từ R sau quá trình xử lý. Dữ liệ được trả về ở định dạng json
Dữ liệu sau khi được trả về từ R được tiền xử lý thông qua một số câu lệnh PHP và được hiển thị tùy vào yêu cầu đề ra. Dữ liệu được trả về với cấu trúc một mảng dữ liệu lớn chưa nhiều mảng dữ liệu nhỏ. Thông qua một số hàm xử lý trên php như
str_replace, implode, explode dễ dàng có thể trích chọn mảng dữ liệu trả về
mong muốn để thực hiện các bước tiếp theo.
$replace = str_replace("][", "];[", $response); $arrtoString = implode("", $replace);
$result_return = explode(';', $arrtoString); $afterHandle = $result_return[1];
4.7.1 Chức năng xử lý dữ liệu nhiễu
4.7.1.1 Khử nhiễu dựa vào khoảng tin cậy
Chức năng khử nhiễu dựa vào khoảng tin cậy được thực hiện dựa vào các thông tin đầu vào bao gồm: Mảng dữ liệu quan trắc cần xử lý (biến csvPath), chỉ tiêu quan trắc cần xử lý (biến varSelect) và khoảng giá trị tin cậy (biến minValue, maxValue). Mã nguồn thực hiện loại nhiễu dựa trên khoảng tin cậy được thực với quy trình như sau:
1. Từ PHP truyền vào mảng dữ liệu, chỉ tiêu quan trắc cần xử lý và khoảng dữ liệu tin cậy
2. Loại bỏ những giá trị nằm ngoài khoảng tin cậy 3. Chuyển đổi dữ liệu sang Json và trả về cho PHP Mã nguồn quy trình xử lý được viết trên R
x <- read.csv(csvPath,header=TRUE)
//x là biến lưu trữ mảng dữ liệu cần xử lý từ PHP DataHand=x[,c("Time",varSelect)]
//DataHand là biến trích chọn các trường Time và varSelect (PM10) từ x để xử lý (thu hẹp mảng dữ liệu)
DataHand=sqldf(c(paste("update DataHand set ",varSelect,"=NULL where ",varSelect,"<",minValue," or ",varSelect,">",maxValue,sep=""), "select * from DataHand"))
dựa vào lệnh sql từ thư viện sqldf afterHandle=cat(toJSON(DataHand))
// Dữ liệu sau khi xử lý được chuyển sang định dạng json
4.7.1.2 Phát hiện dữ liệu bất thường dựa vào phân tích tương quan
Chức năng này được xây dựng với hai nhiệm vụ chính đó là phát hiện ra những ngày bất thường từ mảng dữ liệu quan trắc đầu vào và nhiệm vụ thứ hai là cho phép loại bỏ những dữ liệu này ngay trên tệp dữ liệu đó nếu người dùng yêu cầu.
Với chức năng phát hiện dữ liệu bất thường các yêu cầu đầu vào bao gồm mảng dữ liệu quan trắc cần xử lý (csvPath) và chỉ tiêu quan trắc cần xử lý (varSelect). Quy trình xử lý như sau:
1. Từ PHP truyền vào mảng dữ liệu, chỉ tiêu quan trắc cần xử lý
2. Với từng tháng trong bộ dữ liệu. Tính giá trị trung bình cho từng giờ trong tháng đó được dữ liệu trung bình 24h của tháng
3. Tính tương quan 24h của ngày và 24h của tháng. Lọc lại những ngày có hệ số tương quan trong khoảng từ -0.3 đến 0.3
4. Trả về bộ dữ liệu với những ngày có hệ số kém tương quan ở định dạng Json về PHP
Mã nguồn quy trình xử lý được viết trên R
x <- read.csv(csvPath,header=TRUE) //x lưu trữ mảng dữ liệu cần xử lý DataHand=x[,c("Time",varSelect)]
//DataHand thu hẹp mảng dữ liệu x với hai trường Time và chỉ tiêu cần xử lý
Corr= data.frame(corrDayWithMonth = c(), Date = c());
//Khai báo mảng Corr để lưu trữ kết quả tính tương quan NumofMonth=length(split(DataHand,DataHand$Month))
//Lấy tổng số tháng có được trong bộ dữ liệu cần xử lý for(k in 1:NumofMonth){
// Duyệt, xử lý với mỗi tháng perMonth=splitMonth[k]
Monthdb=summaryBy(varSelect~Time, data=perMonth, FUN=c(mean), na.rm=TRUE) //Tính trung bình tháng splitDate=split(perMonth,perMonth$Date) //Tách lấy từng ngày corrDayWithMonth=cor(dataMerge[3:ncol(dataMerge)-1], dataMerge$mean.Month, use="pairwise.complete.obs") Corr <- rbind(Corr,corrDayWithMonth)
//Tính tương quan giữa ngày và tháng, gán kết quả vào mảng Corr }
filterCorr<- subset(Corr, -0.3<Corr$corrDayWithMonth & Corr$corrDayWithMonth < 0.3)
//Lọc lấy những ngày kém tương quan trong khoảng -0.3 đến 0.3 arrFilterCorr=cat(toJSON(filterCorr))
//Trả về PHP dữ liệu kém tương quan phát hiện được dưới dạng json Với chức năng loại bỏ dữ liệu bất thường các yêu cầu đầu vào bao gồm mảng dữ liệu quan trắc cần xử lý (csvPath) và chỉ tiêu quan trắc cần xử lý (varSelect) và danh sách các ngày cần xóa dữ liệu (arrDateDel). Quy trình xử lý như sau:
1. Từ PHP truyền vào mảng dữ liệu, chỉ tiêu quan trắc cần xử lý, danh sách những ngày cần xóa dữ liệu
2. Với từng bản ghi thuộc danh sách ngày cần xóa dữ liệu và ngày quan trắc. So sánh, nếu ngày quan trắc thuộc danh sách ngày cần xóa thì tiến hành gắn dữ liệu là NULL
3. Trả về bộ dữ liệu với những ngày có hệ số kém tương quan ở định dạng Json về PHP
Mã nguồn quy trình xử lý được viết trên R
x <- read.csv(csvPath,header=TRUE) // X lưu trữ mảng dữ liệu cần xử lý DataHand=x[,c("Time",varSelect)]
// DataHand thu hẹp mảng dữ liệu của x với hai trường Time và biến cần xử lý
for(i in 1:length(arrDateDel)) {
DataHand=sqldf(c(paste("update DataHand set ",varSelect,"=NULL where Date = '",arrDateDel[i],"'",sep = ""), "select * from DataHand"))
}
// So sánh ngày quan trắc và ngày cần xóa dữ liệu. Tiến hành gán dữ liệu về NULL thông qua thư viện sqldf
afterHandle=cat(toJSON(DataHand))
//Trả về cho PHP danh ssachs sữ liệu sau khi xử lý ở định dạng json
4.7.2 Chức năng xử lý dữ liệu thiếu
Chức năng xử lý dữ liệu nhiễu được thực hiện với phương pháp hồi quy tuyến tính, vì vậy yêu cầu đầu vào bao gồm mảng dữ liệu quan trắc cần xử lý (csvInput), chỉ tiêu quan trắc cần xử lý (varSelect), tập dữ liệu học (csvTraining) và danh sách các chỉ tiêu quan trắc để xây dựng mô hình hồi quy (varTrainCor). Quy trình xử lý như sau:
1. Từ PHP truyền vào mảng dữ liệu học, mảng dữ liệu cần xử lý, chỉ tiêu quan trắc cần xử lý, danh sách chỉ tiêu để xây dựng mô hình hồi quy 2. Với từng tháng từ bộ dữ liệu csvInput được tách ra, tiến hành tách lấy bộ
dữ liệu có tháng tương ứng từ tập csvTraining.
3. Từ tập dữ liệu được tách từ csvTraining theo tháng. Xây dựng mô hình hồi quy của tháng đó dựa vào danh sách các chỉ tiêu được dùng để xây dựng mô hình hồi quy tuyến tính. Đồng thời lấy mô hình hồi quy nào chạy dự đoán dữ liệu cho chỉ tiêu cần xử lý.
4. Tìm những bản ghi không có dữ liệu và gán dữ liệu được dự đoán từ bước trước sang
5. Trả về bộ dữ liệu sau khi đã gán dữ liệu cho những bản ghi thiếu ở định dạng Json lại cho PHP.
Mã nguồn quy trình xử lý được viết trên R
csvInput<- read.csv(OrgPath,header=TRUE)
// csvInput lưu trữ dữ liệu quan trắc cần xử lý csvTraining<- read.csv(trainPath,header=TRUE)
// csvTraining lưu trữ bộ dữ liệu học funcLM=paste(varSelect,"~",sep="")
funcLM=paste(funcLM,varTrainCor[j],"+",sep="") }
funcLM=substr(funcLM, 1, nchar(funcLM)-1) //Xây dựng hàm hồi quy tuyến tính funcLM df <- data.frame()
//Khai báo mảng df để lưu trữ dữ liệu sang khi điền dữ liệu thiếu
for(i in 1:length(nameMonth)){
// Với mỗi tháng từ tập dữ liệu cần xử lý
splitInput= csvInput[ which(csvInput$MM==nameMonth[i]),]
splitTraining= csvTraining[ which(csvTraining$MM==nameMonth[i]),] //Tách lấy tháng tương ứng từ tập dữ liệu học
regress=lm(funcLM,splitTraining)
//Xây dựng mô hình hồi quy của tháng đó từ tập dữ liệu học splitInput$predict <- predict(regress, newdata=splitInput) //Chạy mô hình hồi quy đó trên tháng tương ứng của bộ dữ liệu cần sử lý để dự báo giá trị thiếu thông qua hàm predict
df=rbind(df,splitInput)
//Gán dữ liệu sau khi điền dữ liệu thiếu vào mảng df }
df=df[ order(df$Time , decreasing = FALSE ),]
df=sqldf(c("update df set varSelect=predict where copyOrg is NULL", "select * from df"))
//Gán những dữ liệu được dự đoán cho những bản ghi thiếu DataHand=df[,c("DateTime","copyOrg")]
afterHandle=cat(toJSON(DataHand)) // Trả về dữ liệu cho PHP
4.8 Kết quả đạt được
Dựa trên những yêu cầu về chức năng cũng như những ràng buộc về thiết kế. Công cụ hỗ trợ xử lý dữ liệu quan trắc môi trường đã được xây dựng. Do thời gian không cho phép, hiện tại công cụ hỗ trợ đã hoàn thiện với hai chức năng chính đó là xử lý dữ liệu nhiễu và xử lý dữ liệu thiếu.
Trong phần này tôi sẽ tiến hành đánh giá công cụ sử dụng dữ liệu thực tế tương ứng với dữ liệu được thực nghiệm tại chương 3 là hai bộ dữ liệu 01/2011 và 01/2012. Các đánh giá dựa trên kết quả được xử lý từ hai chức năng xử lý dữ liệu nhiễu và xử lý dữ liệu thiếu mà tôi xây dựng. Riêng về phần xây dựng cơ sở dữ liệu đồng nhất giữa các trạm quan trắc, do hệ thống vẫn đang được xây dựng nên chưa có những kết quả cụ thể vì vậy tôi chưa thể đưa ra những kết quả thể hiện sự đồng nhất của dữ liệu.
Công cụ hỗ trợ xử lý dữ liệu quan trắc môi trường được xây dựng bao gồm sáu chức năng chính được thiết kế như Hình 4.2
Hình 4.2 Giao diện tổng quan hệ thống
Tại giao diện này người dùng có thể sử dụng các chức năng tùy ý theo nhu cầu phân tích và xử lý dữ liệu. Dữ liệu bước đầu được xử lý thông qua hình thức Import File với định dạng là .CSV. Hình thức truy vấn dữ liệu trực tiếp để lấy và xử lý dữ liệu sẽ được phát triển trong thời gian sắp tới.
4.8.1 Đánh giá kết quả chức năng xử lý dữ liệu nhiễu
Khử nhiễu dựa vào khoảng giá trị tin cậy
Khi người dùng chọn chức năng khử nhiễu theo khoảng giá trị tin cậy, giao diện cho phép người dùng truyền vào tệp dữ liệu quan trắc cần xử lý.
Hình 4.3 Truyền vào tệp dữ liệu 01/2011, hệ thổng hiển thị danh sách các chỉ