Bài Tập Lớn XSTK cô Dung khoa Điện

52 3 0
Tài liệu đã được kiểm tra trùng lặp
Bài Tập Lớn XSTK cô Dung khoa Điện

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài tập lớn cô Dung khoa Điện khóa k22, và một số thứ khác ................................................................................................................................t

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINHTRƯỜNG ĐẠI HỌC BÁCH KHOA

Họ và tên thành viên trong nhóm

Tp.HCM, 17/12/2023

Trang 2

Nhận xết của Giáo viên

Trang 3

Mục lục

2.1 Các đặc trưng của dữ liệu 3

2.2 Các phương pháp xử lý dữ liệu với các giá trị bị khuyết 3

2.3 Cơ bản về ước lượng khoảng tin cậy 4

2.3.1 Định nghĩa 4

2.3.2 Cơ bản 4

2.4 ANOVA một yếu tố 5

2.4.1 Định nghĩa: 5

2.4.2 Các bước phân tích ANOVA một yếu tố 5

2.4.3 Phân tích sâu ANOVA một yếu tố 6

2.5 ANOVA hai yếu tố 7

2.6 Hồi quy tuyến tính 8

2.6.1 Giới thiệu mô hình hồi quy tuyến tính đơn 8

2.6.2 Ước lượng hồi quy tuyến tính: 8

3 Tiền xử lí dữ liệu 93.1 Đọc dữ liệu 9

3.2 Xử lý định dạng ban đầu của dữ liệu 11

3.3 Xử lý các giá trị bị khuyết 12

4 Thống Kê Mô Tả (Descriptive Statistics) 184.1 Làm rõ dữ liệu (Data visualization) 18

4.1.1 Tổng quan dữ liệu 18

4.1.2 Thống kê các dữ liệu liên quan đến các kho hàng 19

4.1.3 Thống kê các dữ liệu liên quan đến các mùa 23

4.1.4 Tính thống kê mô tả quan hệ việc khách hàng có yêu cầu giao hàng nhanh so với khách hàng có hài lòngvới vấn đề đơn hàng 27

4.2 Loại bỏ các điểm Outlier (Remove Outlier) 28

Trang 4

Danh sách hình vẽ

1 Biểu đồ tương quan dữ liệu 19

2 Biểu đồ thể số lượng đơn hàng của các kho hàng 21

3 Biểu đồ thể tổng số tiền của các đơn hàng của kho hàng 23

4 Biểu đồ thể số lượng đơn hàng của các mùa 25

5 Biểu đồ thể tổng số tiền của các đơn hàng của mùa 26

6 Biểu đồ thể hiện giao hàng nhanh theo mức độ hài lòng của khách hàng 28

17 Biểu đồ Histogram của Order_price 34

18 Biểu đồ Histogram của Delivery_charges 34

19 Biểu đồ Histogram của Counpon_discount 34

20 Biểu đồ Histogram của Order_total 34

21 Biểu đồ Histogram của Distance_to_nearest_warehouse 35

22 Biểu đồ thể hiện sự khác nhau của trung bình của các biến 42

Trang 5

Phần mở đầu

Hầu hết các hiện tượng trong cuộc sống đều xảy ra một cách ngẫu nhiên không thể đoán biết được Chúng ta luôn đứngtrước những lựa chọn và phải quyết định cho riêng mình Khi lựa chọn như thế thì khả năng thành công là bao nhiêu? Phươngán lựa chọn đã tối ưu chưa? Cơ sở của việc lựa chọn là gì? Khoa học về Xác suất sẽ giúp ta định lượng khả năng thành côngcủa từng phương án để có thể đưa ra quyết định đúng đắn hơn.

Thống kê là khoa học về cách thu thập, xử lý và phân tích dữ liệu về hiện tượng rồi đưa ra kết luận có tính quy luật củahiện tượng đó Phân tích thống kê dựa trên cơ sở của lý thuyết xác suất và có quan hệ chặt chẽ với xác suất Nó không nghiêncứu từng cá thể riêng lẻ mà nghiên cứu một tập hợp cá thể - tính quy luật của toàn bộ tổng thể Từ việc điều tra và phân tíchmẫu đại diện, có thể tạm thời đưa ra kết luận về hiện tượng nghiên cứu nhưng với khả năng xảy ra sai lầm đủ nhỏ để có thểchấp nhận được.

Xác suất thống kê được sử dụng nhiều để giải quyết các bài toán trong khối ngành kỹ thuật nói chung và Điện – Điện tử nóiriêng Với định hướng cải tiến chương trình và nội dung gắn liền thực tiễn, Bài tập lớn môn Xác suất thống kê có vai trò ứngdụng các lý thuyết được học vào chuyên ngành mang tính thực tiễn, ứng dụng.

Với những dữ kiện đề bài cho trước, nhóm 09 chúng em xin thực hiện đề tài Bài tập lớn môn Xác suất thống kê để trình bàycơ sở lý thuyết, cùng những phương pháp, phân tích số liệu thống kê nhằm mục đích có thể khai thác hiệu quả các thông tin,phục vụ công tác nghiên cứu về đề tài được giao.

Trang 6

- nearest_warehouse :Một chuỗi biểu thị tên của kho gần nhất với khách hàng.

- shopping_cart :Danh sách các bộ đại diện cho các mục trong đơn hàng: phần tử đầu tiên của bộ dữ liệu là mục được sắpxếp và phần tử thứ hai là số lượng đặt hàng cho mặt hàng đó.

- order_price : Giá thả nổi biểu thị giá đặt hàng bằng USD Giá đặt hàng là giá của các mặt hàng trước khi có bất kỳ khoảngiảm giá và/hoặc phí giao hàng nào được áp dụng.

- delivery_charges :Một số float thể hiện phí giao hàng của đơn hàng.- customer_lat :Vĩ độ vị trí của khách hàng.

- customer_long :Kinh độ vị trí của khách hàng.

- coupon_discount :Một số nguyên biểu thị phần trăm giảm giá được áp dụng cho đơn_giá.

- order_total :Một số float biểu thị tổng số đơn đặt hàng bằng USD giảm giá và/hoặc phí giao hàng được áp dụng.- season :Một chuỗi biểu thị mùa mà đơn hàng được đặt.

- is_expedited_delivery :Một boolean biểu thị liệu khách hàng có yêu cầu hay không giao hàng nhanh.

- distance_to_nearest_warehouse :Một cái phao biểu thị khoảng cách vòng cung, tính bằng km, giữa khách hàng và khohàng gần nhất với họ.

