用Python挖掘Twitter數(shù)據(jù):數(shù)據(jù)采集
這是7部系列中的第1部分,注重挖掘Twitter數(shù)據(jù)以用于各種案例。這是***篇文章,專注于數(shù)據(jù)采集,起到奠定基礎(chǔ)的作用。
Twitter是一個(gè)流行的社交網(wǎng)絡(luò),用戶可以共享稱為tweets的類似SMS的短消息。用戶在Twitter上分享想法、鏈接和圖片,記者發(fā)表現(xiàn)場活動(dòng)評論,企業(yè)改進(jìn)產(chǎn)品和吸引客戶等等。使用Twitter的不同的方式列表可能會很長,伴隨著每天5億的tweets,這里有大量的數(shù)據(jù)等著我們分析。
這是一系列使用Python專門用于Twitter數(shù)據(jù)挖掘的文章中的***篇。在***部分中,我們將看到通過不同的方式來進(jìn)行Twitter的數(shù)據(jù)收集。一旦我們建立好了一個(gè)數(shù)據(jù)集,在接下來的環(huán)節(jié)中,我們就將會討論一些有趣的數(shù)據(jù)應(yīng)用。
注冊應(yīng)用
為了能夠訪問Twitter數(shù)據(jù)編程,我們需要?jiǎng)?chuàng)建一個(gè)與Twitter的API交互的應(yīng)用程序。
***步是注冊一個(gè)你的應(yīng)用程序。值得注意的是,您需要將您的瀏覽器轉(zhuǎn)到http://apps.twitter.com,登錄到Twitter(如果您尚未登錄),并注冊一個(gè)新的應(yīng)用程序。您現(xiàn)在可以為您的應(yīng)用程序選擇一個(gè)名稱和說明(例如“挖掘演示”或類似)。您將收到一個(gè)消費(fèi)者密鑰和消費(fèi)者密碼:這些都是應(yīng)用程序設(shè)置,應(yīng)始終保密。在您的應(yīng)用程序的配置頁面,你也可以要求獲取一個(gè)訪問令牌和訪問令牌的密碼。類似于消費(fèi)者密鑰,這些字符串也必須保密:他們提供的應(yīng)用程序是代表您的帳戶訪問到Twitter。默認(rèn)權(quán)限是只讀的,這是我們在案例中需要的,但如果你決定改變您的許可,在應(yīng)用中提供更改功能,你就必須再獲得一個(gè)新的訪問令牌。
重要提示:使用Twitter的API時(shí)有速率限制,或者你想要提供一個(gè)可下載的數(shù)據(jù)集也會有限制,請參見: >
您可以使用 Twitter提供的REST APIs與他們的服務(wù)進(jìn)行交互。那里還有一群基于Python的客戶,我們可以重復(fù)循環(huán)使用。尤其Tweepy是其中最有趣和最直白的一個(gè),所以我們一起把它安裝起來:

更新:Tweepy發(fā)布的3.4.0版本在Python3上出現(xiàn)了一些問題,目前被綁定在GitHub上還不能進(jìn)行使用,因此在新的版本出來之前,我們一直使用3.3.0版本。
更多的更新:Tweepy發(fā)布的3.5.0版本已經(jīng)可以使用,似乎解決了上述提到的在Python3上的問題。
為了授權(quán)我們的應(yīng)用程序以代表我們訪問Twitter,我們需要使用OAuth的界面:

現(xiàn)在的API變量是我們?yōu)榭梢栽赥witter上執(zhí)行的大多數(shù)操作的入口點(diǎn)。
例如,我們可以看到我們自己的時(shí)間表(或者我們的Twitter主頁):

Tweepy提供便捷的光標(biāo)接口,對不同類型的對象進(jìn)行迭代。在上面的例子中我們用10來限制我們正在閱讀的tweets的數(shù)量,但是當(dāng)然其實(shí)我們是可以訪問更多的。狀態(tài)變量是Status() class的一個(gè)實(shí)例,是訪問數(shù)據(jù)時(shí)一個(gè)漂亮的包裝。Twitter API的JSON響應(yīng)在_json屬性(帶有前導(dǎo)下劃線)上是可用的,它不是純JSON字符串,而是一個(gè)字典。
所以上面的代碼可以被重新寫入去處理/存儲JSON:

如果我們想要一個(gè)所有用戶的名單?來這里:

那么我們所有的tweets的列表呢? 也很簡單:

通過這種方式,我們可以很容易地收集tweets(以及更多),并將它們存儲為原始的JSON格式,可以很方便的依據(jù)我們的存儲格式將其轉(zhuǎn)換為不同的數(shù)據(jù)模型(很多NoSQL技術(shù)提供一些批量導(dǎo)入功能)。
process_or_store()功能是您的自定義實(shí)施占位符。最簡單的方式就是你可以只打印出JSON,每行一個(gè)tweet:

流
如果我們要“保持連接”,并收集所有關(guān)于特定事件將會出現(xiàn)的tweets,流API就是我們所需要的。我們需要擴(kuò)展StreamListener()來定義我們處理輸入數(shù)據(jù)的方式。一個(gè)用#python hashtag收集了所有新的tweet的例子:

根據(jù)不同的搜索詞,我們可以在幾分鐘之內(nèi)收集到成千上萬的tweet。世界性覆蓋的現(xiàn)場活動(dòng)尤其如此(世界杯、超級杯、奧斯卡頒獎(jiǎng)典禮等),所以保持關(guān)注JSON文件,看看它增長的速度是多么的快,并考量你的測試可能需要多少tweet。以上腳本將把每個(gè)tweet保存在新的行中,所以你可以從Unix shell中使用wc-l python.json命令來了解到你收集了多少tweet。
你可以在下面的要點(diǎn)中看到Twitter的API流的一個(gè)最小工作示例:
twitter_stream_downloader.py
總結(jié)
我們已經(jīng)介紹了tweepy作為通過Python訪問Twitter數(shù)據(jù)的一個(gè)相當(dāng)簡單的工具。我們可以根據(jù)明確的“tweet”項(xiàng)目目標(biāo)收集一些不同類型的數(shù)據(jù)。
一旦我們收集了一些數(shù)據(jù),在分析應(yīng)用方面的就可以進(jìn)行展開了。在接下來的內(nèi)容中,我們將討論部分問題。
簡介:Marco Bonzanini是英國倫敦的一個(gè)數(shù)據(jù)科學(xué)家?;钴S于PyData社區(qū)的他喜歡從事文本分析和數(shù)據(jù)挖掘的應(yīng)用工作。他是“用Python掌握社會化媒體挖掘”( 2016月7月出版)的作者。