判斷元素與集合歸屬關(guān)系可以直接用in,python內(nèi)建的循環(huán)會(huì)幫你處理比較:
成都創(chuàng)新互聯(lián)是專業(yè)的鄰水網(wǎng)站建設(shè)公司,鄰水接單;提供做網(wǎng)站、成都做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鄰水網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
國(guó)家="中國(guó)"
a = ["美國(guó)","加拿大","澳大利亞"]
b = ["中國(guó)","日本","印度"]
if 國(guó)家 in a:
print("a")
elif 國(guó)家 in b:
print("b")
else:
print("ERROR")
用python做圖形界面,然后還要發(fā)布為應(yīng)用程序的話,有很多框架,比如Qt for Python,也就是常說(shuō)的PyQt。比較推薦這個(gè),因?yàn)樗闶悄壳氨容^流行的,而且不難入門,具體可以在百度上搜Qt或者PyQt,到官網(wǎng)去下載框架。
PyQt下載:
一些教程:
(這個(gè)是翻譯的)
(這個(gè)是源教程)
當(dāng)然還有很多,網(wǎng)上搜PyQt教程就可以。
如何批量處理評(píng)論信息情感分析,并且在時(shí)間軸上可視化呈現(xiàn)?輿情分析并不難,讓我們用Python來(lái)實(shí)現(xiàn)它吧。
痛點(diǎn)
你是一家連鎖火鍋店的區(qū)域經(jīng)理,很注重顧客對(duì)餐廳的評(píng)價(jià)。從前,你苦惱的是顧客不愛寫評(píng)價(jià)。最近因?yàn)椴蛷d火了,分店越來(lái)越多,寫評(píng)論的顧客也多了起來(lái),于是你新的痛苦來(lái)了——評(píng)論太多了,讀不過(guò)來(lái)。
從我這兒,你了解到了情感分析這個(gè)好用的自動(dòng)化工具,一下子覺得見到了曙光。
你從某知名點(diǎn)評(píng)網(wǎng)站上,找到了自己一家分店的頁(yè)面,讓助手把上面的評(píng)論和發(fā)布時(shí)間數(shù)據(jù)弄下來(lái)。因?yàn)橹植粫?huì)用爬蟲,所以只能把評(píng)論從網(wǎng)頁(yè)上一條條復(fù)制粘貼到Excel里。下班的時(shí)候,才弄下來(lái)27條。(注意這里我們使用的是真實(shí)評(píng)論數(shù)據(jù)。為了避免對(duì)被評(píng)論商家造成困擾,統(tǒng)一將該餐廳的名稱替換為“A餐廳”。特此說(shuō)明。)
好在你只是想做個(gè)試驗(yàn)而已,將就了吧。你用我之前介紹的中文信息情感分析工具,依次得出了每一條評(píng)論的情感數(shù)值。剛開始做出結(jié)果的時(shí)候,你很興奮,覺得自己找到了輿情分析的終極利器。
可是美好的時(shí)光總是短暫的。很快你就發(fā)現(xiàn),如果每一條評(píng)論都分別運(yùn)行一次程序,用機(jī)器來(lái)做分析,還真是不如自己挨條去讀省事兒。
怎么辦呢?
序列
辦法自然是有的。我們可以利用《貸還是不貸:如何用Python和機(jī)器學(xué)習(xí)幫你決策?》一文介紹過(guò)的數(shù)據(jù)框,一次性處理多個(gè)數(shù)據(jù),提升效率。
但是這還不夠,我們還可以把情感分析的結(jié)果在時(shí)間序列上可視化出來(lái)。這樣你一眼就可以看見趨勢(shì)——近一段時(shí)間里,大家是對(duì)餐廳究竟是更滿意了,還是越來(lái)越不滿意呢?
我們?nèi)祟愖钌瞄L(zhǎng)處理的,就是圖像。因?yàn)槁L(zhǎng)的進(jìn)化史逼迫我們不斷提升對(duì)圖像快速準(zhǔn)確的處理能力,否則就會(huì)被環(huán)境淘汰掉。因此才會(huì)有“一幅圖勝過(guò)千言萬(wàn)語(yǔ)”的說(shuō)法。
準(zhǔn)備
首先,你需要安裝Anaconda套裝。詳細(xì)的流程步驟請(qǐng)參考《 如何用Python做詞云 》一文。
助手好不容易做好的Excel文件restaurant-comments.xlsx,請(qǐng)從這里下載。
用Excel打開,如果一切正常,請(qǐng)將該文件移動(dòng)到咱們的工作目錄demo下。
因?yàn)楸纠形覀冃枰獙?duì)中文評(píng)論作分析,因此使用的軟件包為SnowNLP。情感分析的基本應(yīng)用方法,請(qǐng)參考《如何用Python做情感分析?》。
到你的系統(tǒng)“終端”(macOS, Linux)或者“命令提示符”(Windows)下,進(jìn)入我們的工作目錄demo,執(zhí)行以下命令。
pip install snownlp
pip install ggplot
運(yùn)行環(huán)境配置完畢。
在終端或者命令提示符下鍵入:
jupyter notebook
如果Jupyter Notebook正確運(yùn)行,下面我們就可以開始編寫代碼了。
代碼
我們?cè)贘upyter Notebook中新建一個(gè)Python 2筆記本,起名為time-series。
首先我們引入數(shù)據(jù)框分析工具Pandas,簡(jiǎn)寫成pd以方便調(diào)用。
import pandas as pd
接著,讀入Excel數(shù)據(jù)文件:
df = pd.read_excel("restaurant-comments.xlsx")
我們看看讀入內(nèi)容是否完整:
df.head()
結(jié)果如下:
注意這里的時(shí)間列。如果你的Excel文件里的時(shí)間格式跟此處一樣,包含了日期和時(shí)間,那么Pandas會(huì)非常智能地幫你把它識(shí)別為時(shí)間格式,接著往下做就可以了。
反之,如果你獲取到的時(shí)間只精確到日期,例如"2017-04-20"這樣,那么Pandas只會(huì)把它當(dāng)做字符串,后面的時(shí)間序列分析無(wú)法使用字符串?dāng)?shù)據(jù)。解決辦法是在這里加入以下兩行代碼:
from dateutil import parser
df["date"] = df.date.apply(parser.parse)
這樣,你就獲得了正確的時(shí)間數(shù)據(jù)了。
確認(rèn)數(shù)據(jù)完整無(wú)誤后,我們要進(jìn)行情感分析了。先用第一行的評(píng)論內(nèi)容做個(gè)小實(shí)驗(yàn)。
text = df.comments.iloc[0]
然后我們調(diào)用SnowNLP情感分析工具。
from snownlp import SnowNLP
s = SnowNLP(text)
顯示一下SnowNLP的分析結(jié)果:
s.sentiments
結(jié)果為:
0.6331975099099649
情感分析數(shù)值可以正確計(jì)算。在此基礎(chǔ)上,我們需要定義函數(shù),以便批量處理所有的評(píng)論信息。
def get_sentiment_cn(text):
s = SnowNLP(text) return s.sentiments
然后,我們利用Python里面強(qiáng)大的apply語(yǔ)句,來(lái)一次性處理所有評(píng)論,并且將生成的情感數(shù)值在數(shù)據(jù)框里面單獨(dú)存為一列,稱為sentiment。
df["sentiment"] = df.comments.apply(get_sentiment_cn)
我們看看情感分析結(jié)果:
df.head()
新的列sentiment已經(jīng)生成。我們之前介紹過(guò),SnowNLP的結(jié)果取值范圍在0到1之間,代表了情感分析結(jié)果為正面的可能性。通過(guò)觀察前幾條數(shù)據(jù),我們發(fā)現(xiàn)點(diǎn)評(píng)網(wǎng)站上,顧客對(duì)這家分店評(píng)價(jià)總體上還是正面的,而且有的評(píng)論是非常積極的。
但是少量數(shù)據(jù)的觀察,可能造成我們結(jié)論的偏頗。我們來(lái)把所有的情感分析結(jié)果數(shù)值做一下平均。使用mean()函數(shù)即可。
df.sentiment.mean()
結(jié)果為:
0.7114015318571119
結(jié)果數(shù)值超過(guò)0.7,整體上顧客對(duì)這家店的態(tài)度是正面的。
我們?cè)賮?lái)看看中位數(shù)值,使用的函數(shù)為median()。
df.sentiment.median()
結(jié)果為:
0.9563139038622388
我們發(fā)現(xiàn)了有趣的現(xiàn)象——中位數(shù)值不僅比平均值高,而且?guī)缀踅咏?(完全正面)。
這就意味著,大部分的評(píng)價(jià)一邊倒表示非常滿意。但是存在著少部分異常點(diǎn),顯著拉低了平均值。
下面我們用情感的時(shí)間序列可視化功能,直觀查看這些異常點(diǎn)出現(xiàn)在什么時(shí)間,以及它們的數(shù)值究竟有多低。
我們需要使用ggplot繪圖工具包。這個(gè)工具包原本只在R語(yǔ)言中提供,讓其他數(shù)據(jù)分析工具的用戶羨慕得流口水。幸好,后來(lái)它很快被移植到了Python平臺(tái)。
我們從ggplot中引入繪圖函數(shù),并且讓Jupyter Notebook可以直接顯示圖像。
%pylab inlinefrom ggplot import *
這里可能會(huì)報(bào)一些警告信息。沒有關(guān)系,不理會(huì)就是了。
下面我們繪制圖形。這里你可以輸入下面這一行語(yǔ)句。
ggplot(aes(x="date", y="sentiment"), data=df) + geom_point() + geom_line(color = 'blue') + scale_x_date(labels = date_format("%Y-%m-%d"))
你可以看到ggplot的繪圖語(yǔ)法是多么簡(jiǎn)潔和人性化。只需要告訴Python自己打算用哪個(gè)數(shù)據(jù)框,從中選擇哪列作為橫軸,哪列作為縱軸,先畫點(diǎn),后連線,并且可以指定連線的顏色。然后,你需要讓X軸上的日期以何種格式顯示出來(lái)。所有的參數(shù)設(shè)定跟自然語(yǔ)言很相似,直觀而且易于理解。
執(zhí)行后,就可以看到結(jié)果圖形了。
在圖中,我們發(fā)現(xiàn)許多正面評(píng)價(jià)情感分析數(shù)值極端的高。同時(shí),我們也清晰地發(fā)現(xiàn)了那幾個(gè)數(shù)值極低的點(diǎn)。對(duì)應(yīng)評(píng)論的情感分析數(shù)值接近于0。這幾條評(píng)論,被Python判定為基本上沒有正面情感了。
從時(shí)間上看,最近一段時(shí)間,幾乎每隔幾天就會(huì)出現(xiàn)一次比較嚴(yán)重的負(fù)面評(píng)價(jià)。
作為經(jīng)理,你可能如坐針氈。希望盡快了解發(fā)生了什么事兒。你不用在數(shù)據(jù)框或者Excel文件里面一條條翻找情感數(shù)值最低的評(píng)論。Python數(shù)據(jù)框Pandas為你提供了非常好的排序功能。假設(shè)你希望找到所有評(píng)論里情感分析數(shù)值最低的那條,可以這樣執(zhí)行:
df.sort(['sentiment'])[:1]
結(jié)果為:
情感分析結(jié)果數(shù)值幾乎就是0?。〔贿^(guò)這里數(shù)據(jù)框顯示評(píng)論信息不完全。我們需要將評(píng)論整體打印出來(lái)。
print(df.sort(['sentiment']).iloc[0].comments)
評(píng)論完整信息如下:
這次是在情人節(jié)當(dāng)天過(guò)去的,以前從來(lái)沒在情人節(jié)正日子出來(lái)過(guò),不是因?yàn)闆]有男朋友,而是感覺哪哪人都多,所以特意錯(cuò)開,這次實(shí)在是饞A餐廳了,所以趕在正日子也出來(lái)了,從下午四點(diǎn)多的時(shí)候我看排號(hào)就排到一百多了,我從家開車過(guò)去得堵的話一個(gè)小時(shí),我一看提前兩個(gè)小時(shí)就在網(wǎng)上先排著號(hào)了,差不多我們是六點(diǎn)半到的,到那的時(shí)候我看號(hào)碼前面還有才三十多號(hào),我想著肯定沒問題了,等一會(huì)就能吃上的,沒想到悲劇了,就從我們到那坐到等位區(qū)開始,大約是十分二十分一叫號(hào),中途多次我都想走了,哈哈,哎,等到最后早上九點(diǎn)才吃上的,服務(wù)員感覺也沒以前清閑時(shí)周到了,不過(guò)這肯定的,一人負(fù)責(zé)好幾桌,今天節(jié)日這么多人,肯定是很累的,所以大多也都是我自己跑腿,沒讓服務(wù)員給弄太多,就蝦滑讓服務(wù)員下的,然后環(huán)境來(lái)說(shuō)感覺衛(wèi)生方面是不錯(cuò),就是有些太吵了,味道還是一如既往的那個(gè)味道,不過(guò)A餐廳最人性化的就是看我們等了兩個(gè)多小時(shí),上來(lái)送了我們一張打折卡,而且當(dāng)次就可以使用,這點(diǎn)感覺還是挺好的,不愧是A餐廳,就是比一般的要人性化,不過(guò)這次就是選錯(cuò)日子了,以后還是得提前預(yù)約,要不就別趕節(jié)日去,太火爆了!
通過(guò)閱讀,你可以發(fā)現(xiàn)這位顧客確實(shí)有了一次比較糟糕的體驗(yàn)——等候的時(shí)間太長(zhǎng)了,以至于使用了“悲劇”一詞;另外還提及服務(wù)不夠周到,以及環(huán)境吵鬧等因素。正是這些詞匯的出現(xiàn),使得分析結(jié)果數(shù)值非常低。
好在顧客很通情達(dá)理,而且對(duì)該分店的人性化做法給予了正面的評(píng)價(jià)。
從這個(gè)例子,你可以看出,雖然情感分析可以幫你自動(dòng)化處理很多內(nèi)容,然而你不能完全依賴它。
自然語(yǔ)言的分析,不僅要看表達(dá)強(qiáng)烈情感的關(guān)鍵詞,也需要考慮到表述方式和上下文等諸多因素。這些內(nèi)容,是現(xiàn)在自然語(yǔ)言處理領(lǐng)域的研究前沿。我們期待著早日應(yīng)用到科學(xué)家們的研究成果,提升情感分析的準(zhǔn)確度。
不過(guò),即便目前的情感分析自動(dòng)化處理不能達(dá)到非常準(zhǔn)確,卻依然可以幫助你快速定位到那些可能有問題的異常點(diǎn)(anomalies)。從效率上,比人工處理要高出許多。
你讀完這條評(píng)論,長(zhǎng)出了一口氣??偨Y(jié)了經(jīng)驗(yàn)教訓(xùn)后,你決定將人性化的服務(wù)貫徹到底。你又想到,可以收集用戶等候時(shí)長(zhǎng)數(shù)據(jù),用數(shù)據(jù)分析為等待就餐的顧客提供更為合理的等待時(shí)長(zhǎng)預(yù)期。這樣就可以避免顧客一直等到很晚了。
祝賀你,經(jīng)理!在數(shù)據(jù)智能時(shí)代,你已經(jīng)走在了正確的方向上。
下面,你該認(rèn)真閱讀下一條負(fù)面評(píng)論了……
討論
除了情感分析和時(shí)間序列可視化,你覺得還可以如何挖掘中文評(píng)論信息?除了點(diǎn)評(píng)網(wǎng)站之外,你還知道哪些輿情分析的數(shù)據(jù)來(lái)源?歡迎留言分享給大家,我們一起交流討論。
如果你對(duì)我的文章感興趣,歡迎點(diǎn)贊,并且微信關(guān)注和置頂我的公眾號(hào)“玉樹芝蘭”(nkwangshuyi)。
如果你身邊有好友正在做輿情分析的研究工作,也歡迎你把這篇文章轉(zhuǎn)發(fā)給他們,共同學(xué)習(xí)和提高。
Python(英國(guó)發(fā)音:/?pa?θ?n/ 美國(guó)發(fā)音:/?pa?θɑ?n/)是一種廣泛使用的解釋型、高級(jí)編程、通用型編程語(yǔ)言,由吉多·范羅蘇姆創(chuàng)造,第一版發(fā)布于1991年??梢砸曋疄橐环N改良(加入一些其他編程語(yǔ)言的優(yōu)點(diǎn),如面向?qū)ο螅┑腖ISP。
Python的設(shè)計(jì)哲學(xué)強(qiáng)調(diào)代碼的可讀性和簡(jiǎn)潔的語(yǔ)法(尤其是使用空格縮進(jìn)劃分代碼塊,而非使用大括號(hào)或者關(guān)鍵詞)。
相比于C++或Java,Python讓開發(fā)者能夠用更少的代碼表達(dá)想法。不管是小型還是大型程序,該語(yǔ)言都試圖讓程序的結(jié)構(gòu)清晰明了。
與Scheme、Ruby、Perl、Tcl等動(dòng)態(tài)類型編程語(yǔ)言一樣,Python擁有動(dòng)態(tài)類型系統(tǒng)和垃圾回收功能,能夠自動(dòng)管理內(nèi)存使用,并且支持多種編程范式,包括面向?qū)ο?、命令式、函?shù)式和過(guò)程式編程。其本身?yè)碛幸粋€(gè)巨大而廣泛的標(biāo)準(zhǔn)庫(kù)。
Python 解釋器本身幾乎可以在所有的操作系統(tǒng)中運(yùn)行。Python的其中一個(gè)解釋器CPython是用C語(yǔ)言編寫的、是一個(gè)由社群驅(qū)動(dòng)的自由軟件,當(dāng)前由Python軟件基金會(huì)管理。
Python是完全面向?qū)ο蟮恼Z(yǔ)言。函數(shù)、模塊、數(shù)字、字符串都是對(duì)象。并且完全支持繼承、重載、派生、多重繼承,有益于增強(qiáng)源代碼的復(fù)用性。Python支持重載運(yùn)算符,因此Python也支持泛型設(shè)計(jì)。相對(duì)于Lisp這種傳統(tǒng)的函數(shù)式編程語(yǔ)言,Python對(duì)函數(shù)式編程只提供了有限的支持。有兩個(gè)標(biāo)準(zhǔn)庫(kù)(functools, itertools)提供了與Haskell和Standard ML中類似的函數(shù)式程序設(shè)計(jì)工具。
雖然Python可能被粗略地分類為“腳本語(yǔ)言”,但實(shí)際上一些大規(guī)模軟件開發(fā)計(jì)劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。
Python的支持者較喜歡稱它為一種高端動(dòng)態(tài)編程語(yǔ)言,原因是“腳本語(yǔ)言”泛指僅作簡(jiǎn)單程序設(shè)計(jì)任務(wù)的語(yǔ)言,如shell script、VBScript等只能處理簡(jiǎn)單任務(wù)的編程語(yǔ)言,并不能與Python相提并論。
Python本身被設(shè)計(jì)為可擴(kuò)展的。并非所有的特性和功能都集成到語(yǔ)言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C、C++、Cython來(lái)編寫擴(kuò)展模塊。Python編譯器本身也可以被集成到其它需要腳本語(yǔ)言的程序內(nèi)。
因此,有很多人把Python作為一種“膠水語(yǔ)言”使用。使用Python將其他語(yǔ)言編寫的程序進(jìn)行集成和封裝。在Google內(nèi)部的很多項(xiàng)目,例如Google應(yīng)用服務(wù)引擎使用C++編寫性能要求極高的部分,然后用Python或Java/Go調(diào)用相應(yīng)的模塊。
《Python技術(shù)手冊(cè)》的作者馬特利(Alex Martelp)說(shuō):“這很難講,不過(guò),2004年,Python已在Google內(nèi)部使用,Google召募許多Python高手,但在這之前就已決定使用Python。他們的目的是盡量使用Python,在不得已時(shí)改用C++;在操控硬件的場(chǎng)合使用C++,在快速開發(fā)時(shí)候使用Python。”
Python的設(shè)計(jì)哲學(xué)是“優(yōu)雅”、“明確”、“簡(jiǎn)單”。Python開發(fā)者的哲學(xué)是“用一種方法,最好是只有一種方法來(lái)做一件事”,也因此它和擁有明顯個(gè)人風(fēng)格的其他語(yǔ)言很不一樣。在設(shè)計(jì)Python語(yǔ)言時(shí),如果面臨多種選擇,Python開發(fā)者一般會(huì)拒絕花俏的語(yǔ)法,而選擇明確沒有或者很少有歧義的語(yǔ)法。這些準(zhǔn)則被稱為“Python格言”。在Python解釋器內(nèi)運(yùn)行import this可以獲得完整的列表。
相關(guān)推薦:《Python教程》以上就是小編分享的關(guān)于python是一種什么類型的編程語(yǔ)言的詳細(xì)內(nèi)容希望對(duì)大家有所幫助,更多有關(guān)python教程請(qǐng)關(guān)注環(huán)球青藤其它相關(guān)文章!