0 前言
?? 優(yōu)質競賽項目系列,今天要分享的是
?? 基于大數(shù)據(jù)的社交平臺數(shù)據(jù)爬蟲輿情分析可視化系統(tǒng)
該項目較為新穎,適合作為競賽課題方向,學長非常推薦!
??學長這里給一個題目綜合評分(每項滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點:4分
?? 更多資料, 項目分享:
https://gitee.com/dancheng-senior/postgraduate文章來源地址http://www.zghlxwxcb.cn/news/detail-677564.html
1 課題背景
基于Python的社交平臺大數(shù)據(jù)挖掘及其可視化。
2 實現(xiàn)效果
實現(xiàn)功能
- 實時熱點話題檢測
- 情感分析
- 結果可視化
- Twitter數(shù)據(jù)挖掘平臺的設計與實現(xiàn)
可視化統(tǒng)計
Hashtag統(tǒng)計
地理位置信息的可視化
話題結果可視化
矩陣圖
旭日圖
情感分析的可視化
web模塊界面展示
3 LDA模型
2003年,D.Blei等人提出了廣受歡迎的LDA(Latentdirichlet
allocation)主題模型[8]。LDA除了進行主題的分析外,還可以運用于文本分類、推薦系統(tǒng)等方面。
LDA模型可以描述為一個“上帝擲骰子”的過程,首先,從主題庫中隨機抽取一個主題,該主題編號為K,接著從骰子庫中拿出編號為K的骰子X,進行投擲,每投擲一次,就得到了一個詞。不斷的投擲它,直到到達預計的文本長
可以用矩陣的乘法來表示上述的過程:
回到LDA模型來說,LDA模型的輸入是一篇一篇用BOW(bag of
words)表示的文檔,即用該文檔中無序的單詞序列來表示該文檔(忽略文檔中的語法和詞語的先后關系)。LDA的輸出是每篇文檔的主題分布矩陣和每個主題下的單詞分布矩陣。簡而言之,LDA主題模型的任務就是已知左邊的矩陣,通過一些方法,得到右邊兩個小矩陣。這里的“一些方法”即為LDA采樣的方法,目前最主要的有兩種,一種是變分貝葉斯推斷(variationalBayes,
VB),另一種叫做吉布斯采樣(Gibbs Sampling),其中吉布斯采樣也被稱為蒙特卡洛馬爾可夫 (Markov Chain Monte
Carlo,MCMC)采樣方法。
總的來說,MCMC實現(xiàn)起來更加簡單方便,而VB的速度比MCMC來得快,研究表明他們具有差不多相同的效果。所以,對于大量的數(shù)據(jù),采用VB是更為明智的選擇。
4 情感分析方法
本文采用的情感分析可以說是一個標準的機器學習的分類問題。目標是給定一條推文,將其分為正向情感、負向情感、中性情感。
預處理
- POS標注:CMU ArkTweetNLP
- 字母連續(xù)三個相同:替換 “coooooooool”=>“coool”
- 刪除非英文單詞
- 刪除URL
- 刪除@:刪除用戶的提及@username
- 刪除介詞、停止詞
- 否定展開:將以"n’t"結尾的單詞進行拆分,如"don’t" 拆分為"do not",這里需要注意對一些詞進行特殊處理,如"can’t"拆分完之后的結果為"can not",而不是"ca not"。
- 否定處理:從否定詞(如shouldn’t)開始到這個否定詞后的第一個標點(.,?!)之間的單詞,均加入_NEG后綴。如perfect_NEG。 “NEG”后綴
特征提取
文本特征
-
N-grams
- 1~3元模型
- 使用出現(xiàn)的次數(shù)而非頻率來表示。不僅是因為使用是否出現(xiàn)來表示特征有更好的效果[16],還因為Twitter的文本本身較短,一個短語不太可能在一條推文中重復出現(xiàn)。
-
感嘆號問號個數(shù)
- 在句子中的感嘆號和問號,往往含有一定的情感。為此,將它作為特征。
-
字母重復的單詞個數(shù)
- 這是在預處理中對字母重復三次以上單詞進行的計數(shù)。字母重復往往表達了一定的情感。
-
否定的個數(shù)
- 否定詞出現(xiàn)后,句子的極性可能會發(fā)生翻轉。為此,把整個句子否定的個數(shù)作為一個特征
-
縮寫詞個數(shù)等
-
POS 標注為[‘N’, ‘V’, ‘R’, ‘O’, ‘A’] 個數(shù)(名詞、動詞、副詞、代詞、形容詞)
-
詞典特征(本文使用的情感詞典有:Bing Lius詞庫[39]、MPQA詞庫[40]、NRC Hashtag詞庫和Sentiment140詞庫[42]、以及相應的經(jīng)過否定處理的詞庫[45])
- 推文中的單詞在情感字典個數(shù) (即有極性的單詞個數(shù))
- 推文的 總情感得分:把每個存在于當前字典單詞數(shù)相加,到推文的 總情感得分:把每個存在于當前 - 字典單詞數(shù)相加,到推文的 總情感得分:把每個存在于當前字典單詞數(shù)相加,到推文總分,這個數(shù)作為一特征。
- 推文中單詞最大的正向情感得分和負。
- 推文中所有正向情感的單詞分數(shù) 和以及 所有負向情感單詞的分數(shù)和。
- 最后一個詞的分數(shù)
-
表情特征
- 推文中正向 情感 和負向的表情個數(shù)
- 最后一個表情的極性是 否為正向
特征選擇
本文 特征選擇主要是針對于 N-grams 特征 的,采用方法如下:
?
設定min_df(min_df>=0)以及threshold(0 <= threshold <= 1)
對于每個在N-grams的詞:
統(tǒng)計其出現(xiàn)于正向、負向、中性的次數(shù),得到pos_cnt, neg_cnt, neu_cnt,以及出現(xiàn)總數(shù)N,然后分別計算
pos = pos_cnt / N
neg = neg_cnt / N
neu = neu_cnt / N
對于 pos,neg,neu中任一一個大于閾值threshold 并且N > min_df的,保留該詞,否則進行刪除。
上述算法中濾除了低頻的詞,因為這可能是一些拼寫錯誤的詞語;并且,刪除了一些極性不那么明顯的詞,有效的降低了維度。
分類器選擇
在本文中,使用兩個分類器進行對比,他們均使用sklearn提供的接口 。第一個分類器選用SVM線性核分類器,參數(shù)設置方面,C =
0.0021,其余均為默認值。第二個分類器是Logistic Regression分類器,其中,設置參數(shù)C=0.01105。
在特征選擇上,min_df=5, threshold=0.6。
實驗
- SemEval(國際上的一個情感分析比賽)訓練數(shù)據(jù)和測試數(shù)據(jù)
- 評價方法采用F-score
- 對比SemEval2016結果如下
測試集名
5 部分核心代碼
?
import json
from django.http import HttpResponse
from django.shortcuts import render
from topic.models.TopicTrendsManager import TopicTrendsManager
from topic.models.TopicParameterManager import TopicParameterManager
def index(request):
return render(request, 'topic/index.html')
# TODO 檢查參數(shù)的合法性, and change to post method
def stream_trends(request):
param_manager = TopicParameterManager(request.GET.items())
topic_trends = TopicTrendsManager(param_manager)
res = topic_trends.get_result(param_manager)
return HttpResponse(json.dumps(res), content_type="application/json")
def stop_trends(request):
topic_trends = TopicTrendsManager(None)
topic_trends.stop()
res = {"stop": "stop success"}
return HttpResponse(json.dumps(res), content_type="application/json")
def text(request):
return render(request, 'topic/visualization/result_text.html')
def bubble(request):
return render(request, 'topic/visualization/result_bubble.html')
def treemap(request):
return render(request, 'topic/visualization/result_treemap.html')
def sunburst(request):
return render(request, 'topic/visualization/result_sunburst.html')
def funnel(request):
return render(request, 'topic/visualization/result_funnel.html')
def heatmap(request):
return render(request, 'topic/visualization/result_heatmap.html')
def hashtags_pie(request):
return render(request, 'topic/visualization/result_hashtags_pie.html')
def hashtags_histogram(request):
return render(request, 'topic/visualization/result_hashtags_histogram.html')
def hashtags_timeline(request):
return render(request, 'topic/visualization/result_hashtags_timeline.html')
6 最后
?? 更多資料, 項目分享:文章來源:http://www.zghlxwxcb.cn/news/detail-677564.html
https://gitee.com/dancheng-senior/postgraduate
到了這里,關于計算機競賽 基于大數(shù)據(jù)的社交平臺數(shù)據(jù)爬蟲輿情分析可視化系統(tǒng)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!