zoukankan      html  css  js  c++  java
  • 我的第一个微信好友数据分析

    本次我们利用python来分析一下我们微信的好友数据

    首先安装7个依赖库

    • 1、Pillow

    PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

    由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow,如果有annaconda,则直接使用即可,如无,须在命令行中安装:

    pip install pillow

    如果遇到Permission denied安装失败,请加上sudo重试。

    • 2、Pyecharts

    是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。使用pyecharts可以生成独立的网页,也可以在flask、django中集成使用。

    可在命令行通过pip安装:

    pip install pyecharts 
    • 3、Itchat

    itchat 是一个开源的微信个人号接口,使用 python 调用微信从未如此简单。

    可在在命令行通过pip安装:

    pip install itchat
    • 4、Jieba

    Jieba库是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式、全模式和搜索引擎模式,下面是三种模式的特点。

    精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析

    全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据

    搜索引擎模式:在精确模式的基础上,对长词再次进行切分

    可在在命令行通过pip安装:

    pip install jieba
    • 5、Numpy

    NumPy 是一个 Python 的第三方库,代表 “Numeric Python”,主要用于数学/科学计算。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。

    使用 Numpy 我们可以轻松进行如下等计算:

    • 数组的算数和逻辑运算。
    • 傅立叶变换和用于图形操作的例程。
    • 与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。

    可在在命令行通过pip安装:

    pip install Numpy
    • 6、Pandas

    Pandas 是基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas 提

    供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使 Python 成为强大而高效的数据分析环境的重要因素之一。

    可在在命令行通过pip安装:

    pip install Pandas
    • 7、wxpy

    wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。

    可在在命令行通过pip安装:

    pip install wxpy
    • 8、安装地图数据包:
    pip install echarts-china-provinces-pypkg
    pip install echarts-countries-pypkg

    在安装成功这几个库后,我们正式开始微信好友分析

    步骤如下:

    1.登陆微信网页版

    from wxpy import *
    bot = Bot(cache_path=True)#初始化机器人,选择缓存模式(扫码)登录
    friend_all = bot.friends()#获取我的所有微信好友信息

    如图,运行后可得到一个二维码,用手机微信扫一扫登陆即可

    2.为了获取好友信息中需要的部分,我们对信息需要进行处理。从上面的获取信息全字段来看,我们获取的每位好友的信息都是一个字典,字典里只有'City'、'Province'、'Signature'、
    'NickName'、'HeadImgUrl'、'Sex'是我们需要的。下面我们就对这几个 key 进行提取。

    lis=[] #创建一个空列表
    for a_friend in friend_all:
        NickName = a_friend.raw.get('NickName',None)
        #Sex = a_friend.raw.get('Sex',None)
        Sex ={1:"",2:"",0:"其它"}.get(a_friend.raw.get('Sex',None),None)
        City = a_friend.raw.get('City',None)
        Province = a_friend.raw.get('Province',None)
        Signature = a_friend.raw.get('Signature',None)
        HeadImgUrl = a_friend.raw.get('HeadImgUrl',None)
        HeadImgFlag = a_friend.raw.get('HeadImgFlag',None)
        list_0=[NickName,Sex,City,Province,Signature,HeadImgUrl,HeadImgFlag]
        lis.append(list_0)

    将其导入excel

    def lis2e07(filename,lis):
        import openpyxl
        wb = openpyxl.Workbook()
        sheet = wb.active
        sheet.title = 'list2excel07'
        file_name = filename +'.xlsx'
        title = []
        title_2 = [NickName,Sex,City,Province,Signature,HeadImgUrl,HeadImgFlag]
        
        title.append(title_2)
        for i in range(len(lis)):
            for j in range(len(lis[i])):
                sheet.cell(row=i+1, column=j+1, value=str(lis[i][j]))
        wb.save(file_name)
        print("写入数据成功")
    lis2e07('C:\Users\moyulin\Desktop\aini',lis

    运行excel可得这样一个列表

     接下来我们对好友数据进行简单分析

    Friends = bot.friends()
    data = Friends.stats_text(total=True, sex=True,top_provinces=30, top_cities=500)
    print(data)

    运行后,如图

    然后将好友所在的城市用词云图显示:

    from pandas import read_excel
    df = read_excel('C:\Users\moyulin\Desktop\aini.xlsx',sheet_name='list2excel07')
    df['City'].count()
    df['City'].describe()
    from wordcloud import WordCloud 
    import matplotlib.pyplot as plt 
    word_list= df['City'].fillna('').tolist()
    new_text = ' '.join(word_list)
    wordcloud = WordCloud(font_path='simhei.ttf', background_color="black").generate(new_text)
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()

    得出如下结果

     最后生成微信好友在地图上的分布图

    import pandas as pd
    province_list = df['Province'].fillna('').tolist()
    count_province = pd.value_counts(province_list)
    for i in range(len(province_list)):
        province_list[i]+=''
    from pyecharts import Map
    value = count_province.tolist()
    attr = count_province.index.tolist()
    map = Map("分布",width=1200,height=600)
    map.add("",attr,value,maptype='china',is_bisualmap=True,visual_test_color='#000',is_label_show=True)
    map.show_config()
    map.render('map2.html')

    运行html文件可得

    鼠标点过去即可得到所在区域的人数~

    今天的分享到此为止,下次再见啦~

  • 相关阅读:
    爬虫大作业
    数据结构化与保存
    爬取校园新闻首页的新闻
    爬取校园新闻
    网络爬虫基础练习
    中文词频统计
    在线检测网页在各种浏览器的打开效果
    Tomcat内存设置详解
    as3.0 [Embed]标签嵌入外部资源
    Flex学习总结
  • 原文地址:https://www.cnblogs.com/moyulin/p/Moyulin_pig4.html
Copyright © 2011-2022 走看看