[PYTHON] Verwenden Sie die Spotify-API, um alle Songs von Arashis Songinformationen abzurufen und den Index zu überprüfen

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

Welche Informationen können mit der Spotify-API abgerufen werden?

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)

Authentifizierung

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)

Holen Sie sich Albuminformationen und Titelinformationen

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.

Überprüfen

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

danceANDenergy.png

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

danceANDvalance.png

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.

Schließlich

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

Verwenden Sie die Spotify-API, um alle Songs von Arashis Songinformationen abzurufen und den Index zu überprüfen
Erhalten Sie Daten mithilfe der API des Ministeriums für innere Angelegenheiten und Kommunikation
Holen Sie sich das Wetter mit API und lassen Sie Raspberry Pi sprechen!
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Rufen Sie den Wert des Dropdown-Menüs mit Python und Selen ab und legen Sie ihn fest
Erhalten Sie Nachrichten von jedem der drei großen Mobilfunkunternehmen mithilfe von Django und der Nachrichten-API
Holen Sie sich Artikelbesuche und Likes mit Qiita API + Python
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Erhalten und schätzen Sie die Form des Kopfes mit Dlib und OpenCV mit Python
Erhalten Sie Parlamentsprotokolle über API
Erstellen Sie eine Anwendung mit der Spotify-API
[Python] Holen Sie sich alle Kommentare mit Youtube Data Api
Lassen Sie uns Wiki-Informationen mithilfe der MediaWiki-API abrufen
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Rufen Sie mithilfe der API eine Liste der GA-Konten, -Eigenschaften und -Ansichten als vertikale Daten ab
Speichern Sie den Text aller Evernote-Notizen mit Beautiful Soup und SQL Alchemy in SQLite
Holen Sie sich den Titel der Yahoo News und analysieren Sie die Stimmung
[Rails] So erhalten Sie Standortinformationen mithilfe der Geolocation-API
[Python] Ruft den Gesetzestext aus der e-GOV-Gesetz-API ab
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Erhalten Sie Kommentare und Abonnenten mit der YouTube-Daten-API
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
[Django 2.2] Sortieren und erhalten Sie den Wert des Beziehungsziels
[Python] Mit der API von Qiita erhalten Sie Benutzer- und Artikelinformationen
Holen Sie sich den Kauf- und Verkaufspreis der virtuellen Währung mit der API von Zaif Exchange und erstellen Sie ein Diagramm