数据读取与分析
- 数据读取
- 数据分析
- 句子长度分析
- 类别分布
- 字符分布统计
- 数据分析的结论
import pandas as pd
train_df = pd.read_csv('/Users/debroon/Desktop/train_set.csv', sep='\t', nrows=100)
train_df.head()
# 查看 top5 的数据
一切技术的出现都是为了解决现实问题,而现实问题分为简单问题和复杂问题。
数据分析,核心是分析思维。
分析思维不是要证明你智商很高,而是考察你面对问题展开的分析能力和分析思维。
书上的 5 w 2 h 5w2h 5w2h 这样的常用分析方法,其实根本用不在数据分析工作里。最常用的分析方法其实是:
握常用的业务数据指标,你才可以灵活应对面试中提出的业务问题。我整理了下面常用的业务指标,准备好这些内容,就可以应对 90 90 90 %的面试了。
在读取完成数据集后,我们还可以对数据集进行数据分析的操作。
虽然对于非结构数据并不需要做很多的数据分析,但通过数据分析还是可以找出一些规律的。
读取了所有的训练集数据,在此我们通过数据分析希望得出以下结论:
在赛题数据中每行句子的字符使用空格进行隔开,所以可以直接统计单词的个数来得到每个句子的长度。统计并如下:
train_df['text_len'] = train_df['text'].apply(lambda x: len(x.split(' ')))
print(train_df['text_len'].describe())
运行值:
Populating the interactive namespace from numpy and matplotlib
count 200000.000000
mean 907.207110
std 996.029036
min 2.000000
25% 374.000000
50% 676.000000
75% 1131.000000
max 57921.000000
Name: text_len, dtype: float64
每个句子平均由907个字符构成,最短的句子长度为2,最长的句子长度为57921,所以说,给定的文本/句子比较长。
可视化,将句子长度绘制了直方图:
import matplotlib.pyplot as plt
_ = plt.hist(train_df['text_len'], bins=200)
plt.xlabel('Text char count')
plt.title("Histogram of char count")
接着,对数据集的类别进行分布统计,具体统计每类新闻的样本个数。
train_df['label'].value_counts().plot(kind='bar')
plt.title('News class count')
plt.xlabel("category")
从统计结果可以看出,赛题的数据集类别分布存在较为不均匀的情况。在训练集中科技类新闻最多,其次是股票类新闻,最少的新闻是星座新闻。
接下来,统计每个字符出现的次数,首先可以将训练集中所有的句子进行拼接进而划分为字符,并统计每个字符的个数。
from collections import Counter
all_lines = ' '.join(list(train_df['text']))
word_count = Counter(all_lines.split(" "))
word_count = sorted(word_count.items(), key=lambda d:d[1], reverse = True)
print(len(word_count))
print(word_count[0])
print(word_count[-1])
运行值:
2405
('3750', 3702)
('5034', 1)
从统计结果中可以看出,在训练集中总共包括 2405 2405 2405 个字,其中编号 3750 3750 3750 的字出现的次数最多,编号 5034 5034 5034 的字出现的次数最少。
这里还可以根据字在每个句子的出现情况,反推出标点符号。
下面代码统计了不同字符在句子中出现的次数,其中字符 3750 3750 3750,字符 900 900 900 和字符 648 648 648 在 20 w 20w 20w 新闻的覆盖率接近 99 99 99%,很有可能是标点符号。
train_df['text_unique'] = train_df['text'].apply(lambda x: ' '.join(list(set(x.split(' ')))))
all_lines = ' '.join(list(train_df['text_unique']))
word_count = Counter(all_lines.split(" "))
word_count = sorted(word_count.items(), key=lambda d:int(d[1]), reverse = True)
print(word_count[0])
print(word_count[1])
print(word_count[2])
运行值:
('3750', 99)
('900', 99)
('648', 96)
通过上述分析我们可以得出以下结论:
通过数据分析,我们还可以得出以下结论: