Hướng dẫn r vs python for data visualization - r so với python để trực quan hóa dữ liệu

Một bước quyết định trong quá trình khoa học dữ liệu đang truyền đạt kết quả phân tích của bạn. Là một nhà khoa học dữ liệu, bạn thường được giao nhiệm vụ trình bày những kết quả này cho những người có ít hoặc không có nền tảng thống kê, làm cho điều quan trọng là có thể trình bày nội dung rõ ràng và hiểu biết.

Nó cũng thường hữu ích để bắt đầu một dự án khoa học dữ liệu bằng cách tạo các biểu đồ đơn giản để khám phá dữ liệu, trước khi phân tích thực tế.

Các công cụ để trực quan hóa có thể được tìm thấy trong cả R và Python, với một số khác biệt chính giữa hai. Nếu bạn đang tìm cách xác định ngôn ngữ nào phù hợp với bạn và các dự án của bạn, bài viết này có thể thú vị cho bạn.

Bài viết này bao gồm sự khác biệt cụ thể giữa R và Python về mặt trực quan hóa dữ liệu. & NBSP;

Trực quan trong r

Gói đồ họa để khám phá dữ liệu

R cung cấp một số gói cơ bản được cài đặt theo mặc định. Điều này bao gồm gói đồ họa, chứa khoảng 100 chức năng để tạo ra các lô truyền thống. Các chức năng chung rất đơn giản này cho phép bạn nhanh chóng tạo các hình ảnh đơn giản như Scatterplots, Boxplots và Biểu đồ. Điều này có ích cho việc thăm dò dữ liệu nhanh chóng.graphics package, which contains about 100 functions to create traditional plots. These very simple generic functions allow you to quickly create simple images such as scatterplots, boxplots, and histograms. This comes in handy for speedy data exploration.

Ví dụ: nếu chúng ta áp dụng hàm lô () cho bộ dữ liệu iris, chúng ta sẽ thấy một ma trận các biểu đồ phân tán tương ứng với ma trận tương quan của tất cả các cột. Điều này rất hữu ích để có được một cái nhìn tổng quan đơn giản về các mối quan hệ giữa các biến.plot() function to the iris dataset, we see a matrix of scatterplots corresponding to a correlation matrix of all of the columns. This is useful for getting a simple overview of the relationships between the variables.

plot(iris)

Hướng dẫn r vs python for data visualization - r so với python để trực quan hóa dữ liệu

Ví dụ, ở đây chúng ta có thể thấy rằng các biến petal.length và petal.width có mối tương quan tích cực với nhau.

Trực quan hóa với gói R GGPLOT2

Bên cạnh các chức năng âm mưu chung, R cũng cung cấp nhiều thư viện như GGPLOT2, mạng và cốt truyện, có thể tạo ra các loại lô khác nhau, cải thiện ngoại hình của chúng hoặc thậm chí làm cho chúng tương tác.ggplot2, lattice, and plotly, which can create different types of plots, improve their appearance, or even make them interactive.

Cụ thể, GGPLOT2 và trực quan hóa dữ liệu trong R GO HOUND. Với GGPLOT2, R cung cấp một hệ thống thanh lịch và linh hoạt để tạo ra các lô, theo cách tiếp cận nhiều lớp cho phép bạn tạo các lô từng bước: bắt đầu với dữ liệu, sau đó thêm tính thẩm mỹ của Hồi (như trục và vị trí của dữ liệu các điểm trên cốt truyện) và các yếu tố kiểu như đường, quy mô hoặc khoảng tin cậy. Ngữ pháp này về triết lý của đồ họa, trong đó các đối tượng được thêm vào cốt truyện trong các lớp, cho phép tạo ra hình ảnh tương đối đơn giản và trực quan.ggplot2 and data visualization in R go hand-in-hand. With ggplot2, R offers an elegant and versatile system for creating plots, following a layered approach that allows you to create plots step-by-step: starting with the data, then adding “aesthetics” (such as axes and the position of the data points on the plot), and style elements like lines, scales, or confidence intervals. This “Grammar of Graphics” philosophy, where objects are added to the plot in layers, allows a relatively simple and intuitive creation of images.

