[PYTHON] Utilisez l'API Spotify pour obtenir toutes les chansons des informations sur les chansons d'Arashi et vérifier l'index

2019/11/21 Partiellement modifié comme vous l'avez souligné.

Arashi-san a commencé la distribution par abonnement de toutes les chansons uniques à l'occasion du 20e anniversaire de ses débuts, nous utiliserons donc l'API Spotify pour acquérir les informations sur les chansons d'Arashi-san.

En se référant à cet article [J'ai essayé d'obtenir des informations musicales et des informations sur l'artiste avec l'API Spotify](https://qiita.com/nochifuchi/items/29ac2664fc174a56c4b4#api%E3%82%AD%E3%83%BC%E3%81%AE% E5% 8F% 96% E5% BE% 97) J'ai déjà écrit sur la façon d'obtenir l'API Spotify, je vais donc l'omettre cette fois. Obtenez une liste de chansons en Python en spécifiant un artiste avec l'API Spotify

Quelles informations peuvent être obtenues avec l'API Spotify

Si vous obtenez des informations musicales à l'aide de l'API Spotify, vous pouvez voir que divers indicateurs sont inclus. Get Audio Features for Several Tracks

Les détails sont décrits et vérifiés dans cet article, j'y ai donc fait référence. [L'histoire selon laquelle les informations intégrées dans les chansons de Spotify ne sont pas bonnes] (https://note.mu/hkrrr_jp/n/n9925dce37cba)

Authentification

Utilisez l'ID client, le client secret et l'ID d'artiste acquis pour obtenir des informations.

Tout d'abord, installez la bibliothèque d'API Spotify Spotipy.

pip install spotipy

Authentifier. Encore une fois, nous utiliserons Spotipy, la bibliothèque Python de l'API Spotify. artist_id est réalisé avec l'identifiant de M. Arashi cette fois.

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import sys
import pprint
import pandas as pd

client_id = 'ID client obtenu'
client_secret = 'Obtention du secret client'
artist_id = 'Identifiant d'artiste que vous souhaitez obtenir'

#Authentifier
client_credentials_manager = spotipy.oauth2.SpotifyClientCredentials(client_id, client_secret)
spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

Obtenir des informations sur l'album et des informations sur la piste

Après avoir obtenu l'identifiant de l'album, obtenez l'identifiant de la piste pour chaque album et obtenez les informations sur la chanson. Je viens de le stocker dans le Dataframe. Dans le cas de M. Arashi, l'objectif de distribution est une seule chanson, mais comme il y a deux chansons dans un album parce que certaines d'entre elles sont des deux côtés A, ce processus est exécuté.

#Obtenez des informations sur l'album.
results = spotify.artist_albums(artist, album_type='single', country='JP', limit=50, offset=0)
#Obtenez des informations sur l'album. Obtenez plus avec l'option de décalage.
results2 = spotify.artist_albums(artist, album_type='single', country='JP', limit=50, offset=50)

artist_albums = []
for song in results['items'][:len(results['items'])]:
    data = [
        song['name'], 
        song['id']]
    artist_albums.append(data)

for song in results2['items'][:len(results2['items'])]:
    data = [
        song['name'], 
        song['id']]
    artist_albums.append(data)


#Obtenir des informations sur la piste de l'album
song_info_track = []
for artist_album in artist_albums:
    album_id = artist_album[1]
    song_info = spotify.album_tracks(album_id, limit=50, offset=0)

    #Puisqu'il y a les deux côtés A, retirez la piste
    for song_info_detail in song_info['items'][:len(song_info)]:
        song_track_id = song_info_detail['id']
        song_title = song_info_detail['name']
        #Extraire les informations de la chanson
        result = spotify.audio_features(song_track_id)
        
        #Il y avait une chanson que je n'ai pas pu obtenir pour une raison quelconque (je ne peux pas rechercher par l'identifiant que j'ai obtenu), alors je branche
        if result[0] is not None:
            #Créer un dictionnaire avec un titre
            result[0]['title'] = song_title
            pd.DataFrame(result)
            song_info_track.append(result[0])
        
df = pd.io.json.json_normalize(song_info_track)
df = df.set_index('title')

Il y a plus de 50 chansons, donc je vais les omettre. J'écrirai un jour les détails sur un autre blog.

Les parties qui ont lutté sont les suivantes. ** ・ Impossible d'obtenir toutes les chansons ** En raison des spécifications de l'API Spotify, il semble que vous ne puissiez obtenir que les 50 derniers albums au maximum. Cette fois, nous avons abandonné les premières chansons et acquis les dernières chansons de Turning Up à PIKA ☆ NCHI (à partir du 19 novembre 2019). 2019/11/21 J'ai acquis de force toutes les chansons en utilisant offset.

** ・ Certaines chansons peuvent ne pas être disponibles pour une raison quelconque ** Lors de l'acquisition de l'ID de piste à partir de l'album et de l'exécution des informations sur la chanson, pour une raison quelconque, les informations sur la chanson n'ont pas pu être acquises avec l'ID de piste acquis. Cela a bien fonctionné lorsque j'ai changé la date, mais j'avais peur alors je l'ai stockée dans le Dataframe uniquement lorsque je pouvais l'obtenir.

Vérifier

Supprimez les informations inutiles pour la vérification.

#Supprimez les colonnes inutiles pour une meilleure visibilité
#Cette fois, supprimez les informations d'identification et ainsi de suite. Puisqu'il ne s'agit pas d'un instrument, supprimez également l'instrumentation.
df = df.drop(['type', 'id', 'uri', 'track_href','analysis_url', 'time_signature', 'mode','instrumentalness'], axis=1)

En plus d'éliminer le besoin d'identifiants et d'URI, je ne suis pas familier avec les rythmes et les sons, alors je les ai supprimés. Puisqu'il n'y a pas de chanson instrumentale, l'instrumentalité est également supprimée.

Parmi les résultats acquis, nous considérerons cette fois un index appelé dance a billty. La vérification de chaque indice est omise dans Qiita. Je vais le faire avec otaku. La citation provient du site référencé.

** ・ danceabillty **

Facilité de danse. Plus il est proche de 1, plus il est dansant. Cela semble être décidé par le tempo, le rythme et la force du battement.

Obtient le morceau supérieur (valeur proche de 1) de chaque morceau. Par exemple, triez par danse un billty.

#Trier
df.sort_values('danceability', inplace=True,ascending=False)
#Top 5 des chansons
df.head()

Les 5 meilleures chansons résultant de Dance a Billty sont les suivantes.

Titre danseur
Turning Up 0.769
Face Down 0.733
Amour de la résurrection 0,719
Bien confus 0,713
A Day in Our Life 0.704

Je ne connais pas les trois meilleures chansons, mais je doute que "tout en étant confus" soit inclus ...

Examinons ensuite la relation avec un autre index dans le diagramme de dispersion. Il y a deux indicateurs à multiplier.

** ・ énergie **

La radicalité de la chanson. Je ne sais pas si «radical» est une chose de développement ou un élan. Il y a une explication que le Death Metal est haut et le prélude de Bach est bas.

** ・ valence **

Luminosité. Plus il est proche de 1, plus la chanson est positive.

Tout d'abord, dansabilité x énergie

df.plot.scatter('danceability','energy')

danceANDenergy.png

Vous pouvez voir qu'il y a beaucoup d'énergie principalement dans la ligne autour de 0,9. Y a-t-il beaucoup de chansons intenses au fond? Il n'y a certainement pas autant de ballades. La seule chanson avec une énergie de 0,6 ou moins est une ballade moyenne appelée "Galaxy in the Eyes". (Chanson fournie par M. Fumiya Fujii)

Ensuite, danser × valley

danceANDvalance.png

Est-ce relativement beau? C'est devenu une corrélation positive. Cela signifie-t-il que les chansons de danse sont brillantes? La chanson en bas à gauche est "Tomorrow's Memory". C'est aussi une ballade moyenne.

finalement

Il y en a que les indicateurs de Spotify sont différents en termes de ressenti, mais je pense qu'ils sont à peu près corrects. Je veux comparer les caractéristiques des chansons entre les groupes de Johnny, alors veuillez lever l'interdiction de la distribution de musique à d'autres groupes dès que possible! !! Surtout J-Storm ~! !!

À la fin! Le lien pour la nouvelle chanson d'Arashi Turning Up est ici! !! Même si j'écoute beaucoup, ça ne me coûte pas 1 yen, mais écoute! !! !!

Recommended Posts

Utilisez l'API Spotify pour obtenir toutes les chansons des informations sur les chansons d'Arashi et vérifier l'index
Obtenez des données à l'aide de l'API du ministère des Affaires intérieures et des Communications
Obtenez la météo en utilisant l'API et laissez Raspberry Pi parler!
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Obtenez et définissez la valeur du menu déroulant en utilisant Python et Selenium
Recevez des nouvelles de chacune des trois principales entreprises de téléphonie mobile en utilisant Django et l'API News
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Obtenez et estimez la forme de la tête en utilisant Dlib et OpenCV avec python
Obtenez les débats parlementaires via l'API
Créer une application à l'aide de l'API Spotify
[Python] Obtenez tous les commentaires à l'aide de Youtube Data Api
Obtenons les informations Wiki en utilisant l'API MediaWiki
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
Obtenez une liste des comptes GA, des propriétés et des vues sous forme de données verticales à l'aide de l'API
Enregistrez le texte de toutes les notes Evernote dans SQLite à l'aide de Beautiful Soup et SQL Alchemy
Obtenez le titre de Yahoo News et analysez les sentiments
[Rails] Comment obtenir des informations de localisation à l'aide de l'API de géolocalisation
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Obtenez des commentaires et des abonnés avec l'API de données YouTube
J'ai essayé d'utiliser l'API de Sakenowa Data Project
[Django 2.2] Trier et obtenir la valeur de la destination de la relation
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Obtenez le prix d'achat et de vente de la monnaie virtuelle avec l'API de l'échange Zaif et créez un graphique