- latest_customer_review :Một chuỗi thể hiện đánh giá mới nhất của khách hàng về trang web của anh ấy/cô ấy đơn hànggần đây nhất.

- is_happy_customer :Một giá trị boolean biểu thị liệu khách hàng có hài lòng hay không khách hàng hoặc có vấn đề vớiđơn hàng gần đây nhất của họ.

Trang 7

II Kiến thức nền (Cở sở lý thuyết)

1) Các đặc trưng của dữ liệu

Đặc trưng của tổng thể: - Kích thước tổng thể : số lượng các phần tử của tổng thể.

- Trung bình tổng thể (µ): hay còn được gọi là kỳ vọng, cho biết trung bình giá trị của một biến nằm ở mức độ nào so vớingưỡng lớn nhất và nhỏ nhất.

- Phương sai tổng thể (σ2): được tính bằng giá trị trung bình của các bình phương chênh lệch giữa giá trị cụ thể và giá trịtrung bình, thể hiện sự phân tán thống kê của biến đó, hàm ý các giá trị của biến đó thường cách giá trị kỳ vọng bao xa.- Độ lệch chuẩn tổng thể (σ): đo mức độ phân tán thống kê của biến, tương tự phương sai, là giá trị căn bậc hai của phương

- Tỷ lệ tổng thể (ρ): là xác suất lấy được phần tử mang dấu hiệu nghiên cứu từ tổng thể.Đặc trưng của mẫu:

- Trung bình mẫu: (¯x)- Phương sai mẫu: (s2)- Độ lệch chuẩn mẫu: (s)- Tỉ lệ mẫu:ρb

Tương tự với các khái niệm tương ứng của tổng thể.

- Yếu vị (Mode): giá trị có tần suất xuất hiện cao nhất.

- Hệ số biến thiên (CV): đo lường mức độ biến động tương đối của mẫu dữ liệu, được dùng khi người ta muốn so sánh mứcđộ biến động của các mẫu không cùng đơn vị đo.

- Trung vị (Median-Med): là một số tách giữa nửa lớn hơn và nửa bé hơn của một mẫu, một quần thể, hay một phân bốxác suất, là giá trị nằm giữa của một phân bố.

- Tứ phân vị: Giá trị trung vị chia mẫu dữ liệu đã sắp thứ tự thành 2 tập có số phần tử bằng nhau Trung vị của tập dữliệu nhỏ hơn là Q1 (gọi là tứ phân vị dưới) và trung vị của tập dữ liệu lớn hơn là Q3( gọi là tứ phân vị trên) Q2 được lấybằng giá trị trung vị.

- Điểm outlier: còn gọi là điểm dị biệt, điểm ngoại lệ, điểm ngoại lai Đó là các phần tử của mẫu có giá trị nằm ngoàikhoảng (Q1− 1.5 × IQR; Q3+ 1.5 × IQR).

2) Các phương pháp xử lý dữ liệu với các giá trị bị khuyết

Phương pháp 1: Deletion(xoá): phương pháp này được dùng khi khi xác suất thiếu biến là như nhau cho tất cả các quan sát.Phương pháp này được thực hiện bởi 2 cách: List Wise Deletion and Pair Wise Deletion.

- List wise deletion: xóa các quan sát mà bất kỳ biến nào bị thiếu, nhưng phương pháp này có một lỗ hỗng bởi việc xoáquan sát cua bất cứ biến nào bị thiếu này sẽ làm giảm sức mạnh của mô hình vì nó xóa toàn bộ hàng quan sát trong đódữ liệu bị thiếu.

Trang 8

- Pair Wise Deletion: chúng ta sẽ thực hiện phân tích với tất cả các trường hợp có các biến quan tâm Ưu điểm của phươngpháp này là, nó giữ được nhiều trường hợp có sẵn để phân tích Một trong những nhược điểm của phương pháp này, nósử dụng cỡ mẫu khác nhau cho các biến khác nhau.

Phương pháp 2: Mean/ Mode/ Median Imputation: là một phương pháp để điền vào các giá trị còn thiếu với các giá trị ướctính Mục tiêu là sử dụng các mối quan hệ đã biết có thể được xác định trong các giá trị hợp lệ của tập dữ liệu để hỗ trợ ướctính cho các giá trị còn thiếu Mean/ Mode/ Median Imputation là một trong những phương pháp được sử dụng thường xuyênnhất Ta có hai cách sử dụng:

- Generalized Imputation: Trong trường hợp này, ta tính giá trị trung bình hoặc trung vị cho tất cả các giá trị không bịthiếu của biến đó sau đó thay thế giá trị bị thiếu bằng giá trị trung bình hoặc trung vị.

- Similar case Imputation: trong trường hợp này, ta cũng tính các giá trị trung bình nhưng các giá trị này sẽ được tính riênglẻ theo từng đối tượng của các giá trị không bị thiếu, sau đó thay các giá trị trung bình đã được tính theo từng đối tượngtrước đó.

Phương pháp 3: Prediction Model (mô hình dự đoán): tạo mô hình dự đoán để ước tính các giá trị sẽ thay thế dữ liệu bị thiếu.Trong trường hợp này, chia tập dữ liệu của mình thành hai tập: Một tập không có giá trị bị thiếu cho biến và một tập khác cógiá trị bị thiếu Tập dữ liệu đầu tiên trở thành tập dữ liệu huấn luyện của mô hình trong khi tập dữ liệu thứ hai có giá trị bịthiếu là tập dữ liệu thử nghiệm và biến có giá trị bị thiếu được coi là biến mục tiêu Tiếp theo, chúng tôi tạo một mô hình đểdự đoán biến mục tiêu dựa trên các thuộc tính khác của tập dữ liệu huấn luyện và điền các giá trị còn thiếu của tập dữ liệu thửnghiệm.

Phương pháp 4: KNN Imputation: Trong phương pháp này gán giá trị, các giá trị bị thiếu của một thuộc tính được gán bằngcách sử dụng một số thuộc tính đã cho giống nhất với thuộc tính có giá trị bị thiếu Sự giống nhau của hai thuộc tính được xácđịnh bằng cách sử dụng hàm khoảng cách.

3) Cơ bản về ước lượng khoảng tin cậya) Định nghĩa

Ước lượng khoảng tin cậy là phương pháp thống kê được sử dụng để xác định khoảng giá trị có thể chứa giá trị thực của mộttham số dựa trên dữ liệu mẫu.

