刚刚巴菲特开完股东大会,特朗普又在Twitter来了一出。让股票市场跌宕起伏。
Python学习交流群:1004391443,这里是python学习者聚集地,有大牛答疑,有资源共享!小编也准备了一份python学习资料,有想学习python编程的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。
这也诞生了一个新词:
一推就倒
▍形容一条Twitter就吓得屁滚尿流,崩溃倒下的东西,多用于股市。
接下来我们就应用技术手段,基于Python,建立一个工具,可以阅读和分析川普的Twitter。然后判断每条特定的Twitter是否具有川普本人的性格。
同时我们还结合了其他的方法,包括 Deep Learning 、 Machine Learning 、 **NLP、LSTM **等基于 Python 、 Keras 等。
万字干货
对川普的Twitter做个全面分析!
让大家以后面对川普冷不丁的Twitter有所准备!
分析一
为了简单起见,我们将每条Twitter分解成单词。
如你所见,我们手动复制了Trump的一条Twitter,将其分配给一个变量,并使用split()方法将其分解为单词。split()返回一个列表,我们称之为tweet_words。我们可以使用len函数计算列表中的项数。在第4行和第5行中,我们打印前面步骤的结果。注意第5行中的str函数。为什么在那里?
最后,在第9行中,我们循环遍历tweet_words:也就是说,我们逐个遍历tweet_words项,将其存储在w中,然后在第10行和第11行处理w。所以,第10行和第11行被执行了很多次,每一次都有不同的w值。你应该能够说出第10行和第11行是做什么的。
将此代码保存为 first.py 。如果你使用Mac或Linux,请转到终端,在保存文件的文件夹中,输入 python3.6 first.py ,然后按Enter键。在Windows上,您需要在命令提示符下键入 py first.py 。
在这里,我们尝试改进我们的代码,这样我们就可以知道一条Twitter是“坏”还是“好”。
这里的想法是创建两个由好词和坏词组成的列表,并根据它们从这些列表中包含的词数增加或减少推文的值。
Python学习交流群:1004391443,这里是python学习者聚集地,有大牛答疑,有资源共享!小编也准备了一份python学习资料,有想学习python编程的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。
因此,在第16行和第17行中,我们初始化了两个值,每个值表示一条Twitter中好词和坏词的数量。在第19行和第20行中,我们创建了好单词和坏单词的列表。当然,这些都是非常主观的列表,所以请根据你自己的个人意见随意更改这些列表。
在第21行,我们逐个检查了Twitter中的每个单词。在第22行打印之后,我们检查这个单词是否存在于 good_words 或 bad_words 中,并分别增加 number_of_good_words 或 number_of_bad_words 。如你所见,要检查列表中是否存在项,可以使用 in 关键字。
另外,请注意if的语法:你需要在条件后面输入 colon (:) 。而且,在if中应该执行的所有代码都应该缩进。
到目前为止,我们的假设是,词语不是好就是坏。但在现实世界中,词语的权重各不相同:awesome比alright好,bad比terrible好。到目前为止,我们的代码还没有考虑到这一点。
为了解决这个问题,我们使用名为字典的Python数据结构。字典是一个条目列表,每个条目都有一个键和一个值。我们将这些项称为键值对。因此,字典是键值对的列表(有时称为键值存储)。
我们可以通过在花括号中放入key:values列表来定义字典。请看下面的代码:
正如你所看到的,我们只使用了一个字典。给不好的词一个负的权重,好的词一个正的权重。确保值在-1.0和+1.0之间。稍后,我们使用word_weights字典检查其中是否存在单词,并计算分配给单词的值。这与我们在前面的代码中所做的非常相似。
这段代码的另一个改进是它的结构更好:我们尝试将代码的不同逻辑部分分离到不同的函数中。函数是用def关键字定义的,后跟着一个函数名,后面跟着圆括号中的零个或多个参数。
我们的代码中仍然存在一些明显的缺陷。例如,我们可以假设一个名词,无论是单数还是复数,都具有相同的值。例如,单词 **tax **和 **taxes **被解释为两个不同的单词,这意味着我们的字典中需要有两个不同的条目,每个条目对应一个。为了避免这种冗余,我们可以尝试对Twitter中的单词进行词干处理,这意味着尝试将每个单词转换为其词根。例如,tax 和 taxes 都将被纳入tax。
这是一个非常复杂的任务: 自然语言非常复杂 ,构建一个stemmer需要花费大量的时间和精力。此外,这些任务以前也做过。那么,为什么要重新发明轮子,尤其是如此复杂的一个?相反,我们将使用其他程序员编写的代码,并将其打包到名为NLTK的Python模块中。
安装NLTK
我们可以在命令行中运行 pip install nltk来 安装NLTK。但是,这将尝试在我们的系统上全局安装模块。这并不好:我们的系统上可能有使用相同模块的程序,安装相同模块的新版本可能会带来问题。此外,如果我们可以将所有模块安装在代码所在的同一目录中,则只需复制该目录并在不同的机器上运行。
因此,我们从创建一个虚拟环境开始。
首先,确保与代码所在的文件夹相同。然后在终端中输入以下内容:
如果你在Windows上,在命令提示符中输入以下内容:
这将在当前文件夹中创建Python的本地副本及其所需的所有工具。
现在,需要告诉你的系统使用Python的这个本地副本。在Mac或Linux上,使用以下命令:
Windows:
如果所有操作都正确,应该会看到命令提示符发生了更改。最有可能的是,您应该在命令行的开头看到(env)。
我们使用pip命令安装Python包。但是首先,让我们运行以下命令来确保我们使用的是最新版本的pip:
当你使用Mac时,要确保运行以下命令:
现在,你可以使用pip命令安全地安装NLTK:
最后,运行Python解释器,运行Python(如果是在Windows上,则运行py),并在解释器中输入以下命令:
应该会弹出一个窗口。 选择包含 popular 标识符的项目,然后单击download。这将下载popularNLTK模块使用的所有必要数据。
现在我们已经安装了NLTK,让我们在代码中使用它。
使用NLTK
为了使用Python中的模块,我们需要首先导入它。在第11行,我们告诉Python要使用函数 word_tokenize ,在第12行中,我们说要使用 nltk.stem.porter 模块中的所有内容。
在第14行中,我们使用 PorterStemmer 创建了一个 stemmer 对象,在第18行中,我们使用 word_tokenize 而不是 split 来以更智能的方式将Twitter分解为单词。
最后,在第31行,我们使用了 stemmer.stem 查找单词的词干,并将其存储在 stemmed_word 中。其余的代码与前面的代码非常相似。
你应该记得,我们在第20到24行中使用了一个词对词的字典。在我们的程序中有这么长的单词列表是一种不好的做法。想想看,当我们决定更改单词到值的字典时(比如添加一个单词或更改一个单词的权重),我们需要打开并编辑代码。这是有问题的,因为:
1、我们可能会错误地更改代码的其他部分。
2、添加的单词越多,代码的可读性就越差。
3、不同的人使用相同的代码可能想要定义不同的字典(例如,不同的语言、不同的权重……),如果不更改代码,他们就无法做到这一点。
由于这些(以及更多)原因,我们需要将数据从代码中分离出来。换句话说,我们需要将字典保存在单独的文件中,然后将其加载到程序中。
文件有不同的格式,这说明数据是如何存储在文件中的。例如,JPEG、GIF、PNG和BMP都是不同的图像格式,用于说明如何在文件中存储图像。XLS和CSV也是在文件中存储表格数据的两种格式。
在本例中,我们希望存储键值数据结构。JSON数据格式是存储这类数据最常用的数据格式。下面是一个JSON文件的例子:
正如你所看到的,它看起来就像一个Python字典。因此,继续创建一个新文件,并将其命名为“word_weight .json”。
现在,我们需要做的就是告诉Python将这个文件加载到word_weights中。
打开文件
为了打开文件,我们使用open函数。它打开一个文件并返回一个file对象,该对象允许我们对文件执行操作。每当我们打开一个文件,我们需要关闭它。这确保文件对象上的所有操作都被刷新到文件。
在这里,我们希望加载文件内容并将其分配给一个变量。我们知道文件的内容是JSON格式。所以我们需要做的就是导入Python的 json 模块,并将它的 load 函数应用到我们的file对象上:
但明确使用 close 可能会有问题:在大型程序中,很容易忘记关闭文件,而 并且可能会发生关闭在一个块内部,而这个块一直没有执行(例如 if )。
为了避免这些问题,我们可以使用 with 关键字。负责关闭文件。
因此,当代码退出with块时,使用with打开的文件将自动关闭。确保在处理文件时始终使用with编码模式。很容易忘记关闭文件,这可能会带来许多问题。
我们可以进一步改进这段代码,将加载JSON文件和分析Twitter转换为两个函数。
现在,我们的程序所做的就是分配一个Twitter字符串,加载一个单词权重字典,并使用加载的字典分析该Twitter字符串。
从Twitter读取推文
为了从Twitter读取数据,我们需要访问它的API(应用程序编程接口)。API是应用程序的接口,开发人员可以使用它访问应用程序的功能和数据。
通常,Twitter、Facebook等公司允许开发人员通过API访问用户数据。但是, 你可能知道,用户数据对这些公司非常有价值。此外,当涉及到用户数据时,许多安全和隐私问题就会出现。因此,这些公司希望跟踪、验证和限制开发人员及其应用程序对其API的访问。
因此,如果您想访问Twitter数据,首先需要登录Twitter(如果您没有Twitter帐户,则需要登录),然后访问https://apps.twitter.com/。单击Create New App按钮,填写表单,然后单击Create your Twitter Application按钮。
在新页面中,选择API Keys选项卡,并单击Create my access token按钮。将生成一对新的访问令牌,即Access令牌密钥。。将这些值与API密钥和API密钥一起复制。
现在,启动终端或命令提示符,转到工作目录,然后激活虚拟环境(提醒:如果你在Mac / Linux上运行 .env / bin / activate ,如果你在Windows上运行 env / Scripts / activate )。现在,使用pip安装 python-twitter 包:
这将安装一个popular包,用于在Python中使用Twitter API。
网友评论