基于Python的微信朋友圈数据可视化分析之地点

前提

朋友圈的相关数据请参照上一篇文章《基于Python的微信朋友圈数据可视化分析之个性签名》获取,本篇文章默认需要的数据已经下载保存至本地的 csv 文件中了。

将好友的地点按照省份进行统计

import pandas as pd
from collections import Counter
from pyecharts import Map

wechat_info = pd.read_csv("wechat_friends_info.csv", encoding="gbk")
province = wechat_info['Province']
province_list = []
for i in list(province):
    if isinstance(i, str):
        if ' ' in i or i.encode( 'UTF-8' ).isalpha():  # 如果是英文城市,则代表不是国内的城市,暂不做处理
            continue
        province_list.append(i)

friends_address = list(Counter(province_list).keys())
friends_count = list(Counter(province_list).values())

map = Map("我的微信好友分布", "@高正杰", width=1200, height=600)
map.add("", friends_address, friends_count, maptype='china',
        is_visualmap=True, is_piecewise=True,
        visual_text_color="#000",
        visual_range_text=["", ""],
        pieces=[
            {"max": 160, "min": 70, "label": "高数值"},
            {"max": 69, "min": 0, "label": "低数值"},
        ])
map.render('province.html')

生成的结果截图如下所示,体验地址
将好友的地点按照省份进行统计

将好友的地点按照城市进行统计

import pandas as pd
from collections import Counter
from pyecharts import Geo
from pyecharts.datasets.coordinates import get_coordinate

wechat_info = pd.read_csv("wechat_friends_info.csv", encoding="gbk")
city = wechat_info['City']
city_list = []
for i in list(city):
    if isinstance(i, str):
        if ' ' in i or i.encode( 'UTF-8' ).isalpha():  # 如果是英文城市,则代表不是国内的城市,暂不做处理
            continue
        if get_coordinate(i) is None:
            if get_coordinate(i+'市') is not None:
                i = i + '市'
            elif get_coordinate(i+'区') is not None:
                i = i + '区'
        city_list.append(i)

def geo_formatter(params):
    return params.name + ' : ' + params.value[2]

geo = Geo(
    "我的微信好友分布",
    "@高正杰",
    title_color="#fff",
    title_pos="center",
    width=1200,
    height=600,
    background_color="#404a59",
)
attr, value = geo.cast(Counter(city_list))
geo.add(
    "",
    attr,
    value,
    visual_range=[0, 91],
    tooltip_formatter=geo_formatter,    # 重点在这里,将函数直接传递为参数。
    visual_text_color="#fff",
    symbol_size=15,
    is_visualmap=True,
)
geo.render('city.html')

生成的结果截图如下所示,体验地址
将好友的地点按照城市进行统计

遇到的问题

现象

Jupyter notebook 中显示空白,生成的 HTML 文件打开只显示南海诸岛,不显示其他内容。

原因

自从 v0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运行,pyecharts 将不再自带地图 js 文件。如用户需要用到地图图表,则需要自行安装对应的地图文件包。

解决办法

将以下几个文件包全包安装,关于这些包的含义,可以参考《自定义地图

pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg

注意:如果安装完成后,在 Jupyter Notebook 中生成的图形还是无法查看,则需要重启 Jupyter Notebook 即可解决问题。

参考文献

文章最后更新时间为:2018 年 10 月 23 日 22:47:11

添加新评论