Pyecharts入门

数据可视化 Pyecharts简介

Apache ECharts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了;PyEcharts是Echarts的Python接口, Pyecharts = Python + Echarts

  • Pyecharts 官方文档手册:pyecharts - A Python Echarts Plotting Library built with love.
  • Pyecharts 官方示例网站:Document
  • echart 官方网站:Apache ECharts

Pyecharts是一个强大的Python库,用于创建各种类型的数据可视化图表,包括折线图、柱状图、饼图、散点图、地图、雷达图等

Pyecharts 环境搭建

Pyeharts版本

本系列Pyecharts版本采用 1.9.0

Pyecharts 安装

建议大家在单独的隔离环境中使用pip 进行安装

pip install pyecharts==1.9.0

也可以使用源码方式安装最新版,但是由于pyecharts更新方式,不同版本的API可能略有不同

$ git clone https://github.com/pyecharts/pyecharts.git
$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install
# 或者执行 python install.py

在可视化之前,会对原始数据进行一些列的整理,数据处理过程中,可能会用到

  • pandas
  • numpy
  • matplotlib

等Python工具,在进行绘图时,会高频率访问pyecharts API 文档和示例官网

  • Pyecharts 官方文档手册:pyecharts - A Python Echarts Plotting Library built with love.
  • Pyecharts 官方示例网站:Document
  • echart 官方网站:Apache ECharts

Pyecharts 柱状图绘制 

我们使用中国各省2003年至2021年结婚登记数与离婚登记数数据进行分析与可视化,该数据来自中国国家统计局官方数据。

数据准备

import pandas as pd
import numpy as nppath_marry = "结婚数据.csv"
path_divorse = "离婚数据.csv"
marry_data = pd.read_csv(path_marry)
divorse_data = pd.read_csv(path_divorse)# 只需要在顶部声明 CurrentConfig.ONLINE_HOST 即可
# from pyecharts.globals import CurrentConfig, OnlineHostType# OnlineHostType.NOTEBOOK_HOST 默认值为 http://localhost:8888/nbextensions/assets/
# CurrentConfig.ONLINE_HOST = OnlineHostType.NOTEBOOK_HOST

可以预览一下结婚数据(离婚数据类似)

marry_data

853c5ab4c9e741da9cd119b712c93e05.png

显示了各个省2003年到2021年结婚数据,单位是(万对),数据中,并没有显示全国合计的数据,可以给当前的数据增加一行,表示全国求和的数据,执行如下代码:

demo = marry_data.set_index(marry_data["地区"]).drop(columns=["地区"])
demo = demo.transpose()
demo['全国合计'] = demo.sum(axis=1)
marry_data = demo.transpose()

需求1,要求对全国结婚登记数每年度数据变化展现

marry_data.loc["全国合计"]

3dbcb6eada944275af091a4d5924918a.png

很明显,是一个Series类型的数据,该类型数据有两个需要展示的内容,分别是index和values,可视化图标中能够展示该类型数据有很多,但是最贴题的应该是条柱图,在进行图形展示之前,我们还需要了解,Pyecharts到底是怎么进行条柱图绘制的?

pyecharts 条柱图的绘制

在官方示例中,直接copy过来最简单的pyecharts的源码

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Fakerc = (Bar().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")).render("bar_base.html")
)

大家执行这些代码时,并没有什么效果,并不是代码错误,而是在代码中执行render("bar_base.html")这个方法,默认规则是生成一个HTML页面,在页面中使用echarts渲染对应图表;大家可以查看一下,在当前目录下,是否生成了一个bar_base.html内容,为了学习过程中的联系性,我们不选择生成一个单独的页面,我们选择在notebook中进行渲染,只需要替换一点点代码,把render方法替换成render_notebook

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c = (Bar().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
)
c.render_notebook()

解析一下这段代码,首先,pyecharts的编程风格是链式调用风格,在pyecharts中每一种图表都是实例对象,柱状图就是Bar这个类实例化后的结果,柱状图绘制其实需要两种数据,X轴上的数据,以及Y轴上的数据,柱状图是通过条柱的高低或者长短来表示数据;所以,在Bar实例化后,需要添加两个轴方向上的数据,add_xaxis 方法添加的就是X轴向的数据,Faker.choose()其实就是pyecharts提供的一个方便产生随机数据的方法,随机产生数据。对于柱状图而言,X轴向的数据是离散的,并不是连续的!一般是种类、类别数据

