python文本分析實例:螞蜂窩上的驢友們在聊些什麼?

多數人在日常的產品和運營工作中,常常接觸的數據分析方法、形式絕大部分是基於對數值型數據的描述性分析,如產品用戶註冊數,網站PV,UV等。這些分析是基於對結構化數據的分析(存儲在關係型資料庫里,用二維表結構來表現的數據)。用人話翻譯一下這句話,就是這些分析方法/形式有一個共同點:都是跟數字在打交道。

然而有時候,我們也需跟非結構化數據(是與結構性數據相對的一個概念。如文本、圖片、XML、HTML、各類報表、圖像和音頻/視頻信息等等。)打交道,比如文本分析。

文本分析的目的在於從根本上把所有的非結構化數據整合而化為結構化數據,從之前被認為難以量化的海量文本中抽取出大量有價值的、有意義的數據或信息。

python語言,既然作為是作為數據分析方面的一柄利器,這風騷的操作,當然也少不了它的參與。在python中,文本分析常會用到模塊,有用於中文分詞的jieba分詞,用與文本相似度分析的gensim,用於情感分析的SnowNLP等。

本文將利用python從螞蜂窩問答社區中抓取部分驢友們在問答社區的問題數據,做一次簡單的文本分析實現,看看旅遊們在社區中聊些什麼。

0,環境搭建

環境:win10+Anaconda +jupyter Notebook

模塊:

requests,用於網路請求

json,用於解析json格式數據

BeautifulSoup,用於解析文檔樹

jieba,用於分詞

Counter,用於統計詞頻

wordcloud,用於製作詞雲

matplotlib,用於畫圖

1,爬取數據

爬取螞蜂窩問答社區前100頁的數據

#導入模塊import requestsimport jsonfrom bs4 import BeautifulSoupimport jieba#構造爬蟲for i in range(0, 50): res = requests.get("http://www.mafengwo.cn/qa/ajax_qa/more?type=1&mddid=&tid=&sort=2&key=&page=%d"%i)#返回json數據格式 jd = json.loads(res.text)[data][html]#用json.loads的方法將json格式轉換成python格式 #解析抽取爬取的數據並寫入本地文件 soup = BeautifulSoup(jd,html.parser) for wenda in soup.select(".title"): title = wenda.select("a")[0].text #把解析的內容寫入本地文件 with open("mfw.txt","a") as f: f.write(title)

爬蟲這一塊,比較簡單,就不多說了,只是需要注意一點,螞蜂窩問答社區的網頁採用的非同步載入的方式返回請求信息。

我們在抓包分析的時候,需要藉助chrome瀏覽器的開發者工具,找到非同步載入的網頁鏈接。

1,打開開發者工具,選擇「Network」中的「XHR」,

2,到頁面底部點擊「載入更多」按鈕,找到真正請求的鏈接

爬取完畢後,如果我們不放心,也可以根據網頁的內容對比檢查下爬取的數據是否匹配。

先來看下爬取的數據:

再來看看實際網頁中的數據:

內容一致,爬取的信息沒有錯誤。

2,對獲取的語句內容進行分詞

利用jieba分詞對爬取的內容進行分詞,並輸出幾個示例看下效果。

#讀取上一步驟寫入的本地文件with open(mfw.txt) as f: s = f.read()#分詞word_list = list(jieba.cut(s))#列印分詞示例print(分詞總數:, len(word_list))print(示例:, word_list[:20])#輸出:分詞總數: 816示例: [一個, 熱情, 如火, ,, 一個, 溫婉, 如水, ,, 來說, 說, 重慶, 和, 成都, 到底, 有, 什麼, 不, 一樣, ?, 旅行]

3,計算分詞後的詞頻

分詞後,我們可以利用python的collections模塊中的 Counter,計算出每個詞語的詞頻。

