在數據分析和自然語言處理中,快速洞察文本中的高頻關鍵詞是一項基礎而重要的任務。無論是用户評論、社交媒體帖子還是新聞文章,將非結構化文本轉化為直觀的視覺呈現(如詞雲)能幫助我們迅速抓住核心主題。本文將帶你使用 Python 從 CSV 文件讀取文本數據,進行清洗與統計,並最終生成一張美觀的詞雲圖。

1. 準備工作:安裝依賴庫

我們需要以下三個關鍵庫:

pip install pandas jieba wordcloud matplotlib
  • pandas:高效讀取和處理 CSV 數據;
  • jieba:優秀的中文分詞工具(若分析英文可省略);
  • wordcloud:生成詞雲圖像;
  • matplotlib:用於顯示或保存圖像。

💡 若處理英文文本,可跳過 jieba,直接使用空格分詞。

2. 讀取並預處理文本數據

假設我們有一個名為 comments.csv 的文件,包含一列用户評論:

id,comment
1,這個產品真的很好用,強烈推薦!
2,客服態度差,物流也慢。
3,性價比超高,已經回購三次了。

使用 pandas 讀取併合並所有評論:

import pandas as pd

# 讀取CSV
df = pd.read_csv('comments.csv')

# 合併所有評論為一個長字符串
all_text = ' '.join(df['comment'].astype(str))
print(f"共加載 {len(df)} 條評論")

3. 中文分詞與停用詞過濾

中文不能像英文那樣按空格切分,需使用 jieba 進行分詞,並移除無意義的“停用詞”(如“的”、“了”、“很”):

import jieba

# 加載停用詞表(可自定義)
stop_words = set(['的', '了', '在', '是', '我', '你', '和', '就', '都', '很', '也', '有', '不', '説'])

# 分詞
words = jieba.lcut(all_text)

# 過濾停用詞和單字
filtered_words = [
    word for word in words 
    if len(word) > 1 and word not in stop_words and word.isalpha()
]

# 統計詞頻
from collections import Counter
word_counts = Counter(filtered_words)
print("Top 10 高頻詞:", word_counts.most_common(10))

輸出示例:

Top 10 高頻詞:[('產品', 12), ('推薦', 8), ('客服', 6), ('物流', 5), ...]

4. 生成詞雲圖

使用 wordcloud 庫將詞頻數據可視化:

from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 創建詞雲對象
wc = WordCloud(
    font_path='simhei.ttf',      # 中文字體路徑(Windows可用'simhei.ttf',macOS需指定完整路徑)
    background_color='white',
    width=800,
    height=600,
    max_words=100,
    colormap='viridis'
)

# 從詞頻字典生成詞雲
wc.generate_from_frequencies(word_counts)

# 顯示圖像
plt.figure(figsize=(10, 8))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')  # 隱藏座標軸
plt.title('用户評論關鍵詞詞雲', fontsize=16)
plt.show()

# 保存到文件
wc.to_file('wordcloud.png')
print("✅ 詞雲已保存為 wordcloud.png")

⚠️ 字體問題:若詞雲顯示方框,請確保 font_path 指向有效的中文字體文件。在 macOS 上可使用 /System/Library/Fonts/PingFang.ttc

5. 完整流程整合

將上述步驟封裝為一個函數:

def csv_to_wordcloud(csv_file, text_column, output_image='wordcloud.png'):
    df = pd.read_csv(csv_file)
    all_text = ' '.join(df[text_column].astype(str))
    
    words = jieba.lcut(all_text)
    filtered = [w for w in words if len(w) > 1 and w not in stop_words and w.isalpha()]
    
    wc = WordCloud(font_path='simhei.ttf', background_color='white').generate(' '.join(filtered))
    
    plt.imshow(wc, interpolation='bilinear')
    plt.axis('off')
    plt.savefig(output_image, dpi=300, bbox_inches='tight')
    print(f"🎉 詞雲已生成:{output_image}")

調用:

csv_to_wordcloud('comments.csv', 'comment', 'my_cloud.png')

6. 擴展與優化建議

  • 自定義停用詞表:從文件加載更全面的停用詞;
  • 情感分析結合:對正面/負面評論分別生成詞雲;
  • 形狀詞雲:使用 mask 參數生成心形、logo 形狀的詞雲;
  • 英文支持:若處理英文,可直接用 text.split() 分詞,並設置 WordCloud(stopwords=STOPWORDS)

從原始 CSV 到一張信息豐富的詞雲圖,整個過程僅需幾十行 Python 代碼。這種“文本 → 詞頻 → 可視化”的分析範式,適用於輿情監控、產品反饋分析、內容摘要等多種場景。掌握這一技能,你便擁有了將海量文字轉化為直觀洞察的利器。現在,就用你的數據,生成第一張屬於自己的詞雲吧!