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
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)
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)
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.
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')
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
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.
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