├── .devcontainer ├── Dockerfile └── devcontainer.json ├── .github └── workflows │ └── docker-image.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── SECURITY.md ├── SUPPORT.md ├── example-lesson.ipynb ├── example-notebook.ipynb ├── images ├── Codespace_build.png ├── Codespace_rebuild.png └── video-banner.gif ├── requirements.txt ├── slides.pptx ├── translations ├── README.md ├── es │ ├── README.md │ ├── example-notebook.ipynb │ └── slides_es.pptx └── pt-BR │ ├── README.md │ ├── exemplo.ipynb │ ├── licao.ipynb │ └── slides_pt-BR.pptx └── wine-regions.csv /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | # See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.245.0/containers/python-3/.devcontainer/base.Dockerfile 2 | 3 | # [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster 4 | ARG VARIANT="3.10-bullseye" 5 | FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT} 6 | 7 | # Define the path to the virtualenv to work with 8 | ARG VENV_PATH="/home/vscode/venv" 9 | 10 | COPY requirements.txt /tmp/pip-tmp/ 11 | RUN su vscode -c "python -m venv /home/vscode/venv" \ 12 | && su vscode -c "${VENV_PATH}/bin/pip --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt" \ 13 | && rm -rf /tmp/pip-tmp 14 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: 2 | // https://github.com/microsoft/vscode-dev-containers/tree/v0.245.0/containers/python-3 3 | { 4 | "name": "Python 3", 5 | "build": { 6 | "dockerfile": "Dockerfile", 7 | "context": "..", 8 | "args": { 9 | // Update 'VARIANT' to pick a Python version: 3, 3.10, 3.9, 3.8, 3.7, 3.6 10 | // Append -bullseye or -buster to pin to an OS version. 11 | // Use -bullseye variants on local on arm64/Apple Silicon. 12 | "VARIANT": "3.8-bullseye", 13 | // Options 14 | "NODE_VERSION": "none" 15 | } 16 | }, 17 | 18 | // Configure tool-specific properties. 19 | "customizations": { 20 | // Configure properties specific to VS Code. 21 | "vscode": { 22 | // Set *default* container specific settings.json values on container create. 23 | "settings": { 24 | "python.defaultInterpreterPath": "/home/vscode/venv/bin/python" 25 | }, 26 | 27 | // Add the IDs of extensions you want installed when the container is created. 28 | "extensions": [ 29 | "ms-python.python", 30 | "ms-python.vscode-pylance", 31 | "GitHub.copilot" 32 | ] 33 | } 34 | }, 35 | 36 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 37 | // "forwardPorts": [], 38 | 39 | // Use 'postCreateCommand' to run commands after the container is created. 40 | // "postCreateCommand": "pip3 install --user -r requirements.txt", 41 | 42 | // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. 43 | "remoteUser": "vscode", 44 | "features": { 45 | "azure-cli": "latest" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /.github/workflows/docker-image.yml: -------------------------------------------------------------------------------- 1 | name: Docker Image CI 2 | 3 | on: 4 | pull_request: 5 | branches: [ "main" ] 6 | # Allow mannually trigger 7 | workflow_dispatch: 8 | 9 | jobs: 10 | 11 | build: 12 | 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v3 17 | - name: Build the Codespaces container image 18 | run: docker build . --file .devcontainer/Dockerfile 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=526669888) 2 | 3 | # Python Codespace Template 4 | 5 | _Create or extend a ready-to-use repository for teaching Python in minutes_ 6 | 7 | * **Who is this for?** _Educators of all levels_. 8 | * **How much experience do students need?** _Zero_. This template is built with basic elements complete with comments so it can be used in beginner to advanced lessons. 9 | * **Prerequisites:** _None_. This template will provide a working Jupyter Notebook with Pandas using a dataset so that you can immediately start analyzing data as well as an example Notebook that you can use to teach Python with [GitHub Copilot](https://copilot.github.com), a powerful AI tool that helps you write code faster. 10 | 11 | 12 | With this template repository you can quickly create a normalized environment to teach or learn Python. Make your students focus on learning rather than setting up their environment. This template uses Codespaces, a development environment that's hosted in the cloud with [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), a powerful text editor. 13 | 14 | You'll also get the chance to try out Copilot to create a lesson plan using the [example-lesson.ipynb](./example-lesson.ipynb) file. 15 | 16 | 🤔 Curious? Watch the following video where we explain all the details: 17 | 18 | [![Teaching Python with Codespaces](https://img.youtube.com/vi/7rMvb03hHpI/0.jpg)](https://youtu.be/7rMvb03hHpI "Teaching Python with Codespaces") 19 | 20 |
21 | 🎥 Watch the video tutorial to learn more about Codespaces 22 | 23 | [![Codespaces Tutorial](https://img.youtube.com/vi/ozuDPmcC1io/0.jpg)](https://aka.ms/CodespacesVideoTutorial "Codespaces Tutorial") 24 |
25 | 26 | 🚀 Codespaces features: 27 | 28 | - Repeatable cloud environment offering a push-button experience. 29 | - Can be configured and customized. 30 | - Integrates with your repositories on GitHub and [VSCode](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza) 31 | 32 | As a teacher that means that you can create an environment, in the cloud, for your class that all students can use with zero or next to zero configuration regardless of what operating system they are using. 33 | 34 | ## 🧑‍🏫 What is GitHub Codespace and how can I use it in my teaching? 35 | 36 | A Codespace is a development environment that's hosted in the cloud that you can configure. The Codespaces Education benefit gives Global Campus teachers a free monthly allowance of GitHub Codespaces hours to use in [GitHub Classroom](classroom.github.com). Learn more [here](https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom) about Using GitHub Codespaces with GitHub Classroom. 37 | 38 | If you are not already a Global Campus teacher, apply [here](https://education.github.com/discount_requests/pack_application) or for more information, see [Apply to GitHub Global Campus as a teacher](https://docs.github.com/en/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-teachers/apply-to-github-global-campus-as-a-teacher). 39 | 40 | ## Customization 41 | 42 | Customize your project for GitHub Codespaces by committing configuration files to your repository (often known as Configuration-as-Code), which creates a repeatable codespace configuration for all users of your project. 43 | 44 | You can configure things like: 45 | 46 | - Extensions, you can specify what extensions should be preinstalled. 47 | - Dotfiles and settings. 48 | - Operating system libraries and dependencies 49 | 50 | > 💡 Learn more about [customization and configuration in the official documentation](https://docs.github.com/en/codespaces/customizing-your-codespace/personalizing-github-codespaces-for-your-account) 51 | 52 | 53 | ## Codespaces template 54 | 55 | This repo is a GitHub template. It contains the following: 56 | 57 | - [example-notebook.ipynb](./example-notebook.ipynb): A Jupyter notebook using the [Pandas](https://pandas.pydata.org/) library to teach basic operations with a small CSV (Comma Separated Value file) [dataset](./wine-regions.csv) 58 | - [.devcontainer/Dockerfile](./.devcontainer/Dockerfile): Configuration file used by Codespaces to determine operating system and other details. 59 | - [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json), A configuration file used by Codespaces to configure [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza) settings, such as the enabling of additional extensions. 60 | - `README.md`. This file describes this repository and what's in it. 61 | 62 | ## 🧐 Try it out 63 | 64 | Try out this template repository using Codespaces following these steps: 65 | 66 | 1. Create a repository from this template. Use this [create repo link](https://github.com/microsoft/codespaces-teaching-template-py/generate). You can make the repository private or public, up to you. 67 | 1. Navigate to the main page of the newly created repository. 68 | 1. Under the repository name, use the Code drop-down menu, and in the Codespaces tab, select "Create codespace on main". 69 | ![Create codespace](https://docs.github.com/assets/cb-138303/images/help/codespaces/new-codespace-button.png) 70 | 1. Wait as Github initializes the codespace: 71 | ![Creating codespace](./images/Codespace_build.png) 72 | 73 | 74 | ### Inspect your codespaces environment 75 | 76 | What you have at this point is a pre-configured environment where all the runtimes and libraries you need are already installed - a zero config experience. 77 | 78 | You also have a Jupyter Notebook that you can start using without any configuration. 79 | 80 | > This environment will run the same regardless of whether your students are on Windows, macOS or Linux. 81 | 82 | Open up your Jupyter Notebook file [example-notebook.ipynb](./example-notebook.ipynb) and note how you can add code and run it. 83 | 84 | ## Customize the Codespace 85 | 86 | Let's make changes to your environment. We'll cover two different challenges that you are likely to want to do: 87 | 88 | 1. Change the Python version installed 89 | 1. Add an extension 90 | 91 | 92 | ### Step 1: Change the Python environment 93 | 94 | Let's say you want to change what version of Python is installed. This is something you can control. 95 | 96 | Open [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json) and replace the following section: 97 | 98 | ```json 99 | "VARIANT": "3.8-bullseye" 100 | ``` 101 | 102 | with the following instruction: 103 | 104 | ```json 105 | "VARIANT": "3.9-bullseye" 106 | ``` 107 | 108 | This change instructs Codespaces to use Python 3.9 instead of 3.8. 109 | 110 | If you make any configuration change in `devcontainer.json`, a box will appear after saving. 111 | 112 | ![Recreating Codespace](./images/Codespace_rebuild.png) 113 | 114 | Click on rebuild. Wait for your Codespace to rebuild the VS Code environment. 115 | 116 | ### Step 2: Add an extension 117 | 118 | Your environment comes with pre-installed extensions. You can change which extensions your Codespaces environment starts with. Here's how: 119 | 120 | 1. Open file [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json) and locate the following JSON element **extensions**: 121 | 122 | ```json 123 | "extensions": [ 124 | "ms-python.python", 125 | "ms-python.vscode-pylance" 126 | ] 127 | ``` 128 | 129 | 1. Add _"ms-python.black-formatter"_ to the list of extensions. It should end up looking like the following: 130 | 131 | ```json 132 | "extensions": [ 133 | "ms-python.python", 134 | "ms-python.vscode-pylance", 135 | "ms-python.black-formatter" 136 | ] 137 | ``` 138 | 139 | That string is the unique identifier of [Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza), a popular extension for formatting Python code according to best practices. Adding the _"ms-python.black-formatter"_ identifier to the list lets Codespaces know that this extension should be pre-installed upon startup. 140 | 141 | Remainder: When you change any configuration on the json, a box will appear after saving. 142 | 143 | ![Reacreating codespace](./images/Codespace_rebuild.png) 144 | 145 | Click on rebuild. Wait for your codespace to rebuild the VS Code environment. 146 | 147 | To find the unique identifier of an extension: 148 | 149 | - Navigate to the extension's web page, for example [https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza) 150 | - Locate the *Unique Identifier* field under **More info** section on your right side. 151 | 152 | ## 🤖 Use Copilot to create a lesson for students 153 | GitHub Copilot is now available in GitHub Codespaces. You can use Copilot to create a lesson for your students. This repository includes the extension for Copilot so that you can use it right away. Make sure your account has access to Copilot. If you don't have access, you can [request access here](https://github.com/login?return_to=%2Fgithub-copilot%2Fsignup). 154 | 155 | GitHub Copilot is free for students and faculty. [Learn more](https://education.github.com/pack/offers). Follow [these steps](https://techcommunity.microsoft.com/t5/educator-developer-blog/step-by-step-setting-up-github-student-and-github-copilot-as-an/ba-p/3736279?WT.mc_id=academic-0000-alfredodeza) to verify your student or faculty membership and enable Copilot for free. 156 | 157 | ### Step 1: Write a description for your lesson 158 | Open the [example-notebook.ipynb](./example-notebook.ipynb) file and write a description for your lesson in the first cell. Make sure Copilot is enabled by clicking on the Copilot icon in the status bar and ensuring you're logged into GitHub. 159 | 160 | Edit the first cell and start typing `For this lesson`. Copilot will suggest a description for your lesson. Select the suggestion and press `Tab` to accept it. 161 | 162 | The cell should now look similar to this: 163 | 164 | ```markdown 165 | # Create a lesson using GitHub Copilot 166 | For this lesson, you'll use GitHub Copilot to create a lesson for students to learn how to write functions in Python. You'll use Copilot to write code, and you'll use Copilot to write text. 167 | ``` 168 | 169 | It is OK if Copilot doesn't suggest an exact replica of the text above. You can edit the text to make it more suitable for your lesson. 170 | 171 | ### Step 2 Add steps to your lesson 172 | Add a new cell below the description cell and start typing `### Step 1: Enable` to create a new step in your lesson. Copilot will suggest a step for your lesson. Select the suggestion and press `Tab` to accept it. 173 | 174 | The cell should now look similar to this: 175 | 176 | ```markdown 177 | ## Step 1: Enable GitHub Copilot 178 | Enable Copilot by following the instructions in the [GitHub Copilot documentation](https://docs.github.com/en/codespaces/developing-with-codespaces/using-codespaces-with-github-copilot). If you are a student, you can get a free [GitHub Student Developer Pack](https://education.github.com/pack) to get access to Copilot. 179 | ``` 180 | 181 | Keep adding more steps and continue typing to get more accurate suggestions for the content you are interested in. For example, this is a step that Copilot suggested for the next step in the lesson: 182 | 183 | ```markdown 184 | ## Step 3: Create challenges for this lesson 185 | You'll teach students how to write functions in Python. 186 | ``` 187 | 188 | You can use the example above to see what Copilot can suggest and auto-complete. Feel free to add as many steps as you think are necessary for your lesson. 189 | 190 | ### Step 3: Add code challenges for students 191 | Add a new code cell below the last step and start with a Python comment that describes the challenge. For example, you can write `# create a challenge for a student to write a function that returns the sum of two numbers`. Copilot will suggest a solution for the challenge. Select the suggestion and press `Tab` to accept it. For every new line, you can press `Return` (or `Enter`) to get a new suggestion. 192 | 193 | This is a sample of what Copilot suggested for the challenge above: 194 | 195 | ```python 196 | # create a challenge for a student to write a function that returns the sum of two numbers 197 | """ 198 | In this challenge, you'll write a function that returns the sum of two numbers. 199 | You'll use the `sum` function to add the two numbers. 200 | Start by writing a function that takes two numbers as parameters. 201 | Then, use the `sum` function to add the two numbers. 202 | Finally, return the sum of the two numbers. 203 | """ 204 | ``` 205 | 206 | Again, your challenge may not be exactly the same as the one above. You can edit the challenge to make it more suitable for your lesson. 207 | 208 | Create as many code cells with example prompts for your lesson. 209 | 210 | ### Step 4: Create a quiz for students 211 | Add a new cell below for writing Markdown (not code!) and start by writing `### Quiz`. Then add an _HTML_ comment to create a prompt so that GitHub Copilot understands what type of quiz you want to create. For example, you could use something similar to this: 212 | 213 | ```html 214 | 215 | ``` 216 | 217 | Copilot might not suggest a quiz for you right away. If that's the case, add new lines to the comment and press `Return` (or `Enter`) and start enumerating the questions you want to ask. For example, you could write: 218 | 219 | ```markdown 220 | 1. What is the output of the following code? 221 | ``` 222 | 223 | Of if you are looking for a specific question about a topic it could be: 224 | 225 | ```markdown 226 | 2. When you create a function that 227 | ``` 228 | 229 | Copilot suggested a question using variable arguments which is what the challenge is about: 230 | 231 | ```markdown 232 | 2. When you create a function that accepts a variable number of arguments, what is the name of the parameter that you use to access the arguments? 233 | ``` 234 | 235 | Finally, review the cells and make changes as necessary. You can also add more steps, challenges, and questions to your lesson. 236 | 237 | Congratulations! You've created a lesson for students to learn how to write functions in Python using GitHub Copilot. You can use Copilot to assist you in documentation, writing examples, or challenges like in this repository. Even this whole section was written using Copilot! 238 | 239 | ## Learn more 240 | 241 | - [GitHub Codespaces docs overview](https://docs.github.com/en/codespaces/overview) 242 | - [GitHub Codespaces docs quickstart](https://docs.github.com/en/codespaces/getting-started/quickstart) 243 | - [Using GitHub Codespaces with GitHub Classroom](https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom) 244 | 245 | 246 | 247 | ### 🔎 Found an issue or have an idea for improvement? 248 | Help us make this template repository better by [letting us know and opening an issue!](/../../issues/new). 249 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). 40 | 41 | 42 | -------------------------------------------------------------------------------- /SUPPORT.md: -------------------------------------------------------------------------------- 1 | # Support 2 | 3 | ## How to file issues and get help 4 | 5 | This project uses GitHub Issues to track bugs and feature requests. Please search the existing 6 | issues before filing new issues to avoid duplicates. For new issues, file your bug or 7 | feature request as a new Issue. 8 | 9 | For help and questions about using this project, please [file an issue](/../../issues/new) 10 | 11 | ## Microsoft Support Policy 12 | 13 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above. 14 | -------------------------------------------------------------------------------- /example-lesson.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "attachments": {}, 5 | "cell_type": "markdown", 6 | "metadata": {}, 7 | "source": [ 8 | "# Create a lesson using GitHub Copilot\n", 9 | "\n", 10 | "\n", 11 | "## Step 1: Enable GitHub Copilot\n", 12 | "\n", 13 | "\n", 14 | "## Step 2: Add new content to this lesson\n", 15 | "\n", 16 | "\n", 17 | "## Step 3: Create challenges for this lesson\n" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": null, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "# replace this comment with a prompt for Copilot that starts with \"create a challenge for a student\" to get useful suggestions\n" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "# replace this comment with a prompt for Copilot that starts with \"create a challenge for a student\" to get useful suggestions\n" 36 | ] 37 | }, 38 | { 39 | "attachments": {}, 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "## Quiz: Python functions and variable arguments\n" 44 | ] 45 | } 46 | ], 47 | "metadata": { 48 | "kernelspec": { 49 | "display_name": "Python 3", 50 | "language": "python", 51 | "name": "python3" 52 | }, 53 | "language_info": { 54 | "name": "python", 55 | "version": "3.11.1 (main, Dec 23 2022, 09:28:24) [Clang 14.0.0 (clang-1400.0.29.202)]" 56 | }, 57 | "orig_nbformat": 4, 58 | "vscode": { 59 | "interpreter": { 60 | "hash": "5c7b89af1651d0b8571dde13640ecdccf7d5a6204171d6ab33e7c296e100e08a" 61 | } 62 | } 63 | }, 64 | "nbformat": 4, 65 | "nbformat_minor": 2 66 | } 67 | -------------------------------------------------------------------------------- /example-notebook.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Basic Pandas operations\n", 8 | "This notebook will walk you through some basic operations with the Pandas Python library to explore a small dataset from wine regions around the world.\n", 9 | "\n", 10 | "**Learning Objectives:**\n", 11 | "\n", 12 | "1. Import Pandas using a common pattern\n", 13 | "1. Read a CSV dataset from disk\n", 14 | "1. Perform a quick overview of the dataset\n", 15 | "1. Use plot to provide visual context" 16 | ] 17 | }, 18 | { 19 | "cell_type": "markdown", 20 | "metadata": {}, 21 | "source": [ 22 | "### Import Pandas \n", 23 | "And then read a local CSV dataset file" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 35, 29 | "metadata": {}, 30 | "outputs": [ 31 | { 32 | "data": { 33 | "text/html": [ 34 | "
\n", 35 | "\n", 48 | "\n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | "
regionvarietyrating
0Pessac-Leognan, Bordeaux, FranceRed Wine90.0
1SpainSparkling & Champagne88.0
2Santa Ynez Valley, Santa Barbara, Central Coas...Red Wine96.0
3Sta. Rita Hills, Santa Barbara, Central Coast,...Red Wine90.0
4Burgundy, FranceWhite Wine94.0
5Santa Lucia Highlands, Monterey, Central Coast...Red Wine90.0
6ArgentinaRed Wine88.0
7Chianti Classico, Chianti, Tuscany, ItalyRed Wine91.0
8Ribbon Ridge, Willamette Valley, OregonRed Wine95.0
9Barolo, Piedmont, ItalyRed Wine94.0
10PortugalWhite Wine90.0
11Central Coast, CaliforniaRed Wine92.0
12Central Coast, CaliforniaRed Wine92.0
13Alsace, FranceWhite Wine91.0
14Willamette Valley, OregonWhite Wine90.0
15Columbia Valley, WashingtonRed Wine90.0
16Napa Valley, CaliforniaRed Wine94.0
17Barolo, Piedmont, ItalyRed Wine92.0
18Rioja, SpainRed Wine91.0
19Eden Valley, Barossa, South Australia, AustraliaWhite Wine90.0
\n", 180 | "
" 181 | ], 182 | "text/plain": [ 183 | " region variety \\\n", 184 | "0 Pessac-Leognan, Bordeaux, France Red Wine \n", 185 | "1 Spain Sparkling & Champagne \n", 186 | "2 Santa Ynez Valley, Santa Barbara, Central Coas... Red Wine \n", 187 | "3 Sta. Rita Hills, Santa Barbara, Central Coast,... Red Wine \n", 188 | "4 Burgundy, France White Wine \n", 189 | "5 Santa Lucia Highlands, Monterey, Central Coast... Red Wine \n", 190 | "6 Argentina Red Wine \n", 191 | "7 Chianti Classico, Chianti, Tuscany, Italy Red Wine \n", 192 | "8 Ribbon Ridge, Willamette Valley, Oregon Red Wine \n", 193 | "9 Barolo, Piedmont, Italy Red Wine \n", 194 | "10 Portugal White Wine \n", 195 | "11 Central Coast, California Red Wine \n", 196 | "12 Central Coast, California Red Wine \n", 197 | "13 Alsace, France White Wine \n", 198 | "14 Willamette Valley, Oregon White Wine \n", 199 | "15 Columbia Valley, Washington Red Wine \n", 200 | "16 Napa Valley, California Red Wine \n", 201 | "17 Barolo, Piedmont, Italy Red Wine \n", 202 | "18 Rioja, Spain Red Wine \n", 203 | "19 Eden Valley, Barossa, South Australia, Australia White Wine \n", 204 | "\n", 205 | " rating \n", 206 | "0 90.0 \n", 207 | "1 88.0 \n", 208 | "2 96.0 \n", 209 | "3 90.0 \n", 210 | "4 94.0 \n", 211 | "5 90.0 \n", 212 | "6 88.0 \n", 213 | "7 91.0 \n", 214 | "8 95.0 \n", 215 | "9 94.0 \n", 216 | "10 90.0 \n", 217 | "11 92.0 \n", 218 | "12 92.0 \n", 219 | "13 91.0 \n", 220 | "14 90.0 \n", 221 | "15 90.0 \n", 222 | "16 94.0 \n", 223 | "17 92.0 \n", 224 | "18 91.0 \n", 225 | "19 90.0 " 226 | ] 227 | }, 228 | "execution_count": 35, 229 | "metadata": {}, 230 | "output_type": "execute_result" 231 | } 232 | ], 233 | "source": [ 234 | "import pandas as pd\n", 235 | "df = pd.read_csv(\"wine-regions.csv\")\n", 236 | "df.head(20)" 237 | ] 238 | }, 239 | { 240 | "cell_type": "markdown", 241 | "metadata": {}, 242 | "source": [ 243 | "### Create a randomized subset of data\n", 244 | "Use the `sample()` method to get `n` items from the dataset" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": 37, 250 | "metadata": {}, 251 | "outputs": [ 252 | { 253 | "data": { 254 | "text/html": [ 255 | "
\n", 256 | "\n", 269 | "\n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | "
regionvarietyrating
1202Napa Valley, CaliforniaWhite Wine90.0
1957Rioja, SpainRed Wine92.0
4077Lirac, Rhone, FranceRed Wine94.0
246Barolo, Piedmont, ItalyRed Wine92.0
719Willamette Valley, OregonRed Wine92.0
\n", 311 | "
" 312 | ], 313 | "text/plain": [ 314 | " region variety rating\n", 315 | "1202 Napa Valley, California White Wine 90.0\n", 316 | "1957 Rioja, Spain Red Wine 92.0\n", 317 | "4077 Lirac, Rhone, France Red Wine 94.0\n", 318 | "246 Barolo, Piedmont, Italy Red Wine 92.0\n", 319 | "719 Willamette Valley, Oregon Red Wine 92.0" 320 | ] 321 | }, 322 | "execution_count": 37, 323 | "metadata": {}, 324 | "output_type": "execute_result" 325 | } 326 | ], 327 | "source": [ 328 | "df.sample(n=20).head()" 329 | ] 330 | }, 331 | { 332 | "cell_type": "markdown", 333 | "metadata": {}, 334 | "source": [ 335 | "### Get more information about the dataset\n", 336 | "Use `info()` and `describe()` methods for different aspects of the dataset" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": 38, 342 | "metadata": {}, 343 | "outputs": [ 344 | { 345 | "data": { 346 | "text/html": [ 347 | "
\n", 348 | "\n", 361 | "\n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | "
rating
count5000.000000
mean91.185800
std2.168644
min85.000000
25%90.000000
50%91.000000
75%92.000000
max99.000000
\n", 403 | "
" 404 | ], 405 | "text/plain": [ 406 | " rating\n", 407 | "count 5000.000000\n", 408 | "mean 91.185800\n", 409 | "std 2.168644\n", 410 | "min 85.000000\n", 411 | "25% 90.000000\n", 412 | "50% 91.000000\n", 413 | "75% 92.000000\n", 414 | "max 99.000000" 415 | ] 416 | }, 417 | "execution_count": 38, 418 | "metadata": {}, 419 | "output_type": "execute_result" 420 | } 421 | ], 422 | "source": [ 423 | "df.describe()" 424 | ] 425 | }, 426 | { 427 | "cell_type": "code", 428 | "execution_count": 39, 429 | "metadata": {}, 430 | "outputs": [ 431 | { 432 | "name": "stdout", 433 | "output_type": "stream", 434 | "text": [ 435 | "\n", 436 | "RangeIndex: 5000 entries, 0 to 4999\n", 437 | "Data columns (total 3 columns):\n", 438 | " # Column Non-Null Count Dtype \n", 439 | "--- ------ -------------- ----- \n", 440 | " 0 region 5000 non-null object \n", 441 | " 1 variety 4942 non-null object \n", 442 | " 2 rating 5000 non-null float64\n", 443 | "dtypes: float64(1), object(2)\n", 444 | "memory usage: 117.3+ KB\n" 445 | ] 446 | } 447 | ], 448 | "source": [ 449 | "df.info()" 450 | ] 451 | }, 452 | { 453 | "cell_type": "markdown", 454 | "metadata": {}, 455 | "source": [ 456 | "### Use plotting for visual context\n", 457 | "Use the `plot()` method which uses the `matplotlib` library behind the scenes to provide visual context on data" 458 | ] 459 | }, 460 | { 461 | "cell_type": "code", 462 | "execution_count": 40, 463 | "metadata": {}, 464 | "outputs": [ 465 | { 466 | "data": { 467 | "text/plain": [ 468 | "" 469 | ] 470 | }, 471 | "execution_count": 40, 472 | "metadata": {}, 473 | "output_type": "execute_result" 474 | }, 475 | { 476 | "data": { 477 | "image/png": "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", 478 | "text/plain": [ 479 | "
" 480 | ] 481 | }, 482 | "metadata": {}, 483 | "output_type": "display_data" 484 | } 485 | ], 486 | "source": [ 487 | "df.plot()" 488 | ] 489 | } 490 | ], 491 | "metadata": { 492 | "kernelspec": { 493 | "display_name": "Python 3.8.13 ('venv')", 494 | "language": "python", 495 | "name": "python3" 496 | }, 497 | "language_info": { 498 | "codemirror_mode": { 499 | "name": "ipython", 500 | "version": 3 501 | }, 502 | "file_extension": ".py", 503 | "mimetype": "text/x-python", 504 | "name": "python", 505 | "nbconvert_exporter": "python", 506 | "pygments_lexer": "ipython3", 507 | "version": "3.8.13" 508 | }, 509 | "orig_nbformat": 4, 510 | "vscode": { 511 | "interpreter": { 512 | "hash": "f2a18e7aa35240a52af99ab71370101fdc3f0f419f0b3683d6828ff1fe801d36" 513 | } 514 | } 515 | }, 516 | "nbformat": 4, 517 | "nbformat_minor": 2 518 | } 519 | -------------------------------------------------------------------------------- /images/Codespace_build.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/images/Codespace_build.png -------------------------------------------------------------------------------- /images/Codespace_rebuild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/images/Codespace_rebuild.png -------------------------------------------------------------------------------- /images/video-banner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/images/video-banner.gif -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | ipykernel==6.15.2 2 | pandas==1.4.4 3 | matplotlib==3.5.3 4 | matplotlib-inline==0.1.6 5 | -------------------------------------------------------------------------------- /slides.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/slides.pptx -------------------------------------------------------------------------------- /translations/README.md: -------------------------------------------------------------------------------- 1 | In this folder, you can find translations of this repository in their appropriately-named folders. 2 | 3 | - [Spanish](./es/README.md) 4 | - [Portuguese](./pt-BR/README.md) -------------------------------------------------------------------------------- /translations/es/README.md: -------------------------------------------------------------------------------- 1 | [![Abre en GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=526669888) 2 | 3 | # Plantilla de Python en Codespaces 4 | 5 | _Crea o amplía un repositorio listo para usarse en la enseñanza de Python en minutos_ 6 | 7 | * **¿A quién va dirigido?** _Educadores de todos los niveles_. 8 | * **¿Cuánta experiencia necesitan los estudiantes?** _Ninguna experiencia previa_. Esta plantilla está construida con elementos básicos con comentarios para que pueda utilizarse en lecciones de principiantes a avanzados. 9 | * **Prerrequisitos:** _Ninguno_. Esta plantilla proporciona un Jupyter Notebook funcional con Pandas que utiliza un conjunto de datos para que puedas comenzar a analizar datos de inmediato, así como un Notebook de ejemplo que puedes utilizar para enseñar Python con [GitHub Copilot](https://copilot.github.com), una poderosa herramienta de IA que puede ayudarte a escribir código más rápido. 10 | 11 | Con esta plantilla puedes crear rápidamente un entorno normalizado para enseñar o aprender Python. Haz que tus estudiantes se centren en su aprendizaje en lugar de configurar su entorno. Esta plantilla utiliza Codespaces, un entorno de desarrollo alojado en la nube con [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), un poderoso editor de texto. 12 | 13 | Tú también tendrás la oportunidad de probar Copilot para crear un plan de clase utilizando el archivo [example-lesson.ipynb](./example-lesson.ipynb). 14 | 15 | 🤔 ¿Curioso? Mira el siguiente vídeo donde te explicamos todos los detalles: 16 | 17 | [![Enseñando Python con Codespaces](https://img.youtube.com/vi/7rMvb03hHpI/0.jpg)](https://youtu.be/7rMvb03hHpI "Enseñando Python con Codespaces") 18 | 19 |
20 | 🎥 Ve el video tutorial para obtener más información sobre Codespaces 21 | 22 | [![Codespaces Tutorial](https://img.youtube.com/vi/ozuDPmcC1io/0.jpg)](https://aka.ms/CodespacesVideoTutorial "Codespaces Tutorial") 23 |
24 | 25 | 🚀 Características de Codespaces: 26 | 27 | - Entorno de nube repetible que ofrece una experiencia increíble. 28 | - Se puede configurar y personalizar. 29 | - Se integra con sus repositorios en GitHub y [VSCode](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza) 30 | 31 | Como profesor, eso significa que puede crear un entorno, en la nube, para que en su clase todos los estudiantes puedan usar una configuración cero o casi nula, independientemente del sistema operativo que estén utilizando. 32 | 33 | ## 🧑‍🏫 ¿Qué es GitHub Codespace y cómo puedo usarlo en mi enseñanza? 34 | 35 | Un Codespace es un entorno de desarrollo alojado en la nube que puede configurar. El beneficio Codespaces Education ofrece a los profesores de Global Campus una asignación mensual gratuita de horas de GitHub Codespaces para usar en [GitHub Classroom](classroom.github.com). Obten más información [aquí](https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom) sobre el uso de GitHub Codespaces con GitHub Classroom. 36 | 37 | Si aún no eres profesor de Global Campus, aplica [aquí](https://education.github.com/discount_requests/pack_application) o para obtener más información, consulta [Aplicar a GitHub Global Campus como profesor](https://docs.github.com/en/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-teachers/apply-to-github-global-campus-as-a-teacher). 38 | 39 | ## Personalización 40 | 41 | Personaliza tu proyecto para GitHub Codespaces al confirmar archivos de configuración en tu repositorio (a menudo conocido como _Configuration-as-Code_), lo que crea una configuración repetible de Codespaces para todos los usuarios de tu proyecto. 42 | 43 | Puedes configurar cosas como: 44 | 45 | - Extensiones, puedes especificar qué extensiones deben estar preinstaladas. 46 | - Dotfiles y configuraciones. 47 | - Bibliotecas del sistema operativo y dependencias. 48 | 49 | > 💡 Más información sobre [personalización y configuración en la documentación oficial](https://docs.github.com/en/codespaces/customizing-your-codespace/personalizing-github-codespaces-for-your-account) 50 | 51 | 52 | ## Plantilla de Codespaces 53 | 54 | Este repositorio es una plantilla de GitHub, la cual contiene lo siguiente: 55 | 56 | - [example-notebook.ipynb](./example-notebook.ipynb): Un notebook que utiliza la librería [Pandas](https://pandas.pydata.org/) para enseñar operaciones básicas con un pequeño archivo CSV (_Comma Separated Value_) [dataset](./wine-regions.csv) 57 | - [.devcontainer/Dockerfile](../../.devcontainer/Dockerfile): Archivo de configuración usado por Codespaces para determinar el sistema operativo y otros detalles. 58 | - [.devcontainer/devcontainer.json](../../.devcontainer/devcontainer.json): Un archivo de configuración utilizado por Codespaces para configurar [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), por ejemplo, para agregar y habilitar extensiones adicionales. 59 | - `README.md`. Este archivo describe este repositorio y lo que contiene. 60 | 61 | ## 🧐 ¡Pruébalo! 62 | 63 | Prueba este repositorio de plantillas con Codespaces siguiendo estos pasos: 64 | 65 | 1. Crea un repositorio desde esta plantilla. Utiliza este [link crea un repositorio](https://github.com/microsoft/codespaces-teaching-template-py/generate). Tú puedes hacer este repositorio privado o público, es tú decisión. 66 | 2. Navega a la página principal del repositorio recién creado. 67 | 3. Debajo del nombre del repositorio, usa el menú desplegable Code (Código), y en la pestaña Codespaces, selecciona "Create codespace on main" (Crear Codespace en main). 68 | ![Crea un codespace](https://docs.github.com/assets/cb-138303/images/help/codespaces/new-codespace-button.png) 69 | 4. Espera mientras GitHub inicializa el Codespace. 70 | 71 | ![Creando el codespace](../../images/Codespace_build.png) 72 | 73 | 74 | ### Inspecciona el entorno de Codespaces 75 | 76 | Lo que tienes en este momento es un entorno preconfigurado donde todos los tiempos de ejecución y bibliotecas que necesitas ya están instalados - esto es una experiencia de configuración cero. 77 | 78 | También tienes un Jupyter Notebook que puedes comenzar a usar sin ninguna configuración. 79 | 80 | > Este entorno se ejecutará independientemente de si tus estudiantes están en Windows, macOS o Linux. 81 | 82 | Abre tu archivo Jupyter Notebook [example-notebook.ipynb](./example-notebook.ipynb) y observa cómo puedes agregar código y ejecutarlo. 83 | 84 | ## Personaliza tu Codespace 85 | 86 | Hagamos cambios en tu entorno. Cubriremos dos desafíos diferentes que es probable que desees hacer: 87 | 88 | 1. Cambiar la versión de Python instalada 89 | 1. Agregar una extensión 90 | 91 | 92 | ### Paso 1: Cambiar el entorno de Python 93 | 94 | Digamos que deseas cambiar la versión de Python que está instalada. Esto es algo que puedes controlar. 95 | 96 | Abre [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json) y reemplaza la siguiente sección: 97 | 98 | ```json 99 | "VARIANT": "3.8-bullseye" 100 | ``` 101 | 102 | con las siguientes instrucciones: 103 | 104 | ```json 105 | "VARIANT": "3.9-bullseye" 106 | ``` 107 | 108 | Este cambio ordena a Codespaces usar Python 3.9 en lugar de 3.8. 109 | 110 | ### Paso 2: Añade una extensión 111 | 112 | Tu entorno viene con extensiones preinstaladas. Puedes cambiar con qué extensiones comienza tu entorno de Codespaces, a continuación, te indicamos cómo: 113 | 114 | 115 | 1. Abre el archivo [.devcontainer/devcontainer.json](./.devcontainer/devcontainer.json) y busca el siguiente elemento JSON **extensions**: 116 | 117 | ```json 118 | "extensions": [ 119 | "ms-python.python", 120 | "ms-python.vscode-pylance" 121 | ] 122 | ``` 123 | 124 | 2. Agrega _"ms-python.black-formatter"_ a la lista de extensiones. Debería terminar pareciéndose a lo siguiente: 125 | 126 | ```json 127 | "extensions": [ 128 | "ms-python.python", 129 | "ms-python.vscode-pylance", 130 | "ms-python.black-formatter" 131 | ] 132 | ``` 133 | 134 | Esa cadena de texto es el identificador único de [Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza), una extensión popular para formatear código de Python de acuerdo a las mejores prácticas. Añadiendo el identificador _"ms-python.black-formatter"_ a la lista le hace saber a Codespaces que esta extensión debería ser preinstalada al iniciar. 135 | 136 | Recuerda: Cuando cambies cualquier configuración en el json, aparecerá un cuadro después de guardar. 137 | 138 | ![Recreando codespace](../../images/Codespace_rebuild.png) 139 | 140 | Haz clic en reconstruir. Espera a que el espacio de código vuelva a generar el entorno de VS Code. 141 | 142 | Para encontrar el identificador único de una extensión: 143 | 144 | - Ingresa a la página web de la extensión, por ejemplo [https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza) 145 | - Localiza el campo *Unique Identifier* bajo la sección **More info** en tu lado derecho. 146 | 147 | ## 🤖 Utiliza Copilot para crear una lección para alumnos 148 | GitHub Copilot ya está disponible en GitHub Codespaces. Puedes utilizar Copilot para crear una clase para tus alumnos. Este repositorio incluye la extensión de Copilot para que puedas utilizarla inmediatamente. Asegúrate de que tu cuenta tiene acceso a Copilot. Si no tienes acceso, puedes [solicitar acceso aquí](https://github.com/login?return_to=%2Fgithub-copilot%2Fsignup). 149 | 150 | GitHub Copilot es gratis para estudiantes y profesores. [Más información](https://education.github.com/pack/offers). Sigue [estos pasos](https://techcommunity.microsoft.com/t5/educator-developer-blog/qu%C3%A9-es-github-copilot-y-c%C3%B3mo-pueden-los-estudiantes-y-maestros/ba-p/3815760?WT.mc_id=studentamb_118941) para verificar tu afiliación como estudiante o profesor y activar Copilot de forma gratuita. 151 | 152 | ### Paso 1: Escriba una descripción para su lección 153 | Abra el archivo [example-notebook.ipynb](./example-notebook.ipynb) y escriba una descripción para su clase en la primera celda. Asegúrate de que Copilot está activado haciendo clic en el icono de Copilot en la barra de estado y asegurándote de que has iniciado sesión en GitHub. 154 | 155 | Edita la primera celda y empieza a escribir `Para esta lección`. Copilot le sugerirá una descripción para su lección. Seleccione la sugerencia y pulse `Tab` para aceptarla. 156 | 157 | La celda debería tener ahora un aspecto similar al siguiente: 158 | 159 | ```markdown 160 | # Crea una lección usando GitHub Copilot 161 | Para esta lección, utilizarás GitHub Copilot para crear una lección para que los estudiantes aprendan a escribir funciones en Python. Utilizarás Copilot para escribir código, y Copilot para escribir texto. 162 | ``` 163 | 164 | No pasa nada si Copilot no te sugiere una réplica exacta del texto anterior. Puedes editar el texto para hacerlo más adecuado para tu clase. 165 | 166 | ### Paso 2 Añada pasos a su lección 167 | Añada una nueva celda debajo de la celda de descripción y empiece a escribir `### Paso 1: Activar` para crear un nuevo paso en su clase. Copilot le sugerirá un paso para su lección. Seleccione la sugerencia y pulse `Tab` para aceptarla. 168 | 169 | La celda debería tener ahora un aspecto similar al siguiente 170 | 171 | ```markdown 172 | ## Paso 1: Activar GitHub Copilot 173 | Habilita Copilot siguiendo las instrucciones de la [documentación de GitHub Copilot](https://docs.github.com/en/codespaces/developing-with-codespaces/using-codespaces-with-github-copilot). Si eres estudiante, puedes obtener el [GitHub Student Developer Pack](https://education.github.com/pack) de forma gratuita para obtener accesso a Copilot. 174 | ``` 175 | 176 | Sigue añadiendo más pasos y continúa escribiendo para obtener sugerencias más precisas sobre el contenido que te interesa. Por ejemplo, este es un paso que Copilot sugirió para el siguiente paso de la clase: 177 | 178 | ```markdown 179 | ## Paso 3: Crear retos para esta lección 180 | Enseñarás a los alumnos a escribir funciones en Python. 181 | ``` 182 | 183 | Puedes utilizar el ejemplo anterior para ver lo que Copilot puede sugerir y autocompletar. Siéntete libre de añadir tantos pasos como creas necesarios para tu lección. 184 | 185 | ### Paso 3: Añadir retos de código para los estudiantes 186 | Añada una nueva celda de código debajo del último paso y comience con un comentario en Python que describa el reto. Por ejemplo, puede escribir `# crear un reto para que un alumno escriba una función que devuelva la suma de dos números`. Copilot sugerirá una solución para el reto. Seleccione la sugerencia y pulse `Tab` para aceptarla. Para cada nueva línea, puede pulsar `Return` (o `Enter`) para obtener una nueva sugerencia. 187 | 188 | Este es un ejemplo de lo que Copilot sugirió para el reto anterior: 189 | 190 | ```python 191 | # crear un reto para que un alumno escriba una función que devuelva la suma de dos números 192 | """ 193 | En este reto, escribirás una función que devuelva la suma de dos números. 194 | Usarás la función `sum` para sumar los dos números. 195 | Comienza escribiendo una función que tome dos números como parámetros. 196 | A continuación, utiliza la función `sum` para sumar los dos números. 197 | Finalmente, devuelve la suma de los dos números. 198 | """ 199 | ``` 200 | 201 | De nuevo, puede que su reto no sea exactamente igual al anterior. Puede editar el reto para adaptarlo mejor a su clase. 202 | 203 | Crea tantas celdas de código con preguntas de ejemplo para su clase. 204 | 205 | ### Paso 4: Crea un cuestionario para los alumnos 206 | Añada una nueva celda abajo para escribir Markdown (¡no código!) y empiece escribiendo `#### Quiz`. A continuación, añade un comentario _HTML_ para crear una pregunta de modo que GitHub Copilot entienda qué tipo de cuestionario quieres crear. Por ejemplo, podrías usar algo similar a esto: 207 | 208 | ```html 209 | 210 | ``` 211 | 212 | Es posible que Copilot no te sugiera un cuestionario de inmediato. Si ese es el caso, añade nuevas líneas al comentario y pulsa `Return` (o `Enter`) y empieza a enumerar las preguntas que quieres hacer. Por ejemplo, podrías escribir: 213 | 214 | ```markdown 215 | 1. ¿Cuál es la salida del siguiente código? 216 | ``` 217 | 218 | O si estás buscando una pregunta específica sobre un tema podría ser: 219 | 220 | ```markdown 221 | 2. Cuando creas una función que 222 | ``` 223 | 224 | Copilot sugirió una pregunta usando argumentos variables que es de lo que trata el reto: 225 | 226 | ```markdown 227 | 2. Cuando creas una función que acepta un número variable de argumentos, ¿cómo se llama el parámetro que utilizas para acceder a los argumentos? 228 | ``` 229 | 230 | Por último, revisa las celdas y realiza los cambios necesarios. También puedes añadir más pasos, retos y preguntas a tu lección. 231 | 232 | ¡Felicidades! Has creado una lección para que los alumnos aprendan a escribir funciones en Python utilizando GitHub Copilot. Puedes usar Copilot para ayudarte en la documentación, escribiendo ejemplos, o retos como en este repositorio. ¡Incluso toda esta sección fue escrita usando Copilot! 233 | 234 | ## Aprende más 235 | 236 | - [GitHub Codespaces docs - Visión general](https://docs.github.com/en/codespaces/overview) 237 | - [GitHub Codespaces docs - Comienza rapido](https://docs.github.com/en/codespaces/getting-started/quickstart) 238 | - [Usa GitHub Codespaces con GitHub Classroom](https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom) 239 | 240 | ### 🔎 ¿Has encontrado un problema o tienes una idea para mejorarlo? 241 | Ayúdanos a mejorar este repositorio al [hacernos lo saber y abriendo un issue!](/../../issues/new). -------------------------------------------------------------------------------- /translations/es/example-notebook.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "attachments": {}, 5 | "cell_type": "markdown", 6 | "metadata": {}, 7 | "source": [ 8 | "# Operaciones básicas de Pandas\n", 9 | "\n", 10 | "Este cuaderno te guiará a través de algunas operaciones básicas con la librería Pandas de Python para explorar un pequeño conjunto de datos de regiones vinícolas de todo el mundo.\n", 11 | "\n", 12 | "**Objetivos de aprendizaje:**\n", 13 | "\n", 14 | "1. Importar Pandas usando un patrón común\n", 15 | "1. Leer un conjunto de datos CSV de un disco\n", 16 | "1. Realizar una visión general rápida del conjunto de datos\n", 17 | "1. Usar plot para proporcionar contexto visual" 18 | ] 19 | }, 20 | { 21 | "attachments": {}, 22 | "cell_type": "markdown", 23 | "metadata": {}, 24 | "source": [ 25 | "### Importa Pandas \n", 26 | "Y luego lee un archivo de conjunto de datos CSV local" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 35, 32 | "metadata": {}, 33 | "outputs": [ 34 | { 35 | "data": { 36 | "text/html": [ 37 | "
\n", 38 | "\n", 51 | "\n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | "
regionvarietyrating
0Pessac-Leognan, Bordeaux, FranceRed Wine90.0
1SpainSparkling & Champagne88.0
2Santa Ynez Valley, Santa Barbara, Central Coas...Red Wine96.0
3Sta. Rita Hills, Santa Barbara, Central Coast,...Red Wine90.0
4Burgundy, FranceWhite Wine94.0
5Santa Lucia Highlands, Monterey, Central Coast...Red Wine90.0
6ArgentinaRed Wine88.0
7Chianti Classico, Chianti, Tuscany, ItalyRed Wine91.0
8Ribbon Ridge, Willamette Valley, OregonRed Wine95.0
9Barolo, Piedmont, ItalyRed Wine94.0
10PortugalWhite Wine90.0
11Central Coast, CaliforniaRed Wine92.0
12Central Coast, CaliforniaRed Wine92.0
13Alsace, FranceWhite Wine91.0
14Willamette Valley, OregonWhite Wine90.0
15Columbia Valley, WashingtonRed Wine90.0
16Napa Valley, CaliforniaRed Wine94.0
17Barolo, Piedmont, ItalyRed Wine92.0
18Rioja, SpainRed Wine91.0
19Eden Valley, Barossa, South Australia, AustraliaWhite Wine90.0
\n", 183 | "
" 184 | ], 185 | "text/plain": [ 186 | " region variety \\\n", 187 | "0 Pessac-Leognan, Bordeaux, France Red Wine \n", 188 | "1 Spain Sparkling & Champagne \n", 189 | "2 Santa Ynez Valley, Santa Barbara, Central Coas... Red Wine \n", 190 | "3 Sta. Rita Hills, Santa Barbara, Central Coast,... Red Wine \n", 191 | "4 Burgundy, France White Wine \n", 192 | "5 Santa Lucia Highlands, Monterey, Central Coast... Red Wine \n", 193 | "6 Argentina Red Wine \n", 194 | "7 Chianti Classico, Chianti, Tuscany, Italy Red Wine \n", 195 | "8 Ribbon Ridge, Willamette Valley, Oregon Red Wine \n", 196 | "9 Barolo, Piedmont, Italy Red Wine \n", 197 | "10 Portugal White Wine \n", 198 | "11 Central Coast, California Red Wine \n", 199 | "12 Central Coast, California Red Wine \n", 200 | "13 Alsace, France White Wine \n", 201 | "14 Willamette Valley, Oregon White Wine \n", 202 | "15 Columbia Valley, Washington Red Wine \n", 203 | "16 Napa Valley, California Red Wine \n", 204 | "17 Barolo, Piedmont, Italy Red Wine \n", 205 | "18 Rioja, Spain Red Wine \n", 206 | "19 Eden Valley, Barossa, South Australia, Australia White Wine \n", 207 | "\n", 208 | " rating \n", 209 | "0 90.0 \n", 210 | "1 88.0 \n", 211 | "2 96.0 \n", 212 | "3 90.0 \n", 213 | "4 94.0 \n", 214 | "5 90.0 \n", 215 | "6 88.0 \n", 216 | "7 91.0 \n", 217 | "8 95.0 \n", 218 | "9 94.0 \n", 219 | "10 90.0 \n", 220 | "11 92.0 \n", 221 | "12 92.0 \n", 222 | "13 91.0 \n", 223 | "14 90.0 \n", 224 | "15 90.0 \n", 225 | "16 94.0 \n", 226 | "17 92.0 \n", 227 | "18 91.0 \n", 228 | "19 90.0 " 229 | ] 230 | }, 231 | "execution_count": 35, 232 | "metadata": {}, 233 | "output_type": "execute_result" 234 | } 235 | ], 236 | "source": [ 237 | "import pandas as pd\n", 238 | "df = pd.read_csv(\"wine-regions.csv\")\n", 239 | "df.head(20)" 240 | ] 241 | }, 242 | { 243 | "attachments": {}, 244 | "cell_type": "markdown", 245 | "metadata": {}, 246 | "source": [ 247 | "### Crea un subconjunto aleatorio de datos\n", 248 | "Utiliza metodo `sample()` para obtener `n` elementos del conjunto de datos." 249 | ] 250 | }, 251 | { 252 | "cell_type": "code", 253 | "execution_count": 37, 254 | "metadata": {}, 255 | "outputs": [ 256 | { 257 | "data": { 258 | "text/html": [ 259 | "
\n", 260 | "\n", 273 | "\n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | "
regionvarietyrating
1202Napa Valley, CaliforniaWhite Wine90.0
1957Rioja, SpainRed Wine92.0
4077Lirac, Rhone, FranceRed Wine94.0
246Barolo, Piedmont, ItalyRed Wine92.0
719Willamette Valley, OregonRed Wine92.0
\n", 315 | "
" 316 | ], 317 | "text/plain": [ 318 | " region variety rating\n", 319 | "1202 Napa Valley, California White Wine 90.0\n", 320 | "1957 Rioja, Spain Red Wine 92.0\n", 321 | "4077 Lirac, Rhone, France Red Wine 94.0\n", 322 | "246 Barolo, Piedmont, Italy Red Wine 92.0\n", 323 | "719 Willamette Valley, Oregon Red Wine 92.0" 324 | ] 325 | }, 326 | "execution_count": 37, 327 | "metadata": {}, 328 | "output_type": "execute_result" 329 | } 330 | ], 331 | "source": [ 332 | "df.sample(n=20).head()" 333 | ] 334 | }, 335 | { 336 | "attachments": {}, 337 | "cell_type": "markdown", 338 | "metadata": {}, 339 | "source": [ 340 | "### Obten más información sobre el conjunto de datos\n", 341 | "Utiliza los metodos `info()` y `describe()` para diferentes aspectos del conjunto de datos" 342 | ] 343 | }, 344 | { 345 | "cell_type": "code", 346 | "execution_count": 38, 347 | "metadata": {}, 348 | "outputs": [ 349 | { 350 | "data": { 351 | "text/html": [ 352 | "
\n", 353 | "\n", 366 | "\n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | "
rating
count5000.000000
mean91.185800
std2.168644
min85.000000
25%90.000000
50%91.000000
75%92.000000
max99.000000
\n", 408 | "
" 409 | ], 410 | "text/plain": [ 411 | " rating\n", 412 | "count 5000.000000\n", 413 | "mean 91.185800\n", 414 | "std 2.168644\n", 415 | "min 85.000000\n", 416 | "25% 90.000000\n", 417 | "50% 91.000000\n", 418 | "75% 92.000000\n", 419 | "max 99.000000" 420 | ] 421 | }, 422 | "execution_count": 38, 423 | "metadata": {}, 424 | "output_type": "execute_result" 425 | } 426 | ], 427 | "source": [ 428 | "df.describe()" 429 | ] 430 | }, 431 | { 432 | "cell_type": "code", 433 | "execution_count": 39, 434 | "metadata": {}, 435 | "outputs": [ 436 | { 437 | "name": "stdout", 438 | "output_type": "stream", 439 | "text": [ 440 | "\n", 441 | "RangeIndex: 5000 entries, 0 to 4999\n", 442 | "Data columns (total 3 columns):\n", 443 | " # Column Non-Null Count Dtype \n", 444 | "--- ------ -------------- ----- \n", 445 | " 0 region 5000 non-null object \n", 446 | " 1 variety 4942 non-null object \n", 447 | " 2 rating 5000 non-null float64\n", 448 | "dtypes: float64(1), object(2)\n", 449 | "memory usage: 117.3+ KB\n" 450 | ] 451 | } 452 | ], 453 | "source": [ 454 | "df.info()" 455 | ] 456 | }, 457 | { 458 | "attachments": {}, 459 | "cell_type": "markdown", 460 | "metadata": {}, 461 | "source": [ 462 | "### Usa plot para el contexto visual\n", 463 | "Utiliza el metodo `plot()` el cual utiliza la libreria `matplotlib` detrás de escena para proporcionar contexto visual sobre los datos." 464 | ] 465 | }, 466 | { 467 | "cell_type": "code", 468 | "execution_count": 40, 469 | "metadata": {}, 470 | "outputs": [ 471 | { 472 | "data": { 473 | "text/plain": [ 474 | "" 475 | ] 476 | }, 477 | "execution_count": 40, 478 | "metadata": {}, 479 | "output_type": "execute_result" 480 | }, 481 | { 482 | "data": { 483 | "image/png": "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", 484 | "text/plain": [ 485 | "
" 486 | ] 487 | }, 488 | "metadata": {}, 489 | "output_type": "display_data" 490 | } 491 | ], 492 | "source": [ 493 | "df.plot()" 494 | ] 495 | } 496 | ], 497 | "metadata": { 498 | "kernelspec": { 499 | "display_name": "Python 3.8.13 ('venv')", 500 | "language": "python", 501 | "name": "python3" 502 | }, 503 | "language_info": { 504 | "codemirror_mode": { 505 | "name": "ipython", 506 | "version": 3 507 | }, 508 | "file_extension": ".py", 509 | "mimetype": "text/x-python", 510 | "name": "python", 511 | "nbconvert_exporter": "python", 512 | "pygments_lexer": "ipython3", 513 | "version": "3.8.14" 514 | }, 515 | "orig_nbformat": 4, 516 | "vscode": { 517 | "interpreter": { 518 | "hash": "f2a18e7aa35240a52af99ab71370101fdc3f0f419f0b3683d6828ff1fe801d36" 519 | } 520 | } 521 | }, 522 | "nbformat": 4, 523 | "nbformat_minor": 2 524 | } 525 | -------------------------------------------------------------------------------- /translations/es/slides_es.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/translations/es/slides_es.pptx -------------------------------------------------------------------------------- /translations/pt-BR/README.md: -------------------------------------------------------------------------------- 1 | 2 | [![Abrir no GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=526669888) 3 | 4 | # Ensine Python no Codespace 5 | 6 | _Crie ou estenda (fork) um repositório pronto para uso para ensinar Python em minutos!_ 7 | 8 | * **Para quem é?** _Educadores de todos os níveis_. 9 | * **Quanta experiência os alunos precisam?** _Nenhuma_. Este modelo é construído com todos os elementos básicos com comentários para que possa ser usado em aulas, do nível iniciante ao avançado. 10 | * **Pré-requisitos:** _Nenhum_. Este modelo fornecerá um Jupyter Notebook funcional com Pandas, usando um conjunto de dados para que você possa começar a analisar dados imediatamente, bem como um Notebook de exemplo que você pode usar para ensinar Python com [GitHub Copilot](https://copilot.github.com) , uma poderosa ferramenta de IA que ajuda você a escrever código mais rapidamente. 11 | 12 | 13 | Com este repositório de modelos, você pode criar rapidamente um ambiente normalizado para ensinar ou aprender Python. Faça com que seus alunos se concentrem no aprendizado, em vez de configurar o ambiente. Este modelo usa Codespaces, um ambiente de desenvolvimento hospedado na nuvem com [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), um poderoso editor de texto. 14 | 15 | Você também terá a chance de experimentar o Copilot para criar um plano de aula usando o arquivo [licao.ipynb](./licao.ipynb). 16 | 17 | 🤔 Curioso? Veja o seguinte vídeo onde explicamos todos os detalhes: 18 | 19 | [![Ensinando Python com Codespaces](../../images/video-banner.gif)](https://youtu.be/7rMvb03hHpI "Ensinando Python com Codespaces") 20 | 21 |
22 | 🎥 Assista ao tutorial em vídeo para saber mais sobre Codespaces 23 | 24 | [![Tutorial de Codespaces](https://img.youtube.com/vi/ozuDPmcC1io/0.jpg)](https://aka.ms/CodespacesVideoTutorial "Tutorial de Codespaces") 25 |
26 | 27 | 🚀 Recursos do Codespaces: 28 | 29 | - Ambiente em nuvem repetível que oferece uma experiência de um clique. 30 | - Pode ser configurado e personalizado. 31 | - Integra-se com seus repositórios no GitHub e [VSCode](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza) 32 | 33 | Como professor, isso significa que você pode criar um ambiente na nuvem para sua turma e que todos os alunos podem usar com configuração zero ou quase zero, independentemente do sistema operacional que estão usando. 34 | 35 | ## 🧑‍🏫 O que é GitHub Codespace e como posso usá-lo em minhas aulas? 36 | 37 | Um Codespace é um ambiente de desenvolvimento hospedado na nuvem que você pode configurar. O benefício Codespaces Education oferece aos professores do Global Campus um subsídio mensal gratuito de horas de GitHub Codespaces para usar no [GitHub Classroom](https://classroom.github.com). Saiba mais [aqui](https://docs.github.com/pt/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom) sobre o uso de codespaces do GitHub com o GitHub Classroom. 38 | 39 | Se você ainda não é professor do Global Campus, inscreva-se [aqui](https://education.github.com/discount_requests/pack_application) ou, para obter mais informações, consulte [Inscreva-se no GitHub Global Campus como professor](https://docs.github.com/pt/education/explore-the-benefits-of-teaching-and-learning-with-github-education/github-global-campus-for-teachers/apply-to-github-global-campus-as-a-teacher). 40 | 41 | ## Costumização 42 | 43 | Personalize seu projeto para GitHub Codespaces alterando os arquivos de configuração em seu repositório (geralmente conhecido como Configuration-as-Code ou, em português, Configuração-como-Código), que cria uma configuração de codespace repetível para todos os usuários de seu projeto. 44 | 45 | Você pode configurar coisas como: 46 | 47 | - Extensões, você pode especificar quais extensões devem ser pré-instaladas. 48 | - Dotfiles e configurações. 49 | - Bibliotecas e dependências do sistema operacional 50 | 51 | > 💡 Saiba mais sobre [customização e configuração na documentação oficial](https://docs.github.com/pt/codespaces/customizing-your-codespace/personalizing-github-codespaces-for-your-account) 52 | 53 | 54 | ## Modelo do Codespace 55 | 56 | Este repositório é um modelo do GitHub. Ele contém o seguinte: 57 | 58 | - [exemplo.ipynb](./exemplo.ipynb): um notebook Jupyter usando a biblioteca [Pandas](https://pandas.pydata.org/) para ensinar operações básicas com um pequeno arquivo CSV (separado por vírgula Arquivo de valor) [dataset](../../wine-regions.csv) 59 | - [.devcontainer/Dockerfile](./../../.devcontainer/Dockerfile): Arquivo de configuração usado pelo Codespaces para determinar o sistema operacional e outros detalhes. 60 | - [.devcontainer/devcontainer.json](./../../.devcontainer/devcontainer.json), Um arquivo de configuração usado por Codespaces para configurar [Visual Studio Code](https://visualstudio.microsoft.com/?WT.mc_id=academic-77460-alfredodeza), como a ativação de extensões adicionais. 61 | - `README.md`. Este arquivo descreve este repositório e o que há nele. 62 | 63 | ## 🧐 Experimente 64 | 65 | Experimente este repositório de modelos usando Codespaces seguindo estas etapas: 66 | 67 | 1. Crie um repositório a partir deste modelo. Use este [link de criação de repositório](https://github.com/microsoft/codespaces-teaching-template-py/generate). Você pode tornar o repositório privado ou público, você decide. 68 | 1. Navegue até a página principal do repositório recém-criado. 69 | 1. Sob o nome do repositório, use o menu suspenso Código e, na guia Codespaces, selecione "Criar Codespace na main". 70 | ![Criar o Codespace](https://docs.github.com/assets/cb-138303/images/help/codespaces/new-codespace-button.png) 71 | 1. Aguarde enquanto o Github inicializa o Codespace: 72 | ![Criando o Codespace](../../images/Codespace_build.png) 73 | 74 | 75 | ### Inspecione seu ambiente do Codespaces 76 | 77 | O que você tem neste momento é um ambiente pré-configurado, em que todas as configurações e bibliotecas que você precisa já estão instaladas - uma experiência de configuração zero. 78 | 79 | Você, também, tem um Jupyter Notebook que pode começar a usar, sem nenhuma configuração adicional. 80 | 81 | > Este ambiente será executado da mesma forma, independentemente de seus alunos estarem no Windows, macOS ou Linux. 82 | 83 | Abra seu arquivo Jupyter Notebook [exemplo.ipynb](./exemplo.ipynb) e observe como você pode adicionar código e executá-lo. 84 | 85 | ## Personalize o Codespace 86 | 87 | Vamos fazer algumas alterações em seu ambiente. Abordaremos dois desafios diferentes e que você provavelmente deseja fazer: 88 | 89 | 1. Alterar a versão do Python instalada 90 | 2. Adicionar uma extensão 91 | 92 | ### Etapa 1: alterar o ambiente Python 93 | 94 | Digamos que você queira alterar qual versão do Python está instalada. Isso é algo que você pode controlar. 95 | 96 | Abra [.devcontainer/devcontainer.json](./../../.devcontainer/devcontainer.json) e substitua a seguinte seção: 97 | 98 | ```json 99 | "VARIANT": "3.8-bullseye" 100 | ``` 101 | 102 | com a seguinte instrução: 103 | 104 | ```json 105 | "VARIANT": "3.9-bullseye" 106 | ``` 107 | 108 | Essa alteração instrui o Codespaces a usar o Python 3.9 em vez do 3.8. 109 | 110 | Se você fizer qualquer alteração na configuração do `devcontainer.json`, uma caixa aparecerá após salvar. 111 | 112 | ![Recriando Codespace](./images/Codespace_rebuild.png) 113 | 114 | Clique em Rebuild (em português, "Reconstruir"). Aguarde até que seu Codespace reconstrua o ambiente VS Code. 115 | 116 | ### Etapa 2: adicionar uma extensão 117 | 118 | Seu ambiente vem com extensões pré-instaladas. Você pode alterar com quais extensões seu ambiente Codespaces começa. Veja como: 119 | 120 | 1. Abra o arquivo [.devcontainer/devcontainer.json](./../../.devcontainer/devcontainer.json) e localize o seguinte elemento JSON 121 | **extensões**: 122 | 123 | ```json 124 | "extensions": [ 125 | "ms-python.python", 126 | "ms-python.vscode-pylance" 127 | ] 128 | ``` 129 | 130 | 1. Adicione _"ms-python.black-formatter"_ à lista de extensões. Ele deve acabar se parecendo com o seguinte: 131 | 132 | ```json 133 | "extensions": [ 134 | "ms-python.python", 135 | "ms-python.vscode-pylance", 136 | "ms-python.black-formatter" 137 | ] 138 | ``` 139 | 140 | Essa string é o identificador exclusivo do [Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter&WT.mc_id=academic-77460-alfredodeza), uma extensão popular para formatar código Python, de acordo com as melhores práticas. Adicionar o identificador _"ms-python.black-formatter"_ à lista permite que os Codespaces saibam que essa extensão deve ser pré-instalada na inicialização. 141 | 142 | Aviso: Ao alterar qualquer configuração no json, aparecerá uma caixa após salvar. 143 | 144 | ![Recriando o Codespace](../../images/Codespace_rebuild.png) 145 | 146 | Clique em Rebuild (em português, "Reconstruir"). Aguarde seu codespace reconstruir o ambiente do VS Code. 147 | 148 | Para encontrar o identificador exclusivo de uma extensão: 149 | 150 | - Navegue até a página da extensão, por exemplo [https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter](https://marketplace.visualstudio.com/items?itemName=ms- python.black-formatter&WT.mc_id=academic-77460-alfredodeza) 151 | - Localize o campo *Identificador exclusivo* na seção **Mais informações** à sua direita. 152 | 153 | ## 🤖 Use o Copilot para criar uma aula para os alunos 154 | O GitHub Copilot agora está disponível no GitHub Codespaces. Você pode usar o Copilot para criar uma aula para seus alunos. Este repositório inclui a extensão para Copilot para que você possa usá-lo imediatamente. Certifique-se de que sua conta tenha acesso ao Copilot. Caso não tenha acesso, você pode [solicitar acesso aqui](https://github.com/login?return_to=%2Fgithub-copilot%2Fsignup). 155 | 156 | O GitHub Copilot é gratuito para alunos e professores. [Saiba mais](https://education.github.com/pack/offers). Siga [estas etapas](https://techcommunity.microsoft.com/t5/educator-developer-blog/step-by-step-setting-up-github-student-and-github-copilot-as-an/ba-p/3736279?WT.mc_id=academic-0000-alfredodeza) para verificar sua associação de aluno ou professor e habilitar o Copilot gratuitamente. 157 | 158 | ### Passo 1: Escreva uma descrição para sua aula 159 | Abra o arquivo [exemplo.ipynb](./exemplo.ipynb) e escreva uma descrição para sua lição na primeira célula. Certifique-se de que o Copilot esteja ativado clicando no ícone do Copilot na barra de status e verificando se você está conectado ao GitHub. 160 | 161 | Edite a primeira célula e comece a digitar `Para esta lição`. O Copilot irá sugerir uma descrição para sua aula. Selecione a sugestão e pressione `Tab` para aceitá-la. 162 | 163 | A célula agora deve ser semelhante a esta: 164 | 165 | ```markdown 166 | # Crie uma aula usando o GitHub Copilot 167 | Nesta esta lição, você usará o GitHub Copilot para criar uma aula para os alunos aprenderem a escrever funções em Python. Você usará o Copilot para escrever código e também para escrever texto. 168 | ``` 169 | 170 | Tudo bem se o Copilot não sugerir uma réplica exata do texto acima. Você pode editar o texto para torná-lo mais adequado para sua lição. 171 | 172 | ### Passo 2: Adicione etapas à sua lição 173 | Adicione uma nova célula abaixo da célula de descrição e comece a digitar `### Etapa 1: Habilitar` para criar uma nova etapa em sua lição. O Copilot irá sugerir uma etapa para sua aula. Selecione a sugestão e pressione `Tab` para aceitá-la. 174 | 175 | A célula agora deve ser semelhante a esta: 176 | 177 | ```markdown 178 | ## Passo 1: Habilitar GitHub Copilot 179 | Habilite o Copilot seguindo as instruções na [documentação do GitHub Copilot](https://docs.github.com/pt/codespaces/developing-with-codespaces/using-codespaces-with-github-copilot). Se você é um estudante, pode obter um [GitHub Student Developer Pack] gratuito (https://education.github.com/pack) para obter acesso ao Copilot. 180 | ``` 181 | 182 | Continue adicionando mais etapas e digitando para obter sugestões mais precisas para o conteúdo de seu interesse. Por exemplo, esta é uma etapa sugerida pelo Copilot para a próxima etapa da lição: 183 | 184 | ```markdown 185 | ## Passo 3: Crie desafios para esta lição 186 | Você ensinará os alunos a escrever funções em Python. 187 | ``` 188 | 189 | Você pode usar o exemplo acima para ver o que o Copilot pode sugerir e preencher automaticamente. Sinta-se à vontade para adicionar quantas etapas achar necessárias para sua lição. 190 | 191 | ### Passo 3: adicione desafios de código para os alunos 192 | Adicione uma nova célula de código abaixo da última etapa e comece com um comentário Python que descreva o desafio. Por exemplo, você pode escrever `# crie um desafio para um aluno escrever uma função que retorne a soma de dois números`. O Copilot irá sugerir uma solução para o desafio. Selecione a sugestão e pressione `Tab` para aceitá-la. Para cada nova linha, você pode pressionar `Return` (ou `Enter`) para obter uma nova sugestão. 193 | 194 | Esta é uma amostra do que o Copilot sugeriu para o desafio acima: 195 | 196 | ```python 197 | # Crie um desafio para um aluno escrever uma função que retorna a soma de dois números 198 | """ 199 | Neste desafio, você escreverá uma função que retorna a soma de dois números. 200 | Você usará a função 'soma' para adicionar os dois números. 201 | Comece escrevendo uma função que usa dois números como parâmetros. 202 | Em seguida, use a função 'soma' para adicionar os dois números. 203 | Por fim, retorne a soma dos dois números. 204 | """ 205 | ``` 206 | 207 | Novamente, seu desafio pode não ser exatamente igual ao anterior. Você pode editar o desafio para torná-lo mais adequado para sua aula. 208 | 209 | Crie quantas células de código com prompts de exemplo para sua lição. 210 | 211 | ### Etapa 4: crie um questionário para os alunos 212 | Adicione uma nova célula abaixo para escrever Markdown (não código!) e comece escrevendo `### Quiz`. Em seguida, adicione um comentário _HTML_ para criar um prompt para que o GitHub Copilot entenda que tipo de questionário você deseja criar. Por exemplo, você poderia usar algo parecido com isto: 213 | 214 | ```html 215 | 216 | ``` 217 | 218 | O Copilot pode não sugerir um teste para você imediatamente. Se for esse o caso, adicione novas linhas ao comentário e pressione `Return` (ou `Enter`) e comece a enumerar as perguntas que deseja fazer. Por exemplo, você poderia escrever: 219 | 220 | ```markdown 221 | 1. Qual é a saída do seguinte código? 222 | ``` 223 | 224 | Se você está procurando uma pergunta específica sobre um tópico, pode ser: 225 | 226 | ```markdown 227 | 2. Ao criar uma função que 228 | ``` 229 | 230 | Copilot sugeriu uma pergunta usando argumentos variáveis, que é o objetivo do desafio: 231 | 232 | ```markdown 233 | 3. Quando você cria uma função que aceita um número variável de argumentos, qual é o nome do parâmetro que você usa para acessar os argumentos? 234 | ``` 235 | 236 | Por fim, revise as células e faça as alterações necessárias. Você também pode adicionar mais etapas, desafios e perguntas à sua lição. 237 | 238 | Parabéns! Você criou uma lição para os alunos aprenderem a escrever funções em Python usando o GitHub Copilot. Você pode usar o Copilot para ajudá-lo na documentação, escrever exemplos ou desafios como neste repositório. Mesmo esta seção inteira foi escrita usando o Copilot! 239 | 240 | ## Saiba mais 241 | 242 | - [GitHub Codespaces docs - Visão geral](https://docs.github.com/pt/codespaces/overview) 243 | - [GitHub Codespaces docs - Início rápido](https://docs.github.com/pt/codespaces/getting-started/quickstart) 244 | - [Usando GitHub Codespaces com GitHub Classroom](https://docs.github.com/pt/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom) 245 | 246 | 247 | 248 | ### 🔎 Encontrou um problema ou tem uma ideia de melhoria? 249 | Ajude-nos a deixar este repositório melhor [informando-nos e abrindo uma issue!](https://github.com/education/codespaces-teaching-template-py/issues/new). 250 | -------------------------------------------------------------------------------- /translations/pt-BR/exemplo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "attachments": {}, 5 | "cell_type": "markdown", 6 | "metadata": {}, 7 | "source": [ 8 | "# Operações básicas do Pandas\n", 9 | "Este notebook o guiará por algumas operações básicas com a biblioteca Pandas Python para explorar um pequeno conjunto de dados de regiões vinícolas de todo o mundo.\n", 10 | "\n", 11 | "**Objetivos de aprendizado:**\n", 12 | "\n", 13 | "1. Importar biblioteca Pandas usando um padrão comum\n", 14 | "2. Leia um conjunto de dados CSV do disco\n", 15 | "3. Faça uma visão geral rápida do conjunto de dados\n", 16 | "4. Use o enredo para fornecer contexto visual" 17 | ] 18 | }, 19 | { 20 | "attachments": {}, 21 | "cell_type": "markdown", 22 | "metadata": {}, 23 | "source": [ 24 | "### Importar Biblioteca Pandas\n", 25 | "E, em seguida, leia um arquivo de conjunto de dados CSV local" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 1, 31 | "metadata": {}, 32 | "outputs": [ 33 | { 34 | "data": { 35 | "text/html": [ 36 | "
\n", 37 | "\n", 50 | "\n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | "
regionvarietyrating
0Pessac-Leognan, Bordeaux, FranceRed Wine90.0
1SpainSparkling & Champagne88.0
2Santa Ynez Valley, Santa Barbara, Central Coas...Red Wine96.0
3Sta. Rita Hills, Santa Barbara, Central Coast,...Red Wine90.0
4Burgundy, FranceWhite Wine94.0
5Santa Lucia Highlands, Monterey, Central Coast...Red Wine90.0
6ArgentinaRed Wine88.0
7Chianti Classico, Chianti, Tuscany, ItalyRed Wine91.0
8Ribbon Ridge, Willamette Valley, OregonRed Wine95.0
9Barolo, Piedmont, ItalyRed Wine94.0
10PortugalWhite Wine90.0
11Central Coast, CaliforniaRed Wine92.0
12Central Coast, CaliforniaRed Wine92.0
13Alsace, FranceWhite Wine91.0
14Willamette Valley, OregonWhite Wine90.0
15Columbia Valley, WashingtonRed Wine90.0
16Napa Valley, CaliforniaRed Wine94.0
17Barolo, Piedmont, ItalyRed Wine92.0
18Rioja, SpainRed Wine91.0
19Eden Valley, Barossa, South Australia, AustraliaWhite Wine90.0
\n", 182 | "
" 183 | ], 184 | "text/plain": [ 185 | " region variety \\\n", 186 | "0 Pessac-Leognan, Bordeaux, France Red Wine \n", 187 | "1 Spain Sparkling & Champagne \n", 188 | "2 Santa Ynez Valley, Santa Barbara, Central Coas... Red Wine \n", 189 | "3 Sta. Rita Hills, Santa Barbara, Central Coast,... Red Wine \n", 190 | "4 Burgundy, France White Wine \n", 191 | "5 Santa Lucia Highlands, Monterey, Central Coast... Red Wine \n", 192 | "6 Argentina Red Wine \n", 193 | "7 Chianti Classico, Chianti, Tuscany, Italy Red Wine \n", 194 | "8 Ribbon Ridge, Willamette Valley, Oregon Red Wine \n", 195 | "9 Barolo, Piedmont, Italy Red Wine \n", 196 | "10 Portugal White Wine \n", 197 | "11 Central Coast, California Red Wine \n", 198 | "12 Central Coast, California Red Wine \n", 199 | "13 Alsace, France White Wine \n", 200 | "14 Willamette Valley, Oregon White Wine \n", 201 | "15 Columbia Valley, Washington Red Wine \n", 202 | "16 Napa Valley, California Red Wine \n", 203 | "17 Barolo, Piedmont, Italy Red Wine \n", 204 | "18 Rioja, Spain Red Wine \n", 205 | "19 Eden Valley, Barossa, South Australia, Australia White Wine \n", 206 | "\n", 207 | " rating \n", 208 | "0 90.0 \n", 209 | "1 88.0 \n", 210 | "2 96.0 \n", 211 | "3 90.0 \n", 212 | "4 94.0 \n", 213 | "5 90.0 \n", 214 | "6 88.0 \n", 215 | "7 91.0 \n", 216 | "8 95.0 \n", 217 | "9 94.0 \n", 218 | "10 90.0 \n", 219 | "11 92.0 \n", 220 | "12 92.0 \n", 221 | "13 91.0 \n", 222 | "14 90.0 \n", 223 | "15 90.0 \n", 224 | "16 94.0 \n", 225 | "17 92.0 \n", 226 | "18 91.0 \n", 227 | "19 90.0 " 228 | ] 229 | }, 230 | "execution_count": 1, 231 | "metadata": {}, 232 | "output_type": "execute_result" 233 | } 234 | ], 235 | "source": [ 236 | "import pandas as pd\n", 237 | "df = pd.read_csv(\"..\\..\\wine-regions.csv\")\n", 238 | "df.head(20)" 239 | ] 240 | }, 241 | { 242 | "attachments": {}, 243 | "cell_type": "markdown", 244 | "metadata": {}, 245 | "source": [ 246 | "### Crie um subconjunto aleatório de dados\n", 247 | "Use o método `sample()` para obter itens `n` do conjunto de dados" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 2, 253 | "metadata": {}, 254 | "outputs": [ 255 | { 256 | "data": { 257 | "text/html": [ 258 | "
\n", 259 | "\n", 272 | "\n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | "
regionvarietyrating
203Columbia Valley, WashingtonRed Wine86.0
1246Rioja, SpainRed Wine92.0
95AustraliaWhite Wine87.0
1213McLaren Vale, South Australia, AustraliaRed Wine90.0
903Ribbon Ridge, Willamette Valley, OregonRed Wine95.0
\n", 314 | "
" 315 | ], 316 | "text/plain": [ 317 | " region variety rating\n", 318 | "203 Columbia Valley, Washington Red Wine 86.0\n", 319 | "1246 Rioja, Spain Red Wine 92.0\n", 320 | "95 Australia White Wine 87.0\n", 321 | "1213 McLaren Vale, South Australia, Australia Red Wine 90.0\n", 322 | "903 Ribbon Ridge, Willamette Valley, Oregon Red Wine 95.0" 323 | ] 324 | }, 325 | "execution_count": 2, 326 | "metadata": {}, 327 | "output_type": "execute_result" 328 | } 329 | ], 330 | "source": [ 331 | "df.sample(n=20).head()" 332 | ] 333 | }, 334 | { 335 | "attachments": {}, 336 | "cell_type": "markdown", 337 | "metadata": {}, 338 | "source": [ 339 | "### Obtenha mais informações sobre o conjunto de dados\n", 340 | "Use os métodos `info()` e `describe()` para diferentes aspectos do conjunto de dados" 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "execution_count": 3, 346 | "metadata": {}, 347 | "outputs": [ 348 | { 349 | "data": { 350 | "text/html": [ 351 | "
\n", 352 | "\n", 365 | "\n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | "
rating
count5000.000000
mean91.185800
std2.168644
min85.000000
25%90.000000
50%91.000000
75%92.000000
max99.000000
\n", 407 | "
" 408 | ], 409 | "text/plain": [ 410 | " rating\n", 411 | "count 5000.000000\n", 412 | "mean 91.185800\n", 413 | "std 2.168644\n", 414 | "min 85.000000\n", 415 | "25% 90.000000\n", 416 | "50% 91.000000\n", 417 | "75% 92.000000\n", 418 | "max 99.000000" 419 | ] 420 | }, 421 | "execution_count": 3, 422 | "metadata": {}, 423 | "output_type": "execute_result" 424 | } 425 | ], 426 | "source": [ 427 | "df.describe()" 428 | ] 429 | }, 430 | { 431 | "cell_type": "code", 432 | "execution_count": 4, 433 | "metadata": {}, 434 | "outputs": [ 435 | { 436 | "name": "stdout", 437 | "output_type": "stream", 438 | "text": [ 439 | "\n", 440 | "RangeIndex: 5000 entries, 0 to 4999\n", 441 | "Data columns (total 3 columns):\n", 442 | " # Column Non-Null Count Dtype \n", 443 | "--- ------ -------------- ----- \n", 444 | " 0 region 5000 non-null object \n", 445 | " 1 variety 4942 non-null object \n", 446 | " 2 rating 5000 non-null float64\n", 447 | "dtypes: float64(1), object(2)\n", 448 | "memory usage: 117.3+ KB\n" 449 | ] 450 | } 451 | ], 452 | "source": [ 453 | "df.info()" 454 | ] 455 | }, 456 | { 457 | "attachments": {}, 458 | "cell_type": "markdown", 459 | "metadata": {}, 460 | "source": [ 461 | "### Use plotagem para contexto visual\n", 462 | "Use o método `plot()` que usa a biblioteca `matplotlib` nos bastidores para fornecer contexto visual nos dados" 463 | ] 464 | }, 465 | { 466 | "cell_type": "code", 467 | "execution_count": 5, 468 | "metadata": {}, 469 | "outputs": [ 470 | { 471 | "data": { 472 | "text/plain": [ 473 | "" 474 | ] 475 | }, 476 | "execution_count": 5, 477 | "metadata": {}, 478 | "output_type": "execute_result" 479 | }, 480 | { 481 | "data": { 482 | "image/png": "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", 483 | "text/plain": [ 484 | "
" 485 | ] 486 | }, 487 | "metadata": { 488 | "needs_background": "light" 489 | }, 490 | "output_type": "display_data" 491 | } 492 | ], 493 | "source": [ 494 | "df.plot()" 495 | ] 496 | } 497 | ], 498 | "metadata": { 499 | "kernelspec": { 500 | "display_name": "Python 3.8.13 ('venv')", 501 | "language": "python", 502 | "name": "python3" 503 | }, 504 | "language_info": { 505 | "codemirror_mode": { 506 | "name": "ipython", 507 | "version": 3 508 | }, 509 | "file_extension": ".py", 510 | "mimetype": "text/x-python", 511 | "name": "python", 512 | "nbconvert_exporter": "python", 513 | "pygments_lexer": "ipython3", 514 | "version": "3.9.7" 515 | }, 516 | "orig_nbformat": 4, 517 | "vscode": { 518 | "interpreter": { 519 | "hash": "f2a18e7aa35240a52af99ab71370101fdc3f0f419f0b3683d6828ff1fe801d36" 520 | } 521 | } 522 | }, 523 | "nbformat": 4, 524 | "nbformat_minor": 2 525 | } 526 | -------------------------------------------------------------------------------- /translations/pt-BR/licao.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "attachments": {}, 5 | "cell_type": "markdown", 6 | "metadata": {}, 7 | "source": [ 8 | "# Crie uma aula usando o GitHub Copilot\n", 9 | "\n", 10 | "\n", 11 | "## Etapa 1: ativar o GitHub Copilot\n", 12 | "\n", 13 | "\n", 14 | "## Etapa 2: adicionar novo conteúdo a esta lição\n", 15 | "\n", 16 | "\n", 17 | "## Passo 3: Crie desafios para esta lição\n" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": null, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "# substitua este comentário por um prompt para o Copilot que comece com \"crie um desafio para um aluno\" para obter sugestões úteis\n" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "# substitua este comentário por um prompt para o Copilot que comece com \"crie um desafio para um aluno\" para obter sugestões úteis\n" 36 | ] 37 | }, 38 | { 39 | "attachments": {}, 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "## Quiz: funções Python e argumentos variáveis\n" 44 | ] 45 | } 46 | ], 47 | "metadata": { 48 | "kernelspec": { 49 | "display_name": "Python 3", 50 | "language": "python", 51 | "name": "python3" 52 | }, 53 | "language_info": { 54 | "name": "python", 55 | "version": "3.11.1 (main, Dec 23 2022, 09:28:24) [Clang 14.0.0 (clang-1400.0.29.202)]" 56 | }, 57 | "orig_nbformat": 4, 58 | "vscode": { 59 | "interpreter": { 60 | "hash": "5c7b89af1651d0b8571dde13640ecdccf7d5a6204171d6ab33e7c296e100e08a" 61 | } 62 | } 63 | }, 64 | "nbformat": 4, 65 | "nbformat_minor": 2 66 | } 67 | -------------------------------------------------------------------------------- /translations/pt-BR/slides_pt-BR.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/github-education-resources/codespaces-teaching-template-py/b565de75dedf61b9c38337abf1c276be2acf6410/translations/pt-BR/slides_pt-BR.pptx --------------------------------------------------------------------------------