DaryaDu 29 августа 2020

πŸ“Š Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π±ΠΈΠ½Π½ΠΈΠ½Π³ Π² Jupyter: ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ полос гистограммы

О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ быстро Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ полос гистограммы (Π±ΠΈΠ½ΠΎΠ²) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ гистограммы Π² Jupyter Notebook ΠΈΠ»ΠΈ JupyterLab, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π±ΠΈΠ½ΠΎΠ² Π½Π° Π»Π΅Ρ‚Ρƒ.
πŸ“Š Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π±ΠΈΠ½Π½ΠΈΠ½Π³ Π² Jupyter: ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ полос гистограммы

ИсслСдованиС Π΄Π°Π½Π½Ρ‹Ρ… – самый Π²Π°ΠΆΠ½Ρ‹ΠΉ шаг Π² любом Data Science ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Π’Π°ΠΊΠΈΠ΅ исслСдования ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с рассмотрСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ распрСдСлСны ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ИмСнно Π² этом прСкрасно ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ гистограммы.

Гистограммы Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ распрСдСлСниС Π² Π²ΠΈΠ΄Π΅ столбцов. Взглянув Π½Π° гистограмму, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ сразу ΠΆΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ выбросы ΠΈ ошибки Π² Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния Π² столбцС, содСрТащСм возраст ΠΏΠ°Ρ†ΠΈΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с гистограммами ΠΌΡ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠΌ ΠΊ измСнСнию ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π±ΠΈΠ½ΠΎΠ² – ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· Π³Ρ€Π°Ρ„ΠΈΠΊΠ°. Блишком ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ Π±ΠΈΠ½Ρ‹ ΡΠΊΡ€Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ распрСдСлСниС Π΄Π°Π½Π½Ρ‹Ρ…, Π° слишком ΡƒΠ·ΠΊΠΈΠ΅ полоски ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅Ρ€Π΅ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌΡƒ числу записСй Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ. Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ распрСдСлСниС ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ. ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ°.

Π’ этой инструкции ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ полос гистограммы (Π±ΠΈΠ½ΠΎΠ²) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ гистограммы, созданной Π½Π° Π±Π°Π·Π΅ plotly ΠΈ ipywidgets Π² Jupyter Notebook ΠΈΠ»ΠΈ JupyterLab.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
НиТС дСмонстрируСтся построСниС ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ гистограммы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ plotly, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ ΠΈ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ графичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, seaborn ΠΈΠ»ΠΈ matplotlib. О прСимущСствах экосистСмы Jupyter для Data Science ΠΌΡ‹ писали Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ JupyterLab ΠΈ Jupyter Notebook β€” ΠΌΠΎΡ‰Π½Ρ‹Π΅ инструмСнты Data Science.

Π’ качСствС практичСского ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим распрСдСлСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° Π² ΠΌΠΈΠ½ΡƒΡ‚Π°Ρ… 300 тысяч рСйсов, Π²Ρ‹Π»Π΅Ρ‚Π°Π²ΡˆΠΈΡ… ΠΈΠ· Нью-Π™ΠΎΡ€ΠΊΠ° Π² 2013 Π³. (датасСт NYCflights13). ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π²ΠΈΠ΄Π΅ Jupyter-Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Π° Π½Π° GitHub.

Гистограмма с ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Π±ΠΈΠ½Π½ΠΈΠ½Π³ΠΎΠΌ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

На этом рисункС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π±ΠΈΠ½ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° Π³Ρ€Π°Ρ„ΠΈΠΊ автоматичСски коррСктируСтся.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ это, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ plotly.graph_objs (строит гистограмму) ΠΈ ipywidgets.Floatslider. Π’ΠΎΡ‚ ΠΊΠΎΠ΄, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ гистограмму с настраиваСмой ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ Π±ΠΈΠ½ΠΎΠ²:

Код для создания пСрСстраиваСмой гистограммы
        import plotly.graph_objs as go
import ipywidgets as widgets

def rebinnable_interactive_histogram(series, initial_bin_width=10):
    figure_widget = go.FigureWidget(
        data=[go.Histogram(x=series, xbins={"size": initial_bin_width})]
    )

    bin_slider = widgets.FloatSlider(
        value=initial_bin_width,
        min=1,
        max=30,
        step=1,
        description="Bin width:",
        readout_format=".0f",  # ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа
    )

    histogram_object = figure_widget.data[0]

    def set_bin_size(change):
        histogram_object.xbins = {"size": change["new"]}

    bin_slider.observe(set_bin_size, names="value")

    output_widget = widgets.VBox([figure_widget, bin_slider])
    return output_widget

rebinnable_interactive_histogram(df, "air_time")
    

ΠŸΡ€ΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ построчно.

ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΎΡ€ ΠΊΠΎΠ΄Π°

0. ОбъявляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

ОбъявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
        def rebinnable_interactive_histogram(series, initial_bin_width=10):
    