add_yaxis 方法就是添加Y轴向数据,也是条柱图要表达的数据,pyecharts可以支持多Series系列数据,什么是系列呢,该图表有两种颜色的条柱,一种颜色的条柱就是Series数据,调用add_yaxis方法就会像Bar实例添加一个系列的数据。这个add_yaxis 是pyecharts非常核心的方法,可以查看下这个方法的参数

help(Bar().add_yaxis)# 
Help on method add_yaxis in module pyecharts.charts.basic_charts.bar:add_yaxis(series_name: str, y_axis: Sequence[Union[int, float, pyecharts.options.charts_options.BarItem, dict]], *, is_selected: bool = True, xaxis_index: Union[int, float, NoneType] = None, yaxis_index: Union[int, float, NoneType] = None, is_legend_hover_link: bool = True, color: Optional[str] = None, is_realtime_sort: bool = False, is_show_background: bool = False, background_style: Union[pyecharts.options.charts_options.BarBackgroundStyleOpts, dict, NoneType] = None, stack: Optional[str] = None, stack_strategy: Optional[str] = 'samesign', sampling: Optional[str] = None, cursor: Optional[str] = 'pointer', bar_width: Union[int, float, str] = None, bar_max_width: Union[int, float, str] = None, bar_min_width: Union[int, float, str] = None, bar_min_height: Union[int, float] = 0, category_gap: Union[int, float, str] = '20%', gap: Optional[str] = '30%', is_large: bool = False, large_threshold: Union[int, float] = 400, dimensions: Optional[Sequence] = None, series_layout_by: str = 'column', dataset_index: Union[int, float] = 0, is_clip: bool = True, z_level: Union[int, float] = 0, z: Union[int, float] = 2, label_opts: Union[pyecharts.options.series_options.LabelOpts, dict, NoneType] = <pyecharts.options.series_options.LabelOpts object at 0x10567fcc0>, markpoint_opts: Union[pyecharts.options.series_options.MarkPointOpts, dict, NoneType] = None, markline_opts: Union[pyecharts.options.series_options.MarkLineOpts, dict, NoneType] = None, tooltip_opts: Union[pyecharts.options.global_options.TooltipOpts, dict, NoneType] = None, itemstyle_opts: Union[pyecharts.options.series_options.ItemStyleOpts, dict, NoneType] = None, encode: Union[str, pyecharts.commons.utils.JsCode, dict, NoneType] = None) method of pyecharts.charts.basic_charts.bar.Bar instance

有很多很多参数,很夸张,这些参数控制着这个系列数据的展现形式,有各种各样的配置,比如条柱颜色,条柱上Label的位置等等,具体信息请查看pyecharts的官网,解释很详细 点我.

可以观察到,这个方法有两个必须传递的参数,第一个参数和第二个参数,分别表示该系列数据的名称,这个系列名称会自动添加到该图形的legend上去,第二个参数就是该系列数据的真实值,其他参数,未传入的参数都有默认值,注意,这些参数主要控制着每一种系列数据的样式,也就是说,不同系列数据可以设置不同的样式!

重点!

接下来有调用了一个很重要的方法,set_global_opts方法,这个方法是实例对象调用的,但是他,并不是对系列数据进行修饰,而是对整体图表进行修饰,称之为全局项配置。负责图形大部分整体的修饰,主要包括:

  • 初始化配置
  • 动画配置
  • 标题配置
  • 图例配置
  • 坐标轴配置
  • 工具箱配置
  • 动画配置

对Pyecharts有了一定了解之后,我们就可以把marry_data.loc["全国合计"] 这个Pandas中的Series数据使用柱图表现出来了,只需要替换add_xaxis和add_xaxis方法中的数据值。

tips:

pyecharts 中只支持list等 Python原生数据,所以还要对numpy数组进行一个转换,使用tolist方法

