Menambahkan keindahan dan interaktivitas ke Notebook Jupyter

Banyak orang menggunakan Notebook Jupyter dalam pekerjaan mereka. Tetapi dengan meningkatnya kompleksitas proyek, masalah muncul. Sel muncul di notebook dengan tanda merah untuk dirinya sendiri: "menunjukkan nomor sebelum memulai ..." atau "mengatur jumlah iterasi berdasarkan ...". Beberapa jenis rollback ke baris perintah diperoleh.

Dan output data ke layar tidak selalu dirasakan tanpa penjelasan oleh orang luar yang terbiasa dengan tabel yang indah, gambar dan elemen antarmuka modern lainnya.

Sebagai contoh, kami memiliki data tentang area kota dan populasi. Kami menampilkannya dalam "bentuk tradisional":

tabledata = [["", 2561, 12615882], ["-", 1439, 5383890], ["", 205, 609828], ["", 383, 1321473]] tabledata 

Kita lihat di buku catatan:

 [['', 2561, 12615882], ['-', 1439, 5383890], ['', 205, 609828], ['', 383, 1321473]] 

Orang yang modern dan manja tidak selalu menyukai format tampilan ini. Hal ini diperlukan untuk membawa data ke bentuk tabel yang lebih akrab.

Anda dapat menggunakan perpustakaan panda yang tersebar luas

 import pandas as pd pd.DataFrame(tabledata, columns=[""," (. )", " ()"]) 



Jika karena alasan tertentu menggunakan panda tidak cocok untuk Anda, Anda dapat menggunakan pustaka lain atau menulis fungsi Anda sendiri.

