欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用Python實(shí)現(xiàn)網(wǎng)易云音樂(lè)的數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗和可視化分析

 更新時(shí)間:2021年08月17日 09:58:49   作者:尚歌  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)Kmeans聚類算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Python實(shí)現(xiàn)對(duì)網(wǎng)易云音樂(lè)的數(shù)據(jù)進(jìn)行一個(gè)數(shù)據(jù)清洗和可視化分析

對(duì)音樂(lè)數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗與可視化分析

關(guān)于數(shù)據(jù)的清洗,實(shí)際上在上一一篇文章關(guān)于抓取數(shù)據(jù)的過(guò)程中已經(jīng)做了一部分,后面我又做了一下用戶數(shù)據(jù)的抓取

歌曲評(píng)論:

img

img

包括后臺(tái)返回的空用戶信息、重復(fù)數(shù)據(jù)的去重等。除此之外,還要進(jìn)行一些清洗:用戶年齡錯(cuò)誤、用戶城市編碼轉(zhuǎn)換等。

關(guān)于數(shù)據(jù)的去重,評(píng)論部分可以以sommentId為數(shù)據(jù)庫(kù)索引,利用數(shù)據(jù)庫(kù)來(lái)自動(dòng)去重;用戶信息部分以用戶ID為數(shù)據(jù)庫(kù)索引實(shí)現(xiàn)自動(dòng)去重。

API返回的用戶年齡一般是時(shí)間戳的形式(以毫秒計(jì))、有時(shí)候也會(huì)返回一個(gè)負(fù)值或者一個(gè)大于當(dāng)前時(shí)間的值,暫時(shí)沒(méi)有找到這兩種值代表的含義,故而一律按0來(lái)處理。

API返回的用戶信息中,城市分為province和city兩個(gè)字段,本此分析中只保存了city字段。實(shí)際上字段值是一個(gè)城市code碼,具體對(duì)照在這里下載。
利用Python的數(shù)據(jù)處理庫(kù)pandas進(jìn)行數(shù)據(jù)處理,利用可視化庫(kù)pyecharts進(jìn)行數(shù)據(jù)可視化。

分別查看下面分析結(jié)果。

  • 評(píng)論用戶年齡分布
  • 評(píng)論關(guān)鍵詞分布
  • 評(píng)論時(shí)間數(shù)量分布(年-月)
  • 評(píng)論時(shí)間數(shù)量分布(年-月-日)

對(duì)音樂(lè)數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗與可視化分析

import pandas as pd
import pymysql
from pyecharts import Bar,Pie,Line,Scatter,Map
TABLE_COMMENTS = '****'
TABLE_USERS = '****'
DATABASE = '****'
conn = pymysql.connect(host='localhost', user='****', passwd='****', db=DATABASE, charset='utf8mb4')
sql_users = 'SELECT id,gender,age,city FROM '+TABLE_USERS
sql_comments = 'SELECT id,time FROM '+TABLE_COMMENTS
comments = pd.read_sql(sql_comments, con=conn)
users = pd.read_sql(sql_users, con=conn)
# 評(píng)論時(shí)間(按天)分布分析
comments_day = comments['time'].dt.date
data = comments_day.id.groupby(comments_day['time']).count()
line = Line('評(píng)論時(shí)間(按天)分布')
line.use_theme('dark')
line.add(
	'',
	data.index.values,
	data.values,
	is_fill=True,
)
line.render(r'./評(píng)論時(shí)間(按天)分布.html')
# 評(píng)論時(shí)間(按小時(shí))分布分析
comments_hour = comments['time'].dt.hour
data = comments_hour.id.groupby(comments_hour['time']).count()
line = Line('評(píng)論時(shí)間(按小時(shí))分布')
line.use_theme('dark')
line.add(
	'',
	data.index.values,
	data.values,
	is_fill=True,
)
line.render(r'./評(píng)論時(shí)間(按小時(shí))分布.html')
# 評(píng)論時(shí)間(按周)分布分析
comments_week = comments['time'].dt.dayofweek
data = comments_week.id.groupby(comments_week['time']).count()
line = Line('評(píng)論時(shí)間(按周)分布')
line.use_theme('dark')
line.add(
	'',
	data.index.values,
	data.values,
	is_fill=True,
)
line.render(r'./評(píng)論時(shí)間(按周)分布.html')
# 用戶年齡分布分析
age = users[users['age']>0]	# 清洗掉年齡小于1的數(shù)據(jù)
age = age.id.groupby(age['age']).count()	# 以年齡值對(duì)數(shù)據(jù)分組
Bar = Bar('用戶年齡分布')
Bar.use_theme('dark')
Bar.add(
	'',
	age.index.values,
	age.values,
	is_fill=True,
)
Bar.render(r'./用戶年齡分布圖.html')	# 生成渲染的html文件
# 用戶地區(qū)分布分析
# 城市code編碼轉(zhuǎn)換
def city_group(cityCode):
    city_map = {
        '11': '北京',
        '12': '天津',
        '31': '上海',
        '50': '重慶',
        '5e': '重慶',
        '81': '香港',
        '82': '澳門(mén)',
        '13': '河北',
        '14': '山西',
        '15': '內(nèi)蒙古',
        '21': '遼寧',
        '22': '吉林',
        '23': '黑龍江',
        '32': '江蘇',
        '33': '浙江',
        '34': '安徽',
        '35': '福建',
        '36': '江西',
        '37': '山東',
        '41': '河南',
        '42': '湖北',
        '43': '湖南',
        '44': '廣東',
        '45': '廣西',
        '46': '海南',
        '51': '四川',
        '52': '貴州',
        '53': '云南',
        '54': '西藏',
        '61': '陜西',
        '62': '甘肅',
        '63': '青海',
        '64': '寧夏',
        '65': '新疆',
        '71': '臺(tái)灣',
        '10': '其他',
    }
    return city_map[cityCode[:2]]
