>백엔드 개발 >파이썬 튜토리얼 >8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

WBOY
WBOY앞으로
2023-04-11 23:43:211877검색

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

안녕하세요 여러분, 저는 Python 인공 지능 기술입니다

Python을 사용하여 프로젝트를 수행하는 것을 좋아하는 친구들은 필연적으로 다음과 같은 상황에 직면하게 됩니다. 차트를 만들 때 어떤 종류의 보기 좋고 실용적인 시각화 도구 키트를 사용해야 합니까? 이전 기사에 아름다운 차트가 등장하면 독자들은 항상 차트를 만드는 데 어떤 도구를 사용했는지 묻는 메시지를 배경으로 남깁니다. 아래에서 저자는 Python으로 구현된 8가지 시각화 도구 패키지를 소개하며, 그 중 일부는 다른 언어에서도 사용할 수 있습니다. 와서 어떤 것을 좋아하시나요?

파이썬으로 그래픽을 만드는 방법은 여러 가지가 있는데 어떤 방법이 가장 좋을까요? 시각화를 수행하기 전에 먼저 이미지 대상에 대한 몇 가지 질문을 명확히 해야 합니다. 데이터 분포에 대한 사전 이해를 원하십니까? 발표할 때 사람들에게 깊은 인상을 주고 싶으십니까? 누군가에게 내면의 이미지, 중간의 이미지를 보여주고 싶나요?

이 기사에서는 이러한 패키지의 장점과 단점, 적합한 시나리오를 포함하여 일반적으로 사용되는 Python 시각화 패키지를 소개합니다. 이 기사는 2D 차트로만 확장되므로 3D 차트 및 비즈니스 보고서(대시보드)에 대한 다음 설명을 위해 약간의 공간을 남겨둡니다. 그러나 이번에 설명할 패키지 중 상당수는 3D 차트 및 비즈니스 보고서를 잘 지원할 수 있습니다.

Matplotlib, Seaborn 및 Pandas

이 세 가지 패키지를 함께 묶는 데는 여러 가지 이유가 있습니다. 첫째, Seaborn과 Pandas는 Matplotlib를 기반으로 구축되었습니다. Seaborn이나 Pandas에서 df.plot()을 사용할 때 이렇게 합니다. 실제로 Matplotlib을 사용하여 다른 사람이 작성한 코드를 사용했습니다. 따라서 그래픽은 미화 측면에서 유사하며 그래픽을 사용자 정의할 때 사용되는 구문도 매우 유사합니다.

이러한 시각화 도구에 관해서는 탐색, 데이터 및 분석이라는 세 가지 단어가 떠오릅니다. 이러한 패키지는 처음으로 데이터를 탐색하는 데 적합하지만 프레젠테이션에는 충분하지 않습니다.

Matplotlib는 하위 수준 라이브러리이지만 지원하는 사용자 정의 수준은 놀랍습니다(따라서 단순히 데모 패키지에서 제외하지 마십시오!). 하지만 데모에 더 적합한 다른 도구도 있습니다.

Matplotlib에서는 ggplot2 및 xkcd와 같은 인기 있는 미화 도구를 시뮬레이션하는 스타일 선택도 가능합니다. 다음은 Matplotlib 및 관련 도구를 사용하여 만든 그래프 예시입니다.

농구팀 연봉 데이터를 처리하는 동안 중간 연봉이 가장 높은 팀을 찾고 싶었습니다. 결과를 보여주기 위해 각 팀의 급여를 막대 차트에 색상으로 구분하여 선수가 어떤 팀에 합류하는 것이 더 나은지 설명했습니다.

import seaborn as sns
import matplotlib.pyplot as plt
color_order = ['xkcd:cerulean', 'xkcd:ocean',
 'xkcd:black','xkcd:royal purple',
 'xkcd:royal purple', 'xkcd:navy blue',
'xkcd:powder blue', 'xkcd:light maroon',
 'xkcd:lightish blue','xkcd:navy']
sns.barplot(x=top10.Team,
 y=top10.Salary,
 palette=color_order).set_title('Teams with Highest Median Salary')
plt.ticklabel_format(style='sci', axis='y', scilimits=(0,0))

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

두 번째 그래프는 회귀 실험에서 얻은 잔차의 Q-Q 플롯입니다. 이 다이어그램의 주요 목적은 비록 아름답지는 않더라도 가능한 한 적은 수의 선으로 유용한 다이어그램을 만드는 방법을 보여주는 것입니다.

import matplotlib.pyplot as plt
import scipy.stats as stats
#model2 is a regression model
log_resid = model2.predict(X_test)-y_test
stats.probplot(log_resid, dist="norm", plot=plt)
plt.title("Normal Q-Q plot")
plt.show()

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

