{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Artist_Similarity_Matrix.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/filtr/marc-jupyter-notebooks/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",
      "metadata": {
        "id": "pNm1tc6WbvsP",
        "colab_type": "code",
        "cellView": "form",
        "colab": {}
      },
      "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"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9jdmAcPXvE1Z",
        "colab_type": "code",
        "colab": {}
      },
      "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')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-wbReQQFjDHh",
        "colab_type": "code",
        "colab": {}
      },
      "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"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "e_Lharm8jJKt",
        "colab_type": "code",
        "colab": {}
      },
      "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)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qnMEK9emrmau",
        "colab_type": "code",
        "outputId": "db3cba2b-dc50-4bcb-c6bf-e6828805c13c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "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())"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "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",
            "Fifth Harmony\n",
            "Little Mix\n",
            "Selena Gomez\n",
            "Sabrina Carpenter\n",
            "Demi Lovato\n",
            "Dua Lipa\n",
            "Nicki Minaj\n",
            "Taylor Swift\n",
            "Madison Beer\n",
            "Zara Larsson\n",
            "Rihanna\n",
            "Melanie Martinez\n",
            "Halsey\n",
            "Troye Sivan\n",
            "Beyoncé\n",
            "Katy Perry\n",
            "Justin Bieber\n",
            "Iggy Azalea\n",
            "Miley Cyrus\n",
            "Billie Eilish\n",
            "Anitta\n",
            "Kehlani\n",
            "Shawn Mendes\n",
            "Zayn\n",
            "Bebe Rexha\n",
            "Victorious Cast\n",
            "Mariah Carey\n",
            "Alessia Cara\n",
            "Rita Ora\n",
            "Tinashe\n",
            "Selena Gomez & the Scene\n",
            "JoJo\n",
            "Who Is Fancy\n",
            "Meghan Trainor\n",
            "Britney Spears\n",
            "Lana Del Rey\n",
            "SZA\n",
            "Lizzo\n",
            "Tove Lo\n",
            "Lady Gaga\n",
            "Doja Cat\n",
            "Carly Rae Jepsen\n",
            "Lorde\n",
            "Zendaya\n",
            "Bridgit Mendler\n",
            "Destiny's Child\n",
            "Fergie\n",
            "Ke$ha\n",
            "Becky G\n",
            "Charlie Puth\n",
            "Nathan Sykes\n",
            "Tori Kelly\n",
            "Christina Aguilera\n",
            "Manu Gavassi\n",
            "Mabel\n",
            "Pia Mia\n",
            "Beyoncé & Shakira\n",
            "Miranda Cosgrove\n",
            "The Pussycat Dolls\n",
            "Bea Miller\n",
            "Hailee Steinfeld\n",
            "Avril Lavigne\n",
            "Ashley Tisdale\n",
            "Jessie J\n",
            "Ciara\n",
            "Hannah Montana\n",
            "Adele\n",
            "One Direction\n",
            "Lea Michele\n",
            "Charli XCX\n",
            "China Anne McClain\n",
            "Kelly Clarkson\n",
            "Jordin Sparks\n",
            "Austin Mahone\n",
            "Jennifer Lopez\n",
            "Gwen Stefani\n",
            "Nick Jonas\n",
            "Bruno Mars\n",
            "Anne-Marie\n",
            "Hilary Duff\n",
            "Marina\n",
            "Vanessa Hudgens\n",
            "Whitney Houston\n",
            "Lexa\n",
            "Cher Lloyd\n",
            "Jhené Aiko\n",
            "Justin Timberlake\n",
            "Nicole Scherzinger\n",
            "Madonna\n",
            "Leona Lewis\n",
            "Anahí\n",
            "Red Velvet\n",
            "Solange\n",
            "Jason Derülo\n",
            "Victoria Justice\n",
            "Kelly Rowland\n",
            "P!nk\n",
            "Shontelle\n"
          ],
          "name": "stdout"
        }
      ]
    }
  ]
}