当前位置: 首页 > article >正文

文本数据分析(nlp)

# coding: utf-8
import jieba
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
from itertools import chain
import jieba.posseg as pseg
from wordcloud import WordCloud


# 显示内置风格
# 1. default (Matplotlib 3.0+ 默认风格)
#   •  特点: Matplotlib 在 3.0 版本中改进的默认样式,更现代、清晰。
#   •  适用场景: 各类数据分析、报告。作为默认样式,适合大部分通用绘图需求。
# 2. ggplot
#   •  特点: 模仿 R 语言 ggplot2 包的样式,灰色背景、浅色网格,简洁清晰。
#   •  适用场景: 数据科学报告、数据展示,尤其是习惯于 R 风格的用户。广泛用于统计图表,适合展示数据趋势。
# 3. fivethirtyeight
#   •  特点: 模仿 FiveThirtyEight 网站的风格,淡灰背景,线条粗,文字清晰,有较高辨识度。
#   •  适用场景: 适合数据驱动的新闻风格图表,适用于展示数据新闻、商业报告等。
# 4. Solarize_Light2
#   •  特点: 明亮的太阳能风格,背景为浅色,线条和颜色较为柔和。
#   •  适用场景: 比较独特的浅色风格,适合在深色背景上展示数据或生成不一样的报告风格。
def dm_label_sns_countplot():
    # 1 设置显示风格
    plt.style.use('ggplot')

    # 2 读取数据
    train_data = pd.read_csv('./cn_data/train.tsv', sep='\t')
    print(train_data.head())
    print(type(train_data))
    dev_data = pd.read_csv('./cn_data/dev.tsv', sep='\t')

    # 3 统计训练集的01标签 countplot条形图
    sns.countplot(x='label', data=train_data, hue='label')
    plt.title('train_data')
    plt.show()

    # 4 统计dev
    sns.countplot(x='label', data=dev_data, hue='label')
    plt.title('dev_data')
    plt.show()


def dm_len_sns_countplot_displot():
    # 1 设置显示风格
    plt.style.use('ggplot')

    # 2 读取数据
    train_data = pd.read_csv('./cn_data/train.tsv', sep='\t')
    print(train_data.head())
    print(type(train_data))
    dev_data = pd.read_csv('./cn_data/dev.tsv', sep='\t')

    # 3 添加一列句子长度
    train_data['sentence_length'] = list(map(lambda x: len(x), train_data['sentence']))
    print(train_data.head())
    dev_data['sentence_length'] = list(map(lambda x: len(x), dev_data['sentence']))
    print(dev_data.head())

    print(train_data['sentence_length'].max())
    print(dev_data['sentence_length'].max())

    # 4 绘制图像 train
    sns.countplot(x='sentence_length', data=train_data)
    plt.xticks([])  # 不显示x轴刻度
    plt.show()
    sns.displot(x='sentence_length', data=train_data, kde=True)
    plt.xticks([i for i in range(0, 3500, 200)])
    plt.show()

    # 5 绘制 dev
    # countplot 条形图;displot直方图,kde=True密度曲线图
    sns.countplot(x='sentence_length', data=dev_data)
    plt.show()
    sns.displot(x='sentence_length', data=dev_data, kde=True)
    plt.xticks([i for i in range(0, 3500, 200)])
    plt.show()


def dm_sns_stripplot():
    # 1 设置显示风格
    plt.style.use('ggplot')

    # 2 读取数据
    train_data = pd.read_csv('./cn_data/train.tsv', sep='\t')
    print(train_data.head())
    print(type(train_data))
    dev_data = pd.read_csv('./cn_data/dev.tsv', sep='\t')

    # 3 添加一列句子长度
    train_data['sentence_length'] = list(map(lambda x: len(x), train_data['sentence']))
    print(train_data.head())
    dev_data['sentence_length'] = list(map(lambda x: len(x), dev_data['sentence']))
    print(dev_data.head())

    # 4 绘制训练集散点图 stripplot
    sns.stripplot(y='sentence_length', x='label', data=train_data, hue='label')
    plt.show()

    # 5 绘制 dev
    sns.stripplot(y='sentence_length', x='label', data=dev_data, hue='label')
    plt.show()