show_data1 = marry_data.loc["全国合计"]
x_axis_data = pd.Series(show_data1.index).apply(lambda x:x[:-1]).values.tolist()
y_axis_data = show_data1.values.tolist()
c = (Bar().add_xaxis(x_axis_data).add_yaxis("全国数据分布", y_axis_data)
)
c.render_notebook()

没有经过修饰的 图表肯定不是我们想要的,接下来,我们就要对该图表进行修饰,第一步,肯定是对不规则的label进行设计。由于图表密度比较大,产生重叠,所以最好把label移入柱体内部。这个label是series条柱本身的设计,所以可以在add_yaxis中通过参数配置,具体规则,还是需要对文档进行查询 来吧,点我.

c = (Bar(init_opts=opts.InitOpts(width="1000px",height="400px")).add_xaxis(x_axis_data).add_yaxis("全国数据分布", y_axis_data, label_opts=opts.LabelOpts(position="inside", color='white', rotate=90, font_size=12, font_weight='blod'))
)
c.render_notebook()

结果是清晰了一些,但是还是有问题,显示数据并没有格式化,数据格式化可以对原始数据进行格式化,也可以在现实的时候通过配置进行控制,通过查询文档,发现,在配置LabelOpts时,支持formatter这样的格式化函数,但是不幸的是,这个是需要传入一个javascript函数,也就是说,在使用Python编程完成可视化时,还需要了解一点点的JavaScript代码,以下是文档对该回调函数的解释

    # 参数 params 是 formatter 需要的单个数据集。格式如下:# {#    componentType: 'series',#    // 系列类型#    seriesType: string,#    // 系列在传入的 option.series 中的 index#    seriesIndex: number,#    // 系列名称#    seriesName: string,#    // 数据名,类目名#    name: string,#    // 数据在传入的 data 数组中的 index#    dataIndex: number,#    // 传入的原始数据项#    data: Object,#    // 传入的数据值#    value: number|Array,#    // 数据图形的颜色#    color: string,# }

接下来可以使用js代码稍微修饰一下

from pyecharts.commons.utils import JsCode
js_code_01 = """function (param) {return Number(param.data).toFixed(2)}"""
c = (Bar(init_opts=opts.InitOpts(width="1000px",height="400px")).add_xaxis(x_axis_data).add_yaxis("全国数据分布", y_axis_data, label_opts=opts.LabelOpts(position="inside", color='white', rotate=90, font_size=12, font_weight='blod', formatter=JsCode(js_code_01)))
)
c.render_notebook()

接下来,还需要进行文本的显示,这里的文本是指图表的标题,这里是全局设置,通过title_opts参数设置

c = (Bar(init_opts=opts.InitOpts(width="1000px",height="400px")).add_xaxis(x_axis_data).add_yaxis("全国数据分布", y_axis_data, label_opts=opts.LabelOpts(position="inside", color='white', rotate=90, font_size=12, font_weight='blod', formatter=JsCode(js_code_01))).set_global_opts(title_opts=opts.TitleOpts(title = "全国结婚登记数量(万对)数据分布", subtitle="结婚数据"))
)
c.render_notebook()

到此,基本设计已经完结,但是,当前可视化图表颜色表达还不是特别突出,为了得到良好的视觉效果,可以使用VisualMapOpts 进行颜色与数据的映射,该配置可以使用全局配置。

c = (Bar(init_opts=opts.InitOpts(width="1000px",height="400px", theme='dark')).add_xaxis(x_axis_data).add_yaxis("全国数据分布", y_axis_data, label_opts=opts.LabelOpts(position="inside", color='white', rotate=90, font_size=12, font_weight='blod', formatter=JsCode(js_code_01))).set_global_opts(title_opts=opts.TitleOpts(title = "全国结婚登记数量(万对)数据分布", subtitle="结婚数据"),visualmap_opts=opts.VisualMapOpts(max_ = show_data1.max(), min_ = show_data1.min(), range_color = ['#3867d6','#45aaf2','#0fb9b1','#26de81','#fed330','#fa8231','#eb3b5a']))
)
c.render_notebook()

