📖 Scenario: You work as a data analyst for a company that wants to compare customer preferences. You have two customers' ratings for different products. You want to measure how similar or different these customers are using three common distance metrics: Euclidean, Cosine, and Manhattan distances.
🎯 Goal: Build a small program that calculates the Euclidean, Cosine, and Manhattan distances between two given customer rating vectors using scipy. This will help you understand how these distance metrics work and how to use them in Python.
📋 What You'll Learn
Create two lists called customer1 and customer2 with exact rating values.
Create a variable called metrics that holds the names of the distance metrics as strings.
Use scipy.spatial.distance functions to calculate Euclidean, Cosine, and Manhattan distances between customer1 and customer2.
Print the results clearly labeled.
💡 Why This Matters
🌍 Real World
Distance metrics help compare customers, products, or documents by measuring how similar or different they are. This is useful in recommendation systems, clustering, and search engines.
💼 Career
Data scientists and analysts use distance metrics to analyze patterns, group data, and build machine learning models that rely on similarity measures.
Progress0 / 4 steps
1
Create customer rating lists
Create two lists called customer1 and customer2 with these exact values: customer1 = [4, 3, 5, 1, 2] and customer2 = [5, 1, 4, 2, 3].
SciPy
Hint
Use square brackets to create lists and separate numbers with commas.
2
Create a list of metric names
Create a list called metrics that contains these exact strings: 'euclidean', 'cosine', and 'cityblock'.
SciPy
Hint
Use a list with the exact strings inside single quotes.
3
Calculate distances using scipy
Import scipy.spatial.distance as dist. Then create a dictionary called results where keys are metric names from metrics and values are the distances calculated by calling dist.(customer1, customer2) for each metric in metrics.
SciPy
Hint
Use getattr(dist, metric) to call the function by name inside a dictionary comprehension.
4
Print the distance results
Use a for loop with variables metric and value to iterate over results.items(). Inside the loop, print the metric name and its distance value in this exact format: "Euclidean distance: 2.828" (rounded to 3 decimal places). Use metric.capitalize() to capitalize the metric name and print the value rounded with round(value, 3).
SciPy
Hint
Use a for loop and f-string to format the output exactly as shown.
Practice
(1/5)
1. Which distance metric measures the straight-line distance between two points in space?
easy
A. Jaccard distance
B. Cosine distance
C. Manhattan distance
D. Euclidean distance
Solution
Step 1: Understand distance types
Euclidean distance is the direct straight-line distance between two points.
2. Which of the following is the correct way to import the Euclidean distance function from scipy?
easy
A. from scipy.spatial.distance import euclidean
B. import scipy.distance.euclidean
C. from scipy.distance import euclidean
D. import euclidean from scipy.spatial
Solution
Step 1: Recall scipy import syntax
The correct import path for distance functions is scipy.spatial.distance.
Step 2: Check each option
from scipy.spatial.distance import euclidean uses correct syntax: from scipy.spatial.distance import euclidean. Others are invalid or incorrect syntax.
Final Answer:
from scipy.spatial.distance import euclidean -> Option A
Quick Check:
Correct import path = from scipy.spatial.distance import euclidean [OK]
Hint: Use 'from scipy.spatial.distance import' for distance functions [OK]
Common Mistakes:
Using wrong module path
Incorrect import syntax
Trying to import from scipy.distance
3. What is the output of this code?
from scipy.spatial.distance import cosine
v1 = [1, 0, 1]
v2 = [0, 1, 0]
result = cosine(v1, v2)
print(round(result, 2))
medium
A. 1.0
B. 0.5
C. 0.0
D. 0.71
Solution
Step 1: Calculate cosine similarity basics
Vectors v1 and v2 are orthogonal (no overlap), so cosine similarity is 0.
4. Find the error in this code snippet calculating Manhattan distance:
from scipy.spatial.distance import manhattan
a = [1, 2, 3]
b = [4, 5]
print(manhattan(a, b))
medium
A. Function name should be cityblock, not manhattan
B. Import statement is incorrect
C. Lists a and b must be the same length
D. Manhattan distance requires numpy arrays, not lists
Solution
Step 1: Check input vector lengths
Vectors a and b have different lengths (3 and 2), which is invalid for distance calculation.
Step 2: Validate function and import
Import and function name are correct; scipy.spatial.distance.manhattan is valid and accepts lists.
Final Answer:
Lists a and b must be the same length -> Option C
Quick Check:
Equal length vectors needed for distance [OK]
Hint: Vectors must be same length for distance functions [OK]
Common Mistakes:
Assuming different length lists work
Confusing function name with cityblock
Thinking lists are invalid inputs
5. You have two points: p1 = [3, 4, 5] and p2 = [1, 1, 1]. Which distance metric will give the largest value? Options: A) Euclidean B) Cosine C) Manhattan D) All equal