文本的数据分析

为了更好的去理解预料信息,我们需要去进行文本的数据分析。

一.标签数量分布

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

plt.style.use('fivethirtyeight')

train_data = pd.read_csv("cn_data/train.tsv",sep='\t')
test_data = pd.read_csv("cn_data/dev.tsv",sep='\t')

sns.countplot(x='label',data=train_data)
plt.title('Distribution of Sentiments in Training Data')
plt.show()


sns.countplot(x='label',data=test_data)
plt.title('Distribution of Sentiments in Test Data')
plt.show()

二.句子长度分析

往往会通过分析句子的长度构成,来选择句子截断/补齐的长度

python 复制代码
#增加一列,记录该文本的长度
train_data["sentence_length"] = list(map(lambda x: len(x),train_data["sentence"]))


sns.countplot(x='sentence_length',data=train_data)
plt.title('Distribution of Sentence Lengths in Training Data')
plt.xticks([])
plt.show()

sns.distplot(train_data["sentence_length"])
plt.yticks([])
plt.title('Distribution of Sentence Lengths in Training Data')
plt.show()

test_data["sentence_length"] = list(map(lambda x: len(x),test_data["sentence"]))

sns.countplot(x='sentence_length',data=test_data)
plt.title('Distribution of Sentence Lengths in Test Data')
plt.xticks([])
plt.show()

sns.distplot(test_data["sentence_length"])
plt.yticks([])
plt.title('Distribution of Sentence Lengths in Test Data')
plt.show()

三. 正负样本的散点分布

python 复制代码
#绘制散点图
sns.stripplot(y='sentence_length',x='label',data=train_data)
plt.show()

sns.stripplot(y='sentence_length',x='label',data=test_data)
plt.show()

通过查看散点图,发现异常点的存在,进一步人工进行审查。

四.不同词汇统计

python 复制代码
#获取训练集和验证机不同词汇总数统计
import jieba
from itertools import chain

#rain_vocab = set(chain(*map(lambda x: jieba.lcut(x),train_data["sentence"])))
token_lists = map(lambda x: jieba.lcut(x), train_data["sentence"])  #分词
flat_tokens = chain(*token_lists)  #展平为1维数组
train_vocab = set(flat_tokens) #去掉重复词
print("训练集不同词汇总数:",len(train_vocab))

valid_vocab = set(chain(*map(lambda x: jieba.lcut(x),test_data["sentence"])))
print("验证集不同词汇总数:",len(valid_vocab))

五.高频词汇词云

高频形容词词云

对于情感分析,我们往往会提取形容词,来评估语料集的质量。

python 复制代码
import jieba.posseg as pseg
from wordcloud import WordCloud
# 词性统计
def get_a_list(text):
    r = []
    for g in pseg.lcut(text):
        if g.flag == 'a':  #a就是形容词
            r.append(g.word)  #把词存入列表
    return r

def get_word_cloud(keyword_list):
    wordcloud = WordCloud(background_color='white', font_path='C:\Windows\Fonts\STFANGSO.TTF', max_font_size=100, random_state=42)
    keyword_string = " ".join(keyword_list)  #这里参数必须传字符串类型
    wordcloud.generate(keyword_string)
    plt.figure()
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis("off")
    plt.show()
#正样本
p_train_data = train_data[train_data['label']==1]["sentence"]
train_p_a_vocab = chain(*map(lambda x: get_a_list(x),p_train_data))

#负样本
n_train_data = train_data[train_data['label']==0]["sentence"]
train_n_a_vocab = chain(*map(lambda x: get_a_list(x),n_train_data))

get_word_cloud(train_p_a_vocab)
get_word_cloud(train_n_a_vocab)

正样本主要是褒义词,负样本主要是贬义词,基本符合要求,但是可以发现负样本中出现了"舒服","干净",可以进一步进行人工审查。

相关推荐
学掌门10 小时前
数据分析师初级—中级—高级,每个阶段都需要学习什么?
大数据·学习·数据分析·数据分析师
Aloudata11 小时前
如何通过 NoETL 指标平台构建企业唯一指标计算中心
大数据·数据库·数据分析·指标平台
isNotNullX14 小时前
数据分析怎么做?数据分析全流程是什么?
数据挖掘·数据分析
生信碱移1 天前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
ClkLog-开源埋点用户分析1 天前
在信创环境下,如何判断一套用户行为分析系统是否“真正可用”?
数据分析·开源·开源软件·用户画像·埋点系统
SelectDB1 天前
Doris & SelectDB for AI 实战:从基础 RAG 到知识图谱增强的完整实现
数据库·人工智能·数据分析
SL-staff1 天前
中小企业 BI 选型:帆软、Power BI、JVS-BI 性价比与架构对比
数据分析·数据可视化·powerbi·帆软·bi工具·部署架构·jvs-bi
数模竞赛Paid answer1 天前
2024年华数杯数学建模A题机器臂关节角路径的优化设计解题全过程文档及程序
数学建模·数据分析·华数杯
小王毕业啦2 天前
1990-2024年 省级-绿色金融指数(+文献)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
小王毕业啦2 天前
1985.1-2026.1 世界各国经济政策不确定性指数(xlsx)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证数据·经管数据