Matplotlib 및 관련 도구는 매우 효율적이지만 프레젠테이션 측면에서 최고의 도구는 아닌 것으로 나타났습니다.

ggplot(2)

"Aaron, ggplot은 R에서 가장 일반적으로 사용되는 시각화 패키지인데 Python 패키지를 작성하고 싶지 않으세요?"라고 물으실 수도 있습니다. 사람들은 Python에서 ggplot2를 구현하여 미화부터 구문까지 이 패키지에 대한 모든 것을 복제했습니다.

내가 살펴본 모든 자료에서 모든 것이 ggplot2와 매우 유사해 보이지만 이 패키지의 좋은 점은 Pandas Python 패키지에 의존한다는 것입니다. 그러나 Pandas Python 패키지는 최근 일부 메서드를 더 이상 사용하지 않아 Python 버전이 호환되지 않게 되었습니다.

R에서 실제 ggplot을 사용하고 싶다면(외관, 느낌, 구문은 종속성을 제외하고 동일함) 다른 기사에서 이에 대해 논의했습니다.

즉, Python에서 ggplot을 사용해야 한다면 Pandas 버전 0.19.2를 설치해야 하지만, 낮은 수준의 플로팅 패키지를 사용하기 위해 Pandas 버전을 낮추지 않는 것이 좋습니다.

ggplot2(Python의 ggplot도 포함되어 있다고 생각합니다)가 중요한 이유는 그림을 구성하기 위해 "그래픽 문법"을 사용한다는 것입니다. 기본 전제는 차트를 인스턴스화한 다음 다양한 기능을 별도로 추가할 수 있다는 것입니다. 즉, 제목, 축, 데이터 포인트, 추세선 등을 별도로 아름답게 꾸밀 수 있습니다.

아래는 ggplot 코드의 간단한 예입니다. 먼저 ggplot을 사용하여 플롯을 인스턴스화하고 미화 속성과 데이터를 설정한 다음 점, 테마, 축 및 제목 레이블을 추가합니다. 또한, 공개 계정인 리눅스를 검색하고 백그라운드에서 "git books"라고 답하면 깜짝 선물 패키지를 얻을 수 있다.

#All Salaries
ggplot(data=df, aes(x=season_start, y=salary, colour=team)) +
 geom_point() +
 theme(legend.position="none") +
 labs(title = 'Salary Over Time', x='Year', y='Salary ($)')

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

Bokeh

Bokeh 很美。从概念上讲,Bokeh 类似于 ggplot,它们都是用图形语法来构建图片,但 Bokeh 具备可以做出专业图形和商业报表且便于使用的界面。为了说明这一点,我根据 538 Masculinity Survey 数据集写了制作直方图的代码:

import pandas as pd
from bokeh.plotting import figure
from bokeh.io import show
# is_masc is a one-hot encoded dataframe of responses to the question:
# "Do you identify as masculine?"
#Dataframe Prep
counts = is_masc.sum()
resps = is_masc.columns
#Bokeh
p2 = figure(title='Do You View Yourself As Masculine?',
 x_axis_label='Response',
 y_axis_label='Count',
 x_range=list(resps))
p2.vbar(x=resps, top=counts, width=0.6, fill_color='red', line_color='black')
show(p2)
#Pandas
counts.plot(kind='bar')

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

用 Bokeh 表示调查结果

红色的条形图表示 538 个人关于「你认为自己有男子汉气概吗?」这一问题的答案。9~14 行的 Bokeh 代码构建了优雅且专业的响应计数直方图——字体大小、y 轴刻度和格式等都很合理。

我写的代码大部分都用于标记坐标轴和标题,以及为条形图添加颜色和边框。在制作美观且表现力强的图片时,我更倾向于使用 Bokeh——它已经帮我们完成了大量美化工作。

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

用 Pandas 表示相同的数据

蓝色的图是上面的第 17 行代码。这两个直方图的值是一样的,但目的不同。在探索性设置中,用 Pandas 写一行代码查看数据很方便,但 Bokeh 的美化功能非常强大。

Bokeh 提供的所有便利都要在 matplotlib 中自定义,包括 x 轴标签的角度、背景线、y 轴刻度以及字体(大小、斜体、粗体)等。下图展示了一些随机趋势,其自定义程度更高:使用了图例和不同的颜色和线条。

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

Bokeh 还是制作交互式商业报表的绝佳工具。

Plotly

Plotly 非常强大,但用它设置和创建图形都要花费大量时间,而且都不直观。在用 Plotly 忙活了大半个上午后,我几乎什么都没做出来,干脆直接去吃饭了。我只创建了不带坐标标签的条形图,以及无法删掉线条的「散点图」。Ploty 入门时有一些要注意的点:

  •  安装时要有 API 秘钥,还要注册,不是只用 pip 安装就可以;
  •  Plotly 所绘制的数据和布局对象是独一无二的,但并不直观;
  •  图片布局对我来说没有用(40 行代码毫无意义!)