Наша функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: series – это pandas.Series с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π° initial_bin_width – ΡˆΠΈΡ€ΠΈΠ½Π° Π±ΠΈΠ½ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’ нашСм случаС ΠΎΠ½Π° Ρ€Π°Π²Π½Π° 10 ΠΌΠΈΠ½ΡƒΡ‚Π°ΠΌ ΠΏΠΎΠ»Π΅Ρ‚Π°.

1. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ изобраТСния
            figure_widget = go.FigureWidget(
        data=[go.Histogram(x=series, xbins={"size": initial_bin_width})]
    )
    

ΠœΡ‹ создаСм Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Ρ‚ΠΈΠΏΠ° FigureWidget. Π­Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ β€œΠ²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚β€ plotly. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² Jupyter Notebook ΠΈΠ»ΠΈ JupyterLab, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ plotly, Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ряд прСимущСств:

  • FigureWidget ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ipywidgets (фактичСски ΠΎΠ½ΠΈ для этого ΠΈ созданы)
  • Π’Π°ΠΊΠΈΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ· ΠΊΠΎΠ΄Π°, написанного Π½Π° Python.
  • Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ события, ΠΏΡ€ΠΈ срабатывании ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Python-ΠΊΠΎΠ΄.

FigureWidget ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ data, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ список всСх трассировок (Ρ‡ΠΈΡ‚Π°ΠΉ: Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ. Π’ нашСм случаС это СдинствСнная гистограмма. ЗначСния x для нашСй гистограммы бСрутся ΠΈΠ· series. Π¨ΠΈΡ€ΠΈΠ½Π° Π±ΠΈΠ½ΠΎΠ² устанавливаСтся Π² словарС, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ xbins. Если Π² этом словарС ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ size=None, plotly Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π±ΠΈΠ½ΠΎΠ² Π·Π° нас.

2. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΎΠΊ

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ°
         bin_slider = widgets.FloatSlider(
        value=initial_bin_width,
        min=1,
        max=30,
        step=1,
        description="Bin width:",
        readout_format=".0f",  # display as integer
    )
    

ΠœΡ‹ создали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° FloatSlider ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ipywidgets. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° ΠΌΡ‹ впослСдствии Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ гистограммой.

3. БохраняСм ссылку Π½Π° гистограмму

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ссылки Π½Π° гистограмму
         histogram_object = figure_widget.data[0]
    

ΠœΡ‹ сохраняСм ссылку Π½Π° гистограмму, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Сю Π½Π° послСднСм шагС. Для этого ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ xbins нашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Ρ‡Π΅Ρ€Π΅Π· histogram_object.xbins.

4. ПишСм ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° (callback)

ИспользованиС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°
          def set_bin_size(change):
        histogram_object.xbins = {"size": change["new"]}

    # Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ set_bin_size ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ полоТСния ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ°
    bin_slider.observe(set_bin_size, names="value")
    

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π°ΠΌΠΈ FloatSlider содСрТит ΡΠ²ΠΎΠ΅ΠΎΠ±Ρ€Π°Π·Π½ΡƒΡŽ «магию». ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ мСняСтся (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΎΠΊ), ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ срабатываниС события. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это событиС для обновлСния ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π±ΠΈΠ½ΠΎΠ² нашСй гистограммы. Π­Ρ‚ΠΎ дСлаСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° observe. ΠœΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ (set_bin_size) ΠΈ сообщаСм, ΠΊΠΎΠ³Π΄Π° Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ (names="value" ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ функция вызываСтся ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° value).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° позиция ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° мСняСтся, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ set_bin_size. Ѐункция set_bin_size ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ change – ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ c ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ событии, сгСнСрированном bin_slider. НапримСр, change["new"] содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ°, Π½ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· change["old"]. ΠšΡΡ‚Π°Ρ‚ΠΈ, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ обязан Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ change – Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° set_bin_size Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ссылку histogram_object, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±ΠΈΠ½ΠΎΠ² FigureWidget (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΡˆΠΈΡ€ΠΈΠ½Ρƒ), пСрСзаписывая xbins.

Когда ΠΌΡ‹ слоТим всё это вмСстС, Ρƒ нас получится ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ красивой ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ гистограммы.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Гистограммы – прСкрасный способ Π½Π°Ρ‡Π°Ρ‚ΡŒ исслСдованиС Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…. Plotly позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π»Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ipywidgets.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΠΊΠ°ΠΊ plotly ΠΈ ipywidgets ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ быстро ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π±ΠΈΠ½ΠΎΠ² гистограммы Π² Jupyter Notebook ΠΈΠ»ΠΈ JupyterLab.

Если Π²Π°ΠΌ интСрСсны Π°Π½Π°Π»ΠΈΠ· ΠΈ визуализация Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ наши ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Π’ΠΠšΠΠΠ‘Π˜Π˜

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вакансию
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ C++
Москва, ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ собСсСдования

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•