Skip to content
Michael_Portfolio.ipynb
MR
File browser
Michael_Portfolio.ipynb
profile.jpg
resume.pdf

One editable portfolio notebook. Edits survive refreshes in this tab and reset when the tab closes or the notebook is reset.

michaelml.dev / Michael_Portfolio.ipynb
A Flask-based web application that provides artist recommendations using clustering techniques. It integrates with Spotify's API to fetch track previews and related artist information.
[ ]
code · MusicMap
project = load_project("music-map")
project.summary()
Output
MusicMap project preview

MusicMap

A Flask-based web application that provides artist recommendations using clustering techniques. It integrates with Spotify's API to fetch track previews and related artist information.

FlaskPythonK-Means ClusteringSpotify APIPandasSpotipyMatplotlibMachine LearningREST APIJavaScriptUnsupervised LearningData Mining
[ ]
code · Problem definition
project = load_project("music-map")
project.problem()
Output
ProblemListeners need a simple way to explore artists by musical similarity rather than popularity alone.
ApproachCluster normalized artist features with K-Means and enrich same-cluster recommendations with Spotify metadata and track previews.
OutcomeDelivered an interactive recommendation prototype and clustering visualization; no user-adoption metric is claimed.
[ ]
code · Constraints
project = load_project("music-map")
project.constraints()
Output

Constraints

  • Similarity had to be inferred without labeled recommendation pairs.
  • Spotify metadata and previews depended on an external API.
  • Artist features needed normalization before distance-based clustering.
[ ]
code · Role and implementation
project = load_project("music-map")
project.implementation()
Output

Role and implementation

My role: Built the clustering workflow, Flask service, artist lookup, Spotify integration, and asynchronous web experience.

  • Clustered artist feature vectors with K-Means.
  • Built constant-time cluster lookup in a Flask application.
  • Fetched Spotify previews, related artists, and metadata with Spotipy.
[ ]
code · Architecture
project = load_project("music-map")
project.show_architecture()
Output
Data IngestionLoad artist dataset from CSV with normalized features for clustering (genre, popularity, audio characteristics)
K-Means ClusteringApply unsupervised clustering algorithm to group artists by similarity, creating distinct musical clusters
User Query ProcessingReceive artist name via Flask POST endpoint, validate input, and locate artist in dataset
Cluster Similarity SearchIdentify all artists in the same cluster as the queried artist, representing similar musical characteristics
Spotify API IntegrationAuthenticate with Spotify Client Credentials, fetch track previews, artist metadata, and related artist data
Response DeliveryReturn JSON with similar artists, 30-second track previews, and Spotify metadata to frontend for playback
[ ]
code · Demo and media
project = load_project("music-map")
project.media()
Output
MusicMap project media
[ ]
code · Evaluation
project = load_project("music-map")
project.evaluation()
Output

Evaluation

  • Visualized cluster structure and compared recommendations with Spotify related artists.
  • No offline relevance benchmark is documented.
[ ]
code · Results
project = load_project("music-map")
project.results()
Output

Results

  • Produced a working artist-discovery application with playable previews.
  • The project is presented as an unsupervised recommendation study.
[ ]
code · Tradeoffs and failures
project = load_project("music-map")
project.tradeoffs()
Output

Tradeoffs

  • K-Means is simple and explainable but assumes roughly spherical clusters.
  • External API availability limits which previews can be shown.
[ ]
code · What I would improve
project = load_project("music-map")
project.improvements()
Output

Improvements

  • Add listener feedback and evaluate recommendation relevance.
  • Compare density-based, graph, and embedding-driven recommendation methods.
[ ]
code · Links and repository
project = load_project("music-map")
project.links()
Output
GitHub
Python 3 · PyodideWorker: CPUConnecting…Command modeLn 1, Col 1