
pyecharts是什么?
pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒, pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图 。使用pyecharts可以生成独立差禅的网页,也可以在flask、django中集成使用。
安装很简单:pip install pyecharts
如需使用 Jupyter Notebook 来展示图表,只需要调用自身实例即可,同时兼容 Python2 和 Python3 的虚岩尘 Jupyter Notebook 环境。所有图表均可正常显示,与浏览器一致的交互体验,简直不要太强大。
参考自pyecharts官方文档: http://pyecharts.org
首先开始来绘制你的第一个图表
使用 Jupyter Notebook 来展示图表,只需要调用自身实例即可
add() 主要方法,用于添加图表的数据和设置各种配置项
render() 默认将会在根目录下生成一个 render.html 的文件,文件用浏览器打开。
使用主题
自 0.5.2+ 起,pyecharts 支持更换主体色系
使用 pyecharts-snapshot 插件
如果想直接将图片保存为 png, pdf, gif 格式的文件,可以使用 pyecharts-snapshot。使用该插件请确保你的系统上已经安装了 Nodejs 环境。
安装 phantomjs $ npm install -g phantomjs-prebuilt
安装 pyecharts-snapshot $ pip install pyecharts-snapshot
调用 render 方法 bar.render(path='snapshot.png') 文件结尾可以为 svg/jpeg/png/pdf/gif。请注意,svg 文件需要你在初始化 bar 的时候设置 renderer='svg'。
图形绘制过程
基本上所有的图表类型都是这样绘制的:
chart_name = Type() 初始化具体类型图表。
add() 添加数据及配置项。
render() 生成本地文件(html/svg/jpeg/png/pdf/gif)。
add() 数据一般为两个列表(长度一致)。如果你的数据是字典或者是带元组的字典。可利用 cast() 方法转换。
多次显示图表
从 v0.4.0+ 开始,pyecharts 重构了渲染的内部逻辑,改善效率。推荐使用以下方式显示多个图表。如果使是 Numpy 或者 Pandas,可以参考这个示例
当然你也可以采用更加酷炫的方式,使用 Jupyter Notebook 来展示图表,matplotlib 有的,pyecharts 也会有的
Note: 从 v0.1.9.2 版本开始,废弃 render_notebook() 方法,现已采用更加 pythonic 的做法。直接调用本身实例就可以了。
比如这样
还有这样
如果使用的是自定义类,直接调用自定义类示例即可
图表配置
图形初枣纳始化
通用配置项
xyAxis:平面直角坐标系中的 x、y 轴。(Line、Bar、Scatter、EffectScatter、Kline)
dataZoom:dataZoom 组件 用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响。(Line、Bar、Scatter、EffectScatter、Kline、Boxplot)
legend:图例组件。图例组件展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。
label:图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
lineStyle:带线图形的线的风格选项(Line、Polar、Radar、Graph、Parallel)
grid3D:3D笛卡尔坐标系组配置项,适用于 3D 图形。(Bar3D, Line3D, Scatter3D)
axis3D:3D 笛卡尔坐标系 X,Y,Z 轴配置项,适用于 3D 图形。(Bar3D, Line3D, Scatter3D)
visualMap:是视觉映射组件,用于进行『视觉编码』,也就是将数据映射到视觉元素(视觉通道)
markLine&markPoint:图形标记组件,用于标记指定的特殊数据,有标记线和标记点两种。(Bar、Line、Kline)
tooltip:提示框组件,用于移动或点击鼠标时d出数据内容
toolbox:右侧实用工具箱
图表详细
Bar(柱状图/条形图)
Bar3D(3D 柱状图)
Boxplot(箱形图)
EffectScatter(带有涟漪特效动画的散点图)
Funnel(漏斗图)
Gauge(仪表盘)
Geo(地理坐标系)
GeoLines(地理坐标系线图)
Graph(关系图)
HeatMap(热力图)
Kline/Candlestick(K线图)
Line(折线/面积图)
Line3D(3D 折线图)
Liquid(水球图)
Map(地图)
Parallel(平行坐标系)
Pie(饼图)
Polar(极坐标系)
Radar(雷达图)
Sankey(桑基图)
Scatter(散点图)
Scatter3D(3D 散点图)
ThemeRiver(主题河流图)
TreeMap(矩形树图)
WordCloud(词云图)
用户自定义
Grid 类:并行显示多张图
Overlap 类:结合不同类型图表叠加画在同张图上
Page 类:同一网页按顺序展示多图
Timeline 类:提供时间线轮播多张图
统一风格
注:pyecharts v0.3.2以后,pyecharts 将不再自带地图 js 文件。如用户需要用到地图图表,可自行安装对应的地图文件包。
地图文件被分成了三个 Python 包,分别为:
全球国家地图:
echarts-countries-pypkg
中国省级地图:
echarts-china-provinces-pypkg
中国市级地图:
echarts-china-cities-pypkg
直接使用python的pip安装
但是这里大家一定要注意,安装完地图包以后一定要重启jupyter notebook,不然是无法显示地图的。
显示如下:
总得来说,这是一个非常强大的可视化库,既可以集成在flask、Django开发中,也可以在做数据分析的时候单独使用,实在是居家旅行的必备神器啊
用Python 探索 金庸笔下的江湖!
带你用python看小说, 娱乐 学习两不误。
涉及的知识点有:
本文从传统匹配逻辑分析过渡到机器学习的词向量,全方位进行文本分析,值得学习,干货满满。( 文末信拍点击阅读原文 )
以前金庸小说的网站有很多,但大部分已经无法访问,但由于很多金庸迷的存在,新站也是源源不断出现。我近期通过百度找到的一个还可以访问的金庸小说网址是: aHR0cDovL2ppbnlvbmcxMjMuY29tLw==
不过我已经准备好已经采集完成的数据,大家可以直接下载数据,跳过本章的内容。
数据源下载地址:https://gitcode.net/as604049322/blog_data
下面首先获取这15部作品的名称、创作年份和对应的链接。从开发者工具可以看到每行的a标签很多,我们需要的节点的特征在于后续临近节点紧接着一个创作日期的字符串:
那么我们就可以通过遍历所有的a标签并判断其后续一个临近节点的内容是否符合日期格式,最终完整下载代码为:
可以按照创作日期排序查看:
名称创作时间网址 书剑恩仇录1955年/shujianenchoulu/ 碧血剑1956年/bixuejian/ 射雕英雄传1957—1959年/shediaoyingxiongzhuan/ 神雕侠侣1959—1961年/shendiaoxialv/ 雪山飞狐1959年/xueshanfeihu/ 飞狐外传1960—1961年/feihuwaizhuan/ 白马啸西风1961年/baimaxiaoxifeng/ 倚天屠龙记1961年/yitiantulongji/ 鸳鸯刀1961年/yuanyangdao/ 天龙八部1963—1966年/tianlongbabu/ 连城诀1963年/lianchengjue/ 侠客行1965年/xiakexing/ 笑傲江湖1967年/xiaoaojianghu/ 鹿鼎记1969—1972年滑敏羡/ludingji/ 越女剑1970年/yuenvjian/
下面看看章节页拿纯节点的分布情况,以《雪山飞狐》为例:
同时可以看到部分小说的节点出现了倒序的情况,我们需要在识别出倒序时将其正序,完整代码:
测试一下:
可以看到章节已经顺利的正序排列。
小说每一章的详细页最后一行的数据我们不需要:
下载每章内容的代码:
然后我们就可以批量下载全部小说了:
为了更好分析金庸小说,我们还需要采集金庸小说的人物、武功和门派,个人并没有找到还可以访问相关数据的网站,于是自行收集整理了相关数据:
相关数据都以如下格式存储,例如金庸小说的人物:
武功:
数据源下载地址:https://gitcode.net/as604049322/blog_data
定义一个加载小说的方法:
首先我们加载人物数据:
可以预览一下天龙八部中的人物:
下面我们寻找一下每部小说的主角,统计每个人物的出场次数,显然次数越多主角光环越强,下面我们看看每部小说,出现次数最多的前十个人物:
上述结果用文本展示了每部小说的前5个主角,但是不够直观,下面我用pyecharts的树图展示一下:
显然,《神雕侠侣》中的杨过和小龙女,《天龙八部》中的萧(乔)峰,段誉,虚竹,《射雕英雄传》的郭靖和黄蓉,《倚天屠龙记》的张无忌和赵敏 都是主角光环最强的角色。
使用上述相同的方法,分析各种武功的出现频次,首先加载武功数据:
定义计数方法:
每部小说频次前5的武功可视化:
门派分析
加载数据并获取每部小说前10的门派:
可视化:
还可以测试一下树形图:
综合统计
下面我们编写一个函数,输入一部小说名,可以输出其最高频的主角、武功和门派:
例如查看天龙八部:
词云图分析
可以先添加所有的人物、武功和门派作为自定义词汇:
这里我们仅提取词长度不小于4的成语、俗语和短语进行分析,以天龙八部这部小说为例:
修改上述代码,查看《射雕英雄传》:
神雕侠侣:
主角相关剧情词云
我们知道《神雕侠侣》这部小说最重要的主角是杨过和小龙女,我们可能会对于杨过和小龙女之间所发生的故事很感兴趣。如果通过程序快速了解呢?
我们考虑把《神雕侠侣》这部小说每一段中出现杨过及小龙女的段落进行jieba分词并制作词云。
同样我们只看4个字以上的词:
这里的每一个词都能联想到发生在杨过和小龙女背后的一个故事。
同样的思路看看郭靖和黄蓉:
最后我们看看天龙八部的三兄弟相关的词云:
关系图分析
金庸小说15部小说中预计出现了1400个以上的角色,下面我们将遍历小说的每一段,在一段中出现的任意两个角色,都计数1。最终我们取出现频次最高的前200个关系对进行可视化。
完整代码如下:
这次我们生成了HTML文件是为了更方便的查看结果,前200个人物的关系情况如下:
门派关系分析
按照相同的方法分析所有小说的门派关系:
Word2Vec分析
Word2Vec 是一款将词表征为实数值向量的高效工具,接下来,我们将使用它来处理这些小说。
gensim 包提供了一个 Python 版的实现。
之前我有使用 gensim 包进行了相似文本的匹配,有兴趣可查阅:《批量模糊匹配的三种方法》
首先我要将所有小说的段落分词后添加到组织到一起(前面的程序可以重启):
接下面我们使用Word2Vec训练模型:
我这边模型训练耗时15秒,若训练耗时较长可以把训练好的模型存到本地:
以后可以直接从本地磁盘读取模型:
有了模型,我们可以进行一些简单而有趣的测试。
首先看与乔(萧)峰相似的角色:
再看看与阿朱相似的角色:
除了角色,我们还可以看看门派:
还可以看看与降龙十八掌相似的武功秘籍:
在 Word2Vec 的模型里,有过“中国-北京=法国-巴黎”的例子,我们看看"段誉"和"段公子"类似于乔峰和什么的关系呢?
类似的还有:
查看韦小宝相关的关系:
门派武功之间的关系:
之前我们使用 Word2Vec 将每个词映射到了一个向量空间,因此,我们可以利用这个向量表示的空间,对这些词进行聚类分析。
首先取出所有角色对应的向量空间:
聚类算法有很多,这里我们使用基本的Kmeans算法进行聚类,如果只分成3类,那么很明显地可以将众人分成主角,配角,跑龙套的三类:
我们可以根据每个类别的角色数量的相对大小,判断该类别的角色是属于主角,配角还是跑龙套。
下面我们过滤掉众龙套角色之后,重新聚合成四类:
每次运行结果都不一样,大家可以调整类别数量继续测试。从结果可以看到,反派更倾向于被聚合到一起,非正常姓名的人物更倾向于被聚合在一起,主角更倾向于被聚合在一起。
现在我们采用层级聚类的方式,查看人物间的层次关系,这里同样龙套角色不再参与聚类。
层级聚类调用 scipy.cluster.hierarchy 中层级聚类的包,在此之前先解决matplotlib中文乱码问题:
接下来调用代码为:
然后我们可以得到金庸小说宇宙的人物层次关系地图,结果较长仅展示一部分结果:
当然所有小说混合产生的平行宇宙中,人物关系变得有些混乱,读者有兴趣可以拿单本小说作层次分析,就可以得到较为准确的人物层次关系。
对各种武功作与人物层次聚类相同的 *** 作:
结果较长,仅展示部分结果:
可以看到,比较少的黄色部分明显是主角比较厉害的武功,而绿色比较多的部分基本都是配角的武功。
最后我们对门派进行层次聚类:
比较少的这一类,基本都是在某几部小说中出现的主要门派,而大多数门派都是打酱油的。
本文从金庸小说数据的采集,到普通的频次分析、剧情分析、关系分析,再到使用词向量空间分析相似关系,最后使用scipy进行所有小说的各种层次聚类。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)