{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "view-in-github"
   },
   "source": [
    "<a href=\"https://colab.research.google.com/github/filtr/ds-artist-similarity-matrix/blob/master/Artist_Similarity_Matrix.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "cellView": "form",
    "colab": {},
    "colab_type": "code",
    "id": "pNm1tc6WbvsP"
   },
   "outputs": [],
   "source": [
    "#@title Similar Artist Finder\n",
    "#@markdown Enter an artist and return to get 100 most similar artists.\n",
    "\n",
    "Artist = 'Ariana Grande'  #@param {type: \"string\"}\n",
    "\n",
    "#@markdown ---\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "9jdmAcPXvE1Z"
   },
   "outputs": [],
   "source": [
    "#Library Imports\n",
    "import pandas as pd\n",
    "import json\n",
    "from urllib.request import urlopen\n",
    "\n",
    "#Create a dataframe and pre-process/clean text\n",
    "artist_name=[Artist]\n",
    "artist_frame = pd.DataFrame(artist_name,columns=['artist_name'])\n",
    "artist_frame['artist_name'] = artist_frame['artist_name'].str.replace(' ','+')\n",
    "for x in range(1):\n",
    "  artist_frame['artist_name'].iloc[x] = artist_frame['artist_name'].iloc[x].replace('é','e')\n",
    "  artist_frame['artist_name'].iloc[x] = artist_frame['artist_name'].iloc[x].replace('Ø','o')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "-wbReQQFjDHh"
   },
   "outputs": [],
   "source": [
    "#Creates a column artist_list, calls Last.fm API and populates column with API response\n",
    "artist_frame['artist_list']=''\n",
    "for i in range(1):\n",
    "  url = \"http://ws.audioscrobbler.com/2.0/?method=artist.getsimilar&artist=\"+artist_frame['artist_name'].iloc[i]+\"&api_key=b44f3df9ff5702f634cad9ad4f401cfb&format=json\"\n",
    "  response = urlopen(url)\n",
    "  data = response.read()\n",
    "  values = json.loads(data)\n",
    "  artist_frame['artist_list'][i]=values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "e_Lharm8jJKt"
   },
   "outputs": [],
   "source": [
    "#Iterates over artist_list and creates a list field that holds 100 similar artists and drops artist_list column when finished\n",
    "artist_frame['similar_artists']=''\n",
    "for n in range(1):\n",
    "  alist=[]\n",
    "  for i,cycle in enumerate(artist_frame['artist_list'][n]['similarartists']['artist']):\n",
    "      alist.append(artist_frame['artist_list'][n]['similarartists']['artist'][i]['name'].encode())\n",
    "      artist_frame['similar_artists'][n]=alist\n",
    "artist_frame.drop(columns=['artist_list'], inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "colab_type": "code",
    "id": "qnMEK9emrmau",
    "outputId": "db3cba2b-dc50-4bcb-c6bf-e6828805c13c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The 100 most similar artists to Ariana Grande, are: \n",
      "\n",
      "Ariana Grande & Nathan Sykes\n",
      "Jessie J, Ariana Grande & Nicki Minaj\n",
      "Selena Gomez\n",
      "Fifth Harmony\n",
      "Little Mix\n",
      "Sabrina Carpenter\n",
      "Dua Lipa\n",
      "Taylor Swift\n",
      "Rihanna\n",
      "Demi Lovato\n",
      "Zara Larsson\n",
      "Madison Beer\n",
      "Melanie Martinez\n",
      "Nicki Minaj\n",
      "Beyoncé\n",
      "Katy Perry\n",
      "Halsey\n",
      "Troye Sivan\n",
      "Iggy Azalea\n",
      "Justin Bieber\n",
      "Miley Cyrus\n",
      "Billie Eilish\n",
      "Victorious Cast\n",
      "Zayn\n",
      "Anitta\n",
      "Kehlani\n",
      "Tinashe\n",
      "Doja Cat\n",
      "Bebe Rexha\n",
      "Shawn Mendes\n",
      "Mariah Carey\n",
      "Selena Gomez & the Scene\n",
      "Tove Lo\n",
      "Alessia Cara\n",
      "Rita Ora\n",
      "Lizzo\n",
      "Lana Del Rey\n",
      "JoJo\n",
      "SZA\n",
      "Who Is Fancy\n",
      "Destiny's Child\n",
      "Meghan Trainor\n",
      "Britney Spears\n",
      "Lorde\n",
      "Ke$ha\n",
      "Lady Gaga\n",
      "Zendaya\n",
      "Bridgit Mendler\n",
      "Becky G\n",
      "Beyoncé & Shakira\n",
      "Carly Rae Jepsen\n",
      "Tori Kelly\n",
      "Mabel\n",
      "Nathan Sykes\n",
      "Charlie Puth\n",
      "The Pussycat Dolls\n",
      "Sam Smith\n",
      "Fergie\n",
      "Pia Mia\n",
      "Charli XCX\n",
      "Christina Aguilera\n",
      "Jessie J\n",
      "Bea Miller\n",
      "Miranda Cosgrove\n",
      "Hailee Steinfeld\n",
      "Manu Gavassi\n",
      "Adele\n",
      "Lea Michele\n",
      "Ashley Tisdale\n",
      "Hannah Montana\n",
      "Jennifer Lopez\n",
      "Avril Lavigne\n",
      "China Anne McClain\n",
      "Ciara\n",
      "One Direction\n",
      "Nick Jonas\n",
      "Austin Mahone\n",
      "Jordin Sparks\n",
      "Bruno Mars\n",
      "Marina\n",
      "Whitney Houston\n",
      "Danielle Bradbery\n",
      "Anne-Marie\n",
      "Gwen Stefani\n",
      "Vanessa Hudgens\n",
      "Kelly Clarkson\n",
      "Hilary Duff\n",
      "Lexa\n",
      "Cher Lloyd\n",
      "Madonna\n",
      "Victoria Justice\n",
      "Solange\n",
      "Justin Timberlake\n",
      "Anahí\n",
      "Nicole Scherzinger\n",
      "Jhené Aiko\n",
      "Kali Uchis\n",
      "Jason Derülo\n",
      "Ellie Goulding\n",
      "Labrinth\n"
     ]
    }
   ],
   "source": [
    "#Outputs a formatted version of similar_artists\n",
    "print(\"\"\"The 100 most similar artists to {}, are: \n",
    "\"\"\".format(Artist))\n",
    "for item in list(artist_frame.similar_artists)[0]:\n",
    "  print(item.decode())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "include_colab_link": true,
   "name": "Artist_Similarity_Matrix.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
