Instructor: Professor Madeline Blount
Term: Fall 2023
Time: Wednesdays 4:50-7:20pm
Space: Shepard S-275
Office Hours: virtual by appointment, schedule here
E-mail: [email protected]
City College, City University of New York
This is a graduate-level course on the theory, practice, design, and critique of data visualization. If "technology has built the house in which we all live" (Ursula Franklin), data certainly makes up the materials for this house, how it works, and how it looks. How does data do its work, and why is visualization a crucial part of this? What are the limits of data, and some potential pitfalls of data visualization? How can visualization help us make sense of the ever-increasing deluge of data in our world? How do we determine what are "good" data visualizations, and how do we make them? Can we automate them - and should we? We'll see how creating strong, evocative, and informative data visualization involves techniques from art, design, math, psychology, computer science, and other fields.
Our explorations in this class will be technical as well as conceptual. We will dive into interdisciplinary readings as we learn the nuts and bolts of designing, coding, and analyzing data visualizations.
- learn some basic and advanced tools of data visualization in Python and Javascript
- refine our visualizations based on design principles from interdisciplinary sources
- work with real datasets from a wide variety of domains
- develop techniques in interactivity, geospatial mapping, and machine learning visualization
- get comfortable reading documentation and using new tools quickly
- interrogate the concept of data as a form of knowledge production, and learn to approach visualizations critically
- iterate and collaborate on a final data project at the end of the semester
This course will generally meet in-person for 2.5 hours on Wednesdays. Each class session will likely involve:
- Short Lecture + Group Discussion
- Based on the readings, due before class each week
- Student Presentations
- Mini-talk based on visualization found in the world (see assignment)
- Lab + Workshop
- Programming and hands-on work; this will sometimes be guided by the professor, and sometimes involve documentation-based tutorials and group work
👾 We will also build an asynchronous offline community (as exists in nearly every endeavor @ this point!). We will have a class Discord server where we will have multiple channels for posting updates, posing questions, commenting on readings and each others' work, sharing resources, etc.
🎥 There may be a few times throughout the semester when I will film a lecture + lab instead of giving one in-person. When I post a video instead, you will be free to watch it in your own time. These asynchronous lectures will be clearly marked on the schedule. In the case of any change in the schedule, I will announce this change ahead of time via Blackboard/e-mail.
The final for this class will be to develop a data visualization project in a small group. There is no exam in this course.
key dates
materials & references
tools
expectations & requirements
evaluation
academic honesty & integrity
contact & questions
💥subject to change
Week 0: Aug. 30
Introduction to Data Visualization, Hello World!
Assignment: complete class survey; "hello world," post on Discord (invite/link for both will be e-mailed)
DUE: Friday Sep. 1st, 5:00pm (happy labor day weekend!)
Week 1: Sep. 6
History of Data Visualization, Beginnings
🤖 starting off w/python
Readings due today:
- Data Visualization: A Practical Introduction, Healy, Ch. 1 "Look at data" (1.1-1.8)
- The Visual Display of Quantitative Information, Tufte, Ch. 1 "Graphical Excellence" (p. 13-52)
- Look through: Quick start and Pyplot, Matplotlib documentation
Week 2: Sep. 13
Abstraction + Fundamentals of Data Analysis
🤖 python libraries
Readings due today:
- Computational Information Design, Fry, Ch. 2 "Basic Example" + Ch. 5 "Process"
- Visual Analysis and Design, Munzner, Ch. 2 "What: Data Abstraction" and Ch. 3 "Why: Task Abstraction"
- optional: videos by Munzner, Data Abstraction and Task Abstraction
Week 3: Sep. 20
Visual Perception, Aesthetics, and Color
🤖 python libraries
Readings due today:
- Fundamentals of Data Visualization, Wilke, Ch. 2, 4, and 19 (they are short)
- Envisioning Information, Tufte, Ch. 5 "Color and Information"
- Visual Analysis and Design, Munzner, Color 🎥 watch video, 18min.
Week 4: Sep. 27
Design Principles + Data Storytelling
🤖 python libraries
Readings due today:
- The Shape of Design, Chimero, Ch. 7 "Stories and Voids"
- The Functional Art, Cairo, intro to p. 23
- W.E.B. Du Bois's Data Portraits, Battle-Baptiste and Rusert, p. 7-50 + Plates
Week 5: Oct. 4
Interactivity
🤖 introducing javascript
Readings due today:
- Data in Wonderland, Spencer, Ch. 3 "Interactive" - all of Ch. 3!
- D3 for the Impatient: Interactive Graphics for Programmers and Scientists, Janert, p. 11-30 in Ch. 2
Week 6: Oct. 11
Geospatial Data: Maps I
🤖 javascript
Readings due today:
- Anatomy of a Web Map, McConchie and Schechter (interactive presentation)
- Fundamentals of Data Visualization, Wilke, Ch. 15
- How to Lie With Maps, Monmonier, Intro (p. 1-4) & Ch. 3 (p. 25-42)
Week 7: Oct. 18
Geospatial Data: Maps II
🤖 javascript
Readings due today:
- "Unicorns, Janitors, Ninjas, Wizards, and Rock Stars" from Data Feminism, D'Ignazio and Klein
- "On Exactitude in Science", Borges (*yes, 1 paragraph short story!)
- "The politics of making maps", Caquard, interviewed by Salinas
Week 8: Oct. 25
Dashboards + Live Data
🤖 javascript, python
Readings due today:
- read through choropleth code example
- "Mission Control: A History of The Urban Dashboard", Mattern in Places Journal
📊 Mid-term Mini-Project Due, Oct. 29 by 11:59pm
Week 9: Nov. 1
Visualizing Uncertainty
🤖 javascript, python
Readings due today:
- Fundamentals of Data Visualization, Wilke, Ch. 16
- "What would feminist data visualization look like?", D'Ignazio
- Data Humanism, Lupi
Week 10: Nov. 8
Visualizing Texts, Networks and Trees
🤖 javascript, python
Readings due today:
- "Learning from Lombardi", Fry
- from The Network Turn, Ahnert, Coleman, Weingart; pp. 1-24, & pp. 57-61
Week 11: Nov. 15
Data Collection and Missing Data
🤖 python libraries
📊 Final Project Proposal + Groups Due, before class
Readings due today:
- read intro + skim through: beautifulsoup documentation
- read intro (README) + skim through: missingno documentation
- "Missing Datasets" and "The Point of Collection" Mimi Onuoha
Week 12: Nov. 22
NO CLASS, HOLIDAY
Week 13: Nov. 29
Big Data, Multidimensions, ML
Readings due today:
- "A visual introduction to machine learning,", Part I & II, R2D3
- "What is a model?" from Weapons of Math Destruction, pages TBD
- Big Data, Big Design, Armstrong, TBD
Week 14: Dec. 6
Questioning Automation, Wrap-Up & Final Presentations
Assignment: work on final project
FINAL REPORT DUE: Dec. 15th, 11:59pm
- mid-term mini-project: due Oct. 29, 11:59pm
- final project presentation: in-class, Dec. 6th
- final project repot: due Dec. 15th, 11:59pm
You will be responsible for:
- weekly: Discord post, due 4:00pm EST before every class session, starting Week 2
- 1 mini-presentation of Discord post visualization (scheduled throughout course)
- 1 mid-term assignment (solo work)
- 1 final group project (proposal, presentation, and final report)
More details for each of these assignments will be given throughout the semester.
All course material will be linked via this page on Github. I will often post extra links, tool documentation, and further references beyond the required materials that might be helpful to you, especially as you build your own visualizations - but these extra resources will be optional. There will be no textbook for this course other than what's linked here. I will post the readings at least 2 weeks in advance, but if you look far ahead you might see some "TBDs." I will also post any in-class workshop material (slides, links, etc.) in a folder for each week.
- Blackboard
- Discord
- Google Colab/Jupyter Notebooks
- Repl.it
- Glitch.com
The discussion and lab combination in this class means that attendance is very important, both for your own learning and the learning of your fellow students. Collaborative workshops and rich critical inquiry simply will not happen if we don't have a consistently present, engaged crew of classmates. Attendance in-class, as well as engagement (active listening, asking questions, etc.), will count toward your final grade. Further, most of the technical component of the class involves in-person labs. At the end of each class section with a lab or workshop, you will need to submit your code to show your in-class work.
That said, things happen. Everyone in this course will be allowed 1 absence, no questions asked. Every absence after this 1 will result in a deduction from your partipication/attendance portion of your final grade. Lateness beyond 20 minutes is considered an absence. If you know ahead of time that you will need to miss class, please let me know as soon as possible, and we can arrange a way for you to make up the work.
It is crucial that we build a space where everyone can learn. This class will be an inclusive and harassment-free space for everyone, with no tolerations of discimination based on gender, race, sexual orientation, religion, disability, or appearance. Please let me know privately if you require an academic accommodation.
Grading breakdown:
- Participation/Attendance (including in-class lab work): 20%
- Weekly Async Posts: 20%
- Midterm Assignment: 20%
- Final Project: 40%
on late work:
Late assignments drop 10% per day, starting after the due time. (If you submit a Discord post 1 hour after the due date, for example, it drops 10%. If you wait another 24 hours, it drops 20%.)
✉️ To receive credit for late work, you will need to e-mail me once you have completed it.
If you have a reason for needing an extension (where you will receive full points), please reach out to me before the due date for an assignment.
Plagiarism is "the act of presenting another person's ideas, research or writings as your own." (CUNY). This is as true for writing code as it is for writing others' words and pretending that they are yours.
It is important that everything you turn in for this class is your own work. I understand that collaborating with your classmates can be really helpful when learning - you are allowed and encouraged to do this! However, the code and designs you submit must reflect work you have done on your own. To outline some of the boundaries here, it is acceptable to:
- Discuss the course’s material with others in order to understand it better.
- Help a classmate identify a bug in their code.
- Incorporate a few lines of code that you find online or elsewhere into your own code, provided that those lines are not solutions to assigned work and that you cite the lines’ origins.
- Turning to the web or elsewhere for instruction beyond the course’s own, for references, and for solutions to technical difficulties, but not for outright solutions to assigned work.
- Whiteboarding solutions with others using diagrams or pseudocode but not actual code.
It is not acceptable to:
- Search for or solicit outright solutions to assessments online or elsewhere.
- Split an assessment’s workload with another individual and combine your work. (exception: group projects)
- Submit (after possibly modifying) the work of another individual
- Use AI-based software that suggests or completes answers to questions or lines of code.
These terms modified and inspired by Harvard's CS50's academic honesty policy, here.
I have ways of checking on the originality of your code and assignments. Consequences for violating this academic honesty policy will be severe, including but not limited to failing the course.
You can find CCNY’s Academic Integrity Policy in full here. Do not plagiarize.
👾 Our class will have a Discord server for posting questions and communicating with each other.
If you would like to ask a question privately, please e-mail me - I am available and I try to respond within 24 hours. You are also invited to schedule some virtual office hour time to talk, here. If you need a time that's not on this schedule, please e-mail me.