专栏名称: 程序员大咖
为程序员提供最优质的博文、最精彩的讨论、最实用的开发资源;提供最新最全的编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE API等等。并不定期奉送各种福利。
目录
相关文章推荐
51好读  ›  专栏  ›  程序员大咖

数据 | 基于 Python 分析微信好友数据

程序员大咖  · 公众号  · 程序员  · 2018-05-21 10:24

正文

请到「今天看啥」查看全文


= 0.6

  • )

  • plt . legend ( loc = 'upper right' ,)

  • plt . title ( u '%s的微信好友性别组成' % friends [ 0 ][ 'NickName' ])

  • plt . show ()

  • 这里简单解释下这段代码,微信中性别字段的取值有Unkonw、Male和Female三种,其对应的数值分别为0、1、2。通过Collection模块中的Counter()对这三种不同的取值进行统计,其items()方法返回的是一个元组的集合,该元组的第一维元素表示键,即0、1、2,该元组的第二维元素表示数目,且该元组的集合是排序过的,即其键按照0、1、2 的顺序排列,所以通过map()方法就可以得到这三种不同取值的数目,我们将其传递给matplotlib绘制即可,这三种不同取值各自所占的百分比由matplotlib计算得出。下图是matplotlib绘制的好友性别分布图:

    看到这个结果,我一点都不觉得意外,男女比例严重失衡,这虽然可以解释我单身的原因,可我不觉得通过调整男女比例就能解决问题,好多人认为自己单身是因为社交圈子狭小,那么是不是扩展了社交圈子就能摆脱单身呢?我觉得或许这样会增加脱单的概率,可幸运之神应该不会眷顾我,因为我的好运气早在我24岁以前就消耗完啦。

    在知乎上有一个热门的话题:现在的男性是否普遍不再对女性展开追求了?,其实哪里会有人喜欢孤独呢?无非是怕一次又一次的失望罢了。有的人并不是我的花儿,我只是恰好途径了她的绽放。曾经有人说我是一个多情的人,可她永远不会知道,我做出的每一个决定都炽热而悲壮。所谓"慧极必伤,情深不寿;谦谦君子,温润如玉",世人苦五毒者大抵如此。

    好友头像

    分析好友头像,从两个方面来分析,第一,在这些好友头像中,使用人脸头像的好友比重有多大;第二,从这些好友头像中,可以提取出哪些有价值的关键字。这里需要根据HeadImgUrl字段下载头像到本地,然后通过腾讯优图提供的人脸识别相关的API接口,检测头像图片中是否存在人脸以及提取图片中的标签。其中,前者是分类汇总,我们使用饼图来呈现结果;后者是对文本进行分析,我们使用词云来呈现结果。

    关键代码如下所示:

    1. def analyseHeadImage(frineds):

    2.    basePath = os.path.abspath('.')

    3.    baseFolder = basePath + 'HeadImages'

    4.    if(os.path.exists(baseFolder) == False):

    5.        os.makedirs(baseFolder)

    6.    faceApi = FaceAPI()

    7.    use_face = 0

    8.    not_use_face = 0

    9.    image_tags = ''

    10.    for index in range(1,len(friends)):

    11.        friend = friends[index]

    12.        imgFile = baseFolder + 'Image%s.jpg' % str(index)

    13.        imgData = itchat.get_head_img(userName = friend['UserName'])

    14.        if(os.path.exists(imgFile) == False):

    15.            with open(imgFile,'wb') as file:

    16.                file.write(imgData)

    17.        time.sleep(1)

    18.        result = faceApi.detectFace(imgFile)

    19.        if result == True:

    20.            use_face += 1

    21.        else:

    22.            not_use_face += 1

    23.        result = faceApi.extractTags(imgFile)

    24.        image_tags += ','.join(list(map(lambda x:x['tag_name'],result)))

    25.    labels = [u'使用人脸头像',u'不使用人脸头像']

    26.    counts = [use_face,not_use_face]

    27.    colors = ['red','yellowgreen','lightskyblue']

    28.    plt.figure(figsize=(8,5), dpi=80)

    29.    plt.axes(aspect=1)

    30.    plt.pie(counts,

    31.            labels=labels,

    32.            colors=colors,

    33.            labeldistance = 1.1,

    34.            autopct = '%3.1f%%',

    35.            shadow = False,

    36.            startangle = 90,

    37.            pctdistance = 0.6

    38.    )

    39.    plt.legend(loc='upper right







    请到「今天看啥」查看全文