3 Basic Data
|
3.1 Getting Started
|
3.1.1 Motivating Example: Flags
|
3.1.2 Numbers
|
3.1.3 Expressions
|
3.1.4 Terminology
|
3.1.5 Strings
|
3.1.6 Images
|
3.1.6.1 Combining Images
|
3.1.6.2 Making a Flag
|
3.1.7 Stepping Back: Types, Errors, and Documentation
|
3.1.7.1 Types and Contracts
|
3.1.7.2 Format and Notation Errors
|
3.1.7.3 Finding Other
Functions: Documentation
|
3.2 Naming Values
|
3.2.1 The Definitions Pane
|
3.2.2 Naming Values
|
3.2.2.1 Names Versus Strings
|
3.2.2.2 Expressions versus
Statements
|
3.2.3 The Program Directory
|
3.2.3.1 Understanding the Run Button
|
3.2.4 Using Names to Streamline Building Images
|
3.3 From Repeated Expressions to Functions
|
3.3.1 Example: Similar Flags
|
3.3.2 Defining Functions
|
3.3.2.1 How Functions Evaluate
|
3.3.2.2 Type Annotations
|
3.3.2.3 Documentation
|
3.3.3 Functions Practice: Moon Weight
|
3.3.4 Documenting Functions with Examples
|
3.3.5 Functions Practice: Cost of pens
|
3.3.6 Recap: Defining Functions
|
3.4 Conditionals and Booleans
|
3.4.1 Motivating Example: Shipping Costs
|
3.4.2 Conditionals: Computations with Decisions
|
3.4.3 Booleans
|
3.4.3.1 Other Boolean Operations
|
3.4.3.2 Combining Booleans
|
3.4.4 Asking Multiple Questions
|
3.4.5 Evaluating by Reducing Expressions
|
3.4.6 Composing Functions
|
3.4.6.1 How Function Compositions Evaluate
|
3.4.6.2 Function Composition and the Directory
|
3.4.7 Nested Conditionals
|
3.4.8 Recap: Booleans and Conditionals
|
4 Tabular Data
|
4.1 Introduction to Tabular Data
|
4.1.1 Creating Tabular Data
|
4.1.2 Extracting Rows and Cell Values
|
4.1.3 Functions over Rows
|
4.1.4 Processing Rows
|
4.1.4.1 Finding Rows
|
4.1.4.2 Ordering Rows
|
4.1.4.3 Adding New Columns
|
4.1.4.4 Calculating New Column Values
|
4.1.5 Examples for Table-Producing Functions
|
4.2 Processing Tables
|
4.2.1 Cleaning Data Tables
|
4.2.1.1 Loading Data Tables
|
4.2.1.2 Dealing with Missing Entries
|
4.2.1.3 Normalizing Data
|
4.2.1.4 Normalization, Systematically
|
4.2.1.5 Using Programs to Detect Data Errors
|
4.2.2 Task Plans
|
4.2.3 Preparing Data Tables
|
4.2.3.1 Creating bins
|
4.2.3.2 Splitting Columns
|
4.2.4 Managing and Naming Data Tables
|
4.2.5 Visualizations and Plots
|
4.2.6 Summary: Managing a Data Analysis
|
5 Lists
|
5.1 From Tables to Lists
|
5.1.1 Basic Statistical Questions
|
5.1.2 Extracting a Column from a Table
|
5.1.3 Understanding Lists
|
5.1.3.1 Lists as Anonymous Data
|
5.1.3.2 Creating Literal Lists
|
5.1.4 Operating on Lists
|
5.1.4.1 Built-In Operations on Lists of Numbers
|
5.1.4.2 Built-In Operations on Lists in General
|
5.1.4.3 An Aside on Naming Conventions
|
5.1.4.4 Getting Elements By Position
|
5.1.4.5 Transforming Lists
|
5.1.4.6 Recap: Summary of List Operations
|
5.1.5 Lambda: Anonymous Functions
|
5.1.6 Combining Lists and Tables
|
5.2 Processing Lists
|
5.2.1 Making Lists and Taking Them Apart
|
5.2.2 Some Example Exercises
|
5.2.3 Structural Problems with Scalar Answers
|
5.2.3.1 my-len : Examples
|
5.2.3.2 my-sum : Examples
|
5.2.3.3 From Examples to Code
|
5.2.4 Structural Problems that Transform Lists
|
5.2.4.1 my-doubles : Examples and Code
|
5.2.4.2 my-str-len : Examples and Code
|
5.2.5 Structural Problems that Select from Lists
|
5.2.5.1 my-pos-nums : Examples and Code
|
5.2.5.2 my-alternating :
Examples and Code
|
5.2.6 Structural Problems Over Relaxed Domains
|
5.2.6.1 my-max : Examples
|
5.2.6.2 my-max : From Examples to Code
|
5.2.7 More Structural Problems with Scalar Answers
|
5.2.7.1 my-avg : Examples
|
5.2.8 Structural Problems with Accumulators
|
5.2.8.1 my-running-sum : First Attempt
|
5.2.8.2 my-running-sum : Examples and Code
|
5.2.8.3 my-alternating : Examples and Code
|
5.2.9 Dealing with Multiple Answers
|
5.2.9.1 uniq : Problem Setup
|
5.2.9.2 uniq : Examples
|
5.2.9.3 uniq : Code
|
5.2.9.4 uniq : Reducing Computation
|
5.2.9.5 uniq : Example and Code Variations
|
5.2.9.6 uniq : Why Produce a List?
|
5.2.10 Monomorphic Lists and Polymorphic Types
|
5.3 Recursive Data
|
5.3.1 Functions to Process Recursive Data
|
5.3.2 A Template for Processing Recursive Data
|
5.3.3 The Design Recipe
|
6 Structured Data
|
6.1 Introduction to Structured Data
|
6.1.1 Understanding the Kinds of Compound Data
|
6.1.1.1 A First Peek at Structured Data
|
6.1.1.2 A First Peek at Conditional Data
|
6.1.2 Defining and Creating Structured and Conditional Data
|
6.1.2.1 Defining and Creating Structured Data
|
6.1.2.2 Annotations for Structured Data
|
6.1.2.3 Defining and Creating Conditional Data
|
6.1.3 Programming with Structured and Conditional Data
|
6.1.3.1 Extracting Fields from Structured Data
|
6.1.3.2 Telling Apart Variants of Conditional Data
|
6.1.3.3 Processing Fields of Variants
|
6.2 Collections of Structured Data
|
6.2.1 Lists as Collective Data
|
6.2.2 Sets as Collective Data
|
6.2.2.1 Picking Elements from Sets
|
6.2.2.2 Computing with Sets
|
6.2.3 Combining Structured and Collective Data
|
6.2.4 Data Design Problem: Representing Quizzes
|
7 Trees
|
7.1 Trees
|
7.1.1 Data Design Problem – Ancestry Data
|
7.1.1.1 Computing Genetic Parents from an Ancestry Table
|
7.1.1.2 Computing Grandparents from an Ancestry Table
|
7.1.1.3 Creating a Datatype for Ancestor Trees
|
7.1.2 Programs to Process Ancestor Trees
|
7.1.3 Summarizing How to Approach Tree Problems
|
7.1.4 Study Questions
|
8 Foundations: Bonus Materials
|
8.1 Functions as Data
|
8.1.1 A Little Calculus
|
8.1.2 A Helpful Shorthand for Anonymous Functions
|
8.1.3 Streams From Functions
|
8.1.4 Combining Forces: Streams of Derivatives
|
8.2 Queues from Lists
|
8.2.1 Using a Wrapper Datatype
|
8.2.2 Combining Answers
|
8.2.3 Using a Picker
|
8.2.4 Using Tuples
|
8.2.5 A Picker Method
|
8.3 Examples, Testing, and Program Checking
|
8.3.1 From Examples to Tests
|
8.3.2 More Refined Comparisons
|
8.3.3 When Tests Fail
|
8.3.4 Oracles for Testing
|