目錄
一、項(xiàng)目背景
二、數(shù)據(jù)準(zhǔn)備
三、數(shù)據(jù)預(yù)處理及描述性統(tǒng)計(jì)
四、數(shù)據(jù)分析
1.聊天小時(shí)、日、月分別匯總分布圖
2.聊天時(shí)間序列分布圖
3.高頻詞匯統(tǒng)計(jì)
4.詞云圖展示
五、其它探索性分析
一、項(xiàng)目背景
2021年2月20日我和我女朋友第一次見面,之后開啟了我們兩個(gè)人的故事,時(shí)隔一年我想將我們的聊天記錄提取出來進(jìn)行簡(jiǎn)單的數(shù)據(jù)分析一下。微信里面有2021年4月20日至2022年2月19日的聊天記錄,一共十個(gè)月的數(shù)據(jù)。
二、數(shù)據(jù)準(zhǔn)備
在網(wǎng)上有許多文章關(guān)于可以找到關(guān)于如何將微信里面的聊天記錄導(dǎo)出成CSV或者txt格式,大家可以去參考。以下就簡(jiǎn)單的寫一下如何將微信的聊天記錄提取出來的步驟:
1.用電腦版微信將手機(jī)微信聊天記錄備份到電腦上
2.安裝模擬器,將手機(jī)微信登錄到模擬器的微信上(模擬器本身有root權(quán)限)
3.然后電腦版微信重新登錄,恢復(fù)聊天記錄到模擬器的微信里
4.模擬器安裝RE文件管理器,在文件管理器找到指定文件夾 /data/data/com.tencent.mm/MicroMsg
5.在MicroMsg文件中找到EnMicroMsg.db復(fù)制到/mnt/shell/emulated/0/others中,現(xiàn)在訪問windows的 C:\Users\你的用戶名\Nox_share\OtherShare 獲取該數(shù)據(jù)庫文件EnMicroMsg.db
6.找微信的uid,/data/data/com.tencent.mm/shared_prefs/ 找到文件auth_info_key_prefs.xml,找到default_uin后面的數(shù)字就是微信UID,模擬器里面可以直接看到IMEI
7.計(jì)算數(shù)據(jù)庫查詢密碼,模擬器IMEI+微信UID在免費(fèi)MD5在線計(jì)算得到的32位小寫MD5的前七位就是密碼
8.下載 sqlcipher 的軟件,輸入密碼就可以打開 EnMicroMsg.db 數(shù)據(jù)庫了
9.之后再軟件上直接導(dǎo)出CSV或者txt格式就行啦
注意:數(shù)據(jù)庫查詢密碼和微信的版本有關(guān)系,不同的坂本解碼方法不一樣,現(xiàn)在的最新版本 IMEI (手機(jī)序列號(hào))為固定值為1234567890ABCDEF,大家可以都去試一下。
三、數(shù)據(jù)預(yù)處理及描述性統(tǒng)計(jì)
原始數(shù)據(jù)一共有22列,74019行,說明我們兩在10個(gè)月的時(shí)間里面發(fā)了74018條消息,一共306天,平均每天發(fā)了241.89條消息,還處于熱戀期,嘿嘿。本文用的python進(jìn)行的數(shù)據(jù)分析,并附上代碼。
1.要將時(shí)間戳轉(zhuǎn)換為北京時(shí)間
2.處理圖片和鏈接等非文字聊天記錄
…?
import pandas as pd
chat = pd.read_csv('D:/chat.csv', sep=',', usecols=[4,6,7,8],encoding="gbk")
chat.head()
isSend | createTime | talker | content | |
---|---|---|---|---|
0 | 1 | 1.629640e+12 | wxid_mbw5g1awfkvj22 | 我看看 |
1 | 0 | 1.629640e+12 | wxid_mbw5g1awfkvj22 | 好可憐,有這樣的爹 |
2 | 0 | 1.629640e+12 | wxid_mbw5g1awfkvj22 | 這五個(gè)娃命途多舛 |
3 | 1 | 1.629640e+12 | wxid_mbw5g1awfkvj22 | 又是白宇和毛曉彤合作 |
4 | 1 | 1.629640e+12 | wxid_mbw5g1awfkvj22 | 之前有一部,他們倆合作的挺火的劇叫什么來著 |
chat.shape
(74018, 4)
print(chat.isSend.value_counts())
0 38269
1 35749
Name: isSend, dtype: int64
isSend中為1的是我發(fā)的消息,為0的是女朋友發(fā)的消息,結(jié)果統(tǒng)計(jì)一共74018條消息,我發(fā)了35749,女朋友發(fā)了38269條消息,我比女朋友少發(fā)了2520條消息,果真還是我輸了。(手動(dòng)哭哭表情包)
四、數(shù)據(jù)分析
1.聊天小時(shí)、日、月分別匯總分布圖
import pandas as pd
import time
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import *#如果想在圖上顯示中文,需導(dǎo)入這個(gè)包
chat = pd.read_csv('D:/chat.csv', sep=',', usecols=[6,7,8],encoding="gbk")
myGirl = 'wxid_mbw5g1awfkvj22'
chat_time = []
chat_content = []
for i in range(len(chat)-1):
content = chat[i:i+1]
if content['talker'].values[0] == myGirl:
t = content['createTime'].values[0]//1000#除以1000用以剔除后三位0
c = content['content'].values[0]
chat_time.append(t)
chat_content.append(c)
def to_hour(t):
struct_time = time.localtime(t) # 將時(shí)間戳轉(zhuǎn)換為struct_time元組
hour = round((struct_time[3] + struct_time[4] / 60), 2)
return hour
hour_set = [to_hour(i) for i in chat_time]
myfont = FontProperties(fname=r'C:\Windows\Fonts\MSYH.TTC',size=22)#標(biāo)題字體樣式
myfont2 = FontProperties(fname=r'C:\Windows\Fonts\MSYH.TTC',size=18)#橫縱坐標(biāo)字體樣式
sns.set_style('darkgrid')#設(shè)置圖片為深色背景且有網(wǎng)格線
sns.distplot(hour_set, 24, color='lightcoral')
plt.xticks(np.arange(0, 25, 1.0), fontsize=15)
plt.yticks(fontsize=15)
plt.title('聊天時(shí)間分布', fontproperties=myfont)
plt.xlabel('時(shí)間段', fontproperties=myfont2)
plt.ylabel('聊天時(shí)間分布', fontproperties=myfont2)
fig = plt.gcf()
fig.set_size_inches(15,8)
fig.savefig('chat_time.png',dpi=100)
plt.show()

