diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index c33d5428..5d6f2fc0 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -4,6 +4,7 @@ name: deploy-book on: push: branches: + - master - main - feat/jupyter-book @@ -13,6 +14,7 @@ on: # # paths: - Tutorials/sample-book/_build + workflow_dispatch: # This job installs dependencies, builds the book, and pushes it to `gh-pages` @@ -23,6 +25,7 @@ jobs: pages: write id-token: write steps: + - uses: actions/checkout@v3 # Install dependencies @@ -60,3 +63,4 @@ jobs: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v2 + diff --git a/Assignment_Descriptions/05_Final_Project.md b/Assignment_Descriptions/05_Final_Project.md new file mode 100644 index 00000000..d3d79538 --- /dev/null +++ b/Assignment_Descriptions/05_Final_Project.md @@ -0,0 +1,49 @@ +# Final Project + +Your final project is an opportunity to explore a topic of your choice in depth, using the tools and methods we've explored in class. You will be expected to develop a research question, propose a spatial analytic methodology, collect and analyze data, and present your findings in a final presentation. Your final presentation should be about 10 minutes, and should include a brief overview of your research question, methodology, and findings. The final deliverable will be a Github Pages site that includes your presentation and the notebook(s) you used to conduct your analysis. + +We will check in regularly on your progress, and you will have to get sign off on your research question, and methodology, before you can proceed with your analysis. + +## Project Components + +### Research Question + +The guiding question for your research should be a question that can be answered using spatial data and analysis. It should be a question that is of interest to you, and that you can answer using the data and tools available to you. Your research question should be specific, and should be something that you can answer in the time available to you. Of course, many of the most interesting research questions are larger than you could reasonably answer over the course of our class- it is reasonable to acknowledge this, and discuss how you would expand your research in the future. + +### Proposed Methodology + +#### Conceptual Methodology + +The methodology will continue to take shape over the course of the project, but you should be able to demonstrate conceptually what you plan to do- What are your inputs? What how do you plan to use those inputs to ask and answer your research questions? What might you hope these investigations will reveal? I will accept either a written description or a flowchart of your methodology, as long as you can explain it clearly. + +#### Practical Methodology + +Your methodology should clearly lay out the inputs, processes, and outputs that you expect to use in your analysis. You should clearly articulate the transformations that you will apply to your data, the packages and algorithms used to manipulate and combine data sources, and the attributes that you will use to calculate and evaluate your results. This will continue to take shape over the course of the project, but you should be able to clearly articulate your plan. + +### Data Sources + +You should present your data sources with full citations. Note that you should only include data **that you have in hand**, not data that you think you can acquire. I am happy to advise on data acquisition, but that is not the main focus of this class or this project. + +### Analysis + +All code should be included in a Jupyter notebook, and should be well-commented and organized. Different phases of your analysis should be clearly separated, and I should be able to run your code from start to finish without errors and produce the same results. + +### Visualization + +Use static and/or interactive maps, charts, and tables to express your findings. + +### Presentation + +Use these sections as a starting point to organize your materials in order to make a compelling and engaging narrative presentation. Final presentations should be roughly seven minutes long, with a few minutes for questions. + +## Schedule + +- Week 01 Class 01: Introduce final project +- Week 02 Class 04: Research Question + Data Sources due +- Week 03 Class 06: Conceptual methodology due +- Week 04 Class 07: Desk crits +- Week 04 Class 08: Desk crits +- Week 05 Class 09: Practical methodology due +- Week 05 Class 10: Desk crits +- Week 06 Class 11: Final presentations part one +- Week 06 Class 12: Final presentations part two diff --git a/README.md b/README.md index 148ecdba..b3fc4c5c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,14 @@ Repository for CDP Mapping Systems summer 2024 course +## Important Links + +- [Syllabus](Syllabus/syllabus.md): this is the source of truth for the course. It contains the schedule, learning objectives, and other important information. +- [Assignment Descriptions](Assignment_Descriptions): this folder contains the descriptions for all assignments in the course, including the final project. +- [Assignments](Assignments): You will submit your assignments here, based on the assignment descriptions. +- [Tutorial Notebooks](Tutorials): this folder contains the tutorial notebooks for the course. These are the notebooks that we will work through in class. +- [Book](Book): this folder will contain your final project outputs and will compile into your final project website. You will never have to manually add anything to this folder; a github action will automatically update it with your assignment and final project outputs. + ## Getting started 1. Install [VSCode](https://code.visualstudio.com/) @@ -9,6 +17,6 @@ Repository for CDP Mapping Systems summer 2024 course 3. Create a new Python environment. I recommend using [Conda](https://conda.io/projects/conda/en/latest/user-guide/install/index.html) for this, but you can also use virtualenv. This will protect our system Python installation from any changes we make. 1. If you're using Conda, you can create a new environment with the following command: ``` - conda create -n [pick-a-name] python=3.11 + conda create -n [pick-a-name] python=3.12 ``` 4. In VSCode, install `Black Formatter`. Using a consistent formatter will help us keep our code clean and readable and reduce minor changes in our commits. We will use `Black` as our default formatter diff --git a/Syllabus/syllabus.md b/Syllabus/syllabus.md index 56e769e2..026a2f90 100644 --- a/Syllabus/syllabus.md +++ b/Syllabus/syllabus.md @@ -1,14 +1,29 @@ ## Introduction -*Mapping Systems* will introduce CDP students to programming concepts and methods for spatial analysis, as well as their role in the production and interpretation of spatial data. -The course will focus on building proficiency in Python-based workflows focused on finding, describing, and visualizing spatial data; manipulating and drawing meaning from data layers; understanding distance and spatial relatedness; and measuring change over time. While a primary goal of this course is to introduce students to practical tools and workflows and build fluency in their use, the course will also introduce students to some historical and conceptual context, as well as case studies. +_Mapping Systems_ will introduce CDP students to programming concepts and methods for spatial analysis, as well as their role in the production and interpretation of spatial data. + +The course will focus on building proficiency in Python-based workflows focused on finding, describing, and visualizing spatial data; manipulating and drawing meaning from data layers; understanding distance and spatial relatedness; and measuring change over time. While a primary goal of this course is to introduce students to practical tools and workflows and build fluency in their use, the course will also introduce students to some historical and conceptual context, as well as case studies. + The course will require students to complete exercises to gain proficiency in spatial analytic tools, and will culminate in a final project investigating a spatial research question. ## Learning Objectives -## Course Organization / Communication + +At the most basic level, the goal of this class is to introduce students to mapping in Python and demonstrate how to explore, analyze, and visualize spatial data. By the end of the course, students should be able to: + +- Load, explore, and visualize spatial data in Python +- Understand and apply basic geoprocessing techniques +- Measure distance and spatial relatedness +- Analyze change over time +- Articulate some combination of the above in a final project + +Furthermore, students should develop a deeper understanding of how spatial data is used in decision-making, and challenges associated with using data to inform arguments (agency in mapping; objective vs subjective / abstract vs experiential). + + +## Course Organization / Communication + Class meets on Tuesdays and Thursday at **xx_where_xx** from 6-8pm. Weeks will generally be organized as follows: **Tuesday**: Lecture, reading discussion, review of technical concepts @@ -18,109 +33,152 @@ Conversation topics that pertain to the entire class, such as meeting time/locat All slides and tutorials will be posted to the course's [Github repository](https://github.com/mapping-systems/cdp-mapping-systems). All exercises, as well as final project progress, will be saved and managed in Github as well (details below). -## Office Hours + +## Office Hours Office hours are by appointment, and preferable on Tuesday or Thursdays before or after class. Email me to schedule a time to chat. + ## Final Project -*Details to come* -*Add schedule of final project here as well as below* +Your final project will require you to develop a spatial research question and methodology, find the appropriate datasets to explore your question, and then analyze and visualize your results. You will present your findings in a final presentation, and submit a Github Pages site that includes your presentation and the notebook(s) you used to conduct your analysis. More information can be found in the [final project description](/Assignment_Descriptions/05_Final_Project.md). + +### Final Project Schedule + +- Week 01 Class 01: Introduce final project +- Week 02 Class 04: Research Question + Data Sources due +- Week 03 Class 06: Conceptual methodology due +- Week 04 Class 07: Desk crits +- Week 04 Class 08: Desk crits +- Week 05 Class 09: Practical methodology due +- Week 05 Class 10: Desk crits +- Week 06 Class 11: Final presentations part one +- Week 06 Class 12: Final presentations part two ## Schedule ### Week 01 + Getting started- IDE, environment, loading, and visualizing data + #### Class 01: Introductions + + - Introductions, review of syllabus - Orientation to course Github - A brief history of GIS + computer mapping - Projections - Vector data types - **Exercise** [Getting Started](/Assignment_Descriptions/00_Getting_Started.md) (to be completed by next class) - **Readings** - - (optional) Edwards, P.N., 2010. Introduction, in: A Vast Machine: Computer Models, Climate Data, and the Politics of Global Warming. The MIT Press. + **Exercise** [Getting Started](/Assignment_Descriptions/00_Getting_Started.md) (to be completed by next class) + **Readings** + + - (optional) Edwards, P.N., 2010. Introduction, in: A Vast Machine: Computer Models, Climate Data, and the Politics of Global Warming. The MIT Press. #### Class 02: Loading, exploring, visualizing data (Tutorial) + - Explore spatial and non-spatial attributes of tax lot dataset, MapPLUTO - Create static and interactive visualizations of dataset - Saving data - - **Exercise:** [01_Loading and visualizing data](/Assignment_Descriptions/01_Loading_Visualizing.md) - + + **Exercise:** [01_Loading and visualizing data](/Assignment_Descriptions/01_Loading_Visualizing.md) + ### Week 02 + Geoprocessing / vector data analysis basics using `pyogrio`, `pandas`, `matplotlib`, and `lonboard` -#### Class 03: The power of mapping + +#### Class 03: Why we map + - Mapping as creative process, critical practice, and counter-narrative - Case study: Environmental Justice in New York City and New York State - - **Readings**: - - Miller, H.J., 2004. Tobler’s First Law and Spatial Analysis. Annals of the Association of American Geographers 94, 284–289. - - Maantay, J., Ziegler, J., 2006. Spatial Data and Basic Mapping Concepts, in: GIS for the Urban Environment. - - Corner, J., 2011. The Agency of Mapping: Speculation, Critique and Invention, in: Dodge, M., Kitchin, R., Perkins, C. (Eds.), The Map Reader. Wiley, pp. 89–101. [https://doi.org/10.1002/9780470979587.ch12](https://doi.org/10.1002/9780470979587.ch12) - - (optional) Batlle-Baptiste, W., Rusert, B. (Eds.), 2018. WEB Du Bois’s Data Portraits: Visualizing Black America. Princeton Architectural Press. - - (optional) Entrikin, J.N., 19291. The Betweenness of Place, in: Entrikin, J.N. (Ed.), The Betweenness of Place: Towards a Geography of Modernity. Macmillan Education UK, London, pp. 6–26. [https://doi.org/10.1007/978-1-349-21086-2_2](https://doi.org/10.1007/978-1-349-21086-2_2 - - (optional) Lynch, K., 1960. The city and its elements, in: The Image of the City. The MIT Press, Cambridge MA. - - (optional) Tuan, Y.-F., 1975. Place: An Experiential Perspective. Geographical Review 65, 151–165. [https://doi.org/10.2307/213970](https://doi.org/10.2307/213970) + + **Readings**: + + - Miller, H.J., 2004. Tobler’s First Law and Spatial Analysis. Annals of the Association of American Geographers 94, 284–289. + - Batlle-Baptiste, W., Rusert, B. (Eds.), 2018. WEB Du Bois’s Data Portraits: Visualizing Black America. Princeton Architectural Press. + - (optional) Entrikin, J.N., 19291. The Betweenness of Place, in: Entrikin, J.N. (Ed.), The Betweenness of Place: Towards a Geography of Modernity. Macmillan Education UK, London, pp. 6–26. [https://doi.org/10.1007/978-1-349-21086-2_2](https://doi.org/10.1007/978-1-349-21086-2_2 + - Maantay, J., Ziegler, J., 2006. Spatial Data and Basic Mapping Concepts, in: GIS for the Urban Environment. + - (optional) Corner, J., 2011. The Agency of Mapping: Speculation, Critique and Invention, in: Dodge, M., Kitchin, R., Perkins, C. (Eds.), The Map Reader. Wiley, pp. 89–101. [https://doi.org/10.1002/9780470979587.ch12](https://doi.org/10.1002/9780470979587.ch12) #### Class 04: Geoprocessing (Tutorial) + - Manipulate, reshape, and combine datasets together using spatial and non-spatial characteristics using `geopandas` and `shapely` - **Exercise:** [Geoprocessing](/Assignment_Descriptions/02_Geoprocessing.md) - - **Final Project Deliverable**: Research question and draft data manifest due + **Exercise:** [Geoprocessing](/Assignment_Descriptions/02_Geoprocessing.md) + **Final Project Deliverable**: Research question and draft data manifest due ### Week 03 -Ways to think about and measure distance and spatial relatedness +Ways to think about and measure distance and spatial relatedness #### Class 05: Distance, Adjacency, Networks + + - Euclidean and network distance - Introduction to graph theory - Different kinds of adjacency - Case study: CitiBike usage before and during the COVID-19 pandemic - - **Readings**: - - Barabási, A.-L., 2016. Graph Theory, in: Network Science. Cambridge University Press, Cambridge, United Kingdom. - - Xin, R., Ai, T., Ding, L., Zhu, R., Meng, L., 2022. Impact of the COVID-19 pandemic on urban human mobility - A multiscale geospatial network analysis using New York bike-sharing data. Cities 126, 103677. [https://doi.org/10.1016/j.cities.2022.103677](https://doi.org/10.1016/j.cities.2022.103677) - + + + **Readings**: + + - Barabási, A.-L., 2016. Graph Theory, in: Network Science. Cambridge University Press, Cambridge, United Kingdom. + - Xin, R., Ai, T., Ding, L., Zhu, R., Meng, L., 2022. Impact of the COVID-19 pandemic on urban human mobility - A multiscale geospatial network analysis using New York bike-sharing data. Cities 126, 103677. [https://doi.org/10.1016/j.cities.2022.103677](https://doi.org/10.1016/j.cities.2022.103677) + #### Class 06: Measuring Distance (Tutorial) + - Introduce `osmnx`, `networkx`, `libpysal`, `h3` to calculate distance from Avery to local points of interest - **Desk crits** on final projects - - **Exercise:** [Networks](/Assignment_Descriptions/03_Networks.md) - **Final Project Deliverable:** Conceptual methodology due + **Exercise:** [Networks](/Assignment_Descriptions/03_Networks.md) + + **Final Project Deliverable:** Conceptual methodology due + ### Week 04 Raster analysis, STAC specification, change over time #### Class 07: Measuring Change + - Introduction to raster data - Historical context for measuring change over time - Case study: National Land Cover Dataset - **Desk Crits** + checking in - **Readings** - - Couclelis, H., 1992. People manipulate objects (but cultivate fields): Beyond the raster-vector debate in GIS, in: Frank, A.U., Campari, I., Formentini, U. (Eds.), Theories and Methods of Spatio-Temporal Reasoning in Geographic Space, Lecture Notes in Computer Science. Springer Berlin Heidelberg, Berlin, Heidelberg, pp. 65–77. [https://doi.org/10.1007/3-540-55966-3_3](https://doi.org/10.1007/3-540-55966-3_3) - - Homer, C., Dewitz, J., Jin, S., Xian, G., Costello, C., Danielson, P., Gass, L., Funk, M., Wickham, J., Stehman, S., Auch, R., Riitters, K., 2020. Conterminous United States land cover change patterns 2001–2016 from the 2016 National Land Cover Database. ISPRS Journal of Photogrammetry and Remote Sensing 162, 184–199. [https://doi.org/10.1016/j.isprsjprs.2020.02.019](https://doi.org/10.1016/j.isprsjprs.2020.02.019) + **Readings** + + - Couclelis, H., 1992. People manipulate objects (but cultivate fields): Beyond the raster-vector debate in GIS, in: Frank, A.U., Campari, I., Formentini, U. (Eds.), Theories and Methods of Spatio-Temporal Reasoning in Geographic Space, Lecture Notes in Computer Science. Springer Berlin Heidelberg, Berlin, Heidelberg, pp. 65–77. [https://doi.org/10.1007/3-540-55966-3_3](https://doi.org/10.1007/3-540-55966-3_3) + - Homer, C., Dewitz, J., Jin, S., Xian, G., Costello, C., Danielson, P., Gass, L., Funk, M., Wickham, J., Stehman, S., Auch, R., Riitters, K., 2020. Conterminous United States land cover change patterns 2001–2016 from the 2016 National Land Cover Database. ISPRS Journal of Photogrammetry and Remote Sensing 162, 184–199. [https://doi.org/10.1016/j.isprsjprs.2020.02.019](https://doi.org/10.1016/j.isprsjprs.2020.02.019) #### Class 08: Supervised classification using earth observation (EO) data -- Use `geemap`, `rasterio`, `ipyleaflet` to find, download, classify, and analyze raster data -- **Desk crits** + +- Use `leafmap`, `rasterio`, `ipyleaflet` to find, download, classify, composite, and analyze raster data +- **Desk crits** ### Week 05 +Preparing for final presentations + +#### Class 09: Desk crits / work session + +**Final Project Deliverable**: Practical methodology due (be prepared to talk through this with me during class) + +#### Class 10: Desk crits / work session + +### Week 06 + Wrapping up + the things we didn't get to -#### Class 09: Looking forward + +#### Class 11: Final Presentations + +- Final project presentations part one + +#### Class 12: Final Presentations + Looking Forward + +- Final project presentations part two - Implications for practice - Connections to other kinds of computational design practices -- **Desk crits** - -#### Class 10: Final Presentations -- Final project presentations