人人都說自己是周杰倫的粉絲,今天用Python統計一下周董經典歌詞裡最長出現的詞語,結果發現周董對一類詞用的特別多,高居榜首,從中我們看到了周杰倫的另一面。
首先去網上搜集了一下周董的經典歌詞,找到了70首歌裡的經典句子,將它保存到txt文件裡。
接下來開始用Python編寫代碼進行分析,有下面幾個步驟:
1、導入用到的包
一共會用到四個包,分別是wordcloud包,用來最後生成詞雲;Image包,用來導入圖片;numpy和jieba。
2、讀取txt文件
讀取txt文件用到了open函數,裡面有3個參數,第一個是目標文件的地址,第二個是讀取方式r代表只讀,encoding是用utf-8進行編碼。我們用text變量來存儲文件內容。
3、對讀內容進行拆分
這裡用到了函數jieba.lcut( )。隨後定義了一個空字典用來存放數據。len(word)>1的判斷是為了將字符、空格、單個字篩出去。後面的if語句的作用是如果data列表裡已經有這個詞了,就給它的值加1,如果沒有就給它一個初始值1。
4、排除低頻詞
這幾行代碼的作用是將出現頻率低的詞彙排除,我設置的是將只出現過1次地排除在外。
5、排序
這一部分代碼的功能是把字典轉化為列表,並且按照出現頻率從高到低進行排序。hist.sort( )函數是對列表進行排序,reverse=True讓數據從大到小進行排列。
後面一個for循環的作用是將列表內容循環列印,最後輸出的結果是如下。
可以看到,「愛情」和「沒有」這兩個詞出現的頻率最高都是9次,可見我們的周董最擅長的還是情歌,「離開」出現了8次,悲歡離合是人們情感永恆的主旋律。
但細心的我們會發現,與時間有關的詞,「時間」出現了7次,「永遠」出現了6次,「從前」出現了5次,合計出現了18次之多,高居榜首,可見周杰倫對時間真的很敏感,是一個多愁善感而且特別懷舊的人。女人說,懷舊的男人都是好男人。他在歌曲裡懷念過去的人和事,真情實感打動了一代人。
到了這裡還沒有結束,我們的最終目的是生成詞雲,所以繼續寫代碼。
6、創建字符串
這一步定義了一個空列表value,用來儲存準備生成詞雲的內容。將hist中的詞一次遍歷,並添加到列表中。然後用last=" ".join(value)將列表value的元素其添加到字符串last中。
7、詞雲照片素材導入
到網上搜了一張周董的照片,並保存為「周杰倫_in.jpg」,將照片文件放到python項目目錄下,使用Image.open( )函數將其打開。然後設置了一個WordCloud對象,其中的參數包括圖片的寬、高、圖片放多少個詞、最大的詞的大小、背景色、字體樣式、mask圖片和圖片精度參數。
8、生成詞雲
最後一步,將last字符串傳遞進generate( )函數裡,並用to_file( )生成圖片。這裡沒有設置生成圖片的路徑,默認會在項目目錄下生成。
大功告成,看一下勞動成果吧。
先是網上找的圖片:
然後是生成的詞雲圖片:
效果一般般,實在看不出來這是帥氣的周董,如果誰能通過這個圖片看出來是周董,那絕對是真愛粉~
通過對周杰倫歌詞的統計分析,我們知道了周杰倫是一個對時間和感情特別敏感的人,這也是他的歌曲能夠打動人們的原因之一吧,你覺得呢