3

Hôm qua, một thành viên trong gia đình đã chuyển cho tôi một cuộc phỏng vấn trên Tạp chí Phố Wall với tiêu đề Những nhà khoa học dữ liệu làm gì cả ngày tại nơi làm việc . Tiêu đề hấp dẫn tôi ngay lập tức, một phần vì tôi thấy mình giải thích cùng một chủ đề thường xuyên.

Tôi đã không thất vọng trong cuộc phỏng vấn: Tiến sĩ Narasimhan của General Electric đã đưa ra những câu trả lời sâu sắc và được truyền đạt tốt, và tôi đều nhận ra những ý kiến ​​quen thuộc và học hỏi những quan điểm mới. Nhưng tôi đã thất vọng vì trong một bài báo về các nhà khoa học dữ liệu (!) Họ sẽ đưa vào một biểu đồ khủng khiếp này:

Biểu đồ hình tròn có tiếng xấu giữa các nhà thống kê và nhà khoa học dữ liệu, với lý do chính đáng ( xem tại đây để biết thêm ). Nhưng đây là một ví dụ đặc biệt đáng tiếc. Chúng tôi muốn so sánh và đối chiếu sáu nhiệm vụ này. Nhưng nhìn thoáng qua, bạn có biết liệu có dành nhiều thời gian hơn nữa không?

Vấn đề với rất nhiều sự bẻ khóa biểu đồ hình tròn (và hầu hết sự xấu hổ về biểu đồ, thực tế) là mọi người không theo dõi với một sự thay thế tốt hơn. Vì vậy, ở đây tôi sẽ chỉ ra cách tôi sẽ tạo một biểu đồ khác (sử dụng R và ggplot2) để truyền đạt cùng một thông tin. Điều này cũng phục vụ như một ví dụ về quá trình suy nghĩ mà tôi trải qua trong việc tạo ra một trực quan hóa dữ liệu.

(Tôi lưu ý rằng bài đăng này phù hợp với Ngày số Pi, nhưng dù sao tôi cũng là người quan sát Ngày Tàu hơn ).

Thiết lập

Tôi bắt đầu bằng cách chuyển đổi dữ liệu trực tiếp từ cốt truyện sang R. readr::read_csvrất hữu ích cho việc xây dựng một bảng khi đang di chuyển:

library(readr)

