131 - 131Shares
Học phân tích dữ liệu hiệu quả bằng Mini Project.
Chào các bạn, nhằm mục đích cho các bạn hiểu rõ hơn về công việc của Data Analyst nên mình viết bài này. Nội dung tập trung vào cung cấp thông tin từ “A-Z” cho công việc của một Data Analyst để các bạn có thể hình dung rõ ràng hơn.
Trong bài viết trước của mình về data Analyst (xem tại đây), mình có nhắc đến daily routine của một Data Analyst. Phần này mình sẽ tập trung đi sâu hơn và cho các bạn thấy được cụ thể công việc của mình bằng minh họa thực tế qua mini project.
Lưu ý: bài viết này chỉ nói về một phần công việc của Data Analyst và không bao phủ toàn bộ. Ở đây mình chỉ giới thiệu một trường hợp đơn giản nhất mà các bạn sẽ gặp trong thực tế thôi nhé.
Bài viết sẽ bao gồm những thông tin sau:
- Những bước cụ thể từ đầu đến kết thúc một yêu cầu báo cáo
- Một vài khái niệm cần phân biệt rõ khi phân tích câu hỏi
- Sự khác nhau khi sử dụng Python và BI tool cho visualisation
- Bài tập thực hành
Mục Lục
Chuẩn bị cho bài viết
Đối với những bạn mới xem bài lần đầu tiên thì mình khuyến khích các bạn xem các hướng dẫn cài đặt các phần mềm ở bài viết trước của mình tại đây. Hướng dẫn cài đặt MySQL và database mẫu
Và nếu bạn chưa từng biết đến SQL là gì thì hãy đọc bài này trước khi tiếp tục nhé.
Những bạn đã có hiểu biết sơ về SQL hay lập trình thì có thể bỏ qua công đoạn này.
Trong phần này mình sẽ lấy ví dụ là, đến cuối năm, bộ phận sale gửi yêu cầu về báo cáo kinh doanh. Báo cáo này sẽ dựa trên bộ dữ liệu về các hóa đơn được lưu trữ trong một file Excel. File này chứa 3 bảng dữ liệu khác nhau gồm: Orders, Returns và People.
Các bạn có thể tải file Excel trực tiếp tại Tableau Forum.
Nhưng vì mục đích học tập mình đã chuyển file này thành dạng SQL query để thực hành phân tích dữ liệu. Các bạn tải file tại link này nhé. Sau khi tải file về các bạn chỉ việc upload file lên local server như hướng dẫn của bài trên nhé.
Bây giờ mình bắt đầu vào vấn đề chính nhé!
Quy trình tổng quát khi phân tích dữ liệu
Trong gần như mọi trường hợp, các bạn đều sẽ cần phải trải qua những bước sau để hoàn thành một yêu cầu. Chỉ có nhiều hơn chứ không ít hơn đâu nhé.

