如何在两类目标场景下正确使用Scattertext工具?
1. 数据集兼容性说明
这类仅包含词汇、两类标签对应出现频次的预聚合二分类词频数据集完全支持用Scattertext开展分析。
你之前的脚本运行失败核心是三个问题:
- 代码中从未定义
corpus变量就直接传入可视化函数,触发变量不存在的报错 - 没有将普通的pandas词频表转换为Scattertext要求的专用语料对象,直接传入DataFrame不符合接口参数要求
- 参数不匹配:你代码中
not_category_name填的是'Unos',但数据集第二类标签是Ones,就算语料构建正确也会出现类别匹配错误。
2. 正确实现流程
Scattertext默认接口是面向原始分词文本设计的,针对预聚合的词频表,需要用专门的词频导入接口构建语料,不需要反向构造原始文本,完整步骤如下:
- 第一步:导入依赖,读取本地CSV词频表,注意pandas 1.3+版本已经移除了
error_bad_lines参数,替换为on_bad_lines='skip'避免读文件报错 - 第二步:实例化词频类别统计对象,逐行录入每个词汇在两个分类下的出现频次
- 第三步:调用词频语料构建方法,生成Scattertext可识别的Corpus对象
- 第四步:将合法的Corpus对象传入可视化生成函数,输出HTML结果并保存到本地
可直接运行的参考代码如下:
import pandas as pd import scattertext as st # 读取本地词频数据集 df = pd.read_csv( "MyResult.csv", delimiter=',', on_bad_lines='skip' ) # 构建词汇-类别频次映射 term_cat_freq = st.TermCategoryFrequencies() for _, row in df.iterrows(): term_cat_freq.set_term_category_frequency( term=row['Words'], category='Zeros', count=row['Zeros'] ) term_cat_freq.set_term_category_frequency( term=row['Words'], category='Ones', count=row['Ones'] ) # 生成Scattertext专用语料对象 corpus = st.CorpusFromTermCategoryFrequencies(term_cat_freq).build() # 生成交互式可视化HTML html = st.produce_scattertext_explorer( corpus, category='Zeros', category_name='Zeros类', not_category_name='Ones类', width_in_pixels=1000, metadata=df['Words'] ) # 将结果写入本地HTML文件,直接用浏览器打开即可查看 with open("词频分类可视化.html", 'wb') as f: f.write(html.encode('utf-8'))
如果你需要自定义类别显示名称,可以自行修改
category_name和not_category_name的传值,只要保证category参数传入的字符串和你录入频次时用的类别名(即'Zeros')完全一致即可。
内容的提问来源于stack exchange,提问作者Rachele Franceschini
相关产品推荐
相关产品推荐

