본문 바로가기
Daily Review

Python을 사용한 Spotify 데이터 분석 및 시각화 (2)

by data-analyst-luke 2022. 9. 3.
반응형

소개

Spotify에는 귀하를어디에나 있는노래와 그 기능의 데이터베이스. 예를 들어, 좋아하는 노래에서 시각적 통찰력을 얻거나 재생을 웹 응용 프로그램에 통합할 수 있습니다. 또한 강력한 노래 검색 엔진을 사용할 수 있을 뿐만 아니라 좋아하는 노래를 더 많이 들을 수 있도록 도와주는 추천 시스템도 있습니다.

 

앞선 프로젝트 1에 이어서 진행합니다.

 

트랙의 기능 시각화

다음은 트랙 기능의 상관 행렬입니다.

import seaborn as sn
sn.set(rc = {'figure.figsize':(12,10)})
sn.heatmap(tf_df.corr(), annot=True)
plt.show()

 

 

특정 변수 쌍에 대해 이변량 KDE를 표시할 수도 있습니다.

sn.set(rc = {'figure.figsize':(20,20)})
sn.jointplot(data=tf_df, x="loudness", y="energy", kind="kde")
 

 

가장 인기 있는 트랙은 데이터세트의 모든 트랙과 어떻게 다릅니까? 

선택된 특징의 평균값이 주어졌을 때 해당 세트의 특징 시각화 그래프를 그려서 알아봅시다.

feat_cols = ['danceability', 'energy', 'speechiness', 'acousticness', 'instrumentalness', 'liveness', 'valence']
top_100_feat = pd.DataFrame(columns=feat_cols)
for i, track in by_track_pop[:100].iterrows():
  features = tf_df[tf_df['id'] == track['track_id']]
  top_100_feat = top_100_feat.append(features, ignore_index=True)
top_100_feat = top_100_feat[feat_cols]

from sklearn import preprocessing
mean_vals = pd.DataFrame(columns=feat_cols)
mean_vals = mean_vals.append(top_100_feat.mean(), ignore_index=True)
mean_vals = mean_vals.append(tf_df[feat_cols].mean(), ignore_index=True)
print(mean_vals)

import plotly.graph_objects as go
import plotly.offline as pyo
fig = go.Figure(
    data=[
        go.Scatterpolar(r=mean_vals.iloc[0], theta=feat_cols, fill='toself', name='Top 100'),
        go.Scatterpolar(r=mean_vals.iloc[1], theta=feat_cols, fill='toself', name='All'),
    ],
    layout=go.Layout(
        title=go.layout.Title(text='Feature comparison'),
        polar={'radialaxis': {'visible': True}},
        showlegend=True
    )
)

#pyo.plot(fig)
fig.show()
 

 

가장 대중적인 곡들이 조금 더 춤을 출 수 있고 더 밸런싱이 있는 것 같다. 그들은 또한 도구성이 없고 활력이 거의 없습니다.

 

추천 받기

분석의 마지막 단계는 아티스트 ID, 장르 및 트랙 ID를 기준으로 트랙 추천을 받는 것입니다. 

출력은 무작위이므로 Spotify는 콘텐츠 제안이 부족하지 않습니다.

rec = sp.recommendations(seed_artists=["3PhoLpVuITZKcymswpck5b"], seed_genres=["pop"], seed_tracks=["1r9xUipOqoNwggBpENDsvJ"], limit=100)
for track in rec['tracks']:
  print(track['artists'][0]['name'], track['name'])

 

반응형

댓글