相关产品:

 

近期搜索 > 

筛选流 > 

简介

 

通过 Twitter API,你可以利用公共对话,了解正在发生的事情、发现见解、确定趋势等。公共对话中的大量数据和其多样性是使用 Twitter API 构建数据集的巨大优势。  同样地,这些动态也对确保你拥有质量和数量方面的正确数据带来了挑战。 

 

构建高质量的筛选器可确保你最终获得的数据足以满足你的用例并能够代表你想要分析的对话。此外,构建适当的筛选器可显著减少清理数据集所需的时间和精力,并确保在访问限制内工作。花时间创建高质量的筛选器可能是你成功研究 Twitter 数据所要采取的最重要的步骤之一。

 

本指南介绍了构建筛选器以供分析的最佳实践,包括:

  • 确定需要哪些数据时需要考虑的关键问题

  • 需要考虑的可能会更改或影响数据集的重要因素 

  • 新 Twitter API 提供的新运算符

  • 使用运算符构建规则和查询的示例

  • 收集数据以供研究和分析时需要考虑的其他因素

 

目录

 

确定正确数据的范围

筛选类型

收集推文时需要考虑的重要因素

查看运算符及其与研究和分析用例的相关性

示例查询和规则

其他资源


 

确定正确数据的范围

 

在开始使用任何运算符或开始构建规则来获取 Twitter 数据之前,定义数据需求的范围至关重要。本文介绍关于“使用 Twitter 数据执行更多任务”的内容,强调了在计划用例所需的数据时需要提出的一些重要问题。下面将详细说明这些问题:

 

为什么

 

此问题与用例目的有关。了解“为什么”寻求有关某个话题的数据将帮助你确定所需的数据类型。例如,可视化类项目可能需要的数据(推文样本可能已足够)可能与训练和构建分类器以解决机器学习 (ML) 问题(可能需要更多的特定数据)所需的数据不同。

 

是什么

 

此问题与你需要的数据类型有关。这里需要考虑的一些要点包括:

  • 你是否需要某种语言的推文?

  • 你是否需要包含图片的推文?

  • 你是否需要转推的推文?

通过回答这些问题,你可了解所需的数据类型(以及相应的筛选条件)的相关信息,从而帮助你做出决定。下面是在考虑获取数据以用于用例时需要记住的一些提示:

 

什么时候

 

此问题可帮助你确定用例所需数据的时间段。确定你想要研究的话题是否需要历史数据(如果是,那么从多久以前开始),或者你是否需要实时创建的推文。基于此内容,你可以确定哪个端点符合你的需求。 

 

什么人

 

根据用例,你可能有兴趣获取来自以下各项的推文:

  • 特定账号

  • 某个账号的关注者

  • 受众或账号组(例如重要新闻机构)

  • 谈论某个话题的每个人

 

此问题将帮助你为用例确定正确的推文来源。你使用的端点也将取决于此问题的答案。例如,为了研究某些账号,你可能需要使用 user_timeline 端点followers/ids 等。

 

在哪里

 

此问题与为用例确定推文和用户的地理位置有关。例如,研究关于哈维飓风的对话。为此,紧急救援管理系统的研究人员和开发者可能希望了解休斯顿的用户在 2017 年飓风期间是如何使用 Twitter 的。为了解这一点,他们可能会查看来自休斯顿或位于休斯顿的用户的“带有地理标记的”推文。有关“地理筛选”的更多信息,请参阅下一部分。 

 

筛选类型

 

在从 Twitter API 获取数据时,可通过几种筛选方法来获取满足需求的数据。

 

使用运算符筛选

 

使用 Twitter API 时,可以使用运算符指定要筛选的数据。这将限制从 Twitter API 接收的数据,以满足你指定的条件。使用的规则和筛选越明确和全面,最终获得的数据与你的需求无关的可能性就越小(和/或尝试返回并获取遗漏的数据的次数就越少)。这将减少清理数据集的工作量。可使用以下链接了解有关可用于近期搜索端点和筛选流端点的运算符的更多信息:

 

使用自定义代码逻辑筛选

 

你可能希望根据运算符不直接支持但需要自定义编码的高级条件筛选推文。例如,筛选来自至少有“x”名关注者的用户的推文。此类条件需要后处理。首先使用 Twitter 数据,然后对用户对象进行条件检查。


 

收集推文时需要考虑的重要因素

 

探索性分析

 

