在數據分析和自然語言處理中,快速洞察文本中的高頻關鍵詞是一項基礎而重要的任務。無論是用户評論、社交媒體帖子還是新聞文章,將非結構化文本轉化為直觀的視覺呈現(如詞雲)能幫助我們迅速抓住核心主題。本文將帶你使用 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 代碼。這種“文本 → 詞頻 → 可視化”的分析範式,適用於輿情監控、產品反饋分析、內容摘要等多種場景。掌握這一技能,你便擁有了將海量文字轉化為直觀洞察的利器。現在,就用你的數據,生成第一張屬於自己的詞雲吧!