Ước tính khoảng tin cậy giúp chúng ta biết được độ chắc chắn của thông tin mà chúng ta thu thập và phân tích.

n(Với f là tỉ lệ trên mẫu).

Trang 9

4 Khoảng tin cậy bên trái: (F- ε1; 1) Khoảng tin cậy bên phải: ( 0; F+ ε1)

ε1= Zα

pf(1 − f)√

nTrong đó:

- X là giá trị trung bình của mẫu.- σ là độ lệch chuẩn của tổng thể.- S là độ lệch chuẩn của mẫu.- n là kích thước mẫu.

- zα/2và tα/2(n-1) là giá trị tương ứng từ bảng phân phối chuẩn và bảng phân phối Student.

4) ANOVA một yếu tốa) Định nghĩa:

Phân tích phương sai là một mô hình dùng để xem xét sự biến động của một biến ngẫu nhiên định lượng X chịu tác độngtrực tiếp của một hay nhiều yếu tố nguyên nhân (định tính).

ˆ Dạng 1: Phân tích phương sai 1 yếu tố (One-Way Analysis of Variance)ˆ Dạng 2: Phân tích phương sai 2 yếu tố không lặp.

ˆ Dạng 3: Phân tích phương sai 2 yếu tố có lặp.

Trong bài báo cáo này sử dụng phân tích phương sai một yếu tố.

Trong mô hình phân tích phương sai 1 yếu tố, chúng ta kiểm định so sánh trung bình của biến ngẫu nhiên X ở những tổng thể(còn gọi là nhóm) khác nhau dựa vào các mẫu quan sát lấy từ những tổng thể này Các tổng thể được phân biệt bởi các mức độkhác nhau của yếu tố đang xem xét.

Điều kiện của bài toán ANOVA một yếu tố:- Các tổng thể có phân phối chuẩn N(µi ;σ2

i );i = 1; 2; ; k k là số tổng thể (thông thường k ≥ 3).- Phương sai các tổng thể bằng nhau (σ2= σ2= = σ2

k).- Các mẫu quan sát (từ các tổng thể) được lấy độc lập.

Lưu ý: Nếu giả định tổng thể có phân phối chuẩn với phương sai bằng nhau không đáp ứng được thì bạn có thể dùng kiểm địnhphi tham số Kruskal-Wallis để thay thế cho ANOVA.

b) Các bước phân tích ANOVA một yếu tố

Bước 1: Đưa ra giả thiết kiểm định.- Giả thiết không H0: µ1 = µ2 = = µk

- Giả thiết đối H1: ∃ µi ̸= µj; i ̸= j.

Bước 2: Tính toán giá trị kiểm định thống kê

Trang 10

Các bước tính toán Mẫu k Mẫu gộp

Tổng bình phương chênh lệchgiữa các nhóm (SSB)

j=1nj× (xj− x)2

Tổng bình phương chênh lệchtoàn bộ

RR = (fα(k − 1; N − k); +∞)

- Hê số xác định: R2=SSBSST × 100%

trong mô hình đối với sự biến động của các giá trị của biến ngẫu nhiên X xung quanh giá trị của nó.R2 càng lớn thì mô hình càng thích hợp.

c) Phân tích sâu ANOVA một yếu tố

Khi kết luận bài toán ANOVA sẽ có 2 trường hợp xảy ra:

- Bác bỏ H0, chấp nhận H1 Có nghĩa là trung bình các nhóm không bằng nhau, tuy nhiên ta chẳng biết đó là các nhóm nào.Vì thế phải có phân tích thêm để làm rõ hơn.

Có nhiều phương pháp để tìm được kết quả mong muốn:

- Có thể sử dụng LSD’test để so sánh các cặp trung bình của 2 nhóm khác nhau với các giả thiết tương ứng là:H0: µi= µj;

H1: µi̸= µj; i ̸= j

- Hoặc có thể dùng các khoảng tin cậy (LSD confidence intervals) để ước lượng các chênh lệch của trung bình của 2 nhóm bấtkỳ, từ đó tìm ra các cặp nhóm có trung bình khác biệt.

Trang 11

5) ANOVA hai yếu tố

Phản ánh biến tác động của yếu tố kết quả do ảnh hưởng của tất cả các yếu tố.

SST =

(Xij− ¯X)2

2 Tổng các độ lệch chuẩn bình phương giữa các nhóm (SSK)

Phản ánh biến động của yếu tố kết quả do ảnh hưởng của yếu tố kết quả do ảnh hưởng của yếu tố nguyên nhân thứ nhất(xếp theo cột).

3 Tổng các độ lệch chuẩn bình phương giữa các nhóm (SSH)

Phản ánh biến động của yếu tố kết quả do ảnh hưởng của yếu tố nguyên nhân khác không nghiên cứu.

4 Tổng bình phương các độ lệch bình phương phần dư (ERROR)

Phản ánh do ảnh hưởng của yếu tố nguyên nhân khác không nghiên cứu.SSE = SST − SSK − SSH

Trang 12

F1=M SK

6) Hồi quy tuyến tính

a) Giới thiệu mô hình hồi quy tuyến tính đơn

Định nghĩa hồi quy: Hồi quy (regression) là phương pháp thống kê toán học để ước lượng và kiểm định các quan hệ giữa cácbiến ngẫu nhiên, và có thể từ đó đưa ra các dự báo Các quan hệ ở đây được viết dưới dạng các hàm số hay phương trình.Hàm hồi quy của Y theo X là kỳ vọng có điều kiện của Y đối với X, tức là E(X,Y) Xét hàm hồi quy tuyến tính đơn có dạng:

fy(X) = β1X + β0

Giả sử ta có một mẫu ngẫu nhiên kích thước n thu được khi quan sát (Y,X) là:(Yi, Xi) = (Y1, X1), (Y2, X2), , (Yk, Xk)Khi đó chúng ta có thể viết: fY i(Xi) = E(Yi/Xi) = β1Xi+ β0

Yi = β0 + β1Xi + εỞ đây biến ε là sai số ngẫu nhiên có phân phối chuẩn N(0,σ2)

Các sai số ngẫu nhiên εi là độc lập với nhau, σ2 là hằng số.

b) Ước lượng hồi quy tuyến tính:

