Route Scout

Try it out! GitHub Repo

Overview

As an avid climber, this project was born from passion. Whenever I'd make outdoors trips, I'd want to maximize my time by pre-identifying a few bouldering routes I'd like to commit to for the day. This often came with scouring guide books and Mountain Project, an online listing of thousands of climbing routes across the globe, to find routes that interested me and were nearby one another. I wanted there to be an easy to use and centralized source that I could use to search for recommendations. So began the creation of Route Scout.

Joshua Tree
Fig.1 - Joshua Tree National Park. One of the pillars for the sport of climbing.

With minimal prior experience in database and application development, I wanted to initially keep the app small and specialized. As such, I only focused on bouldering routes in Southern California. That said, I chose to develop and leverage a database to allow the app to easily scale with a growing number of routes and locations. I used Postgres and Python's sql plugin, psycopg2, to facilitate the the database construction. The data was all pulled from Mountain Project via their API and some additional web scraping. I then used Dash, a tool for developing web based applications in python or R, to develop and interactive dashboard to serve the recommendations.

Screenshot
Fig.2 - Screenshot of Route Scout.

Backend Model

The recommendation system is based off of a user input description of the type of climb they are looking for. This is a natural language processing problem. One of the difficulties is the extensive use of jargon (without standardized spellings!) in climbing route descriptions. While stemming and lemmatization are still applicable, some cleaning must be applied beforehand. For now, I've simply used a brute force approach to identify key climbing terms that may be spelled differently and replace them with a standardized version of the word. Then, after removing stop words and punctuation, I vectorize the descriptions with a Term Frequency-Inverse Document Frequency vectorizer and measure the cosine similarity of all routes and the input description. Very simply, if the user inputs a keyword that doesn't appear very often, this makes it likely they will find the climbs where that keyword is present, hopefully satisfying their search! While this backend model is serviceable, it remains a priority of mine to continue to improve upon.

Try out the app for yourself with the link at the top of the page and feel free to refer back to this post for future updates!