学习唐宇迪《python数据分析与机器学习实战》视频

一、数据分析

每一条包括:

theme:新闻关键内容

category:新闻种类

URL:链接

content:新闻内容

额,看着很不舒适……

二、数据预处理

(一)读入数据

import pandas as pd
import jieba#结巴分词模块
import numpy
df_news=pd.read_table('./data/val.txt',names=['category','theme','URL','content'],encoding='utf-8')
df_news=df_news.dropna()
print(df_news.shape)
df_news.head()

(二)使用jieba分词器进行分词

content=df_news.content.values.tolist()
#df_news的content列中,用.values拿到该列值,.tolist代表转换成list格式。
print(content[1000])
content_S=[]
#对每条新闻进行分词
for line in content:current_segment=jieba.lcut(line)if len(current_segment)>1 and current_segment!='\r\n':content_S.append(current_segment)
content_S[1000]

输出索引为1000的该条新闻

输出索引为1000的该条新闻分词后的结果


将分词的结果转换成DateFrame表格形式

#将分词结果转换成DataFrame表格,只有content列
df_content=pd.DataFrame({'content_S':content_S})
df_content.head()

(三)停用词处理

pandas.read_csv(...)

·filepath_or_buffer : str,path对象或类文件对象
        ·sep : str,默认','分隔符使用。
        ·index_col : int,sequence或bool,可选。用作DataFrame的行标签的列。
        ·names  : 类似数组,可选。要使用的列名列表。
        ·quoting  : int或csv.QUOTE_ *实例,默认为0。当文本文件中带有英文双引号时,直接用pd.read_csv进行读取会导致行数减少,此时应该对read_csv设置参数quoting=3或者quoting=csv.QUOTE_NONE
        ·encoding : str,可选。编码以在读/写时使用UTF(例如'utf-8')。

读入停用词文本

#读入停用词文本
stopwords=pd.read_csv('stopwords.txt',index_col=False,sep='\t',quoting=3,names=['stopwords'],encoding='utf-8')
stopwords.head(20)

去除停用词

#去除停用词
def drop_stopwords(contents,stopwords):contents_clean=[]all_words=[]for line in contents:line_clean=[]for word in line:if word in stopwords:continueline_clean.append(word)all_words.append(str(word))contents_clean.append(line_clean)return contents_clean,all_wordscontents=df_content.content_S.values.tolist()
stopwords=stopwords.stopwords.values.tolist()
contents_clean,all_words=drop_stopwords(contents,stopwords)
df_content=pd.DataFrame({'contents_clean':contents_clean})
df_content.head()
#可以看到一些停用词被去掉了,如果想去掉字母的话,将字母加入停用词文本即可

df_all_words=pd.DataFrame({'all_words':all_words})
print(len(df_all_words))
df_all_words.head()

(四)关键词提取

计算所有词语出现的次数

# groupby 以什么为基本。agg() 可以加函数,字符串,字典或字符串/函数列表
# words_count = df_all_words['all_words'].groupby(by=df_all_words['all_words']).agg({'count': numpy.size})
words_count=df_all_words.groupby(by=['all_words'])['all_words'].agg({'count':numpy.size})
# 重置索引,旧索引将作为列添加,可以使用drop参数来避免将旧索引添加为列
words_count=words_count.reset_index().sort_values(by=['count'],ascending=False)
words_count.head()

制作词云

from wordcloud import WordCloud
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib
matplotlib.rcParams['figure.figsize'] = (10.0, 5.0)wordcloud=WordCloud(font_path="./data/simhei.ttf",background_color="white",max_font_size=80)
#字体和颜色
word_frequence = {x[0]:x[1] for x in words_count.head(100).values} #前100个词
wordcloud=wordcloud.fit_words(word_frequence)
plt.imshow(wordcloud)
plt.show()

提取关键词

#使用jieba 和 sklearn都可以进行关键词提取
import jieba.analyse
index=2400
print(df_news['content'][index])
# str.join(sequence)  sequence中用str连接
content_S_str=''.join(content_S[index])
#jieba.analyse.extract_tags 找出关键词。
print(' '.join(jieba.analyse.extract_tags(content_S_str,topK=5,withWeight=False)))