我们还可以给条柱设计阴影效果,让图表显示的更立体,通过属性ItemStyleOpts,穿越时空.,但是pyecharts并没有开放对应的阴影效果的属性,但是我们可以使用字典形式的配置,来指定阴影效果,可以直接查阅echarts再次穿越对应的阴影设置,在pyecharts中使用字典配置

show_data2 = show_data1.sort_index()
x_axis_data = pd.Series(show_data2.index).apply(lambda x:x[:-1]).values.tolist()
y_axis_data = show_data2.values.tolist()
c = (Bar(init_opts=opts.InitOpts(width="1000px",height="400px", theme='dark')).add_xaxis(x_axis_data).add_yaxis("全国数据分布", y_axis_data, label_opts=opts.LabelOpts(position="inside", color='white', rotate=90, font_size=12, font_weight='blod', formatter=JsCode(js_code_01)),itemstyle_opts={"areaColor":'#091632', 'borderColor':'#4168E1', 'shadowColor':'#4168E1', "shadowBlur":5, 'opacity':1}, markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(name="平均值", type_="average", ),opts.MarkLineItem(name="最低值", type_="min")],linestyle_opts=opts.LineStyleOpts(width=2, color="#8854d0", type_="dashed", opacity=0.5))).set_global_opts(title_opts=opts.TitleOpts(title = "全国结婚登记数量(万对)数据分布", subtitle="结婚数据"),visualmap_opts=opts.VisualMapOpts(max_ = show_data1.max(), min_ = show_data1.min(), range_color = ['#3867d6','#45aaf2','#0fb9b1','#26de81','#fed330','#fa8231','#eb3b5a']))
)
c.render_notebook()

需求2,计算2019年各省结婚登记数量对比

上一个需求数据对比的维度是时间,当前这个需求对比的维度则转变成了省份

数据准备

show_data2 = marry_data["2019年"]
show_data2 = show_data2.iloc[:-1]
show_data2

c9f232af41054f8b969995b9fa91467d.png

绘图展示

需要展现的数据依然是Series数据,本案例使用条形图进行数据展示,首先去示例官网寻找示例,记得常回来看看, 这里涉及到了另一个方法,就是set_series_opts方法,这个方法是对有Series系列进行属性设计,他接受的参数与add_yaxis方法接受的参数类似。

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Fakerc = (Bar().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).reversal_axis().set_series_opts(label_opts=opts.LabelOpts(position="right")).set_global_opts(title_opts=opts.TitleOpts(title="Bar-翻转 XY 轴"))
)
c.render_notebook()

可以观察到,Bar实例对象调用了reversal_axis方法,进行了X轴与Y轴数据的转换,从而柱形图变成了条形图,所以在替换数据时,不需要改变数据轴向的位置。

条形图显示的数据,一般是排序之后的数据,这里排序就对数据源进行排序

show_data2 = show_data2.sort_values()
x_axis_data = pd.Series(show_data2.index).values.tolist()
y_axis_data = show_data2.values.tolist()
c = (Bar(init_opts=opts.InitOpts(width="800px",height="700px")).add_xaxis(x_axis_data).add_yaxis("2019年结婚登记数量(万对)", y_axis_data).reversal_axis().set_series_opts(label_opts=opts.LabelOpts(position="right")).set_global_opts(title_opts=opts.TitleOpts(title="全国各省2019年登记结婚数量(万对)"))
)
c.render_notebook()

需求3,查看2019年各地区结婚离婚登记数据对比

之前的需求都是查看结婚登记数据,现在需要再一张图表上展示两种系列数据,结婚登记数与离婚登记数,当然,普通的展示只是需要调用两次add_yaxis方法,两种系列数据就能展示出来。

demo = divorse_data.set_index(divorse_data["地区"]).drop(columns=["地区"])
show_data3 = demo['2019年']
# show_data3.index == show_data2.index
show_data2 = marry_data["2019年"][:-1]
show_data3.index == show_data2.index

多Series绘制

