Python文本数据分析与处理
Python文本数据分析与处理(新闻摘要)
分词
- 使用jieba分词, 注意lcut只接受字符串
过滤停用词
TF-IDF得到摘要信息或者使用LDA主题模型
- TF-IDF有两种
- jieba.analyse.extract_tags(content, topK=20, withWeight=False) # content为string, topK选出20个关键字, withWeight: 每一个关键词同等重要
- 使用gensim库
- from gensim import corpora, models
- dictinary = corpora.Dictionary(word_list) # 为每一个单词分配一个id, 并记录每一个单词的词频到dfs属性中
- corpus = [dictionary.doc2bow(line) for line in word_list] # 得到词库, 形式是(token, id)
- corpus.token2id以[token:id, ...]返回
- # 将数据处理完之后, 才能使用models进行计算
- lda = models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20) # corpus指定语料库, id2word指定字典, id在corpus中, num_toptics指定训练的主题数
- lda.print_topic(1, 10) # 1为topic的id, 10为topic中关键字的个数
- lda.print_topic(3, 10) # 3为返回的topic个数, 10为每一个topic中关键字的个数
- 返回的形式是0.009*"文化" + 0.005*"恋情" + 0.004*"中" + 0.004*"撒" + 0.004*"节目"的列表, 数字为权重
机器学习贝叶斯(文本处理, 判断一句评论是否是侮辱性的[学会了这个, 那么垃圾邮箱, 广告的过滤也一样了, 文本处理贝叶斯的world])
与其他的泰坦尼克号遇难预测等案例不同, 文本处理需要自己在预处理时构建出数据表. 没有后者每一个提供表
不使用第三方库实现的思路
- 获取文本数据
- 格式: data0 = [['Hello', 'buddy'], ['You', 'silly']], labels = [1, 1]等
- 二维list, 一个list表示合并在一起可以表示一句话
过滤停用词得到去掉停用词的集合data
- 对data进行去重(现在使用的算法不需要单词出现的数量, 如果换作其他算法则不一定), 获取data中所有的单词words, words的形式为list
- 实现思路:
- data = set(data): 转换为set达到去重的效果
- data = list(data): 将data转为list, 因为需要单词的顺序
- 实现思路:
- data0的每一个list元素的单词转为0和1, 返回一组向量, 0表示没有该单词, 1表示有该单词
- def NBTrain函数使用贝叶斯进行训练
- 根据labels先判断出bad言论数, 得出其概率
- 缩小范围, 锁定到bad言论中, 计算出每一条bad言论的单词总数与所有bad言论的总数的比值
- 锁定到not bad言论中, 计算出每一条not bad言论的单词总数与所有not bad言论的总数的比值
- 返回三个向量
根据根据贝叶斯公式, 根据输入的测试集向量, 通过贝叶斯公式与NBTrain出来的参数(该参数与贝叶斯公式非常相关)得出p0与p1, 比较大小进行分类借口
使用sklearn的native_bayes模块实现
- 获得数据
- 过滤掉停用词
- 将每一个样本对应的单词以' '.jion合并, 因为之后将单词转为向量的对象需要这样的参数
- 导入sklearn.features_extraction.text.CountVectorizier或者sklearn.features_extraction.text.TfidfVectorizier, 是两种将字符串中的单词转为向量的算法, 后者效果更好, 所以以他为例
- tfidf = TfidVectorizier() # 有一个ngram_range可选参数, (1, 4)表示得到的feature为1个, 2个依次增加到3个, 3就是最终每一个句子的向量的长度
- tfidf_fit = tfidf.fit_transform(texts) # texts的形式['I am myself', 'Do not say it', ...]
- tfidf_fit.get_feature_names()返回单词list
- tfidf_fit.toarray()返回转换后的向量
- 现在得到了我们需要用于建模的数据表了(前面就是特征提取的操作, 是机器学习中最难的部分, 目的就是为了得到可以用于建模的数据表)
- 将数据分成训练集和测试集
- 导入native_bayes模块中的MultinomialNB类对象
- clf = MultinomialNB()
- clf.fit(X_train.values.tolist(), y_train.values.tolist()) # bayes坑的地方, 传入的必须是list, 内部不提供转换
- 评估
- clf.score(X_test.values.tolist(), y_test.values.tolist())
Python文本数据分析与处理的更多相关文章
- 利用Python进行数据分析——Ipython
利用Python进行数据分析--Ipython 一.Ipython一些常用命令 1.TAB自动补全 2.变量+? 显示相关信息 3.函数名+??可以获取函数的代码 4.使用通配符* np.load? ...
- 基于Python的数据分析(2):字符串编码
在上一篇文章<基于Python的数据分析(1):配置安装环境>中的第四个步骤中我们在python的启动步骤中强制要求加载sitecustomize.py文件并设置其默认编码为"u ...
- $《利用Python进行数据分析》学习笔记系列——IPython
本文主要介绍IPython这样一个交互工具的基本用法. 1. 简介 IPython是<利用Python进行数据分析>一书中主要用到的Python开发环境,简单来说是对原生python交互环 ...
- 利用Python进行数据分析_Pandas_数据加载、存储与文件格式
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 pandas读取文件的解析函数 read_csv 读取带分隔符的数据,默认 ...
- 今天整理了几个在使用python进行数据分析的常用小技巧、命令。
提高Python数据分析速度的八个小技巧 01 使用Pandas Profiling预览数据 这个神器我们在之前的文章中就详细讲过,使用Pandas Profiling可以在进行数据分析之前对数据进行 ...
- 利用python进行数据分析PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:hi2j 内容简介 [名人推荐] "科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法.本书在未来几年里肯定会成为Python领域中技术计 ...
- "利用python进行数据分析"学习记录01
"利用python进行数据分析"学习记录 --day01 08/02 与书相关的资料在 http://github.com/wesm/pydata-book pandas 的2名字 ...
- 算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
随机推荐
- 从底层了解ASP.NET体系结构
导读: 前言 关于ASP.NET的底层的工作机制,最近园子里讨论的甚是火热.相信很多人都看过Rick Strahl先生的一篇经典之作:A low-level Look at the ASP.NET ...
- CentOS6.5上Zabbix3.0的RPM安装【四】-乱码
当Agent添加完成后,部分显示(如cpu负载)出现乱码情况: 解决步骤如下: 1, 在windows7中找一个自己喜欢的字体或者去网上下载一个字体.[以“楷体 常规”为例] 2, 右击”楷体 常规” ...
- Binder学习笔记(八)—— 客户端如何组织Test()请求 ?
还从客户端代码看起TestClient.cpp:14 int main() { sp < IServiceManager > sm = defaultServiceManager(); / ...
- 对接ebay,订单系统开发
要求,从ebay 下载的 csv文件,导入销售订单的系统,成为自己的订单. 首先,上传文件. 第二步,将上传的csv读入系统的一个变量 根据','来分割成一个数组 $str = file_get_co ...
- LB 负载均衡的层次结构(转)
http://blog.csdn.net/mindfloating/article/details/51020767 作为后端应用的开发者,我们经常开发.调试.测试完我们的应用并发布到生产环境,用户就 ...
- luogu2486 [SDOI2011]染色
link 题目大意:给定一个N个点的树,每个点有一个颜色 有M次操作,每次可以修改树某条链所有点变成一个颜色,查询某条链上点的颜色段数 树剖,线段树维护区间合并 我的代码记录的是某个区间左端点颜色.右 ...
- charset=iso-8859-1
今天群里有人在问, 求解:charset="ISO-8859-1"是什么意思 其实我也不大懂,然后就去翻阅了下资料.科普开始: 网页制作中遇到的编码,乱码问题之一:charset= ...
- git ignore文件
创建.gitignore文件来设置git要忽略的文件模式: 官方文件列列表:https://github.com/github/gitignore 1. 所有空行或者以 # 开头的行都会被 Git 忽 ...
- SprimgMVC学习笔记(四)—— @RequestMapping
一.URL路径映射 @RequestMapping(value="item")或@RequestMapping("/item") 当value的值是数组时,可以 ...
- Ueeidor 使用
setContent 要放在 ue.read(function(){ })中... js 字符串参数不要忘记 引号.....而且最好是单引号!!!