Lấy yêu cầu từ bộ phận Sale
Thông thường những nhân viên từ các bộ phận khác sẽ không quá rành về dữ liệu mà công ty đang có. Họ thường chỉ yêu cầu một báo cáo nào đó và công việc của Data Department là đi thu gom dữ liệu để phục vụ yêu cầu đó. Những lúc này, các câu có thể sẽ không thực tế.
Nhưng cũng có những trường hợp những người đưa ra yêu cầu họ cũng hiểu biết về dữ liệu. Trong những trường hợp này họ sẽ giải thích cho bạn những dữ liệu đó có ý nghĩa như thế nào và lấy ở đâu.
Trong mini project này, dữ liệu khá đơn giản nên mình sẽ đặt ra những câu hỏi đơn giản nhằm mục đích học tập nhé. Về sau mình sẽ đưa ra những câu hỏi khó hơn.
Sau đây sẽ là danh sách những yêu cầu với dữ liệu mẫu trên:
- Lợi nhuận (profit) và doanh thu (sale) thay đổi như thế nào theo từng tháng?
- So sánh tỷ lệ lợi nhuận (profit/sale) của từng tiểu bang trong năm 2017 (dữ liệu chỉ có đến 2017)?
- Có bao nhiêu sản phẩm được trả lại (returned)? Những tiểu bang (state) và danh mục sản phẩm (category) nào có tỷ lệ trả lại cao nhất?
Phân tích yêu cầu
Nói thật là đối với những câu hỏi trên, các bạn sẽ chả cần phân tích gì nếu đã có kinh nghiệm. Nhưng mình đang trong giai đoạn học tập nên cần học cách phân tích từng câu hỏi.
Các bạn đừng xem thường phần này nhé! Vì đây là phần mình dành khá nhiều thời gian khi làm việc thực tế đấy.
Các bạn thử hình dung, vào một ngày đẹp trời nào đó, bạn nhận được một yêu cầu từ sale manager. Và để hoàn thành nó bạn cần phải lấy dữ liệu từ 10 bảng dữ liệu khác nhau!!!
Một VD đơn giản là các bạn có khi nào đi xây nhà mà không cần kiến trúc sư để thiết kế? Các yêu cầu của bạn nghe có vẻ hay nhưng thực tế có làm được không lại là chuyện khác? Đối với Data cũng vậy thôi.
Phân tích dữ liệu
Câu hỏi mà mình luôn tự hỏi đầu tiên là dữ liệu nằm ở đâu? Đơn giản là không có dữ liệu thì chả làm được gì cả.
Nếu các bạn đọc kỹ những yêu cầu trên các bạn sẽ thấy từ câu 1 và câu 2, toàn bộ dữ liệu có thể lấy được ở bảng dữ liệu Orders. Nhưng đến câu 3, chúng ta cần phải có dữ liệu ở bảng Returns vì nó cung cấp thông tin những Order nào được trả lại.
Kết luận là chúng ta chỉ cần 2 bảng dữ liệu là Orders và Returns cho 3 câu hỏi trên.
Vậy liên kết 2 bảng như thế nào?
Đây chính là câu hỏi tiếp theo các bạn nên hỏi. Điều này cũng cực kỳ quan trọng. Vì trong một số trường hợp các bạn sẽ phải cần nhiều hơn 1 trường dữ liệu để nối 2 bảng với nhau. Các bài viết sau mình sẽ cho các bạn thấy rõ điều này.
Riêng trường hợp trên, các bạn có thể dễ dàng thấy được là cả 2 có cùng chung một trường dữ liệu là Order_ID. Đây cũng chính là chìa khóa để chúng ta có thể nối 2 bảng lại với nhau sau này. Nối thế nào thì đọc tiếp phần lập trình nhé.
Phân tích từng câu hỏi
Phần này các bạn mới nhớ đọc kỹ nhé. Sẽ có vài thông tin hữu ích về sau đó.
Các bạn chú ý ở câu hỏi thứ nhất. Yêu cầu là thay đổi theo từng tháng ntn? Nhưng thực tế các bạn sẽ cần đến cả thay đổi theo năm hoặc theo quý.
Tại sao chúng ta cần phải có cả 3 loại này?
Việc phân tích sự thay đổi theo năm sẽ cho các bạn được tổng quát tình hình kinh doanh của doanh nghiệp. Con số này khá quan trọng nhưng để biết tình hình thực tế của doanh nghiệp, thay đổi theo năm sẽ không đủ. Lúc này chúng ta cần đến tháng/quý.
Đối với tháng/quý, chúng ta lại có 2 cách phân tích khác nhau. Tùy theo mục đích và loại hình kinh doanh mà chúng ta linh hoạt sử dụng.
- Loại 1: so sánh theo từng tháng (monthly). Loại này đơn giản là bạn so sánh xem xu hướng kinh doanh của tháng này so với tháng trước ntn? Loại xu hướng này thường được dùng cho những doanh nghiệp kinh doanh không theo mùa.
Ví dụ là gạo, dầu ăn, kem đánh răng, đồ lót, … Nói chúng là các sản phẩm được sử dụng hằng ngày
- Loại 2: so sánh với cùng tháng/kỳ năm trước (Month over Month MoM/Quarter over Quarter QoQ). Loại này giúp các doanh nghiệp loại bỏ những dữ báo sai lệch vì bỏ qua nhu cầu theo mùa.
Nếu các bạn bán các sản phẩm mang tính chất mùa vụ như hộp quà, áo quần theo mùa,… Những mặt hàng này sẽ có sự thay đổi chóng mặt theo mùa. Vì vậy nếu bạn sử dụng loại 1 để tìm xu hướng sẽ dể dẫn đến thông tin không được chính xác.
Ở đây mình chỉ phân tích một câu làm ví dụ. Để tránh quá nhiều thông tin, mình sẽ phân tích từng câu ở phần thực thi.
Bây giờ coi như chúng ta đã phân tích xong câu hỏi và biết được đi đâu để kiếm dữ liệu. Bước tiếp theo sẽ là truy vấn và tổ chức lại dữ liệu sao cho phù hợp với từng câu hỏi.
Truy xuất dữ liệu bằng SQL Queries
Phần này chúng ta sẽ vừa phân tích sơ về câu hỏi và thực hiện viết các lệnh SQL để lấy dữ liệu cần thiết ra nhé.
Trước tiên chúng ta cần làm rõ việc quy vấn dữ liệu. Mục đích là chỉ lấy những thông tin cần thiết dưới một cấu trúc phù hợp. Việc này sẽ giúp làm giảm những thông tin dư thừa và tăng hiệu suất xử lý và trình bày dữ liệu sau này.
VD: như ở câu 1, tất cả những gì chúng ta cần chỉ nằm ở 3 cột là Sales, Profit và Order_date
. Không cần phải tải toàn bộ dữ liệu lên làm gì cho nặng bộ nhớ và giảm tốc độ xử lý.
Câu hỏi thứ nhất
“Lợi nhuận (profit
), doanh thu (sale
) và tỷ lệ lợi nhuận (Profit/Sale
) thay đổi như thế nào theo từng tháng?”
Như phân tích ở trên, phần này chúng ta cần đến 3 trường là Sale, Profit và Order_date.
Bây giờ câu lệnh SQL của chúng ta sẽ có dạng như sau:
-- Câu hỏi thứ nhất
select sum(Sales) as Doanh_Thu,
sum(Profit) as Loi_Nhuan,
round(sum(Profit)/sum(Sales),2) as Ty_Le_Loi_Nhuan,
concat(year(Order_Date),"-",month(Order_Date)) as Thang_Nam
from superstore.orders
group by Thang_Nam
order by year(Order_Date) desc, month(Order_Date) desc;
Những ai không hiểu được tại sao lại có được những lệnh trên thì đọc lại bài viết hướng dẫn này của mình nhé.
Lúc này chúng ta sẽ được bảng dữ liệu như sau. Sẵn sàng cho việc trình bày báo cáo.
Doanh_Thu | Loi_Nhuan | Ty_Le_Loi_Nhuan | Thang_Nam |
83829.32 | 8483.347 | 0.1 | 2017-12 |
118447.8 | 9690.104 | 0.08 | 2017-11 |
77776.92 | 9275.276 | 0.12 | 2017-10 |
87866.65 | 10991.56 | 0.13 | 2017-9 |
Phần này mình tách tháng và năm ra làm một trường mới để tiện cho việc xử lý về sau. Trong khá nhiều trường hợp mình sẽ để y nguyên Order_date
vì nó có nhiều sự linh hoạt.
Tiếp đến câu hỏi thứ hai
“So sánh tỷ lệ lợi nhuận (profit/sale
) của từng tiểu bang trong năm 2017 (dữ liệu chỉ có đến 2017)?”
Với câu hỏi này các bạn có thể thấy được chúng ta sẽ cần đến các trường như Profit, Sale, State và Order_date
. Việc so sánh tỷ lệ lợi nhuận sẽ giúp chúng ta hiểu rõ hơn được tình hình kinh doanh tại một state. Vì nhiều lúc Profit
và Sale
chưa nói lên hết được tình hình hoạt động tại một khu vực.
Mình lấy VD, nếu bạn so sánh giữa HCM và Quảng Ngãi thì khả năng cao là HCM sẽ có lợi nhuận và doanh thu cao hơn Quảng Ngãi. Nhưng tại thị trường Quảng Ngãi, để bán được một sản phẩm đôi khi lại tốn chi phí ít hơn mà lại không cần thêm quảng cáo. Dẫn đến lợi nhuận trên tổng sale là rất lớn.
Giờ chuyển qua SQL query, nó sẽ có dạng như sau:
-- Câu hỏi thứ hai
select round(sum(Profit)/sum(Sales),2) as Ty_Le_Loi_Nhuan,
State as Tieu_Bang
from superstore.orders
where year(Order_Date) = 2017
group by Tieu_Bang
order by Ty_Le_Loi_Nhuan desc;
Và chúng ta sẽ có kết quả như sau
Ty_Le_Loi_Nhuan | Tieu_Bang |
0.45 | District of Columbia |
0.44 | Delaware |
0.39 | Iowa |
0.37 | Minnesota |
0.36 | Kansas |
Tiếp đến câu 3 nhé
“Có bao nhiêu sản phẩm được trả lại (returned
)? Tỷ lệ trả lại của mỗi loại sản phẩm tại mỗi tiểu bang như thế nào?”
Vấn đề lúc này bắt đầu khó khăn hơn một chút rồi. Dữ liệu đã không còn nằm ở một bảng nữa mà là ở cả 2 bảng. Nếu yêu cầu đơn giản chỉ có ý đầu tiên, chúng ta chỉ cần bảng Returns
là đủ. Nhưng đến ý thứ 2 chúng ta cần phải biết được cả tỷ lệ trả lại theo tiểu bang và danh mục sản phẩm
Đầu tiên chúng ta xem cần thông tin gì. Có thể thấy được rằng mình sẽ cần Returned, state và category
. Nhưng để 2 bảng này có thể nối lại được với nhau chúng ta bắt buộc phải dùng đến Order_ID
. Dùng như thế nào thì xem code nhé
Lưu ý: để tính được tỷ lệ trả lại chúng ta tính tổng Returns
chia cho tổng Orders
nhé
-- Câu hỏi thứ ba
select count(o.Order_ID) as Tong_HD,
count(r.Order_ID) as Tong_HD_Tra,
count(r.Order_ID)/count(o.Order_ID)
as Ty_Le_Tra_Hang,
-- một số DBMS sẽ hổ trợ dùng trực tiếp Tong_HD_Tra/Tong_HD
o.State as Tieu_Bang,
o.Category as Danh_Muc
from superstore.orders as o
left join superstore.`returns` as r
on r.Order_ID = o.Order_ID
group by Tieu_Bang, Danh_Muc
order by Tong_HD_Tra desc;
Và kết quả sẽ được như sau:
Tong_HD | Tong_HD_Tra | Ty_Le_Tra_Hang | Tieu_Bang | Danh_Muc | |
1198 | 208 | 0.1736 | California | Office Supplies | |
444 | 78 | 0.1757 | California | Furniture | |
359 | 52 | 0.1448 | California | Technology | |
292 | 37 | 0.1267 | Washington | Office Supplies | |
684 | 34 | 0.0497 | New York | Office Supplies |
Để hiểu rõ hơn về câu lệnh Join
, các bạn đọc tại bài viết này trên W3school nhé.
Bây giờ cơ bản mình đã có đầy đủ dữ liệu cho việc trình bày báo cáo rồi nhé. Tiếp theo chúng ta sẽ tìm hiểu xem những dữ liệu này sau khi lên hình sẽ ntn nhé.
Trước khi vào phần tiếp. Mình muốn chúc mừng các bạn là mình đã đi được 60% quãng đường của bài viết. Tiếp tục đọc đến hết bài nhé.
Trình bày báo cáo dữ liệu
Trong phần này mình sẽ sử dụng 2 cách để thực hiện việc báo cáo là Python và Tableu. Python sẽ được dùng cho câu 1, còn câu 2 & 3 mình sẽ sử dụng Tableu. Mục đích sẽ giúp các bạn có thêm sự lựa chọn trong việc visualisation dữ liệu.
Riêng cá nhân mình thì hiếm khi mình dùng Python để visualise data và gần như chỉ sử dụng Tableau. Một trong những lý do là sử dụng Tableau sẽ nhanh và dễ hơn rất nhiều so với dùng Python.
Để sử dụng Python, các bạn cần có Python và phần mềm lập trình. Ở đây mình khuyến khích các bạn tải và cài đặt Anaconda tại đây. Đây là một trong những phần mềm được sử dụng nhiều nhất trong giới Data Science và đặc biệt là cực kỳ dễ sử dụng. Chỉ cần tải về và cài đặt.
Sau khi cài đặt xong các bạn chạy chương trình lên và mở Jupyter Notebook lên như hình nhé.
Sau đó các bạn tạo thư mục để chứa file lập trình cùng với dữ liệu đã được truy xuất.
Vậy là đã sẵn sàng cho việc thực hành rồi.
Phần này mình sẽ không đi sâu hướng dẫn sử dụng Python hay các package của nó nhé. Mục đích là để các bạn hiểu được kết quả của quy trình phân tích dữ liệu là gì. Các bạn muốn học Python thì vào Google nhé. Ở đây mình có một vài link trên DataCamp để các bạn có thể bắt đầu:
Mình thích các bài hướng dẫn của DataCamp vì nó khá trực quan và bạn còn có thể tương tác trực tiếp vơi code để xem kết quả ngay.
Còn về Tableau các bạn có thể tải bản miễn phí tại link này. Cài đặt như phần mềm bình thường không có gì khó khăn. Nếu các bạn có email sinh viên (VD abc@xyz.edu.vn), các bạn có thể xin được key bản full trong vòng 12 tháng nhé. Đăng ký ở đây.
Để học cách sử dụng Tableau các bạn có thể xem trực tiếp trên website Tableau.com. Mình cũng bắt đầu học từ đây thôi.
Những bạn chưa học qua lập trình có thể không cần xem phần code python mà nhảy xuống phần Tableau nhé.
Thiết kế báo cáo dữ liệu bằng Python
Trong phần này mình sử dụng 2 thư viện chính là Pandas và Matplotlib cho phần data visualisation.
Pandas là một thư viện cực mạnh trong việc xử lý dữ liệu dưới định dạng bảng (Data Frame). Mình nghĩ gần như toàn bộ mọi người sử dụng Python cho Data Science đều dùng Pandas.
Bây giờ là đến phần Code. Phần này mình sẽ không giải thích gì nhiều. Nếu các bạn đã học qua Python, đọc xong sẽ hiểu. Còn những bạn chưa học thì nên bắt đầu học từ đầu. Phần code này chỉ đơn giản là demo thôi nhé.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('SuperstoreCau1.csv')
df.head()
# chuyển đổi thang_nam thành định dạng ngay_thang_nam
df['Thang_Nam'] = pd.to_datetime(df.Thang_Nam)
df.head()
# plot doanh_thu và loi_nhuan
plt.subplot(2,1,1) # tạo 1 khung plot 2x1,và chọn vi trí đầu tiên
plt.plot(df['Thang_Nam'], df['Doanh_Thu'], c='red') # plot 1 line cho doanh_thu
plt.plot(df['Thang_Nam'], df['Loi_Nhuan'], c='blue') # plot 1 line cho loi_nhuan
plt.legend() # cho hiện chú thích
plt.xlabel('Thời Gian') # đặt tên cho trục X
plt.ylabel('Tổng tiền') # đặt tên cho trục Y
# chỉ giữ lại những tháng cố định trên thanh thời gian
plt.gca().axes.get_xaxis().set_ticks(['2014','2015','2016','2017'])
#plot ty_le_loi_nhuan
plt.subplot(2,1,2)
plt.plot(df['Thang_Nam'], df.Ty_Le_Loi_Nhuan, c='green')
plt.legend()
plt.xlabel('Thời Gian')
plt.ylabel('Tỷ lệ')
# chỉ giữ lại những tháng cố định trên thanh thời gian
plt.gca().axes.get_xaxis().set_ticks(['2014','2015','2016','2017'])
plt.show() # cho hiện cả 2 plot trên
Sau khi chạy toàn bộ đoạn mã trên các bạn sẽ thấy được kết quả như sau:
Thiết kế báo cáo dữ liệu sử dụng Tableau
Như mình nói trên, việc sử dụng Tableau cực kỳ trực quan và nhanh chóng. Các bạn chỉ cần kết nối dữ liệu với Tableau là có thể thực hiện ngay. Cụ thể các bạn xem video nhé!
Lần đầu làm chuyện ấy … nên có gì mấy bạn cho qua nhé. (Mình xin lỗi về phần âm thanh, không biết ở đâu ra những âm thanh rè rè)
Như mình nói trong video, lý do mình thích sử dụng Tableau cho thiết kế report là vì nó có rất nhiều lợi ích mà Python (R) khó làm được. Theo mình thấy Python khá mạnh trong việc xử lý dữ liệu thô, còn về phần trình bày báo cáo, vẫn nên dùng BI tool.
Một vài điểm mạnh cơ bản của BI tool như:
- Dễ sử dụng chỉ cần kéo và thả đối với những biểu đồ đơn giản
- Rất nhiều lựa chọn trong việc hiển thị dữ liệu
- Không yêu cầu nhiều kiến thức về lập trình và gần như ai cũng có thể học trong thời gian ngắn
Sau khi chuyển các dashboard đến người dùng ở các phòng ban khác là chúng ta kết thúc một mini project. Và chúng ta tiếp tục đến với các project khác.
…
Giờ đến lượt bạn nhé.
Thực hành phân tích dữ liệu
Thực chất với lượng dữ liệu như trên, các bạn hoàn toàn có thể tạo ra hàng chục các bảng báo cáo khác nhau khai thác cụ thể từng chủ đề. Ví dụ như về phần Shipping, Discount, Regions,…
Lần này mình sẽ không đặt câu hỏi mà các bạn sẽ tự đặt câu hỏi cho chính mình rồi thực hành. Hãy tưởng tượng nếu bạn làm sale thì bạn muốn biết thông tin gì? Đây là lúc bạn thực hành cách phân tích dữ liệu nên ráng thực hành nhé.
Mình có một vài gợi ý như sau:
- Thay vì phân tích nhiều lĩnh vực khác nhau, các bạn nên tập trung và một lĩnh vực duy nhất và phân tích thật cụ thể. Và các câu hỏi càng yêu cầu nhiều bảng dữ liệu càng tốt.
Ví dụ: các bạn có thể tập trung về Shipping và Returns. Đặt ra mọi câu hỏi liên quan đến Shipping và sử dụng SQL để lấy dữ liệu cho câu hỏi đó.
- Chưa nên tập trung quá nhiều về phần đồ họa mà nên học cách phân tích để lấy dữ liệu chính sát. Nó thật sự rất quan trọng sau này.
- Về phần visualise data, các bạn có thể chọn Python hoặc BI tool tùy ý. Riêng mình thì khuyến khích dùng BI tool.
- Comment câu hỏi mà bạn đặt ra và SQL code cho câu hỏi đó. Về phần biểu đồ, chụp hình và up lên mạng và comment link vào dưới. Nếu các bạn dùng Tableau Public có thể tải dashboard của mình lên mạng và comment ở dưới (khuyến khích cái này). Xem hướng dẫn tại đây
Lưu ý: đối với các bạn dùng bản Tableau Public, để kết nối với CSV file trên tableau các bạn chọn Text File ở phần Connect.
Mọi thắc mắc các bạn cứ comment bên dưới mình sẽ trả lời nhé.
131 - 131Shares
- 131Shares
Chào bạn Hoàng Hiếu,
Bài thực hành của bạn rất hữu ích cho những người tập tành học Data Analytics như mình. Tuy bài của bạn khá đơn giản nhưng mình phải đánh vật cả ngày trời để thực tập, làm theo hướng dẫn cho ra đúng kết quả của bạn đã gợi ý. Vì mình chỉ mới bắt đầu học căn bản các phần mềm: SAS, Power BI, nên sử dụng các phần mềm này để thực tập phần bài tập của bạn. Mình xin phép chia sẻ bài của mình để bạn có thể góp ý thêm:
1. Đầu tiên, mình dùng SAS để import, nhập bảng số liệu và dùng PROC SQL trong SAS để phân tích, xử lý các số liệu. Một số câu lệnh SQL trong SAS hơi có một chút khác biệt. Các bước thực hiện như sau:
LIBNAME BI’D:\OneDrive – umc.edu.vn\TMU\BI’;
DATA orders;
SET BI.Orders;
RUN;
DATA returns;
SET BI.returns;
RUN;
/*Question 1: Lợi nhuận (profit) và doanh thu (sale) thay đổi như thế nào theo từng tháng*/
ODS CSV FILE=’D:\OneDrive – umc.edu.vn\TMU\BI\Cau_hoi_1.csv’;
PROC SQL;
SELECT DISTINCT SUM (sales) as Total_sales,
SUM (profit) as Total_profit,
SUM (profit)/SUM (sales) as Margin,
CAT (month(order_date), “-“, year (order_date)) as Month_Year
FROM Orders
GROUP BY Month_Year
ORDER BY year (order_date)asc, month(order_date)asc ;
QUIT;
ODS CSV CLOSE;
/*Question 2: So sánh tỷ lệ lợi nhuận (profit/sale) của từng tiểu bang trong năm 2017 (dữ liệu chỉ có đến 2017)?*/
ODS CSV FILE=’D:\OneDrive – umc.edu.vn\TMU\BI\Cau_hoi_2.csv’;
PROC SQL;
SELECT DISTINCT
SUM (profit)/SUM (sales) as Margin,
State
FROM Orders
WHERE year (order_date)=2017
GROUP BY State
ORDER BY Margin desc;
QUIT;
ODS CSV CLOSE;
/*Question 3: Có bao nhiêu sản phẩm được trả lại (returned)? Những tiểu bang (state) và danh mục sản phẩm (category) nào có tỷ lệ trả lại cao nhất?*/
ODS CSV FILE=’D:\OneDrive – umc.edu.vn\TMU\BI\Cau_hoi_3.csv’;
PROC SQL;
SELECT COUNT (o.order_ID) as Orders_Total,
COUNT (r.Order_ID) as Orders_Return,
COUNT (r.Order_ID)/COUNT (o.order_ID) as Return_rate,
Category,
State
FROM orders as o
LEFT OUTER JOIN returns as r ON r.order_ID = o.order_ID
GROUP BY state, category
ORDER by Orders_Total desc;
QUIT;
ODS CSV CLOSE;
2. Sau khi xuất các file ra định dạng .CSV, mình dùng POWER BI tool để thao tác các visualize các bảng số liệu. Hình ảnh các báo cáo xuất ra tương tự như hướng dẫn của bạn trên TABLEU.
Mình là người không phải dân trong nghề nên rất mong được tương tác với các bạn có chuyên môn để ứng dụng tốt cho công việc phát triển sau này. Mình hiện đang học về quản trị y tế, mình rất hứng thú với việc ứng dụng phân tích dữ liệu trong việc phân tích, đánh giá hiệu quả hoạt động của các cơ sở y tế trên cơ sở số liệu hoạt động như một doanh nghiệp. Nó khác với việc phân tích dữ liệu lâm sàng và dữ liệu dịch tể học. SAS ứng dụng rất nhiều trong nghiên cứu phân tích y sinh học, nhưng mình tìm hiểu thì đây cũng làm một phần mềm lập trình trong BI. Power BI thì mình tự học thêm trên Udemy.
Rất mong nhận được ý kiến đóng góp và tương tác của bạn. Thân!
Chào Phúc! MÌnh rất vui khi đọc comment của bạn. Mình tin chắc là với tinh thần như bạn, chả mấy khi mà bạn sẽ trở nên thành thạo với Data Analyst. Nếu ai muốn làm DA cũng làm được như bạn thì tốt quá. Đây cũng là động lực chính cho mình làm blog này.
Còn về phần code của bạn, mình ko quen với môi trường của SAS nên ko hiểu lắm. Nhưng cảm ơn bạn đã chia sẻ vì nó sẽ giúp ích cho những đọc giả sau này (có thể có cả mình). Còn về phần logic mình nghĩ chắc không có vấn đề gì. Mình có góp ý chút ở câu 1 và câu 2, Mình nghĩ ko cần DISTINCT ở trường hợp này vì mình đã có GROUP BY. Nó ko ảnh hưởng gì đến kết quả nhưng để tránh những phiền phức về sau, mình nghĩ nên lấy ra.
Dear Hiếu!
Cám ơn bạn đã động viên mình. Mình rất cần tương tác, số liệu thực tập để thành thục và hiểu rõ bản chất của việc phân tích dữ liệu, sử dụng công cụ phân tích hợp lý. Mong bạn giúp đỡ nhiều.
Về phần câu lệnh SELECT DISTINCT, ban đầu mình không dùng DISTINCT nhưng không hiểu sao số liệu cho ra bị lập lại nhiều lần. Không biết cách khắc phục ntn nên dùng thử DISTINCT.
Về lâu dài, mình đang ấp ủ dự án cũng như đề tài tốt nghiệp về việc xây dựng một mô hình phân tích và báo cáo dữ liệu của cơ sơ y tế để cải thiện hiệu quả và giúp nhà quản lý nhìn sâu hơn vào bản chất của dữ liệu. Từ đó đưa ra giải pháp, quyết định cải thiện đúng hướng giúp phát triển cơ sở y tế. Rất mong nhận được sự hỗ trợ và góp ý của bạn.
Cảm ơn bạn vì chia sẻ rất hữu ích và tỉ mỉ cho người mới bắt đầu. Rất mong sẽ được đọc thêm nhiều bài viết từ bạn.
Cảm ơn bạn đã ủng hộ. Mình sẽ tranh thủ thời gian viết tiếp các bài hướng dẫn khác!
Em cảm ơn a, 1 sv năm 3 kinh tế chưa biết tý gì DA như e gặp blog của a như vớ được vàng vậy. Tự hứa sẽ luyện tập quyết tâm để ko phụ lòng những bài hướng dẫn tâm huyết của a!
Mình rất vui khi bạn thích bài viết. Chúc bạn mau chóng thành công.
Hieu Hoang ơi, mình có thể dùng bài đăng trên trang của bạn làm tài liệu đào tạo nội bộ cho fresh member bên mình ko 🙂 Mình cam kết ghi source đàng hoàng. À tất nhiên là ko copy 100%, vì còn cần chỉnh sửa 1 số lỗi chính tả nữa :3
Bạn có thể sử dụng nếu thấy phù hợp. Nếu để nguồn thì tuyệt vời. Cheer!
Tớ nghĩ bạn nên đưa ra nhiều câu hỏi nữa cho các bạn ấy thực hành.
– ví dụ: doanh thu trên từng sản phẩm
– thời gian nào trong năm bán chạy sản phẩm nào.
– Độ tuổi nào mua nhiều sản phẩm nào.
(nếu chưa có db và data thì mình thêm vào).
Chào anh, em đang gặp vấn đề về import csv to postgresql thì nó hiện lên là :
Error: invalid byte sequence for encoding “UTF8” :0xa0
Mong anh giúp ạ. Em cám ơn anh.
Em thấy các bài viết của anh rất dễ hiểu và bổ ích ạ.
Rất mong anh chia sẻ nhiều thông tin và kinh nghiệm hơn trong thời gian tới ạ.
Cảm ơn bạn rất nhiều, mình đang tìm hiểu về python, gặp được bài này thật sự mừng! Bạn có dự án xử lý data nào phức tạp hơn: bạn chỉ cần cho database (có mô tả cấu trúc) và yêu cầu giải quyết, mình cố làm thử.
Cảm ơn bạn rất rất nhiều !