Pertimbangkan salah satu perpustakaan ini - tabulasi (https://pypi.org/project/tabulate/)
Untuk menginstal, jalankan pip install tabulate dari baris perintah

 from IPython.display import HTML, display from tabulate import tabulate display(HTML(tabulate(tabledata, tablefmt='html'))) 



Anda dapat menampilkan data dalam bentuk "pseudografis".

 print(tabulate(tabledata)) 


Anda dapat menambahkan tajuk

 print(tabulate(tabledata, headers=[""," (. )", " ()"])) 


Dan indeks

 display(HTML(tabulate(tabledata, headers=[""," (. )", " ()"], tablefmt='html', showindex="always"))) 


tabulate memungkinkan Anda secara visual mendapatkan hasil yang sama dengan panda.

Anda dapat menulis fungsi Anda sendiri, yang kemudian akan mendapatkan fitur tambahan.

 from IPython.display import HTML, display def dataToTable(data, columns = None): if len(data) == 0 : display(HTML('<b> </b>')) return hdr = '' if columns != None: for col in columns: #    hdr = hdr + '<th>' + col + '</th>' hdr = '<tr>' + hdr + '</tr>' dt = '' for row in data: #      dt = dt + '<tr>' for cell in row: #     dt = dt + '<td>' + str(cell) + '</td>' dt = dt + '</tr>' display(HTML('<table>' + hdr + dt + '</table>')) #     dataToTable(tabledata, columns=[""," (. )", " ()"]) 



Output gambar


Kami terbiasa dengan pictograms dan ikon. Bahkan dalam ramalan cuaca, kita melihat gambar dengan matahari dan awan. Untuk menambahkan gambar ke program kami, Anda dapat menggunakan perpustakaan IPython. Fungsi Image-nya memungkinkan Anda untuk bekerja dengan gambar (PNG / JPEG / GIF) yang terletak baik secara lokal maupun pada sumber daya Internet. Atur ukurannya.

Deskripsi perpustakaan ada di sini ipython.readthedocs.io/en/stable/api/generated/IPython.display.html?highlight=display#IPython.display.Image

 from IPython.display import Image #     display(Image(url='https://habrastorage.org/webt/9m/2c/zd/9m2czdt-uv7oe6v-nws3frtw7-a.jpeg', width = 200) #    ) # display(Image(filename='Python_royal_35.JPG', width = 200)) #   

Kagumi python:

gambar

Hiasi teksnya


Tentu saja, Anda dapat menghasilkan HTML secara langsung menggunakan semua fitur-fiturnya:

 from IPython.core.display import display, HTML display(HTML("<font color='green'>  </font>")) 



Atau Anda dapat menggunakan pustaka termcolor. Itu memungkinkan, tanpa mempelajari HTML, untuk mengatur warna teks dan latar belakang, untuk mengatur atribut font. Deskripsi perpustakaan di sini - pypi.org/project/termcolor

 from termcolor import colored #       pip install termcolor print(colored("  ( )", "red")) print(colored("  ()", "red", attrs=["underline"])) print(colored("     ( )", "green", "on_red" )) print(colored("     (bold)", "green", "on_red", attrs=["bold"])) 



Kami menampilkan progres tugas


Tidak ada yang suka mengikuti kemajuan tugas yang panjang tanpa memahami bagian pekerjaan yang telah diselesaikan.



Melihat berapa banyak yang tersisa jauh lebih baik (ya, ya, saya tahu bahwa kecepatan "cacing" dapat bervariasi).



Deskripsi perpustakaan di sini - ipywidgets.readthedocs.io

Gunakan perintah untuk menginstal

 pip install ipywidgets jupyter nbextension enable --py widgetsnbextension 

 from ipywidgets import IntProgress from IPython.display import display import time prgBar = IntProgress(min = 0, max = 100) #   display(prgBar) #     while prgBar.value < prgBar.max: #       -   prgBar.value = prgBar.value + 1 #  "" time.sleep(0.1) print(' ') 



Interaksi pengguna interaktif


Pustaka ipywidgets yang sama memungkinkan tidak hanya menampilkan, tetapi juga memasukkan informasi.

Contoh interaksi pengguna yang paling sederhana adalah reaksi terhadap klik tombol. Pustaka ipywidgets memungkinkan Anda membuat tombol dengan parameter yang diberikan (teks, gaya dan ukuran) dan menetapkan fungsi penangan untuk menekannya.

 from IPython.display import display from ipywidgets import Button #      button1 = Button(description=" !", button_style='success' # 'success', 'info', 'warning', 'danger', '' ) def on_button_clicked(b): #    print("") button1.on_click(on_button_clicked) #      "on_click" display(button1) #   



Ukuran tombol diatur menggunakan properti tata letak

 from IPython.display import display from ipywidgets import Button, Layout button2 = Button(description='   ', button_style='success', layout=Layout(width='50%', height='80px')) display(button2) 



Untuk input angka dan tanggal yang mudah bagi pengguna, ada komponen FloatSlider dan DatePicker.

Untuk mendapatkan nilai yang dimasukkan, gunakan properti <component> .value

Untuk menangkap momen perubahan nilai, perlu menggunakan event observ

 from IPython.display import display from ipywidgets import FloatSlider fSlider = FloatSlider( value=7.5, #   min=0, #  max=10.0, #  step=0.1, #   description=':', continuous_update=False, # True -  observe        orientation='horizontal' #     ) def on_value_change(b): print(b['old'], '->', b['new']) fSlider.observe(on_value_change, names='value') display(fSlider) 



Periksa akses ke nilai saat ini:

 fSlider.value 

Kalender interaktif:

 from IPython.display import display from ipywidgets import DatePicker dPicker = DatePicker( description=':' ) def on_button_clicked(b): print(b['old'], '->', b['new']) dPicker.observe(on_button_clicked, names='value') display(dPicker) 



Untuk memilih satu nilai dari beberapa opsi, ada daftar RadioButtons, daftar turun bawah dan sekelompok tombol ToggleButtons. nilai dan amati digunakan dengan cara yang sama untuk komponen-komponen ini.

Nilai dapat ditentukan baik sebagai daftar nilai string atau sebagai daftar tupel.

Mari kita coba opsi yang paling sederhana, dengan nilai-nilai dalam bentuk daftar string.

 from IPython.display import display from ipywidgets import RadioButtons rButtons1 = RadioButtons( options=['', '', ''], value='', #    description=':' ) def on_button_clicked(b): print(b['old'], '->', b['new']) rButtons1.observe(on_button_clicked, names='value') display(rButtons1) 



Kami menampilkan nilainya:

 rButtons1.value 
Dalam mode ini, nilai rButtons1.value adalah string.

Kami mencoba opsi kedua mengatur daftar nilai:

 from IPython.display import display from ipywidgets import RadioButtons rButtons2 = RadioButtons( options=[('', 1), ('', 2), ('', 3)], value=2, #    description=':' ) def on_button_clicked(b): print(b['old'], '->', b['new']) rButtons2.observe(on_button_clicked, names='value') display(rButtons2) 



Dalam mode ini, nilai rButtons2.value adalah angka yang sesuai dengan nilai yang dipilih.

Daftar dropdown bekerja dengan cara yang sama

 from IPython.display import display from ipywidgets import Dropdown dropdown1 = Dropdown( options=[('', 1), ('', 2), ('', 3)], value=2, #    description=':' ) def on_button_clicked(b): print(b['old'], '->', b['new']) dropdown1.observe(on_button_clicked, names='value') display(dropdown1) 



Anda dapat menggunakan Kotak Centang dan ToggleButton untuk memasukkan nilai boolean. Mereka memiliki nilai dan mengamati sudah akrab bagi kita.

 from IPython.display import display from ipywidgets import Checkbox cb1 = Checkbox( value=False, description='' ) def on_button_clicked(b): print(cb1.value) cb1.observe(on_button_clicked, names='value') display(cb1) 



 from IPython.display import display from ipywidgets import ToggleButton tb1 = ToggleButton( value=False, description=' ', disabled=False, button_style='success', # 'success', 'info', 'warning', 'danger' or '' tooltip=' ', icon='check' ) tb2 = ToggleButton( value=True, description='  ', disabled=False, button_style='success', # 'success', 'info', 'warning', 'danger' or '' tooltip=' ', icon='check' ) display(tb1, tb2) 



Untuk memasukkan teks multiline, komponen Textarea digunakan.

 from IPython.display import display from ipywidgets import Textarea, Layout Textarea1 = Textarea( value=', Habr!', placeholder=' ', description=':', layout=Layout(width='600px', height='100px') ) display(Textarea1) 



AI (kelezatan antarmuka)


Ketika ada terlalu banyak elemen antarmuka, saya ingin mengikuti jalur aplikasi desktop dan menggabungkan masing-masing elemen menjadi kelompok yang terpisah.

Untuk ini, Accordion dan Tab berguna.

 from IPython.display import display from ipywidgets import Accordion, IntSlider, Text accordion = Accordion(children=[IntSlider(value=42), Text(value=' ')]) accordion.set_title(0, ' 1') accordion.set_title(1, ' 2') display(accordion) 



 from IPython.display import display from ipywidgets import Tab, IntSlider, Text tab = Tab() tab.children = [IntSlider(value=42), Text(value=' ')] tab.set_title(0, ' 1') tab.set_title(1, ' 2') display(tab) 



Pustaka ipywidgets tidak terbatas pada elemen yang telah saya daftarkan. Masih memiliki banyak hal berguna yang dapat membuat program di Notebook Jupyter lebih menarik.

Lihat di sini

Source: https://habr.com/ru/post/id485318/


All Articles