pyecharts阶段2

import json
from pandas import json_normalize
from pyecharts import options as opts
from pyecharts.charts import Funnel   #漏斗图

op1=open(r'shoes.json','r',encoding='utf-8')
#print(op1)
li=[]
dict={}
for i in op1:
    k=json.loads(i.encode("utf-8"))#把字符串转换完json,json的使用需要import  json
    li.append(k)
a=json_normalize(li)#把由json数据构成的列表转换为数据框,json_normalize的使用需要从pandas传入json_normalize
a.columns
p0=a.groupby("info.鞋面材质").size().sort_values(ascending=False)

# c = (
#      Funnel()
#      .add("商品", [list(z) for z in zip(p0.index.tolist(),p0.tolist())])
#      .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-基本示例"))
#      .render("funnel_base.html"))

#使用ascending对漏斗图进行逆向展示
# d = (
#     Funnel()
#     .add(
#         "商品",
#         [list(z) for z in zip(p0.index.tolist(),p0.tolist())],
#         sort_="ascending",
#         label_opts=opts.LabelOpts(position="inside"),
#     )
#     .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-Sort(ascending)"))
#     .render("funnel_sort_ascending.html")
# )


x_data = p0.index.tolist()
y_data = p0.tolist()

data = [[x_data[i], y_data[i]] for i in range(len(x_data))]

e=(
    Funnel(init_opts=opts.InitOpts(width="1600px", height="800px"))
    .add(
        series_name="",
        data_pair=data,
        gap=2,
        tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b} : {c}%"),
        label_opts=opts.LabelOpts(is_show=True, position="inside"),
        itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="漏斗图", subtitle="纯属虚构"))
    .render("funnel_chart.html"))
import json
from pandas import json_normalize
from pyecharts import options as opts
from pyecharts.charts import Pie   #饼图

op1=open(r'shoes.json','r',encoding='utf-8')
#print(op1)
li=[]
dict={}
for i in op1:
    k=json.loads(i.encode("utf-8"))#把字符串转换完json,json的使用需要import  json
    li.append(k)
a=json_normalize(li)#把由json数据构成的列表转换为数据框,json_normalize的使用需要从pandas传入json_normalize
a.columns
p0=a.groupby("info.鞋面材质").size().sort_values(ascending=False)

# c = (
#     Pie()
#     .add("", [list(z) for z in zip(p0.index.tolist(),p0.tolist())])
#     .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
#     .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_base.html")
# )

c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                p0.index.tolist(),#x轴
                p0.tolist(),#y轴
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Pie-Legend 滚动"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_scroll_legend.html")
)

import json
from pandas import json_normalize
from pyecharts import options as opts
from pyecharts.charts import WordCloud  #词云图


op1=open(r'shoes.json','r',encoding='utf-8')
#print(op1)
li=[]
dict={}
for i in op1:
    k=json.loads(i.encode("utf-8"))#把字符串转换完json,json的使用需要import  json
    li.append(k)
a=json_normalize(li)#把由json数据构成的列表转换为数据框,json_normalize的使用需要从pandas传入json_normalize
a.columns
p0=a.groupby("info.鞋面材质").size().sort_values(ascending=False)

data =[list(z) for z in zip(p0.index.tolist(),p0.tolist())]  #p0.index.tolist()是要展示出来的标签,可以是英文中文。
                                                             # p0.tolist()是标签对应的值
                                                             #zip函数起到将标签与对应的值一一对应的作用
(
    WordCloud()
    .add(series_name="热点分析", data_pair=data, word_size_range=[6, 66])
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True),
    )
    .render("basic_wordcloud.html")
)

import json
from pandas import json_normalize
import pandas as pd
from pyecharts.charts import Bar,Timeline
from pyecharts import options as opts
from pyecharts.charts import Grid,Tab

op1=open(r'shoes.json','r',encoding='utf-8')
#print(op1)
li=[]
dict={}
for i in op1:
    k=json.loads(i.encode("utf-8"))#把字符串转换完json,json的使用需要import  json
    li.append(k)
a=json_normalize(li)#把由json数据构成的列表转换为数据框,json_normalize的使用需要从pandas传入json_normalize
a.columns
a.groupby("nick").size().sort_values(ascending=False)

