本次学习来自Coogle数据科学:30天入门数据竞赛
学习赛来自于:https://tianchi.aliyun.com/competition/entrance/531810/information
读取数据
import numpy as np
import pandas as pd
data_path = 'data/'
save_path = 'result/'
train_data = pd.read_csv(data_path+'train_set.csv')
test_data = pd.read_csv(data_path+'test_a.csv')
# 查看训练数据
train_data.head()
label\ttext | |
---|---|
0 | 2\t2967 6758 339 2021 1854 3731 4109 3792 4149... |
1 | 11\t4464 486 6352 5619 2465 4802 1452 3137 577... |
2 | 3\t7346 4068 5074 3747 5681 6093 1777 2226 735... |
3 | 2\t7159 948 4866 2109 5520 2490 211 3956 5520 ... |
4 | 3\t3646 3055 3055 2490 4659 6065 3370 5814 246... |
# 查看测试集
test_data.head()
text | |
---|---|
0 | 5399 3117 1070 4321 4568 2621 5466 3772 4516 2... |
1 | 2491 4109 1757 7539 648 3695 3038 4490 23 7019... |
2 | 2673 5076 6835 2835 5948 5677 3247 4124 2465 5... |
3 | 4562 4893 2210 4761 3659 1324 2595 5949 4583 2... |
4 | 4269 7134 2614 1724 4464 1324 3370 3370 2106 2... |
可以看到我们的训练数据集是以’\t’进行分隔的字符串,需要我们手动将其改成dataframe的格式
train_df = pd.read_csv(data_path+'train_set.csv', sep='\t')
#统计每行单词数
train_df['word'] = train_df['text'].apply(lambda x: len(x.split(' ')))
train_df
label | text | word | |
---|---|---|---|
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 |
... | ... | ... | ... |
199995 | 2 | 307 4894 7539 4853 5330 648 6038 4409 3764 603... | 868 |
199996 | 2 | 3792 2983 355 1070 4464 5050 6298 3782 3130 68... | 1142 |
199997 | 11 | 6811 1580 7539 1252 1899 5139 1386 3870 4124 1... | 1180 |
199998 | 2 | 6405 3203 6644 983 794 1913 1678 5736 1397 191... | 179 |
199999 | 3 | 4350 3878 3268 1699 6909 5505 2376 2465 6088 2... | 2098 |
200000 rows × 3 columns
赛题以新闻数据为赛题数据,数据集报名后可见并可下载。赛题数据为新闻文本,并按照字符级别进行匿名处理。整合划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐的文本数据。
赛题数据由以下几个部分构成:训练集20w条样本,测试集A包括5w条样本,测试集B包括5w条样本。为了预防选手人工标注测试集的情况,我们将比赛数据的文本按照字符级别进行了匿名处理。处理后的赛题训练数据如下:
在数据集中标签的对应的关系如下:
{‘科技’: 0, ‘股票’: 1, ‘体育’: 2, ‘娱乐’: 3, ‘时政’: 4, ‘社会’: 5, ‘教育’: 6, ‘财经’: 7, ‘家居’: 8, ‘游戏’: 9, ‘房产’: 10, ‘时尚’: 11, ‘彩票’: 12, ‘星座’: 13}
评价标准为类别f1_score的均值,选手提交结果与实际测试集的类别进行对比,结果越大越好。
可以通过sklearn完成f1_score计算:
from sklearn.metrics import f1_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
f1_score(y_true, y_pred, average='macro')