city = users['city'].apply(city_group)
city = city.id.groupby(city['city']).count()
map_ = Map('用戶地區(qū)分布圖')
map_.add(
	'',
	city.index.values,
	city.values,
	maptype='china',
	is_visualmap=True,
	visual_text_color='#000',
	is_label_show=True,
)
map_.render(r'./用戶地區(qū)分布圖.html')

可視化結(jié)果

img

img

評(píng)論時(shí)間按周分布圖可以看出,評(píng)論數(shù)在一周當(dāng)中前面較少,后面逐漸增多,這可以解釋為往后接近周末,大家有更多時(shí)間來(lái)聽(tīng)聽(tīng)歌、刷刷歌評(píng),而一旦周末過(guò)完,評(píng)論量馬上下降(周日到周一的下降過(guò)渡),大家又回歸到工作當(dāng)中。

img

評(píng)論時(shí)間按小時(shí)分布圖可以看出,評(píng)論數(shù)在一天當(dāng)中有兩個(gè)小高峰:11點(diǎn)-13點(diǎn)和22點(diǎn)-0點(diǎn)。這可以解釋為用戶在中午午飯時(shí)間和晚上下班(課)在家時(shí)間有更多的時(shí)間來(lái)聽(tīng)歌刷評(píng)論,符合用戶的日常。至于為什么早上沒(méi)有出現(xiàn)一個(gè)小高峰,大概是早上大家都在搶時(shí)間上班(學(xué)),沒(méi)有多少時(shí)間去刷評(píng)論。

img

https://blog.csdn.net/u011371360

用戶年齡分布圖可以看出,用戶大多集中在14-30歲之間,以20歲左右居多,除去虛假年齡之外,這個(gè)年齡分布也符合網(wǎng)易云用戶的年齡段。圖中可以看出28歲有個(gè)高峰,猜測(cè)可能是包含了一些異常數(shù)據(jù),有興趣的化可以做進(jìn)一步分析。

img

用戶地區(qū)分布圖可以看出,用戶涵蓋了全國(guó)各大省份,因?yàn)橹虚g數(shù)據(jù)(坑)的缺失,并沒(méi)有展現(xiàn)出哪個(gè)省份特別突出的情況。對(duì)別的歌評(píng)(完全數(shù)據(jù))的可視化分析,可以看出明顯的地區(qū)分布差異。

此次分析只是對(duì)某一首歌曲評(píng)論時(shí)間、用戶年齡/地區(qū)分布進(jìn)行的,實(shí)際上抓取到的信息不僅僅在于此,可以做進(jìn)一步分析(比如利用評(píng)論內(nèi)容進(jìn)行文本內(nèi)容分析等),這部分,未來(lái)會(huì)進(jìn)一步分析。當(dāng)然也可以根據(jù)自己情況對(duì)不同歌曲進(jìn)行分析。

歌詞文本分析

情感分析采用Python的文本分析庫(kù)snownlp,代碼如下:

import numpy as np
import pymysql
from snownlp import SnowNLP
from pyecharts import Bar
TABLE_COMMENTS = '****'
DATABASE = '****'
SONGNAME = '****'
def getText():
	conn = pymysql.connect(host='localhost', user='root', passwd='root', db=DATABASE, charset='utf8')
	sql = 'SELECT id,content FROM '+TABLE_COMMENTS
	text = pd.read_sql(sql%(SONGNAME), con=conn)
	return text