x_axis_data = show_data2.index.tolist()
y_axis_data1 = show_data2.values.tolist()
y_axis_data2 = show_data3.values.tolist()
c = (Bar(init_opts=opts.InitOpts(width="800px",height="700px")).add_xaxis(x_axis_data).add_yaxis("2019年结婚登记数量(万对)", y_axis_data1).add_yaxis("2019年离婚登记数量(万对)", y_axis_data2).reversal_axis().set_series_opts(label_opts=opts.LabelOpts(position="right")).set_global_opts(title_opts=opts.TitleOpts(title="全国各省2019年登记结婚数量(万对)"))
)
c.render_notebook()

图形绘制之后,发现对比数据比较杂乱,这里可以使用堆叠图形来进行优化。这里第一次涉及到了legend_opts的设计,来嘛,来嘛

c = (Bar(init_opts=opts.InitOpts(width="800px",height="700px")).add_xaxis(x_axis_data).add_yaxis("2019年结婚登记数量(万对)", y_axis_data1, stack="happy", itemstyle_opts={"color":"#ed1941"}).add_yaxis("2019年离婚登记数量(万对)", y_axis_data2, stack="happy", itemstyle_opts={"color":"#006400"}).reversal_axis().set_series_opts(label_opts=opts.LabelOpts(position="insideRight")).set_global_opts(title_opts=opts.TitleOpts(title="全国各省2019年登记结婚数量(万对)"),legend_opts=opts.LegendOpts(pos_right='10%', pos_top='2%', orient="horizontal" ))
)
c.render_notebook()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冶金工业5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

冶金工业5G智能工厂工业物联数字孪生平台&#xff0c;推进制造业数字化转型。传统生产方式难以满足现代冶金工业的发展需求&#xff0c;数字化转型成为必然趋势。通过引入5G、工业物联网和数字孪生等先进技术&#xff0c;冶金工业可以实现生产过程智能化、高效化和绿色化&#…

车辆网络安全开发

随着智能汽车的快速发展&#xff0c;车载软件的数量和复杂性不断增加&#xff0c;同时也带来了网络安全风险。智能汽车软件开发是实现车辆智能化、信息化的重要手段。在智能汽车软件的开发过程中&#xff0c;开发人员需要遵循一定的规范和标准&#xff0c;以确保软件的质量和安…

el-dialog使用::v-deep()穿透设置样式不生效,解决办法亲测有效!

场景&#xff1a; <el-dialogv-model"dialogVisible"width"800px":before-close"beforeClose"append-to-body:close-on-click-modal"false"title"增加文档"><template #footer><div style"text-align:c…

【MDK5问题】:MDK中的jlink正常下载,但是板子却没有任何反应

1、问题现象&#xff1a; 1、在MDK5中&#xff0c;jlink配置项如下图&#xff0c;没有看到异常情况和配置&#xff1a; 2、点击load下载到板子上&#xff0c;出现的现象是&#xff0c;下载提示下载完成&#xff0c;但是&#xff0c;板子却没有任何反应&#xff08;程序实现应该…

C++ | Leetcode C++题解之第190题颠倒二进制位

题目&#xff1a; 题解&#xff1a; class Solution { private:const uint32_t M1 0x55555555; // 01010101010101010101010101010101const uint32_t M2 0x33333333; // 00110011001100110011001100110011const uint32_t M4 0x0f0f0f0f; // 000011110000111100001111000011…

高考填报志愿策略 做好这几个步骤很重要

怎么填报合适的院校&#xff0c;怎么填报合适的专业&#xff0c;有时候比考试的分数还要重要&#xff0c;所谓“7分考&#xff0c;3分报”&#xff0c;要避免高分第就&#xff0c;那就得理清头绪&#xff0c;一起来了解一下高考填报志愿策略吧。 第1步从了解分数的基础上来了解…

19、删除链表的倒数第n个节点

1、题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 …

总结一些LLM算法岗遇到的八股

总结一些我被问到的题和常见的题目&#xff0c;答案有不对的欢迎指出。 Batch Norm和Layer Norm的定义及区别&#xff1f; BN 批量归一化&#xff1a;以进行学习时的mini-batch为单位&#xff0c;按mini-batch进行正规化。具体而言&#xff0c;就是进行使数据分布的均值为0、…

AI 编程探索- iOS动态标签控件