确定数据需求的查询/规则后,与其开始收集存储大量推文的数据,不如收集一些此类数据并对收集到的推文的初始子集进行探索性分析,这种做法更明智。这样,你便可以验证你的查询/规则,查看是否获得了正确的数据。你还可以从此探索性分析中了解其他内容,例如:

  • 你正在研究的对话中使用了哪些其他词语
  • 某些你可能没有包括在内的有关对话的“俚语”词

  • 对话中是否使用了某些话题标签

  • 某个地方的人关于此话题的发推次数是否要多于其他人

  • 对话中是否使用了某些媒体内容

  • 人们是否在对话中共享 URL 等

基于探索性分析的初步发现,你可以细化规则并调整这些规则,以确保获得的数据与数据需求相关。

 

进行此类探索性分析的一些常见方法包括:

  • 如果你在 Python 中使用 Pandas 或者使用 R,则可以使用 head() 函数来探索推文的最初几个数据帧并更好地理解内容

  • 使用 matplotlib (Python) 或 ggplot2 等可视化库获取推文数据的可视化表示形式,以确定推文中的模式

  • 对推文进行标记,以计算某些关键词的频率和出现次数 

 

筛选掉干扰信息

 

如前一部分所述,如果你想要获取关于铁人三项比赛而不是电影《铁人》的所有推文,则进行初步探索性分析可以帮助你确定这样一个事实,即结果数据包含关于电影《铁人》(包括与电影而不是比赛相关的不同词语)的推文。或者,你可能正在查找关于“狗”的推文,但经过探索性分析后,你发现最初的推文数据包括关于“热狗”、“看门狗”(视频游戏)等的推文。现在,你可以细化规则以(使用否定运算符“-”)排除诸如“热”或“视频游戏”之类的词语,从而消除干扰并确保得到的结果数据与用例相关。

 

此外,在进行探索性分析之后,你还可以决定根据以下内容从数据收集中筛选掉干扰信息:

 

  • 用户账号

    你可以决定根据账号的特征或内容质量排除某些账号,或者你可以排除来自或发推至不相关的特定账号的推文。如果某些用户账号经常与不相关的关键词一起被提及,你也可以这样做。

 

  • 推文内容

    你可以决定根据内容本身排除推文。例如,如果你想要了解某个话题的情绪,则可能需要排除那些只包含话题标签而不包含可帮助你确定情绪的任何其他文本、内容或短语的推文。为了针对这些推文对数据进行细化,你将需要使用正则表达式等在代码中编写自定义逻辑。 

 

  • 转推行为

    可能你正在研究推文本身的内容,而推文的数量/指标对你来说可能无关紧要。在此情况下,你可以进行微调并筛选掉转推(例如 -is:retweet)。或者,如果你对信息的传播方式感兴趣,则可以选择将转推视为分析的一部分。 

 

总之,组合使用多种方法来筛选掉干扰信息:

 

  • 使用运算符来限定直接从 Twitter API 接收的数据的范围

    • 包含、排除(否定、AND、短语与个体词)

       

  • 基于运算符无法满足的条件或其他定性条件,使用自定义代码逻辑或后处理作为附加筛选器。一些示例包括:

    • 拥有一定数量关注者的用户的推文

    • 具有一定转推次数的推文

    • 具有特定内容结构的推文(例如,排除只是话题标签而没有其他信息的所有推文)

 

使用与用例上下文相关的关键词 

 

为数据创建规则或筛选时,考虑使用与用例直接相关的各种词语。

 

根据用例,你可能需要针对同一话题使用不同词语来获取推文。

  • 例如,在美国,如果你使用关键词“football”(足球),它指美式足球而不是“soccer”(英式足球),后者在世界其他地方被称为“football”(足球)。 
  • 类似地,你可以使用“铁人”一词来指题为“铁人”的铁人三项比赛,而不是电影或超级英雄钢铁侠。 

因此,确保使用正确的上下文相关词集将有助于你获得正确的数据。

 

