0 前言
?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的是
?? 基于大數(shù)據(jù)的社交平臺(tái)數(shù)據(jù)爬蟲輿情分析可視化系統(tǒng)
??學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點(diǎn):4分
1 課題背景
基于Python的社交平臺(tái)大數(shù)據(jù)挖掘及其可視化。
2 實(shí)現(xiàn)效果
實(shí)現(xiàn)功能
- 實(shí)時(shí)熱點(diǎn)話題檢測(cè)
- 情感分析
- 結(jié)果可視化
- Twitter數(shù)據(jù)挖掘平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
可視化統(tǒng)計(jì)
Hashtag統(tǒng)計(jì)
地理位置信息的可視化
話題結(jié)果可視化
矩陣圖
旭日?qǐng)D
情感分析的可視化
web模塊界面展示
3 LDA模型
2003年,D.Blei等人提出了廣受歡迎的LDA(Latentdirichlet allocation)主題模型[8]。LDA除了進(jìn)行主題的分析外,還可以運(yùn)用于文本分類、推薦系統(tǒng)等方面。
LDA模型可以描述為一個(gè)“上帝擲骰子”的過程,首先,從主題庫中隨機(jī)抽取一個(gè)主題,該主題編號(hào)為K,接著從骰子庫中拿出編號(hào)為K的骰子X,進(jìn)行投擲,每投擲一次,就得到了一個(gè)詞。不斷的投擲它,直到到達(dá)預(yù)計(jì)的文本長(zhǎng)度為止。簡(jiǎn)單的說,這一過程就是“隨機(jī)的選擇某個(gè)主題,然后從該主題中隨機(jī)的選擇詞語”。按照之前的描述,一篇文檔中詞語生成的概率為:
可以用矩陣的乘法來表示上述的過程:
回到LDA模型來說,LDA模型的輸入是一篇一篇用BOW(bag of words)表示的文檔,即用該文檔中無序的單詞序列來表示該文檔(忽略文檔中的語法和詞語的先后關(guān)系)。LDA的輸出是每篇文檔的主題分布矩陣和每個(gè)主題下的單詞分布矩陣。簡(jiǎn)而言之,LDA主題模型的任務(wù)就是已知左邊的矩陣,通過一些方法,得到右邊兩個(gè)小矩陣。這里的“一些方法”即為L(zhǎng)DA采樣的方法,目前最主要的有兩種,一種是變分貝葉斯推斷(variationalBayes, VB),另一種叫做吉布斯采樣(Gibbs Sampling),其中吉布斯采樣也被稱為蒙特卡洛馬爾可夫 (Markov Chain Monte Carlo,MCMC)采樣方法。
總的來說,MCMC實(shí)現(xiàn)起來更加簡(jiǎn)單方便,而VB的速度比MCMC來得快,研究表明他們具有差不多相同的效果。所以,對(duì)于大量的數(shù)據(jù),采用VB是更為明智的選擇。
4 情感分析方法
本文采用的情感分析可以說是一個(gè)標(biāo)準(zhǔn)的機(jī)器學(xué)習(xí)的分類問題。目標(biāo)是給定一條推文,將其分為正向情感、負(fù)向情感、中性情感。
預(yù)處理
- POS標(biāo)注:CMU ArkTweetNLP
- 字母連續(xù)三個(gè)相同:替換 “coooooooool”=>“coool”
- 刪除非英文單詞
- 刪除URL
- 刪除@:刪除用戶的提及@username
- 刪除介詞、停止詞
- 否定展開:將以"n’t"結(jié)尾的單詞進(jìn)行拆分,如"don’t" 拆分為"do not",這里需要注意對(duì)一些詞進(jìn)行特殊處理,如"can’t"拆分完之后的結(jié)果為"can not",而不是"ca not"。
- 否定處理:從否定詞(如shouldn’t)開始到這個(gè)否定詞后的第一個(gè)標(biāo)點(diǎn)(.,?!)之間的單詞,均加入_NEG后綴。如perfect_NEG。 “NEG”后綴
特征提取
文本特征
-
N-grams
- 1~3元模型
- 使用出現(xiàn)的次數(shù)而非頻率來表示。不僅是因?yàn)槭褂檬欠癯霈F(xiàn)來表示特征有更好的效果[16],還因?yàn)門witter的文本本身較短,一個(gè)短語不太可能在一條推文中重復(fù)出現(xiàn)。
-
感嘆號(hào)問號(hào)個(gè)數(shù)
- 在句子中的感嘆號(hào)和問號(hào),往往含有一定的情感。為此,將它作為特征。
-
字母重復(fù)的單詞個(gè)數(shù)
- 這是在預(yù)處理中對(duì)字母重復(fù)三次以上單詞進(jìn)行的計(jì)數(shù)。字母重復(fù)往往表達(dá)了一定的情感。
-
否定的個(gè)數(shù)
- 否定詞出現(xiàn)后,句子的極性可能會(huì)發(fā)生翻轉(zhuǎn)。為此,把整個(gè)句子否定的個(gè)數(shù)作為一個(gè)特征
-
縮寫詞個(gè)數(shù)等
-
POS 標(biāo)注為[‘N’, ‘V’, ‘R’, ‘O’, ‘A’] 個(gè)數(shù)(名詞、動(dòng)詞、副詞、代詞、形容詞)
-
詞典特征(本文使用的情感詞典有:Bing Lius詞庫[39]、MPQA詞庫[40]、NRC Hashtag詞庫和Sentiment140詞庫[42]、以及相應(yīng)的經(jīng)過否定處理的詞庫[45])
- 推文中的單詞在情感字典個(gè)數(shù) (即有極性的單詞個(gè)數(shù))
- 推文的 總情感得分:把每個(gè)存在于當(dāng)前字典單詞數(shù)相加,到推文的 總情感得分:把每個(gè)存在于當(dāng)前 - 字典單詞數(shù)相加,到推文的 總情感得分:把每個(gè)存在于當(dāng)前字典單詞數(shù)相加,到推文總分,這個(gè)數(shù)作為一特征。
- 推文中單詞最大的正向情感得分和負(fù)。
- 推文中所有正向情感的單詞分?jǐn)?shù) 和以及 所有負(fù)向情感單詞的分?jǐn)?shù)和。
- 最后一個(gè)詞的分?jǐn)?shù)
-
表情特征
- 推文中正向 情感 和負(fù)向的表情個(gè)數(shù)
- 最后一個(gè)表情的極性是 否為正向
特征選擇
本文 特征選擇主要是針對(duì)于 N-grams 特征 的,采用方法如下:
設(shè)定min_df(min_df>=0)以及threshold(0 <= threshold <= 1)
對(duì)于每個(gè)在N-grams的詞:
統(tǒng)計(jì)其出現(xiàn)于正向、負(fù)向、中性的次數(shù),得到pos_cnt, neg_cnt, neu_cnt,以及出現(xiàn)總數(shù)N,然后分別計(jì)算
pos = pos_cnt / N
neg = neg_cnt / N
neu = neu_cnt / N
對(duì)于 pos,neg,neu中任一一個(gè)大于閾值threshold 并且N > min_df的,保留該詞,否則進(jìn)行刪除。
上述算法中濾除了低頻的詞,因?yàn)檫@可能是一些拼寫錯(cuò)誤的詞語;并且,刪除了一些極性不那么明顯的詞,有效的降低了維度。
分類器選擇
在本文中,使用兩個(gè)分類器進(jìn)行對(duì)比,他們均使用sklearn提供的接口 。第一個(gè)分類器選用SVM線性核分類器,參數(shù)設(shè)置方面,C = 0.0021,其余均為默認(rèn)值。第二個(gè)分類器是Logistic Regression分類器,其中,設(shè)置參數(shù)C=0.01105。
在特征選擇上,min_df=5, threshold=0.6。
實(shí)驗(yàn)
- SemEval(國際上的一個(gè)情感分析比賽)訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)
- 評(píng)價(jià)方法采用F-score
- 對(duì)比SemEval2016結(jié)果如下
測(cè)試集名
文章來源:http://www.zghlxwxcb.cn/news/detail-794040.html
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 最后
?? 選題指導(dǎo), 項(xiàng)目分享: https://gitee.com/yaa-dc/warehouse-1/blob/master/python/README.md文章來源地址http://www.zghlxwxcb.cn/news/detail-794040.html
到了這里,關(guān)于大數(shù)據(jù)畢設(shè)項(xiàng)目 - 基于大數(shù)據(jù)的社交平臺(tái)數(shù)據(jù)爬蟲輿情分析可視化系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!