Trong thống kê, vấn đề chúng ta muốn đánh giá là các thông tin của tổng thể Tuy nhiên vì tổng thể quá lớn, chúng ta khôngthể có được các thông tin này Vì vậy, chúng ta dùng thông tin của mẫu nghiên cứu để ước lượng hoặc kiểm định thông tin củatổng thể Với hồi quy tuyến tính cũng như vậy, các hệ số hồi quy tổng thể như β1, β2 hay hằng số hồi quy β0 là những thamsố chúng ta muốn biết nhưng không thể đo lường được Do đó, chúng ta sẽ sử dụng tham số tương ứng từ mẫu để ước lượng vàtừ đó suy diễn ra tổng thể Phương trình hồi quy trên mẫu nghiên cứu.

Trang 13

III Tiền xử lí dữ liệu

Các thư viện R sử dụng trong bài

- “dplyr”: là một gói R được thiết kế để cung cấp một bộ công cụ mạnh mẽ và hiệu quả cho việc xử lý và biến đổi dữ liệu Góinày tập trung vào các hoạt động phổ biến trong xử lý dữ liệu, như lọc (filtering), tóm tắt (summarizing), nhóm (grouping),sắp xếp (arranging), và kết hợp (joining) dữ liệu

- “lubridate”: là một gói R giúp xử lý và làm việc với dữ liệu thời gian Nó cung cấp các hàm đơn giản và mạnh mẽ để chuyểnđổi, tạo ra, và thao tác dữ liệu thời gian “lubridate” giúp đơn giản hóa việc làm việc với ngày và giờ, cũng như tính toángiữa các thời điểm

- “geosphere”: là một gói R được thiết kế để thực hiện các phép toán địa lý trên hình cầu Nó cung cấp các hàm để tính toánkhoảng cách giữa các điểm, tính diện tích bề mặt và thể tích của hình cầu, cũng như các tính toán liên quan đến tọa độđịa lý

- “ggplot2”: là một gói R mạnh mẽ cho việc tạo ra đồ thị và biểu đồ Nó sử dụng mô hình "Grammar of Graphics" để tạora các biểu đồ có thể tùy chỉnh linh hoạt “ggplot2” cho phép bạn tạo ra biểu đồ từ dữ liệu khác nhau và điều chỉnh cácthành phần của biểu đồ như màu sắc, kích thước, và hình dạng

- "corrplot": là một gói R được cung cấp một công cụ khám phá trực quan trên ma trận tương quan, hỗ trợ việc sắp xếp lạicác biến tự động để giúp phát hiện các mô hình ẩn giữa các biến "corrplot" rất dễ sử dụng và cung cấp một loạt các tùychọn vẽ phong phú trong phương pháp trực quan hóa, bố cục đồ họa, màu sắc, chú thích, nhãn văn bản,

- "faraway": là một gói R cung cấp các hàm và dữ liệu để hỗ trợ việc học và thực hành các mô hình tuyến tính, mô hìnhtuyến tính mở rộng và hồi quy thực tế và ANOVA.

- "car: là một gói R có chức năng cung cấp các công cụ hỗ trợ cho việc thực hiện và kiểm tra mô hình hồi quy trong R.

4 i n s t a l l p a c k a g e s (" d p l y r ")5 i n s t a l l p a c k a g e s (" g g p l o t 2 ")6 i n s t a l l p a c k a g e s (" l u b r i d a t e ")7 i n s t a l l p a c k a g e s (" g e o s p h e r e ")8 i n s t a l l p a c k a g e s (" r e a d r ")9 i n s t a l l p a c k a g e s (" c o r r p l o t ")10 i n s t a l l p a c k a g e s (" f a r a w a y ")11 i n s t a l l p a c k a g e s (" c a r ")12 # k h a i bao c a c p a c k a g e s

13 l i b r a r y ( f a r a w a y )14 l i b r a r y ( d p l y r )15 l i b r a r y ( g g p l o t 2 )16 l i b r a r y ( g e o s p h e r e )17 l i b r a r y ( r e a d r )18 l i b r a r y ( l u b r i d a t e )

Trang 14

7 cat ( f i l e p a t h ( d i r e c t o r y , f i l e n a m e s ) , " \ n ")

10 d i r _ l i s t < - l i s t d i r s ( r o o t _ d i r , f u l l n a m e s = TRUE , r e c u r s i v e = T R U E )11 for ( d i r e c t o r y in d i r _ l i s t ) {

12 f i l e n a m e s < - l i s t f i l e s ( d i r e c t o r y , f u l l n a m e s = T R U E )13 f i l e _ p a t h ( d i r e c t o r y , f i l e n a m e s )

Sau khi đã có các đường dẫn chứa dữ liệu gốc, chúng ta gán các đường dẫn vào ba biến

"dirty_data_path", "missing_data_path" và "warehouses_path" chứa đường dẫn lần lượt tương ứng nhưsau:

1 # gan c a c duong dan c o t r e n v a o c a c b i e n s a u

2 d i r t y _ d a t a _ p a t h < - "D : / t a i l i e u h o c t a p / x a c s u a t t h o n g k e / b a i t a p l o n / BailamBTL /a r c h i v e / d i r t y _ d a t a c s v "

3 m i s s i n g _ d a t a _ p a t h < - "D : / t a i l i e u h o c t a p / x a c s u a t t h o n g k e / b a i t a p l o n / BailamBTL /a r c h i v e / m i s s i n g _ d a t a c s v "

4 w a r e h o u s e _ p a t h < - "D : / t a i l i e u h o c t a p / x a c s u a t t h o n g k e / b a i t a p l o n / BailamBTL /a r c h i v e / w a r e h o u s e s c s v "

Tiếp đến, chúng ta cần phải gộp dữ liệu của "dirty_data.csv", "missing_data.csv" thành một dữ liệu mớivới tên "new_dirty_data"

1 # t i e n hanh d o c f i l e c s v

2 d i r t y _ d a t a < - r e a d csv ( d i r t y _ d a t a _ p a t h )3 m i s s i n g _ d a t a < - r e a d csv ( m i s s i n g _ d a t a _ p a t h )4 w a r e h o u s e _ d a t a < - r e a d csv ( w a r e h o u s e _ p a t h )

5 n e w _ d i r t y _ d a t a < - r b i n d ( d i r t y _ d a t a , m i s s i n g _ d a t a )

Kết quả của đoạn code

> n r o w ( d i r t y _ d a t a )[1] 500

> n r o w ( m i s s i n g _ d a t a )[1] 500

> n r o w ( n e w _ d i r t y _ d a t a )

Trang 15

[1] 1 0 0 0

> str ( n e w _ d i r t y _ d a t a )

’ d a t a frame ’: 1 0 0 0 obs of 16 v a r i a b l e s :

$ o r d e r _ i d : chr " O R D 1 8 2 4 9 4 " " O R D 3 9 5 5 1 8 " " O R D 4 9 4 4 7 9 " " O R D 0 1 9 2 2 4 "

$ c u s t o m e r _ i d : chr " I D 6 1 9 7 2 1 1 5 9 2 " " I D 0 2 8 2 8 2 5 8 4 9 " " I D 0 5 7 9 3 9 1 8 9 1 " "I D 4 5 4 4 5 6 1 9 0 4 "

$ d a t e : chr " 2 0 1 9 - 0 6 - 2 2 " " 2 0 1 9 - 1 2 - 2 9 " " 2 0 1 9 - 0 3 - 0 2 "" 2 0 1 9 - 0 1 - 1 2 "

$ n e a r e s t _ w a r e h o u s e : chr " T h o m p s o n " " T h o m p s o n " " N i c k o l s o n " " N i c k o l s o n "

iStream ’ , 2) , ( ’ pearTV ’ , 1) ]" "[( ’ T h u n d e r line ’ , 1) , ( ’ U n i v e r s e Note ’ , 2) ]" "[( ’T h u n d e r line ’ , 1) , ( ’ pearTV ’ , 2) ]" "[( ’ U n i v e r s e Note ’ , 1) , ( ’ A l c o n 10 ’ , 2) , ( ’O l i v i a x460 ’ , 1) , ( ’ i A s s i s t Line ’ , 1) ]"

