def test_funnel_base(fake_writer): c = Funnel().add("商品", [list(z) for z in zip(Faker.choose(), Faker.values())]) c.render() _, content = fake_writer.call_args[0] assert_equal(c.theme, "white") assert_equal(c.renderer, "canvas")
def drawFunnel(title, data, savepath='.\\results'): if not os.path.exists(savepath): os.mkdir(savepath) funnel = Funnel() items = sorted(data.items(), key=lambda x: x[1], reverse=True) funnel.add(title,items,label_opts=opts.LabelOpts(is_show=True))\ .set_global_opts(title_opts=opts.TitleOpts(title=title),legend_opts=opts.LegendOpts(pos_left="right",orient="vertical"))\ .render(os.path.join(savepath, '%s.html' % title))
def show_areas(): select_all() funnel = Funnel( init_opts=opts.InitOpts(page_title='豆瓣电影-上映地区分布', height='650px')) funnel.add("豆瓣电影TOP250-上映地区分布", [list(z) for z in zip(area, num)]) funnel.set_global_opts(title_opts=opts.TitleOpts(title="豆瓣电影-上映地区分布", pos_left='center'), legend_opts=opts.LegendOpts(is_show=False)) funnel.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 生成HTML html = "pages/iframes/areas.html" funnel.render("./templates/" + html) return html
def funnel_label_inside() -> Funnel: c = (Funnel().add( "商品", [list(z) for z in zip(n, a)], label_opts=opts.LabelOpts(position="inside"), ).set_global_opts(title_opts=opts.TitleOpts(title="重男轻女"))) return c
def funnel_label_inside() -> Funnel: c = (Funnel().add( "商品", [list(z) for z in zip(Faker.choose(), Faker.values())], label_opts=opts.LabelOpts(position="inside"), ).set_global_opts(title_opts=opts.TitleOpts(title="Funnel-Label(inside)"))) return c
def funnel_base() -> Funnel: c=( Funnel() .add("豪车",[list(z) for z in zip(['宝马','法拉利','奔驰','奥迪','大众','丰田','特斯拉'],[randint(1,20) for _ in range(7)])]) .set_global_opts(title_opts=opts.TitleOpts(title="豪车漏斗图")) ) return c
def lou(): """ 通过漏斗图展示店铺订单的转化效率,绘制需求: 1.主题为dark 2.标题为“订单转化效率”,隐藏图例 3.绘图所用数据对已给出,这里省略从文件读入数据的过程: [("访问", 100), ("搜索", 78.12), ("点击", 35.74), ("加购", 17.17), ("订单", 2.62)] :return: 绘制好的漏斗图 """ # 使用Funnel()函数创建实例赋值给funnel # 使用InitOpts(),传入参数theme="dark",赋值给init_opts return ( Funnel(init_opts=opts.InitOpts(theme="dark")) .set_global_opts( legend_opts=opts.LegendOpts(is_show=False), title_opts=opts.TitleOpts(title="订单转化效率") ) .add( series_name="", data_pair=[("访问", 100), ("搜索", 78.12), ("点击", 35.74), ("加购", 17.17), ("订单", 2.62)], ) )
def woman_985_top10(): data_raw = analysis_data.get_sex_985() levels = ['985', '211'] womens = {'硕士女生数': 'shuo_woman'} res = [] for level in levels: data = data_raw[data_raw['level'] == level] for key, value in womens.items(): data1 = data.sort_values(value, ascending=False).head(10)[['name', value]] # c = ( # Pie(init_opts=opts.InitOpts(height='300px')) # .add('', [list(x) for x in data1.values]) # .set_global_opts(title_opts=opts.TitleOpts(title=level+'\n'+key ), # legend_opts=opts.LegendOpts( # type_="scroll", pos_left="80%", orient="vertical" # ),) # .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # ) print([list(x) for x in data1.values]) c = (Funnel().add( "商品", [list(x) for x in data1.values], label_opts=opts.LabelOpts(position="inside"), ).set_global_opts(title_opts=opts.TitleOpts(title=level + "硕士女生top10"), legend_opts=opts.LegendOpts(pos_top='30%', type_="scroll", pos_left="0%", orient="vertical"))) print(data1) res.append(c) return res
def funnel_label_inside(self, key, value, title) -> Funnel: c = (Funnel().add( "租房", [list(z) for z in zip(key, value)], label_opts=opts.LabelOpts(position="inside"), ).set_global_opts(title_opts=opts.TitleOpts(title=title))) return c
def Conversion_rates(df): ''' 目标:订单每个环节的转化转化率 :param df: :return: ''' rates = pd.Series( { '创建': df['订单创建时间'].count(), '付款': df['订单付款时间'].count(), '实际成交': df[df['买家实际支付金额'] > 0].shape[0], '全额成交': df[df['买家实际支付金额'] == df['总金额']].shape[0], }, name='订单量').to_frame() # 绝对转化率=各环节订单数/订单创建数 rates['整体转化率'] = rates['订单量'].apply( lambda x: round(x * 100 / rates.iloc[0, 0], 3)) # 相对转化率=各项指标/上一个流程的指标 # rates['相对转化率']=(rates/rates.shift())['订单量'].fillna(1) print(f'\n{"-"*5}各环节绝对转化率(%){"-"*5}\n') print(rates) c = ( Funnel().add( '转化率', [list(z) for z in zip(rates.index, rates['整体转化率'])], # 设置标签位置及数据展现形式 label_opts=opts.LabelOpts( position='inside', formatter='{b}:{c}')).set_global_opts( title_opts=opts.TitleOpts(title='整体转化率(%)'))) # 转存 make_snapshot(snapshot, c.render(), '转化率1.png')
def funnel_base() -> Funnel: c = ( Funnel() .add("商品", [list(z) for z in zip(Faker.choose(), Faker.values())]) .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-基本示例")) ) return c
def customized_visualization(key_list): latest_time = os.path.getmtime("ZhihuRanking.txt") # 这个是Unix时间,需要转换为人类的时间 latest_time = time.localtime(latest_time) latest_time = time.strftime("%Y-%m-%d %H:%M:%S", latest_time) latest_time = str(latest_time) size_list = [] # 这个用来决定每个热度的大小 ranking_list = [] # 这个是把话题写进去 ini = 200 for i in range(50): ini = int(ini * 0.9) + 2 size_list.append(ini) list_len = len(key_list) for i in range(list_len): size_list[key_list[i] - 1] = 350 with open("ZhihuRanking.txt", 'r', encoding='utf-8') as f: lines = f.readlines() for line in lines: line = line[4:].strip('\n') # 这里要注意把空格吃掉 ranking_list.append(line) c = ( Funnel(init_opts=opts.InitOpts(width="2048px", height="1080px")) .add("热搜关键词", [list(z) for z in zip(ranking_list, size_list)], label_opts=opts.LabelOpts(position="top"), gap=1, tooltip_opts=opts.TooltipOpts()) .set_global_opts(title_opts=opts.TitleOpts(title="知乎热榜+关键词自定义排名 更新于 " + latest_time), legend_opts=opts.LegendOpts(type_='scroll', orient='vertical', pos_left='0%', pos_top='20%'), tooltip_opts=opts.TooltipOpts(is_show=True)) .render("知乎热榜实时排名.html") )
def funnel_label_inside(): data = [z for z in zip(Faker.choose(), Faker.values())] c = (Funnel().add( 'Items', data, label_opts=opts.LabelOpts(position='inside')).set_global_opts( title_opts=opts.TitleOpts(title='Funnel-Label (insider)'))) return c
def funnel_base(): data = [z for z in zip(Faker.choose(), Faker.values())] print(data) c = (Funnel().add( 'Items', data).set_global_opts(title_opts=opts.TitleOpts(title='Funnel-base'))) return c
def edusalary(edu) -> Funnel: edu, d = Job().edusalary_data(edu) c = ( Funnel() # .add("商品", [list(z) for z in zip(Faker.choose(), Faker.values())]) .add("不知道是啥", d).set_global_opts( title_opts=opts.TitleOpts(title="主要城市薪资对比", subtitle=edu))) return c
def funnel_label_inside() -> Funnel: c = (Funnel().add( "排名总和", [list(z) for z in zip(df5['地区'], df5['排名总和'])], label_opts=opts.LabelOpts(position="inside"), ).set_global_opts(title_opts=opts.TitleOpts(title="36个主要城市六个维度排名总和"), legend_opts=opts.LegendOpts(type_='scroll', pos_top=25))) return c
def funnel_label_inside(title, data): c = (Funnel(init_opts=opts.InitOpts(height="500px")).add( "", data, label_opts=opts.LabelOpts(position="inside")).set_global_opts( title_opts=opts.TitleOpts(title=title), legend_opts=opts.LegendOpts(is_show=False), )) return c
def show_funnel_image(): recruiter = pandas.read_csv("recruiter.bak.csv") work_time = recruiter.groupby(['work_time'])['work_time'].count() funnel = (Funnel().add( "工作年限", [list(z) for z in zip(list(work_time.index), work_time.tolist())], label_opts=options.LabelOpts(position="inside")).set_global_opts( title_opts=options.TitleOpts(title="工作年限漏斗图"))) funnel.render("funnel.html")
def funnel_sort_ascending() -> Funnel: c = ( Funnel().add( "学习进度", [("第一课", 18), ("第二课", 12), ("第三课", 7), ("第四课", 5), ("第五课", 1)], #sort_="none", label_opts=opts.LabelOpts(position="inside"), ).set_global_opts(title_opts=opts.TitleOpts(title="学习进度"))) return c
def funnel_sort_ascending() -> Funnel: c = (Funnel().add( "商品", [list(z) for z in zip(Faker.choose(), Faker.values())], sort_="ascending", label_opts=opts.LabelOpts(position="inside"), ).set_global_opts(title_opts=opts.TitleOpts( title="Funnel-Sort(ascending)"))) return c
def drawFunnel(title, data, savepath='./results'): checkDir(savepath) funnel = (Funnel(init_opts=options.InitOpts(theme=ThemeType.MACARONS)).add( '', [list(item) for item in data.items()], label_opts=options.LabelOpts(position="inside")).set_global_opts( title_opts=options.TitleOpts(title=title, pos_left='center'), legend_opts=options.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))) funnel.render(os.path.join(savepath, title + '.html'))
def funnel_sort_ascending(): data = [z for z in zip(Faker.choose(), Faker.values())] c = (Funnel().add( 'Items', data, sort_='ascending', label_opts=opts.LabelOpts(position='inside')).set_global_opts( title_opts=opts.TitleOpts(title='Funnel-Sort (ascending)'))) return c
def funnel_label_inside(title, data) -> Funnel: c = (Funnel().add( "", data, label_opts=opts.LabelOpts(position="inside"), ).set_global_opts( title_opts=opts.TitleOpts(title=title), legend_opts=opts.LegendOpts(is_show=False), )) return c
def class_grade_distributed(class_index: int) -> (Funnel, dict): students: list = Student.query.filter_by(class_index=class_index) data = {'A+': 0, 'A': 0, 'B+': 0, 'B': 0, 'C+': 0, 'C': 0, } for student in students: data[student.analysis[0].get_level()] += 1 chart = ( Funnel(init_opts=opts.InitOpts(width='100%', height='400px', theme=ThemeType.VINTAGE)) .add('level', [list(z) for z in zip(data.keys(), data.values())], sort_="none", gap=5, label_opts=opts.LabelOpts()) ) return chart, data
def funnel(self, title=None, attr=None, value=None, two_title=None): """ 漏斗图 :param title: 数据可视化的标题(字符串) :param attr: 名称列表[列表] :param value: 名称列表对应数据 :param two_title: 二级小标题(鼠标悬浮显示小标题) :return:漏斗图 """ attr2 = attr value = value funnel = Funnel(title) funnel.add(two_title, attr2, value, is_label_show=True, label_pos='inside', label_text_color='#fff') self.page.add(funnel) self.page.render()
def costFunnel(city) -> Funnel: sql = "select rent from house where 1 = 1" with connection.cursor() as cursor: if city is not None and city != "": sql += " and city = %s" cursor.execute(sql, [city]) else: cursor.execute(sql) city = "所有" rows = cursor.fetchall() list = [] for row in rows: list.append(row[0]) a = 0 b = 0 c = 0 d = 0 e = 0 f = 0 g = 0 for i in list: if i < 1000: a += 1 elif i < 2000: b += 1 elif i < 3000: c += 1 elif i < 4000: d += 1 elif i < 5000: e += 1 elif i < 8000: f += 1 else: g += 1 x_data = [ '1000以下', '1000-2000', '1000-3000', '3000-4000', '4000-5000', '5000-8000', '8000以上' ] y_data = [a, b, c, d, e, f, g] data = [[x_data[i], y_data[i]] for i in range(len(x_data))] c = (Funnel().add( series_name=city, 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=city, title_textstyle_opts=opts.TextStyleOpts( font_size=23))).dump_options_with_quotes()) return c
def funnelChart(df): all_columns = df.columns columns_to_plot = st.selectbox("Select 1 column",all_columns,key='aa' ) columns_to_plot1 = st.selectbox("Select 2 column",[col for col in df.columns if col not in [columns_to_plot]], key='bb' ) # columns_to_plot2 = st.selectbox("Select 1 column",all_columns, key='c' ) # columns_to_plot3 = st.selectbox("Select 1 column",all_columns, key='d' ) # columns_to_plot4 = st.selectbox("Select 1 column",all_columns, key='e' ) cje = df[columns_to_plot].tolist() other_var1 = df[columns_to_plot1].tolist() # other_var2 = df[columns_to_plot2].tolist() # other_var3 = df[columns_to_plot3].tolist() # other_var4 = df[columns_to_plot4].tolist() funnel = Funnel(init_opts = opts.InitOpts(width='900px', height='1200px')) funnel.add('', [list(z) for z in zip(cje, other_var1)], label_opts=opts.LabelOpts(position="inside"),) return funnel
def funnel_sort_ascending(study_progress) -> Funnel: c = ( Funnel() .add( "学习进度", study_progress, #sort_="none", label_opts=opts.LabelOpts(position="inside"), ) .set_global_opts(title_opts=opts.TitleOpts(title="学习进度")) ) return c
def setfunnel(): data = [['报名人数/万', 238], ['招生人数', 85.7966], ['录取人数', 76.2]] c = (Funnel(init_opts=opts.InitOpts(width="300x", height="600px")).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="2018年报名数、招生数、录取数漏斗图"))) return c
def drawfunnel(title, data, savepath): if not os.path.exists(savepath): os.mkdir(savepath) pie = (Funnel().add( "", list(zip([i for i, j in data.items()], [j for i, j in data.items()])), label_opts=options.LabelOpts(position='inside')).set_global_opts( title_opts=options.TitleOpts(title=title), toolbox_opts=options.ToolboxOpts(), legend_opts=options.LegendOpts(pos_left='20px', pos_top='40px', orient='vertical'))) pie.render(os.path.join(savepath, '{}.html'.format(title)))