Course Goals and Topics
This is an for-credit applied course focusing on a pragmatic understanding of
programming languages and software libraries, specifically oriented
towards students in the social sciences and humanities with emerging
research projects requiring basic programming skills.
Students in the course will learn to write programs in the (open-source) interpreted programming
language Python, as well as learning to use databases and to interact with a wide variety of existing
software libraries. The course's goals are
to demonstrate that data can be created, analyzed and visualized by a diversity
of methods, and to encourage students not to be intimidated by
unfamiliar computer programming dialects and interfaces. The course will
introduce methods required to parse text files, scrape
data from other sources, write structured programs for statistical
analysis, create and query databases, simulate social processes, visualize datasets, conduct
network analysis, and assemble multiple processes into software "pipelines". As such, the course's goals include
unshackling academic researchers from the constraints of commercial,
general-purpose statistics/GIS software and to free them from the
limitations of working with pre-existing and pre-formatted data sets.
Assignments and Help Sessions
Each week's lectures will be accompanied by a take-home programming assignment
which will be due before the following week's class on Tuesday. Weekly tutoring hours will be provided for those requiring extra
guidance on the assignment. The programming assignments will often be
cumulative and build on one another, so completing the functionality
of each assignment is crucial.
This year we will be using
Piazza for class discussion. Rather than emailing questions to the teaching staff directly, we encourage you to post your questions there.
The course grade will be composed of three parts: participation (10%); homework (50%); and a final project (40%).
Participation will be primarily evaluated based on your participation in Piazza where you can ask and answer questions about anything course-related.
Homework will be given full credit if completed on-time, will be discounted 10% each class period that they remain incomplete. If you do not complete the assignment on-time, you will need to inform us to look at it again for re-evaluation.
If you are having a hard time...let us know on Piazza or in person at any of the study sessions. We hope that you will support each other in solving problems associated with the homework, but each student must understand, complete and "turn in" their own.
Undergraduate student final projects will involve creation of a flexible, interactive, web-presentable project that either performs (1) network analysis on Facebook data; (2) content analysis on Twitter data; or (3) simulation analysis on city portal (e.g., crime) data.
Graduate student final projects will be flexible, interactive, web-presentable projects of their own design that solve a substantial research problem.
(Undergraduates can petition to perform a "graduate" project).
Undergraduate and graduate projects can be performed by individuals or pairs of students.
Evaluation will be fair; more will be expected from pairs than individuals.
Winter 2015 Schedule
|Programming, Python Fundamentals and an Introduction to Computational Social Science
- (Tue 1/6/2015) Introduction to basic concepts of programming
languages. Introduction to the interpreted programming language Python.
Slides: Introduction and overview
- (Thu 1/8/2015) Introduction to control flow. Introduction to functions.
Slides: Part 1: data types and Part 2: control flow
- Watts, Duncan. (2007) "A Twenty-First Century Science." Nature, vol. 445, p. 489.
- Lazer et. al. (2009) "Computational Social Science.", Science, vol. 323, pp. 721-723.
- Savage and Burrows (2007) "The Coming Crisis of Empirical Sociology." Sociology, vol. 41, no. 5, pp. 885-899
- Wallach, Hanna (2014) "Big Data, Machine Learning, and the Social Sciences: Fairness, Accountability, and Transparency."
|Code Reuse and Tuning|
- (Tue 1/13/2015) Functions, con't. Annotation, commenting, and code readability.
- (Thu 1/15/2015) Algorithm design; theory of algorithms.
Slides: Style and Efficiency
- Kramer et al. (2014) "Experimental evidence of massive-scale emotion contagion through social networks." PNAS, vol. 111(24), pp. 8788-8790
- Commentary, especially from Kramer, PNAS, Duncan Watts, Kate Crawford, Jay Rosen, Shoshana Zuboff, Janet Vertesi, and Matthew Salganik.
- Gentzkow and Shapiro (2014) "Code and Data for the Social Sciences: A Practitioner's Guide." Chapters 1 ("Introduction"), 7 ("Documentation"), and the Appendix ("Code Style").
|Week 3 |
|Data and Information Visualization
- (Tue 1/20/2015) Scraping data, HTML, JSON.
Slides (Tuesday): Web Scraping
- (Thu 1/22/2015) Visualizing/plotting data.
- HTML/API recap, parsing dates, regular expressions, plotting
- Agent-based modeling and simulation
Links for Week 3 Thursday:
|Week 4 |
- (Tue 1/27/2015) Introduction to Unix / command-line; Filesystem fundamentals; Regular expressions
Slides: Intro to Operating Systems / Unix
- (Thu 1/29/2015) Editing text; modularizing code; Introduction to Github.
|Week 5 |
- (Tue 2/3/2015) Input/Output (I/O); Data integration
- (Thu 2/5/2015) Connecting diverse programs together
|Week 6 |
|Common Pipelines 1|
- (Tue 2/10/2015) Networks (using networkx)
- (Thu 2/12/2015) Statistics (using pandas)
|Week 7 |
|Common Pipelines 2|
- (Tue 2/17/2015) Text (using NLTK)
- (Thu 2/19/2015) Machine learning (using scikit-learn)
|Week 8 |
|Data warehousing |
- (Tue 2/24/2015) Advanced visualization.
- (Thu 2/26/2015) Relational databases. Introduction to MySQLdb
library for Python.
- (Tue 3/3/2015) Web programming (with Flask)
- (Thu 3/5/2015) Advanced simulation.
|High performance computing|
- (Tue 3/10/2015) Parallelization and High Performance Computing
- Work on final projects
|Final (March 19th) ||Hacker Fair|
- (Thu 3/19/2015) Undergraduates (set projects); Graduates (personal projects)
- Text editors: you should find a scripting editor you enjoy
using. Our recommendation for beginners is Sublime Text.
UPDATED for 2015!
One easy, ethnographically-oriented way to help adapt to contemporary computing culture is to crash one of Chicago's
many friendly user groups and meetups, which typically offer opportunities for collaboration,
free pizza, and PowerPoint presentations in various campus locations and downtown
- Open Gov Hack Night is
an unparalleled mashup of civic-minded developers, municipal and regional stakeholders, journalists, and
moonlighting grad students. Meets at the 8th floor of the Merchandise Mart downtown.
- Chicago Woman Developers Meetup: weekly hack nights downtown.
- ChiPy is Chicago's Python user group, where every meeting is "the best meeting ever", and which has recently been held at the offices of Threadless, The Onion, and Groupon.
- UChicago Hack Night meets every Friday night in Ryerson 255. Also on Facebook.
- ACM-W Study Break: the UChicago Chapter of the Association for Computing Machinery’s Committee on Women has study breaks every alternate Tuesday.
1 Students will be required to install Python
distributions and other software on their own computers, in a Week 3 "installathon".