量化投资学习笔记190——文本分析实操2完善词云图及聚类分析

文文本分析也称为文本挖掘,是从文本数据中获得高质量和可操作信息和见解所遵循的方法和过程。包括:

  • 文本分类
  • 文本聚类
  • 文本摘要
  • 情感分析
  • 实体抽取与识别
  • 相似性分析与关系建模

上次的文章对每年的人民日报文章画了个词云图,但结果貌似不是按词频来的。我就先计算词频再画词云图吧。

1
2
3
4
5
6
# 统计词频
def generateCipin(year):
text = loadText(year)
text = text.split(" ")
word_counts = collections.Counter(text)
return word_counts

然后画词云图

1
2
3
4
5
6
7
8
9
# 生成图云
def drawWordCloud(fromyear = 1957, endyear = 2003):
for year in range(fromyear, endyear):
# 加载词频结果
cipin = generateCipin(year)
# 生成词云
wordcloud = WordCloud(font_path="./ST.ttf", collocations = False, max_words = 100, min_font_size=10, max_font_size=500, background_color="white")
wordcloud.generate_from_frequencies(cipin)
wordcloud.to_file("./output/" + str(year) + '词云图.png')

现在看起来就差不多了。本来想做个动态词频图,但字体出问题,没弄出来。再尝试一下文本聚类,每年的分词结果作为一个文档。
以下参考这里
分词前面已经完成了,直接读取结果然后计算Tf-idf矩阵。
把每年的分词结果作为单独的一行,组成列表来聚类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 文本聚类
def clusteText(fromyear = 1957, endyear = 2003):
tfidf_vectorizer = TfidfVectorizer(use_idf=True, smooth_idf=True, norm=None, max_features=3000, max_df=0.99, min_df=0.1)
raw_str = []
for year in range(fromyear, endyear):
text = loadText(year)
raw_str.append(text)
# raw_str = raw_str.split(" ")
print(len(raw_str))
tfidf_matrix = tfidf_vectorizer.fit_transform(raw_str)
print(year, tfidf_matrix.shape)
# 计算文档相似性
dist = 1 - cosine_similarity(tfidf_matrix)
print("文档相似性", dist)
# 获得分类
linkage_matrix = linkage(dist, method='ward', metric='euclidean', optimal_ordering = False)
print(linkage_matrix)
# 可视化
plt.figure(figsize = (25, 10))
plt.title("人民日报全文聚类")
dendrogram(
linkage_matrix,
labels = [str(year) for year in range(fromyear, endyear)],
leaf_rotation=-70,
leaf_font_size=12
)
plt.savefig("./output/cluste.jpg")
plt.close()

看看聚类结果

最大的两个分类里,除了一处例外,1980之前跟1980之后基本是分在了两个不同的类别里,还是蛮准的。
源代码: https://github.com/zwdnet/text/blob/main/text.py

源代码

我发文章的三个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。

我的个人博客地址:https://zwdnet.github.io

我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts

我的微信个人订阅号:赵瑜敏的口腔医学学习园地

欢迎打赏!感谢支持!