2019/11/21 Teilweise geändert, wie Sie betont haben.
Arashi-san begann anlässlich des 20. Jahrestages seines Debüts mit der Abonnementverteilung aller einzelnen Songs. Daher werden wir die Spotify-API verwenden, um die Songinformationen von Arashi-san zu erhalten.
Unter Bezugnahme auf diesen Artikel [Ich habe versucht, Musik- und Künstlerinformationen mit der Spotify-API abzurufen](https://qiita.com/nochifuchi/items/29ac2664fc174a56c4b4#api%E3%82%AD%E3%83%BC%E3%81%AE% E5% 8F% 96% E5% BE% 97) Ich habe bereits darüber geschrieben, wie man die Spotify-API erhält, daher werde ich sie diesmal weglassen. Eine Liste der Songs in Python erhalten Sie, indem Sie einen Interpreten mit Spotify-API angeben
Wenn Sie Musikinformationen über die Spotify-API erhalten, können Sie sehen, dass verschiedene Indikatoren enthalten sind. Get Audio Features for Several Tracks
Details werden in diesem Artikel beschrieben und verifiziert, daher habe ich darauf verwiesen. [Die Geschichte, dass die in Spotify's Songs eingebetteten Informationen nicht humorvoll sind] (https://note.mu/hkrrr_jp/n/n9925dce37cba)
Verwenden Sie die erworbene Kunden-ID, den geheimen Kunden und die Künstler-ID, um Informationen zu erhalten.
Installieren Sie zunächst die Spotify-API-Bibliothek spotipy.
pip install spotipy
Authentifizieren. Wir werden wieder Spotipy verwenden, die Spotify API Python-Bibliothek. artist_id wird diesmal mit Mr. Arashis ID ausgeführt.
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import sys
import pprint
import pandas as pd
client_id = 'Erhaltene Client-ID'
client_secret = 'Kundengeheimnis erhalten'
artist_id = 'Künstler-ID, die Sie erhalten möchten'
#Authentifizieren
client_credentials_manager = spotipy.oauth2.SpotifyClientCredentials(client_id, client_secret)
spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
Nachdem Sie die Album-ID erhalten haben, rufen Sie die Titel-ID für jedes Album ab und erhalten Sie die Song-Informationen. Es wird ernsthaft im Datenrahmen gespeichert. Im Fall von Mr. Arashi ist das Vertriebsziel ein einzelnes Lied, aber da es zwei Lieder in einem Album gibt, weil einige von ihnen auf beiden Seiten A sind, wird dieser Prozess ausgeführt.
#Albuminformationen abrufen.
results = spotify.artist_albums(artist, album_type='single', country='JP', limit=50, offset=0)
#Albuminformationen abrufen. Holen Sie mehr mit der Offset-Option.
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)
#Titelinformationen aus dem Album abrufen
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)
#Da es beide A-Seiten gibt, ziehen Sie die Schiene heraus
for song_info_detail in song_info['items'][:len(song_info)]:
song_track_id = song_info_detail['id']
song_title = song_info_detail['name']
#Songinformationen extrahieren
result = spotify.audio_features(song_track_id)
#Es gab ein Lied, das ich aus irgendeinem Grund nicht bekommen konnte (ich kann nicht nach der ID suchen, die ich bekommen habe), also verzweige ich
if result[0] is not None:
#Erstellen Sie ein Wörterbuch mit einem Titel
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')
Es gibt mehr als 50 Songs, also werde ich sie weglassen. Ich werde die Details eines Tages in einem anderen Blog schreiben.
Die Teile, die kämpften, sind wie folgt. ** ・ Kann nicht alle Songs bekommen ** Aufgrund der Spezifikationen der Spotify-API können Sie anscheinend nur die neuesten 50 Alben erhalten. Dieses Mal haben wir die frühen Songs aufgegeben und die neuesten Songs von Turning Up bis PIKA ☆ NCHI (Stand 19. November 2019) erworben. 21.11.2019 Ich habe alle Songs mit Offset zwangsweise erworben.
** ・ Einige Songs sind möglicherweise aus irgendeinem Grund nicht verfügbar ** Beim Abrufen der Titel-ID aus dem Album und Ausführen der Titelinformationen konnten die Titelinformationen aus irgendeinem Grund nicht mit der erfassten Titel-ID erfasst werden. Es hat gut funktioniert, als ich das Datum geändert habe, aber ich hatte Angst, also habe ich es nur dann im Datenrahmen gespeichert, wenn ich es bekommen konnte.
Löschen Sie unnötige Informationen zur Überprüfung.
#Entfernen Sie unnötige Spalten für eine bessere Sichtbarkeit
#Löschen Sie diesmal die ID-Informationen und so weiter. Da es sich nicht um ein Instrument handelt, löschen Sie auch die Instrumentalität.
df = df.drop(['type', 'id', 'uri', 'track_href','analysis_url', 'time_signature', 'mode','instrumentalness'], axis=1)
ID und URI werden nicht mehr benötigt und ich bin mit Beats und Tönen nicht vertraut, daher habe ich sie gelöscht. Da es kein Instrumentallied gibt, wird auch die Instrumentalität gelöscht.
Von den erzielten Ergebnissen betrachten wir diesmal einen Index namens Tanz als Billty. Die Überprüfung jedes Index wird in Qiita weggelassen. Ich werde es mit Otaku machen. Das Zitat stammt von Referenzierte Site.
** ・ tanzbar **
Leichtes Tanzen. Je näher es an 1 liegt, desto tanzbarer ist es. Es scheint durch das Tempo, den Rhythmus und die Schlagkraft bestimmt zu sein.
Ruft das Top-Lied (Wert nahe 1) jedes Liedes ab. Sortieren Sie beispielsweise nach Tanz eine Billty.
#Sortieren
df.sort_values('danceability', inplace=True,ascending=False)
#Top 5 Songs
df.head()
Die Top 5 Songs als Ergebnis von Dance a Billty sind wie folgt.
Titel | Tanzbarkeit |
---|---|
Turning Up | 0.769 |
Face Down | 0.733 |
Auferstehungsliebe | 0.719 |
Während verwirrt | 0.713 |
A Day in Our Life | 0.704 |
Ich kenne die drei besten Songs nicht, aber ich bezweifle, dass "während ich verwirrt bin" enthalten sein wird ...
Schauen wir uns als nächstes die Beziehung zu einem anderen Index im Streudiagramm an. Es gibt zwei Indikatoren, die multipliziert werden müssen.
** · Energie **
Die Radikalität des Liedes. Ich bin mir nicht sicher, ob "radikal" eine Entwicklungssache oder eine Dynamik ist. Es gibt eine Erklärung dafür, dass Death Metal hoch und Bachs Auftakt niedrig ist.
** ・ Wertigkeit **
Helligkeit. Je näher es an 1 liegt, desto positiver ist das Lied.
Zuallererst Tanzbarkeit x Energie
df.plot.scatter('danceability','energy')
Sie können sehen, dass sich hauptsächlich in der Linie um 0,9 viel Energie befindet. Gibt es im Grunde viele intensive Songs? Sicherlich gibt es nicht so viele Balladen. Das einzige Lied mit einer Energie von 0,6 oder weniger ist eine mittlere Ballade namens "Galaxy in the Eyes". (Lied von Herrn Fumiya Fujii)
Als nächstes Tanzbarkeit × Tal
Ist es relativ schön? Es wurde eine positive Korrelation. Bedeutet das, dass die Tanzlieder hell sind? Das Lied unten links ist "Tomorrow's Memory". Dies ist auch eine mittlere Ballade.
Es gibt einige, bei denen sich die Indikatoren von Spotify in Bezug auf das Gefühl unterscheiden, aber ich denke, dass sie ungefähr richtig sind. Ich möchte die Eigenschaften von Songs zwischen Johnnys Gruppen vergleichen, also heben Sie bitte das Verbot der Musikverteilung so schnell wie möglich auf andere Gruppen auf! !! Besonders J-Storm ~! !!
Schlussendlich! Der Link zu Arashis neuem Song Turning Up ist hier! !! Selbst wenn ich viel zuhöre, kostet es mich nicht 1 Yen, aber bitte hör zu! !! !!
Recommended Posts