Rock Climbing Recommendation Engine
For my final project at Flatiron’s Data Science Immersive I decided to merge my two passions: coding and rock climbing.
I’ve often had climbing routes I enjoy and I’ll ask friends if they know of similar types of climbs. I figured, why not create a program that could do exactly that.
The general concept was that I create a content based recommendation system that would ask for a reference climb, search location, and radius. The program would then return the top 10 most similar climbs in that area. I wanted the flexibility to search for a climb in Yosemite that is similar to a reference climb in the Gunks (New York).
The Process
I began by going to Mountain Project (think Wikipedia for rock climbing routes) and used their API to get general info on around 36,000 climbs across the US. The information included, route difficulty, route type(boulder, trad, sport etc.), height, star rating, and some geographic data.
Though this information was a good baseline, I felt that it did not really capture the style of the route. Perhaps as important as grade and type, was how the features of the rock characterize the route. For example, I wanted to show if the route was a slab, crimpy, overhung, vertical, or followed a crack feature.
To get this information I went back to all the routes and scraped their descriptions. From here, I looked for keywords and added them as a binary column to describe the climbs.
After that, I looked at the distributions of my ~36,000 climbs and felt I was ready to create the recommendation engine.
Recommendation Engine
To began, I scaled the features, vectorized all of the routes, and choose to use a cosine similarity to find the best match.
My program will ask the user for a reference climb (using a mountain project url), a zip code or city & state, and search radius. From there is will display the top 10 most similar climbs.
Website and Demo
Feel free to follow this link to try out the recommendation engine for yourself. I have also made a Demo video for those of you that would prefer to watch that instead.
Next Steps
I would like to add a choice that allows the user to select features to match on rather than a specific reference climb, as well as create a user based recommendation system.
References
For those who are interested in seeing more of the code, I have pasted the link to my GitHub repo below.