用Python爬了我的微信好友,他們是這樣的...
點擊上方“碼農(nóng)突圍”,馬上關(guān)注
這里是碼農(nóng)充電第一站,回復(fù)“666”,獲取一份專屬大禮包 真愛,請設(shè)置“星標(biāo)”或點個“在看

01 數(shù)據(jù)分析
itchat.auto_login(hotReload?=?True)?
friends?=?itchat.get_friends(update?=?True)

02 好友性別
def?analyseSex(firends):?
??sexs?=?list(map(lambda?x:x['Sex'],friends[1:]))?
?counts?=?list(map(lambda?x:x[1],Counter(sexs).items()))?
?labels?=?['Unknow','Male','Female']?
?colors?=?['red','yellowgreen','lightskyblue']?
?plt.figure(figsize=(8,5),?dpi=80)?
?plt.axes(aspect=1)?
?plt.pie(counts,?#性別統(tǒng)計結(jié)果?
???labels=labels,?#性別展示標(biāo)簽?
???colors=colors,?#餅圖區(qū)域配色?
???labeldistance?=?1.1,?#標(biāo)簽距離圓點距離?
???autopct?=?'%3.1f%%',?#餅圖區(qū)域文本格式?
???shadow?=?False,?#餅圖是否顯示陰影?
???startangle?=?90,?#餅圖起始角度?
???pctdistance?=?0.6?#餅圖區(qū)域文本距離圓點距離?
?)?
?plt.legend(loc='upper?right',)?
?plt.title(u'%s的微信好友性別組成'?%?friends[0]['NickName'])?
?plt.show()

03 好友頭像
def?analyseHeadImage(frineds):?
?#?Init?Path?
?basePath?=?os.path.abspath('.')?
?baseFolder?=?basePath?+?'\\HeadImages\\'
?if(os.path.exists(baseFolder)?==?False):?
??os.makedirs(baseFolder)??
?#?Analyse?Images?
?faceApi?=?FaceAPI()?
?use_face?=?0
?not_use_face?=?0
?image_tags?=?''?
?for?index?in?range(1,len(friends)):?
??friend?=?friends[index]?
??#?Save?HeadImages?
??imgFile?=?baseFolder?+?'\\Image%s.jpg'?%?str(index)?
??imgData?=?itchat.get_head_img(userName?=?friend['UserName'])?
??if(os.path.exists(imgFile)?==?False):?
???with?open(imgFile,'wb')?as?file:?
????file.write(imgData)???
??#?Detect?Faces?
??time.sleep(1)?
??result?=?faceApi.detectFace(imgFile)?
??if?result?==?True:?
???use_face?+=?1
??else:?
???not_use_face?+=?1??
??#?Extract?Tags?
??result?=?faceApi.extractTags(imgFile)?
??image_tags?+=?','.join(list(map(lambda?x:x['tag_name'],result)))??
?labels?=?[u'使用人臉頭像',u'不使用人臉頭像']?
?counts?=?[use_face,not_use_face]?
?colors?=?['red','yellowgreen','lightskyblue']?
?plt.figure(figsize=(8,5),?dpi=80)?
?plt.axes(aspect=1)?
?plt.pie(counts,?#性別統(tǒng)計結(jié)果?
???labels=labels,?#性別展示標(biāo)簽?
???colors=colors,?#餅圖區(qū)域配色?
???labeldistance?=?1.1,?#標(biāo)簽距離圓點距離?
???autopct?=?'%3.1f%%',?#餅圖區(qū)域文本格式?
???shadow?=?False,?#餅圖是否顯示陰影?
???startangle?=?90,?#餅圖起始角度?
???pctdistance?=?0.6?#餅圖區(qū)域文本距離圓點距離?
?)?
?plt.legend(loc='upper?right',)?
?plt.title(u'%s的微信好友使用人臉頭像情況'?%?friends[0]['NickName'])?
?plt.show()??
?image_tags?=?image_tags.encode('iso8859-1').decode('utf-8')?
?back_coloring?=?np.array(Image.open('face.jpg'))?
?wordcloud?=?WordCloud(?
??font_path='simfang.ttf',?
??background_color="white",?
??max_words=1200,?
??mask=back_coloring,?
??max_font_size=75,?
??random_state=45,?
??width=800,?
??height=480,?
??margin=15
?)??
?wordcloud.generate(image_tags)?
?plt.imshow(wordcloud)?
?plt.axis("off")?
?plt.show()


