Community Data Science Course (Spring 2023)/Week 4 coding challenges: Difference between revisions

From CommunityData
 
(15 intermediate revisions by 2 users not shown)
Line 1: Line 1:
There's actually nothing to download this time. After class, we'll update with a link to a notebook that is a cleaned up version of what we walked through during the lecture though since this code will likely be very useful.
There's actually nothing to download this time so you simply start with a fresh Jupyter notebook! Be sure to give a nice descriptive name, as always.
 
Although there's nothing to download, you will likely want to look at the following resource when working through these:
 
* [[../Week 4 lecture notes]]
* The [https://github.com/kayleachampion/spr23_CDSW/blob/main/curriculum/week4/week4_lecture_part_1_bored_api.ipynb week 4 lecture part 1 notebook] which is a cleaned up version of the book I went through in class as well as [https://uw.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=8aa88ce5-5de7-4b49-8920-afe8013c5cb9 the video of the first hour of lecture] where I walk through the construction of the notebook
* The [https://github.com/kayleachampion/spr23_CDSW/blob/main/curriculum/week4/week4_lecture_part_2_nominatim.ipynb week 4 lecture part 2 notebook] and [https://uw.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=001c2a6d-71ea-478d-9ce6-afe801795f2c the accompanying video] where I talk the code in there. The video covers some of the material we did in the last half of class (when the audio failed) but it's a bit clearer and more streamlined.
 
== #1 Bored API ==
== #1 Bored API ==


First, let's work through a few examples from the [http://www.boredapi.com/ Bored API]:
First, let's work through a few examples from the [http://www.boredapi.com/ Bored API]. In order to answer these, you'll need access to the API activity endpoint (https://www.boredapi.com/api/activity) and the documentation at http://www.boredapi.com/. My strong advice is to start building your work off the code I did in class which is in the [https://github.com/kayleachampion/spr23_CDSW/blob/main/curriculum/week4/week4_lecture_part_1_bored_api.ipynb week 4 lecture part 1Jupyter notebook].


# Write some Python code to use the API to get a free activity that I could do with my partner. Write a string that prints out now only the activity but also the accessibility, price, and participants in a sentence.
# Write some Python code to use the API to get an activity that I could do with my partner. Turn the data from the API into a sentence that tells me the activity, its accessibility, and its price. (Note: this used to say "free activity"; we removed that because it's more boring that way.)
## Extend that code so that it gets me 5 activities! Once again, just print out the activity itself.
## Extend that code so that it gets me 5 activities and have it write a nicely formatted output.
# First get a random activity from the API and print it out along with the type of activity. Now get me another activity that's of the same type as the random activity you collected and it print it out as well.  
# First, get a totally random activity from the API. Print it out, along with its activity type. Now get me another activity that's of the same type as the first random activity. Print it out too, plus its activity type (to check that they're the same).
# Write a Python program that prints out one random activity of each type that the Bored API supports.  
# Write a Python program that prints out one random activity of each type that the Bored API supports. (See if you can use a loop for this!)


== #2 Learning a new API ==
== #2 Learning a new API ==
Line 14: Line 21:


# Visit the [https://dogapi.dog Dog API website] and read the API documentation
# Visit the [https://dogapi.dog Dog API website] and read the API documentation
# Write a URL that will return a dog fact
# Write a URL that will return a single dog fact (you don't need to turn in any python code for this! just the link is fine!)
# Write a single URL that will return 5 dog facts
# Write a URL that will return 5 dog facts at once (just the link is fine)
# Take your code to request a single dog fact and put into a Python program that uses <code>requests.get()</code> and passes in parameters with the <code>params=</code> argument.
# Take your URL to request a single dog fact and put into a Python program that uses <code>requests.get()</code> and passes in parameters with the <code>params=</code> argument. Your program should just print out the fact itself and not the full JSON object
# Finally, write a for loop that gets 5 sets of facts 5 times (you can just try something like <code>for number in [1,2,3,4,5]</code>, downloads the lists of dog facts, and then writes out a new tab-separated values (TSV) file with columns: (1) ID of the dog fact, and (2) the fact itself!
# Finally, write a for loop that gets sets of 5 facts 5 times (you can just try something like <code>for number in [1,2,3,4,5]</code>, downloads the lists of dog facts, and then writes out a new tab-separated values (TSV) file with columns: (1) ID of the dog fact, and (2) the fact itself!


== #3 Mapping! ==
== #3 Mapping! ==


This set of questions will all require the [https://nominatim.openstreetmap.org/ui/search.html the Nominatim API]. As always, [https://nominatim.org/release-docs/develop/api/Search/ API documentation is online].
This set of questions will all require the [https://nominatim.openstreetmap.org/ui/search.html the Nominatim API]. As always, [https://nominatim.org/release-docs/develop/api/Search/ API documentation is online]. My strong advice is to look at the code in the [https://github.com/kayleachampion/spr23_CDSW/blob/main/curriculum/week4/week4_lecture_part_2_nominatim.ipynb week 4 lecture part 2 Jupyter notebook] and to closely watch [https://uw.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=001c2a6d-71ea-478d-9ce6-afe801795f2c the video I recorded after class].


# Are there more cafes in Ballard or Capitol Hill? (Hint: you'll need to look into the "Result limitation" section of the API documentation)
# Are there more gas stations in Duvall or Carnation?
# Are there more dentists near the University or near Downtown?
# Are there more dentists near the University or near Downtown? (you will need to look at the limit on the number of returned items)
# Use the geocoding API endpoint in Nominatim to look up a specific latitude and longitude of your choice (try this building or your hometown).
# Write a program to find all the ziplines in King County, Washington (or at least all the ones that OSM knows about!).
# Write a program to find all the ziplines in King County, Washington (or at least all the ones that OSM knows about!).
## It's important to be alert when ziplining! Once you've found a nearby zipline, have you program use that result to find the nearest cafe each of the zipliens you identify!
# It's important to be alert and well-caffeinated when ziplining! Once you've found a nearby zipline, have your program use that result to find the nearest cafe each of the ziplines you identify!
# Use the geocoding API to look up a specific latitude and longitude of your choice (try this building!).
# Craft a query using the search API to find colleges in Seattle. (Hint: you'll want to set bounded=1 and use the <code>viewbox</code>). Print the name and location of every college you find.
# Craft a query using the search API to find colleges in Seattle. (Hint: you'll want to set bounded=1 and use viewbox). Print the name and location of every college you find.
## Modify your query so that you include the address details separated out (this is an API option you can find in the documentation)?
## How can you tell that a place returned by the API is in fact a college?
## How can you tell that a place returned by the API is in fact a college?
## Print the list of colleges into a new TSV file with the following columns: <code>osm_id</code> (a unique ID that OSM uses), the name of the college, latitude, and longitude.

Latest revision as of 22:49, 21 April 2023

There's actually nothing to download this time so you simply start with a fresh Jupyter notebook! Be sure to give a nice descriptive name, as always.

Although there's nothing to download, you will likely want to look at the following resource when working through these:

#1 Bored API[edit]

First, let's work through a few examples from the Bored API. In order to answer these, you'll need access to the API activity endpoint (https://www.boredapi.com/api/activity) and the documentation at http://www.boredapi.com/. My strong advice is to start building your work off the code I did in class which is in the week 4 lecture part 1Jupyter notebook.

  1. Write some Python code to use the API to get an activity that I could do with my partner. Turn the data from the API into a sentence that tells me the activity, its accessibility, and its price. (Note: this used to say "free activity"; we removed that because it's more boring that way.)
    1. Extend that code so that it gets me 5 activities and have it write a nicely formatted output.
  2. First, get a totally random activity from the API. Print it out, along with its activity type. Now get me another activity that's of the same type as the first random activity. Print it out too, plus its activity type (to check that they're the same).
  3. Write a Python program that prints out one random activity of each type that the Bored API supports. (See if you can use a loop for this!)

#2 Learning a new API[edit]

In this exercise, I want to you to practice learning to use a new API and practice reading some API documentation. We're going to start with the Dog API which is online at: https://dogapi.dog

  1. Visit the Dog API website and read the API documentation
  2. Write a URL that will return a single dog fact (you don't need to turn in any python code for this! just the link is fine!)
  3. Write a URL that will return 5 dog facts at once (just the link is fine)
  4. Take your URL to request a single dog fact and put into a Python program that uses requests.get() and passes in parameters with the params= argument. Your program should just print out the fact itself and not the full JSON object
  5. Finally, write a for loop that gets sets of 5 facts 5 times (you can just try something like for number in [1,2,3,4,5], downloads the lists of dog facts, and then writes out a new tab-separated values (TSV) file with columns: (1) ID of the dog fact, and (2) the fact itself!

#3 Mapping![edit]

This set of questions will all require the the Nominatim API. As always, API documentation is online. My strong advice is to look at the code in the week 4 lecture part 2 Jupyter notebook and to closely watch the video I recorded after class.

  1. Are there more gas stations in Duvall or Carnation?
  2. Are there more dentists near the University or near Downtown? (you will need to look at the limit on the number of returned items)
  3. Use the geocoding API endpoint in Nominatim to look up a specific latitude and longitude of your choice (try this building or your hometown).
  4. Write a program to find all the ziplines in King County, Washington (or at least all the ones that OSM knows about!).
  5. It's important to be alert and well-caffeinated when ziplining! Once you've found a nearby zipline, have your program use that result to find the nearest cafe each of the ziplines you identify!
  6. Craft a query using the search API to find colleges in Seattle. (Hint: you'll want to set bounded=1 and use the viewbox). Print the name and location of every college you find.
    1. Modify your query so that you include the address details separated out (this is an API option you can find in the documentation)?
    2. How can you tell that a place returned by the API is in fact a college?
    3. Print the list of colleges into a new TSV file with the following columns: osm_id (a unique ID that OSM uses), the name of the college, latitude, and longitude.