Tạo một cốt truyện đơn giản dựa trên bộ dữ liệu IRIS minh họa triết lý này. Đầu tiên, chúng tôi tạo cấu trúc cơ bản của biểu đồ của chúng tôi, chứa dữ liệu và trục. Biến nhóm nhóm của loài này cũng được chỉ định ở đây. Trong bước tiếp theo, các điểm dữ liệu được thêm vào. Cuối cùng, chúng tôi thêm một tiêu đề, thay đổi nhãn trục và tùy chỉnh nền.

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, col = Species)) +
  geom_point() +
  labs(title = "A Nice Iris Dataset Graphic", x = "Sepal Length", y = "Sepal Width") +
  theme_minimal()

Hướng dẫn r vs python for data visualization - r so với python để trực quan hóa dữ liệu

Tất nhiên, R cũng có thể được sử dụng để tạo ra các lô công phu hơn nhiều. Cốt truyện dưới đây là một ví dụ điển hình. & NBSP; Nó được lấy từ bài đăng trên blog (tiếng Đức) của chúng tôi Để chạy ví dụ sau, đường dẫn đến logo và bộ dữ liệu IPSOS.XLSX phải được điều chỉnh. Bộ dữ liệu có thể được tải xuống qua http://extras.springer.com/zip/2018/978-3-662-54819-6.zip

# devtools::install_github("INWTlab/ggCorpIdent")
library(ggCorpIdent)

ggCorpIdent(base_family = "Open Sans",
            textColor = "#000000",
            colors = c("#2B4894", "#cd5364", "#93BB51"),
            logo = "path/to/logo.png",
            logoSize = 0.1,
            logoTransparency = 0.8)

ipsos <- openxlsx::read.xlsx("path/to/ipsos.xlsx")
ipsos <- ipsos[order(ipsos$Wert),]
ipsos$Land <- ordered(ipsos$Land, ipsos$Land)
ipsos$textFamily <- ifelse(ipsos$Land %in% c("Deutschland","Brasilien"),
                           "bold", "plain")
ipsos$labels <- paste0(ipsos$Land, ifelse(ipsos$Wert < 10, "     ", "  "),
                       ipsos$Wert)
rect <- data.frame(
  ymin = seq(0, 80, 20),
  ymax = seq(20, 100, 20),
  xmin = 0.5, xmax = 16.5,
  colour = rep(c(grDevices::rgb(241, 243, 244,30,maxColorValue=255),
                 grDevices::rgb(241, 243, 244,0,maxColorValue=255)),
               length.out = 5))


ggBar <- ggplot(ipsos) +
  geom_bar(aes(x = Land, y = Wert), stat = "identity", width=.75) +
  geom_bar(aes(x = Land, y = ifelse(Land %in% c("Brasilien", "Deutschland"), Wert, NA)),
           stat = "identity", fill = "#93BB51", color = "#93BB51", width=.75) +
  geom_rect(data = rect,
            mapping = aes(ymin = ymin, ymax = ymax,
                          xmin = xmin, xmax = xmax),
            fill = rect$colour,
            color = grDevices::rgb(241, 243, 244,0,maxColorValue=255)) +
  geom_hline(aes(yintercept = 45), colour =  "#cd5364", size = 1) +
  scale_y_continuous(breaks = seq(0, 100, 20), limits = c(0, 100), expand = c(0, 0)) +
  scale_x_discrete(labels = ipsos$labels) +  
  coord_flip() +
  labs(y = NULL,
       x = NULL,
       title = NULL) +
  theme(panel.grid.minor = element_blank(),
        panel.grid.major = element_blank(),
        axis.text.y = element_text(
          face = ipsos$textFamily, hjust=0.99,vjust=0.5)) 

ggBar

library("grid")

vp_make <- function(x, y, w, h) 
  viewport(x = x, y = y, width = w, height = h, just = c("left", "bottom"))

