Task2 数据读取与数据分析

文章目录

  • Task2 数据读取与数据分析
    • 数据读取
    • 数据分析
      • 句子长度分析
    • 新闻类别分布
    • 字符分布统计
    • 数据分析的结论
    • 通过数据分析,我们还可以得出以下结论:
    • 本章小结
    • 本章作业
    • 参考文献

数据读取

import pandas as pd
import matplotlib.pyplot as plt
ts_path = '/Users/gaomingjun/PycharmProjects/Datawhale/nlp/train_set.csv'
train_df = pd.read_csv(ts_path, encoding= 'unicode_escape',sep='\t',nrows= 100)
#这里加上parameter 'encoding'是因为之前UTF-8对train_set.csv解码错误了

‘’'在数据集中标签的对应的关系如下:{‘科技’: 0, ‘股票’: 1, ‘体育’: 2, ‘娱乐’: 3, ‘时政’: 4,
‘社会’: 5, ‘教育’: 6, ‘财经’: 7, ‘家居’: 8, ‘游戏’: 9, ‘房产’: 10, ‘时尚’: 11, ‘彩票’: 12,
‘星座’: 13}

print(train_df.head())
 label        text
0      2  2967 6758 339 2021 1854 3731 4109 3792 4149 15...
1     11  4464 486 6352 5619 2465 4802 1452 3137 5778 54...
2      3  7346 4068 5074 3747 5681 6093 1777 2226 7354 6...
3      2  7159 948 4866 2109 5520 2490 211 3956 5520 549...
4      3  3646 3055 3055 2490 4659 6065 3370 5814 2465 5...
#第一列为新闻的类别,第二列为新闻的字符。

数据分析

此步骤我们读取了所有的训练集数据,在此我们通过数据分析希望得出以下结论:

  • 赛题数据中,新闻文本的长度是多少?
  • 赛题数据的类别分布是怎么样的,哪些类别比较多?
  • 赛题数据中,字符分布是怎么样的?

句子长度分析

#在赛题数据中每行句子的字符使用空格进行隔开,所以可以直接统计单词的个数来得到每个句子的长度。
#统计并如下:
train_df['text_len'] = train_df['text'].apply(lambda x: len(x.split(' ')))
#新增了一行'text_len'print(train_df.head()
   label                                               text  text_len
0      2  2967 6758 339 2021 1854 3731 4109 3792 4149 15...      1057
1     11  4464 486 6352 5619 2465 4802 1452 3137 5778 54...       486
2      3  7346 4068 5074 3747 5681 6093 1777 2226 7354 6...       764
3      2  7159 948 4866 2109 5520 2490 211 3956 5520 549...      1570
4      3  3646 3055 3055 2490 4659 6065 3370 5814 2465 5...       307
#使用describe()统计后可得出:
print(train_df['text_len'].describe())
count     100.000000
mean      872.320000
std       923.138191
min        64.000000
25%       359.500000
50%       598.000000
75%      1058.000000
max      7125.000000
#下图将句子长度绘制了直方图,可见大部分句子的长度都几种在2000以内。
plt.hist(train_df['text_len'], bins=200)
plt.xlabel('Text char count')
plt.title("Histogram of char count")
#plt.show()

新闻类别分布

#接下来可以对数据集的类别进行分布统计,具体统计每类新闻的样本个数。
train_df['label'].value_counts().plot(kind='bar')
plt.title('News class count')
plt.xlabel('category')
#plt.show()#从统计结果可以看出,赛题的数据集类别分布存在较为不均匀的情况。在训练集中科技类新闻最多,
#其次是股票类新闻,最少的新闻是星座新闻。

字符分布统计

#接下来可以统计每个字符出现的次数,首先可以将训练集中所有的句子进行拼接进而划分为字符,并统计每个字符的个数
from collections import Counter'''
join() Concatenate any number of strings.
The string whose method is called is inserted in between each given string.
The result is returned as a new string.
Example: '.'.join(['ab', 'pq', 'rs']) -> 'ab.pq.rs'
'''
all_lines = ' '.join(list(train_df['text']))print(all_lines)
2967 6758 339 2021 1854 3731 4109 3792 4149 1519 2058 3912 2465 2410 1219 6654...
'''
Create a new, empty Counter object. And if given, count elements from an
input iterable. Or, initialize the count from another mapping of elements to
their counts.
E.g
Counter({'a': 4, 'b': 2})
这里表示有4个'a',2个'b'
'''
word_count = Counter(all_lines.split(" "))print(len(word_count))
=> 2405
这里得出word_count的length为2405,表示一共有2405种word
'''
sorted() Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the reverse
flag can be set to request the result in descending order.
'''
sorted_wc = sorted(word_count.items(), key=lambda d:d[1], reverse = True)
'''
print(sorted_wc[0]) => ('3750', 3702)
print(sorted_wc[-1]) => ('5034', 1)
这里print出整理好的word_count(sorted_wc)的[0](第一个元素)和[-1](最后一个元素)
descending的排序,所以第一个是word(3750)出现的最多(3702次),最后一个是word(5034)出现的
最少(1次)
'''
#这里还可以根据字在每个句子的出现情况,反推出标点符号。下面代码统计了不同字符在句子中出现的次数,
#其中字符3750,字符900和字符648在20w新闻的覆盖率接近99%,很有可能是标点符号。#这里用set就是为了去掉重复的字符
train_df['text_unique'] = train_df['text'].apply(lambda x: ' '.join(list(set(x.split(' ')))))
all_lines = ' '.join(list(train_df['text_unique']))
word_count1 = Counter(all_lines.split(" "))
sorted_wc = sorted(word_count1.items(), key=lambda d:int(d[1]), reverse = True)'''
print(sorted_wc[0]) => ('3750', 99)
print(sorted_wc[1]) => ('900', 99)
print(sorted_wc[2]) => ('648', 96)
'''

