用 Python 分析微信朋友

這天山哥正在看IT動向堕油∨似看到網(wǎng)上有人用Python和R來分析微信朋友,于是來了興趣馍迄,也玩了一把福也。不過不會R,于是用Python畫圖攀圈。(參考網(wǎng)址 http://www.sohu.com/a/154250476_467794

一開始是在Windows下面玩的,后來裝不了 Jieba和Wordcloud峦甩,就轉(zhuǎn)向Mac了赘来。

第一步现喳,安裝 itchat

要方便,你得用PIP: pip install itchat

第二步犬辰,獲取微信朋友資料嗦篱,保存為JSON

import itchat
import json

if __name__ == '__main__':
    # 把獲取到的資料存為Json,那樣在之后的調(diào)試過程幌缝,不用次次連接微信
    f = open("C:\\Users\\Samuel\\Desktop\\friends.json", encoding="UTF-8", mode="w")
    itchat.login() # 這個會彈出二維碼讓你掃碼登陸微信
    friends = itchat.get_friends(update=True)[0:
![gender.png](http://upload-images.jianshu.io/upload_images/6409065-b6c686e33427cdd5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
] #取得朋友資料數(shù)組
    json.dump(friends, fp=f) # 保存為Json
    f.close()

開始玩灸促,分析性別比例

這個是在Mac下的代碼,Windows處理中文亂碼和Mac有點不同涵卵,其它一樣

# coding:utf-8
import json
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties


# Define this to solve the Mac Chinese problem.. if you use english, no need
def getChineseFont():
    return FontProperties(fname='/System/Library/Fonts/PingFang.ttc')

f = open("/Users/sam/Desktop/friends.json", encoding="UTF-8", mode="r")
friends = json.load(fp=f)
f.close()
male = female = other = 0
for friend in friends[1:]:
    sex = friend["Sex"]
    if sex == 1:
        male += 1
    elif sex == 2:
        female += 1
    else:
        other += 1
    # 計算朋友總數(shù)
total = len(friends[1:])
# 打印出自己的好友性別比例
print("男性好友: %.2f%%" % (float(male) / total * 100))
print("女性好友: %.2f%%" % (float(female) / total * 100))
print("不明性別好友: %.2f%%" % (float(other) / total * 100))

# For windows to solve the Chinese problem. No need to add `fontproperties` to the methods.
#matplotlib.rcParams['font.sans-serif'] = ['SimHei']
plt.xticks((0, 1, 2),('其它', '男', '女'), fontproperties=getChineseFont())
plt.title('微信朋友圈性別比例分析', fontproperties=getChineseFont())
plt.bar(left=(0, 1, 2), height=(other/total * 100, male/total * 100, female/total * 100), color=('yellow', 'blue', 'red'))
plt.ylabel("百分比 %",fontproperties=getChineseFont())

plt.show()

輸出結(jié)果:

男性好友: 49.50%
女性好友: 38.25%
不明性別好友: 12.25%

gender.png

再玩浴栽,微信好友個性簽名的自定義詞云圖

這個是好玩的東東,原參考文章里那個地址分析的畫圖太復(fù)雜轿偎,沒有源碼典鸡,而且是R的,咱就不玩了坏晦。咱來分析一下大伙兒個性簽名時使用的高頻詞語是什么萝玷,做個詞云圖。
個性簽名(Signature)有很多本來是表情的昆婿,例如 emoji球碉、span、class等等這些無關(guān)緊要的詞仓蛆,需要先替換掉睁冬,另外,還有類似<>/= 之類的符號多律,也需要寫個簡單的正則替換掉痴突,再把所有拼起來,得到text字串狼荞。不多說了辽装,上代碼。
先安裝 JieBa 和 WordCloud:
pip install jieba
pip install wordcloud

# -*- coding:utf-8 -*-
# coding:utf-8
import json
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud, ImageColorGenerator
import numpy as np
import PIL.Image as Image
import re

# Load the JSON file
f = open("/Users/sam/Desktop/friends.json", encoding="UTF-8", mode="r")
friends = json.load(fp=f)
f.close()

# Use the jieba to analyze the signature.
siglist = []
for i in friends:
    signature = i["Signature"].strip().replace("span","").replace("class","").replace("emoji","")
    rep = re.compile("1fd+w*|[<>/=]")
    signature = rep.sub("", signature)
    siglist.append(signature)
    text = "".join(siglist)

wordlist = jieba.cut(text, cut_all=True)
word_space_split = " ".join(wordlist)

# 這里用一張圖作底版相味,WordCloud會根據(jù)顏色來分布不同頻率出現(xiàn)的詞匯拾积。
coloring = np.array(Image.open("/Users/sam/Desktop/wechat.jpg"))
my_wordcloud = WordCloud(background_color="white", max_words=2000,
mask=coloring, max_font_size=60, random_state=42, scale=2,
font_path="/Library/Fonts/Songti.ttc").generate(word_space_split)
image_colors = ImageColorGenerator(coloring)
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()

好了!大功告成丰涉!親個嘴兒拓巧!

friends.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市一死,隨后出現(xiàn)的幾起案子肛度,更是在濱河造成了極大的恐慌,老刑警劉巖投慈,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件承耿,死亡現(xiàn)場離奇詭異冠骄,居然都是意外死亡,警方通過查閱死者的電腦和手機加袋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門凛辣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人职烧,你說我怎么就攤上這事扁誓。” “怎么了蚀之?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵蝗敢,是天一觀的道長。 經(jīng)常有香客問我恬总,道長前普,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任壹堰,我火速辦了婚禮拭卿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贱纠。我一直安慰自己峻厚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布谆焊。 她就那樣靜靜地躺著惠桃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辖试。 梳的紋絲不亂的頭發(fā)上辜王,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音罐孝,去河邊找鬼呐馆。 笑死,一個胖子當(dāng)著我的面吹牛莲兢,可吹牛的內(nèi)容都是我干的汹来。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼改艇,長吁一口氣:“原來是場噩夢啊……” “哼收班!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谒兄,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤摔桦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后承疲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酣溃,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡瘦穆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年纪隙,在試婚紗的時候發(fā)現(xiàn)自己被綠了赊豌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绵咱,死狀恐怖碘饼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悲伶,我是刑警寧澤艾恼,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站麸锉,受9級特大地震影響钠绍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜花沉,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一柳爽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碱屁,春花似錦磷脯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至柿赊,卻和暖如春俩功,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碰声。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工诡蜓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奥邮。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓万牺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洽腺。 傳聞我的和親對象是個殘疾皇子脚粟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

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