CHƯƠNG 1 TỔNG QUAN VỀ Ô NHIỄM KHÔNG KHÍ
4.7 Xây dựng hệ thống
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