從圖中我們可以看到聊天最多的時(shí)間段為22點(diǎn)到23點(diǎn),達(dá)到了11%以上,一般晚上聊的比較多,其次就是早飯前后和午飯前后聊的也比較多。發(fā)現(xiàn)在0點(diǎn)以后還有些聊天記錄,下次再分析的時(shí)候希望這部分的百分比降低,早睡才能變美哦。
類似的思想可以繪制出每月的聊天記錄,因?yàn)閳D中4月只有10天,2月有19天聊天記錄所以比例會(huì)小一點(diǎn),8月和9月聊天記錄最多,往后的聊天記錄就有略有下降?。
?類似的思想可以繪制每日匯總的柱線圖,可以看到1號(hào)和16號(hào)的聊天記錄較多,5號(hào)和19號(hào)的聊天記錄較少,總體分布較均勻。
圖中橫坐標(biāo)為星期幾,可以看出分布較均勻,在周末略比工作日的聊天記錄多一點(diǎn)。?
2.聊天時(shí)間序列分布圖
def to_date(t):
timeArray = time.localtime(t)
otherStyleTime = time.strftime("%Y-%m-%d", timeArray)
return otherStyleTime
date_set = [to_date(i) for i in chat_time]
a=pd.Series(date_set)
b=a.value_counts()
data=pd.Series(b)
data=data.sort_index()
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import datetime#這個(gè)包很關(guān)鍵
#設(shè)定開始和結(jié)束時(shí)間
start=datetime.datetime(2021,4,20)
stop=datetime.datetime(2022,2,20)
delta=datetime.timedelta(1)#設(shè)定日期的間隔
dates=mpl.dates.drange(start,stop,delta)# 返回浮點(diǎn)型的日期序列,這個(gè)是生成時(shí)間序列,同理如果是將序列轉(zhuǎn)成日期呢?
#存在兩個(gè)問題,一個(gè)是坐標(biāo)軸沒有按照日期的形式去標(biāo)注,另一個(gè)是刻度的數(shù)量和位置也不合適
fig=plt.figure(figsize=(24,12))#調(diào)整畫圖空間的大小
plt.plot(dates,data,linestyle='-',marker='*',c='r',alpha=0.5)#作圖
ax=plt.gca()
date_format=mpl.dates.DateFormatter('%Y-%m-%d')#設(shè)定顯示的格式形式
ax.xaxis.set_major_formatter(date_format)#設(shè)定x軸主要格式
ax.xaxis.set_major_locator(mpl.ticker.MultipleLocator(30))#設(shè)定坐標(biāo)軸的顯示的刻度間隔
fig.autofmt_xdate()#防止x軸上的數(shù)據(jù)重疊,自動(dòng)調(diào)整。
圖中可以明顯的看出聊天的數(shù)據(jù)量隨時(shí)間的變化而變化,消息數(shù)量呈顯波動(dòng)的趨勢(shì)。12月份左右數(shù)據(jù)量明顯較少。表格中列出了數(shù)據(jù)量最多的5天和最少的5天,最多的一天是2021年8月28日,這一天剛好我我去武漢上學(xué)在火車上所以發(fā)的消息較多,發(fā)了804條。最少的是2021年7月22日這一天只發(fā)了4條聊天記錄,查看了一下改天4條聊天記錄都是我發(fā)的,那天確實(shí)是特殊情況,具體什么情況寶寶應(yīng)該知道,一共306天每天都有聊天記錄。
3.高頻詞匯統(tǒng)計(jì)
import pandas as pd
import time
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import datetime
import re
from matplotlib.font_manager import *#如果想在圖上顯示中文,需導(dǎo)入這個(gè)包
chat = pd.read_csv('D:/chat.csv', sep=',', usecols=[6,7,8],encoding="gbk")
myGirl = 'wxid_mbw5g1awfkvj22'
chat_time = []
chat_content = []
for i in range(len(chat)-1):
content = chat[i:i+1]
if content['talker'].values[0] == myGirl:
t = content['createTime'].values[0]//1000#除以1000用以剔除后三位0
c = content['content'].values[0]
chat_time.append(t)
chat_content.append(c)
def to_hour(t):
struct_time = time.localtime(t) # 將時(shí)間戳轉(zhuǎn)換為struct_time元組
hour = round((struct_time[3] + struct_time[4] / 60), 2)
return hour
pattern_1 = '.*?(寶寶).*?'
pattern_2= '.*?(晚安).*?'
pattern_3 = '.*?(吃飯).*?'
pattern_4 = '.*?(干嘛).*?'
pattern_5= '.*?(嗯嗯).*?'
pattern_6='.*?(喜歡).*?'
pattern_7='.*?(哈哈).*?'
pattern_8='.*?(早安).*?'
pattern_9='.*?(愛).*?'
pattern_set = [pattern_1, pattern_2, pattern_3, pattern_4,pattern_5, pattern_6, pattern_7,
pattern_8,pattern_9]
start = datetime.datetime.now()
statistic = [0,0,0,0,0,0,0,0,0]
for i in range(len(chat_content)):
for j in range(len(pattern_set)):
length = len(re.findall(pattern_set[j], str(chat_content[i])))
statistic[j] += length
result = {
'寶寶': statistic[0],
'晚安': statistic[1],
'吃飯': statistic[2],
'干嘛': statistic[3],
'嗯嗯': statistic[4],
'喜歡': statistic[5],
'哈哈': statistic[6],
'早安': statistic[7],
'愛': statistic[8]
}
print(result)
end = datetime.datetime.now()
print('\n..........\n字符統(tǒng)計(jì)結(jié)束,用時(shí): {}\n............\n'.format(end-start))
{'寶寶': 627, '晚安': 645, '吃飯': 907, '干嘛': 472, '嗯嗯': 2280, '喜歡': 730, '哈哈': 1674, '早安': 9, '愛': 821}
.......... 字符統(tǒng)計(jì)結(jié)束,用時(shí): 0:27:56.019124 ............
可以將自己想要了解的詞匯輸入上去,然后就能得出一共發(fā)了多少條這樣的詞匯,本文中可以看到晚安一共有645條,一共大概300天的時(shí)間,可以看出幾乎每天每個(gè)人都發(fā)了晚安。寶寶也有627次,聊吃飯的話題也挺多的哈,哈哈發(fā)了1674次,說明聊天的氛圍還是蠻開心的,嘿嘿!
4.詞云圖展示
#因?yàn)榇a太長(zhǎng),這里只放部分代碼,具體的可以自己研究
def main(input_filename):
content = '\n'.join([line.strip()
for line in codecs.open(input_filename, 'r', 'utf-8')
if len(line.strip()) > 0])
stopwords = set([line.strip()
for line in codecs.open(stopwords_filename, 'r', 'utf-8')])
segs = jieba.cut(content)
words = []
for seg in segs:
word = seg.strip().lower()
if len(word) > 1 and word not in stopwords:
words.append(word)
因?yàn)槭呛团笥训牧奶煊涗浰晕也捎昧朔鄯鄣男男巫鳛樵~云的底層圖案,似乎更加好看而且懷念呢。我們可以看到上面兩幅圖詞云圖都可以看出晚安、回來、吃飯、親親等詞比較明顯的出現(xiàn)在圖上,看的越清晰說明改詞出現(xiàn)的頻率越高,在邊上也有些關(guān)于工作,家庭,生活的話題,幾乎覆蓋了所有的聊天話題。文章來源:http://www.zghlxwxcb.cn/news/detail-441021.html
五、其它探索性分析
因?yàn)闀r(shí)間比較有限,除了本文的一些分析外還可以對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)建模,就是對(duì)女朋友的聊天記錄的詞匯進(jìn)行預(yù)測(cè),預(yù)測(cè)未來女朋友的一些聊天詞匯或者說心情的變化。也可以借助機(jī)器學(xué)習(xí)或者人工智能的手段對(duì)數(shù)據(jù)進(jìn)行挖掘,通過判斷心情詞匯,可以更好的知道如何回女朋友的消息才能讓女朋友更開心。本文就到此結(jié)束了,歡迎大家繼續(xù)往后面進(jìn)行研究。文章來源地址http://www.zghlxwxcb.cn/news/detail-441021.html
到了這里,關(guān)于微信聊天記錄數(shù)據(jù)分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!