[课程作业] 使用 Pyecharts进行个人词云的可视化,及对个人定位数据进行简单的图表生成


可视化课程的两个小作业:

  1. 使用 echarts 生成一个与个人有关的词云图
  2. 使用 echarts 建立关于个人时空数据的图表

Pyecharts是一个 echarts的 Python包装,社区也提供了其他多种语言的绑定,因为本身是一个基于配置的图表库,所以使用什么语言大同小异,最终都是用 echarts.js 渲染到网页上。

目录结构:
dir

说明:
spacetime为作业2,wordcloud为作业1
建议使用python -m venv venvPyecharts-examples下建立虚拟环境,然后使用pip install requirements.txt安装依赖。
./venv/Scripts/activate激活虚拟环境后即可正常使用
代码放在CSDN的 GitLab :pyecharts 可直接访问

词云图

数据来源:申请wb开发者,建立新应用后获取APP_KEYAPP_SECRET就可以访问官方接口获取数据,但是能用的接口很受限,也很少,数据获取也有限制,比如这里只能获取150条我个人的主页数据。

简单地使用接口的代码放在仓库里了,仅供参考,感谢owolf改写的 sinaweibo3

  1. 直接把保存wb的json文件当成文本处理,只保留汉字和空格
with open('./150weibos.json',mode='r',encoding='utf-8') as f:
    weibos = f.read()
pat = re.compile("[^\u4e00-\u9fa5]")
weibos = pat.sub('', weibos)
  1. 使用Paddlenlp对文本进行分词,并统计词频存到字典里待后续处理
seg = Taskflow('word_segmentation')
words = seg(weibos)
word_counts = dict(Counter(words))
word_counts = [(k,v) for k,v in word_counts.items()]
  1. 配置式创建图表并渲染到 html
def wordClound():
    wc = (
    WordCloud(
        init_opts=opts.InitOpts(
        theme=ThemeType.LIGHT,
        width='95vw',
        height='95vh',
        renderer=RenderType.SVG,
        page_title='个人微博主页内容分析',
        )
    ).add(series_name="个人微博主页内容分析", 
                data_pair=word_counts, 
                word_size_range=[20, 150],
                word_gap='100',
                rotate_step=45,
                pos_left='center',
                pos_top='center'
                )
            .set_global_opts(
                tooltip_opts=opts.TooltipOpts(is_show=True),
            )
            .render('./wordcloud.html')
    )
    return wc
  1. 使用 selenium进行图片导出 (可选)

是因为想要导出图片,但是文档里说还需要安装另一个依赖,当时环境里就有selenium,所以直接使用截图功能保存了图片

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument("--headless=new")
driver = webdriver.Chrome(
    service=ChromeService(ChromeDriverManager().install()),
    options=chrome_options
)
import os
DESKTOPPATH = os.environ['USERPROFILE']
OUTDIR = 'file:///'+DESKTOPPATH+'/Desktop/visualization/wordcloud/'
driver.get(OUTDIR+'wordcloud.html')
driver.maximize_window()
driver.refresh()
driver.save_screenshot('./wordcloud.png')
driver.close()

效果:
yeji

时空数据图表

数据来源:使用一款叫phyphox的物理实验APP收集的GPS定位数据,可以直接导出csv,仓库里有例子,应该不属于什么敏感数据,缺点是不能后台,得一直开着收集。个人感觉比较符合所谓的 时空数据 的定义,有时间戳,有空间特征。
然后就是分析这些数据绘制一些图表。

  1. 使用 pandas 分析 csv 列出需要绘制的数据项
data = pd.read_csv('./hiking/walkdata.csv')
data.head(3)
data.describe()
%%
xyz = data[['Latitude (°)', 'Longitude (°)',
            'Altitude WGS84 (m)']].to_numpy().tolist()
x2y = data[['Latitude (°)', 'Longitude (°)']].to_numpy().T
x2y[0] = x2y[0] * 1000 - 26060
x2y[1] = x2y[1] * 10000 - 1191900
x2y = x2y.tolist()
z2time = data[['Time (s)', 'Altitude WGS84 (m)']].to_numpy().T.tolist()
speed2time = data[['Time (s)', 'Speed (m/s)']].to_numpy().T.tolist()
distance2time = data[['Time (s)', 'Distance (km)']].to_numpy().T.tolist()
satellites2time = data[['Time (s)', 'Satellites']].to_numpy().T.tolist()
from collections import Counter
satellites2count = Counter(satellites2time[1])
satellites2count = [[k, v] for k, v in satellites2count.items()]
satellites2count = sorted(satellites2count, key=lambda x: x[1], reverse=True)
  1. 使用 Pyecharts 渲染并按一定布局放置到 html上
from pyecharts.globals import ThemeType, RenderType
page = Page(
    layout=Page.SimplePageLayout,
    page_title="时空数据可视化",
)
page.add(xyzplot(), x2yplot(), z2timeplot(), speed2timeplot(),
         distance2timeplot(), satellites2timeplot())
page.render("./spacetime.html")

效果:
3d
path
pie

注意:

仓库中的数据都已被删除,其中150weibos.json也可以使用任意文本文件替代
walkdata.csv只能是phyphox导出的定位数据集

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值