数据分析的结论

通过上述分析我们可以得出以下结论:

  1. 赛题中每个新闻包含的字符个数平均为1000个,还有一些新闻字符较长;
  2. 赛题中新闻类别分布不均匀,科技类新闻样本量接近4w,星座类新闻样本量不到1k;
  3. 赛题总共包括7000-8000个字符;

通过数据分析,我们还可以得出以下结论:

  • 每个新闻平均字符个数较多,可能需要截断;

  • 由于类别不均衡,会严重影响模型的精度;

本章小结

本章对赛题数据进行读取,并新闻句子长度、类别和字符进行了可视化分析。

本章作业

  1. 假设字符3750,字符900和字符648是句子的标点符号,请分析赛题每篇新闻平均由多少个句子构成?
  2. 统计每类新闻中出现次数对多的字符

参考文献

Task2 数据读取与数据分析.

【NLP】Task2 数据读取与数据分析相关推荐

  1. 新闻文本分类 - Task2 数据读取与数据分析

    数据读取 赛题数据虽然是文本数据,每个新闻是不定长的,但任然使用csv格式进行存储.因此可以直接用Pandas完成数据读取的操作. import pandas as pd train_df = pd. ...

  2. Datawhale零基础入门NLP赛事 - Task2 数据读取与数据分析

    用pandas处理一下数据,训练集的shape为(200000, 2),建议刚开始可以读取几百条看看效果,全部读取的话内存大概要12G左右才能进行正常处理. import pandas as pd t ...

  3. 天池零基础入门NLP竞赛实战:Task1Task2 数据读取与数据分析

    Task1&Task2 数据读取与数据分析 赛题数据是文本数据,每个新闻是不定长的,使用csv格式进行存储.因此可以直接用Pandas完成数据读取的操作. import pandas as p ...

  4. NLP实践(新闻文本分类)-数据读取与数据分析

    数据读取与数据分析 读取数据 数据分析 句子长度分析 新闻类别分类 字符分布统计 统计出现频率最多的字符 数据分析结论 总结 读取数据 赛题数据虽然是文本数据,每个新闻是不定长的,但任然使用csv格式 ...

  5. 计算机视觉实践(街景字符编码识别)-Task2 数据读取与数据扩增

    计算机视觉实践(街景字符编码识别)-Task2 数据读取与数据扩增 2.1.数据读取与数据扩增 本章主要内容为数据读取.数据扩增方法和Pytorch读取赛题数据三个部分组成. 2.1 学习目标 学习P ...

  6. Datawhale 零基础入门CV赛事-Task2 数据读取与数据扩增

    文章目录 数据读取 图像读取 1.pillow 2.opencv 数据读取 数据扩增 数据读取 导入需要的包以及文件路径 import json, glob import numpy as np fr ...

  7. 零基础入门CV赛事—街景字符编码识别—task2数据读取与扩增

    数据读取与扩增 上节学习了街景字符编码识别的解题思路,让我们对本赛题有了基本的idea,这节在定长字符编码的思路基础上学习读取数据和数据扩增. 图像数据读取 由于赛题数据是图像数据,赛题的任务是识别图 ...

  8. NLP(新闻文本分类)——数据读取与数据分析

    初始数据 import pandas as pd df_train = pd.read_csv('E:/python-project/deep-learning/datawhale/nlp/news- ...

  9. 【数据分析进阶】DCIC竞赛-task2 数据可视化

    [数据分析进阶]DCIC竞赛-task2 数据可视化 数据可视化介绍 常规可视化 可视化组成元素 可视化图标类型 地图可视化 赛题可视化 1. 24小时巡游成统计数量 2. 24小时巡游车平均GPS速 ...

最新文章

  1. 折叠式菜单 html,JQuery实现折叠式菜单的详细代码
  2. kohana分析之主程序加载流程
  3. OCP 042全真试题讲解
  4. OFDM同步算法之Park算法
  5. luogu3244 bzoj4011 HNOI2015 落忆枫音
  6. 【概率论与数理统计】如何理解自由度n?
  7. 「直播回顾」Mars:加速数据科学的新方式
  8. 武汉将投放5亿元消费券,4月19日微信率先开抢
  9. io hang linux 原理,Linux 避免IO hang
  10. 《深度学习Python实践》第13章——审查回归算法
  11. Excel单页导出以及多sheet导出
  12. C语言-输入任意多个数字,数字间用空格隔开,然后将数字求和。
  13. Oracle 计算时间差
  14. 2022年制造业单项冠军行业研究报告
  15. C/C++的刷题练习之牛客网,一个友好的网站
  16. Android锁屏壁纸 代码,android 锁屏壁纸和桌面壁纸的设置实现
  17. Excel高级子列合并
  18. Python float()函数
  19. 面包板入门电子制作 学习笔记6
  20. winscp 登录 am4379 的 linux系统 连接被意外关闭

热门文章

  1. GC是什么,为什么要有GC?
  2. 新版BIOS设置U盘启动
  3. 基于二叉链表的二叉树高度的计算
  4. manjaro linux 显卡配置(笔记本可以进来看)
  5. 分享TDA2030A,2.1改2.0,加两颗4558D组成运放高,中,低调音(音调)电路
  6. SQL语句(包含:求统计值、合格率、合格次数、保留两位小数等)
  7. Fastjson 漏洞分析
  8. 延世大学有没有计算机专业,韩国延世大学介绍及专业设置
  9. CCF201812-5 管道清洁【无源汇上下界最小费用可行流】
  10. Jackson json转为java对象时遇到不规范的命名规则处理