Python数据分析:爬虫、可视化和数据库应用

一、 生成歌词词云教程

步骤一:获取歌词数据

首先,我们需要爬取所有歌曲的歌词,并将它们合并成一个字符串。

步骤二:提取中文歌词

接下来,我们需要从合并后的字符串中提取中文歌词,并将它们合并成一个新的字符串。

步骤三:生成词云

最后,我们可以使用Python中的词云库,如wordcloud,生成歌词词云图。

text = re.findall('[\u4e00-\u9fa5]+', lyric, re.S)  # 提取中文text = " ".join(text)

然后,我们可以使用Python中的中文分词库jieba对提取出的中文歌词进行分词,并将长度大于等于2的词保存下来。

word = jieba.cut(text, cut_all=True)  # 分词new_word = []for i in word:    if len(i) >= 2:        new_word.append(i)  # 只添加长度大于2的词final_text = " ".join(new_word)

接下来,我们可以选择一张美观的图片作为词云的背景,并使用Python中的词云库,如wordcloud,对保存下来的词进行词频统计和可视化,生成一张美丽的歌词词云图!

mask = np.array(Image.open("2.jpg"))word_cloud = WordCloud(background_color="white", width=800, height=600, max_words=100, max_font_size=80, contour_width=1, contour_color='lightblue', font_path="C:/Windows/Fonts/simfang.ttf", mask=mask).generate(final_text)# plt.imshow(word_cloud, interpolation="bilinear")# plt.axis("off")# plt.show()word_cloud.to_file(self.keyword+'词云.png')os.startfile(self.keyword+'词云.png')

 

在使用Python中的词云库wordcloud生成歌词词云图时,我们可以通过设置参数来调整词云的样式。例如,可以设置contour_width=1和contour_color='lightblue'来添加背景图片的轮廓线条,font_path参数用于指定字体。

生成词云后,我们可以使用show()方法来展示词云图,也可以将其保存到本地并打开。最终生成的歌词词云图如下所示:

二、热门歌手歌曲量饼图

首先,我们需要获取热门歌手列表以及每个热门歌手的歌曲数量。

接下来,我们可以将每个歌手的歌曲数量除以所有这十个歌手的总歌曲数量,从而得到每个歌手歌曲量的占比。

explode = [0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

接下来就可以生成饼图了

plt.figure(figsize=(6, 9))  # 设置图形大小宽高plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码问题plt.axes(aspect=1)  # 设置图形是圆的plt.pie(x=proportion, labels=name, explode=explode, autopct='%3.1f %%',shadow=True, labeldistance=1.2, startangle=0, pctdistance=0.8)plt.title("热门歌手歌曲量占比")# plt.show()plt.savefig("热门歌手歌曲量占比饼图.jpg")os.startfile("热门歌手歌曲量占比饼图.jpg")

在下面的代码中,我们使用了三个列表:x、labels和explode。其中,x是歌曲量占比的列表,labels是对应的标签(在此图中则为歌手的姓名),explode则是上文提到的突出显示。这三个列表中的各个值是一一对应的。

此外,我们还使用了autopct参数来设置占比数值的显示方式。在本例中,我们将其设置为"3.1f",表示占宽为3位(如果大于会原样输出),精度为1的浮点数。

最后,您可以选择直接使用show()方法展示图表,或者将其保存到本地再打开。

三、歌曲热度占比条形图

在之前,我们使用爬虫获取了top500歌曲的信息(如下所示)。现在,我们希望对这些歌曲的热度进行分析,并生成柱状图。

 效果图如下:

最初,我们想要生成歌手拥有热门歌曲数量的柱形图。然而,我们发现从爬取热门歌曲的网站中获取的歌曲列表中,并没有对应的歌手信息。因此,我们需要从其他网站获取每首歌曲对应的歌手信息,这一过程十分繁琐。因此,我们最终没有采用这种方法。如果您感兴趣,可以自己尝试实现。

为了获得每个热度范围内的歌曲数量,我们需要使用一个名为"data"的列表。该列表中的元素对应于不同热度范围内的歌曲数量。

我们可以通过遍历歌曲热度列表,每次将对应热度范围的"data"列表加1,最终得到每个热度范围内的歌曲数量。

x = ('0-10', '10-20', '20-30', '30-40', '40-50', '>50')data = [0, 0, 0, 0, 0, 0]

接下来就是创建柱状图,首先解决中文乱码问题

plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False

随后即可通过plt.bar创建,其中第一个参数为横坐标数据,第二个参数为纵坐标数据,第三个参数为为柱状图填充颜色,第四个参数为透明度

title,xlabel,ylabel显然就是该柱状图的标题,横坐标和纵坐标的名称plt.bar(x, data, color='steelblue', alpha=0.8)plt.title("pop500歌曲热度")plt.xlabel("歌曲热度范围")plt.ylabel("歌曲数量")plt.show()

本文上面所有的Python资料都有详细的配套教程以及源码,都已经打包好正在上传到资源库。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序袁小子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值