d <- read_csv("Task,< 1 a week,1-4 a week,1-3 a day,>4 a day
Basic exploratory data analysis,11,32,46,12
Data cleaning,19,42,31,7
Machine learning/statistics,34,29,27,10
Creating visualizations,23,41,29,7
Presenting analysis,27,47,20,6
Extract/transform/load,43,32,20,5")

# reorganize
library(tidyr)
d <- gather(d, Hours, Percentage, -Task)

Điều này xây dựng dữ liệu của chúng tôi trong mẫu:

Giờ làm việc Tỷ lệ phần trăm Phân tích dữ liệu khám phá cơ bản <1 mỗi tuần 11 Làm sạch dữ liệu <1 mỗi tuần 19 Học máy / thống kê <1 mỗi tuần 34 Tạo trực quan hóa <1 mỗi tuần 23 Phân tích trình bày <1 mỗi tuần 27 Trích xuất / chuyển đổi / tải <1 a tuần 43 Phân tích dữ liệu khám phá cơ bản 1-4 mỗi tuần 32 Làm sạch dữ liệu 1-4 mỗi tuần 42 Học máy / thống kê 1-4 một tuần 29

Thanh lô

Cách phổ biến nhất mà biểu đồ hình tròn có thể được cải thiện là bằng cách biến nó thành biểu đồ thanh, với các danh mục trên trục x và tỷ lệ phần trăm trên trục y.

Điều này không áp dụng cho tất cả các lô, nhưng nó áp dụng cho lô này.

library(ggplot2)
theme_set(theme_bw())

ggplot(d, aes(Hours, Percentage)) +
  geom_bar(stat = "identity") +
  facet_wrap(~Task)

Lưu ý rằng rất giống với biểu đồ hình tròn ban đầu, chúng tôi đã chia sẻ khía cạnh (được chia thành các ô phụ) dựa trên Nhiệm vụ.

Biểu đồ này chưa được đánh bóng, nhưng lưu ý rằng việc phân phối các phản hồi khác nhau giữa các nhiệm vụ sẽ dễ dàng hơn như thế nào. Điều này là do trục x được sắp xếp theo thứ tự từ trái sang phải vì bạn dành một ít thời gian để đến với thời gian dành cho người khác - vì vậy, càng nhiều lần chuyển sang phải của mỗi biểu đồ thì càng mất nhiều thời gian cho nó. Cũng lưu ý rằng chúng tôi đã có thể bỏ truyền thuyết, điều này làm cho cốt truyện vừa chiếm ít không gian hơn vừa đòi hỏi ít phải nhìn đi nhìn lại.

Lô đất thay thế

Đây là một trong một vài lựa chọn thay thế mà tôi đã xem xét khi lần đầu tiên tưởng tượng ra việc tạo ra cốt truyện. Khi bạn đã thực hiện rất nhiều âm mưu, bạn sẽ học cách đoán trước những gì bạn sẽ đáng để thử, nhưng thường thì đáng để hình dung một vài chỉ để kiểm tra.

Chúng tôi có ba thuộc tính trong dữ liệu của mình: Giờ, Nhiệm vụ và Tỷ lệ phần trăm. Chúng tôi đã chọn sử dụng x , ykhía cạnh để giao tiếp tương ứng, nhưng chúng tôi có thể đã chọn các sắp xếp khác. Ví dụ: chúng ta có thể có Nhiệm vụ được thể hiện bằng màu sắc và thể hiện nó bằng một biểu đồ dòng:

ggplot(d, aes(Hours, Percentage, color = Task, group = Task)) +
  geom_line()

Điều này có một số lợi thế so với biểu đồ thanh trên. Đối với người mới bắt đầu, nó dễ dàng để so sánh hai nhiệm vụ. (Ví dụ: chúng tôi biết rằng việc tạo hình ảnh trực quan và tạo ra dữ liệu trực quan và cách thức phân phối dữ liệu trực tuyến. Tôi cũng thích sự rõ ràng của nó làm cho nó phân tích dữ liệu khám phá cơ bản của Cameron mất nhiều thời gian hơn những người khác. Nhưng biểu đồ làm cho việc tập trung chỉ một nhiệm vụ trở nên khó khăn hơn, bạn phải nhìn đi nhìn lại từ truyền thuyết và gần như không có cách nào chúng ta có thể chú thích nó với văn bản như cốt truyện gốc.

Đây là một sự kết hợp khác mà chúng ta có thể thử:

ggplot(d, aes(Hours, Task, fill = Percentage)) +
  geom_tile(show.legend = FALSE) +
  geom_text(aes(label = paste0(Percentage, "%")), color = "white")

Cách tiếp cận này là nhiều hơn một bảng bàn ăn. Điều này giao tiếp ít hơn một chút so với các ô vạch và vạch vì nó từ bỏ tính thẩm mỹ y / size để truyền đạt Tỷ lệ phần trăm. Nhưng lưu ý rằng nó vẫn dễ hiểu như biểu đồ hình tròn, đơn giản là vì nó có thể giao tiếp với các đơn đặt hàng từ trái sang phải của thành phố của James ít thời gian hơn đến nhiều thời gian hơn. "

Cải thiện đồ thị của chúng tôi

Làm thế nào âm mưu thanh của chúng tôi có thể được cải thiện?

Vấn đề đầu tiên nhảy ra là trục x trùng nhau nên các nhãn gần như không thể đọc được. Điều này có thể được sửa chữa với giải pháp này .

ggplot(d, aes(Hours, Percentage)) +
  geom_bar(stat = "identity") +
  facet_wrap(~Task) +
  theme(axis.text.x = element_text(angle = 90,  hjust = 1))

Tiếp theo, lưu ý rằng biểu đồ hình tròn ban đầu cho thấy tỷ lệ phần trăm dưới dạng văn bản ngay trên biểu đồ. Điều này là cần thiết trong biểu đồ hình tròn đơn giản vì rất khó đoán được tỷ lệ phần trăm trong biểu đồ hình tròn, chúng ta có thể đủ khả năng để mất nó ở đây, khi trục y truyền thông tin tương tự. Nhưng nó vẫn có thể hữu ích khi bạn muốn chọn ra một con số cụ thể để báo cáo (Trực quan hóa là rất quan trọng: 7% các nhà khoa học dữ liệu dành> 4 giờ mỗi ngày cho nó! Rằng) Vì vậy, tôi thêm một geom_textlớp.

ggplot(d, aes(Hours, Percentage)) +
  geom_bar(stat = "identity") +
  facet_wrap(~Task) +
  geom_text(aes(label = paste0(Percentage, "%"), y = Percentage),
            vjust = 1.4, size = 5, color = "white")

Thứ tự của các khía cạnh nhiệm vụ là tùy ý (theo bảng chữ cái trong cốt truyện này). Tôi muốn đưa cho họ một thứ tự giúp họ dễ dàng duyệt hơn - một cái gì đó dọc theo dòng. Một proxy đơn giản cho việc này là đặt hàng bởi %% người dành <1 giờ mỗi tuần.

library(dplyr)

d %>%
  mutate(Task = reorder(Task, Percentage, function(e) e[1])) %>%
  ggplot(aes(Hours, Percentage)) +
  geom_bar(stat = "identity") +
  facet_wrap(~Task) +
  geom_text(aes(label = paste0(Percentage, "%"), y = Percentage),
            vjust = 1.4, size = 5, color = "white") +
  theme(axis.text.x = element_text(angle = 90,  hjust = 1)) +
  xlab("Hours spent per week")

Thiết kế đồ thị

Từ đây, bước cuối cùng sẽ là điều chỉnh màu sắc, phông chữ và các lựa chọn khác về thiết kế của thành phố.

Tôi không có ý kiến ​​cực kỳ mạnh mẽ về những lựa chọn này (tôi khá hài lòng với ggplot2's theme_bw()). Nhưng một số người thích cách tiếp cận tối đa hóa của Edward Tufte trong việc tối đa hóa Dữ liệu / Tỷ lệ mực Hồi giáo là, bỏ các đường viền, lưới và đường trục. Điều này có thể đạt được với theme_tufte :

library(ggthemes)

d %>%
  mutate(Task = reorder(Task, Percentage, function(e) e[1])) %>%
  ggplot(aes(Hours, Percentage)) +
  geom_bar(stat = "identity") +
  facet_wrap(~Task) +
  geom_text(aes(label = paste0(Percentage, "%"), y = Percentage),
            vjust = 1.4, size = 5, color = "white") +
  theme_tufte() +
  theme(axis.text.x = element_text(angle = 90,  hjust = 1))

Một số người đưa triết lý này đi xa hơn nữa và bỏ hoàn toàn trục y (vì chúng ta đã có những phần trăm được chú thích trên các thanh).

library(ggthemes)

d %>%
  mutate(Task = reorder(Task, Percentage, function(e) e[1])) %>%
  ggplot(aes(Hours, Percentage)) +
  geom_bar(stat = "identity") +
  facet_wrap(~Task) +
  geom_text(aes(label = paste0(Percentage, "%"), y = Percentage),
            vjust = 1.4, size = 5, color = "white") +
  theme_tufte() +
  theme(axis.text.x = element_text(angle = 90,  hjust = 1),
        axis.ticks = element_blank(),
        axis.text.y = element_blank()) +
  ylab("")

(Xem ở đây để biết phiên bản hoạt hình của trò chơi Less Less này mang nhiều triết lý hơn.)

Vì vậy, hãy xem hai phiên bản:

Mà giao tiếp nhiều hơn với bạn? Và bạn có thể nghĩ về một âm mưu truyền đạt dữ liệu này thậm chí rõ ràng hơn không?

Thẻ từ liên quan:

Yếu tố cần thiết

|