<jupyter_start><jupyter_text>Introduzione ai notebooksUn notebook è un file json che viene letto e interpretato da [Jupyter](https://jupyter.org/).Ci permette di eseguire codice in modo interattivo e di documentare gli esperimenti.  Concetti chiave  CellsSono i blocchi elementari dei notebooks.Possono essere in:- *edit mode*: quando si sta modificando il contenuto (bordo blu + cursore visibile)- *command mode*: quando la cella è selezionata ma non si sta modificando il contenuto (non vediamo il cursore e non ha bordo blu)  Markdown cells This is some plain text that forms a paragraph. Add emphasis via **bold** and __bold__, or *italic* and _italic_. Paragraphs must be separated by an empty line. * Sometimes we want to include lists. * Which can be bulleted using asterisks. 1. Lists can also be numbered. 2. If we want an ordered list.[It is possible to include hyperlinks](https://www.example.com)Inline code uses single backticks: `foo()`, and code blocks use triple backticks: ```bar()``` Or can be indented by 4 spaces:     foo()    And finally, adding images is easy: ![Alt text](https://via.placeholder.com/150)  Code cellsEseguibili con `Ctrl + Enter` oppure `Shift + Enter`<jupyter_code>print('Hello World!')<jupyter_output>Hello World!<jupyter_text>KernelsDietro le quinte ogni notebook esegue un kernel. Nel nostro caso un kernel è un processo interattivo python.Quando viene eseguita una code cell:1. il codice viene inviato al kernel2. il kernel esegue il codice3. il risultato viene restituito al notebook in modo da essere visualizzato nell'output della cellaLo stato del kernel è persistente per l'intero documento (finchè il kernel non viene riavviato o spento).  Shortcuts - Passaggio fra `edit mode` e `command mode` utilizzando `Enter` e `Esc`- Quando si è in `command mode` è possibile:   - Spostarsi fra le celle utilizzando i tasti "freccia" **🠕** e **🠗**    - Inserire nuove celle sopra o sotto quella attiva premendo rispettivamente  **A** o **B**.   - Trasformare una cella in una *Markdown Cell* premendo **M**   - Trasformare una cella in una *Code Cell* premendo **Y**   - Eliminare una cella premendo **D + D** (2 volte **D**) will delete the active cell.   - Copiare una cella premendo **C**   - Incollare una cella premendo **V**  Magic commandsSono comandi speciali che possono essere eseguiti all'interno di una code cell.Alcuni esempi: - **!** system call: esegue un comando nel sistema che ospita il kernel- **%%writefile**: scrive il contenuto della cella su file- **%run**: esegue un file- **%%time**: stampa il tempo di esecuzioneLa lista completa è disponibile nella [documentazione ufficiale](https://ipython.readthedocs.io/en/stable/interactive/magics.html).<jupyter_code>!pwd
%%writefile ./notebooks/hello_world.py

print("hello world")
%run hello_world
%%time

import time
time.sleep(2)<jupyter_output>Wall time: 2.01 s
{'fraction_non_alphanumeric': 0.0908774373259053, 'fraction_numerical': 0.004874651810584958, 'mean_word_length': 4.827586206896552, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 4, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '201260', 'license': 'MIT', 'n_tokens_mistral': 915, 'n_tokens_neox': 913, 'n_words': 381, 'path': 'PercorsoIntroML/notebooks/00-intro-notebooks.ipynb', 'repo_name': 'nick87ds/MaterialeSerate', 'size': '2872'}