提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
本文分享一下自己学习数据可视化的学习心得,本人只是刚刚接触的萌新,如有错误或者不准确的,请大家多多见谅!
提示:以下是本篇文章正文内容,下面案例可供参考
一、三维柱形图
1.首先导入所需要的库与读取所需要的数据
import pyecharts.options as opts
from pyecharts.charts import Bar3D
import pandas as pd
data = pd.read_excel(r'D:\Code\Jupyter\data'+r'\航空公司数据.xlsx')
data
2.通过groupby(by=[])方法分组聚合我们所需的数据
gender_level_count = data.groupby(by=['会员卡级别','性别'])['会员卡号'].count()
gender_level_count
3.手动创建list表数据循环写入list表
gender = ['男','女']
level = [4,5,6] # 手动创建list
list = []
for i in range(len(level)):
for j in range(len(gender)):
list.append([i,j,int(gender_level_count[level[i],gender[j]])]) # 第三维度的数据需要int类型
list
4.最后画图与配置相关配置项
c = (
Bar3D(init_opts=opts.InitOpts(width="800px", height="600px"))
.add(
series_name="", # 此参数必须有
data = list, # 必须接收一个二维list,且元素列表的前两位数字为柱体在3d坐标系中位置的索引
xaxis3d_opts=opts.Axis3DOpts(type_="category", data=level, name='会员卡等级'),
yaxis3d_opts=opts.Axis3DOpts(type_="category", data=gender, name='性别'),
zaxis3d_opts=opts.Axis3DOpts(type_="value", name = '人数'),
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) # 显示数据标签
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_ = 5000, # 设置色阶的最大值
# range_color= Faker.visual_color # 调用Faker数据库的色阶数据
)
)
)
c.render_notebook()
效果图:
二、堆积面积图
1.首先导入所需要的库与读取所需要的数据
import pandas as pd
data_mpv_sale = pd.read_excel(r'D:\CodeProject\blog\MPV销量数据2012-2021(1).xlsx')
data_mpv_sale
2.通过drop_duplicates和sort_values方法对数据进行去重
data_mpv_sale2 = data_mpv_sale.drop_duplicates(subset=['采集时间','排名'],keep='last')
data_mpv_sale2 = data_mpv_sale2.sort_values(by=['采集时间','排名'])
data_mpv_sale2
3.数据加工之时间条件筛选与时间数据加工
data_mpv_sale3 = data_mpv_sale2[data_mpv_sale2['采集时间']>'2017']
data_mpv_sale3['车型_厂商'] = data_mpv_sale3['车型'] + '_' + data_mpv_sale3['厂商']
data_mpv_sale4 = data_mpv_sale3.copy() # 复制一个表格对象
data_mpv_sale4['年份'] = data_mpv_sale4['采集时间'].agg(lambda x:int(x[:4]))
data_mpv_sale4['月份'] = data_mpv_sale4['采集时间'].agg(lambda x:int(x[-2:]))
def jidu(month):
if month<=3:
return 1
elif month<=6:
return 2
elif month<=9:
return 3
else:
return 4
data_mpv_sale4['季度'] = data_mpv_sale4.loc[:,'月份'].agg(jidu)
data_mpv_sale4['年份_季度'] = data_mpv_sale4['年份'].agg(lambda x:str(x)+'年') + data_mpv_sale4['季度'].agg(lambda x:str(x)+'季度')
data_mpv_sale4
4.重新聚合车辆季度销量与定位销量头部车型
sale_season = data_mpv_sale4.groupby(by=['车型_厂商','年份_季度'])['销量'].sum()
sale_total20 = data_mpv_sale4.groupby(by=['车型_厂商'])['销量'].sum().sort_values(ascending=False)[:10].index.values
sale_total20
5.重组数据结构
# 定义时间列表
year = [2017,2018,2019,2020,2021]
season = [1,2,3,4]
list_time = []
for y in year:
for s in season:
if y==2021 and s>=3:
break
else:
list_time.append(f'{y}年{s}季度')
# 定义字典存储20辆车的季度销量信息
sale_dict = {}
for c in sale_total20:
sale_dict.setdefault(c,[]) # 创建键:c,值:[]
for t in list_time:
if t in sale_season[c].index:
sale_dict[c].append(int(sale_season[c][t]))
else:
sale_dict[c].append(0) # 没有销量记录的季度需要手动填入0
sale_dict
6.最后画图与配置相关配置项
import pyecharts.options as opts
from pyecharts.charts import Line
c = (
Line(init_opts=opts.InitOpts(width='800px',height='400px'))
.add_xaxis(xaxis_data=list_time)
.set_global_opts(
# title_opts=opts.TitleOpts(title="2017-2021年MPV销量前10名车型走势"),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), # 配置提示框
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
datazoom_opts=opts.DataZoomOpts(), # 配置滑动条
)
)
for name,sale_list in sale_dict.items():
c.add_yaxis(
series_name=name, # 序列名称,由车型名称定义
stack="总量", # 设置堆积图
y_axis=sale_list, # 销量数据
areastyle_opts=opts.AreaStyleOpts(opacity=0.5), # 设置面积图
label_opts=opts.LabelOpts(is_show=False),
is_smooth = True, # 显示平滑曲线
)
c.render_notebook()
# c.render('2017-2021年MPV销量前10名车型走势.html')
效果图:
总结
记录学习的过程,刚刚入门的萌新!