大家好,今天我們用python分析下周杰倫歌曲。為了盡量完整地呈現(xiàn)從原始數(shù)據(jù)到可視化的過程,接下來我們會(huì)先簡單講解數(shù)據(jù)的預(yù)處理過程,即如何將 JSON 數(shù)據(jù)轉(zhuǎn)化為Excel 格式,以及如何對(duì)周杰倫的歌曲進(jìn)行分詞。
本案例中的歌詞數(shù)據(jù)來自中文歌詞數(shù)據(jù)庫,這個(gè)數(shù)據(jù)庫提供了華語歌手的歌曲及歌詞信息,數(shù)據(jù)以?JSON 格式存儲(chǔ)。
數(shù)據(jù)預(yù)處理指的是將原始數(shù)據(jù)處理成我們希望的格式,并提取出我們需要的信息。
在本案例中,我們需要先從數(shù)據(jù)庫中篩選出演唱者為周杰倫的歌曲,然后獲得這些歌曲的歌詞,并將它們存儲(chǔ)到純文本文檔(.txt 格式)中,以下提供兩種方法。
第一種方法,先把 JSON 文件轉(zhuǎn)換為 Excel 可以打開的 .csv 文件或 .xlsx 文件格式。這可以借助一些在線的轉(zhuǎn)換工具完成(如 JSON to CSV Converter)。一般而言,只需將文件拖入這些工具,選擇好轉(zhuǎn)換格式類型,即可轉(zhuǎn)換完成。接著,我們便可以在 Excel 中打開該數(shù)據(jù),然后單擊“數(shù)據(jù)→篩選”命令,選擇歌手為“周杰倫”的歌曲。之后,選中它們的歌詞,并將其粘貼到純文本文檔中。
第二種方法,通過 Python 進(jìn)行數(shù)據(jù)預(yù)處理。首先,需要引入 JSON 庫(未安裝者通過 pip install json 安裝)。
import json
然后,讀取我們下載的 JSON 文件,存儲(chǔ)在名為 data 的變量中。
with open(‘ lyrics.json’ , ‘ r’ ) as f:
data = json.load(f)
接著,遍歷 data 中的每一項(xiàng),找出“歌手”=“周杰倫”的數(shù)據(jù)項(xiàng),存到data_zjl 中。
data_zjl = [item for item in data if item[‘ singer’ ]==’ 周杰倫’ ]
print(len(data_zjl))
建立一個(gè)空列表 zjl_lyrics,用于存儲(chǔ)歌詞。遍歷 data_zjl 中的每一首歌,將它們的歌詞存到 zjl_lyrics 中。
Zjl_lyrics = []
for song in data_zjl:
zjl_lyrics = zjl_lyrics + song[‘ lyric’ ]
最后將 zjl_lyrics 寫入一個(gè)新的 .txt 文件。
with open(“ zjl_lyrics.txt” , “ w” ) as outfifile:
outfifile.write(“ \n” .join(zjl_lyrics))
通過這幾行代碼,我們就獲得了周杰倫所有歌曲的歌詞數(shù)據(jù)(見圖1)。以這個(gè) .txt 文件為基礎(chǔ),我們便可以進(jìn)行詞頻統(tǒng)計(jì)了。
?以下附上一種在 Python 中分詞的方法。首先引入 jieba 庫(安裝 :pip install jieba)、pandas 庫(安裝 :pip install pandas)、用于頻次統(tǒng)計(jì)的 Counter 庫,以及表單工具,代碼如下:
import jieba
import jieba.analyse
import pandas as pd
from collections import Counter
事先準(zhǔn)備好一個(gè)中文的停用詞表(.txt 文件,里面包含一些常見的、需要過濾的中文標(biāo)點(diǎn)和虛詞,可在網(wǎng)上下載),代碼如下:
with open(‘ chinese_stop_words.txt’ ) as f:
stopwords = [line.strip() for line in f.readlines()]
打開歌詞文件,利用 jieba 庫進(jìn)行分詞。分詞之后,刪除停用詞、去除無用的符號(hào)等。用 Counter 庫對(duì)清洗干凈的詞語進(jìn)行頻次統(tǒng)計(jì)。然后將統(tǒng)計(jì)結(jié)果用 pandas庫轉(zhuǎn)換為數(shù)據(jù)表單,存儲(chǔ)為 Excel 文件,代碼如下:
fifile = open(“ zjl_lyrics.txt” ).read()
words = jieba.lcut(fifile, cut_all=False, use_paddle=True)
words = [w for w in words if w not in stopwords]
words = [w.strip() for w in words]
words = [w for w in words if w != ‘ ’ ]
words_fifilter = [w for w in words if len(w) > 1]
df = pd.DataFrame.from_dict(Counter(words_fifilter), orient=’ index’ ).
reset_index()
df = df.rename(columns={‘ index’ :’ words’ , 0:’ count’ })
df.to_excel(“ 周杰倫分詞結(jié)果 .xlsx” )
由此,如下表所示,我們便獲得了分詞后的單詞及詞頻。使用這個(gè)文檔,我們就可以開始制作可視化了。
?由于是文本類數(shù)據(jù),我們首先想到的可視化形式可能是文字云。如果你使用 Python,則可以直接基于剛才的分析結(jié)果,調(diào)用wordcloud庫繪制文字云,代碼如下:
from wordcloud import WordCloud
# 注 :這里需要引入一個(gè)中文字體,否則會(huì)亂碼
wc = WordCloud(font_path = ‘ Alibaba-PuHuiTi-Regular.ttf’ ,
background_color=” white” ,
max_words = 2000)
wc.generate(‘ ‘ .join(words_fifilter))
import matplotlib.pyplot as plt
plt.imshow(wc)
plt.fifigure(fifigsize=(12,10), dpi = 300)
plt.axis(“ off” )
plt.show()
繪制結(jié)果如圖所示:
?不過,在代碼工具內(nèi)繪制文字云,進(jìn)行定制化設(shè)計(jì)相對(duì)比較復(fù)雜。因此,也可以借助一些在線工具幫助我們實(shí)現(xiàn)更好的可視化效果。下面,我們以微詞云為例進(jìn)行演示。
進(jìn)入微詞云界面后,首先單擊“導(dǎo)入單詞”,進(jìn)行數(shù)據(jù)導(dǎo)入。選擇“從 Excel 中導(dǎo)入關(guān)鍵詞”,然后上傳我們剛才得到的包含單詞和詞頻的 Excel 文檔(需要注意的是,微詞云目前對(duì)上傳的 Excel 文件格式有一定要求,比如,列名必須叫“單詞”和“詞頻”才能識(shí)別,詳見其頁面指引),即可生成文字云。
可以看到,微詞云的頁面上還有另外兩種導(dǎo)入數(shù)據(jù)的選項(xiàng)。其中,“簡單導(dǎo)入”支持用戶輸入用逗號(hào)隔開的單詞?!胺衷~篩詞后導(dǎo)入”則支持用戶粘貼長文本,然后由系統(tǒng)自動(dòng)進(jìn)行分詞和詞性判別。換句話說,如果你有一個(gè)文檔文件,也可以直接粘貼進(jìn)微詞云進(jìn)行分詞。
接下來我們用周杰倫的歌詞文檔來嘗試一下。選擇“分詞篩詞后導(dǎo)入”,然后將之前的 .txt 格式的文檔粘貼進(jìn)微詞云。之后,單擊“開始分詞”,軟件就會(huì)自動(dòng)把詞語切割出來,并按詞性歸類,結(jié)果如下圖所示。
可以看到,所有的詞語被按照動(dòng)詞、名詞、形容詞、人名等歸類。詞語后面的括號(hào)標(biāo)注了詞頻。同時(shí),微詞云還自動(dòng)幫我們把高頻的詞匯勾選出來。我們也可以根據(jù)個(gè)人需求,在這個(gè)界面中進(jìn)一步編輯,例如只顯示名詞、只顯示動(dòng)詞等,然后單擊“確定使用所選單詞”按鈕,即可生成詞云。
之后,我們可以在“配置”欄中編輯詞云的顯示方式。其中,“計(jì)算模式”指的是字體的大小是否嚴(yán)格與詞頻匹配,因此我們選擇“嚴(yán)格比例”。另外,我們還可以更改文字的顏色,以及文字云中單詞的數(shù)量等。在本案例中,我們把單詞數(shù)量調(diào)整到 200。調(diào)整完畢后,單擊右上角的“下載到本地”按鈕即可。
?當(dāng)然,雖然詞云在視覺上比較有趣,但在展示數(shù)據(jù)上卻不一定清晰。因此,我們也可以使用其他的圖表來進(jìn)行可視化。比如,可以用圓面積來展示最高頻的詞匯。文章來源:http://www.zghlxwxcb.cn/news/detail-425359.html
以上,我們講解了使用 Python 分詞和使用在線工具分詞的兩種方法,大家可以根據(jù)本案例進(jìn)行學(xué)習(xí)。文章來源地址http://www.zghlxwxcb.cn/news/detail-425359.html
到了這里,關(guān)于用Python分析周杰倫歌曲并進(jìn)行數(shù)據(jù)可視化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!