t1 = a[a.nick == "意尔康皮鞋旗舰店"].groupby("info.款式").size()
t2 = a[a.nick == "米兰多格商场"].groupby("info.款式").size()
p0 = pd.concat([t1,t2],axis=1,sort=False).fillna(0)

#多个商家同一数据对比,比如销售量对比,在同一个坐标系中展示出来
bar=Bar()
bar.add_xaxis(p0[0].index.tolist())
bar.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
bar.add_yaxis("米兰多格商场", p0[1].tolist())#多个商家的销售量比较可以用增加Y轴的方法在一张图中展示,
                                             # 但是要注意修改p0[1],即商家对应的Y值
bar.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"),
                    toolbox_opts=opts.ToolboxOpts())
bar.render()


#组合图片水平并行展示
f1=Bar()
f1.add_xaxis(p0[0].index.tolist())
f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
#f1.add_yaxis("米兰多格商场", p0[1].tolist())
f1.set_global_opts(title_opts=opts.TitleOpts(title="意尔康皮鞋旗舰店"),
                    legend_opts=opts.LegendOpts(pos_left="20%"))

f2=Bar()
f2.add_xaxis(p0[0].index.tolist())
#f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
f2.add_yaxis("米兰多格商场", p0[1].tolist())
f2.set_global_opts(title_opts=opts.TitleOpts(title="意尔康皮鞋旗舰店"),
                    legend_opts=opts.LegendOpts(pos_right="20%"))

grid = (
    Grid()
    .add(f1, grid_opts=opts.GridOpts(pos_left="55%"))
    .add(f2, grid_opts=opts.GridOpts(pos_right="55%"))
    .render("grid_horizontal.html")
)

#使用tab组合,下拉菜单式
f1=Bar()
f1.add_xaxis(p0[0].index.tolist())
f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
#f1.add_yaxis("米兰多格商场", p0[1].tolist())
f1.set_global_opts(title_opts=opts.TitleOpts(title="意尔康皮鞋旗舰店"),
                    legend_opts=opts.LegendOpts(pos_left="20%"))

f2=Bar()
f2.add_xaxis(p0[0].index.tolist())
#f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
f2.add_yaxis("米兰多格商场", p0[1].tolist())
f2.set_global_opts(title_opts=opts.TitleOpts(title="米兰多格商场"),
                    legend_opts=opts.LegendOpts(pos_right="20%"))

tab = Tab()
tab.add(f1, "意尔康皮鞋旗舰店")
tab.add(f2, "米兰多格商场")
tab.render("tab_base.html")

#时间轴组合
f1=Bar()
f1.add_xaxis(p0[0].index.tolist())
f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
#f1.add_yaxis("米兰多格商场", p0[1].tolist())
f1.set_global_opts(title_opts=opts.TitleOpts(title="意尔康皮鞋旗舰店"),
                    legend_opts=opts.LegendOpts(pos_left="20%"))

f2=Bar()
f2.add_xaxis(p0[0].index.tolist())
#f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
f2.add_yaxis("米兰多格商场", p0[1].tolist())
f2.set_global_opts(title_opts=opts.TitleOpts(title="米兰多格商场"),
                    legend_opts=opts.LegendOpts(pos_right="20%"))

tm1= Timeline()
tm1.add(f1, "2011")
tm1.add(f2, "2012")
tm1.render("timeline_bar_with_graphic.html")

import json
from pandas import json_normalize
from pyecharts import options as opts
from pyecharts.charts import Bar3D,HeatMap

op1=open(r'shoes.json','r',encoding='utf-8')
#print(op1)
li=[]
dict={}
for i in op1:
    k=json.loads(i.encode("utf-8"))#把字符串转换完json,json的使用需要import  json
    li.append(k)
a=json_normalize(li)#把由json数据构成的列表转换为数据框,json_normalize的使用需要从pandas传入json_normalize
a.columns
p0= a.groupby(["info.鞋面材质","info.风格"]).size().sort_values(ascending=False)
#3D柱状图
x=[]
y=[]
data=[]
for i in p0.items():
    if i[0][0] not in x:   #去除重复值,在做3D柱状图时,X轴刻度不能重复
        x.append(i[0][0])  #p0的[0][0]

for i in p0.items():
    if i[0][1] not in y:   #去除重复值,在做3D柱状图时,X轴刻度不能重复
        y.append(i[0][1])
    data.append([x.index(i[0][0]),y.index(i[0][1]),i[1]]) #x.index(i[0][0])对应x轴刻度,
                                                          # y.index(i[0][1])对应y轴刻度
                                                          #i[1]对应z轴刻度
