专栏首页毛利学PythonKaggle | 全球听众最多的50首歌曲

Kaggle | 全球听众最多的50首歌曲

@Author:by Runsen

原文:https://maoli.blog.csdn.net/article/details/104478457

Spotify是全球听众最多的50首歌曲

数据集摘要:Spotify在2019年收听的前50首歌曲

链接:https://www.kaggle.com/leonardopena/top50spotify2019

Spotify: (Spotify:声田 是一个正版流媒体音乐服务平台,2008年10月在瑞典首都斯德哥尔摩正式上线。Spotify提供免费和付费两种服务,免费用户在使用Spotify的服务时将被插播一定的广告,付费用户则没有广告,且拥有更好的音质。

2017年12月8日,Spotify与腾讯公司及腾讯旗下的腾讯音乐娱乐集团联合宣布股权投资,加强这两家全球最受欢迎的数字音乐平台的关系。2018年4月3日,Spotify登录纽交所,成为首家“直接上市”的公司 [。2018年8月8日,华纳音乐集团宣布,集团已经出售了此前所持流媒体音乐服务提供商Spotify的全部股份。2018年12月,世界品牌实验室发布《2018世界品牌500强》榜单,Spotify排名第378。2019年10月,Interbrand发布的全球品牌百强榜排名92 。

名称

Graduate Admission

特征简介

**Track.name:**曲目的名称**艺术家姓名:**艺术家姓名曲目类型每分钟的节奏**能量:**一首歌的能量-值越高,能量越大。歌曲**舞蹈性:**舞蹈性越高,就越容易跟着这首歌跳舞。**响度:**dB值越高,歌曲越响。**活性:**活性值越高,歌曲越有可能是现场录制的。**价格:**价值越高,歌曲的积极情绪就越强。**长度:**歌曲的持续时间。**音质:**值越高,歌曲的音质越好。**言语:**价值越高,歌曲包含的口语词越多。**流行:**歌曲价值越高越受欢迎。

记录数

50

分析目标

分析Spotify在2019年收听的前50首歌曲

分析思路及方法

最有活力的歌是什么?哪首歌最具舞蹈性?哪首歌更响亮?哪首歌最活泼?哪首歌最长?哪首歌最流行?

一、简介

该数据集包括23486行和10个特征变量。每行对应一个客户评论,并包含以下变量:

  • Track.name:曲目的名称
  • 艺术家姓名:艺术家姓名
  • 曲目类型
  • 每分钟的节奏
  • 能量:一首歌的能量-值越高,能量越大。歌曲
  • 舞蹈性:舞蹈性越高,就越容易跟着这首歌跳舞。
  • 响度:dB值越高,歌曲越响。
  • 活性:活性值越高,歌曲越有可能是现场录制的。
  • 价格:价值越高,歌曲的积极情绪就越强。
  • 长度:歌曲的持续时间。
  • 音质:值越高,歌曲的音质越好。
  • 言语:价值越高,歌曲包含的口语词越多。
  • 流行:歌曲价值越高越受欢迎。

中文名称

英文名称

曲目的名称

Track.name

艺术家姓名

Artist.Name

曲目类型

Genre

每分钟的节奏

Beats.Per.Minute

能量

Energy

舞蹈性

Danceability

响度

Loudness..dB..

活性值

Liveness

价格

Valence.

长度

Length.

音质

Acousticness..

口语词

Speechiness.

流行

Popularity

二、数据读取

1、数据处理环境

pandaspandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

MatplotlibMatplotlib就是Python绘图库中的佼佼者,它包含了大量的工具,你可以使用这些工具创建各种图形(包括散点图、折线图、直方图、饼图、雷达图等),Python科学计算社区也经常使用它来完成数据可视化的工作。

SeabornSeaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。

2、数据读取方法

pandas库支持csv和excel的操作;使用的是pd.read_csv的函数

导入numpy,seaborn``matplotlibpandas读取Womens Clothing E-Commerce Reviews.csv

参数:index_col=0——第一列为index值

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
df= pd.read_csv('top50.csv', encoding='cp1252')
df.rename(columns={'Track.Name':'track_name','Artist.Name':'artist_name','Beats.Per.Minute':'beats_per_minute','Loudness..dB..':'Loudness(dB)','Valence.':'Valence','Length.':'Length', 'Acousticness..':'Acousticness','Speechiness.':'Speechiness'},inplace=True)
查看df.head
查看df.info

df.info可以看出并没有缺失数据,50个数据都具有完整性

查看df.describe().T

数据中的Length,Per.Minute,Valencestd标准差都比较大,说明数据分布不均匀

三、 数据分析

1、最有活力的歌是什么?

只需要简单通过np.max()方法来去除Energy最大的歌曲

df[df.Energy == np.max(df.Energy)]

我们可以从图片看出:最有活力的歌是Never Really Over,作者是凯蒂·佩里(Katy Perry),美国流行女歌手、

2、哪首歌最具舞蹈性?

df[df.Danceability == np.max(df.Danceability)]

我们可以从图片看出:最具舞蹈性是Talk,作者是Khalid

3、哪首歌更响亮?

df[df['Loudness(dB)'] == np.max(df['Loudness(dB)'])]

我们可以从图片看出:最具响亮,dB值最高的是Otro Trago - RemixOne Thing Right

4、哪首歌最活泼?

df[df['Liveness'] == np.max(df['Liveness'])]

我们可以从图片看出:最活泼是One Thing Right

5、哪首歌最长?

df[df['Length'] == np.max(df['Length'])]

我们可以从图片看出:最长是No Me Conoce - Remix

6、哪首歌最流行?

df[df['Popularity'] == np.max(df['Popularity'])]

我们可以从图片看出:最流行的是bad guy

四、图表绘制

1、艺术家姓名的词云图

from matplotlib import pyplot as plt
from wordcloud import WordCloud, STOPWORDS
string=str(df.artist_name)
wordcloud = WordCloud(stopwords=STOPWORDS,
                      background_color='white',
                      width=1000,
                      height=1000).generate(string)
plt.figure(figsize=(10,8))
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis("off")
plt.show()

2、曲目类型的词云图

from matplotlib import pyplot as plt
from wordcloud import WordCloud, STOPWORDS
string=str(df.Genre)
wordcloud = WordCloud(stopwords=STOPWORDS,
                      background_color='white',
                      width=1000,
                      height=1000).generate(string)
plt.figure(figsize=(10,8))
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis("off")
plt.show()

popdance流行歌曲占了很大的比重

3、最流行的曲目名称词云图

from matplotlib import pyplot as plt
from wordcloud import WordCloud, STOPWORDS
string=str(df.track_name)
wordcloud = WordCloud(stopwords=STOPWORDS,
                      background_color='white',
                      width=1000,
                      height=1000).generate(string)
plt.figure(figsize=(10,8))
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis("off")
plt.show()

4、绘制数据分布趋势折线图

import matplotlib
from matplotlib import pyplot as plt
matplotlib.style.use('ggplot')
df.plot(figsize=(20,10))

5、绘制数据分布密度分布图

df.plot(kind='density',figsize=(20,10))

6、绘制不同类型歌曲的总和柱状图

plt.figure(figsize=(20,10))
sns.countplot(df['Genre'])
plt.show()

7、绘制不同歌手的歌的数量总和柱状图

singers = df["artist_name"].value_counts()
plt.figure(figsize=(20,10))
singers.plot.bar()
plt.xlabel("Singers")
plt.ylabel("# of Songs")
plt.title("The # of songs each singer has")
plt.show()

8、绘制不同的歌手受欢迎柱状图

singer_popularity = (
    df.groupby("artist_name")["Popularity"].sum().sort_values(ascending=False)
)
plt.figure(figsize=(20,10))
singer_popularity.plot.bar()
plt.xlabel("Singers")
plt.ylabel("Total popularity")
plt.title("Total popularity each singer has")
plt.show()

9、绘制不同类型歌曲受欢迎程度的柱状图

genre_popularity = (
    df.groupby("Genre")["Popularity"].sum().sort_values(ascending=False)
)
plt.figure(figsize=(20,10))
genre_popularity.plot.bar()
plt.xlabel("Genres")
plt.ylabel("Total popularity")
plt.title("Total popularity each genre has")
plt.show()

10、绘制跳舞能力和受欢迎关系的散点图

plt.figure(figsize=(20,10))
plt.scatter("Danceability", "Popularity", data=df.sort_values(by=["Danceability"]))
plt.title("The relationship between danceability and popularity")
plt.xlabel("Danceability")
plt.ylabel("Popularity")
plt.show()

11、绘制响度和流行度关系分布散点图

plt.figure(figsize=(20,10))
plt.scatter(
    "Loudness(dB)", "Popularity", data=df.sort_values(by=["Loudness(dB)"])
)
plt.title("The relationship between dB and popularity")
plt.xlabel("Loudness(dB)")
plt.ylabel("Popularity")
plt.show()

12、绘制活泼和受欢迎关系分布散点图

plt.figure(figsize=(20,10))
plt.scatter("Liveness", "Popularity", data=df.sort_values(by=["Liveness"]))
plt.title("The relationship between liveness and popularity")
plt.xlabel("Liveness")
plt.ylabel("Popularity")
plt.show()

五、模型建立

该模型属于预测模型,**流行: **Popularity作为y的label

其他数据作为x变量,预测出歌曲是否流行,流行度如何

1、清理数据

删除无用Unnamed: 0数据

df.drop(columns=['Unnamed: 0'],inplace=True)

Genre进行One-HOT编码,因为Genre是字符串,无法进行处理

from sklearn.preprocessing import LabelEncoder
label = LabelEncoder()
df.Genre = label.fit_transform(df.Genre)

2、建立X,Y

X = df[['Genre', 'beats_per_minute', 'Energy', 'Danceability',
       'Loudness(dB)', 'Liveness', 'Valence', 'Length', 'Acousticness',
       'Speechiness']]

y = df.Popularity

3、划分数据集和缩放数据

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=42)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

4、线性模型

线性模型是一类统计模型的总称,制作方法是用一定的流程将各个环节连接起来

导入sklearn.linear_model中的LinearRegression

模型评估:在常用的回归评估指标包括:

  • r2_score
  • explained_variance_score

这里使用的是r2_score

R2 决定系数(拟合优度)

模型越好:r2

→1

模型越差:r2→0

from sklearn.linear_model import LinearRegression
# Creating the object
regressor = LinearRegression()
# Fit the model.
regressor.fit(X_train, y_train)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
# Predicting the test results.
y_pred = regressor.predict(X_test)
# Checking the predictions.
y_pred
from sklearn.metrics import r2_score
print("r_square score: ", r2_score(y_test,y_pred))

本文分享自微信公众号 - Python之王(gh_70a22bfa8e3a),作者:小sen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 异常值检测

    异常值(outlier)是指一组测定值中与平均值的偏差超过两倍标准差的测定值,与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值。

    润森
  • Kaggle | 女士电子商务服装数据分析

    原文:https://maoli.blog.csdn.net/article/details/104461970

    润森
  • EM 算法

    EM 算法,指的是最大期望算法(Expectation Maximization Algorithm,期望最大化算法),是一种迭代算法,在统计学中被用于寻找,依...

    润森
  • Python matplotlib数据可视化 绘制柱形图、堆叠图、折线图、饼图和环图

    Python中可以通过matplotlib模块的pyplot子库来完成绘图。Matplotlib可用于创建高质量的图表和图形,也可以用于绘制和可视化结果。mat...

    叶庭云
  • 看了这个总结,其实 Matplotlib 可视化,也没那么难!

    编辑 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066)

    杰哥的IT之旅
  • 看了这个总结,其实 Matplotlib 可视化,也没那么难!

    Python 中可以通过 matplotlib 模块的 pyplot 子库来完成绘图。Matplotlib 可用于创建高质量的图表和图形,也可以用于绘制和可视化...

    小小詹同学
  • 【数据分析与可视化】matplotlib简单绘图之subplot

    [<matplotlib.lines.Line2D at 0x116769150>]

    瑞新
  • 高可用负载均衡:开源PaaS Rainbond组件Rainbond-Entrance揭秘

    负载均衡(Load Balancing)是开源PaaS Rainbond的亮点功能,主要由“软件定义负载均衡”Rainbond-Entrance控制器完成。

    Rainbond开源
  • 高可用负载均衡:开源PaaS Rainbond组件Rainbond-Entrance揭秘

    负载均衡(Load Balancing)是开源PaaS Rainbond的亮点功能,主要由“软件定义负载均衡”Rainbond-Entrance控制器完成。

    Rainbond开源
  • 高可用负载均衡:开源PaaS Rainbond组件Rainbond-Entrance揭秘

    用户1263954

扫码关注云+社区

领取腾讯云代金券