$ l a t e s t _ c u s t o m e r _ r e v i e w : chr " p e r f e c t p h o n e and t r u s t e d s e l l e r p h o n e i t s e l fis a m a z i n g i got t h i s p h o n e as s h o w n h e r e on the d e s c r i p t i o n i "| _ _ t r u n c a t e d _ _" it k e e p s d r o p p i n g c a l l s the w i f i don ’ t w o r k t h i s is a w a s t e of m o n e y t h i s p h o n eis w o r t h l e s s , it k e e p s d r o p p i n g "| _ _ t r u n c a t e d _ _ " f i v e s t a r s t h i s is a g r e a t c h e a pp h o n e " " c h a r g e r did not fit the c h a r g e r didn ’ t fit "

$ i s _ h a p p y _ c u s t o m e r : chr " T r u e " " F a l s e " " T r u e " " F a l s e "

2) Xử lý định dạng ban đầu của dữ liệu

Chúng ta cần kiểm tra kiểu định dạng ban đầu của dữ liệu

1 # s u dung s a p p l y de t a o mot ham t i e n hanh d o c c a c k i e u du l i e u t r o n g n e w _ d i r t y _ d a t a

2 d a t a _ t y p e < - s a p p l y ( n e w _ d i r t y _ d a t a , c l a s s )3 p r i n t ( d a t a _ t y p e )

Kết quả của đoạn code

> p r i n t ( d a t a _ t y p e )

" c h a r a c t e r " " c h a r a c t e r " " c h a r a c t e r " " c h a r a c t e r "s h o p p i n g _ c a r t o r d e r _ p r i c e d e l i v e r y _ c h a r g e s c u s t o m e r _ l a t" c h a r a c t e r " " n u m e r i c " " n u m e r i c " " n u m e r i c "c u s t o m e r _ l o n g c o u p o n _ d i s c o u n t o r d e r _ t o t a l s e a s o n" n u m e r i c " " i n t e g e r " " n u m e r i c " " c h a r a c t e r "i s _ e x p e d i t e d _ d e l i v e r y d i s t a n c e _ t o _ n e a r e s t _ w a r e h o u s e

Trang 16

3 n e w _ d i r t y _ d a t a $ i s _ h a p p y _ c u s t o m e r < - as l o g i c a l ( n e w _ d i r t y _ d a t a $ i s _ h a p p y _ c u s t o m e r )4 # c h u y e n d o i du l i e u s a n g k i e u Date

5 n e w _ d i r t y _ d a t a $ d a t e < - p a r s e _ d a t e _ t i m e ( n e w _ d i r t y _ d a t a $ d a t e , o r d e r s = c ("ymd", "mdy",

"dmy") ) # c h u y e n c a c c o t " d a t e " s a n g d i n h dang t h o i g i a n

6 n e w _ d i r t y _ d a t a $ d a t e < - as D a t e ( n e w _ d i r t y _ d a t a $ d a t e )

Kết quả của đoạn code

> s o u r c e ( " ~ / tai l i e u hoc tap / xac s u a t t h o n g ke / bai tap lon / B a i l a m B T L / the m a i n / t h e m a i n R ")

" c h a r a c t e r " " c h a r a c t e r " " D a t e " " c h a r a c t e r "s h o p p i n g _ c a r t o r d e r _ p r i c e d e l i v e r y _ c h a r g e s c u s t o m e r _ l a t" c h a r a c t e r " " n u m e r i c " " n u m e r i c " " n u m e r i c "c u s t o m e r _ l o n g c o u p o n _ d i s c o u n t o r d e r _ t o t a l s e a s o n" n u m e r i c " " i n t e g e r " " n u m e r i c " " c h a r a c t e r "i s _ e x p e d i t e d _ d e l i v e r y d i s t a n c e _ t o _ n e a r e s t _ w a r e h o u s e

1 # kiem t r a du l i e u t r u n g bang u n i q u e

2 u n i q u e _ d a t a = u n i q u e ( n e w _ d i r t y _ d a t a $ o r d e r _ i d )

3 # neu t o n g c o t c o g i a t r i d o c l a p bang t o n g c o t du l i e u

