如何构建Spotify播放列表分析仪
#python #datascience #documentation #streamli

Spotify Playlist Analyzer是一个简化的应用程序,允许用户使用数据可视化工具分析Spotify播放列表。该应用使用Spotipy库从Spotify API和Plotly库访问数据以创建交互式图表。

要使用该应用程序,用户输入了他们希望在侧边栏上的文本输入框中分析的Spotify播放列表的名称。然后,该应用程序根据输入名称搜索播放列表ID,然后从Spotify API中检索播放列表数据。
播放列表数据显示在曲目列表中每个曲目中的曲目名称,艺术家名称,发行日期和持续时间的表格中显示。

该应用程序还为播放列表数据提供了三种类型的分析:

跟踪普及分布 - 一种直方图显示了播放列表中轨道受欢迎程度的分布。

双变量分析 - 一个散点图,允许用户选择两个变量(以毫秒为单位的流行和持续时间)相互绘图。

多变量分析 - 允许用户选择一个变量以通过(艺术家名称,专辑名称或发行日期)为数据点上色的一个散点图和一个变量,一个变量可通过(PURINTITY PURINTITY)大小数据点或以毫秒为单位的持续时间)。

除了数据可视化外,该应用程序还提供了播放列表摘要,该列表摘要显示了播放列表中最受欢迎,最受欢迎的曲目,并显示了播放列表中排名前10位最受欢迎的艺术家的条形图。


先决条件
要遵循本教程,您将需要:
Spotify帐户
Spotify开发人员帐户
python 3.x安装在您的机器上
熟悉Python编程
熟悉熊猫,简化和绘图库

步骤1:设置Spotify开发人员帐户
要使用Spotify API,您需要拥有一个Spotify开发人员帐户。如果您还没有一个,请转到https://developer.spotify.com/dashboard/并创建一个帐户。创建帐户后,创建一个新的Spotify应用程序以获取您的client_id and Client_secret。

步骤2:安装所需的库
我们将在此项目中使用以下库:
简化
斑点
熊猫
Plotly

您可以通过在终端中运行以下命令来安装这些库:


pip install streamlit spotipy pandas plotly

步骤3:使用Spotify API进行身份验证
要使用Spotify API进行身份验证,我们将使用Spotipy库。我们需要创建一个Spotify类的实例,并传递我们的client_id和client_secretâ。我们还需要创建一个SpotifyClientCredentials类的实例,并通过我们的client_id和client_secret。

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

client_id = 'YOUR_CLIENT_ID'
client_secret = 'YOUR_CLIENT_SECRET'

client_credentials_manager = SpotifyClientCredentials(client_id=client_id, client_secret=client_secret)
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

步骤4:创建一个简化的应用
我们将使用简化来创建一个简单的UI,该UI允许用户输入Spotify播放列表名称并显示播放列表的各种分析。要创建一个简化的应用程序,我们首先需要导入简易库并调用标题()函数以设置应用程序的标题。

import streamlit as st

st.title("Spotify Playlist Analyzer")

步骤5:添加用简化的用户输入
我们将使用Spartlit的侧边栏添加文本输入字段供用户输入他们要分析的Spotify播放列表的名称。

playlist_name = st.sidebar.text_input("Enter the name of the Spotify playlist:")

步骤6:从Spotify API中检索数据
如果用户输入播放列表名称,我们将使用Spotify类的搜索()函数搜索播放列表ID。然后,我们将在播放列表中的每个曲目中检索数据,例如曲目名称,艺术家名称,受欢迎程度,持续时间,专辑名称和发行日期。

if playlist_name:
    playlists = sp.search(playlist_name, type="playlist")["playlists"]["items"]
    if playlists:
        playlist_id = playlists[0]["id"]
    else:
        st.write("No playlists found with that name.")
        playlist_id = None
else:
    playlist_id = None

步骤7:从Spotify API中检索数据
如果我们具有有效的播放列表ID,我们可以使用Spotipy库从Spotify API检索数据。

if playlist_id:
    playlist = sp.playlist(playlist_id)
    tracks = playlist["tracks"]["items"]
    track_names = [track["track"]["name"] for track in tracks]
    track_artists = [", ".join([artist["name"] for artist in track["track"]["artists"]]) for track in tracks]
    track_popularity = [track["track"]["popularity"] for track in tracks]
    track_duration = [track["track"]["duration_ms"] for track in tracks]
    track_album = [track["track"]["album"]["name"] for track in tracks]
    track_release_date = [track["track"]["album"]["release_date"] for track in tracks]

步骤8:在A表中显示播放列表数据
我们可以使用简化在表中显示播放列表数据。

