1,本Notebook背景介绍 如果将集搜客分词和情感分析软件生成的结果文件交给sklearn都机器学习库做进一步计算,那么通常需要转换成numpy数组,也可能需要转换成numpy矩阵。而从numpy数组到numpy矩阵,只需要调用numpy一个函数就行了。那么,关键是从分词工具生成的excel文件到numpy数组的转换。这个转换用Pandas桥接一下,都是很简单的过程。总之,路线是:excel转换成Pandas dataframe,然后在转换成numpy数组。 下面以选词结果表为例,展示转换成数组和矩阵需要用到的函数。这是一种最简单的情形,转换过程中没有任何对excel单元格进行处理的过程。 如果处理其他的表和其他目的,可能会难度大一些,比如处理分词效果表:分词效果表中的每一行文字做了切词,词与词之间用空格间隔。如果想在矩阵中,每个词作为一列,每一行填0或者1,表示是否在这一行句子中出现了这个词,那么就需要用python程序先把对应每个词建立每一列。这个过程将在后续的notebook中讲解。 本notebook的python代码主要执行了下面的步骤: 1. 加载选词结果表 2. 将结果转换成数组 3. 将结果转换成矩阵 2,引入需要用到的库 import os import time import numpy as np import pandas as pd 3,输出和常量配置 pd.set_option('display.width', 1000) # 设置字符显示宽度 pd.set_option('display.max_rows', None) # 设置显示最大 # np.set_printoptions(threshold=np.inf) # threshold 指定超过多少使用省略号,np.inf代表无限大 # 存原始数据的目录 raw_data_dir = os.path.join(os.getcwd(), '..\\..\\data\\raw') # 存处理后的数据的目录 processed_data_dir = os.path.join(os.getcwd(), '..\\..\\data\\processed') filename_temp = pd.Series(['词频','分词效果','选词矩阵','选词匹配','选词结果','共词矩阵']) file_word_freq = '' file_seg_effect = '' file_word_choice_matrix = '' file_word_choice_match = '' file_word_choice_result = '' file_co_word_matrix = '' 4,检测data\raw目录下是否有选词结果表 在我们发布的一系列Jupyter Notebook中,凡是处理GooSeeker分词软件导出的结果文件的,都给各种导出文件起了固定的名字。为了方便大家使用,只要把导出文件放在data/raw文件夹,notebook就会找到导出文件,赋值给对应的文件名变量。下面罗列了可能用到的文件名变量: file_word_freq:词频表 file_seg_effect: 分词效果表 file_word_choice_matrix: 选词矩阵表 file_word_choice_match: 选词匹配表 file_word_choice_result: 选词结果表 file_co_word_matrix: 共词矩阵表 【注意】本notebook只使用选词结果表,下面的代码将检查data/raw中有没有选词结果表,如果没有会报错,后面的程序就没法执行了。 # 0:'词频', 1:'分词效果', 2:'选词矩阵', 3:'选词匹配', 4:'选词结果', 5:'共词矩阵' print(raw_data_dir + '\r\n') for item_filename in os.listdir(raw_data_dir): if filename_temp[4] in item_filename: file_word_choice_result = item_filename continue if file_word_choice_result: print("选词结果excel表:", "data\\raw\\", file_word_choice_result) else: print("选词结果excel表:不存在") 输出结果显示: C:\Users\work\workspace_219\notebook\Jupyter Notebook将分词结果转换成数组或矩阵\notebook\eda\..\..\data\raw 选词结果excel表: data\raw\ 选词结果_202109291141532740.xlsx 5,读取选词结果表 df_word_choice_result = pd.read_excel(os.path.join(raw_data_dir, file_word_choice_result)) 6,查看excel表前10行数据 df_word_choice_result.head(10) 输出结果显示: 标签词 词频 词性 0 下岗 2805 动词 1 没有 1712 动词 2 企业 1320 名词 3 时候 1233 名词 4 工人 1094 名词 5 国家 1092 名词 6 工作 985 动词 7 问题 710 名词 8 知道 670 动词 9 可以 660 动词 7,将结果转换成数组 7.1,df.values array_word_choice_result = df_word_choice_result.values display(array_word_choice_result) 输出结果显示: array([['下岗', 2805, '动词'], ['没有', 1712, '动词'], ['企业', 1320, '名词'], ..., ['重工业', 41, '名词'], ['民企', 30, '其他'], ['民营企业', 27, '名词']], dtype=object) 7.2,np.array(df) np_array_word_choice_result = np.array(df_word_choice_result) np_array_word_choice_result 输出结果显示: array([['下岗', 2805, '动词'], ['没有', 1712, '动词'], ['企业', 1320, '名词'], ..., ['重工业', 41, '名词'], ['民企', 30, '其他'], ['民营企业', 27, '名词']], dtype=object) 8,将结果转换为矩阵 8.1,numpy matrix()和numpy mat/asmatrix 区别:如果输入已经是矩阵或ndarray,则asmatrix不会复制。等效于matrix(data, copy=False)。详细参看:numpy.asmatrix — NumPy v1.21 Manual np_matrix_word_choice_result = np.matrix(df_word_choice_result) np_matrix_word_choice_result 输出结果显示: matrix([['下岗', 2805, '动词'], ['没有', 1712, '动词'], ['企业', 1320, '名词'], ..., ['重工业', 41, '名词'], ['民企', 30, '其他'], ['民营企业', 27, '名词']], dtype=object) np_matrix_word_choice_result = np.mat(df_word_choice_result) np_matrix_word_choice_result 输出结果显示: matrix([['下岗', 2805, '动词'], ['没有', 1712, '动词'], ['企业', 1320, '名词'], ..., ['重工业', 41, '名词'], ['民企', 30, '其他'], ['民营企业', 27, '名词']], dtype=object) 9,下载本Notebook 使用Jupyter Notebook将分词结果转换成数组或矩阵 |