但它也有优点,而且设置中的所有缺点都有相应的解决方法:

  •  你可以在 Plotly 网站和 Python 环境中编辑图片;
  •  支持交互式图片和商业报表;
  •  Plotly 与 Mapbox 合作,可以自定义地图;
  •  很有潜力绘制优秀图形。

以下是我针对这个包编写的代码:

#plot 1 - barplot
# **note** - the layout lines do nothing and trip no errors
data = [go.Bar(x=team_ave_df.team,
 y=team_ave_df.turnovers_per_mp)]
layout = go.Layout(
 title=go.layout.Title(
 text='Turnovers per Minute by Team',
 xref='paper',
 x=0
 ),
 xaxis=go.layout.XAxis(
 title = go.layout.xaxis.Title(
 text='Team',
 font=dict(
 family='Courier New, monospace',
 size=18,
 color='#7f7f7f'
 )
 )
 ),
 yaxis=go.layout.YAxis(
 title = go.layout.yaxis.Title(
 text='Average Turnovers/Minute',
 font=dict(
 family='Courier New, monospace',
 size=18,
 color='#7f7f7f'
 )
 )
 ),
 autosize=True,
 hovermode='closest')
py.iplot(figure_or_data=data, layout=layout, filename='jupyter-plot', sharing='public', fileopt='overwrite')
#plot 2 - attempt at a scatterplot
data = [go.Scatter(x=player_year.minutes_played,
 y=player_year.salary,
 marker=go.scatter.Marker(color='red',
 size=3))]
layout = go.Layout(title="test",
 xaxis=dict(title='why'),
 yaxis=dict(title='plotly'))
py.iplot(figure_or_data=data, layout=layout, filename='jupyter-plot2', sharing='public')
[Image: image.png]

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

表示不同 NBA 球队每分钟平均失误数的条形图。

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

表示薪水和在 NBA 的打球时间之间关系的散点图

总体来说,开箱即用的美化工具看起来很好,但我多次尝试逐字复制文档和修改坐标轴标签时却失败了。但下面的图展示了 Plotly 的潜力,以及我为什么要在它身上花好几个小时:

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

Plotly 页面上的一些示例图

Pygal

Pygal 的名气就不那么大了,和其它常用的绘图包一样,它也是用图形框架语法来构建图像的。由于绘图目标比较简单,因此这是一个相对简单的绘图包。使用 Pygal 非常简单:

  •  实例化图片;
  •  用图片目标属性格式化;
  •  用 figure.add() 将数据添加到图片中。

我在使用 Pygal 的过程中遇到的主要问题在于图片渲染。必须要用 render_to_file 选项,然后在 web 浏览器中打开文件,才能看见我刚刚构建的东西。

最终看来这是值得的,因为图片是交互式的,有令人满意而且便于自定义的美化功能。总而言之,这个包看起来不错,但在文件的创建和渲染部分比较麻烦。

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

Networkx

虽然 Networkx 是基于 matplotlib 的,但它仍是图形分析和可视化的绝佳解决方案。图形和网络不是我的专业领域,但 Networkx 可以快速简便地用图形表示网络之间的连接。以下是我针对一个简单图形构建的不同的表示,以及一些从斯坦福 SNAP 下载的代码(关于绘制小型 Facebook 网络)。

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

我按编号(1~10)用颜色编码了每个节点,代码如下:

options = {
 'node_color' : range(len(G)),
 'node_size' : 300,
 'width' : 1,
 'with_labels' : False,
 'cmap' : plt.cm.coolwarm
}
nx.draw(G, **options)

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

用于可视化上面提到的稀疏 Facebook 图形的代码如下:

import itertools
import networkx as nx
import matplotlib.pyplot as plt
f = open('data/facebook/1684.circles', 'r')
circles = [line.split() for line in f]
f.close()
network = []
for circ in circles:
 cleaned = [int(val) for val in circ[1:]]
 network.append(cleaned)
G = nx.Graph()
for v in network:
 G.add_nodes_from(v)
edges = [itertools.combinations(net,2) for net in network]
for edge_group in edges:
 G.add_edges_from(edge_group)
options = {
 'node_color' : 'lime',
 'node_size' : 3,
 'width' : 1,
 'with_labels' : False,
}
nx.draw(G, **options)

8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?

这个图形非常稀疏,Networkx 通过最大化每个集群的间隔展现了这种稀疏化。

有很多数据可视化的包,但没法说哪个是最好的。希望阅读本文后,你可以了解到在不同的情境下,该如何使用不同的美化工具和代码。

위 내용은 8개의 인기 있는 Python 시각화 툴킷 중 어떤 것이 마음에 드시나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제