python微信好友數(shù)據(jù)分析詳解
基于微信開放的個人號接口python庫itchat,實現(xiàn)對微信好友的獲取,并對省份、性別、微信簽名做數(shù)據(jù)分析。
效果:
直接上代碼,建三個空文本文件stopwords.txt,newdit.txt、unionWords.txt,下載字體simhei.ttf或刪除字體要求的代碼,就可以直接運行。
#wxfriends.py 2018-07-09 import itchat import sys import pandas as pd import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei']#繪圖時可以顯示中文 plt.rcParams['axes.unicode_minus']=False#繪圖時可以顯示中文 import jieba import jieba.posseg as pseg from scipy.misc import imread from wordcloud import WordCloud from os import path #解決編碼問題 non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd) #獲取好友信息 def getFriends(): friends = itchat.get_friends(update=True)[0:] flists = [] for i in friends: fdict={} fdict['NickName']=i['NickName'].translate(non_bmp_map) if i['Sex'] == 1: fdict['Sex']='男' elif i['Sex'] == 2: fdict['Sex']='女' else: fdict['Sex']='雌雄同體' if i['Province'] == '': fdict['Province'] ='未知' else: fdict['Province']=i['Province'] fdict['City']=i['City'] fdict['Signature']=i['Signature'] flists.append(fdict) return flists #將好友信息保存成CSV def saveCSV(lists): df = pd.DataFrame(lists) try: df.to_csv("wxfriends.csv",index = True,encoding='gb18030') except Exception as ret: print(ret) return df #統(tǒng)計性別、省份字段 def anysys(df): df_sex = pd.DataFrame(df['Sex'].value_counts()) df_province = pd.DataFrame(df['Province'].value_counts()[:15]) df_signature = pd.DataFrame(df['Signature']) return df_sex,df_province,df_signature #繪制柱狀圖,并保存 def draw_chart(df_list,x_feature): try: x = list(df_list.index) ylist = df_list.values y = [] for i in ylist : for j in i: y.append(j) plt.bar(x,y,label=x_feature) plt.legend() plt.savefig(x_feature) plt.close() except: print("繪圖失敗") #解析取個性簽名構(gòu)成列表 def getSignList(signature): sig_list = [] for i in signature.values: for j in i: sig_list.append(j.translate(non_bmp_map)) return sig_list #分詞處理,并根據(jù)需要填寫停用詞、自定義詞、合并詞替換 def segmentWords(txtlist): stop_words = set(line.strip() for line in open('stopwords.txt', encoding='utf-8')) newslist = [] #新增自定義詞 jieba.load_userdict("newdit.txt") for subject in txtlist: if subject.isspace(): continue word_list = pseg.cut(subject) for word, flag in word_list: if not word in stop_words and flag == 'n' or flag == 'eng' and word !='span' and word !='class': newslist.append(word) #合并指定的相似詞 for line in open('unionWords.txt', encoding='utf-8'): newline = line.encode('utf-8').decode('utf-8-sig') #解決\ufeff問題 unionlist = newline.split("*") for j in range(1,len(unionlist)): #wordDict[unionlist[0]] += wordDict.pop(unionlist[j],0) for index,value in enumerate(newslist): if value == unionlist[j]: newslist[index] = unionlist[0] return newslist #高頻詞統(tǒng)計 def countWords(newslist): wordDict = {} for item in newslist: wordDict[item] = wordDict.get(item,0) + 1 itemList = list(wordDict.items()) itemList.sort(key=lambda x:x[1],reverse=True) for i in range(100): word, count = itemList[i] print("{}:{}".format(word,count)) #繪制詞云 def drawPlant(newslist): d = path.dirname(__file__) mask_image = imread(path.join(d, "timg.png")) content = ' '.join(newslist) wordcloud = WordCloud(font_path='simhei.ttf', background_color="white",width=1300,height=620, max_words=200).generate(content) #mask=mask_image, # Display the generated image: plt.imshow(wordcloud) plt.axis("off") wordcloud.to_file('wordcloud.jpg') plt.show() def main(): #登陸微信 itchat.auto_login() # 登陸后不需要掃碼 hotReload=True flists = getFriends() fdf = saveCSV(flists) df_sex,df_province,df_signature = anysys(fdf) draw_chart(df_sex,"性別") draw_chart(df_province,"省份") wordList = segmentWords(getSignList(df_signature)) countWords(wordList) drawPlant(wordList) main()
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用Vscode進行Python開發(fā)環(huán)境配置的步驟
這篇文章主要給大家介紹了關(guān)于如何利用Vscode進行Python開發(fā)環(huán)境配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2020-06-06Python使用MapReduce編程模型統(tǒng)計銷量
MapReduce是面向大數(shù)據(jù)并行處理的計算模型、框架和平臺,是一種計算引擎,可以把我們對大批量數(shù)據(jù)的計算通過抽象成map與reduce兩個子任務進行計算從而更快的得到想要的結(jié)果2022-04-04caffe的python接口繪制loss和accuracy曲線
這篇文章主要為大家介紹了caffe的python接口繪制loss和accuracy曲線示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06Pytorch實現(xiàn)List?Tensor轉(zhuǎn)Tensor,reshape拼接等操作
這篇文章主要介紹了Pytorch實現(xiàn)List?Tensor轉(zhuǎn)Tensor,reshape拼接等操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11Python系統(tǒng)公網(wǎng)私網(wǎng)流量監(jiān)控實現(xiàn)流程
這篇文章主要介紹了Python系統(tǒng)公網(wǎng)私網(wǎng)流量監(jiān)控實現(xiàn)流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11詳解python3安裝pillow后報錯沒有pillow模塊以及沒有PIL模塊問題解決
這篇文章主要介紹了python3安裝pillow后報錯沒有pillow模塊以及沒有PIL模塊問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04