Визуализация данных играет решающую роль в понимании и эффективной передаче сложной информации. Python предлагает несколько библиотек для создания интерактивных и визуально привлекательных графиков и диаграмм. Одной из таких мощных библиотек является Plotly.
Plotly — это библиотека визуализации данных с открытым исходным кодом, предоставляющая широкий спектр возможностей интерактивного построения графиков на языке Python. Plotly позволяет создавать интерактивные визуализации, включая линейные графики, точечные диаграммы, гистограммы, тепловые карты, трехмерные графики и многое другое. Благодаря своей гибкости и простоте использования библиотека широко используется в различных областях: анализ данных, научные исследования, финансы, веб-разработка и других.
Этот универсальный инструмент завоевал популярность среди специалистов по данным, аналитиков и разработчиков. Ежемесячно библиотеку скачивают более 16 500 000 раз.
Ключевые особенности Plotly
Plotly предоставляет много возможностей для создания интерактивных и красочных графиков:
- Интерактивность: Plotly позволяет создавать интерактивные графики и диаграммы, которые реагируют на действия пользователя, такие как наведение курсора, щелчок и масштабирование. Такая интерактивность расширяет возможности исследования и понимания данных.
- Разнообразие графиков: библиотека содержит множество типов графиков, включая линейные графики, гистограммы, точечные диаграммы, контурные карты, трехмерные графики и т.д.
- Богатая настройка графиков: Plotly предоставляет полный набор опций для настройки графиков. Пользователи могут управлять различными аспектами — цветовые палитры, шрифты, оси, аннотации, легенды, заголовки и макет — для создания визуально привлекательных и информативных визуализаций.
- Поддержка нескольких платформ: Plotly поддерживает различные платформы и языки программирования, включая Python, JavaScript, R и MATLAB. Такая гибкость обеспечивает плавную интеграцию с существующими рабочими процессами и облегчает сотрудничество между командами, использующими различные инструменты.
- Экспорт и встраивание: графики, созданные с помощью Plotly, можно экспортировать в различные форматы (например, PNG, SVG) и встраивать в веб-страницы, блокноты Jupyter и другие приложения.
- Совместная работа и обмен данными в интернете: Plotly предлагает онлайн-платформу Plotly Chart Studio, где пользователи могут создавать, редактировать и делиться графиками. Он обеспечивает централизованное место для хранения визуализаций и совместной работы над ними, что упрощает обмен информацией с другими.
Я использовал Plotly для создания интерактивных графиков и диаграмм в различных проектах, например, при создании дашбордов для мониторинга ключевых показателей.
Среди плюсов использования Plotly могу назвать:
- Интерактивность. Plotly позволяет создавать графики с возможностью интерактивного взаимодействия, такого как увеличение, выбор данных по клику и прокрутка.
- Широкие возможности. Plotly предлагает множество типов графиков и диаграмм для визуализации различных типов данных.
- Хорошую документацию. У Plotly хорошо структурированная и подробная документация, что упрощает процесс изучения и использования библиотеки.
- Поддержку различных платформ. Plotly может использоваться как в Jupyter Notebook, так и в веб-приложениях, что делает его удобным для разных сценариев использования.
Минусы, конечно, тоже есть:
- Иногда требуется дополнительное время на настройку. Настройка определенных аспектов графиков в Plotly может потребовать дополнительных усилий и времени для достижения желаемого результата.
- Стоимость. Некоторые функции Plotly недоступны без платной версии.
В целом, Plotly — мощный инструмент для визуализации данных, который приносит значительную ценность при работе с информацией и обеспечивает возможность создания красивых и понятных графиков и диаграмм.
Начало работы с библиотекой
Чтобы использовать Plotly в Python, необходимо установить эту библиотеку с помощью инструмента управления пакетами Python — pip. В командной строке или терминале надо ввести pip install plotly.
После установки можно импортировать библиотеку в скрипт Python и начать создавать интерактивные графики. Plotly предоставляет интуитивно понятный API, который упрощает процесс создания визуализаций.
Также с особенностями работы в библиотеке поможет разобраться форум с советами опытных разработчиков, которые работают с Plotly.
Виды графиков в Plotly
Plotly поддерживает различные типы графиков, с которыми можно ознакомиться в документации библиотеки. Библиотека содержит более 30 типов диаграмм, включая научные диаграммы, трехмерные графики, статистические диаграммы, карты, финансовые диаграммы, анимации и многое другое. Рассмотрим некоторые из них.
Линейный график
Этот тип графика используется для визуализации отношения между переменными путем отображения точек на плоскости и соединения их линиями. Он часто используется для отображения трендов и показа изменения данных во времени.
Пример линейного графика динамики продолжительности жизни в странах по континентам.
from dash import Dash, dcc, html, Input, Output import plotly.express as px app = Dash(__name__) app.layout = html.Div([ html.H4('Life expentancy progression of countries per continents'), dcc.Graph(id="graph"), dcc.Checklist( id="checklist", options=["Asia", "Europe", "Africa","Americas","Oceania"], value=["Americas", "Oceania"], inline=True ), ]) @app.callback( Output("graph", "figure"), Input("checklist", "value")) def update_line_chart(continents): df = px.data.gapminder() # replace with your own data source mask = df.continent.isin(continents) fig = px.line(df[mask], x="year", y="lifeExp", color='country') return fig app.run_server(debug=True)
Гистограмма
Гистограмма используется для отображения распределения частоты или плотности данных. Она разбивает данные на интервалы и показывает, сколько значений попадает в каждый интервал.
Пример гистограммы с данными о населении Канады.
import plotly.express as px df = px.data.gapminder().query("country == 'Canada'") fig = px.bar(df, x='year', y='pop', hover_data=['lifeExp', 'gdpPercap'], color='lifeExp', labels={'pop':'population of Canada'}, height=400) fig.show()
Пузырьковая диаграмма
Этот тип графика похож на линейный график, но вместо линий используются точки различных размеров. Каждая точка имеет координаты, соответствующие значениям переменных.
Пример пузырьковой диаграммы с данными об ожидаемой продолжительности жизни на континентах и ВВП на душу населения в 2007 году.
import plotly.graph_objects as go import plotly.express as px import pandas as pd import math # Load data, define hover text and bubble size data = px.data.gapminder() df_2007 = data[data['year']==2007] df_2007 = df_2007.sort_values(['continent', 'country']) hover_text = [] bubble_size = [] for index, row in df_2007.iterrows(): hover_text.append(('Country: {country}<br>'+ 'Life Expectancy: {lifeExp}<br>'+ 'GDP per capita: {gdp}<br>'+ 'Population: {pop}<br>'+ 'Year: {year}').format(country=row['country'], lifeExp=row['lifeExp'], gdp=row['gdpPercap'], pop=row['pop'], year=row['year'])) bubble_size.append(math.sqrt(row['pop'])) df_2007['text'] = hover_text df_2007['size'] = bubble_size sizeref = 2.*max(df_2007['size'])/(100**2) # Dictionary with dataframes for each continent continent_names = ['Africa', 'Americas', 'Asia', 'Europe', 'Oceania'] continent_data = {continent:df_2007.query("continent == '%s'" %continent) for continent in continent_names} # Create figure fig = go.Figure() for continent_name, continent in continent_data.items(): fig.add_trace(go.Scatter( x=continent['gdpPercap'], y=continent['lifeExp'], name=continent_name, text=continent['text'], marker_size=continent['size'], )) # Tune marker appearance and layout fig.update_traces(mode='markers', marker=dict(sizemode='area', sizeref=sizeref, line_width=2)) fig.update_layout( title='Life Expectancy v. Per Capita GDP, 2007', xaxis=dict( title='GDP per capita (2000 dollars)', gridcolor='white', type='log', gridwidth=2, ), yaxis=dict( title='Life Expectancy (years)', gridcolor='white', gridwidth=2, ), paper_bgcolor='rgb(243, 243, 243)', plot_bgcolor='rgb(243, 243, 243)', ) fig.show()
Круговая диаграмма
Этот тип графика используется для отображения процентного соотношения частей к целому. Каждая секция круговой диаграммы представляет собой часть от общего значения.
Пример круговой диаграммы с данными о выбросах парниковых и углекислого газов в мире с 1990 по 2011 год.
import plotly.graph_objects as go from plotly.subplots import make_subplots labels = ["US", "China", "European Union", "Russian Federation", "Brazil", "India", "Rest of World"] # Create subplots: use 'domain' type for Pie subplot fig = make_subplots(rows=1, cols=2, specs=[[{'type':'domain'}, {'type':'domain'}]]) fig.add_trace(go.Pie(labels=labels, values=[16, 15, 12, 6, 5, 4, 42], name="GHG Emissions"), 1, 1) fig.add_trace(go.Pie(labels=labels, values=[27, 11, 25, 8, 1, 3, 25], name="CO2 Emissions"), 1, 2) # Use `hole` to create a donut-like pie chart fig.update_traces(hole=.4, hoverinfo="label+percent+name") fig.update_layout( title_text="Global Emissions 1990-2011", # Add annotations in the center of the donut pies. annotations=[dict(text='GHG', x=0.18, y=0.5, font_size=20, showarrow=False), dict(text='CO2', x=0.82, y=0.5, font_size=20, showarrow=False)]) fig.show()
Поверхностная диаграмма
Этот тип графика используется для визуализации трехмерных данных. Он показывает поверхность, которая состоит из значений в трех измерениях.
Поверхностная диаграмма на примере горы Бруно.
import plotly.graph_objects as go import pandas as pd import numpy as np # Read data from a csv z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv') z = z_data.values sh_0, sh_1 = z.shape x, y = np.linspace(0, 1, sh_0), np.linspace(0, 1, sh_1) fig = go.Figure(data=[go.Surface(z=z, x=x, y=y)]) fig.update_layout(title='Mt Bruno Elevation', autosize=False, width=500, height=500, margin=dict(l=65, r=50, b=65, t=90)) fig.show()
Карты
В Plotly можно создавать интерактивные графики с картами, что делает его полезным инструментом для визуализации географических данных. В библиотеке доступны различные типы карт, включая фоновые картограммы, карты с размещением маркеров, тепловые карты и другие.
Пример фоновой картограммы с данными об уровне безработицы в США.
from urllib.request import urlopen import json with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response: counties = json.load(response) import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv", dtype={"fips": str}) import plotly.express as px fig = px.choropleth_mapbox(df, geojson=counties, locations='fips', color='unemp', color_continuous_scale="Viridis", range_color=(0, 12), mapbox_style="carto-positron", zoom=3, center = {"lat": 37.0902, "lon": -95.7129}, opacity=0.5, labels={'unemp':'unemployment rate'} ) fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) fig.show()
Matplotlib или Plotly
Кроме Plotly, есть еще одна популярная среди аналитиков библиотека — Matplotlib. Обе библиотеки предлагают мощные возможности для создания графиков и диаграмм, но у них есть явные различия, которые делают их подходящими для разных случаев.
Стоит отметить, что Matplotlib и Plotly не являются взаимоисключающими и могут использоваться вместе в зависимости от конкретных потребностей проекта.
Matplotlib хорошо подходит для статичных графиков в печатных материалах, а Plotly отлично поможет в создании интерактивных и веб-визуализаций.
Полезные ссылки
Красиво и понятно: какие инструменты для визуализации данных нужны дата-аналитику