Баннер мобильный (1) Пройти тест

Визуализация данных в Python с помощью Plotly 

Строим интерактивные графики

Инструменты

21 мая 2024

Поделиться

Скопировано
Визуализация данных в Python с помощью Plotly 

Содержание

    Визуализация данных играет решающую роль в понимании и эффективной передаче сложной информации. Python предлагает несколько библиотек для создания интерактивных и визуально привлекательных графиков и диаграмм. Одной из таких мощных библиотек является Plotly.

    Plotly — это библиотека визуализации данных с открытым исходным кодом, предоставляющая широкий спектр возможностей интерактивного построения графиков на языке Python. Plotly позволяет создавать интерактивные визуализации, включая линейные графики, точечные диаграммы, гистограммы, тепловые карты, трехмерные графики и многое другое. Благодаря своей гибкости и простоте использования библиотека широко используется в различных областях: анализ данных, научные исследования, финансы, веб-разработка и других.

    Этот универсальный инструмент завоевал популярность среди специалистов по данным, аналитиков и разработчиков. Ежемесячно библиотеку скачивают более 16 500 000 раз.

    скачивания библиотеки Plotly
    Данные о скачиваниях библиотеки. Источник

    Ключевые особенности Plotly

    Plotly предоставляет много возможностей для создания интерактивных и красочных графиков:

    1. Интерактивность: Plotly позволяет создавать интерактивные графики и диаграммы, которые реагируют на действия пользователя, такие как наведение курсора, щелчок и масштабирование. Такая интерактивность расширяет возможности исследования и понимания данных.
    2. Разнообразие графиков: библиотека содержит множество типов графиков, включая линейные графики, гистограммы, точечные диаграммы, контурные карты, трехмерные графики и т.д. 
    3. Богатая настройка графиков: Plotly предоставляет полный набор опций для настройки графиков. Пользователи могут управлять различными аспектами — цветовые палитры, шрифты, оси, аннотации, легенды, заголовки и макет — для создания визуально привлекательных и информативных визуализаций.
    4. Поддержка нескольких платформ: Plotly поддерживает различные платформы и языки программирования, включая Python, JavaScript, R и MATLAB. Такая гибкость обеспечивает плавную интеграцию с существующими рабочими процессами и облегчает сотрудничество между командами, использующими различные инструменты.
    5. Экспорт и встраивание: графики, созданные с помощью Plotly, можно экспортировать в различные форматы (например, PNG, SVG) и встраивать в веб-страницы, блокноты Jupyter и другие приложения.
    6. Совместная работа и обмен данными в интернете: Plotly предлагает онлайн-платформу Plotly Chart Studio, где пользователи могут создавать, редактировать и делиться графиками. Он обеспечивает централизованное место для хранения визуализаций и совместной работы над ними, что упрощает обмен информацией с другими.
    Антон Баланов
    ТОП-Менеджер и IT-MBA Профессор. Руководил продуктами в ВК, ВТБ, Сбере, ГосУслугах.

    Я использовал 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()
    график с 1952 по 2007 год
    Население Канады с 1952 по 2007 год. Источник

    Пузырьковая диаграмма 

    Этот тип графика похож на линейный график, но вместо линий используются точки различных размеров. Каждая точка имеет координаты, соответствующие значениям переменных. 

    Пример пузырьковой диаграммы с данными об ожидаемой продолжительности жизни на континентах и ВВП на душу населения в 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()
    данные с Plotly
    Выбросы парниковых и углекислого газов. Источник

    Поверхностная диаграмма 

    Этот тип графика используется для визуализации трехмерных данных. Он показывает поверхность, которая состоит из значений в трех измерениях.

    Поверхностная диаграмма на примере горы Бруно.

    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. Обе библиотеки предлагают мощные возможности для создания графиков и диаграмм, но у них есть явные различия, которые делают их подходящими для разных случаев. 

    Критерий
    Plotly
    Matplotlib
    Интерактивность
    Известен своими интерактивными возможностями, позволяющими пользователям наводить курсор на точки данных, увеличивать и уменьшать масштаб и взаимодействовать с графиками.
    По умолчанию предоставляет статические визуализации и требует дополнительного кода для интерактивности. Но создание простых графиков обычно требует меньшего объема кода.
    Сотрудничество в интернете
    Предлагает онлайн-платформу Plotly Chart Studio, где пользователи могут создавать, редактировать и делиться графиками. Это позволяет легко сотрудничать и делиться визуализациями с другими.
    Представляет собой в первую очередь библиотеку для локального создания графиков и не предоставляет встроенных функций онлайн-сотрудничества.
    Типы диаграмм
    Предоставляет более широкий выбор типов диаграмм. Plotly поддерживает 3D-графики, контурные графики, свечные диаграммы и многое другое.
    Больше ориентирован на 2D-графики, хотя и предлагает некоторые ограниченные 3D-возможности.
    Простота использования
    Хотя и удобен для пользователя, может потребовать более сложного обучения из-за расширенных функций и синтаксиса.
    Считается основной библиотекой для базового построения графиков в Python и существует уже давно. Он имеет большую базу пользователей и обширную документацию, что значительно облегчает начало работы новичкам.
    Виды графиков Matplotlib
    Графики Matplotlib. Источник

    Стоит отметить, что Matplotlib и Plotly не являются взаимоисключающими и могут использоваться вместе в зависимости от конкретных потребностей проекта.

    Matplotlib хорошо подходит для статичных графиков в печатных материалах, а Plotly отлично поможет в создании интерактивных и веб-визуализаций.

    Полезные ссылки

    Красиво и понятно: какие инструменты для визуализации данных нужны дата-аналитику

    5 простых способов визуализации данных на Python. Пишем код

    Draw.io, или рисование схем без регистрации и sms

    Инструменты

    Поделиться

    Скопировано
    0 комментариев
    Комментарии