管理大數據并從中挖掘有用的信息是當前技術中最熱門的討論主題。 來自Twitter,Facebook和Linkedin等社交網絡的半結構化數據的爆炸式增長使Hadoop,Cassandra等技術成為每個技術對話的一部分。 為了不落后于競爭,所有以客戶為中心的組織都在積極參與制定社會戰略。
公司可以從社交網絡中獲取什么數據? 為初學者考慮基于位置的服務,定向廣告和算法股權交易。 IDC Insights擁有一些有關大數據與業務分析之間關系的信息博客 。 Barb Darrow在gigaom.com上的博客文章中解釋說,大數據本身將是毫無意義的,除非可以使用合適的分析工具進行篩選。
公司通常會聽取社交信息,以了解客戶對產品的興趣或看法。 他們還試圖確定“影響者”(在社交圖中聯系最多的人),以便他們可以向此類人員提供更好的報價,并從他們的營銷中獲得更大的收益。 從事股票交易的公司想知道在Twitter上討論了哪些公開貿易公司,以及用戶對此的看法。
從像IBM這樣的大公司到規模較小的新興企業,每個人都在競相利用大數據管理和分析的大部分機會。 可以從Web上免費獲得許多有關大數據的文檔,例如IBM'Big Data Platform'的電子書。 但是,其中很多僅涉及理論。 Jouko Ahvenainen在回應Barb Darrow的上述帖子時指出,“許多談論大數據機會的人過于籠統,談論的是更好的客戶理解,更好的銷售等。實際上,您必須非常具體,您利用什么以及如何使用”。
聽起來合理,不是嗎? 因此,我開始通過制作一個想法原型來進一步研究這一點,這是我知道的唯一好的選擇。 如果我能做到,那么任何人都可以做到。 該代碼非常簡單。 但是,這就是重點。 自己編寫CEP框架非常復雜,但使用起來卻不是。 同樣,Twitter使通過REST API獲取信息變得非常容易。
![]() |
大數據– http://www.bigdatabytes.com/managing-big-data-starts-here/ |
Iphone從來沒有變好。
Iphone從未 如此出色。
如您所見,在句子中僅添加一個單詞就完全改變了含義。 因此,自然語言處理被認為是計算機科學中最棘手的問題之一。 您可以使用斯坦福大學提供的免費在線講座來學習“自然語言處理”。 該鏈接直接帶您進入克里斯托弗·曼寧(Christopher Manning)關于自然語言分析的第一堂課。 但是,以我的觀點,在社交媒體和現代通用術語中普遍使用縮寫詞使這項工作變得容易一些。 諸如“ lol”和“ AFAIK”之類的縮寫準確地表達了含義。 使用“大聲笑”項目“有趣”和“ AFAIK”可能表示用戶“不確定”他或她自己。
下面提供的代碼使用Twitter4j api收聽實時Twitter提要,使用Esper CEP收聽事件并在達到閾值時提醒我們。 您可以從http://twitter4j.org/en/index.html下載twitter4j二進制文件或源文件,也可以從http://esper.codehaus.org/下載Esper。 在執行代碼之前,請確保創建一個Twitter帳戶(如果您沒有的話),并在此處閱讀Twitter的指南和概念及其流API。 Twitter目前僅允許通過用戶名和密碼組合進行身份驗證,但是不久之后將逐步淘汰該方法,以支持oAuth身份驗證。 另外,請密切注意其“訪問和速率限制”部分。
以下代碼在一個線程中使用流式API。 請不要同時使用其他線程,以免達到速率限制。 持續達到命中率限制可能會導致Twitter將您的Twitter ID列入黑名單。 同樣重要的是要注意,流式API并不是以我們的方式發送每條推文。 Twitter通常會通過每10條發一條信息發送1條樣本來對數據進行采樣。 但是,對于我們來說這不是問題,只要我們對數據中的模式感興趣,而不對任何特定的推文感興趣。 Twitter為需要無速率限制的流數據的企業提供付費服務。 下圖顯示了數據的組成和處理。
![]() |
圖。 代碼中尚未實現的圖表和數據庫 |
package com.sybase.simple;public class HappyMessage {public String user;private final int ctr=1;public String getUser() {return user;}public void setUser(String user) {this.user = user;}public int getCtr() {return ctr;}
}
清單1.表示快樂事件的標準java bean。
package com.sybase.simple;package com.sybase.simple;import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.UpdateListener;public class HappyEventListener implements UpdateListener{public void update(EventBean[] newEvents, EventBean[] oldEvents) {try {if (newEvents == null) {return;}EventBean event = newEvents[0];System.out.println("exceeded the count, actual " + event.get("sum(ctr)"));} catch (Exception e) {e.printStackTrace();}}
}
清單2.定義了Esper偵聽器。
package com.sybase.simple;package com.sybase.simple;import java.io.IOException;import twitter4j.Status;
import twitter4j.StatusDeletionNotice;
import twitter4j.StatusListener;
import twitter4j.TwitterException;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;import com.espertech.esper.client.EPServiceProvider;
import com.espertech.esper.client.EPServiceProviderManager;
import com.espertech.esper.client.EPStatement;public class TwitterTest {static EPServiceProvider epService;public static void main(String[] args) throws TwitterException, IOException {// Creating and registering the CEP listenercom.espertech.esper.client.Configuration config1 = new com.espertech.esper.client.Configuration();config1.addEventType("HappyMessage", HappyMessage.class.getName());epService = EPServiceProviderManager.getDefaultProvider(config1);String expression = "select user, sum(ctr) from com.sybase.simple.HappyMessage.win:time(10 seconds) having sum(ctr) > 2";EPStatement statement = epService.getEPAdministrator().createEPL(expression);HappyEventListener happyListener = new HappyEventListener();statement.addListener(happyListener);ConfigurationBuilder cb = new ConfigurationBuilder();cb.setDebugEnabled(true);//simple http form based authentication, you can use oAuth if you have one, check Twitter4j documentationcb.setUser("your Twitter user name here");cb.setPassword("Your Twitter password here");// creating the twitter listenerConfiguration cfg = cb.build();TwitterStream twitterStream = new TwitterStreamFactory(cfg).getInstance();StatusListener listener = new StatusListener() {public void onStatus(Status status) {if (status.getText().indexOf("lol") > 0) {System.out.println("********* lol found *************");raiseEvent(epService, status.getUser().getScreenName(),status);}}public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {System.out.println("Got a status deletion notice id:"+ statusDeletionNotice.getStatusId());}public void onTrackLimitationNotice(int numberOfLimitedStatuses) {System.out.println("Got track limitation notice:"+ numberOfLimitedStatuses);}public void onScrubGeo(long userId, long upToStatusId) {System.out.println("Got scrub_geo event userId:" + userId+ " upToStatusId:" + upToStatusId);}public void onException(Exception ex) {ex.printStackTrace();}};twitterStream.addListener(listener);//twitterStream.sample();}private static void raiseEvent(EPServiceProvider epService, String name,Status status) {HappyMessage msg = new HappyMessage();msg.setUser(status.getUser().getScreenName());epService.getEPRuntime().sendEvent(msg);}}
}
清單3。
Twitter4j偵聽器已創建。 此偵聽器和CEP偵聽器開始偵聽。 每個Twitter帖子都被解析為“大聲笑”。 每次找到“哈哈”,都會生成一個快樂事件。 每當最近10秒內“ lol”的總數超過2時,CEP偵聽器都會發出警報。
該代碼建立了一個長期運行的線程來獲取Twitter提要。 每次達到閾值時,您都會在控制臺上看到輸出。 請記住要終止程序,它不會自行終止。
現在,您已經可以使用此基本功能,可以通過多種方式擴展此原型。 您可以處理其他數據提要(來自Twitter以外的其他來源),并使用Esper對來自兩個數據提要的數據進行核對。 為了使輸出具有視覺吸引力,您可以將輸出提供給某些圖表庫。 例如,每次Esper識別事件時,數據點都將用于在折線圖上渲染一個點。 如果以這種方式跟蹤“快樂事件”,那么該圖將本質上顯示Twitter用戶在一段時間內不斷變化的快樂水平。
請在評論部分中提供您的反饋,并通過+1與他人分享,如果您希望看到更多有關此主題的信息,請告訴我。
參考:通過我們的JCG合作伙伴 使用Twitter4j和Esper跟蹤Twitter上的用戶情緒 ? Mahesh Gadgil在“ 簡單而實用”博客上。
翻譯自: https://www.javacodegeeks.com/2012/03/twitter4j-and-esper-tracking-user.html