对于大多数用例,单是话题标签并不能代表关于某一话题的整个对话。 话题对话的参与者不在他们的推文中包含给定的话题标签(或者他们可能使用或启动一个不同的话题标签)非常常见。例如,你可能对关于某个正在进行的话题(比如某个城市的交通)的对话感兴趣,一些用户可能会在他们关于此话题的推文中使用话题标签(例如 #nyctraffic),但很多用户却不使用话题标签。话题标签可以作为一个良好的起点,帮助确定会话中所有其他的相关和/或衍生词语、用户和话题标签,但在单独使用时,它通常不足以或无法代表话题或对话。 

 

研究主题帖和对话

 

你可能会想要研究与感兴趣的推文相关的响应和对话。以前,对开发者来说,获取主题帖和对话(包括带有评论、回复等的转推)颇具挑战性。但是,在新的 Twitter API 中,由于引入了对话 ID 功能,此过程得到了简化,该功能现在包括父推文(对于回复它的推文)。本文后续部分将介绍关于这些字段以及如何使用它们的更多信息。

 

内容/话题漂移

 

在开始收集关于某个话题的数据时,需要先从可能与该话题相关的一组确定的关键词开始。但随着对话的发展,可能会出现其他新关键词。例如,如果你在流行病早期开始收集关于冠状病毒的推文,则可以使用 covid19、covid-19、corona、coronavirus 等关键词。但是,对话却演变为了与冠状病毒相关的可使用新词(例如“隔离”、“#stayathome”、“社交距离”等)来确定的其他内容。在研究的过程中,你可能有兴趣获取包含一些或所有这些新关键词的关于此话题的推文。下面是解决内容或话题“漂移”的几种策略:

 

跟踪数据管道中的常用词语

 

若要确定对话中的漂移,最基本方法是跟踪与你感兴趣的话题相关的经常出现的词语以及新出现的词语。在构建初始数据管道以便为用例使用和存储 Twitter 数据时,你可以维护在一段时间内摄取的推文的元数据。可使用此元数据来标识出现的新关键词。 

 

为此,在管道中摄取数据时,可以对推文进行标记,以删除停用词、特殊字符等,并保留每个时间段内词语的汇总计数和频率。使用此聚合数据,你可以确定可能会出现哪些新词语。确定新词语后,你可以更新查询(如果使用近期搜索)或更新规则(如果使用筛选流)以包含这些新词语。

 

使用注释(通过使用 context 或 entity 运算符)

 

新的 Twitter API v2 端点 - 筛选流和近期搜索 - 均支持按允许你按话题获取推文的 contextentity 运算符进行筛选。因此,你可以使用 context 或 entity 运算符来指定想要针对其发推的域或实体,而不是使用关于某一话题的各种不同搜索词。这样,即使话题的基本关键词发生了变化,并且 Twitter 将任何新词与该话题相关联,响应中也会包含带有这些关键词的推文。如果你确定要在数据集中包含其他关键词,则可以始终在查询或规则中补充这些其他词语。至少,注释可以作为一个有用的起点。在本文有关运算符的部分中了解关于如何使用注释的更多信息。

 

样本和收集偏差

 

收集数据的方式非常重要,因为它会影响你的分析、评估和结论。在 Twitter 数据背景下,下面是一些关于如何引入了偏差的示例,以及解决偏差的想法。

 

依赖一组有限的关键词

如果你依赖一个或两个话题标签或关键词来收集关于一些话题的推文,而这些话题还可能通过各种其他关键词出现,那么你最终获得的数据集可能会偏向于某些对话。对于上面提到的冠状病毒示例,如果你仅使用 covid19 作为搜索词,那么你可能会完全漏掉使用其他词(例如隔离、#stayathome 等)的相关对话。

 

仅依赖带有地理标记的推文 

一小部分推文具有与之相关的带地理标记的信息。因此,仅依赖带有地理标记的推文可能会在数据集中引入一些偏差。你应将此视为数据收集方法和用例的一部分。

 

依赖一个小数据集

基于你的用例,你应确保你的数据集足够大,包含你认为能够代表对话的推文。对于分类等 ML 用例,使用一个非常小的数据集可能会导致模型过度拟合,因此你应确保包含足够的数据用于研究。在仅使用推文数据集的一小部分时,不应针对整个对话得出结论。

 

仅依赖特定时间段的推文

无论用例要求你查找关于过去发生的事件的数据(历史数据),还是你正在研究当前(正在进行的)事件,都需要仔细考虑要获取的数据的时间段,以确保考虑了想要研究的对话的各个方面。选择不正确或不完整的时间框架(缺少关键日期或事件的开头、结尾)可能会导致数据集中出现偏差。

 

合规

 

务必要记住,如果你存储 Twitter 数据,则作为开发者策略的一部分,你必须保持其合规性。在我们的文档页面详细了解如何执行此操作。

 

查看运算符及其与研究和分析用例的相关性

 

若要筛选 Twitter 数据,你需要指定一个“查询”(如果使用近期搜索端点)或创建一个“规则”(如果使用筛选流端点)。这些查询和规则是运算符的组合,可以帮助你指定你所需的数据。如果你之前使用过我们的 v1.1 搜索/推文端点,你会很熟悉该端点的运算符。新端点(近期搜索和筛选流)支持新的运算符。查看我们的文档,获取新的近期搜索端点和新的筛选流端点的运算符的完整列表。

 

注意:从近期搜索端点为推文对象请求字段的方式与我们之前的搜索/推文端点不同。新的推文有效负载还支持 v1.1 搜索/推文端点中未包括的其他字段。有关新旧推文有效负载的完整比较,请访问迁移中心

 

下面列出了其中一些新运算符及其与研究和分析用例的相关性:

 

对话 ID

 

近期搜索端点引入了一个新运算符 conversation_id,借助该运算符,你可以获取属于某个对话的所有推文。例如,如果要检索对某一推文的所有回复以了解后续对话,可在近期搜索查询中使用包含第一条推文的推文 ID 的 conversation_id 运算符。

 

 在可以使用此运算符之前,开发者必须使用自己的方法来获取对推文的回复。这包括使用“to”运算符,获取推给某个用户名的所有推文,然后解析响应,并提取出与 in_reply_to_status_id_str 匹配的推文。借助 conversation_id 运算符,无需执行此自定义逻辑,并且可简化获取属于某个对话的所有推文(包括回复)的过程。 

 

有关使用此运算符的示例,请参阅下面关于示例查询和规则的部分。

 

推文注释(context 和 entity)

 

筛选流和近期搜索端点均支持新的“context”和“entity”运算符,这些运算符可帮助你根据推文数据的上下文解释获取推文。借助这些运算符,你可以获取话题或实体的数据,而无需编写包含大量搜索词的复杂查询。例如,如果你想获取关于美式足球的所有推文,之前你必须在搜索查询或规则中使用各种词语,例如 (NFL OR Football OR “Baltimore Ravens” OR “Seattle Seahawks”) 等。使用 context 运算符,只需将上述查询替换为 context:11.689566306014617600,即可获得关于美式足球的所有推文。 

 

context 运算符有助于按域或话题筛选推文,而 entity 运算符则有助于按命名实体筛选推文。域和实体均由 id 标识,并具有名称属性。域示例包括品牌、产品、人员等。实体示例包括 NFL 足球、巴尔的摩乌鸦等。使用 context 运算符的格式为:context:<domain_id>.<entity_id> 

 

有关注释和支持的域的更多信息,请参阅我们的文档。有关使用此运算符的示例,请参阅下面关于示例查询和规则的部分。

 

优先在 OR 之前应用 AND

 

在对新的近期搜索和筛选流端点使用运算符时,需要记住的一个关键区别是:

  • 在旧的 v1.1 API(搜索/推文)中,OR 在逻辑 AND(由词语或运算符之间的空格表示)之前应用

  • 在新的 Twitter API(近期搜索和筛选流)中,AND 在 OR 之前应用

 

请查看以下示例:

 

查询corona covid OR covid-19

 

旧标准搜索端点中的解释:

将返回包含词语 corona 以及词语 covid 或 covid-19 的所有推文

 

新近期搜索端点中的解释:

将返回包含以下内容之一的所有推文:

  • corona 和 covid 二词

  • covid-19 一词

 

示例查询和规则

 

下面是使用常见运算符构建规则和筛选器的一些示例

 

使用否定

 

借助否定运算符,你可以基于特定条件排除推文。它由运算符前面的连字符 (-) 表示。 

 

例如,如果你想获取关于铁人比赛而不是《铁人》电影或超级英雄钢铁侠的推文,则可以使用否定运算符排除这些词语,如下所示:

 

ironman -movie -superhero

 

同样,如果想要排除不是转推的所有推文,可以使用:

 

-is:retweet

 

注意:不要否定通过一组括号组合在一起的一组运算符。相反,否定每个单独的运算符。

例如,我们建议使用 -grumpy -cat -meme 而不是 -(grumpy OR cat OR meme)

 

使用 AND

 

AND 运算符允许运算符之间的逻辑 AND。因此,在运算符之间使用 AND 时,将返回满足所有条件的推文。

 

例如,如果你想获取同时关于“猫”和关于“狗”的推文,则可以如下设置查询的格式:

 

cat AND dog

 

在上述示例中,将仅包括同时匹配词语“猫”和“狗”的推文

 

注意:两个词语或运算符之间的空格也表示逻辑 AND

 

使用 OR

 

OR 运算符允许你在其他运算符之间设置逻辑 OR 条件。因此,如果推文满足其中一个条件,响应中就会返回该推文。

 

例如,如果你想获取关于“猫”或关于“狗”的推文,则可以如下设置查询的格式:

 

cat OR dog

 

在上述示例中:

  • 如果推文提及“狗”,响应中将包含该推文。

  • 如果推文提及“猫”,响应中将包含该推文。

 

确切短语匹配

 

可以通过在双引号 (“) 中指定确切短语来搜索包含这些短语的推文。例如,如果想要获取包含确切短语“Twitter API”的所有推文,则如下查询:

 

Twitter API

 

可能不起作用。这将包括包含 Twitter 一词和 API 一词,但不一定彼此相邻构成短语“Twitter API”的推文。例如,数据集中可能包含这样一个推文 -“我是 Twitter 的新用户,我想了解 API 编程”,而你可能正在寻找谈论 Twitter API 这一短语的推文,比如“我对学习 Twitter API 很感兴趣”。为了获得此确切匹配,你可以使用引号将 Twitter API 括起,如下所示:

 

“Twitter API”

 

按语言筛选

 

lang 运算符允许你按语言筛选推文。因此,你可以指定希望推文使用的语言(使用语言代码)。查看支持的语言列表。此运算符的格式为: 

 

lang:language_code

 

例如,如果你想要获取使用英语的所有推文,那么 lang 运算符将为:

 

lang:en

 

使用括号

 

可以使用括号将运算符组合在一起。这样,你便可以组织查询,并确保对查询应用正确的逻辑运算符。例如:

 

(grumpy cat) OR (#meme has:images) 

 

将返回包含词语 grumpy 和词语 cat 的推文,或具有包含话题标签 #meme 的图片的推文。 

 

注意:在应用 OR 之前,首先应用 AND 运算符。

 

获取推文回复

 

可以使用新运算符 conversation_id 获取对推文的回复。当推文是对话主题帖的一部分时,该推文的对话 ID 将与父推文 ID 匹配。 

 

使用此运算符的一个示例如下:

 

conversation_id:1255542774432063488

 

按话题获取推文

 

在使用近期搜索或筛选流端点时,可以使用以下两种运算符获取关于特定话题的推文,而不是使用各种关键词:

 

1. context

此运算符允许你使用特定的域 ID 和/或域 ID、实体 ID 对获取推文。有关支持的域列表,请参阅注释页面。使用此运算符的格式如下所示:

 

context:domain_id.entity_id [This will give you all Tweets about an entity within that domain]

 

context:domain_id.* [This will give you all Tweets about that domain]

 

例如:

若要获取关于域“NFL 足球比赛”的推文,context 运算符将为:

 

context:28.* [28 is the domain id for this domain]

 

2. entity

此运算符允许你使用实体名称字符串获取推文。使用此运算符的格式如下:

 

entity:entity_name [entity name is the string value, name for the entity]

 

例如:

若要获取关于巴尔的摩乌鸦的推文,entity 运算符将如下所示:

 

entity:Baltimore Ravens [“Baltimore Ravens” is the name of the entity]

 

示例运算符摘要

 

运算符

用法

-

排除连字符后面的词语或运算符

AND

词语/运算符之间的逻辑 AND,用于包括与 AND 两侧的条件匹配的所有推文

OR

词语/运算符之间的逻辑 OR,用于包括与 OR 两侧的任一条件匹配的推文

“”

使用双引号指定想要搜索的确切词语

()

使用括号组合运算符/词语并组织查询

lang

指定所需推文的语言

conversation_id

使用推文 ID 检索对话,包括对推文的回复

context

获取使用 domain_identity_id(或二者)指定的话题的推文

entity

使用实体名称获取名称实体的推文

 

我们希望本教程能够帮助你开始构建筛选器以获取 Twitter 数据。如有任何反馈,请通过 @Twitterdev 或我们的社区论坛与我们联系


 

其他资源