需求分析&#xff1a; 标签根据文字长度&#xff0c;自适应标签居中显示扩展 超过内容显示范围&#xff0c;需要换行显示&#xff0c;且保持居中显示 AI实现过程 提问&#xff1a; 回答&#xff1a; import UIKit import SnapKitclass DynamicLabelsContainerView: UIView…

命令行中关于windows hash md5 , mac hash md5 , linux hash md5 文件校验方式

md5&#xff0c; sha-1 &#xff0c;sha256. windows certutil -hashfile filename md5certutil -hashfile filename sha1certutil -hashfile filename sha256macos 平台 md5 filenameshasum -a 1 filenameshasum -a 256 filenamelinux 平台 md5sum filenameshasum -a 1 fil…

CEWEY C9自动猫砂盆测评:千元级安全实用稳定输出,解放铲屎官双手!

最近邻居姐姐成为新晋铲屎官&#xff0c;猫咪的吃喝还好&#xff0c;因为是打工人每天要早出晚归&#xff0c;铲屎这项不能等待的任务就让她很苦恼&#xff0c;猫砂盆太脏猫咪要么憋着不上要么乱拉乱尿&#xff0c;搞得小姐姐身心俱疲。看着她日渐憔悴的脸色&#xff0c;我这个…

Linux 动态监控系统

top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处&#xff0c;在于top在执行一段时间可以更新正在运行的的进程。 一、基本指令 top top -d&#xff1a; 秒数 :每隔设定值秒数更新&#xff0c;未设置下默认为3秒 top -i:使top不显示任何闲置或者僵死进…

chkstk.asm未经处理的异常

【1】异常图片 【2】异常原因 运行程序时&#xff0c;程序尝试分配的内存超出了当前线程的堆栈边界 【3】定位&#xff1a;如下图&#xff0c;数组分配过大

定时触发-uniapp + uniCloud 订阅消息实战教程(三)

上一节已经对云函数有了一定的了解&#xff0c;但是&#xff0c;为了发送订阅消息&#xff0c;只会云函数还是差了那么一点意思&#xff0c;所以接下来的这一节&#xff0c;将带领大家熟悉一下定时触发。 熟悉定时触发 如果云函数需要定时/定期执行&#xff0c;即定时触发&…

【力扣C++】爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#x…

昇思25天学习打卡营第1天|初学教程

文章目录 背景创建环境熟悉环境打卡记录学习总结展望未来 背景 参加了昇思的25天学习记录&#xff0c;这里给自己记录一下所学内容笔记。 创建环境 首先在平台注册账号&#xff0c;然后登录&#xff0c;按下图操作&#xff0c;创建环境即可 创建好环境后进入即可&#xff0…

文华财经wh7均线ema金叉死叉预警指标公式源码

文华财经wh7均线ema金叉死叉预警指标公式源码&#xff1a; 文华财经均线EMA预警指标公式源码&#xff1a; EMA25:EMA(C,25); EMA70:EMA(C,70); EMA580:EMA(C,580); //在EMA580上方EMA25和EMA70金叉EMA70在EMA580上方创1日新高创前5根K线最高 EMA25>EMA580&&EM…

Jenkins教程-8-上下游关联自动化测试任务构建

上一小节小节我们学习了一下Jenkins自动化测试任务发送测试结果邮件的方法&#xff0c;本小节我们讲解一下Jenkins上下游关联自动化测试任务的构建。 下面我们以一个真实的自动化测试场景来讲解Jenkins如何管理上下游关联任务的触发和构建&#xff0c;比如我们有两个jenkin任务…

病毒防护:恶意代码检测技术,病毒分类、传播方式,恶意代码的清除与防护

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

惠海 HC070N06LS 6N06 沟槽型NMOS管 皮实耐抗 丝印HC606A 抗雪崩能力强

产品详情 HC070N06LS 60V/6A MOS管 低Vth 惠海半导体原厂 抖频过认证EMC&EMI:0 产品详情 型号HC070N06LS品牌惠海半导体 封装SOT23-3输入电压60V 驱动方式内置MOS耐压150V。 Features &#xff1a; N-Channel Enhancement mode Very low on-resistance VGS4.5V Fast S…