def getSemi(text):
	text['content'] = text['content'].apply(lambda x:round(SnowNLP(x).sentiments, 2))
	semiscore = text.id.groupby(text['content']).count()
	bar = Bar('評(píng)論情感得分')
	bar.use_theme('dark')
	bar.add(
		'',
		y_axis = semiscore.values,
		x_axis = semiscore.index.values,
		is_fill=True,
	)
	bar.render(r'情感得分分析.html')
	text['content'] = text['content'].apply(lambda x:1 if x>0.5 else -1)
	semilabel = text.id.groupby(text['content']).count()
	bar = Bar('評(píng)論情感標(biāo)簽')
	bar.use_theme('dark')
	bar.add(
		'',
		y_axis = semilabel.values,
		x_axis = semilabel.index.values,
		is_fill=True,
	)
	bar.render(r'情感標(biāo)簽分析.html')

結(jié)果:

img

img

詞云生成采用jieba分詞庫(kù)分詞,wordcloud生成詞云,代碼如下:

from wordcloud import WordCloud
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.rcParams['axes.unicode_minus'] = False
def getWordcloud(text):
	text = ''.join(str(s) for s in text['content'] if s)
	word_list = jieba.cut(text, cut_all=False)
	stopwords = [line.strip() for line in open(r'./StopWords.txt', 'r').readlines()]	# 導(dǎo)入停用詞
	clean_list = [seg for seg in word_list if seg not in stopwords] #去除停用詞
	clean_text = ''.join(clean_list)
	# 生成詞云
	cloud = WordCloud(
	    font_path = r'C:/Windows/Fonts/msyh.ttc',
	    background_color = 'white',
	    max_words = 800,
	    max_font_size = 64
	)
	word_cloud = cloud.generate(clean_text)
	# 繪制詞云
	plt.figure(figsize=(12, 12))
	plt.imshow(word_cloud)
	plt.axis('off')
	plt.show()
if __name__ == '__main__':
	text = getText()
	getSemi(text)
	getWordcloud(text)

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 詳解PyQt5中textBrowser顯示print語(yǔ)句輸出的簡(jiǎn)單方法

    詳解PyQt5中textBrowser顯示print語(yǔ)句輸出的簡(jiǎn)單方法

    這篇文章主要介紹了詳解PyQt5中textBrowser顯示print語(yǔ)句輸出的簡(jiǎn)單方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • TensorFlow和Numpy矩陣操作中axis理解及axis=-1的解釋

    TensorFlow和Numpy矩陣操作中axis理解及axis=-1的解釋

    在調(diào)用numpy庫(kù)中的concatenate()時(shí),有遇到axis=-1/1/0的情況,下面這篇文章主要給大家介紹了關(guān)于TensorFlow和Numpy矩陣操作中axis理解及axis=-1解釋的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • python中的垃圾回收(GC)機(jī)制

    python中的垃圾回收(GC)機(jī)制

    這篇文章主要介紹了python中的GC機(jī)制,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • python命令 -u參數(shù)用法解析

    python命令 -u參數(shù)用法解析

    這篇文章主要介紹了python命令 -u參數(shù)用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python實(shí)現(xiàn)查找字符串?dāng)?shù)組最長(zhǎng)公共前綴示例

    Python實(shí)現(xiàn)查找字符串?dāng)?shù)組最長(zhǎng)公共前綴示例

    這篇文章主要介紹了Python實(shí)現(xiàn)查找字符串?dāng)?shù)組最長(zhǎng)公共前綴,涉及Python針對(duì)字符串的遍歷、判斷、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Django分頁(yè)器的用法詳解

    Django分頁(yè)器的用法詳解

    本文主要介紹在利用Django開(kāi)發(fā)MVT模型項(xiàng)目時(shí)分頁(yè)器的使用,感興趣的朋友可以參考下
    2021-05-05
  • Python實(shí)現(xiàn)從URL地址提取文件名的方法

    Python實(shí)現(xiàn)從URL地址提取文件名的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)從URL地址提取文件名的方法,涉及OS模塊中basename方法的使用技巧,需要的朋友可以參考下
    2015-05-05
  • Python 判斷 有向圖 是否有環(huán)的實(shí)例講解

    Python 判斷 有向圖 是否有環(huán)的實(shí)例講解

    下面小編就為大家分享一篇Python 判斷 有向圖 是否有環(huán)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Python?Flask框架實(shí)現(xiàn)Proteus仿真Arduino與網(wǎng)頁(yè)數(shù)據(jù)交互

    Python?Flask框架實(shí)現(xiàn)Proteus仿真Arduino與網(wǎng)頁(yè)數(shù)據(jù)交互

    這篇文章主要介紹了Python?Flask框架實(shí)現(xiàn)Proteus仿真Arduino與網(wǎng)頁(yè)數(shù)據(jù)交互,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-11-11
  • Python下載懶人圖庫(kù)JavaScript特效

    Python下載懶人圖庫(kù)JavaScript特效

    本文給大家分享的是使用Python 爬蟲(chóng)抓取懶人圖庫(kù)的JS腳本特效模板的代碼,使用了第三方庫(kù)gevent來(lái)實(shí)現(xiàn),有需要的小伙伴可以參考下。
    2015-05-05

最新評(píng)論