main <- vp_make(0.05, 0.05, 0.9, 0.8)
title <- vp_make(0, 0.9, 0.6, 0.1)
subtitle <- vp_make(0, 0.85, 0.4, 0.05)
footnote <- vp_make(0.55, 0, 0.4, 0.05)
annotation1 <- vp_make(0.7, 0.85, 0.225, 0.05)
annotation2 <- vp_make(0.4, 0.85, 0.13, 0.05)

grid.newpage()
print(ggBar, vp = main)

grid.text("'Ich glaube fest an Gott oder ein höheres Wesen'",
          gp = gpar(fontfamily = "Lato Black", fontsize = 14),
          just = "left", x = 0.05, vp = title)

grid.text("...sagten 2010 in:",
          gp = gpar(fontfamily = "Lato Light", fontsize = 12),
          just = "left",
          x = 0.05, vp = subtitle)

grid.text("Quelle: www.ipsos-na.com, Design: Stefan Fichtel, ixtract",
          gp = gpar(fontfamily = "Lato Light", fontsize = 9),
          just = "right",
          x = 0.95, vp = footnote)

grid.text("Alle Angaben in Prozent",
          gp = gpar(fontfamily = "Lato Light", fontsize = 9),
          just = "right",
          x = 1, y = 0.55, vp = annotation1)

grid.text("Durchschnitt: 45",
          gp = gpar(fontfamily = "Lato Light", fontsize = 9),
          just = "right",
          x = 0.95, y = 0.55, vp = annotation2)

Hướng dẫn r vs python for data visualization - r so với python để trực quan hóa dữ liệu

Trực quan hóa trong Python

Không giống như R, Python - với tư cách là ngôn ngữ lập trình có mục đích chung của nhóm - không bao gồm các công cụ trực quan hóa dữ liệu theo mặc định. Tuy nhiên, Python cũng cung cấp nhiều thư viện cho mục đích này, chẳng hạn như Matplotlib và Seaborn.Matplotlib and Seaborn.

Python hiện cũng cung cấp nhiều gói (như Plotnine và GGPy) tương đương với GGPLOT2 trong R và cho phép bạn tạo các lô trong Python theo cùng một ngữ pháp của nguyên tắc đồ họa.plotnine and ggpy) which are equivalents of ggplot2 in R, and allow you to create plots in Python according to the same “Grammar of Graphics” principle.

Hình dung trong Python: Matplotlib

Thư viện được sử dụng phổ biến nhất để trực quan hóa dữ liệu trong Python là matplotlib. Matplotlib dựa trên các mảng numpy, và ban đầu được thiết kế như một sự thay thế python cho MATLAB, được phản ánh trong phần lớn cú pháp.Matplotlib. Matplotlib is based on NumPy arrays, and was originally designed as a Python alternative to Matlab, which is reflected in much of the syntax.

Một biểu đồ phân tán với tiêu đề đồ họa và nhãn trục - tương tự như ví dụ r - có thể được tạo bằng matplotlib bằng hàm scatter ().Matplotlib using the scatter() function.

import pandas as pd import matplotlib.pyplot as plt iris = pd.read_csv('iris.csv') plt.scatter(x = 'SepalLengthCm', y = 'SepalWidthCm', data = iris) plt.title('A Nice Iris Dataset Graphic') plt.xlabel('Sepal Length') plt.ylabel('Sepal Width')

Hướng dẫn r vs python for data visualization - r so với python để trực quan hóa dữ liệu

Trực quan hóa trong Python: Seaborn

Chúng ta có thể thấy rằng trong ví dụ trên, không có sự phân biệt màu nào được thực hiện giữa các loài mống mắt khác nhau. Để thêm điều này, hoặc một truyền thuyết (cũng bị thiếu trong cốt truyện này), đòi hỏi một số nỗ lực trong matplotlib. Chúng ta có thể sử dụng một thư viện khác, Seaborn, như một phần mở rộng của matplotlib để cho phép tạo ra cốt truyện tương đối đơn giản hơn. Ví dụ, để thêm màu sắc của loài và huyền thoại ở Seaborn, chúng ta chỉ cần giải pháp thẳng này:Matplotlib. We can use a different library, Seaborn, as an extension of Matplotlib to allow for comparatively simpler plot creation. For example, to add the species colors and the legend in Seaborn, we only need this straight-forward solution:

