一、数据筛选
数据需求:筛选出销量大于500,业绩大于560,利润率大于30%,渠道是百度的所有产品
data数据就是产品销售明细表,包含上述所有列
- 直接Data Frame 反向索引
data1 = data[(data.销量 > 500) & (data.业绩 > 560) & (data.利润率 > 30%) & (data.渠道 == "百度")]
但有时候筛选条件很多的话表达式很长且不易阅读理解,便有了下面的query函数
2. df.query()
data1 = data.query('销量 > 500 & 业绩 > 560 & 利润率 > 30% & 渠道 == "百度"')
为了方便可以给每个条件加括号;需要注意的是,整个表达式用引号引起来(单双随意,这里用单是避免和后面的双引号冲突)
二、pyecharts作图
推荐两个很好的网址
个人理解:🙏🙈🙏
1、基本作图语法
以条形图为例(链式编写,个人喜好)
# 导入模块
from pyecharts.commons.utils import JsCode #
from pyecharts.globals import ThemeType # 导入主题,一般会自己设置背景以及图表颜色
import pyecharts.options as opts # 这个用于系统配置
from pyecharts.charts import * # 导入所有基础的图标
# 定义一些常量
# 这个是用于图形渐变的常量,固定的格式,用JsCode解析
area_color_js = (
# 这四个位置分别是右、下、左、上,1代表从某个方位开始渐变,false 好像是是否开启渐变????
"new echarts.graphic.LinearGradient(0, 0, 1, 1, "
"[{offset: 0, color: '#fffbd5'}, {offset: 1, color: '#b6fbff'}], false)"
)
bar = (Bar(
init_opts=opts.InitOpts(#width='400px',height='300px',
page_title="What",bg_color='rgba(123, 200, 88, 0.4)',
theme=t)
)
.add_xaxis(list[data.index]) # 画x轴以及添加数据
.add_yaxis('',list[date[].valus) # 画y轴以及添加数据,y轴有两个必须参数,series_name,y_axis
# series_name:系列名称,用于legend 的图例筛选(相当于图例)。
# y_axis:数据
.add_yaxis('',list[date[].valus) # 可以有多个y轴
.extend_axis() # 增加副坐标轴
.set_global_opts() # 全局配置
.set_series_opts() # 系列配置
)
bar.render_notebook() # 这个是在jupyter notebook中显示绘图
bar.render() # 这个是把画图到处到指定文件夹中
以上是最基本的,各种设置都是空没配置,只是基本的图表
2、增加各种系统配置项和系列配置项
全局配置项就是对这个画板做配置
系列配置就是对单个图标或者单个图表中的某一项做配置
👇👇👇这几大模块都是全局配置
而这几个就是系列配置👉👉 字体样式、颜色、线图的标记、涟漪特效、区域填充等等等等,类似于单独图表中的各种花里胡哨的东西🙈🙈
全局配置
.set_global_opts(
## 这个是标题配置项(主副标题、位置、字体样式(属于系列配置))
title_opts=opts.TitleOpts(title="Theme-%s"%t,subtitle='度的%s'%t,
pos_left="center",pos_bottom="80%",
title_textstyle_opts=opts.TextStyleOpts(
color='red'),
subtitle_textstyle_opts=opts.TextStyleOpts(
color='Black')
),
## 图例配置项(是否显示,位置等)
legend_opts=opts.LegendOpts(is_show=True,pos_left="70%",pos_top="15%",
orient='vertical',padding=10,inactive_color='black',
textstyle_opts=opts.TextStyleOpts(color='white'),
legend_icon='circle'),
## 这个是提示框配置项(显示、触发条件、触发样式等等)
tooltip_opts=opts.TooltipOpts(is_show=True,trigger_on='mousemove',
trigger='axis',axis_pointer_type="cross",
is_show_content=True,background_color="gray",
),
yaxis_opts=opts.AxisOpts(name="销量",name_location='end',min_=0,max_=500,
name_textstyle_opts=opts.TextStyleOpts(color='red',
font_size=25),
axisline_opts=opts.AxisLineOpts(is_show=False,symbol='arrow'),
# axistick_opts=opts.AxisTickOpts(is_inside=True)
),
# datazoom_opts=opts.DataZoomOpts(is_show=True,range_start=50, range_end=80),
## 这个就是工具箱配置项(显示,显示哪一些等)
toolbox_opts=opts.ToolboxOpts(is_show=True)
)
这些配置完就是这样 👍👍👍👍👍
系列配置
.set_series_opts(
# 这个是图表颜色,用JsCode解析的渐变,border_color:边界颜色,opacity: 透明度
itemstyle_opts=opts.ItemStyleOpts(color=JsCode(area_color_js), opacity=0.5,
border_color='black'),
## 字体样式设置一般跟在有文字出现的地方,比如标题,图例,上面都有应用
# 另外字体样式还有个富文本,可以使字体样式更加好看title_textstyle_opts=opts.TextStyleOpts(color='red',font_weight="lighter",font_size=30) 这是设置标题全局变量的应用
## 这是标签,就是图标上的数字
label_opts=opts.LabelOpts(is_show=True,
# 标签的位置。
# 'top','left','right','bottom','inside','insideLeft','insideRight'
# 'insideTop','insideBottom', 'insideTopLeft','insideBottomLeft'
# 'insideTopRight','insideBottomRight'
position='inside')
## 线样式配置项 LineStyleOpts,它一般跟在线型图的y轴配置中,如下
## .add_yaxis('默认线宽', y_data_2, linestyle_opts=opts.LineStyleOpts(width=1,
# type_='dotted',
# color='black',
# splitline_opts=opts.SplitLineOpts(is_show=True)
# 这里是特殊值标记 )
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值"),
opts.MarkPointItem(type_="average", name="平均值"),
])
# )
)
这里找了个富文本的应用
但是富文本应用和原Echarts相关,要用到JavaScript
富文本标签
# 富文本
rich_text = {
"a": {"color": "#999", "lineHeight": 22, "align": "center"},
"abg": {
"backgroundColor": "#e3e3e3",
"width": "100%",
"align": "right",
"height": 22,
"borderRadius": [4, 4, 0, 0],
},
"hr": {
"borderColor": "#aaa",
"width": "100%",
"borderWidth": 0.5,
"height": 0,
},
"b": {"fontSize": 16, "lineHeight": 33},
"per": {
"color": "#eee",
"backgroundColor": "#334455",
"padding": [2, 4],
"borderRadius": 2,
},
}
# 虚假数据
cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
data = [123, 153, 89, 107, 98, 23]
pie = (Pie()
.add('销售额', [list(z) for z in zip(cate, data)],
# 标签有专门的内容格式器
# 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
# 模板变量有 {a}, {b},{c},{d},{e},分别表示系列名,数据名,数据值等。
# 在 trigger 为 'axis' 的时候,会有多个系列的数据,此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引。
# 不同图表类型下的 {a},{b},{c},{d} 含义不一样。 其中变量{a}, {b}, {c}, {d}在不同图表类型下代表数据含义为:
# 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)
# 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)
# 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
# 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
# 示例:formatter: '{b}: {@score}'
label_opts=opts.LabelOpts(position='outsiede',
formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ",
rich=rich_text))
)
pie.render_notebook()
🕙🕙🕙🕙🕙🕙🕙🕙
肝不动了,头大,慢慢消化吧!!!
🙉🙉🙉🙉🙉🙉🙉🙉🙉🙉🙉🙉🙉🙉🙉