-1 关于plotly 的小问题
因为plotly用着还不熟练,我把我遇到的一些plotly调用问题总结了一下:
0. 前言:
疫情期间,工作‘过于‘繁忙。。。教程早已编好,文稿却没更出来。。。
(伪)鲁迅曾经说过:所有的数据都应该被‘画’出来,而不是‘写’出来。
自接触数据科学起,我就异常热衷于’画‘出更好的数据图(逼死强迫症)。作为一个曾经的通信人,Matlab告诉我,不能交互的数据图永远不算完美。什么matplotlib,seaborn,甚至ggplot。我只想说,普通。。。直到 plotly出现。
1. plotly介绍
plotly官方文档: https://plotly.com/python
plotly是一个可交互的 开源 开源 开源 python数据可视化库。在顶层通过 JavaScript(plotly.js)库生成web-based 可视化图表。
(可以直接生成网页,还能集成在jupyter-notebook | jupyter-lab(需要额外插件)| VS code 中直接显示)
另外,plotly 作为python 数据生态中的重要一环,也创建了相应的网页数据报表 – Dash ,对标R shiny,Tableau,MS PowerBI(后两个为商业软件,集成环境更优秀,而且价格也挺贵。。。)
当然, plotly & Dash也分为开源版本和商用版本, 并且4.0版本之前都可以使用online/offline 两种模式。其中online模式需要注册账号, 上传的图表可以使用Chart Studio对细节进行更改。 4.0之后的版本已经将online模式彻底移植到 chart-studio 中,
- 开源版本一切免费,证书为github上的开源证书 – MIT license,No Technical Supports!!(除了bug自己调试 或者等待在下个版本解决)
- 商用版本各种服务收费,还能使用有UI界面的Chart Studio修图。价格嘛,详情需要自己咨询。。。
1.1 安装
pip 和conda 都可以直接安装, 截止到目前为止 最新版本为 4.6.0 (plotly >=4.0.0 只有offline 模式)
pip install plotly==4.6.0
考虑到各个packages 的版本依赖关系, 更推荐通过conda安装
conda install -c plotly plotly==4.6.0
我一直用jupyter-lab, 额外的extensions安装如下 (jupyter 安装extensions 需要提前安装 node.js。。。):
conda install jupyterlab
conda install ipywidgets
jupyter labextension install @jupyter-widgets/[email protected] --no-build
jupyter labextension install [email protected] --no-build
jupyter labextension install [email protected] --no-build
jupyter lab build
1.2 plotly 子模块
在最开始使用plotly的时候,我唯一的一个疑问就是,搞不清楚什么时候使用什么模块。为此,特意去研究了一下官方提供的API教程。
plotly分为 5个重要子模块:
- express 模块:高级画图API,类似seaborn,可以用简单的代码,通过读取dataframe,画出相对复杂的分布曲线,kde曲线。
- graph_objects 模块: 底层画图API, 类似 matplotlib.pyplot, 可以精确控制图像中的每一个变量,图像figure的大小,图像布局,曲线的粗细,点击曲线后显示的信息,etc。但是 每一个变量都需要用户自主声明。
- subplots 模块:用于创建多图布局 类似 pyplot 中的subplots
- figure_factory 模块: 用于创建特定复杂的图表
- io模块: input/output模块 用于读取/生成 各种格式的图表 (HTML, json, images, etc…)
2. 数据可视化:
编程环境:
- Python version = 3.8
- jupyter-lab version = 1.2.6
- plotly version = 4.6.0
- numpy version = 1.18.1
- pandas version = 1.0.3
- cufflinks version = 0.17.3
2.1 读取数据
# import basic libs
import os
import pandas as pd
import numpy as np
# 直接从github读取数据
df = pd.read_csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/web-data/data/cases_time.csv', error_bad_lines=False )
df.loc[:,'Last_Update'] = pd.to_datetime(df.loc[:,'Last_Update'], format='%m/%d/%y')
print(df.shape) # output: (21384, 16)
# 国家/城市坐标 & 人口数据
location_lookup_table = pd