(五)LDA主题模型

from gensim import corpora,models,similarities
import gensim
# 做映射,相当于词袋  输入为ist of list形式
# 单词及其整数id之间的映射。可以理解为python中的字典对象,
# 其Key是字典中的词,其Val是词对应的唯一数值型ID
dictionary=corpora.Dictionary(contents_clean)
# 将文档转换为词袋(BoW)格式= (token_id,token_count)元组的列表。
# doc2bow(document,allow_update = False,return_missing = False )
# 输入为list of str
corpus=[dictionary.doc2bow(sentence) for sentence in contents_clean]
#类似Kmeans自己指定K值
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20)
#第一类主题,显示频率最高的5个
#print(lda.print_topic(1,topn=5))
#20个分类结果
for topic in lda.print_topics(num_topics=20,num_words=5):print(topic[1])

三、用贝叶斯算法进行分类

(一)数据准备

#contents列和category列
df_train=pd.DataFrame({'contents_clean':contents_clean,'label':df_news['category']})
df_train.tail()

#标签种类
df_train.label.unique()

#将标签转换成数值
label_mapping = {"汽车": 1, "财经": 2, "科技": 3, "健康": 4, "体育":5, "教育": 6,"文化": 7,"军事": 8,"娱乐": 9,"时尚": 0}
df_train['label'] = df_train['label'].map(label_mapping)
df_train.head()

(二)划分训练集和测试集

#划分训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(df_train['contents_clean'].values,df_train['label'].values,random_state=1)
x_train[0][1]

(三)list文本转换成string格式(训练集)

#将list文本转换成string格式
words=[]
for line_index in range(len(x_train)):try:words.append(' '.join(x_train[line_index]))except:print(line_index,word_index)
words[0]

(四)使用CountVectorizer转换成向量形式

#使用CountVectorizer
from sklearn.feature_extraction.text import CountVectorizervec = CountVectorizer(analyzer='word', max_features=4000,  lowercase = False)
vec.fit(words)

(五)贝叶斯分类器进行分类

#用于多项式模型的朴素贝叶斯分类器
from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB()
classifier.fit(vec.transform(words), y_train)
'''
transform(raw_documents )
将文档转换为文档术语矩阵,使用符合fit的词汇表或提供给构造函数的词汇表,从原始文本文档中提取令牌计数。
返回为:文档术语矩阵
'''

测试集数据处理

test_words = []
for line_index in range(len(x_test)):try:#x_train[line_index][word_index] = str(x_train[line_index][word_index])test_words.append(' '.join(x_test[line_index]))except:print (line_index,word_index)
test_words[0]

分类结果准确率

#返回给定测试数据和标签的平均准确度
classifier.score(vec.transform(test_words), y_test)

(六)使用tdidf矢量器转换成向量形式

#使用tdidf矢量器
#TfidfVectorizer:多个词组可以不同組合,词库数量变多
from sklearn.feature_extraction.text import TfidfVectorizervectorizer = TfidfVectorizer(analyzer='word', max_features=4000,  lowercase = False)
vectorizer.fit(words)

from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB()
classifier.fit(vectorizer.transform(words), y_train)

分类结果

classifier.score(vectorizer.transform(test_words), y_test)