# display the playlist data in a table
    st.write(f"## {playlist['name']}")
    st.write(f"**Description:** {playlist['description']}")
    st.write(f"**Number of tracks:** {len(tracks)}")
    st.write("")
    st.write("### Tracklist")
    st.write("| Name | Artist | Album | Release Date | Popularity | Duration (ms) |")
    st.write("| ---- | ------ | ----- | ------------ | ---------- | -------------- |")
    for i in range(len(tracks)):
        st.write(f"| {track_names[i]} | {track_artists[i]} | {track_album[i]} | {t
rack_release_date[i]} | {track_popularity[i]} | {track_duration[i]} |")

步骤9:从播放列表数据创建数据框
熊猫可以将播放列表数据用于数据框架,该数据将用于进一步分析

# create a dataframe from the playlist data
    data = {"Name": track_names, "Artist": track_artists, "Album": track_album, "Release Date": track_release_date, "Popularity": track_popularity, "Duration (ms)": track_duration}
    df = pd.DataFrame(data)

步骤10:显示轨道普及的直方图

# display a histogram of track popularity
    fig_popularity = px.histogram(df, x="Popularity", nbins=20, title="Track Popularity Distribution")
    st.plotly_chart(fig_popularity)

11:双变量分析
接下来,提示用户选择两个变量进行双变量分析。然后,代码创建了所选变量的散点图。

# add a dropdown menu for bivariate analysis
    st.write("#### Bivariate Analysis")
    x_axis = st.selectbox("Select a variable for the x-axis:", ["Popularity", "Duration (ms)"])
    y_axis = st.selectbox("Select a variable for the y-axis:", ["Popularity", "Duration (ms)"])
    fig_bivariate = px.scatter(df, x=x_axis, y=y_axis, title=f"{x_axis} vs. {y_axis}")
    st.plotly_chart(fig_bivariate)

12:多变量分析
提示用户选择两个变量进行多元分析。然后,代码创建了所选变量的散点图,由一个变量颜色并由另一个变量大小。

# add a dropdown menu for multivariate analysis
    st.write("#### Multivariate Analysis")
    color_by = st.selectbox("Select a variable to color by:", ["Artist", "Album", "Release Date"])
    size_by = st.selectbox("Select a variable to size by:", ["Popularity", "Duration (ms)"])
    fig_multivariate = px.scatter(df, x="Duration (ms)", y="Popularity", color=color_by, size=size_by, hover_name="Name", title="Duration vs. Popularity Colored by Artist")
    st.plotly_chart(fig_multivariate)

13:播放列表数据的摘要
下面的代码向用户显示播放列表数据的摘要。该摘要包括播放列表中最受欢迎和最受欢迎的曲目,以及播放列表中最受欢迎的十大艺术家和曲目的条形图

# add a summary of the playlist data
    st.write("")
    st.write("### Playlist Summary")
    st.write(f"**Most popular track:** {df.iloc[df['Popularity'].idxmax()]['Name']} by {df.iloc[df['Popularity'].idxmax()]['Artist']} ({df['Popularity'].max()} popularity)")
    st.write(f"**Least popular track:** {df.iloc[df['Popularity'].idxmin()]['Name']} by {df.iloc[df['Popularity'].idxmin()]['Artist']} ({df['Popularity'].min()} popularity)")
# display a bar chart of the top 10 most popular artists in the playlist
    st.write("#### Top 10 Artists")
    st.write("The bar chart below shows the top 10 most popular artists in the playlist.")
    top_artists = df.groupby("Artist").mean().sort_values("Popularity", ascending=False).head(10)
    fig_top_artists = px.bar(top_artists, x=top_artists.index, y="Popularity", title="Top 10 Artists")
    st.plotly_chart(fig_top_artists)    
# display a bar chart of the top 10 most popular songs in the playlist
    st.write("#### Top 10 Songs")
    st.write("The bar chart below shows the top 10 most popular songs in the playlist.")
    top_artistss = df.groupby("Name").mean().sort_values("Popularity", ascending=False).head(10)
    fig_top_artistss = px.bar(top_artistss, x=top_artistss.index, y="Popularity", title="Top 10 Songs")
    st.plotly_chart(fig_top_artistss)

14:运行应用程序
最后一步是运行简化应用程序。这使用户可以与应用程序进行交互并分析其选择的Spotify播放列表。


总的来说,Spotify播放列表分析仪是一个有用的工具,对于想要探索其最喜欢的Spotify播放列表背后的数据并获得对音乐偏好的见解的人。
它从Spotify API中检索数据,将其显示在表中,并允许用户使用数据可视化技术进行分析。
该代码易于使用,并为Spotify播放列表的数据提供了宝贵的见解。