import seaborn as sns sns.scatterplot(x = 'SepalLengthCm', y = 'SepalWidthCm', hue = 'Species', data = iris)

Hướng dẫn r vs python for data visualization - r so với python để trực quan hóa dữ liệu

Chúng ta cũng có thể sử dụng Seaborn để xem tổng quan ban đầu về dữ liệu trong khung khám phá dữ liệu. Ví dụ: chúng ta có thể sử dụng hàm cặp ():Seaborn to see an initial overview of the data within the framework of data exploration. For example, we can use the pairplot() function:

Hướng dẫn r vs python for data visualization - r so với python để trực quan hóa dữ liệu

Chúng ta có thể thấy một con số tương tự như bản gốc mà chúng ta đã tạo với gói đồ họa R, cho thấy ấn tượng đầu tiên về mối quan hệ của các biến với nhau.graphics package, which shows a first impression of the relationship of the variables to one another.

Các lô công phu hơn cũng có thể được tạo ra trong Python. Đối với mục đích minh họa, chúng tôi đã tái tạo lại cốt truyện từ ví dụ R. Một điều cần lưu ý là mã ngắn hơn nhiều để tạo ra cốt truyện tương tự với Seaborn trong Python so với GGPLOT2 trong R.Seaborn in Python than it was with ggplot2 in R.

import pandas as pd import seaborn as sns import matplotlib.patches as patches import matplotlib.pyplot as plt df = pd.read_excel(r'Downloads/ipsos.xlsx') df['Land_Wert'] = df['Land'] + [' ' if len(str(x)) < 2 else ' ' for x in df.Wert ] + df['Wert'].map(str) sns.set_style("white", {"axes.facecolor": "#E0E4E6", "axes.edgecolor": "1", "patch.force_edgecolor": False, "font.family": "Open Sans"}) barcolor = ["#93bb51" if (x == "Brasilien" or x == "Deutschland") else "#2B4894" for x in df.Land] plt.figure(figsize=(10,7)) fig, p = plt.subplots(figsize=(10, 7)) p = sns.barplot(x = df.Wert, y = df.Land_Wert, palette = barcolor) p.set_ylabel('') p.set_xlabel('') p.axvline(45, color = "#bc423a") p.add_patch(patches.Rectangle((20, -1), 20, 20, color = "#f1f3f4", alpha = .25)) p.add_patch(patches.Rectangle((60, -1), 20, 20, color = "#f1f3f4", alpha = .25)) p.text(-20, -2, "'Ich glaube fest an Gott oder ein höheres Wesen'", horizontalalignment='left', size='large', color='black', weight='bold') p.text(-20, -1, "...sagten 2010 in:") p.text(33, -1, "Durchschnitt: 45", size = "small") p.text(80, -1, "Alle Angaben in Prozent", size = "small") p.text(58, 17, "Quelle: www.ipsos-na.com, Design: Stefan Fichtel, ixtract", size = "small") p.get_yticklabels()[2].set_fontweight("bold") p.get_yticklabels()[11].set_fontweight("bold") im = plt.imread('path/to/logo.png') newax = fig.add_axes([.7, 0.125, 0.2, 0.2], anchor='SE', zorder = 1) newax.imshow(im) newax.axis('off')

Hướng dẫn r vs python for data visualization - r so với python để trực quan hóa dữ liệu

Bản tóm tắt

Nhìn chung, cả R và Python đều được trang bị tốt để trực quan hóa dữ liệu. R là một ngôn ngữ chủ yếu để phân tích dữ liệu, được biểu hiện trong thực tế là nó cung cấp nhiều gói được thiết kế để trực quan khoa học. Python, mặt khác, là một ngôn ngữ lập trình đa năng cũng có thể được sử dụng để phân tích dữ liệu và cung cấp nhiều giải pháp tốt để trực quan hóa dữ liệu.