04 好友簽名
def?analyseSignature(friends):?
?signatures?=?''?
?emotions?=?[]?
?pattern?=?re.compile("1f\d.+")?
?for?friend?in?friends:?
??signature?=?friend['Signature']?
??if(signature?!=?None):?
???signature?=?signature.strip().replace('span',?'').replace('class',?'').replace('emoji',?'')?
???signature?=?re.sub(r'1f(\d.+)','',signature)?
???if(len(signature)>0):?
????nlp?=?SnowNLP(signature)?
????emotions.append(nlp.sentiments)?
????signatures?+=?'?'.join(jieba.analyse.extract_tags(signature,5))?
?with?open('signatures.txt','wt',encoding='utf-8')?as?file:?
???file.write(signatures)?
?#?Sinature?WordCloud?
?back_coloring?=?np.array(Image.open('flower.jpg'))?
?wordcloud?=?WordCloud(?
??font_path='simfang.ttf',?
??background_color="white",?
??max_words=1200,?
??mask=back_coloring,?
??max_font_size=75,?
??random_state=45,?
??width=960,?
??height=720,?
??margin=15
?)?
?wordcloud.generate(signatures)?
?plt.imshow(wordcloud)?
?plt.axis("off")?
?plt.show()?
?wordcloud.to_file('signatures.jpg')?
?#?Signature?Emotional?Judgment?
?count_good?=?len(list(filter(lambda?x:x>0.66,emotions)))?
?count_normal?=?len(list(filter(lambda?x:x>=0.33?and?x<=0.66,emotions)))?
?count_bad?=?len(list(filter(lambda?x:x<0.33,emotions)))?
?labels?=?[u'負(fù)面消極',u'中性',u'正面積極']?
?values?=?(count_bad,count_normal,count_good)?
?plt.rcParams['font.sans-serif']?=?['simHei']?
?plt.rcParams['axes.unicode_minus']?=?False
?plt.xlabel(u'情感判斷')?
?plt.ylabel(u'頻數(shù)')?
?plt.xticks(range(3),labels)?
?plt.legend(loc='upper?right',)?
?plt.bar(range(3),?values,?color?=?'rgb')?
?plt.title(u'%s的微信好友簽名信息情感分析'?%?friends[0]['NickName'])?
?plt.show()


05 好友位置
def?analyseLocation(friends):?
?headers?=?['NickName','Province','City']?
?with?open('location.csv','w',encoding='utf-8',newline='',)?as?csvFile:?
??writer?=?csv.DictWriter(csvFile,?headers)?
??writer.writeheader()?
??for?friend?in?friends[1:]:?
???row?=?{}?
???row['NickName']?=?friend['NickName']?
???row['Province']?=?friend['Province']?
???row['City']?=?friend['City']?
???writer.writerow(row)

06 總結(jié)
-?END - 最近熱文
? ?院士拿布袋領(lǐng)獎歸來,朋友圈刷屏了 ? ?32歲清華女教授獲獎百萬走紅后回應(yīng):人生第一次因顏值受到關(guān)注 ? ?杭州程序員從互聯(lián)網(wǎng)跳央企,曬一天工作和收入,網(wǎng)友:待一年就廢 ? ?字節(jié)跳動P0級事故:實習(xí)生刪除GB以下所有模型,差點沒上頭條......
評論
圖片
表情