def dm_words_count():
    # 1 读取数据
    train_data = pd.read_csv('./cn_data/train.tsv', sep='\t')
    dev_data = pd.read_csv('./cn_data/dev.tsv', sep='\t')

    # 2 获取train词语数量
    # * 解包,把map中的每个列表作为一个独立的元素,传给chain
    print(map(lambda x: jieba.lcut(x), train_data['sentence']))
    print(type(map(lambda x: jieba.lcut(x), train_data['sentence'])))
    train_vocab = set(chain(*map(lambda x: jieba.lcut(x), train_data['sentence'])))
    print('训练集的token数量:', len(train_vocab))

    # 2 获取dev
    dev_vocab = set(chain(*map(lambda x: jieba.lcut(x), dev_data['sentence'])))
    print('验证集的token数量:', len(dev_vocab))


# 7 获得train高频adj词云
# 7.1 获得每个句子的adj列表
def get_a_list(text):
    r = []
    for g in pseg.lcut(text):  # g pair (词性,token)
        # g.flag 词性;g.word 具体的token
        if g.flag == 'a':
            r.append(g.word)
    return r


# 7.2 绘制词云
def get_word_cloud(keywords_list):
    # 1 实例化词云对象
    my_wordcloud = WordCloud(font_path='./cn_data/SimHei.ttf', max_words=100, background_color='white')

    # 2 准备好数据
    a_str = ' '.join(keywords_list)

    # 3 产生词云
    my_wordcloud.generate(a_str)

    # 4 绘制图像
    plt.figure()
    plt.imshow(my_wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.show()


# 7.3 生成词云
def dm_word_cloud():
    # 1 拿到数据
    train_data = pd.read_csv('./cn_data/train.tsv', sep='\t')

    # 2 获取正样本数据
    p_train_data = train_data[train_data['label'] == 1]['sentence']

    # 3 获取全部数据的adj列表 生成词云
    p_a_words = list(chain(*map(lambda x: get_a_list(x), p_train_data)))
    get_word_cloud(p_a_words)

    # 4 获取负样本数据
    n_train_data = train_data[train_data['label'] == 0]['sentence']

    # 5 获取每个句子的adj列表 绘制词云
    n_a_words = list(chain(*map(lambda x: get_a_list(x), n_train_data)))
    get_word_cloud(n_a_words)


if __name__ == '__main__':
    # dm_label_sns_countplot()
    # dm_len_sns_countplot_displot()
    # dm_sns_stripplot()
    # dm_words_count()
    dm_word_cloud()

http://www.kler.cn/a/409898.html

相关文章:

  • Node.js的http模块:创建HTTP服务器、客户端示例
  • mysql数据库双机互为主从设置与数据库断电无法启动处理
  • 一个全面的Vue 3组件通信演示展示
  • 【linux学习指南】初识Linux进程信号与使用
  • 秋招面试基础总结,Java八股文基础(串联知识),四万字大全
  • 深入浅出分布式缓存:原理与应用
  • vue3 + ts:开发插件 / Plugins / 注册全局实例 / 在 template 与 setup 中使用 / provide、inject
  • react后台管理系统(三)
  • 下载并安装Visual Studio 2017过程
  • Vue.observable 全解析:Observable 是什么及使用场景剖析
  • React 前端框架深度剖析
  • Macos远程连接Linux桌面教程;Ubuntu配置远程桌面;Mac端远程登陆Linux桌面;可能出现的问题
  • RT-DETR:替代YOLO的更快实时目标检测模型及其Pytorch实现【附源码】
  • VirtIO实现原理之数据结构与数据传输演示(1)
  • python小课堂(一)
  • 二进制 分析工具:Radare2、r2frida、Binutils、file、string、as、nm、ldd、objdump、readelf、strip
  • pywinauto常见用法详解
  • 【linux】基础-Git使用
  • Redis 在实际业务中的高效应用
  • 递推进阶与入门递归
  • [Java]微服务体系下的用户身份认证方案
  • 【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
  • C++:用红黑树封装map与set-2
  • 数据结构每日一题|判断链表环形结构并返回环的起始节点
  • QT6 android生成release版本注意事项
  • 【VRChat 改模】着色器(shader)简介、预制体(prefab)简介