إضافة الجمال والتفاعل إلى Jupyter Notebooks

كثير من الناس يستخدمون Jupyter Notebooks في عملهم. ولكن مع التعقيد المتزايد للمشروع ، تظهر المشاكل. تظهر الخلايا في دفتر الملاحظات مع علامات حمراء لنفسه: "أشر إلى الرقم قبل البدء ..." أو "عيّن عدد التكرارات على أساس ...". يتم الحصول على نوع من التراجع إلى سطر الأوامر.

ولا يتم دائمًا إدراك إخراج البيانات على الشاشة دون تفسير من قبل شخص خارجي اعتاد على الجداول والصور وغيرها من عناصر الواجهة الحديثة الجميلة.

على سبيل المثال ، لدينا بيانات عن منطقة المدن والسكان. نعرضها في "الشكل التقليدي":

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

نرى في دفتر ملاحظات:

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

الشخص الحديث المدلل لا يحب دائمًا تنسيق العرض هذا. من الضروري إحضار البيانات إلى نموذج جدولي أكثر دراية.

يمكنك استخدام مكتبة الباندا الواسعة

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



إذا لم يناسبك استخدام حيوانات الباندا ، يمكنك استخدام مكتبة أخرى أو كتابة وظيفتك الخاصة.

النظر في واحدة من هذه المكتبات - جدولة (https://pypi.org/project/tabulate/)
لتثبيت ، قم بتشغيل جدولة تثبيت pip من سطر الأوامر

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



يمكنك عرض البيانات في شكل "pseudographic".

 print(tabulate(tabledata)) 


يمكنك إضافة رؤوس

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


والمؤشرات

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


جدول يسمح لك بصريا الحصول على نفس النتيجة مثل الباندا.

يمكنك كتابة وظيفتك الخاصة ، والتي ستحصل بعد ذلك على ميزات إضافية.

 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=[""," (. )", " ()"]) 



إخراج الصورة


تعودنا على الصور التوضيحية والرموز. حتى في حالة التنبؤ بالطقس ، فإننا نرى صورًا ذات شمس وغيوم. لإضافة صور إلى برامجنا ، يمكنك استخدام مكتبة IPython. تتيح لك وظيفة Image الخاصة بها العمل مع الصور (PNG / JPEG / GIF) الموجودة محليًا وعلى موارد الإنترنت. ضبط أحجامها.

وصف المكتبة هنا هو 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)) #   

معجب بيثون:

صورة

تزيين النص


بالطبع ، يمكنك إنشاء HTML مباشرة باستخدام جميع ميزاته:

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



أو يمكنك استخدام مكتبة المصطلحات. يسمح ، دون الخوض في HTML ، بتعيين لون النص والخلفية ، لتعيين سمات الخط. وصف المكتبة هنا - 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"])) 



نعرض تقدم المهمة


لا أحد يحب متابعة التقدم المحرز في مهمة طويلة دون فهم أي جزء من العمل قد أنجز بالفعل.



رؤية مقدار الباقي أجمل كثيرًا (نعم ، نعم ، أعرف أن سرعة "الدودة" يمكن أن تختلف).



وصف المكتبة هنا - ipywidgets.readthedocs.io

استخدم الأوامر لتثبيت

 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(' ') 



تفاعل المستخدم التفاعلي


لا تسمح مكتبة ipywidgets نفسها بعرض المعلومات فحسب ، ولكن أيضًا إدخالها.

أبسط مثال على تفاعل المستخدم هو رد الفعل على نقرة زر. تتيح لك مكتبة ipywidgets إنشاء زر مع المعلمات المحددة (النص والنمط والحجم) وتعيين وظيفة معالج للضغط عليه.

 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) #   



يتم تعيين حجم الزر باستخدام خاصية التخطيط

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



لإدخال مستخدم مناسب للأرقام والتواريخ ، توجد مكونات FloatSlider و DatePicker.

للحصول على القيمة المدخلة ، استخدم خاصية .value <المكون>

لالتقاط لحظة تغير القيمة ، تحتاج إلى استخدام الحدث مراقبة

 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) 



تحقق من الوصول إلى القيمة الحالية:

 fSlider.value 

التقويم التفاعلي:

 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) 



لتحديد قيمة واحدة من عدة خيارات ، هناك قائمة RadioButtons وقائمة منسدلة منسدلة ومجموعة من أزرار ToggleButtons. يتم استخدام القيمة والملاحظة بنفس الطريقة لهذه المكونات.

يمكن تحديد القيم إما كقائمة لقيم السلسلة أو كقائمة tuples.

دعونا نجرب الخيار الأبسط ، مع القيم في شكل قائمة من السلاسل.

 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) 



نعرض القيمة:

 rButtons1.value 
في هذا الوضع ، قيمة rButtons1.value عبارة عن سلسلة.

نحن نحاول الخيار الثاني لتحديد قائمة القيم:

 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) 



في هذا الوضع ، قيمة rButtons2.value هي الرقم المطابق للقيمة المحددة.

القائمة المنسدلة يعمل بنفس الطريقة

 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) 



يمكنك استخدام مربع الاختيار و ToggleButton لإدخال قيم منطقية. لديهم قيمة ومراقبة بالفعل مألوفة لنا.

 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) 



لإدخال نص متعدد الأسطر ، يتم استخدام مكون Textarea.

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



منظمة العفو الدولية (المسرات واجهة)


عندما يكون هناك الكثير من عناصر الواجهة ، أرغب في السير في مسار تطبيقات سطح المكتب والجمع بين العناصر الفردية في مجموعات منفصلة.

لهذا ، الأكورديون وعلامة التبويب تأتي في متناول اليدين.

 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) 



مكتبة ipywidgets لا تقتصر على العناصر التي أدرجتها. لا يزال لديه الكثير من الأشياء المفيدة التي يمكن أن تجعل البرامج في Jupyter Notebooks أكثر جاذبية.

انظر هنا

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


All Articles