python数据分析--微信中的故事

这几天研究了下python中操作微信的一个有趣的包,itchat,发现该包很有性格,[呲牙],随即,便引出了如下一段故事。。。。

话说,公元2018年,深夏,在华夏魔都郊区的一个小房子里,一位青年,赤裸着上身,指尖铿锵有力的撞击着机械键盘,发出咔咔咔咔的声音,身旁的烟灰缸里一丝丝青烟缭绕。思想摇曳在不知名的远方。。。(实在编不下去了,哈哈哈)

闲言少叙,先上张图。


image.png

言归正传。python的itchat这个包,可以获取到自己微信好友的基本信息,包括,微信名称,性别,省市,个性签名,通过这些数据结合pandas便可以分析微信好友的性别占比,省市分部,并用好友的微信名称和个性签名做图云。

第一步,先引入包

import itchat
import csv
import pandas as pd
from do_plot import Itchar_friend #在另一个文件中写了一个类,主要实现了一些作图的函数接口
#在另一个文件中引入
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud

第二步,,获取好友信息,并写入到csv中(其实不用的,只是这样做,可以在调试的过程中不用一次一次登录微信)

friends_items = []
itchat.login()#微信登录
friends = itchat.get_friends()#获取所有微信信息
print(friends)
for frident in friends:#从返回的信息中获取好友NickName,Sex,Province,City,Signature信息
    friends_item = get_some_vlaue(frident)
    friends_items.append(friends_item)
print(friends_items)

用get_friends()获取的数据信息,很凌乱,包含太多东西,如下:


image.png

我们从数据中获取如下有效信息并保存在列表friends_items 中
代码如下:

def get_some_vlaue(friend):
        friend_dict = {}
        NickName = friend['NickName']
        Signature = friend['Signature']
        Sex = friend['Sex']
        Province = friend['Province']
        City = friend['City']
        friend_dict['NickName'] = NickName
        friend_dict['Signature'] = Signature
        friend_dict['Sex'] = Sex
        friend_dict['Province'] = Province
        friend_dict['City'] = City
        return friend_dict

写入csv(此步为调试方便),传入列表,转换为字典,用pandas的方法写入到csv中。

def save_csv(friend_dict):
    friend_header = friend_dict[0].keys()
    NickName = []
    Signature = []
    Sex = []
    Province = []
    City = []
    for friend in friend_dict:
          NickName.append(friend['NickName'])
        Signature.append(friend['Signature'])
        Sex.append(friend['Sex'])
        Province.append(friend['Province'])
        City.append(friend['City'])
    data = {'NickName': NickName, 'Sex': Sex, 'Province': Province,
        'City': City, 'Signature': Signature}
    frame = pd.DataFrame(data)
    frame.to_csv('frident.csv',index=True)
    return frame

第三部,分析数据,画图,

先利用pandas将数据从csv中读出,一步步画图

 def read_csv(self):
    frame_dt = pd.read_csv("frident.csv")
    print(frame_dt.head())
    return frame_dt

读入数据,并返回datefream的格式返回,方便之后的数据处理

第一幅图:性别占比图,从接口获取的数据中性别男,Sex为1,女为2,未设置则为0,计算出男女人数,并画图

def plt_sex_plant(self,frame):
    sex = frame['Sex']#获取到所有性别信息
    male = famale = other = 0
    for i in range(len(sex)):#计算男女人数
        if sex[i] == 1:
            male += 1
        elif sex[i] == 2:
            famale += 1
        else:
            other += 1
    label = ['male','famale','other']
    #画饼状图,传入包含人数的列表,标签,和显示形式
    plt.pie([male,famale,other],labels=label,autopct='%1.1f%%',)
    plt.axis('equal')#二位形式显示
    plt.legend(loc='upper left', bbox_to_anchor=(-0.1, 1))#设置标签显示位置和格式
    plt.show()显示图片

下图为图片显示,哈哈哈,第一幅图出来了。


image.png

第二幅图,画两幅柱状图,显示好友省市分部,

def plt_province_plant(self,frame):
    Province = frame['Province']#获取省所有分布信息
    name_list = set(Province)#获取涉及的省
    x_list = list(name_list)
    vals = {}
    #获取每一个省的好友个数
    for i in x_list:
        pro_name = frame[frame['Province'] == i]#
        vals[i] = len(pro_name)
    #定义x,y的数据列表
    x_vals = []
    y_vals = []
    vals_k = sorted(vals.items(), key=lambda vals: vals[1], reverse=True)#将获取到的分部信息排序,以从小到大的顺序排序的

    for vals_i in vals_k[:10]:#获取前10位信息,显示就好
        x_vals.append(vals_i[0])
        y_vals.append(vals_i[1])
    #打开一个画布
    plt.figure()
    plt.bar(x_vals, y_vals, width=0.8)#画一个柱状图
    plt.xticks(rotation=60)#x轴的信息旋转60度显示
    plt.title("Province")#设置图片的标题
    plt.show()#显示图片

上图:


image.png

省市分布套路一样,不在重复,文章已经很长了。。。。。直接上图吧!

image.png

接下来,就是最后一个了,作图云,这个最神奇了。用好友的个性签名,做一个图片

def plt_Signature_plant(self,frame):
    context_list = list(set(frame['Signature']))#获取所有个性签名信息
    wordcloud = WordCloud(
        width=600,
        height=300,
        font_path=r'D:\word\simhei.ttf',  # 设置字体模式
        max_words=400,  # 设置最大字数
    ).generate(str(context_list))

    plt.figure()
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis("off")
    plt.show()
    # 保存图片
    wordcloud.to_file('wordcloud_Signature.png')

好友名称和个性签名,作图云是一个的套路啊,不重复了,哈哈哈哈,上图上图。


image.png

是不是很神奇呢?

哈哈,作者代码技拙,大家多多指教。[抱拳],多多点赞哦!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容