Tùy chỉnh đồ họa dễ dàng hơn và trực quan hơn trong R với sự trợ giúp của GGPLOT2 so với trong Python với matplotlib. Thư viện Seaborn giúp khắc phục điều này, và cung cấp các giải pháp tiêu chuẩn tốt có được với tương đối ít dòng mã. Ví dụ của chúng tôi cho thấy rõ rằng Seaborn thường có thể hoàn thành các lô tương tự với GGPLOT2, nhưng với ít mã hơn.ggplot2 than in Python with Matplotlib. The Seaborn library helps to overcome this, and offers good standard solutions which get by with relatively few lines of code. Our example clearly shows that Seaborn can often accomplish similar plots to ggplot2, but with less code.

Nhìn chung, có một số bất đồng về việc ngôn ngữ lập trình có thể được sử dụng để tạo ra các lô hiệu quả hơn, rõ ràng và trực giác hơn. Chúng tôi cũng không thể đi đến một kết luận quyết định về điểm này.

Về cơ bản, quyết định giữa R và Python nên xem xét các sở thích và kinh nghiệm về ngôn ngữ lập trình của người dùng. Cuối cùng, cả hai ngôn ngữ đều cung cấp khả năng trực quan hóa dữ liệu một cách rõ ràng và hấp dẫn.

Có lẽ bạn biết các trường hợp sử dụng cụ thể mà bạn nghĩ rằng một ngôn ngữ phù hợp hơn, hoặc nghĩ rằng có những ưu điểm và nhược điểm cụ thể đối với một trong số chúng về mặt trực quan hóa dữ liệu? Hãy liên hệ với chúng tôi và cho chúng tôi biết suy nghĩ của bạn!

R tốt hơn Python cho trực quan hóa?

Mặc dù Python thường được ca ngợi là một ngôn ngữ có mục đích chung với cú pháp dễ hiểu, chức năng của R được phát triển với các nhà thống kê, do đó mang lại cho nó những lợi thế cụ thể của trường như các tính năng tuyệt vời để trực quan hóa dữ liệu.R's functionality was developed with statisticians in mind, thereby giving it field-specific advantages such as great features for data visualization.

Cái nào tốt hơn r hoặc python để phân tích dữ liệu?

Nếu bạn đam mê tính toán thống kê và trực quan hóa dữ liệu của phân tích dữ liệu, r có thể phù hợp với bạn.Mặt khác, nếu bạn quan tâm đến việc trở thành một nhà khoa học dữ liệu và làm việc với dữ liệu lớn, trí tuệ nhân tạo và thuật toán học sâu, Python sẽ phù hợp hơn.

Python có tốt cho trực quan hóa dữ liệu không?

Python ngày nay là một trong những ngôn ngữ phổ quát đơn giản phổ biến nhất để trực quan hóa dữ liệu và thậm chí nhiều hơn.Nó thường là lựa chọn tốt nhất để giải quyết các vấn đề trong học máy, học sâu, trí tuệ nhân tạo, v.v.Nó hướng đối tượng, dễ sử dụng và thân thiện với nhà phát triển do mã dễ đọc.one of the most popular simple universal languages for data visualization and even more. It is often the best choice for solving problems in Machine Learning, Deep Learning, Artificial Intelligence, and so on. It is object-oriented, easy to use, and developer-friendly due to its highly readable code.

R có được sử dụng để trực quan hóa dữ liệu không?

R là một ngôn ngữ được thiết kế để điện toán thống kê, phân tích dữ liệu đồ họa và nghiên cứu khoa học.Nó thường được ưa thích để trực quan hóa dữ liệu vì nó cung cấp tính linh hoạt và mã hóa cần thiết tối thiểu thông qua các gói của nó.It is usually preferred for data visualization as it offers flexibility and minimum required coding through its packages.