有效利用囤積狂的微信聊天記錄

前言

由于某次在某個微信群里跟大家聊到,感覺這幾年這個群的聊天話題變化真的很明顯福侈,再加上自己微信記錄幾乎都沒刪掉的時候(對酒来,po主本質(zhì)上是個倉鼠,信息都是無價的)肪凛,就提到了可以拿出來做一下分析堰汉,然后就產(chǎn)生了這篇文章/教程辽社。
btw 大家也請不要拿這個去做壞事情,并且這里也事先聲明翘鸭,很多微信中涉及的ID什么的大家盡可能不要透露給陌生人滴铅,雖然微信沒有給出更多的API,但ID本身畢竟還是比名字還可靠地就乓。

這篇文章只是給大家一點小的嘗試汉匙,通過學(xué)習(xí)這篇文章的話,大家應(yīng)該可以學(xué)會如何拿到微信記錄生蚁,并且大概了解了微信記錄是怎么儲存的噩翠,并且了解時間戳與如何對時間序列的數(shù)據(jù)進行resample,從而獲得不同時間間隔的數(shù)據(jù)邦投。并分時間段的去生成詞云伤锚。 大概像這樣,因為微信記錄太多個人信息了志衣,我就放了個高糊的圖了

然后文本分析絕對不僅僅這么點東西屯援,大家可以繼續(xù)挖掘,甚至可以做主題分析蠢涝,或者進行詞語偏好的分析玄呛,甚至可以作為定制化的聊天機器人的訓(xùn)練材料,反正只有想不到和二,沒有做不到啦(:з」∠),歡迎大家多玩蛇共同學(xué)習(xí)python耳胎。

大綱

正如把大象放進冰箱只需要三步一樣惯吕,那么利用微信聊天記錄也只有三步

  1. 導(dǎo)出聊天記錄
    • IOS系統(tǒng)
  2. 解析導(dǎo)出文件
    • python
  3. 畫圖

正文

那么利用微信記錄的話,我們肯定就很難在手機/平板上進行操作怕午,畢竟又要越獄或者安裝語言废登,就很麻煩,而且手機上的目錄結(jié)構(gòu)也比較復(fù)雜郁惜,這一點我們直接略過堡距。。兆蕉。所以我選擇了從手機上把聊天記錄導(dǎo)出到電腦上羽戒,來進行操作。

導(dǎo)出記錄

關(guān)于導(dǎo)出聊天記錄的方法其實有很多虎韵。易稠。。(大家請小心使用包蓝,避免造成數(shù)據(jù)丟失以及下了流氓軟件)


導(dǎo)出微信聊天記錄

但是真正能夠用來做文本分析的卻并不多驶社。企量。
為什么呢?亡电?

就說微信官方的備份與恢復(fù)

備份與恢復(fù)

其實最后導(dǎo)出的結(jié)果届巩,是一個加密后的數(shù)據(jù)庫文件,所以單單憑借這個導(dǎo)出的備份份乒,我們幾乎無法做文本分析姆泻。

而關(guān)于使用安卓系統(tǒng)的,網(wǎng)上也很多冒嫡,但是似乎大多也是要經(jīng)過復(fù)雜的解密操作拇勃,而且首先也必須需要進行ROOT,再加上po主也沒有安卓手機孝凌,這里就放一些網(wǎng)上的教程好了方咆。

最后終于終于進入這個部分的正題。
簡單地說

通過itunes的IOS備份蟀架,再加上一個軟件wx backup瓣赂,就可以實現(xiàn)導(dǎo)出微信聊天記錄并在電腦上閱讀/分析的目的

復(fù)雜的操作大家可以詳見這個鏈接,btw現(xiàn)在是win+mac系統(tǒng)都可用這軟件的

最后導(dǎo)出來的文件大概長這樣片拍。煌集。。


大家直接打開index.html就可以看到導(dǎo)出的聊天記錄捌省,其中也可以看到曾經(jīng)分享過的照片苫纤、視頻。(音頻似乎沒有成功導(dǎo)出來)

而我們要使用的則是js/message.js

其中也分享一個小技巧纲缓,因為現(xiàn)在大家的手機都普遍容量巨大卷拘,而大家的電腦可能都是些固態(tài)硬盤256G的,所以對于這種無差別IOS備份的操作祝高,很有可能會使電腦容量不足栗弟!尤其是itunes這種無法選擇備份目錄,只能備份到C盤的“流氓”軟件工闺。 反正我手機備份下來有60G+
Win7下更改iTunes備份路徑最便捷的方法(收藏一下總沒錯)
這個親測win10 + win8也都可以啦乍赫,簡單地說

通過軟鏈接 (快捷方式)的方式,將原本itunes默認(rèn)使用的備份地址陆蟆,鏈接到一個更大空間的可以自定義的地方(例如移動硬盤之類的)

解析導(dǎo)出的聊天記錄

由于這里要使用python的代碼去解析雷厂,所以要求使用的人有一點python的編程能力,當(dāng)然抄源代碼也是沒問題的遍搞,就是得知道怎么在自己電腦上安裝anaconda, ipython之類的軟件了罗侯。甚至還得知道怎么安裝github上的倉庫

簡單說一下以上步驟好了

  1. 下載合適自己電腦系統(tǒng)的anaconda
  2. 按圖索驥的安裝程序
  3. 使用這個app,輸入pip install jieba pandas numpy tqdm (后續(xù)要使用的軟件)
  4. 還是使用上面提到的app溪猿,輸入jupyter lab
  5. 然后就可以開始愉快的代碼之旅了钩杰。纫塌。
    只要五步就可以學(xué)會使用python,買不了吃虧買不了上當(dāng)了
