From 1f2052bf5a6192c734ca1381e0def484871bff20 Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Sat, 2 Mar 2024 02:17:51 -0800 Subject: [PATCH 01/11] readme update --- README.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 41ef260..b55c7bc 100644 --- a/README.md +++ b/README.md @@ -9,31 +9,37 @@ ## Python mini boot camp at [#NICAR20](https://www.ire.org/events-and-training/conferences/nicar-2020/) in New Orleans. -In this two-day workshop, we'll use the Jupyter notebook to explore the Python programming language. At the end of the class, we'll give you all of the code from the exercises, along with several cheatsheets and tutorials, to take home with you, all from this code repository on Github. +In this two-day workshop, we'll learn the basics of the Python programming language and how to begin analyzing data in a Jupyter Notebook. What's a Notebook? It's an interactive environment that lets you blend words with coe. + +Confused? Of course. + +Bear with us. It will all make sense soon. + +## Day 1 + +### [Introduction](https://ireapps.github.io/pycar/pycar_intro.html) -### Day 1 -#### [Introduction](https://ireapps.github.io/pycar/pycar_intro.html) * Who are you, what do you do, what do you want to learn? * What will we learn? * What can I do with it? * The goal of the day is to start to learn how to think about solving problems. -#### [The Basics](https://github.com/ireapps/pycar/tree/master/basics) +### [The Basics](https://github.com/ireapps/pycar/tree/master/basics) We'll introduce some key concepts of programming and Python types like strings, integers, lists, slicing and loops. -#### A [discussion on debugging](https://docs.google.com/presentation/d/e/2PACX-1vTCwzQnH0Ps8xmqnxGBYayCyas8-53qJyo-yjIy5qy4P2xUOA-kiAOQCNTiCzRBVX7TxeBabx1pvpBQ/pub?start=false&loop=false&delayms=3000) and [cheatsheet](https://github.com/ireapps/pycar/tree/master/debug/DebugginginPython.pdf) +### A [discussion on debugging](https://docs.google.com/presentation/d/e/2PACX-1vTCwzQnH0Ps8xmqnxGBYayCyas8-53qJyo-yjIy5qy4P2xUOA-kiAOQCNTiCzRBVX7TxeBabx1pvpBQ/pub?start=false&loop=false&delayms=3000) and [cheatsheet](https://github.com/ireapps/pycar/tree/master/debug/DebugginginPython.pdf) ### Day 2 #### [Project #1](https://github.com/ireapps/pycar/tree/master/project1) As with many data analyses, it all starts with a CSV. After a white board exercise, we'll start with a file of pseudocode, and we'll walk through writing the program in Python code, running each line in the Jupyter interpreter. We'll hold your hand through each step of the process. -#### [Project #2](https://github.com/ireapps/pycar/tree/master/project2) +### [Project #2](https://github.com/ireapps/pycar/tree/master/project2) This section covers gathering data from the web in two common formats. In the first part, we'll scrape structured data from an HTML page using a GET request and write the data to a CSV. In the second part, we'll request data from an API to get information programmatically to create a spreadsheet. Our data comes in a new format: JSON. We'll do some more with the white board to show how it's basically a combination of data structures we already know about: Lists and dictionaries (arrays and objects). -#### [Project #3](https://github.com/ireapps/pycar/tree/master/project3) +### [Project #3](https://github.com/ireapps/pycar/tree/master/project3) Now we get to the heart of data analysis with an introduction to the powerful `pandas` library. Building on the basic objects we've already learned, and on a little knowledge of SQL, we'll clean two related tables of data, join and filter them. At the end of the day, we'll __[send you home with](takehome/README.md)__: From 1700bf9e482420b38dbd7bc7993e370682e8483b Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Sat, 2 Mar 2024 02:36:26 -0800 Subject: [PATCH 02/11] update1 --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b55c7bc..1abb87c 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ `-' ``` -## Python mini boot camp at [#NICAR20](https://www.ire.org/events-and-training/conferences/nicar-2020/) in New Orleans. +## Python mini bootcamp -In this two-day workshop, we'll learn the basics of the Python programming language and how to begin analyzing data in a Jupyter Notebook. What's a Notebook? It's an interactive environment that lets you blend words with coe. +In this two-day workshop, we'll learn the basics of the Python programming language and how to begin analyzing data in a Jupyter Notebook. What's a Notebook? It's an interactive environment *in your web browser* that lets you blend words with code. Confused? Of course. @@ -17,16 +17,19 @@ Bear with us. It will all make sense soon. ## Day 1 -### [Introduction](https://ireapps.github.io/pycar/pycar_intro.html) - +### Intros * Who are you, what do you do, what do you want to learn? * What will we learn? * What can I do with it? -* The goal of the day is to start to learn how to think about solving problems. +* GOAL: Learn how to solve problems with code. ### [The Basics](https://github.com/ireapps/pycar/tree/master/basics) -We'll introduce some key concepts of programming and Python types like strings, integers, lists, slicing and loops. +Key concepts of programming in Python: + +- Basic data types - strings, integers, lists +- Lists are your friend! +- etc ### A [discussion on debugging](https://docs.google.com/presentation/d/e/2PACX-1vTCwzQnH0Ps8xmqnxGBYayCyas8-53qJyo-yjIy5qy4P2xUOA-kiAOQCNTiCzRBVX7TxeBabx1pvpBQ/pub?start=false&loop=false&delayms=3000) and [cheatsheet](https://github.com/ireapps/pycar/tree/master/debug/DebugginginPython.pdf) From 7d26c42e396804322118e6ce3c14292a4f9be7e3 Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Sat, 2 Mar 2024 02:39:00 -0800 Subject: [PATCH 03/11] tweak --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1abb87c..d1dfe01 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## Python mini bootcamp -In this two-day workshop, we'll learn the basics of the Python programming language and how to begin analyzing data in a Jupyter Notebook. What's a Notebook? It's an interactive environment *in your web browser* that lets you blend words with code. +In this two-day workshop, we'll learn the basics of the Python programming language and how to begin analyzing data in a Jupyter Notebook. What's a Notebook? It's an interactive environment *in your web browser* that lets you blend words and code. Confused? Of course. From f472573677af84496be743b066245e6e82aae4ea Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Sat, 2 Mar 2024 02:40:55 -0800 Subject: [PATCH 04/11] tweak2 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d1dfe01..0274518 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## Python mini bootcamp -In this two-day workshop, we'll learn the basics of the Python programming language and how to begin analyzing data in a Jupyter Notebook. What's a Notebook? It's an interactive environment *in your web browser* that lets you blend words and code. +In this two-day workshop, we'll learn the basics of the Python programming language and how to begin analyzing data in a Jupyter Notebook. What's a Notebook? It's an interactive coding environment that lets you blend words and code. Confused? Of course. From defd0119e588fd67375b8d780b0dea9ab8310890 Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Tue, 5 Mar 2024 22:06:35 -0800 Subject: [PATCH 05/11] Update top-level README - Fix links and other misc cleanups - Add deprecation notice for Project 2. Closes #74 - Remove Twitter/PythonJournos in Help section. Addresses #79 --- README.md | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 0274518..31a7a54 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ `-' ``` -## Python mini bootcamp +# Python mini bootcamp In this two-day workshop, we'll learn the basics of the Python programming language and how to begin analyzing data in a Jupyter Notebook. What's a Notebook? It's an interactive coding environment that lets you blend words and code. @@ -24,36 +24,45 @@ Bear with us. It will all make sense soon. * What can I do with it? * GOAL: Learn how to solve problems with code. -### [The Basics](https://github.com/ireapps/pycar/tree/master/basics) +### [The Basics](basics/README.md) Key concepts of programming in Python: - Basic data types - strings, integers, lists - Lists are your friend! - etc -### A [discussion on debugging](https://docs.google.com/presentation/d/e/2PACX-1vTCwzQnH0Ps8xmqnxGBYayCyas8-53qJyo-yjIy5qy4P2xUOA-kiAOQCNTiCzRBVX7TxeBabx1pvpBQ/pub?start=false&loop=false&delayms=3000) and [cheatsheet](https://github.com/ireapps/pycar/tree/master/debug/DebugginginPython.pdf) +> Bonus: a [discussion on debugging][] and handy [cheatsheet](debug/DebugginginPython.pdf) +[discussion on debugging]: https://docs.google.com/presentation/d/e/2PACX-1vTCwzQnH0Ps8xmqnxGBYayCyas8-53qJyo-yjIy5qy4P2xUOA-kiAOQCNTiCzRBVX7TxeBabx1pvpBQ/pub?start=false&loop=false&delayms=3000 + +## Day 2 + +### [Project #1](project1/README.md) -### Day 2 -#### [Project #1](https://github.com/ireapps/pycar/tree/master/project1) As with many data analyses, it all starts with a CSV. After a white board exercise, we'll start with a file of pseudocode, and we'll walk through writing the program in Python code, running each line in the Jupyter interpreter. We'll hold your hand through each step of the process. -### [Project #2](https://github.com/ireapps/pycar/tree/master/project2) +### [Project #2](/project2/README.md) + +> This project is out-of-date. We'll try to update it in the near future. + This section covers gathering data from the web in two common formats. + In the first part, we'll scrape structured data from an HTML page using a GET request and write the data to a CSV. In the second part, we'll request data from an API to get information programmatically to create a spreadsheet. Our data comes in a new format: JSON. We'll do some more with the white board to show how it's basically a combination of data structures we already know about: Lists and dictionaries (arrays and objects). -### [Project #3](https://github.com/ireapps/pycar/tree/master/project3) -Now we get to the heart of data analysis with an introduction to the powerful `pandas` library. Building on the basic objects we've already learned, and on a little knowledge of SQL, we'll clean two related tables of data, join and filter them. +### [Project #3](project3/analyzing_data_with_pandas_notebook.ipynb) + +Now we get to the heart of data analysis with an introduction to the powerful [pandas](https://pandas.pydata.org/docs/index.html) library. Building on the basics we've already learned, and a little knowledge of [SQL](https://en.wikipedia.org/wiki/SQL), we'll clean two related tables of data, join and filter them. At the end of the day, we'll __[send you home with](takehome/README.md)__: -* A [lightning dash](https://github.com/ireapps/pycar/tree/master/takehome/PyCAR_basics_takehome_notebook_complete.ipynb) through basic variables, types and functions -* The [working, commented code](https://github.com/ireapps/pycar/tree/master/completed) for each project from our git repo +* A [lightning dash](takehome/PyCAR_basics_takehome_notebook_complete.ipynb) through basic variables, types and functions +* The [working, commented code](completed/) for each project from our git repo * A walkthrough for [setting up your machine at home with Python](https://github.com/thejqs/pycar/blob/master/takehome/Installing%20Python%20The%20IRE%20Way%E2%84%A2.pdf), version control and virtualenvs * Good libraries to explore with strong tutorials * A lifetime support guarantee [from us](CONTRIBUTORS.md) & [PythonJournos](https://groups.google.com/forum/#!forum/PythonJournos) -### Help! +## Help! + If you're working through this code at home and have trouble, please let us know. -The best option is to [file an issue report](https://github.com/ireapps/pycar/issues?q=is%3Aopen+is%3Aissue) of the bug so we can help you. -You can also reach out to any of us [on Twitter](https://github.com/ireapps/pycar/blob/master/CONTRIBUTORS.md) or ping [PythonJournos](https://groups.google.com/forum/#!forum/PythonJournos). + +The best way to reach us is by [submitting an Issue](https://github.com/ireapps/pycar/issues?q=is%3Aopen+is%3Aissue) on GitHub. \ No newline at end of file From 7afdf6b3df20414fd8585c13d9bec760f3bca2cd Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Wed, 6 Mar 2024 10:00:33 -0500 Subject: [PATCH 06/11] Fix links and misc other edits to basics/README. #81 --- basics/README.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/basics/README.md b/basics/README.md index cd0f7ca..b8c30af 100644 --- a/basics/README.md +++ b/basics/README.md @@ -1,11 +1,11 @@ -THE BASICS -========== +# THE BASICS -**9:30 - 10:45 a.m.** + +> Approx. 1 hour, 15 minutes What is a [number](https://docs.python.org/3/tutorial/introduction.html#numbers)? What is a [string](https://docs.python.org/3/tutorial/introduction.html#strings)? What is a [list](https://docs.python.org/3/tutorial/introduction.html#lists)? -Nevermind that, what's a [Python](https://docs.python.org/3.6/)? +Nevermind that, what's a [Python](https://docs.python.org/3/)? Before we get started with learning programming concepts, let's take a step back and get a high-level overview of what programming even is. @@ -13,17 +13,17 @@ Programming is not mystical, magical or special. Programming is more of a craft You already know the components of programming. You have been exercising the reasoning programming relies on for your entire life, probably without even realizing it. Programming is just a way to take the logic you already use on a daily basis and express it in a way a computer can understand and act upon. -Card games and games like tic-tac-toe are classic programming tests because they require you to encapsulate the way you reason about those games in a way a computer can understand. So we'll use a card game, solitaire, to talk about some basic programming concepts over in the `basics_notebook`. Head over there, and then come back here for some reference. +Card games and games like tic-tac-toe are classic programming tests because they require you to encapsulate the way you reason about those games in a way a computer can understand. So we'll use a card game, solitaire, to talk about some basic programming concepts over in the [basics_notebook.ipynb](basics_notebook.ipynb). Head over there, and then come back here for some reference. ## About Python Python is a programming language. It was created around 1991 by an individual named [Guido van Rossum](https://en.wikipedia.org/wiki/Guido_van_Rossum). -You may hear others call Python a [scripting language](https://en.wikipedia.org/wiki/Scripting_language). You may also hear it called an interpretative language. In essence, these are interchangeable terms. In Python you write programs that are interpreted line by line. These programs - or scripts - automate tasks that would otherwise be completed one by one. +You may hear others call Python a [scripting language](https://en.wikipedia.org/wiki/Scripting_language). You may also hear it called an ["interpreted"](https://en.wikipedia.org/wiki/Interpreter_(computing)) language. In essence, these are interchangeable terms. In Python you write programs that are interpreted line by line. These programs - or scripts - automate tasks that would otherwise be completed one by one. The Python interpreter can be accessed through the command line (terminal, shell, etc). On Unix-based (Mac OS) or Linux machines, which come with Python installed by default, you enter the Python interpreter by typing ```python``` followed by the return key. On a Windows machine, things are a bit more cumbersome. -One feature of Python that takes some getting used to is its use of indentation to organize blocks of code. One to remember this is to think of creating an outline. You have main bullet points and you might have an item indented beneath that relates to something above it. In essence, this is python. +One feature of Python that takes some getting used to is its use of indentation to organize blocks of code. One way to remember this is to think of creating an outline. You have main bullet points and you might have an item indented beneath that relates to something above it. In essence, this is Python. the python interpreter reads this line first and takes action and then reads this line and takes action @@ -34,7 +34,7 @@ Before we get started, this is meant to be an overview of Python and show you so > While you are studying programming, I'm studying how to play guitar. I practice it every day for at least two hours a day. I play scales, chords, and arpeggios for an hour and then learn music theory, ear training, songs, and anything else I can. Some days I study guitar and music for eight hours because I feel like it and it's fun. To me repetitive practice is natural and just how to learn something. I know that to get good at anything you have to practice every day, even if I suck that day (which is often) or it's difficult. Keep trying and eventually it'll be easier and fun. -Anyways, let's get started by looking at some key components of any programming language - variables, strings, numbers and comparisons. All of this is contained within the [official Python tutorial](https://docs.python.org/3.7/tutorial/introduction.html#) to the standard library. We'll consider Python lists as a container that we can fill and we'll work toward using a couple core libraries - ```urllib``` and ```csv``` - to download a CSV file and read the contents. +Anyways, let's get started by looking at some key components of any programming language - variables, strings, numbers and comparisons. All of this is contained within the [official Python tutorial](https://docs.python.org/3/tutorial/introduction.html#) to the standard library. We'll consider Python lists as a container that we can fill and we'll work toward using a couple core libraries - [urllib](https://docs.python.org/3/library/urllib.html) and [csv](https://docs.python.org/3/library/csv.html) - to download a CSV file and read the contents. **The files** @@ -93,7 +93,7 @@ Anyways, let's get started by looking at some key components of any programming * ```my_variable = "my value of the variable"``` - * [Numbers](https://docs.python.org/2/tutorial/introduction.html#numbers) + * [Numbers](https://docs.python.org/3/tutorial/introduction.html#numbers) * Whole numbers have a type and that type is integer @@ -101,7 +101,7 @@ Anyways, let's get started by looking at some key components of any programming * Learning about numbers - * get the [type](https://docs.python.org/2/library/functions.html#type) + * get the [type](https://docs.python.org/3/library/functions.html#type) * addition @@ -117,7 +117,7 @@ Anyways, let's get started by looking at some key components of any programming ```(new - old) / old``` - * [Strings](https://docs.python.org/2/tutorial/introduction.html#strings) + * [Text](https://docs.python.org/3/tutorial/introduction.html#text) (or more formally in Python, "strings") * Generally, synonymous with characters. @@ -141,27 +141,27 @@ Anyways, let's get started by looking at some key components of any programming * get its length - * [lowercase](https://docs.python.org/2/library/stdtypes.html?highlight=strip#str.lower) + * [lowercase](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.lower) - * [uppercase](https://docs.python.org/2/library/stdtypes.html?highlight=strip#str.upper) + * [uppercase](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.upper) - * [titlecase](https://docs.python.org/2/library/stdtypes.html?highlight=strip#str.title) + * [titlecase](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.title) - * [split](https://docs.python.org/2/library/stdtypes.html?highlight=strip#str.split) + * [split](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.split) * join - * [replace a character](https://docs.python.org/2/library/stdtypes.html?highlight=strip#str.replace) + * [replace a character](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.replace) * strip whitespace - * [all](https://docs.python.org/2/library/stdtypes.html?highlight=strip#str.strip) + * [all](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.strip) - * [leading whitespace](https://docs.python.org/2/library/stdtypes.html?highlight=strip#str.lstrip) + * [leading whitespace](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.lstrip) - * [trailing whitespace](https://docs.python.org/2/library/stdtypes.html?highlight=strip#str.rstrip) + * [trailing whitespace](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.rstrip) - * [Lists](https://docs.python.org/2/tutorial/introduction.html#lists) + * [Lists](https://docs.python.org/3/tutorial/introduction.html#lists) * We learned that integers and strings are data types @@ -191,7 +191,7 @@ Anyways, let's get started by looking at some key components of any programming * "[A conditional statement](https://en.wikipedia.org/wiki/Conditional_(computer_programming)), conditional expressions and conditional constructs are features of a programming language which perform different computations or actions depending on whether a programmer-specified boolean condition evaluates to true or false." - * [for](https://docs.python.org/2/tutorial/controlflow.html#for-statements) + * [for](https://docs.python.org/3/tutorial/controlflow.html#for-statements) * The ```for``` statement iterates through a list or a string in the order they appear. @@ -199,7 +199,7 @@ Anyways, let's get started by looking at some key components of any programming for x in my_list: print x - * [if/elif/else](https://docs.python.org/2/tutorial/controlflow.html#if-statements) + * [if / elif / else](https://docs.python.org/3/tutorial/controlflow.html#if-statements) * The ```for``` statement iterates through a list or a string in the order they appear. @@ -209,7 +209,7 @@ Anyways, let's get started by looking at some key components of any programming else: print "it's not the same" - * [Comparisons](https://docs.python.org/2/library/stdtypes.html#comparisons) + * [Comparisons](https://docs.python.org/3/library/stdtypes.html#comparisons) * equals (==) From 4446f249afed71f15950e1e8097294eda926dc41 Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Wed, 6 Mar 2024 10:27:01 -0500 Subject: [PATCH 07/11] Light copy-edit and local run of basics NB and its completed version #81 --- basics/basics_notebook.ipynb | 21 ++-- completed/basics_complete_notebook.ipynb | 124 ++++++++++++++++------- 2 files changed, 100 insertions(+), 45 deletions(-) diff --git a/basics/basics_notebook.ipynb b/basics/basics_notebook.ipynb index e1f450b..d83cdf9 100644 --- a/basics/basics_notebook.ipynb +++ b/basics/basics_notebook.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Python Basics at PyCAR2020" + "# Python Basics" ] }, { @@ -26,7 +26,7 @@ "\n", "(Most of us ask questions we've asked before daily — we just ask them of Google.)\n", "\n", - "Now for some code. Let's say you want to search 130,000 lines of text for certain tems -- which are most common, how frequently do they occur, how often are they used in a way that's concentrated, which might indicate places you want to look more closely.\n", + "Now for some code. Let's say you want to search 130,000 lines of text for certain terms -- which are most common, how frequently do they occur, how often are they used in a way that's concentrated, which might indicate places you want to look more closely.\n", "\n", "No person wants to do that by hand. And people are bad at precisely that kind of work. But it's perfect for a computer.\n", "\n", @@ -97,7 +97,7 @@ "source": [ "So any time we want to check to see how many times we've seen our `search_term` or check where our `file_location` is, we can use these variables instead of typing out the card value!\n", "\n", - "If you forget what one of the variables is set to, you can print your string. (The ```print()``` command was optional in Python 2.x, but is now required in Python 3.x.) Let's also make a comment to remind us of what this variable does." + "If you forget what one of the variables is set to, you can `print` your string. Let's also make a comment to remind us of what this variable does." ] }, { @@ -375,18 +375,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As you’ve just seen, programming can be pretty tedious when you’re trying to break tasks down. So now that you’ve gotten a little bit of a taste for what writing a program is like, let’s dive into some of [the nitty-gritty basics](basics_reference_completed.ipynb), like how you strip whitespace from a string and what happens when you mix a float and an integer.\n", + "As you’ve just seen, programming can be pretty tedious when you’re trying to break tasks down. So now that you’ve gotten a little bit of a taste for what writing a program is like, let’s dive into some of [the nitty-gritty basics](../completed/basics_reference_completed.ipynb), like how you strip whitespace from a string and what happens when you mix a float and an integer.\n", "\n", "That sounds like a lot of fun. It must. It does. We promise.\n", "\n", "Onward." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -400,9 +407,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.11.6" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } diff --git a/completed/basics_complete_notebook.ipynb b/completed/basics_complete_notebook.ipynb index 5a7d3a3..09f8e1b 100644 --- a/completed/basics_complete_notebook.ipynb +++ b/completed/basics_complete_notebook.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Python Basics at PyCAR2020" + "# Python Basics" ] }, { @@ -26,7 +26,7 @@ "\n", "(Most of us ask questions we've asked before daily — we just ask them of Google.)\n", "\n", - "Now for some code. Let's say you want to search 130,000 lines of text for certain tems -- which are most common, how frequently do they occur, how often are they used in a way that's concentrated, which might indicate places you want to look more closely.\n", + "Now for some code. Let's say you want to search 130,000 lines of text for certain terms -- which are most common, how frequently do they occur, how often are they used in a way that's concentrated, which might indicate places you want to look more closely.\n", "\n", "No person wants to do that by hand. And people are bad at precisely that kind of work. But it's perfect for a computer.\n", "\n", @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -69,7 +69,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -86,7 +86,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -100,12 +100,12 @@ "source": [ "So any time we want to check to see how many times we've seen our `search_term` or check where our `file_location` is, we can use these variables instead of typing out the card value!\n", "\n", - "If you forget what one of the variables is set to, you can print it out. (The ```print()``` command was optional in Python 2.x, but is now required in Python 3.x.) Let's also make a comment to remind us of what this variable does." + "If you forget what one of the variables is set to, you can `print` it out. Let's also make a comment to remind us of what this variable does." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -122,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -132,7 +132,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -151,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -168,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -201,7 +201,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -217,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -237,9 +237,17 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "achilles was in The Iliad 418 times\n" + ] + } + ], "source": [ "# we can do it by adding the strings to one another like this:\n", "print(search_term + ' was in The Iliad ' + str(term_count) + ' times')" @@ -247,9 +255,17 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "achilles was in The Iliad 418 times\n" + ] + } + ], "source": [ "# or we can use what Python calls `f-strings`, which allow us to drop variables directly into a string;\n", "# doing it this way means we don't have to keep track as much of wayward spaces or\n", @@ -266,9 +282,18 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "It was on the same line multiple times 5 times\n", + "it was on lines [11674, 13351, 16400, 20182, 20640] multiple times\n" + ] + } + ], "source": [ "print(f'It was on the same line multiple times {multi_term_line} {times}')\n", "print(f'it was on lines {line_numbers_list} multiple times')" @@ -290,7 +315,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -307,7 +332,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -323,7 +348,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -340,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -357,7 +382,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -374,9 +399,22 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "103\n", + "37\n", + "279\n", + "28\n", + "1\n", + "215\n" + ] + } + ], "source": [ "print(most_common_words[\"homer\"])\n", "print(most_common_words['paris'])\n", @@ -388,7 +426,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -402,9 +440,19 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The most common word in The Iliad is: the\n", + "It is in The Iliad 15447 times\n", + "Wow! How cool is that?\n" + ] + } + ], "source": [ "print(f'The most common word in The Iliad is: {most_common_word}')\n", "print(f'It is in The Iliad {highest_count} times')\n", @@ -415,7 +463,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As you’ve just seen, programming can be pretty tedious when you’re trying to break tasks down. So now that you’ve gotten a little bit of a taste for what writing a program is like, let’s dive into some of [the nitty-gritty basics](basics_reference_completed.ipynb), like how you strip whitespace from a string and what happens when you mix a float and an integer.\n", + "As you’ve just seen, programming can be pretty tedious when you’re trying to break tasks down. So now that you’ve gotten a little bit of a taste for what writing a program is like, let’s dive into some of [the nitty-gritty basics](../completed/basics_reference_completed.ipynb), like how you strip whitespace from a string and what happens when you mix a float and an integer.\n", "\n", "That sounds like a lot of fun. It must. It does. We promise.\n", "\n", @@ -433,7 +481,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -447,9 +495,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.11.6" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } From 7551824049c03350e1bc081dbf942b487813b710 Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Wed, 6 Mar 2024 11:51:56 -0500 Subject: [PATCH 08/11] Reorganize basics/README.md to align content with related notebooks --- basics/README.md | 249 +++++++++++---------- basics/basics_reference_notebook.ipynb | 23 +- completed/basics_reference_completed.ipynb | 57 ++--- 3 files changed, 158 insertions(+), 171 deletions(-) diff --git a/basics/README.md b/basics/README.md index b8c30af..e8d291d 100644 --- a/basics/README.md +++ b/basics/README.md @@ -34,211 +34,234 @@ Before we get started, this is meant to be an overview of Python and show you so > While you are studying programming, I'm studying how to play guitar. I practice it every day for at least two hours a day. I play scales, chords, and arpeggios for an hour and then learn music theory, ear training, songs, and anything else I can. Some days I study guitar and music for eight hours because I feel like it and it's fun. To me repetitive practice is natural and just how to learn something. I know that to get good at anything you have to practice every day, even if I suck that day (which is often) or it's difficult. Keep trying and eventually it'll be easier and fun. -Anyways, let's get started by looking at some key components of any programming language - variables, strings, numbers and comparisons. All of this is contained within the [official Python tutorial](https://docs.python.org/3/tutorial/introduction.html#) to the standard library. We'll consider Python lists as a container that we can fill and we'll work toward using a couple core libraries - [urllib](https://docs.python.org/3/library/urllib.html) and [csv](https://docs.python.org/3/library/csv.html) - to download a CSV file and read the contents. +Anyways, let's get started by looking at some key components of any programming language - numbers, text, comparisons and variables. -**The files** +All of the following is contained within the [official Python tutorial](https://docs.python.org/3/tutorial/introduction.html#). -* ```basics.py``` and ```complete/basics_complete.py``` +We'll work on the below exercises in [basics_reference_notebook.ipynb](basics_reference_notebook.ipynb). - * Indentation +> Solutions to the exercises can be found in +[completed/basics_reference_completed.ipynb]([../completed/basics_reference_completed.ipynb]). - * As mentioned in the introduction, Python uses indentation to structure its code blocks instead of braces, brackets, or keywords. This comes into play later on in the session when we begin to write ```if``` statements, ```for``` loops and ```define``` functions. For example: +## Side note: Comments +Throughout the day you will see - and hear us refer to - something called comments. We're not referring to that wasteland of negativity that you find at the bottom of articles on news websites. But just the same, ideally these comments are meant to be constructive. - def my_first_function(input): - if input == None: - output = "I have nothing" - else: - output = "I have something" +* Comments are annotations; a method for programmers to offer notes, advice or justification for why the did something in a script. + +Python has a couple ways to comment code: + +One is to use the pound symbol, aka hashtag or [octothorp](https://en.wikipedia.org/wiki/Number_sign). Here's an example: + +``` +# this part of the code is where I make the magic happen +``` - * Lines are indented by four spaces. +Another method for multiline comments is to use a series of three quote marks or three apostrophes. - * Comments +``` +""" +this is a multiline comment +so i can pack more information +about what i'm doing +""" +``` - * Throughout the day you will see - and hear us refer to - something called comments. We're not referring to that wasteland of negativity that you find at the bottom of articles on news websites. But just the same, ideally these comments are meant to be constructive. +## Variables - * Comments are annotations; a method for programmers to offer notes, advice or justification for why the did something in a script. +* A variable is a named container for a value. - * Python has a couple ways to comment code +* A backbone of any programming language - * One is to use the pound symbol, aka hashtag or [octothorp](https://en.wikipedia.org/wiki/Number_sign). Here's an example +* Variables have a scope - # this part of the code is where I make the magic happen +* Variables have a value - * Another method for multiline comments is to use a series of three quote marks or three apostrophes. + * Can be None - """ - this is a multiline comment - so i can pack more information - about what i'm doing - """ + * Can be True or False - * Variables + * Or it could be something else... a number or a string - * A variable is a named container for a value +* When declaring the value of for a variable in Python the format is 'variable = value' - * A backbone of any programming language + * ```my_variable = "the value of my variable"``` - * Variables have a scope +## Text - * Variables have a value +[Text](https://docs.python.org/3/tutorial/introduction.html#text) (or more formally in Python, "strings"). - * Can be None +* Generally, synonymous with characters. - * Can be True or False +* You can use double quotes or single quotes to create strings - * Or it could be something else... a number or a string +* If using single quotes, apostrophes and single quotes within string must be escaped - * When declaring the value of for a variable in Python the format is 'variable equals value' +* Learning about strings - * ```my_variable = "my value of the variable"``` + * double quotes vs. single quotes - * [Numbers](https://docs.python.org/3/tutorial/introduction.html#numbers) + # double quotes + double_quotes_string = "We're going to learn Python at #NICAR16" + print double_quotes_string - * Whole numbers have a type and that type is integer + # single quotes + single_quotes_string = 'We\'re going to learn Python at #NICAR16' + print single_quotes_string - * Fractions have a type and that type is float + * get its type - * Learning about numbers + * get its length - * get the [type](https://docs.python.org/3/library/functions.html#type) + * [lowercase](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.lower) - * addition + * [uppercase](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.upper) - * subtraction + * [titlecase](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.title) - * multiplication + * [split](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.split) - * division + * join - * order of operations + * [replace a character](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.replace) - * used when we want to determine percent change right? + * strip whitespace - ```(new - old) / old``` + * [all](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.strip) - * [Text](https://docs.python.org/3/tutorial/introduction.html#text) (or more formally in Python, "strings") + * [leading whitespace](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.lstrip) - * Generally, synonymous with characters. + * [trailing whitespace](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.rstrip) - * You can use double quotes or single quotes to create strings +## Numbers + +[Numbers](https://docs.python.org/3/tutorial/introduction.html#numbers) - * If using single quotes, apostrophes and single quotes within string must be escaped +* Whole numbers have a type and that type is integer - * Learning about strings +* Fractions have a type and that type is float - * double quotes vs. single quotes +* Learning about numbers - # double quotes - double_quotes_string = "We're going to learn Python at #NICAR16" - print double_quotes_string + * get the [type](https://docs.python.org/3/library/functions.html#type) - # single quotes - single_quotes_string = 'We\'re going to learn Python at #NICAR16' - print single_quotes_string + * addition - * get its type + * subtraction - * get its length + * multiplication - * [lowercase](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.lower) + * division - * [uppercase](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.upper) + * order of operations - * [titlecase](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.title) + * used when we want to determine percent change right? + ``` + (new - old) / old + ``` - * [split](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.split) +## Lists - * join +[Lists](https://docs.python.org/3/tutorial/introduction.html#lists) - * [replace a character](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.replace) +* We learned that integers and strings are data types - * strip whitespace + * Python has specific types that allow you to group items. The list is one of these collections. - * [all](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.strip) + * A list is sortable and a list has an index - * [leading whitespace](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.lstrip) + * Index starts at 0 - * [trailing whitespace](https://docs.python.org/3/library/stdtypes.html?highlight=strip#str.rstrip) + * You can add and remove content - * [Lists](https://docs.python.org/3/tutorial/introduction.html#lists) + * You can add and remove items from specific indexes - * We learned that integers and strings are data types + * Lists might contain items of different types, but usually the items all have the same type. - * Python has specific types that allow you to group items. The list is one of these collections. + * append() allows you to add items to a list - * A list is sortable and a list has an index + * pop() returns the element you want to remove. Useful to remove and keep an item from a list - * Index starts at 0 + * By default, pop without any arguments removes the last item - * You can add and remove content + * del deletes the item at the specified index - * You can add and remove items from specific indexes +## Dicts - * Lists might contain items of different types, but usually the items all have the same type. +TK - * append() allows you to add items to a list - * pop() returns the element you want to remove. Useful to remove and keep an item from a list +## Indentation - * By default, pop without any arguments removes the last item +As mentioned in the introduction, Python uses indentation to structure "blocks" of code instead of braces, brackets, or keywords. For example: - * del deletes the item at the specified index +```python + if user_input is None: + output = "I have nothing" + else: + output = "I have something" +``` - * Conditionals & Comparisons +* Lines are indented by four spaces. - * Conditional statements - * "[A conditional statement](https://en.wikipedia.org/wiki/Conditional_(computer_programming)), conditional expressions and conditional constructs are features of a programming language which perform different computations or actions depending on whether a programmer-specified boolean condition evaluates to true or false." +## Conditionals & Comparisons - * [for](https://docs.python.org/3/tutorial/controlflow.html#for-statements) +### Conditional statements - * The ```for``` statement iterates through a list or a string in the order they appear. +* "[A conditional statement](https://en.wikipedia.org/wiki/Conditional_(computer_programming)), conditional expressions and conditional constructs are features of a programming language which perform different computations or actions depending on whether a programmer-specified boolean condition evaluates to true or false." - my_list = [1, 2, 3, 4, 5, 6] - for x in my_list: - print x + * [for](https://docs.python.org/3/tutorial/controlflow.html#for-statements) - * [if / elif / else](https://docs.python.org/3/tutorial/controlflow.html#if-statements) + * The ```for``` statement iterates through a list or a string in the order they appear. + ```python + my_list = [1, 2, 3, 4, 5, 6] + for x in my_list: + print x + ``` - * The ```for``` statement iterates through a list or a string in the order they appear. + * [if / elif / else](https://docs.python.org/3/tutorial/controlflow.html#if-statements) + + * The `for` statement iterates through a list or a string in the order they appear. + + value = 4 + if 4 == value: + print "it's the same" + else: + print "it's not the same" - value = 4 - if 4 == value: - print "it's the same" - else: - print "it's not the same" +### Comparisons - * [Comparisons](https://docs.python.org/3/library/stdtypes.html#comparisons) +[Comparisons (python docs)](https://docs.python.org/3/library/stdtypes.html#comparisons) - * equals (==) +* equals (`==`) - * are two values the same? + * are two values the same? - * not equals (!=) +* not equals (`!=`) - * are two values different? + * are two values different? - * greater than (>) +* greater than (`>`) - * is value larger than the other? + * is value larger than the other? - * greater than equal to (>=) +* greater than equal to (`>=`) - * is value larger or equal to the other? + * is value larger or equal to the other? - * less than (<) +* less than (`<`) - * is value smaller than the other? + * is value smaller than the other? - * less than equal to (<=) +* less than equal to (`<=`) - * is value smaller or equal to the other? + * is value smaller or equal to the other? - * is +* `is` - * Are two items the exact same thing? + * Are two items the exact same thing? - * is not +* `is not` - * Are two items not the exact same thing? + * Are two items not the exact same thing? diff --git a/basics/basics_reference_notebook.ipynb b/basics/basics_reference_notebook.ipynb index 88b2b7b..5e14469 100644 --- a/basics/basics_reference_notebook.ipynb +++ b/basics/basics_reference_notebook.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Python Basics at PyCAR2020" + "# Python Basics" ] }, { @@ -32,7 +32,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Print your string. The ```print()``` command was optional in Python 2.x, but is now required in Python 3.x." + "Print your string" ] }, { @@ -258,7 +258,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Integers" + "## Numbers" ] }, { @@ -791,22 +791,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This barely skims the surface of what you can do in Python, but hopefully this overview will make you comfortable enough to get started.\n", - "\n", - "Now, exit the program." + "This barely skims the surface of what you can do in Python, but hopefully this overview will make you comfortable enough to get started." ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -820,9 +811,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.11.6" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } diff --git a/completed/basics_reference_completed.ipynb b/completed/basics_reference_completed.ipynb index f65dd0b..3d3311f 100644 --- a/completed/basics_reference_completed.ipynb +++ b/completed/basics_reference_completed.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Python Basics at PyCAR2020" + "# Python Basics" ] }, { @@ -24,19 +24,17 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "my_string = \"We're going to learn Python at #nicar20\"" + "my_string = \"We're going to learn Python at #nicar24\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Print your string. The ```print()``` command was optional in Python 2.x, but is now required in Python 3.x." + "Print your string" ] }, { @@ -295,7 +293,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## integers" + "## Numbers" ] }, { @@ -308,9 +306,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "my_integer = 25" @@ -490,9 +486,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "a_list = [1, 2, 3]" @@ -508,9 +502,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "my_list = [\"We're going to learn Python at #NICAR16\", 10, 15, 20]" @@ -574,9 +566,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]" @@ -739,9 +729,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "mydict = {}" @@ -832,9 +820,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "x = 5\n", @@ -939,27 +925,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This barely skims the surface of what you can do in Python, but hopefully this overview will make you comfortable enough to get started.\n", - "\n", - "Now, exit the program." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "exit()" + "This barely skims the surface of what you can do in Python, but hopefully this overview will make you comfortable enough to get started." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -973,9 +946,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.11.6" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } From f9b046490fc58b5fb4c6dc52b8a58ac73b1c48a1 Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Wed, 6 Mar 2024 12:03:42 -0500 Subject: [PATCH 09/11] Add suuuuuuper basic Teacher's Guide. #84 --- README.md | 2 ++ teachers_guide.md | 12 ++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 teachers_guide.md diff --git a/README.md b/README.md index 31a7a54..20408de 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ Confused? Of course. Bear with us. It will all make sense soon. +> Instructors, check out the [Teacher's Guide](teachers_guide.md). + ## Day 1 ### Intros diff --git a/teachers_guide.md b/teachers_guide.md new file mode 100644 index 0000000..5c42693 --- /dev/null +++ b/teachers_guide.md @@ -0,0 +1,12 @@ +# Teachers Guide + +First off, a hearty thanks if you plan to help teach this course at NICAR! We appreciate you paying it forward :) + +Below is a rough overview (current as of NICAR24) to help onboard folks as teachers with (hopefully) as little friction as possible. + +Generally, each lesson plan includes the following elements: + +- `/README.md` - outline of the lesson plan, with important points to hit +- `/` - notebook with exercises (but no solutions) intended for students to work with during class +- `completed/` - a completed notebook containing solutions for the corresponding `/`. Instructors can print this or use a second screen to guide the lesson. + From 4ac95f68d3cf0a3bafd16c9400df88136fcdc7de Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Wed, 6 Mar 2024 12:26:52 -0500 Subject: [PATCH 10/11] Flesh out teacher's guide #84 --- static/img/codespace_bootstrap.png | Bin 0 -> 107923 bytes teachers_guide.md | 59 ++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 static/img/codespace_bootstrap.png diff --git a/static/img/codespace_bootstrap.png b/static/img/codespace_bootstrap.png new file mode 100644 index 0000000000000000000000000000000000000000..7354aa94df347c57c5f626a725220a0156e8fd87 GIT binary patch literal 107923 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�TLvyEq?X{%ch_6Q0?)Uy7C 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 literal 0 HcmV?d00001 diff --git a/teachers_guide.md b/teachers_guide.md index 5c42693..9c3db54 100644 --- a/teachers_guide.md +++ b/teachers_guide.md @@ -1,4 +1,4 @@ -# Teachers Guide +# Teacher's Guide First off, a hearty thanks if you plan to help teach this course at NICAR! We appreciate you paying it forward :) @@ -10,3 +10,60 @@ Generally, each lesson plan includes the following elements: - `/` - notebook with exercises (but no solutions) intended for students to work with during class - `completed/` - a completed notebook containing solutions for the corresponding `/`. Instructors can print this or use a second screen to guide the lesson. +Below are additional details on each lesson plan. + +## The Codespaces Two-Step + +As of NICAR24, we're using [GitHub Codespaces](https://github.com/features/codespaces) to work in Jupyter Notebooks. The goal is to minimize installation headaches by providing a preconfigured, cloud-based environment. + +At the start of class, instructors should: + +- Direct students to log into their GitHub accounts +- Go to the class repo on GH +- Click the big green `Code` button +- Select the Codespaces tab +- Click the big green `Create codespace...` button. + +Here's a screenshot: + +![codespace bootstrap](static/img/codespace_bootstrap.png) + +It usually takes a few minutes to initially spin up due to customizations we've made to the environment. + +Might be helpful during this time to provide a brief overview of Codespaces, noting in particular that it uses VS Code so everything they're about to learn in the cloud transfers easily to working on their own machines beyond class. + +Also worth mentionging: It's a freemium model and generally they shouldn't incur any charges (or have to put down a credit card) with reasonable usage levels. + +And, even better, the coding environment is hangs around for a day (or two?), so they can pick up their work on Day 2 right where they left off. + +### Codespace customizations + +The Codespaces environment for this repo has been customized to use a recent version of Python and automatically installs of various libraries used in the lessons (e.g. `pandas`), along with important VS Code extensions for Python and Jupyter. + +To update the Python version and add dependencies or VS Code extensions, check out the Codespace configuration and Dockerfile in the `.devcontainer` folder. + +If you discover you're missing a library in the middle of a class, a fallback option is to open the terminal shell and just `pip install`. + +Also, note that whenever you create/open a Jupyter notebook for the first time in Codespaces, you'll need to select a Python kernel. It's a suboptimal workflow for students, but it should only take a few moments to walk them through the process. + +## Basics + +Provides an overview of basic Python data types and syntax. Here's the order of operations: + +- `basics/README.md` - Big picture on coding and outline of Python language basics that will be covered in the first notebook. +- `basics/basics_reference_notebook.ipynb` - exercise notebook that students should open and work in during the lesson +- `completed/basics_reference_completed.ipynb` - teacher's guide/solutions for `basics/basics_reference_notebook.ipynb` + +TK - `basics/basics_notebook.ipynb` and corresponding completed notebook + +## Project 1 + +TK + +## Project 2 + +> This is obsolete as of NICAR 2024. Skip straight to Project 3 + +## Project 3 + +TK \ No newline at end of file From 4a389a79f19d688507b64f1f0b86b35563bf033b Mon Sep 17 00:00:00 2001 From: Serdar Tumgoren Date: Wed, 6 Mar 2024 12:33:42 -0500 Subject: [PATCH 11/11] fix up teachers guide #84 --- teachers_guide.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/teachers_guide.md b/teachers_guide.md index 9c3db54..7ab2193 100644 --- a/teachers_guide.md +++ b/teachers_guide.md @@ -32,19 +32,20 @@ It usually takes a few minutes to initially spin up due to customizations we've Might be helpful during this time to provide a brief overview of Codespaces, noting in particular that it uses VS Code so everything they're about to learn in the cloud transfers easily to working on their own machines beyond class. -Also worth mentionging: It's a freemium model and generally they shouldn't incur any charges (or have to put down a credit card) with reasonable usage levels. +Also worth mentioning: -And, even better, the coding environment is hangs around for a day (or two?), so they can pick up their work on Day 2 right where they left off. +- It's a freemium model and generally they shouldn't incur any charges (or have to put down a credit card) with reasonable usage levels. +- The coding environment is saved for a day (or two?), so students can pick up their work on Day 2 right where they left off. ### Codespace customizations -The Codespaces environment for this repo has been customized to use a recent version of Python and automatically installs of various libraries used in the lessons (e.g. `pandas`), along with important VS Code extensions for Python and Jupyter. +The Codespaces environment for this repo has been customized to use a recent version of Python and to automatically install various libraries used in the lessons (e.g. `pandas`), along with important VS Code extensions for Python and Jupyter. -To update the Python version and add dependencies or VS Code extensions, check out the Codespace configuration and Dockerfile in the `.devcontainer` folder. +To update the Python version and add dependencies or VS Code extensions, check out the Codespace configuration and Dockerfile in the `.devcontainer` folder. Also relevant is the GitHub action that controls the build process: `.github//workflows/docker-image.yaml`. -If you discover you're missing a library in the middle of a class, a fallback option is to open the terminal shell and just `pip install`. +If you discover you're missing a library in the middle of class, as a simple fallback you can open the terminal shell and just `pip install` libraries as needed. -Also, note that whenever you create/open a Jupyter notebook for the first time in Codespaces, you'll need to select a Python kernel. It's a suboptimal workflow for students, but it should only take a few moments to walk them through the process. +Also, note that whenever you create/open a Jupyter Notebook for the first time in Codespaces, you'll need to select a Python kernel. Codespaces/VS Code typically prompts you to select the kernel on the first attempt to run a notebook cell with an `import` statement. It's an arcane bit of workflow for students new to programming, but it should only take a few moments to walk them through the process. ## Basics