from collections import Counterwords_count = Counter(word_list)most_words = words_count.most_common(300)print(most_words)#輸出:[(?, 64), (的, 53), (哪些, 36), (有, 29), (旅行, 23), (,, 22), (你, 15), (如何, 11), (拍, 9), (值得, 9), (中, 8), (讓, 8), (去, 8), (是, 7), (人, 7), (推薦, 7), (!, 6), (一個, 6), (怎樣, 5), (體驗, 5), (了, 5), (不, 5), (景點, 5), (照片, 5), (美食, 4), (」, 4), (國內, 4), (地, 4), (適合, 4), (但, 4), (什麼, 4), (上, 4), (和, 4), (地方, 4), (照, 4), (「, 4), (出, 4), (過, 4), (在, 4), (好, 4), (風景, 3), (小, 3), (到底, 3), (大片, 3), (台灣, 3), (手機, 3), (都, 3), (、, 3), (特色, 3), (人少, 3), (遊客, 3), (為, 2), (買, 2), (經典, 2), (有意思, 2), (技巧, 2), (簡單, 2), (超, 2), (邊, 2), (最, 2), (帶, 2), ((, 2), (民宿, 2), (入門, 2), (求, 2), (~, 2), (或者, 2), (十一, 2), (韓國, 2), (不會, 2), (一起, 2), (大神, 2), (哪, 2), (遇到, 2), (青旅, 2), (香港, 2), (想, 2), (貝加爾湖, 2), (人山人海, 2), (到, 2), (必須, 2), (。, 2), (全球, 2), (個, 2), (自拍, 2)...]

我們看到輸出的內容中,有一些完全沒用的標點符號,助詞,語氣詞出現的次數很高,然而在這些詞在此次文本分析中,沒有意義。所以我們還需要把這些無意義的詞語過濾掉。

# 去除符號和助詞、介詞等# 這一步我們做了人工干預,手動選出一些忽略詞most_words = [words for words in most_words if words[0] not in ?,、。~「」()!;旅行了到就如何但都在上一個有能是更或的和比較讓很求呢嗎么好還有不可不想不能過適合可以你中怎麼最哪兒哪些如何去什麼值得一去哪裡推薦哪些地方怎樣哪個為什麼應該到底
]print(most_words)#輸出:[(拍, 9), (人, 7), (體驗, 5), (景點, 5), (照片, 5), (美食, 4), (國內, 4), (照, 4), (出, 4), (風景, 3), (小, 3), (大片, 3), (台灣, 3), (手機, 3), (特色, 3), (人少, 3), (遊客, 3), (買, 2), (經典, 2), (有意思, 2).....]

5,製作詞雲

上一步中,已經把出現詞頻最高的詞語輸出到屏幕了,但作為展示結果來說,這還很粗糙。

我們接著再做一步,把這些詞語製作成詞雲,以視覺化的方式表現出來。

python提供了wordcloud模塊,來製作詞雲。

import matplotlib.pyplot as pltdict_words = {}for words in most_words: dict_words[words[0]] = words[1] from wordcloud import WordCloud, ImageColorGeneratorfrom scipy.misc import imreadbg_pic = imread(fei.jpg) my_wordcloud = WordCloud( background_color=gray, max_font_size=100, max_words = 100,# random_state = 30, mask=bg_pic, font_path = C:/Users/Windows/fonts/Dengb.ttf)my_wordcloud.generate_from_frequencies(dict_words)image_colors = ImageColorGenerator(bg_pic)pig=my_wordcloud.recolor(color_func=image_colors)plt.figure(figsize=(15,10))plt.imshow(pig)plt.axis("off")plt.show()

這樣,就很容易看出驢友們在社區里聊的內容主要有哪些。

你可能會問這有什麼用?當然有用,如果我是螞蜂窩的社區運營人員,把這些信息再去結合更多的信息,比如每個問題的熱度,回答數量等信息,去做更多的分析,是不是就可以對社區的運營進行指導和優化了。比如想在社區製造一些討論話題或者策劃一些活動,就更會有的放矢,而不是一拍腦袋就定了。這也是數據分析對實際業務的意義之所在。

結束語:

文本分析在實際應用中,還是有很多場景的。

比如你,雖然加上了女神的qq號,但卻不知和她聊些什麼,那就可以去把的空間說說全抓過來,做下文本分析,看看女神平時都在想些啥。下次聊天的時候,會不會就更有針對性。

比如你想知道你的用戶對app的評價和反饋,是不是可以去第三方應用商店,把用戶品論抓取過來,做下文本分析

比如,你想在某電商平台買個物品,是不是可以把買家評論抓過來,做下文本分析,以進一步了解這件商品。

。。。。。。

當然本文只是一個簡單的示例,在實際業務中,肯定會比這複雜的多。雖然「路漫漫其修遠兮」,然而我們還是要去求索的,而且數據分析本來就是在探索更多的東西。

參考資料:zhuanlan.zhihu.com/p/30

推薦閱讀:

積微:運營工作的核心思想
說真的,你可能活得還不如一隻青蛙
燒錢補貼運營出來的產品,最後該如何收場?
理解信息傳達與編譯,更好的撰寫需求文檔|產品運營
做運營這麼久,你有沒有想過運營的價值是什麼

TAG:數據分析 | Python | 產品運營 |