message_odir = "D:\\Desktop\\微信導(dǎo)出\\群名+id"   # 看導(dǎo)出的文件夾名字
message_path = message_odir + "\\js\\message.js"
data = {}
message = open(message_path,'r',encoding='utf-8').read()
exec(message.replace('var ',''))

由于在js\message.js中讲弄,僅僅聲明一個變量data措左,而且這個data中含有類似于python的dict的數(shù)據(jù)結(jié)構(gòu),所以我直接使用exec進行執(zhí)行避除,并且載入了所有的消息數(shù)據(jù)到data

進行ID到名字的轉(zhuǎn)化怎披,畢竟大家都看不懂一個ID,還是看名字比較熟悉一點

# chartroom ID
gID = data["owner"]['user']
gname = data["owner"]['name']
# For chatroom
# get all user ID and its name
members = data["member"]
mid2username = {mid: members[mid]['name'] for mid in members}
mid2username.pop(gID)
message部分長這樣

大家可以通過自己的方式瓶摆,觀察這個data中的結(jié)構(gòu)凉逛,但以下是一個將這個數(shù)據(jù)轉(zhuǎn)化為一個方便后續(xù)使用的DataFrame的方法,因為后面會涉及到時間的分塊群井,所以我還是將其轉(zhuǎn)為數(shù)據(jù)框來后續(xù)使用

all_messages_df = pd.DataFrame.from_records(data['message'])
all_messages_df.loc[:,'fromWho'] = [mid2username.get(record,'碎碎念達人')
# 碎碎念達人 是po主的用戶名
                                    for record in all_messages_df.loc[:,"m_nsRealChatUsr"]]
all_messages_df.loc[:,'datetime'] = [get_time(record)
                                     for record in all_messages_df.loc[:,"m_uiCreateTime"]]

all_messages_df= all_messages_df.loc[:,["fromWho","datetime","m_nsContent"]]
all_messages_df = all_messages_df.set_index("datetime")

上面是基本的數(shù)據(jù)處理過程状飞,這里再講一下大家所重點想看的一點。
文本分析在獲取數(shù)據(jù)并清洗數(shù)據(jù)之后书斜,當(dāng)然要開始做分詞處理(不是必需的一步诬辈,但是是重要的一步)
這里使用“結(jié)巴”中文分詞:做最好的 Python 中文分詞組件
作為分詞的工具包,使用起來也十分方便荐吉,如果實在上述的pd.DataFrame的情況下的話焙糟,再結(jié)合amueller/word_cloud,只需要以下的一丟丟的代碼样屠。

total_seg_word = jieba.lcut(' '.join(all_messages_df.loc[:,'m_nsContent']))
filtered_seg_word = remove_word(total_seg_word)  # 非必需的一步穿撮,需要自己定義停用詞

import wordcloud
txt = ' '.join(filtered_seg_word)
w = wordcloud.WordCloud(font_path = 'msyh.ttc' , 
                        width = 2000, 
                        height = 1400, 
                        background_color = 'white',
                        collocations=False,
                        colormap ='cividis',
                       max_words =500) #使用微軟雅黑字體
w.generate(txt)
w.to_file(message_odir + '\\total.png')

就可以畫出一個詞云圖片來。
形如

詞云demo

關(guān)于停用詞
由于日常交流的語言中存在大量的無意義瞧哟、語氣混巧、語法助詞,所以需要一個詞匯表去記錄這些詞勤揩,這個詞匯表我們可以稱之為停用詞表,如果不去除的話秘蛔,最后生成的詞云中會存在大量的陨亡。。深员。负蠕。就像下面這個一樣

不去除停用詞的后果

關(guān)于畫圖和代碼

代碼部分我覺得還是jupyter notebook展示會好一點,所以把整個完整的流程包括停用詞表都放到github上了倦畅。
以下是到那個notebook的鏈接(部分結(jié)果我去掉了output遮糖,避免出現(xiàn)個人信息之類的(:з」∠),有意見我也沒辦法)
note book demo
wechat dig

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叠赐,一起剝皮案震驚了整個濱河市欲账,隨后出現(xiàn)的幾起案子屡江,更是在濱河造成了極大的恐慌,老刑警劉巖赛不,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惩嘉,死亡現(xiàn)場離奇詭異,居然都是意外死亡踢故,警方通過查閱死者的電腦和手機文黎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來殿较,“玉大人耸峭,你說我怎么就攤上這事×芨伲” “怎么了劳闹?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長帚戳。 經(jīng)常有香客問我玷或,道長,這世上最難降的妖魔是什么片任? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任偏友,我火速辦了婚禮,結(jié)果婚禮上对供,老公的妹妹穿的比我還像新娘位他。我一直安慰自己,他們只是感情好产场,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布鹅髓。 她就那樣靜靜地躺著,像睡著了一般京景。 火紅的嫁衣襯著肌膚如雪艇抠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天爆安,我揣著相機與錄音烦却,去河邊找鬼。 笑死鄙皇,一個胖子當(dāng)著我的面吹牛芜赌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伴逸,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼缠沈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起洲愤,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤颓芭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后禽篱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畜伐,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年躺率,在試婚紗的時候發(fā)現(xiàn)自己被綠了玛界。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡悼吱,死狀恐怖慎框,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情后添,我是刑警寧澤笨枯,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站遇西,受9級特大地震影響馅精,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粱檀,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一洲敢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茄蚯,春花似錦压彭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至皱碘,卻和暖如春询一,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背癌椿。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工家凯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人如失。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像送粱,于是被迫代替她去往敵國和親褪贵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容