{"id":31339,"date":"2025-02-25T07:53:31","date_gmt":"2025-02-25T15:53:31","guid":{"rendered":"https:\/\/digilent.com\/blog\/?p=31339"},"modified":"2025-03-03T12:18:36","modified_gmt":"2025-03-03T20:18:36","slug":"jupyterlab-tutorial-data-acquisition-with-usb-201-python","status":"publish","type":"post","link":"https:\/\/digilent.com\/blog\/jupyterlab-tutorial-data-acquisition-with-usb-201-python\/","title":{"rendered":"JupyterLab Tutorial: Data Acquisition with USB-201 &#038; Python"},"content":{"rendered":"<h2><b><span data-contrast=\"auto\">Introducing JupyterLab<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\"><a href=\"https:\/\/jupyter.org\/\">JupyterLab<\/a> is a relatively new tool. It is an open-source development environment (IDE) for working with Jupyter notebooks. Notebooks are primarily used to combine program code, code results, documentation or discussion, and visualizations in one file. They can execute code in individual cells, making interacting with the code and its results easier. JupyterLab can open more than one notebook in separate tabs, like a web browser with tabs pages pointing to various sites. Upon startup, it reads a workspace file to know which notebooks to load. This brief article introduces Jupyter Lab and demonstrates how to control a<a href=\"https:\/\/digilent.com\/shop\/mcc-usb-200-series-single-gain-multifunction-usb-daq-devices\/\"> USB-201<\/a> and acquire and display actual analog data.\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h4><span data-contrast=\"auto\">JupyterLab can be thought of as an enhanced version of Jupyter Notebook, but with more features:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/h4>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">User Interface<\/span><\/b><span data-contrast=\"auto\">: It presents a flexible interface that helps to organize your work better\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:278}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">File Management<\/span><\/b><span data-contrast=\"auto\">: It includes a file explorer to open notebooks, a Python terminal, contextual help, and more.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:278}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">More<\/span><\/b><span data-contrast=\"auto\">: Jupyter Lab has an advanced extension system, much more than Jupyter Notebook, that allows users to customize its functionality. Extensions for Google Drive and GitHub exist that allow for improved collaboration.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:278}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Whereas a Jupyter Notebook is straightforward. It is a single notebook file containing separate cells for Python code, text output, and information display.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<h2><b><span data-contrast=\"auto\">What sets JupyterLab apart from Notebook?<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">Jupyter Lab is designed to enhance workflows, as in data science applications. Its multi-document interface allows users to manage notebooks, text files, terminals, and consoles in a single workspace. This capability increases productivity by enabling multitasking and better organization. When adding a new notebook, you can choose between Python 3, a Python console, a power shell terminal, Text, code, HTML, or Markdown. Selecting Python 3 will provide individual cells, which we can use to execute code and display HTML or Markdown text as comments, titles, notes, or whatever. For instance, the Display\u2019s Markdown, Math, and LaTex interfaces can be used for documentation.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;335559739&quot;:0}\"> <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Jupyter-tabs.png\" alt=\"\" width=\"979\" height=\"675\" class=\"alignnone size-full wp-image-31340\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Jupyter-tabs.png 979w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Jupyter-tabs-600x414.png 600w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Jupyter-tabs-135x93.png 135w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Displaying Markdown language from within a code cell:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/markdown.png\" alt=\"\" width=\"964\" height=\"426\" class=\"alignnone size-full wp-image-31341\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/markdown.png 964w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/markdown-600x265.png 600w\" sizes=\"auto, (max-width: 964px) 100vw, 964px\" \/><\/p>\n<p><span data-contrast=\"auto\">Displaying Math from within a code cell:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Math.png\" alt=\"\" width=\"914\" height=\"127\" class=\"alignnone size-full wp-image-31342\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Math.png 914w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Math-600x83.png 600w\" sizes=\"auto, (max-width: 914px) 100vw, 914px\" \/><\/p>\n<p><span data-contrast=\"auto\">Display LaTex from within a code cell:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"> <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/latex.png\" alt=\"\" width=\"948\" height=\"213\" class=\"alignnone size-full wp-image-31343\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/latex.png 948w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/latex-600x135.png 600w\" sizes=\"auto, (max-width: 948px) 100vw, 948px\" \/><\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><b><span data-contrast=\"auto\">Advantages of Using JupyterLab<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">JupyterLab\u2019s appeal lies in its ability to combine documentation, code, and live results. Its user-friendly interface makes it accessible to beginners, while its advanced features cater to experienced developers and researchers. It is a preferred tool in fields such as Data Science.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Interactivity is another distinctive feature. The ability to execute code in chunks and observe immediate outputs encourages an iterative approach to problem-solving. This hands-on methodology is particularly effective for refining code algorithms or running multiple experiments.\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Moreover, JupyterLab\u2019s cross-platform compatibility ensures it can run on various operating systems, including Windows, macOS, and Linux. This universality, coupled with its browser-based nature, eliminates installation hurdles and enhances accessibility.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h2><\/h2>\n<h2><b><span data-contrast=\"auto\">Applications\u00a0<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">JupyterLab\u2019s versatility extends to numerous disciplines. In data science and machine learning, it is a comprehensive tool for preprocessing, modeling, and visualization.\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">JupyterLab is a valuable tool for Researchers who simulate and analyze experimental data. It can be used in education to create teaching materials, enriching the learning experience.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Analysts rely on JupyterLab to generate results, prepare reports, and build dashboards. Software developers use it to prototype algorithms and document workflows, making it a valuable addition to their toolkit.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h2><\/h2>\n<h2><b><span data-contrast=\"auto\">Installing Jupyter Lab<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">Installing JupyterLab is super easy. First, start a command console (CMD) or terminal. Next, upgrade pip by entering the command below. If it fails, ensure that you have installed Python.<\/span><span data-ccp-props=\"{}\"> <\/span><\/p>\n<pre>C:\\users\\name&gt; python \u2013m pip install \u2013upgrade pip<\/pre>\n<p><span data-contrast=\"auto\">Now install Jupyter Lab as follows:<\/span><span data-ccp-props=\"{}\"> <\/span><\/p>\n<pre>C:\\users\\name&gt; pip install jupyterlab<\/pre>\n<p><span data-contrast=\"auto\">To start Jupyter Lab, enter the following:<\/span><span data-ccp-props=\"{}\"> <\/span><\/p>\n<pre><span style=\"font-size: 1rem;\">C:\\users\\name&gt; jupyter lab<\/span><\/pre>\n<p><span data-contrast=\"auto\">The remaining discussion is about acquiring data from an MCC USB-201 device. For this, I created a Python class to configure an acquisition for a USB-201 (available on Digilent.com). Creating the class object attempts to contact the USB-201, and if found, it establishes communication and sets the sample rate and number of samples per channel. The get data method returns a 2D array (rows, columns), and there is a routine to plot the data. Matplotlib and IPython\u2019s Display module display the 2D array as a plot and list the array in a row-column fashion.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This a simple acquisition. The channel numbers are fixed to be channel 0 through channel 3. The limitation is 2000 samples per channel, and it uses the FOREGROUND mode, which blocks the code until the desired number of samples is returned. However, although the FOREGROUND mode blocks the code, the notebook will highlight the next cell as if it has finished. This can be demonstrated by configuring an acquisition requiring several seconds or more to finish.\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">The entire notebook is available on GitHub, here: <a href=\"https:\/\/github.com\/Digilent\/USB-201-Jupyter\/blob\/main\/USB-201-Demo.ipynb\">USB-201-Jupyter\/USB-201-Demo.ipynb at main \u00b7 Digilent\/USB-201-Jupyter<\/a>. The following images demonstrate acquiring data from a USB-201.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">My notebook\u2019s first cell defines my class object, which has the code to acquire data from the USB-201. The structure is as follows:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">Class daq:<\/span>\r\n    __init__\r\n        Initializes internal variables\r\n        Calls open_device\r\n    __del__\r\n        Closes the device and frees allocated memory\r\n    open_device(name)\r\n    set_samples_per_channel(samples)\r\n    set_sample_rate(rate)\r\n    array = get_data()\r\n    plot_data(array)<span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\" style=\"background-color: white; font-family: Lato, sans-serif; font-size: 1rem;\">\u00a0<\/span><\/pre>\n<p><span data-contrast=\"auto\">The first line, <\/span><i><span data-contrast=\"auto\">mcc = daq(\u201cUSB-201\u201d, rate=1000, samples=200)<\/span><\/i><span data-contrast=\"auto\">, creates the class object and sets the sample rate and the number of samples per channel.\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Next, we can use class methods to update the number of samples per channel and sample rate.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<pre><i><span data-contrast=\"auto\">new_number_of_samples = mcc.set_samples_per_channel(number of samples = 2000)<\/span><\/i><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/pre>\n<pre><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><i><span data-contrast=\"auto\">new_rate = mcc.set_sample_rate(sample_rate = 2000)<\/span><\/i><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/pre>\n<p><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><span data-contrast=\"auto\">Next, we grab a 2D array containing the acquisition\u2019s data using the following command:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">daq_data = mcc.get_data()<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/pre>\n<p><span data-contrast=\"auto\">daq_data is passed to the plot method, which plots the data. The IPython Display module is also used to display the data nicely. You can run the acquisition multiple times while mcc is valid. For instance, using a loop to collect additional data. Before leaving the cell, destroy the mcc object to close the device and free the allocated memory.\u00a0<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Execute_Class_functions.png\" alt=\"\" width=\"920\" height=\"276\" class=\"alignnone size-full wp-image-31344\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Execute_Class_functions.png 920w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Execute_Class_functions-600x180.png 600w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Demo_Output1.png\" alt=\"\" width=\"539\" height=\"673\" class=\"alignnone size-full wp-image-31345\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Demo_Output1.png 539w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Demo_Output1-481x600.png 481w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"><\/span><\/p>\n<p><span data-contrast=\"auto\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Demo_Output2.png\" alt=\"\" width=\"539\" height=\"407\" class=\"alignnone size-full wp-image-31346\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Demo_Output2.png 539w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Demo_Output2-290x220.png 290w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><\/span><\/p>\n<h2><span data-contrast=\"auto\">JupyterLab Widgets<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">One of JupyterLab\u2019s standout features is its support for interactive widgets. These widgets provide real-time data manipulation and visualization. These included controls, such as a text area, text box, select and multi-select controls, checkbox, sliders, tab panels, grid layout, etc. The display below is a dashboard example that visualizes live data. Jupyter Lab\u2019s ability to customize with Extensions and Widgets ensures it remains relevant across diverse use cases<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\"> <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Jupyter-Lab-Widgets.png\" alt=\"\" width=\"910\" height=\"501\" class=\"alignnone size-full wp-image-31347\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Jupyter-Lab-Widgets.png 910w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/Jupyter-Lab-Widgets-600x330.png 600w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/span><\/p>\n<p><span data-contrast=\"auto\">To exit JupyterLab, under the File menu, select Shutdown.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<h2><b><span data-contrast=\"auto\">Conclusion<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/h2>\n<p><span data-contrast=\"auto\">If it involves Data Science algorithms, scientific research, or education, JupyterLab will help.\u00a0 Its Extensions and Widgets make it a more robust interface than its initial appearance. It opens a new door to documenting scientific research, code algorithms, and the results they produce.\u00a0\u00a0<\/span><\/p>\n<div class='watch-action'><div class='watch-position align-left'><div class='action-like'><a class='lbg-style6 like-31339 jlk' data-task='like' data-post_id='31339' data-nonce='aa0ba4060c' rel='nofollow'><img src='https:\/\/digilent.com\/blog\/wp-content\/plugins\/wti-like-post-pro\/images\/pixel.gif' title='Like' \/><span class='lc-31339 lc'>+1<\/span><\/a><\/div><div class='action-unlike'><a class='unlbg-style6 unlike-31339 jlk' data-task='unlike' data-post_id='31339' data-nonce='aa0ba4060c' rel='nofollow'><img src='https:\/\/digilent.com\/blog\/wp-content\/plugins\/wti-like-post-pro\/images\/pixel.gif' title='Unlike' \/><span class='unlc-31339 unlc'>0<\/span><\/a><\/div><\/div> <div class='status-31339 status align-left'><\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>Introducing JupyterLab\u00a0 JupyterLab is a relatively new tool. It is an open-source development environment (IDE) for working with Jupyter notebooks. Notebooks are primarily used to combine program code, code results, &hellip; <\/p>\n","protected":false},"author":60,"featured_media":31345,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1563,1561],"tags":[4359,4364,4417,5112,4419,4626,5113],"ppma_author":[4461],"class_list":["post-31339","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide","category-applications","tag-daq","tag-data-acquisition","tag-jupyter","tag-jupyter-lab","tag-jupyter-notebook","tag-python","tag-usb-201"],"jetpack_featured_media_url":"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2025\/02\/USB_201_Demo_Output1.png","authors":[{"term_id":4461,"user_id":60,"is_guest":0,"slug":"jrys","display_name":"John Rys","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b5f589ceec35aa72d93bdb885888fe28157d060d3a9bd5484c6388d3f10fc51d?s=96&d=mm&r=g","1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":"","9":"","10":""}],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts\/31339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/users\/60"}],"replies":[{"embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/comments?post=31339"}],"version-history":[{"count":6,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts\/31339\/revisions"}],"predecessor-version":[{"id":31355,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts\/31339\/revisions\/31355"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/media\/31345"}],"wp:attachment":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/media?parent=31339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/categories?post=31339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/tags?post=31339"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=31339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}