4 if ( l e n g t h ( u n i q u e _ d a t a ) == l e n g t h ( n e w _ d i r t y _ d a t a $ o r d e r _ i d ) ) {5 p r i n t (" Data o r d e r _ i d i s u n i q u e ")

7 p r i n t (" Data o r d e r _ i d i s n o t u n i q u e ")

Kết quả của đoạn code

> s o u r c e ( " ~ / tai l i e u hoc tap / xac s u a t t h o n g ke / bai tap lon / B a i l a m B T L / the m a i n / t h e m a i n R ")

[1] " D a t a o r d e r _ i d is u n i q u e "

Vậy cho thấy cột "order_id" không có giá trị nào bị trùng lặp nên ta không cần phải xử lý.

Chúng ta tiếp tục kiểm tra xem dữ liệu có bao nhiêu giá trị NA (Not Available, tức là giá trị bị khuyết),ta thực hiện như sau

1 # i n r a t o n g c a c du l i e u c o g i a t r i NA c u a moi c o t

2 n a _ c o u t < - c o l S u m s ( is na ( n e w _ d i r t y _ d a t a ) )3 p r i n t ( n a _ c o u t )

Kết quả của đoạn code

Trang 17

Ta nhận thấy có 6 giá trị bị khuyết cần phải xử lí.

Theo lý thuyết Generalized Imputation, ta sử dụng giá trị trung bình Mean để thay thế vào các giá trị NAcủa "customer_lat", "customer_long" và sử dụng giá trị trung vị (Median) để thay vào các giá trị NA của"is_happy_customer".

1 # t i n h mean c u a c u s t o m e r _ l o n g , c u s t o m e r _ l a t

2 m e a n _ c u s t o m e r _ l a t < - m e a n ( n e w _ d i r t y _ d a t a $ c u s t o m e r _ l a t , na rm = T R U E )3 m e a n _ c u s t o m e r _ l o n g < - m e a n ( n e w _ d i r t y _ d a t a $ c u s t o m e r _ l o n g , na rm = T R U E )4 # t i n h median cu i s _ h a p p y _ c u s t o m e r

5 m e d i a n _ i s _ h a p p y _ c u s t o m e r < - m e d i a n ( n e w _ d i r t y _ d a t a $ i s _ h a p p y _ c u s t o m e r , na rm = T R U E )6

7 # lam t r o n k e t qua

8 r o u n d e d _ m e a n _ c u s t o m e r _ l a t < - r o u n d ( m e a n _ c u s t o m e r _ l a t , d i g i t s = 4)9 r o u n d e d _ m e a n _ c u s t o m e r _ l o n g < - r o u n d ( m e a n _ c u s t o m e r _ l o n g , d i g i t s = 4)

10 r o u n d e d _ m e d i a n _ i s _ h a p p y _ c u s t o m e r < - r o u n d ( m e d i a n _ i s _ h a p p y _ c u s t o m e r , d i g i t s = 0)

Kết quả của đoạn code

> p r i n t ( r o u n d e d _ m e a n _ c u s t o m e r _ l a t )[1] - 3 6 8 1 3 9

> p r i n t ( r o u n d e d _ m e a n _ c u s t o m e r _ l o n g )[1] 1 4 4 9 6 7 8

> p r i n t ( r o u n d e d _ m e d i a n _ i s _ h a p p y _ c u s t o m e r )[1] 1

Theo kết quả có được, chúng tôi chọn giá trị Mean để làm giá trị thay thế vào các giá trị bị khuyết của"customer_lat", "customer_long" và Median để thay thế vào các giá trị khuyết của "is_happy_customer".

1 # t h a y t h e c a c g i a t r i NA bang c a c g i a t r i mean va median t i n h o t r e n

2 n e w _ d i r t y _ d a t a $ c u s t o m e r _ l a t [ is na ( n e w _ d i r t y _ d a t a $ c u s t o m e r _ l a t ) ] < r o u n d e d _ m e a n _ c u s t o m e r _ l a t

-3 n e w _ d i r t y _ d a t a $ c u s t o m e r _ l o n g [ is na ( n e w _ d i r t y _ d a t a $ c u s t o m e r _ l o n g ) ] < r o u n d e d _ m e a n _ c u s t o m e r _ l o n g

-4 n e w _ d i r t y _ d a t a $ i s _ h a p p y _ c u s t o m e r [ is na ( n e w _ d i r t y _ d a t a $ i s _ h a p p y _ c u s t o m e r ) ] < r o u n d e d _ m e d i a n _ i s _ h a p p y _ c u s t o m e r

-Tiếp theo, chúng ta cần phải xử lý các giá trị "order_price", "order_total" bằng các giá trị cho trước.

1 # t h a y t h e c a c g i a t r i NA c u a o r d e r _ p r i c e , d e l i v e r y _ c h a r g e s , o r d e r _ t o t a l bang c o n gt h u c c o s a n

2 n e w _ d i r t y _ d a t a < - n e w _ d i r t y _ d a t a % >%

3 m u t a t e ( o r d e r _ t o t a l = i f e l s e ( is na ( o r d e r _ t o t a l ) , o r d e r _ p r i c e * ( 1 0 0 - c o u p o n _ d i s c o u n t )/ 100 + d e l i v e r y _ c h a r g e s , o r d e r _ t o t a l ) ,

4 o r d e r _ p r i c e = i f e l s e ( is na ( o r d e r _ p r i c e ) , ( o r d e r _ t o t a l - d e l i v e r y _ c h a r g e s ) * 100 /( 1 0 0 - c o u p o n _ d i s c o u n t ) , o r d e r _ p r i c e ) ,

5 d e l i v e r y _ c h a r g e s = i f e l s e ( is na ( d e l i v e r y _ c h a r g e s ) , o r d e r _ t o t a l o r d e r _ p r i c e * ( 1 0 0 c o u p o n _ d i s c o u n t ) / 100 , d e l i v e r y _ c h a r g e s ) ,

-6 c o u p o n _ d i s c o u n t = i f e l s e ( is na ( c o u p o n _ d i s c o u n t ) , 100 ( o r d e r _ t o t a l d e l i v e r y _ c h a r g e s ) * 100 / o r d e r _ p r i c e , c o u p o n _ d i s c o u n t )

Trang 18

Giải thích đoạn code: Đoạn code trên sử dụng dấu %>% để thực hiện chuỗi các hàm dữ liệu trong môitrường R, chủ yếu sử dụng gói dplyr cho việc chuyển đổi và làm sạch dữ liệu.

- Nếu giá trị của "order_total" là NA, ta sẽ sử dụng dữ liệu của "order_price", "coupon_discount" và"delivery_charge"

order_total = order_price ∗(100 − coupon_discount)

Công thức Haversine như sau:

d = 2r arcsinphav(ϕ2− ϕ1) + cos(ϕ1) cos ϕ2hav(λ2− λ1)

= 2r arcsin s

sin2 ϕ2− ϕ12

4 # t a o mot vong l a p d u y e t t u n g c o t t r o n g du l i e u

5 for ( i in 1: n r o w ( n e w _ d i r t y _ d a t a ) ) {

6 c u s t o m e r _ l o c a t i o n < - c ( n e w _ d i r t y _ d a t a $ c u s t o m e r _ l o n g [ i ] , n e w _ d i r t y _ d a t a $ c u s t o m e r _ l a t [i ])

7 m i n _ d i s t a n c e < - Inf # t a o mot b i e n c o g i a t r i I n f

8 # t a o mot vong l a p kiem t r a k h o a n g c a c h nho n h a t g i u a c a c w a r e h o u s e

9 for ( j in 1: n r o w ( w a r e h o u s e _ d a t a ) ) {

10 w a r e h o u s e _ l o c a t i o n < - c ( w a r e h o u s e _ d a t a $ l o n [ j ] , w a r e h o u s e _ d a t a $ l a t [ j ])11 d i s t a n c e < - d i s t V i n c e n t y S p h e r e ( w a r e h o u s e _ l o c a t i o n , c u s t o m e r _ l o c a t i o n )12

13 if ( d i s t a n c e < m i n _ d i s t a n c e ) {14 m i n _ d i s t a n c e < - d i s t a n c e

Trang 19

16 }17

18 d i s t a n c e s _ t o _ n e a r e s t _ w a r e h o u s e [ i ] < - m i n _ d i s t a n c e

20 # gan l a i c a c g i a t r i d i s t a n c e _ t o _ n e a r e s t _ w a r e h o u s e v a o l a i du l i e u

21 n e w _ d i r t y _ d a t a $ d i s t a n c e _ t o _ n e a r e s t _ w a r e h o u s e < - r o u n d ( d i s t a n c e s _ t o _ n e a r e s t _ w a r e h o u s e/1000 , d i g i t s = 4)

Sau khi đã xử lý các giá trị NA, ta tiến hành chạy code để kiểm tra kết quả

1 n a _ c o u t < - c o l S u m s ( is na ( n e w _ d i r t y _ d a t a ) )2 p r i n t ( n a _ c o u t )

Kết quả của đoạn code

> n a _ c o u t < - c o l S u m s ( is na ( n e w _ d i r t y _ d a t a ) )> p r i n t ( n a _ c o u t )

> u n i q u e ( n e w _ d i r t y _ d a t a $ n e a r e s t _ w a r e h o u s e )

[1] " T h o m p s o n " " N i c k o l s o n " " B a k e r s " " n i c k o l s o n " " t h o m p s o n " ""

Ta thấy có tồn tại các giá trị giống nhau tuy nhiên kiểu định dạng lại khác nhau do sai sót của file dữ liệuđầu vào nên chúng ta cần phải chuyển định dạng của "nearest_warehouse" thành một kiểu định dạng đồngnhất là "Thopsom", "Nickolson" và "Bakers".

1 # c h u y e n c a c chu t h a n h i n hoa chu c a i dau va v i e t t h u o n g c a c chu c a i c o n l a i

2 n e w _ d i r t y _ d a t a $ n e a r e s t _ w a r e h o u s e < - t o l o w e r ( n e w _ d i r t y _ d a t a $ n e a r e s t _ w a r e h o u s e )3 n e w _ d i r t y _ d a t a $ n e a r e s t _ w a r e h o u s e < - t o o l s :: t o T i t l e C a s e (

n e w _ d i r t y _ d a t a $ n e a r e s t _ w a r e h o u s e )

Kết quả của đoạn code

> u n i q u e ( n e w _ d i r t y _ d a t a $ n e a r e s t _ w a r e h o u s e )[1] " T h o m p s o n " " N i c k o l s o n " " B a k e r s " ""

Tương tự với cột "nearest_warehouse", ta cần xử lý đến cột "season" trong dataframe"new_dirty_data"

> u n i q u e ( n e w _ d i r t y _ d a t a $ s e a s o n )

[1] " W i n t e r " " S u m m e r " " A u t u m n " " S p r i n g " " w i n t e r " " s p r i n g " " a u t u m n " " s u m m e r " ""

Ta thấy có tồn tại các giá trị giống nhau tuy nhiên kiểu định dạng lại khác nhau do sai sót của file dữ liệu đầuvào nên chúng ta cần phải chuyển định dạng của "season" thành một kiểu định dạng đồng nhất là "Spring","Summer", "Autumn" và "Winter"

Trang 20

1 # c h u y e n c a c chu t h a n h i n hoa chu c a i dau va v i e t t h u o n g c a c chu c a i c o n l a i

> u n i q u e ( n e w _ d i r t y _ d a t a $ s e a s o n )

[1] " W i n t e r " " S u m m e r " " A u t u m n " " S p r i n g " ""

Thế nên chúng ta cần phải xử lý các giá trị bị khuyết ấy bằng các giá trị cho trước đó.

Đối với "season", ta dựa vào thời gian đặt hàng để xác định đơn hàng đó được mua vào mùa nào trongnăm

1 # kiem t r a l a i c a c mua bang c a c h kiem t r a c a c t h a n g c u a don hang

2 n e w _ d i r t y _ d a t a < - n e w _ d i r t y _ d a t a % >%3 m u t a t e ( s e a s o n = c a s e _ w h e n (

4 m o n t h ( d a t e ) % in % c (3 , 4 , 5) ~ " S p r i n g ",5 m o n t h ( d a t e ) % in % c (6 , 7 , 8) ~ " Summer ",6 m o n t h ( d a t e ) % in % c (9 , 10 , 11) ~ "Autumn",7 T R U E ~ " W i n t e r "

4 # t a o mot vong l a p kiem t r a t u n g c o t t r o n g du l i e u

5 for ( i in 1: n r o w ( n e w _ d i r t y _ d a t a ) ) {

6 c u s t o m e r _ l o c a t i o n < - c ( n e w _ d i r t y _ d a t a $ c u s t o m e r _ l o n g [ i ] , n e w _ d i r t y _ d a t a $ c u s t o m e r _ l a t [i ])

14 d i s t a n c e < - d i s t V i n c e n t y S p h e r e ( w a r e h o u s e _ l o c a t i o n , c u s t o m e r _ l o c a t i o n )15

16 if ( d i s t a n c e < m i n _ d i s t a n c e ) {17 m i n _ d i s t a n c e < - d i s t a n c e

18 n e a r e s t _ w a r e h o u s e < - w a r e h o u s e _ d a t a $ n a m e s [ j ]

Trang 22

IV Thống Kê Mô Tả (Descriptive Statistics)

1) Làm rõ dữ liệu (Data visualization)

Tạo một dataframe mới có tên là "new_data".

4 # t i n h c a c ma t r a n t u o n g quan

5 c o r r e l a t i o n _ m a t r i x < - cor ( n u m e r i c _ c o l u m n s )6

15 a d d C o e f col = " b l a c k ", # Mau chu c u a c a c he s o t u o n g quan

i s _ e x p e d i t e d _ d e l i v e r y 0 0 0 3 6 7 0 9 6 2 0 6 1 2 3 7 5 0 1 2 0 0 0 9 9 6 4 5 2 2i s _ h a p p y _ c u s t o m e r - 0 0 1 9 1 7 4 3 3 2 0 4 1 4 3 4 4 9 4 5 - 0 0 6 6 5 3 4 7 5 6c u s t o m e r _ l a t c o u p o n _ d i s c o u n t o r d e r _ t o t a l

i s _ e x p e d i t e d _ d e l i v e r y i s _ h a p p y _ c u s t o m e r

Trang 23

Hình 1: Biểu đồ tương quan dữ liệu

Nhận xét: Ta nhận thấy rằng "order_total" và "order_price" có mối quan hệ tuyến tính mạnh.

b) Thống kê các dữ liệu liên quan đến các kho hàng

Sơ lược về số liệu của các kho hàng

1 # s u dung l e n h t a p p l y de t i n h c a c g i a t r i t u o n g ung c u a b i e n o r d e r _ t o t a l van e a r e s t _ w a r e h o u s e

2 l e n g t h < - t a p p l y ( n e w _ d a t a $ o r d e r _ t o t a l , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , l e n g t h )3 m e a n < - t a p p l y ( n e w _ d a t a $ o r d e r _ t o t a l , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , m e a n )4 m e d i a n < - t a p p l y ( n e w _ d a t a $ o r d e r _ t o t a l , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , m e d i a n )5 sd < - t a p p l y ( n e w _ d a t a $ o r d e r _ t o t a l , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , sd )

6 min < - t a p p l y ( n e w _ d a t a $ o r d e r _ t o t a l , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , min )7 max < - t a p p l y ( n e w _ d a t a $ o r d e r _ t o t a l , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , max )

8 Q1 < - t a p p l y ( n e w _ d a t a $ o r d e r _ t o t a l , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , q u a n t i l e , p r o b s =0 2 5 )

9 Q3 < - t a p p l y ( n e w _ d a t a $ o r d e r _ t o t a l , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , q u a n t i l e , p r o b s =0 7 5 )

Trang 24

Kết quả của đoạn code

> d a t a f r a m e ( length , mean , sd , min , max , Q1 , Q3 )

B a k e r s 267 1 2 5 4 0 4 7 7 3 4 8 1 3 3 6 3 9 2 9 3 3 5 6 4 3 1 6 8 9 3 1 9 0 1 7 0 0 6 9 7N i c k o l s o n 348 1 2 6 7 3 4 8 7 6 7 6 2 7 7 9 1 5 0 0 3 3 5 6 4 3 1 6 5 3 0 4 3 5 1 7 8 0 0 3 0T h o m p s o n 385 1 2 1 9 4 2 6 7 7 5 4 0 1 4 5 6 8 6 4 3 3 5 6 4 3 1 6 1 5 6 2 2 0 1 7 2 9 2 7 5

Vẽ biểu đồ thể hiện số lượng đơn hàng của các kho hàng

1 # t i n h t o n g s o l u o n g don hang c h o moi w a r e h o u s e

2 l e n g t h _ w a r e h o u s e < - t a p p l y ( n e w _ d a t a $ o r d e r _ i d , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , l e n g t h )3 # t a o mot b i e n f a c t o r de s u dung lam t r u c x , v o i l e v e l s d u o c s a p x e p t h e o t e n c a c

w a r e h o u s e

4 n e w _ d a t a $ l e n g t h _ w a r e h o u s e _ s l < - f a c t o r ( n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , l e v e l s = n a m e s (l e n g t h _ w a r e h o u s e ) )

5 # s u dung g g p l o t 2 de v e b i e u do

6 g g p l o t ( d a t a = n e w _ d a t a , aes ( x = l e n g t h _ w a r e h o u s e _ s l , f i l l = l e n g t h _ w a r e h o u s e _ s l ) ) +7 g e o m _ b a r ( s t a t = " c o u n t ") +

Trang 25

Hình 2: Biểu đồ thể số lượng đơn hàng của các kho hàng

Nhận xét: Dựa vào đồ thị 2, kho hàng Bakers có sự lựa chọn mua hàng ít nhất từ khách hàng, kho hàngNickolson và kho hàng Thompson có sự lựa chọn mua hàng không quá chênh lệch nhau nhiều, trong đó, khohàng Thompson có sự lựa chọn mua nhiều nhất, độ chênh lệch với kho hàng Bakers gần 1,45 lần (188 đơnhàng).

Vẽ biểu đồ thể hiện tổng số tiền của các đơn hàng của các kho hàng

1 # t i n h t o n g s o t i e n c u a don hang c h o moi w a r e h o u s e

2 s u m _ w a r e h o u s e < - t a p p l y ( n e w _ d a t a $ o r d e r _ t o t a l , n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , sum )

Trang 26

3 # t a o mot b i e n f a c t o r de s u dung lam t r u c x , v o i l e v e l s d u o c s a p x e p t h e o t e n c a cw a r e h o u s e

4 n e w _ d a t a $ s u m _ w a r e h o u s e _ g i a < - f a c t o r ( n e w _ d a t a $ n e a r e s t _ w a r e h o u s e , l e v e l s = n a m e s (s u m _ w a r e h o u s e ) )

5 # s u dung g g p l o t 2 de v e b i e u do

6 g g p l o t ( d a t a = n e w _ d a t a , aes ( x = s u m _ w a r e h o u s e _ g i a , y = s u m _ w a r e h o u s e [s u m _ w a r e h o u s e _ g i a ] , f i l l = s u m _ w a r e h o u s e _ g i a ) ) +

7 g e o m _ b a r ( s t a t = " sum ") +

8 g e o m _ t e x t ( aes ( l a b e l = s u m _ w a r e h o u s e [ s u m _ w a r e h o u s e _ g i a ]) , v j u s t = -1) +9 l a b s ( t i t l e = " Tong don g i a c u a c a c kho hang ", x = " ", y = " Tong g i a t r i ") +

Kết quả của đoạn code

> p r i n t ( s u m _ w a r e h o u s e )

B a k e r s N i c k o l s o n T h o m p s o n1 1 2 2 2 3 2 5 5 8 8 6 0 2 3 8 4 6 7 8 0 2

Ngày đăng: 12/05/2024, 07:57

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan