R 和 Python 数据可视化必备库的精华指南
原文:
towardsdatascience.com/the-essential-guide-to-r-and-python-libraries-for-data-visualization-33be8511c976
成为某些编程语言的专业人士是每位有志于数据科学的专业人士的目标。在无数语言中达到一定水平是每个人的关键里程碑。
对于数据工程师来说,SQL 可能是最重要的语言。作为一名 Web 开发者,你需要熟睡时就知道 JavaScript、HTML、CSS 和 PHP。对于数据科学家来说,另一方面,Python 和 R 是首选工具。这两种语言都有其优势和劣势 – 并且两者都提供了强大的工具和庞大的社区来分析和可视化数据。
如果你刚刚开始你的数据科学之旅,选择 R 和 Python 可能会让你感到不知所措。但如果你想在长期内进入这个领域,你迟早会接触到这两种语言。此外,如果你已经在大学里,你可能已经学习了这两种语言的相关课程。
但让我们深入探讨 R 和 Python 中用于数据可视化的最重要库,了解在 R 和 Python 中创建图表的不同之处(附代码示例),以及两种语言的优缺点。
目录1 – R 成为必备之选的原因(以及可视化必备库) 2 – Python 无处不在:从数据分析到 Web 开发(以及可视化必备库) 3 – 步骤指南:使用代码示例在 R 和 Python 中创建图表 4 – 优缺点:比较 R 与 Python 在数据科学中的应用 5 – 最后的想法以及继续学习的方向
1 – R 成为必备之选的原因?
R 是在 20 世纪 90 年代在奥克兰大学开发的,专门用于统计分析与图形表示。R 特别适合统计分析、假设检验、数据处理和可视化表示。如果你想进入学术界并参与研究项目,R 无论如何都是必需的(尤其是在生物统计学、社会科学、心理学与经济学等领域)。在 CRAN(综合 R 存档网络)上,你可以找到成千上万的 R 包,它们都托管在那里。
你应该知道的 R 可视化必备库
R 拥有无数的库。当涉及到数据可视化时,有不同库各自的优势。以下是你绝对应该知道的 6 个重要库:
1. ggplot2你无论如何都需要了解这个库 – 它是 R 社区中无可争议的经典之作。你可以用它来创建用户自定义的高质量可视化。
2. plotly使用Plotly,你可以创建交互式图表。例如,用户可以放大图表或切换到不同的视图。酷的是,你还可以将它们集成到 Web 应用和仪表板中。
3. lattice如果你需要一个 ggplot2 的替代品,你可以使用Lattice来创建多层图表。ggplot2 更为常见,但 lattice 在初学者看来更简单,因此得分更高。
4. shiny如果你需要一个实时展示数据的方法,Shiny 是一个好的选择。你可以用它直接在 R 中开发交互式网络应用。你也可以将使用 ggplot2 或 plotly 创建的可视化集成到仪表板中。
5. leaflet如果你想要创建交互式地理地图,最好使用这个库。你可以用它创建交互式地图,你还可以通过添加额外的图层、标记和弹出窗口来自定义这些地图。
6. esquisse我最近发现了 esquisse。如果你想要快速创建原型,它特别适合。这是一个可视化工具,允许你通过拖放的方式创建基于 ggplot2 的可视化。这意味着你可以不写一行代码就创建可视化。然后你可以导出底层的 ggplot2 代码来进一步自定义你的图表。这个库可能值得单独写一篇文章…
2 – Python 无处不在:从数据分析到 Web 开发
你知道蒙提·派森吗?如果你不知道,你绝对应该看看这个英国喜剧团体的片段。Python 是以蒙提·派森喜剧团体命名的(不是那条蛇……)并在 1991 年开发(有时幽默有点黑暗,需要一点时间——但绝对是一经典):
www.youtube.com/watch?v=xxamBlMta94
但回到主题:这种语言被设计成易于阅读和具有清晰的语法。Python 可以说是一种“万能”的语言:你可以在数据分析中使用它,也可以用于机器学习、深度学习或 Web 开发(例如使用 Django 框架)。
与 R 的 CRAN 类似,Python 使用 PyPi(Python Package Index)作为其中心仓库,拥有大量的库可供安装。虽然 R 主要用于统计和科研领域,但 Python 几乎被所有行业使用。随着机器学习和大数据变得越来越重要,Python 也变得越来越重要,因为 Python 是机器学习的绝对首选语言(使用 scikit-learn、TensorFlow、Keras 和 PyTorch)。
你应该知道的用于可视化的 Python 库
我在这里整理了 8 个你绝对需要知道的库:
1. matplotlib即使您是初学者,您几乎肯定之前已经遇到过这个 库。使用这个库,您可以创建各种 2D 图表——从简单的折线图和直方图到复杂的子图。它为您提供了对图表的很多控制。例如,如果您创建了一个条形图,您可以在代码中调整坐标轴、颜色、字体,甚至条形的宽度。然而,对于复杂的可视化来说,它通常有点繁琐——例如,如果您想组合多个图表,代码会变得更长、更复杂。
2. seaborn这个 库 基于 matplotlib。它特别适合制作热图、配对图和箱线图等统计可视化。您还可以使用 seaborn 直接处理您的表格(pandas DataFrames),无需先转换数据。这使得您能够相对快速地识别数据中的初始模式、趋势和相关性。该库在探索性数据分析(EDA)方面特别有用。在我的最近一篇文章《掌握时间序列数据:在 Python 应用机器学习之前,初学者必须掌握的 9 个关键步骤》中,您可以找到一些 EDA 的重要步骤。
3. plotly如果您想创建交互式可视化,如 3D 图表、地理地图或仪表板,请使用 plotly。您可以放大图表、突出显示数据点或切换视图。这个库的伟大之处在于,您还可以轻松地将图表集成到 Web 应用程序中。如果您刚开始使用 Python,plotly.express API 是一个轻松入门的好方法。
4. pandas当然,pandas 不仅仅是一个用于可视化的库,它几乎适用于任何数据操作任务。如果您想可视化数据,可以直接使用 pandas 从 DataFrame 创建。通过使用‘df.plot()’方法,您可以轻松创建线图、条形图或散点图。如果您想在深入分析之前快速轻松地了解您的数据,pandas 绝对是一个不错的选择。
5. bokeh如果您想创建可以直接嵌入 HTML 的交互式仪表板,这个 库 是理想的选择。bokeh 专门为交互式、Web 友好的可视化而开发。该库以其快速的渲染时间而著称,尤其是在处理大型数据集时。
6. altair说是 R 中 ggplot2 的对立面——语法非常相似。Altair非常适合探索性数据分析(EDA),您可以快速轻松地创建有意义的图表。
7. holoviewss需要非常快速且不想编写大量代码吗?那么创建可视化最佳的方式就是使用 holoviews。您可以用最少的代码创建交互式图表,这使得库非常适合原型设计或需要快速反馈的情况。
8. folium使用 folium,您可以创建交互式地理地图和可视化。它基于 leaflet.js,允许您创建带有标记、热图或聚类的地图。例如,您可以在世界地图上显示数据点或进行地理分析。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2e8ff9139a29adb2d64a3aad27de8eba.png
自己的可视化 - 来自 unDraw.co 的插图
3 – 步骤指南:使用代码示例在 R 和 Python 中创建图表
开始的最佳方式是打开 RStudio 或 Jupyter Lab,并逐步运行代码示例。
使用 R 运行可视化所需的前提条件
在任何情况下,您必须已经下载了 R 和 RStudio。然后我们使用以下命令安装用于可视化的库:
# Installing Packages for Rinstall.packages(c("ggplot2","plotly","leaflet"))为了使可视化易于重现,我们使用内置数据集‘mtcars’,其中包含如马力、重量和燃油消耗等车辆数据。我们使用以下命令加载数据集:
# Loading data for Rdata(mtcars)# Loads the built-in mtcars dataset into memory使用 Python 创建可视化所需的前提条件
当然,您需要安装 Python。我也使用 Jupyter Lab 来展示代码示例(如果您更喜欢使用 VSCode,这也是一个好的替代方案)。我使用 Anaconda(这是一个使您更容易开始的 Python 发行版)。如果您不使用 Anaconda,您可以使用 pip 安装以下包。为了确保库之间没有冲突,我使用以下命令创建一个单独的环境:
conda create--name NameEnvironment python=3.10在这篇文章“Python 数据分析生态系统 - 初学者路线图”中,您将找到有关如何开始的更详细说明。
在我们激活环境(conda activate NameEnvironment)之后,我们安装所需的库:
# Installing Packages for Pythonconda install matplotlib seaborn pandas plotly folium安装完库后,您可以通过在终端中输入“jupyter lab”来启动 Jupyter lab。
现在我们加载一个直接集成到 Pandas 中的样本数据集。尽管这个样本数据集的数据不如真实数据有趣,但这样更容易通过代码示例进行操作。Iris 数据集包含 150 个关于三种鸢尾花物种的观察结果,每个物种有四个特征(萼片长度、萼片宽度、花瓣长度、花瓣宽度)以及相应的花种。
# Python-Visualization# Importing the librariesfromsklearn.datasetsimportload_irisimportpandasaspdimportmatplotlib.pyplotaspltimportseabornassnsimportnumpyasnp# Loading the Iris dataset as a pandas DataFrameiris=load_iris(as_frame=True)df=iris.frame# Displaying the first 5 rows of the datasetprint(df.head())创建基本图表
直方图首先我们使用 R 创建直方图来可视化马力(hp)的分布:我们加载数据集并在‘hist’后指定数据集和列。我们使用‘main’和‘xlab’来标记图表和轴。我们使用‘col’定义填充颜色,使用‘border’定义边框颜色。
# R-Visualization# Histogram for Horsepower (hp) in the mtcars Datasethist(mtcars$hp,main="Histogram of Horsepower",xlab="Horsepower",col="skyblue",border="black")# Creates a histogram for the hp column# Adding gridlines for better readabilitygrid(nx=NULL,ny=NULL,col="gray",lty="dotted")使用 Python,我们使用 matplotlib 创建一个直方图,显示 Iris 数据集中‘花萼长度’的分布:我们使用区间将数据分成 10 个区间。当你创建直方图时,区间表示分布显示的粒度级别。从 5 到 10 个区间通常是好的标准,并为你提供了一个关于数据分布的稳固概述。如果你选择更少的区间,你会看到更多的总体趋势但细节较少。使用更多的区间,你可以更精确地识别细节和模式,但图表可能会显得混乱。特别是如果你处理的是较小的数据集(<100 个值),5-10 个区间通常是有意义的。
# Python-Visualization# Histogram for Sepal Length in the Iris Datasetplt.hist(df['sepal length (cm)'],bins=10,color='skyblue',edgecolor='black')# Creates a histogram for Sepal Lengthplt.title('Histogram of Sepal Length')# Adds a title to the plotplt.xlabel('Sepal Length (cm)')# Labels the x-axisplt.ylabel('Frequency')# Labels the y-axis# Add gridlines for better readabilityplt.grid(axis='y',linestyle='--',alpha=0.7)plt.show()# Displays the plot条形图我们使用条形图来比较分类数据。首先,我们在 R 中分析 mtcars 数据集中不同气缸数的汽车的频率分布:与直方图不同,我们不仅需要选择 dataframe 和列,还需要使用‘table()’来创建一个表格,统计每个气缸数的频率。这有助于我们了解每个气缸类别在数据集中出现的频率。
# R-Visualization# Bar chart for cylinders in the mtcars datasetbarplot(table(mtcars$cyl),main="Number of Cylinders in Cars",xlab="Cylinders",ylab="Frequency",col="orange",cex.names=0.8)# Adjusts the axis label size在 Python 中,我们创建一个条形图来分析 Iris 数据集中每个目标类别(即花类型)的频率:使用‘[‘target’]’我们统计每个目标类别在 DataFrame 中出现的频率。每个类别代表三种鸢尾花类型中的一种。然后我们使用‘plot()’中的信息来指定创建一个带有橙色条和黑色边框的条形图。这有助于我们可视化数据集中花类型的分布。
# Python-Visualization# Bar chart for target classes in the Iris datasetdf['target'].value_counts().plot(kind='bar',color='orange',edgecolor='black')# Creates the bar chartplt.title('Frequency of Target Classes')# Adds a title to the plotplt.xlabel('Iris Flower Type')# Labels the x-axisplt.ylabel('Frequency')# Labels the y-axisplt.xticks(rotation=0)# Ensures x-axis labels are horizontalplt.show()# Displays the plot散点图我们使用散点图来可视化两个数值变量之间的关系。在 R 中,我们检查发动机功率(hp)和汽车重量(wt)之间的关系。这样的图表帮助我们识别变量之间可能存在的模式或相关性。例如,我们可以测试假设较重的汽车倾向于有更多的马力。我们首先指定我们想要比较的两个变量。使用‘pch=19’我们定义点的形状——这里点是填充的圆形,使用‘col’它们以蓝色显示。或者,你也可以使用‘pch=17’来创建填充的三角形或使用‘pch=0’来创建空心的正方形:
# R-Visualization# Scatter plot for Horsepower (hp) vs. Car Weight (wt) in the mtcars datasetplot(mtcars$hp,mtcars$wt,main="Scatter Plot: Horsepower vs. Weight",xlab="Horsepower",ylab="Weight",pch=19,col="blue")要补充的是:为了更好地识别趋势,我们可以通过添加以下命令来添加回归线:
# R-Visualization# Adding a regression lineabline(lm(mtcars$wt~mtcars$hp),col="darkgreen",lwd=2)在 Python 中,我们可视化花瓣长度和花瓣宽度之间的关系。例如,我们可以检查较大的花瓣是否也更宽。在第一行,我们输入 x 轴和 y 轴的值,并将点着色为蓝色。通过设置alpha=0.7,我们指定点应该稍微透明,这样当它们重叠时我们仍然可以轻松地看到点。
# Python-Visualization# Scatter plot for Sepal Length vs. Sepal Widthplt.scatter(df['sepal length (cm)'],df['sepal width (cm)'],color='blue',alpha=0.7)plt.title('Scatter Plot: Sepal Length vs. Sepal Width')plt.xlabel('Sepal Length (cm)')plt.ylabel('Sepal Width (cm)')plt.show()待补充:对于这个小型数据集,我们可以使用 NumPy 来计算和绘制回归线。如果数据集更大,则最好使用 seaborn。
# Python-Visualization# Calculate data for the regression linex=df['sepal length (cm)']y=df['sepal width (cm)']m,b=np.polyfit(x,y,1)# Calculates slope (m) and y-intercept (b)# Scatter plotplt.scatter(x,y,color='blue',alpha=0.7,s=50)# Add point size for better visibilityplt.plot(x,m*x+b,color='red',linewidth=2,label='Regression Line')# Add regression lineplt.title('Scatter Plot: Sepal Length vs. Sepal Width')plt.xlabel('Sepal Length (cm)',fontsize=12)plt.ylabel('Sepal Width (cm)',fontsize=12)plt.legend()# Adds a legend to distinguish the regression lineplt.show()带有地理地图的交互式图表
最后,我们希望可视化一个交互式的地理地图,标记你已经访问过的地点,例如。在 R 中,我们使用 leaflet 来实现这个功能:首先,我们使用leaflet()创建一个空的地图对象。通过addTiles()添加默认地图瓦片。然后,使用addMarkers()在地图上添加标记的位置。
# R-Visualizationlibrary(leaflet)# Interactive map with Leafletleaflet()%>%addTiles()%>%addMarkers(lng=-0.1278,lat=51.5074,popup="London")%>%addMarkers(lng=2.3522,lat=48.8566,popup="Paris")在 Python 中,我们使用 folium 库:使用folium.Map()创建地图。location指定地图的起始位置。zoom_start设置一个初始缩放级别,以便我们从欧洲的概览开始。然后,我们使用folium.Marker()添加标记。最后,我们将地图保存为可以在浏览器中打开的 HTML 文件。
# Python-Visualizationimportfolium# Locations and their coordinateslocations=[{"name":"London","coords":[51.5074,-0.1278]},{"name":"Paris","coords":[48.8566,2.3522]}]# Interactive map with Foliumm=folium.Map(location=[51.5074,-0.1278],zoom_start=5)# Initial view set to London# Add markers for each locationforlocationinlocations:folium.Marker(location["coords"],popup=location["name"]).add_to(m)# Save the map as an HTML filem.save('map.html')4 – 优势和劣势:比较 R 与 Python 在数据科学中的应用
R 语言是专门为统计和数据分析开发的,使用时你可以感受到这一点。
但这种编程语言的优缺点是什么?
R 的优势
在统计与数据分析方面的优势R 语言特别优化了统计操作和可视化。使用该语言时,这一点很快就会显现出来。R 语言还提供了广泛的回归、假设检验和数据建模功能。
社区与开源R 语言拥有一个非常活跃的社区,他们不断开发新的包,并且你可以通过这个社区在互联网上找到许多资源。此外,该语言是开源的,因此对所有人都是免费且可访问的。
集成到其他环境你可以轻松地将 R 集成到其他环境中。例如,你可以将 R 集成到 Jupyter Notebooks 中进行交互式分析,使用 shiny 仪表板来显示结果,或者使用如
httr和jsonlite等包来使用 API。R 允许你通过DBI和RPostgreSQL等包直接访问关系数据库。
那么 R 的劣势是什么呢?
学习曲线较陡与 Python 相比,R 语言的语法对初学者来说可能更难。此外,错误信息通常不太直观。R 语言中不太直观的错误信息的一个例子是常见的“对象未找到”错误。当你在环境中引用一个不存在变量或对象时,通常会看到这个消息,通常是由于简单的拼写错误或忘记定义变量。
性能当处理大型数据集时,R 可能比 Python 慢。R 在机器学习和深度学习方面也不太适合:虽然 R 通过像‘caret’或‘randomForest’这样的库提供了一些机器学习的支持,但它不如 Python 的 TensorFlow 和 PyTorch 框架那样全面。
应用范围较窄R 主要专注于在统计领域的使用。对于其他任务,如 Web 开发或机器学习,R 不能像 Python 那样广泛使用。
Python 是最多才多艺和最广泛使用的编程语言之一。但即使是 Python,也不是适合所有事情:
让我们从 Python 的优点开始:
易于学习Python 拥有非常直观且易于理解的语法,这与英语有很多相似之处。如果你是初学者,Python 通常是被推荐的语言。例如,考虑以下 Python 代码用于条件语句:
if age >= 18: print("You are an adult.") else: print("You are not an adult.")多才多艺这个语言的优点在于它不仅适合数据科学。一旦你掌握了这门语言,你还可以用它来进行自动化、Web 开发和当然,机器学习。
庞大的社区与 R 一样,Python 有一个庞大的社区,提供各种库和资源。Python 也是开源的,因此对每个人都是免费可用的。
性能通过 NumPy、Pandas 和 Dask 等库,Python 拥有处理大量数据的高效库。查看我的文章“Python 中的 NumPy 和 Pandas 的实际深入探讨:数据分析”以了解 Numpy 和 Pandas 的概述。
那么,Python 的缺点是什么?
不专注于统计如果你想要进行复杂的统计分析,并且你的主要关注点是统计,R 可能是更好的选择。
性能如果你将 Python 与其他编译型编程语言(如 C++或 Java)进行比较,Python 可能会慢一些。你可以通过 NumPy 或 Cython 等库来最小化这一劣势。
5 – 最后的想法
何时使用 R?何时使用 Python?
如果你是一个编程新手或者正在寻找一种多用途的语言,Python 可能是最佳选择。然而,这两种编程语言都是不错的选择。如果你的主要关注点是统计和数据可视化,R 可能是一个更好的选择。
但选择 R 和 Python 之间的重要性几乎不亚于理解数据分析的基本原则:你如何清理原始数据并为其分析做准备?你需要采取哪些步骤来进行探索性数据分析(EDA),以识别数据中的模式和关系?哪些可视化最适合向他人展示你的结果?
除了 R 和 Python,还有其他在数据分析与可视化中重要的语言和工具。其中之一是 Julia,它在数值计算和科学计算方面尤其快速高效。还有 MATLAB,它拥有强大的可视化和计算功能。由于其在特定领域的强大计算能力和易用性,MATLAB 在学术界和工程界被广泛使用。然而,它相对昂贵且灵活性较低。Tableau 和 Power BI 是创建交互式可视化而无需编程技能的出色工具,并且在商业环境中被广泛使用。当然,还有 Excel,它几乎允许任何人在不需要了解编程语言的情况下轻松创建许多可视化。虽然 Excel 是初学者的优秀工具,但当处理大型数据集时,其局限性变得明显。
你可以在哪里继续学习?
Medium – 初学者探索关键数学概念的旅程:应用数据分析简化
GeeksForGeeks – R 编程中的 Esquisse 包
DataCamp 课程 – Python 数据科学入门 (无联盟链接,只有第一部分是免费的)
DataCamp 课程 – R 语言入门 (无联盟链接,只有第一部分是免费的)
IBM 博客 – Python 与 R 的区别是什么?
