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

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

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

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

那么我們所有的tweets的列表呢? 也很簡(jiǎn)單:

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

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

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
























