{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Artist_Similarity_Comparison.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/ds-artist-comparison-analysis/blob/master/Artist_Similarity_Comparison.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 Artist Similarity Comparison\n",
        "#@markdown Summarizes common similar artists.\n",
        "\n",
        "Artist_1 = 'Camila Cabello'  #@param {type: \"string\"}\n",
        "Artist_2 = 'Shawn Mendes'  #@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_1]+[Artist_2]\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(2):\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 responses\n",
        "artist_frame['artist_list']=''\n",
        "for i in range(2):\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 for Artist_1/Artist2 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(2):\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": "760bf4ab-5b83-4f8f-b602-d0685818d4c6",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 833
        }
      },
      "source": [
        "#Creates variables containing the number of common similar artists and the list of those artists\n",
        "common_number=len(list(set(artist_frame.similar_artists[0]).intersection(artist_frame.similar_artists[1])))\n",
        "common_artists=(set(artist_frame.similar_artists[0]).intersection(artist_frame.similar_artists[1]))\n",
        "\n",
        "#Outputs a formatted version of similar_artists and metrics\n",
        "print(\"\"\"{} and {} have {} similar artists of a possible 100 in common. \n",
        "\n",
        "The common artists are:\n",
        "\"\"\".format(Artist_1, Artist_2, common_number, common_artists))\n",
        "for item in common_artists:\n",
        "  print(item.decode())"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Camila Cabello and Shawn Mendes have 44 similar artists of a possible 100 in common. \n",
            "\n",
            "The common artists are:\n",
            "\n",
            "Nick Jonas\n",
            "Pia Mia\n",
            "olivia o'brien\n",
            "Justin Bieber\n",
            "Halsey\n",
            "Zayn\n",
            "Hailee Steinfeld\n",
            "Hayley Kiyoko\n",
            "Louis Tomlinson\n",
            "Charlie Puth\n",
            "Victorious Cast\n",
            "Lexa\n",
            "Selena Gomez & the Scene\n",
            "Jessie J\n",
            "Sofia Carson\n",
            "Zendaya\n",
            "Carly Rae Jepsen\n",
            "Miley Cyrus\n",
            "Lady Gaga\n",
            "Madison Beer\n",
            "Rita Ora\n",
            "Sabrina Carpenter\n",
            "Bebe Rexha\n",
            "Katy Perry\n",
            "Cher Lloyd\n",
            "Meghan Trainor\n",
            "Dua Lipa\n",
            "Bea Miller\n",
            "Alessia Cara\n",
            "Becky G\n",
            "Taylor Swift\n",
            "Ariana Grande\n",
            "Fifth Harmony\n",
            "Tori Kelly\n",
            "Manu Gavassi\n",
            "Troye Sivan\n",
            "Selena Gomez\n",
            "Maggie Lindemann\n",
            "Niall Horan\n",
            "Liam Payne\n",
            "Ashley Tisdale\n",
            "Sam Smith\n",
            "Little Mix\n",
            "Fletcher\n"
          ],
          "name": "stdout"
        }
      ]
    }
  ]
}