print(x)
print(y)
print(data)

c = (
    Bar3D()
    .add(
        "",
        [[d[1], d[0], d[2]] for d in data],
        xaxis3d_opts=opts.Axis3DOpts(x.index(i[0][0]), type_="category"),
        yaxis3d_opts=opts.Axis3DOpts(y.index(i[0][1]), type_="category"),
        zaxis3d_opts=opts.Axis3DOpts(type_="value"),#Z轴不需要填入i[1],函数可以根据data数据自动填充z轴的值
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(max_=20),
        title_opts=opts.TitleOpts(title="Bar3D-基本示例"),
    )
    .render("bar3d_base.html")
)
#热图
#使用3D图的数据绘制热图
HM=HeatMap()
HM.add_xaxis(x)#括弧内放入x轴数据
HM.add_yaxis("series0",y, data)#y是y轴数据,data是x和y的索引及对应z轴的数据,即用颜色来表示x和y
HM.set_global_opts(
        title_opts=opts.TitleOpts(title="HeatMap-基本示例"),
        visualmap_opts=opts.VisualMapOpts(),)
HM.render("heatmap_base.html")
import json
from pandas import json_normalize
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from collections import Counter
from pyecharts.charts import Scatter
from pyecharts import options as opts
from pyecharts.globals import ThemeType#输入主题


op1=open(r'shoes.json','r',encoding='utf-8')
#print(op1)
li=[]
dict={}
for i in op1:
    k=json.loads(i.encode("utf-8"))#把字符串转换完json,json的使用需要import  json
    li.append(k)
a=json_normalize(li)#把由json数据构成的列表转换为数据框,json_normalize的使用需要从pandas传入json_normalize
a.groupby("nick").size().sort_values(ascending=False)
a.sales=a.sales.str.split("人",expand=True)[0]#使用split分隔符,以“人”作为分割点,将销量分割出来,
                                             #分割出来后使用[0]取第一列
#把商品的销量提取出来,并把对应列表的类型转化为整数
a.sales=a.sales.astype(np.int64)#将取出来的数据转换为整数类型
a.price=a.price.astype(np.float)#将价格转换为浮整数
#求出各个商品的销售额,并把它加入原始数据框中
z1=a.sales*a.price#销量*价格=销售额
z1.name="xse"
a1=pd.concat([a,z1],axis=1)#给序列命名之后添加入数据框就会直接以序列名为列标
#先做成字典,把各个特征放入字典
te_zheng= {"nick":[],"z_xse":[],"z_num":[],"p_sales":[],"p_bdj":[],"p_price":[]}#构建字典
for i in a1.groupby("nick"):#原数据框中,每一行对应一个商品的所有信息,
                        # 根据店铺的名称进行groupby,即对所有的商品根据店铺名称进行groupby,
                        # 每个商品都有一个特点,即每一组的商品都是属于同一个店铺的,
                        #i[1].xse.sum()是某个店铺的销售额
                        #len(i[1])统计长度,即店铺商品的数量
    te_zheng["nick"].append(i[0])#nick,对应店铺名称,i[0]对应店铺的名称,i[1]是这些店铺对应的商品信息,如材质,款式等很多
    te_zheng["z_xse"].append(i[1].xse.sum())#店铺的销售额
    te_zheng["z_num"].append(len(i[1]))#店铺中商品的数量
    te_zheng["p_sales"].append(round(i[1].sales.mean(),1))#店铺商品的销量
    if i[1].sales.sum()==0:#存在除0的情况,所以加了判断语句
        te_zheng["p_bdj"].append(0)
    else:
        te_zheng["p_bdj"].append(round(i[1].xse.sum()/i[1].sales.sum(),1))#销售额的总和除以销售量的综合,
                                       # 即店铺每一笔交易的平均价格,round(,1)是近似,1是保留小数点后1位
    te_zheng["p_price"].append(round(i[1].price.mean(),1))#店铺商品的平均售价
#把字典转化为数据框,并基于销售额排序
df_te_zheng=pd.DataFrame(te_zheng)
df_te_zheng.sort_values(by="z_xse",ascending=False,inplace=True)#数据框按照销售额的大小进行排序
df_te_zheng.head()#输出前5行,就是排名前五的店铺销售情况

