Dùng VBA tự động phân tích dữ liệu về nhiệt độ của các ngày trong tháng

Một phần của tài liệu Ứng dụng VBA trong excel vào sử lý dữ liệu (Trang 49 - 78)

Bộ dữ liệu cần phân tích là nhiệt độ được ghi nhận từ 0h đến 23h mỗi ngày (https://www.meteoblue.com/en/weather/archive/export/basel_switzerland_2661604). Bộ dữ liệu có dạng như hình 3.19:

Hình 3.19. Dữ liệu nhiệt độ

Các bước thực hiện việc phân tích dữ liệu: - Import dữ liệu vào excel:

o Trong trang tính bất kỳ ví dụ Sheet1 chọn Data trên thanh công cụ rồi chọn Get Data rồi chọn From fil  From text/CSV như trên hình 3.20.

Hình 3.20. Import dữ liệu vào excel từ file CSV

Hình 3.21. Load dữ liệu vào excel

o Một sheet chứa dữ liệu import sẽ được tạo ra ta đổi tên sheet đó thành data_raw

để phục vụ cho việc chạy code VBA như hình 3.18.

- Tạo thêm Sheet dataanalysis để chuẩn bị cho chạy code VBA phân tính dữ liệu về nhiệt độ (những lần chạy sau chỉ cần import dữ liệu và xóa Sheet data_raw cũ đi rồi đổi tên Sheet dữ liệ mới thành data_raw không cần tạo lại Sheet dataanalysis).

- Mở VBA lên và thêm đoạn code VBA để phân tích dữ liệu. Đoạn code VBA sẽ thực hiện các việc sau:

o Copy dữ liệu liên quan đến nhiệt độ và thời gian tương ứng từ Sheet data_raw

xang Sheet data.

o Xử lý dữ liệu: lập bảng dữ liệu nhiệt độ từng ngày theo hàng ngang, mỗi hàng là dữ liệu theo giờ của ngày đó. Tính giá trị trung bình nhiệt độ trong ngày, tìm giá trị nhiệt độ lớn nhất và nhỏ nhất trong ngày. Các việc này được thực hiện và lưu trên Sheet analysis.

o Tạo một Workbooks mới để lưu dữ liệu đã xử lý và dự báo nhiệt độ các ngày tiếp theo.

o Dùng forecast của Excel để dự báo nhiệt độ các ngày tiếp theo dựa trên nhiệt độ trung bình (nhiệt độ cao nhất, nhỏ nhất) của mỗi ngày.

Hình 3.22. Lưu đồ thuật toán dự báo nhiệt độ

Thuật toán thực hiện các bước xử lý như sau:

- Đầu tiên ta import dữ liệu vào Excel như đã nói ở trên.

- Sau khi import dữ liệu ta copy dữ liệu bao gồm Year, Month, Day, Hour, Minute, Temperature từ Sheets data_raw xang Sheets data.

- Dùng lặp for để gộp các giá trị Year, Month, Day lại thành một cột date và các giá trị Hour, Minute lại thành một cột time trong Sheets data.

- Copy cột date từ Sheets data xang Sheets analysis. Trong Sheets analysis cột date được xử lý để lọc bỏ các giá trị trùng lặp. Sau đó ta copy cột giờ trong Sheets data xang Sheets analysis, lọc bỏ các giá trị trùng lặp và chuyển thành hàng từ 0h đến 23h

- Tìm vị trí cột Temperature per hour để copy dữ liệu từ cột này trong Sheets data xang Sheets analysis. Ở Sheets analysis dữ liệu nhiệt độ được xếp theo hàng ứng với mỗi ngày. - Cuối cùng trong Sheets analysis ta tính giá trị trung bình nhiệt độ trong ngày, tìm giá trị

nhiệt độ lớn nhất và nhỏ nhất trong ngày. Các giá trị này sau đó sẽ dùng để dự báo nhiệt độ trung bình, nhiệt độ lớn nhất, nhỏ nhất cho các ngày sau. Sau đó tạo một Workbooks để lưu kết quả dự báo đó.

Việc xử lý dữ liệu được thực hiện bằng cách chạy đoạn code VBA ở PL12. Đoạn code này sẽ xử lý dữ liệu và tạo ra một Workbooks lưu kết quả bao gồm (Như hình 3.23):

- Sheets analysis chứa dữ liệu đã xử lý để dễ theo dõi hơn, các giá trị trung bình nhiệt độ, nhiệt độ lớn nhất và nhiệt độ nhỏ nhất của mỗi ngày tương ứng.

- Sheets forecast_T_Average chứa kết quả dự báo nhiệt độ trung bình của các ngày tiếp theo.

- Sheets forecast_T_Max chứa kết quả dự báo nhiệt độ lớn nhất của các ngày tiếp theo. - Sheets forecast_T_Min chứa kết quả dự báo nhiệt độ nhỏ nhất của các ngày tiếp theo.

Hình 3.23. Kết quả dự báo nhiệt độ

Đoạn Sub weather_1() được chạy và xử lý dữ liệu và xuất ra kết quả mong muốn. Trong đó có sử dụng một số đoạn sub và function khác để thực hiện các thao tác sao chép, tính toán, dự báo,… theo mong muốn.

Đoạn sub dùng để dự báo nhiệt độ trong các ngày tiếp theo (ở PL13) và cho ra kết quả như hình 3.22.

Đoạn sub add_workbook (ByVal name_wordbook) dùng để tạo ra một file excel mới chứa kết quả phân tích dữ liệu và đưa ra dự báo về nhiệt độ trong các ngày tiếp theo (ở PL14). Workbooks đó được lưu tại C:\Users\Public\Documents và có dạng như hình 3.24.

Hình 3.24. Workbooks chứa kết quả phân tích và dự báo

Đoạn Sub loc_ngay được sử dụng để xử lý dữ liệu về ngày tháng năm giúp cho việc tạo bảng dữ liệu thuận tiện hơn. Đoạn sub sử dụng tính năng RemoveDuplicates của excel. Sau khi chạy đoạn sub này ta có kết quả như cột date\time (Như trong hình 3.25).

Hình 3.25. Kết quả loại bỏ dupliactes ở cột date

Đoạn Sub CopyCell(ở PL16) cho phép copy dữ liệu từ ô trong Sheets của Workbooks này vào ô trong một Sheets của Workbook khác.

Đoạn Sub CopySheet(ở PL17) cho phép copy dữ liệu từ Sheets của Workbooks này xang Sheets của Workbook khác.

Ngoài các đoạn Sub và function trên một số đoạn sub và function khác cũng được sử dụng ở ví dụ mục 3.6.1 nên không nhắc lại.

Sau khi đoạn code đã chạy xong ta có kết quả dự báo nhiệt độ từ ngày 1/5/2019 đến 17/5/2019 dựa trên bộ dữ kiệu nhiệt độ tháng 4(như hình 3.19). Cụ thể là dự đoán dựa vào trung bình nhiệt độ mỗi ngày, nhiệt độ lớn nhất, nhỏ nhất mỗi ngày. Và ta có kết quả dự đoán như sau:

Hình 3.26. Kết quả dự báo nhiệt độ trung bình

- Kết quả dự đoán dựa trên nhiệt độ lớn nhất trong ngày (Như hình 3.27)

Hình 3.27. Kết quả dự báo nhiệt độ lớn nhất trong ngày.

Hình 3.28. Kết quả dự báo nhiệt độ nhỏ nhất trong ngày

Các kết quả dự báo trên sử dụng hàm FORECAST.ETS trong Excel (PL20).

Từ các kết quả dự báo trên ta so sánh kết quả dự báo với giá trị trong thực tế (Bảng 3.3).

Bảng 3.3. Giá trị nhiệt độ trung bình, nhiệt độ lớn nhất, nhỏ nhất thực tế và dự báo

Date Thực tế Dự báo

T_Average T_Max T_Min T_Average T_Max T_Min

5/1/2019 13.44916667 19.33 5.48 13.04284 16.80159 7.950713 5/2/2019 13.17833333 18.69 9.68 13.18797 16.98759 8.085615 5/3/2019 11.01625 14.51 8.29 13.33311 17.17358 8.220517 5/4/2019 7.000833333 12.2 2.22 13.47825 17.35958 8.355418 5/5/2019 5.07 10.72 -0.62 13.62339 17.54557 8.49032 5/6/2019 7.643333333 12.6 2.09 13.76853 17.73157 8.625222 5/7/2019 10.95916667 16.91 3.9 13.91367 17.91756 8.760124 5/8/2019 11.74291667 13.08 9.96 14.0588 18.10355 8.895026 5/9/2019 11.56458333 14.19 7.83 14.20394 18.28955 9.029928 5/10/2019 12.81208333 17.21 7.16 14.34908 18.47554 9.16483 5/11/2019 13.02916667 15.26 9.28 14.49422 18.66154 9.299732 5/12/2019 10.1725 14.2 5.96 14.63936 18.84753 9.434634 5/13/2019 10.11416667 17.08 1.2 14.78449 19.03353 9.569536

5/14/2019 9.943333333 15.6 2.55 14.92963 19.21952 9.704437 5/15/2019 9.48625 16.02 2.34 15.07477 19.40552 9.839339 5/16/2019 10.5375 16.08 3.62 15.21991 19.59151 9.974241 5/17/2019 13.67833333 18.99 7.64 15.36505 19.7775 10.10914

Từ bảng trên ta thấy kết quả dự báo dựa trên trung bình nhiệt độ trong ngày khá chính xác trong một vài ngày đầu tiên. Các ngày tiếp theo dự báo không còn chính xác nữa. Càng về sau kết quả dự báo càng sai khác nhiều. Các dự báo dựa trên nhiệt độ lớn nhất và nhỏ nhất trong ngày độ chính xác thấp hơn so với dự báo dựa trên trung bình nhiệt độ trong ngày.

Một số hạn chế còn tồn tại khi thực hiện xử lý dữ liệu nhiệt độ là:

o Khi Workbooks lưu kết quả xử lý đang được mở mà ta chạy đoạn code xử lý sẽ gây ra lỗi. Vì vậy cần đóng Workbooks này trước khi thực hiện chạy đoạn code.

o Tên Workbooks lưu kết quả xử lý là cố định vì vậy mỗi lần thực hiện chạy code sẽ ghi đè nội dung mới lên file đã tồn tại.

KẾT LUẬN

Microsoft Excel là một ứng dụng bảng tính khá phổ biến hiện nay, được nhiều người sử dụng để thu thập và phân tích dữ liệu, nâng cao, tạo lập và khai thác cơ sở dữ liệu, phân tích và dự đoán, dự báo kinh tế, vẽ đồ thị, …Người dùng có thể sử dụng bảng tính trong Excel để giải quyết các bài toán kinh tế, kế toán, tài chính và các cơ sở dữ liệu trong quá trình học tập, nghiên cứu cũng như làm việc, phân tích và quản lí dữ liệu sau này.

Excel với nhiều tính năng mới trong phiên bản cập nhật gần đây qua nhiều phiên bản khác nhau xứng đáng giữ vững vị trí phần mềm xử lý dữ liệu hàng đầu thế giới. Những con số vốn đã rất lớn nêu trên, sẽ còn và đang trên đà tăng cao khi mà ngày càng nhiều lĩnh vực trên thế giới của chúng ta được số hoá và dữ liệu hóa. Cơ sở dữ liệu hóa đó giúp cho người dùng dễ dàng tiếp cận, theo dõi, quản lí, phân tích và đánh giá vấn đề đang quan tâm, tìm hiểu trong suốt quá trình nghiên cứu, khảo sát.

Hiện nay có rất nhiều phần mềm phân tích số liệu là một công cụ không thể thiếu đối với các nhà thống kê ở nhiều lĩnh vực như: SAS, SPSS, STATA, R…đặc biệt là phần mềm Excel phù hợp với nhiều đố tượng với tính năng dễ dàng tiếp cận và sử dụng. Phần mềm phân tích chỉ là công cụ hỗ trợ cho việc thực hiện các ước lượng, tính toán nhanh chóng trong quá trình phân tích dữ liệu. Với những tính năng ưu việt trên, Excel đã trở thành một công cụ quản lí và phân tích dữ liệu quan trọng trong mọi lĩnh vực hiện nay. Trên cơ sở cải tiến trong nhiều tính năng, thuận tiện cho người dùng thông qua Office 2003, 2007, 2010, 2013 hay 2016 và phiên bản mới nhất là Excel office 365 cung cấp rất nhiều thông tin quan trọng cho người dùng trong việc tiếp cận các tính năng mới để phân tích, quản lí, theo dõi dữ liệu một cách hiệu quả, thuận tiện.

Ngoài những tính năng cơ bản, Microsoft Excel cho phép người dùng xuất dữ liệu nhờ vào tệp XLS có thể chạy ở nhiều môi trường khác nhau như trên website hoặc một biểu mẫu trực tuyến. Ứng dụng Excel khá phù hợp để thống kê, tài chính, kỹ thuật máy, vật lí, nói chung là các ngành dựa vào phân tích và xử lý dữ liệu. Exel có nhiều tính năng ưu việt và có giao diện rất thân thiện với người sử dụng. Microsoft Excel phù hợp với nhiều đối tượng từ doanh nhân, sinh viên, chuyên gia hay bất kỳ ai muốn thu thập và phân tích dữ liệu.

TÀI LIỆU THAM KHẢO

1. Phân tích dữ liệu

https://vi.m.wikipedia.org/wiki/Ph%C3%A2n_t%C3%ADch_d%E1%BB%AF_li %E1%BB%87u?fbclid=IwAR0R-

EtyaAx4k0yJTNqvKVtgq1sK1Ii3xXAw6F_5A76TXsfNVTEk7PJ-PI4

2. Từ điển Cambridge https://dictionary.cambridge.org/vi/dictionary/english/data

3. Tìm giải pháp cho tài liệu lưu trữ điện tử

https://www.moha.gov.vn/baucu/tin-tuc-su-kien/quy-dinh-moi-ve-tieu-chuan-du-lieu-thong- tin-dau-vao-va-yeu-cau-bao-quan-tai-lieu-luu-tru-dien-tu-40374.html

4. Người dùng tạo ra bao nhiêu dữ liệu mỗi ngày?

https://www.brandsvietnam.com/15513-Nguoi-dung-tao-ra-bao-nhieu-du-lieu-moi-ngay

5. Quản lý, phân tích dữ liệu là yếu tố quan trọng làm nên thành công của startup

https://ictnews.vn/khoi-nghiep/goc-doanh-nghiep/10-loi-khuyen-danh-cho-nhung-nguoi-lan- dau-lam-ceo-119651.ict

6. 16 Tool Quản Lý Và Phân Tích Dữ Liệu Social Media Cho Các Doanh Nghiệp

http://www.uplevo.com/designbox/16-tool-quan-ly-va-phan-tich-du-lieu-social-media-cho- cac-doanh-nghiep

7. Xứ lý số liệu: R, SPSS, Stata, SAS, Minitab, Statgraphics

http://www.lamnghiepvn.info/home/phan-tich-so-lieu-spss-stata

8. 11 Best Big Data Analytics Tools in 2019

https://www.guru99.com/big-data-analytics-tools.html

9. Phần mềm phân tích số liệu

http://nghiencuudinhluong.com/category/phan-mem/

10. Cách lựa chọn phần mềm phân tích số liệu (SPSS, STATA, SAS, R…)

http://phantichsolieuyhoc.com/cach-lua-chon-phan-mem-phan-tich-so-lieu-spss-stata-sas-r/

11. Hướng dẫn sử dụng 13 hàm Excel cơ bản và thường dùng nhất

https://blogchiasekienthuc.com/hoc-office/cach-su-dung-ham-excel-co-ban.html

12. Các tính năng và lợi ích hàng đầu của Excel

https://unitrain.edu.vn/cac-tinh-nang-va-loi-ich-hang-dau-cua-excel/

https://support.office.com/vi-vn/article/c%C3%B3-g%C3%AC-m%E1%BB%9Bi-trong- excel-2019-for-windows-5a201203-1155-4055-82a5-82bf0994631f

14. Các loại dữ liệu trong mẫu dữ liệu Excel for Office 365 Excel 2019 Excel 2016 Excel 2013

https://support.office.com/vi-vn/article/c%C3%A1c-lo%E1%BA%A1i-d%E1%BB%AF-li %E1%BB%87u-trong-m%E1%BA%ABu-d%E1%BB%AF-li%E1%BB%87u-e2388f62- 6122-4e2b-bcad-053e3da9ba90

15. Phân tích dữ liệu nghiên cứu với SPSS

https://sachvui.com/ebook/phan-tich-du-lieu-nghien-cuu-voi-spss-tap-1-hoang-trong-chu- nguyen-mong-ngoc.857.html

PHỤ LỤC

1. Phụ lục 1(PL1): Đoạn code tính toán tìm công thức mối quan hệ giữa độ rọi và điện trở của quang trở.

Sub lux()

Application.ScreenUpdating = False

Dim last_row1 As Long, last_col1 As Long Dim last_row2 As Long, last_col2 As Long Dim i As Long, formula$, formula2$

last_row2 = LastRow("lux_analysis", "Lux_Analysis") 'MsgBox last_row2

last_col2 = LastCol("lux_analysis", "Lux_Analysis") 'MsgBox last_col2

Call ClearSection("lux_analysis", "Lux_Analysis", 1, 1, last_row2, last_col2) last_row1 = LastRow("lux_analysis", "rawData")

'MsgBox last_row1

last_col1 = LastCol("lux_analysis", "rawData") 'MsgBox last_col1

Call CopySection("lux_analysis", "rawData", 1, 1, last_row1, last_col1, "lux_analysis", "Lux_Analysis", 1, 1)

Call add_value("lux_analysis", "Lux_Analysis", 1, 8, "moi quan he giua log(lux) va log(r): log(lux) = m*log(r) + b")

ActivateWorkbook ("lux_analysis") Sheets("Lux_Analysis").Activate

Call add_value("lux_analysis", "Lux_Analysis", 1, 3, "log(r)") Call add_value("lux_analysis", "Lux_Analysis", 1, 4, "log(lux)")

Call add_value("lux_analysis", "Lux_Analysis", 1, 5, "gia tri lux tinh theo cong thuc tim duoc")

Call add_value("lux_analysis", "Lux_Analysis", 1, 6, "sai so tuong doi") Call gop("lux_analysis", "Lux_Analysis", 1, 7, 1, 8)

Call add_value("lux_analysis", "Lux_Analysis", 1, 7, "moi qua he giua log(lux) va log(r): log(lux) = m*log(r) + b")

Call add_value("lux_analysis", "Lux_Analysis", 2, 7, "m") Call add_value("lux_analysis", "Lux_Analysis", 2, 8, "b") Call gop("lux_analysis", "Lux_Analysis", 1, 9, 1, 10)

Call add_value("lux_analysis", "Lux_Analysis", 1, 9, "moi qua he giua lux va r: lux = r^m + 10^b")

Call add_value("lux_analysis", "Lux_Analysis", 2, 9, "m") Call add_value("lux_analysis", "Lux_Analysis", 2, 10, "10^b") For i = 2 To last_row1

formula$ = "=log(" & "A" & Trim(Str(i)) & ")"

Call AddFormula("lux_analysis", "Lux_Analysis", i, 3, formula$) formula$ = "=log(" & "B" & Trim(Str(i)) & ")"

Call AddFormula("lux_analysis", "Lux_Analysis", i, 4, formula$) Next i

'=INDEX(LINEST(D2:D20,C2:C20),1)

formula$ = "=INDEX(LINEST(D2:D" & Trim(Str(last_row1)) & ",C2:C" & Trim(Str(last_row1)) & "),1)"

Call AddFormula("lux_analysis", "Lux_Analysis", 3, 7, formula$) Call AddFormula("lux_analysis", "Lux_Analysis", 3, 9, formula$)

formula$ = "=INDEX(LINEST(D2:D" & Trim(Str(last_row1)) & ",C2:C" & Trim(Str(last_row1)) & "),2)"

Call AddFormula("lux_analysis", "Lux_Analysis", 3, 8, formula$) formula$ = "=10^H3"

Call AddFormula("lux_analysis", "Lux_Analysis", 3, 10, formula$) For i = 2 To last_row1

formula$ = "=A" & Trim(Str(i)) & "^G3*J3"

Call AddFormula("lux_analysis", "Lux_Analysis", i, 5, formula$)

formula$ = "=Abs(E" & Trim(Str(i)) & "-B" & Trim(Str(i)) & ")/B" & Trim(Str(i)) & "*100"

Call AddFormula("lux_analysis", "Lux_Analysis", i, 6, formula$)

If Cells(i, 6).value < Workbooks("lux_analysis").Sheets("rawData").Cells(2, 4).value Then

Call VBColorCodes("lux_analysis", "Lux_Analysis", vbYellow, i, 6) End If

Next i

Call dinhDang("lux_analysis", "Lux_Analysis", 1, 1, last_row1, 6) Call dinhDang("lux_analysis", "Lux_Analysis", 1, 7, 3, 8)

Call dinhDang("lux_analysis", "Lux_Analysis", 1, 9, 3, 10) End Sub

2. Phụ lục 2(PL2): đoạn code sao chép một vùng từ một Sheets của WorkBooks này xang một Sheets của một WorkBooks khác.

Sub CopySection(ByVal frmwkbook, ByVal frmwksht, ByVal r1, ByVal c1, ByVal r2, ByVal c2, ByVal towkbook, ByVal towksht, ByVal row, ByVal col)

'Select "from" Workbook and Worksheet ActivateWorkbook (frmwkbook)

Worksheets(frmwksht).Select

Range(Cells(r1, c1), Cells(r2, c2)).Select Selection.Copy

'Select "to" Workbook and Worksheet ActivateWorkbook (towkbook) Worksheets(towksht).Select

Range(Cells(row, col), Cells(row, col)).Select ActiveSheet.Paste

End Sub

3. Phụ lục 3(PL3): đoạn code thêm công thức vào một ô bất kỳ trong Excel. Sub AddFormula(wkbook, wksht, row, col, formula$)

'Subroutine adds formula$ to the specified cell in a Worksheet ActivateWorkbook (wkbook)

'Ensure formula starts with "=" ! If Left(formula$, 1) <> "=" Then formula$ = "=" & formula$ End If

Range(Cells(row, col), Cells(row, col)).Select ActiveCell.formula = formula$

End Sub

4. Phụ lục 4(PL4): đoạn code điền nội dung vào một ô bất kỳ.

Sub add_value(ByVal wkbook, ByVal wksheet, ByVal r, ByVal c, value) ActivateWorkbook (wkbook)

Worksheets(wksheet).Select Cells(r, c).value = value End Sub

5. Phụ lục 5(PL5): hàm xác định hàng cuối cùng của vùng dữ liệu. Function LastRow(Workbook, Worksheet) As Long

'This function will return the last ROW in the Worksheet of Workbook On Error GoTo Fix_it:

ActivateWorkbook (Workbook) Sheets(Worksheet).Activate Workbooks(Workbook).Worksheets(Worksheet).Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Activate LastRow = FindRow(Selection.Address(ReferenceStyle:=xlR1C1)) Exit Function Fix_it:

'Debug.Print "Error Description: "; Error; " - Error Code: "; LastRow = 0

End Function

6. Phụ lục 6(PL6): hàm xác định cột cuối cùng của vùng dữ liệu. Function LastCol(Workbook, Worksheet) As Long

'This function will return the last COLUMN in the Worksheet of Workbook On Error GoTo Fix_it:

ActivateWorkbook (Workbook) Sheets(Worksheet).Activate Workbooks(Workbook).Worksheets(Worksheet).Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Activate LastCol = FindCol(Selection.Address(ReferenceStyle:=xlR1C1)) Exit Function Fix_it:

'Debug.Print "Error Description: "; Error; " - Error Code: "; LastCol = 0

End Function

7. Phụ lục 7(PL7): hàm trả về giá trị số nguyên là vị trí hàng của một ô bất kỳ. Function FindRow(addr$) As Integer

'Pass Current Address in "R1C1" Format to this Function and it will Return the Row Number Dim i As Integer

Dim strt As Integer, noc As Integer For i = 1 To Len(addr$) If Mid$(addr$, i, 1) = "R" Then strt = i + 1 End If If Mid$(addr$, i, 1) = "C" Then noc = i - strt End If Next i

FindRow = Val(Mid$(addr$, strt, noc))

Một phần của tài liệu Ứng dụng VBA trong excel vào sử lý dữ liệu (Trang 49 - 78)