数据分析案例实战:贝叶斯-新闻分类相关推荐

  1. 新闻数据分析:jieba关键词提取、LDA主题生成、贝叶斯新闻分类

    news_analysis.ipynb import pandas as pd import jieba import numpy #pip install jieba 数据源:http://www. ...

  2. 机器学习实战-贝叶斯算法-24

    贝叶斯-新闻分类 from sklearn.datasets import fetch_20newsgroups from sklearn.model_selection import train_t ...

  3. 八、朴素贝叶斯中文分类实战

    1.朴素贝叶斯中文分类实战 文本分类的流程如下图所示: 朴素贝叶斯中文分类的目录结构 中文分类的目录机构包括停用词文件.训练集文件和和测试集文件,具体内容如下图所示: 2 数据准备与处理 2.1 数据 ...

  4. 朴素贝叶斯实现分类_关于朴素贝叶斯分类及其实现的简短教程

    朴素贝叶斯实现分类 Naive Bayes classification is one of the most simple and popular algorithms in data mining ...

  5. 朴素贝叶斯算法-分类算法

    朴素贝叶斯算法-分类算法 1 概率基础 概率定义为一件事情发生的可能性 联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B) 条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作 ...

  6. 视频教程-Python数据分析案例实战 视频课程-Python

    Python数据分析案例实战 视频课程 计算机硕士,多年工作经验,技术和产品负责人. 多年推荐系统/NLP/大数据工作经验. 负责公司多个AI项目产品落地,包括文本分类.关键词抽取.命名实体识别.对话 ...

  7. python数据分析实战案例-Python数据分析案例实战

    原标题:Python数据分析案例实战 至今我们网站已经开设了多个数据分析系列的课程,大部分都是基于算法思路来开展的,课程中着重点在于算法的讲授.软件的使用,案例只是辅助学习.然而很多学员反映,希望可以 ...

  8. python 数据分析 实际案例-Python数据分析案例实战

    原标题:Python数据分析案例实战 至今我们网站已经开设了多个数据分析系列的课程,大部分都是基于算法思路来开展的,课程中着重点在于算法的讲授.软件的使用,案例只是辅助学习.然而很多学员反映,希望可以 ...

  9. 【海量数据挖掘/数据分析】之 贝叶斯信念网络(贝叶斯信念网络、有向无环图、贝叶斯公式、贝叶斯信念网络计算实例)

    [海量数据挖掘/数据分析]之 贝叶斯信念网络(贝叶斯信念网络.有向无环图.贝叶斯公式.贝叶斯信念网络计算实例) 目录 [海量数据挖掘/数据分析]之 贝叶斯信念网络(贝叶斯信念网络.有向无环图.贝叶斯公 ...

最新文章

  1. 企业数字化转型,AI平台能力建设是关键
  2. 1、SpringBoot------表单校验
  3. 【算法】梯度消失与梯度爆炸
  4. boost::msm::mpl_graph::adjacency_list_graph相关的测试程序
  5. java 数组用字符做下表_JAVA字符串json数组使用Formatter格式化成表格形式
  6. [渝粤教育] 中国地质大学 大学英语(6) 复习题
  7. ueditor工具栏弹出html,UEditor工具栏上自定义按钮、图标、事件、窗口页面
  8. matlab在activex中读取视频,[转载]matlab读取excel数据并显示在excel(activex控件)中
  9. 反射可以使用lambda吗_必读干货帖|车载对讲机使用地网天线可以降低驻波吗?...
  10. 49 字符大小写排序
  11. [基础篇]PHP引用变量
  12. css中字体的大小怎么设置,css样式中怎么设置字体大小
  13. ureport2项目使用
  14. 常微分方程的解析解(方法归纳)以及基于Python的二阶微分方程边值问题的数值算例实现
  15. 国开大学c语言程序设计形考任务1,国开电大《数控编程技术》形考任务1-4答案...
  16. 机器学习方法的基本分类
  17. C语言写的一个贪吃蛇小游戏(windows系统)
  18. asp.net体育用品销售系统
  19. 这15部评分9.0以上纪录片,让你放假后足不出户就可以看遍世界!(附链接)
  20. 利用Javascript制作宾果(BINGO)游戏

热门文章

  1. Android中Textview文字设置不同颜色、下划线、加粗、超链接
  2. 奔跑吧Caffe(在MNIST手写体数字集上用Caffe框架训练LeNet模型)
  3. linux查询数据库oracle端口,Oracle数据库常用命令、Linux监听配置、oracle linux下开放1521端口...
  4. 流量暴增基建告急 网络重构需二次投资
  5. 二手小米价格一览表2022.2.21
  6. Anaconda安装keras简记
  7. 科研项目研究报告文本内容格式
  8. 直播预告 | IAST安装与使用,今晚8点,不见不散~
  9. 系统移植1------U-Boot
  10. 属牛的女孩起名:高贵有气质的女孩名字怎么取