f1 = Scatter(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))
f1.add_xaxis(df_te_zheng[0:20].z_xse.tolist())
f1.add_yaxis("商家A",df_te_zheng[0:20].p_bdj.tolist())
f1.set_global_opts(xaxis_opts=opts.AxisOpts(type_="value"),
                   datazoom_opts=opts.DataZoomOpts(is_show=True))
f1.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
f1.render("scatter.html")

import json
from pandas import json_normalize
import numpy as np
import pandas as pd

from pyecharts.charts import Parallel
from pyecharts import options as opts



op1=open(r'shoes.json','r',encoding='utf-8')
#print(op1)
li=[]
dict={}
for i in op1:
    k=json.loads(i.encode("utf-8"))#把字符串转换完json,json的使用需要import  json
    li.append(k)
a=json_normalize(li)#把由json数据构成的列表转换为数据框,json_normalize的使用需要从pandas传入json_normalize
a.groupby("nick").size().sort_values(ascending=False)
a.sales=a.sales.str.split("人",expand=True)[0]#使用split分隔符,以“人”作为分割点,将销量分割出来,
                                             #分割出来后使用[0]取第一列
#把商品的销量提取出来,并把对应列表的类型转化为整数
a.sales=a.sales.astype(np.int64)#将取出来的数据转换为整数类型
a.price=a.price.astype(np.float)#将价格转换为浮整数
#求出各个商品的销售额,并把它加入原始数据框中
z1=a.sales*a.price#销量*价格=销售额
z1.name="xse"
a1=pd.concat([a,z1],axis=1)#给序列命名之后添加入数据框就会直接以序列名为列标
#先做成字典,把各个特征放入字典
te_zheng= {"nick":[],"z_xse":[],"z_num":[],"p_sales":[],"p_bdj":[],"p_price":[]}#构建字典
for i in a1.groupby("nick"):#原数据框中,每一行对应一个商品的所有信息,
                        # 根据店铺的名称进行groupby,即对所有的商品根据店铺名称进行groupby,
                        # 每个商品都有一个特点,即每一组的商品都是属于同一个店铺的,
                        #i[1].xse.sum()是某个店铺的销售额
                        #len(i[1])统计长度,即店铺商品的数量
    te_zheng["nick"].append(i[0])#nick,对应店铺名称,i[0]对应店铺的名称,i[1]是这些店铺对应的商品信息,如材质,款式等很多
    te_zheng["z_xse"].append(i[1].xse.sum())#店铺的销售额
    te_zheng["z_num"].append(len(i[1]))#店铺中商品的数量
    te_zheng["p_sales"].append(round(i[1].sales.mean(),1))#店铺商品的销量
    if i[1].sales.sum()==0:#存在除0的情况,所以加了判断语句
        te_zheng["p_bdj"].append(0)
    else:
        te_zheng["p_bdj"].append(round(i[1].xse.sum()/i[1].sales.sum(),1))#销售额的总和除以销售量的综合,
                                       # 即店铺每一笔交易的平均价格,round(,1)是近似,1是保留小数点后1位
    te_zheng["p_price"].append(round(i[1].price.mean(),1))#店铺商品的平均售价
#把字典转化为数据框,并基于销售额排序
df_te_zheng=pd.DataFrame(te_zheng)
df_te_zheng.sort_values(by="z_xse",ascending=False,inplace=True)#数据框按照销售额的大小进行排序
df_te_zheng.head()#输出前5行,就是排名前五的店铺销售情况

z2=df_te_zheng.head(5)
data1=[]
for i in z2.iterrows():
    data1.append(i[1].tolist()[1:])#i[0]是数据框的行标,i[1]是从店铺名(包括)后的所有内容,
                                   #[1:]是从df_te_zheng.head(5)的第二列开始取值
f2=Parallel()
f2.add_schema(
    [{"dim": 0, "name": "z_xse"},#"dim": 0, "name":为固定不变的格式,"z_xse"对应data1中的列表索引
    {"dim": 1, "name": "z_num"},
    {"dim": 2, "name": "p_sales"},
    {"dim": 3, "name": "p_bdj"},
    {"dim": 4, "name": "p_price"},])
f2.add("parallel",data1)
f2.set_global_opts(title_opts=opts.TitleOpts(title="parallel-基本示例"))
f2.render("basic_parallel.html")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值