视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python版数据挖掘实验5报告:使用朴素贝叶斯进行社会媒体挖掘
2025-10-01 20:46:45 责编:小OO
文档
一、实验名称:使用朴素贝叶斯进行社会媒体挖掘

1、实验目的:

使用朴素贝叶斯进行社会媒体挖掘

2、实验内容:

学习朴素贝叶斯算法原理,并使用朴素贝叶斯进行社会媒体挖掘

3、实验环境(设备、软件、实验数据):

设备:笔记本电脑

    软件:Python idle

    实验数据:python_classes.data、python_tweets.data    

4、实验步骤:

1.安装相关Python库Json、nltk、Numpy、Sklearn、;

2.从社交网站下载数据;

import 

consumer_key = ""

consumer_secret = ""

access_token = ""

access_token_secret = ""

authorization = .OAuth(access_token, access_token_secret,

consumer_key, consumer_secret)

import os

output_filename = os.path.join(os.path.expanduser("~"),"Data", "", "python_tweets.json")

import json

t = .Twitter(auth=authorization)
3.获取到Twitter消息,使用json库的dump函数将其转换为字符串形式后,写入到输出文件中;

with open(output_filename, 'a') as output_file:

search_results = t.search.tweets(q="python", count=100)['statuses']

for tweet in search_results:

    if 'text' in tweet:

        output_file.write(json.dumps(tweet))

        output_file.write("\\n\\n")

4.加载库,提取消息;

import os

import json

from sklearn.feature_extraction import DictVectorizer

from sklearn.naive_bayes import BernoulliNB

import numpy as np

from sklearn.base import TransformerMixin

from nltk import word_tokenize

from sklearn.model_selection import cross_val_score

from sklearn.pipeline import Pipeline

# 添加文件路径,路径最好不要出现中文 

input_filename = os.path.join("../", "Data", "", "python_tweets.json")

labels_filename = os.path.join("../", "Data", "", "python_classes.json")

#加载消息。我们只对消息内容感兴趣,因此只提取和存储它们的text值,存在tewwts[]内

tweets = []

with open(input_filename) as inf:

    for line in inf:

# strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

        if len(line.strip()) == 0:

            continue

        tweets.append(json.loads(line)['text'])

#加载数据集:消息的类别(设置消息的类别为1或0)

with open(labels_filename) as inf:

    labels = json.load(inf)
5.构造一个用于抽取特征的类,返回结果为一个元素为字典的列表,第一个字典的各项为第一条消息中的所有词语;

class NLTKBOW(TransformerMixin):

    def fit(self, X, y=None):

        return self

    def transform(self, X):

    #word_tokenize 对句子进行分词

        return [{word: True for word in word_tokenize(document)} for document in X]

6.抽取特征,将字典转换为矩阵,分类器安装顺序组装起来,创建流水线,将之前获取的消息导入流水线进行处理,得出结果;

#流水线的每一步都用元组(‘名称’,步骤)来表示。现在来创建流水线。

#具体使用流水线在第三章实验流水线。

pipeline = Pipeline([('bag-of-words', NLTKBOW()), ('vectorizer', DictVectorizer()), ('naive-bayes', BernoulliNB())])

#通过交叉检验使用流水线,导入数据

scores = cross_val_score(pipeline, tweets, labels, scoring='f1',cv=3)

print("Score: {:.3f}".format(np.mean(scores)))
输出结果:

5、总结及心得体会:

    通过本次实验,我学习朴素贝叶斯算法原理,并使用朴素贝叶斯进行社会媒体挖掘,学会了如何到社交网络上获取数据并进行分析处理。下载本文

显示全文
专题