主要用到的库
import pandas as pd
from pyecharts.charts import **************
from pyecharts import options as opts
来说首先引入欲处理的数据
数据经过筛选取出我们需要的数据 进行相关的排序。
将处理好的数据传入,生成pyecharts创建柱状图,饼图,等图形界面。
创建图之后初始化配置,即设置大小 。
全局配置,添加标题,添加工具箱,分割线等辅助工具
系统配置设置标签样式
写出文件
部分代码:
def creat_cut_likes(df):
#将数据进行分段
Bins = [0, 1000000, 5000000, 10000000, 25000000, 50000000, 100000000, 5000000000]
Labels = ['0-100', '100-500', '500-1000', '1000-2500', '2500-5000', '5000-10000', '10000以上']
len_stage = pd.cut(df['likes'], bins=Bins, labels=Labels).value_counts().sort_index()
#传入数据
attr = len_stage.index.tolist()
v1 = len_stage.values.tolist()
#可视化柱状图生成
bar = Bar(init_opts=opts.InitOpts(width='800px',height='400px'))
#XY轴添加数据
bar.add_xaxis(attr)
bar.add_yaxis('',v1)
#设置全局配置项目,即为项目标题,工具箱(下载图片),Y轴分割线
bar.set_global_opts(title_opts=opts.TitleOpts('抖音大V点赞分布情况(万)',pos_left='center',pos_top='18'),
toolbox_opts=opts.ToolboxOpts(is_show=True,feature={"saveAsImage": {}}),
yaxis_opts=opts.AxisOpts(is_show=True,splitline_opts=opts.SplitLineOpts(is_show=True))
)
#设置系统配置项,标签样式
bar.set_series_opts(label_opts=opts.LabelOpts(position='top',color='black'))
#写出
bar.render('抖音大V点赞分布情况(万).html')
creat_cut_likes(df)
def create_type_likes(df):
# 分组求和
likes_type_message = df.groupby(['category'])
likes_type_com = likes_type_message['likes'].agg(['sum'])
likes_type_com.reset_index(inplace=True)
# 处理数据
dom = [{'name': name, 'value': num} for name, num in
zip(likes_type_com['category'], likes_type_com['sum'])]
# 初始化配置
treemap = (TreeMap(init_opts=opts.InitOpts(width="800px", height="400px"))
# 添加数据
.add('', dom)
# 设置全局配置项,标题、工具箱(下载图片)
.set_global_opts(title_opts=opts.TitleOpts(title="各类型抖音大V点赞数汇总图",
pos_left="center", pos_top="5"),
toolbox_opts=opts.ToolboxOpts(is_show=True,
feature={"saveAsImage": {}}),
legend_opts=opts.LegendOpts(is_show=False)) )
treemap.render("各类型抖音大V点赞数汇总图.html")
create_type_likes(df)
def creat_gender(df):
#CSV文件Gender替换 便于阅读
df.loc[df.gender == '0', 'gender'] = '未知'
df.loc[df.gender == '1', 'gender'] = '男性'
df.loc[df.gender == '2', 'gender'] = '女性'
#print(df['gender'])
#根据性别进行分组 并计算搁搁性别的总人数 #sum直接字符串拼接 count出现次数进行计算+和
gender_list = df.groupby(['gender'])['gender'].agg(['count'])
gender_list = gender_list.reset_index(inplace=False)
#print(gender_list)
#可视化饼图
#首先给饼图传入数据
attr = gender_list['gender']
print(attr)
v1 = gender_list['count']
print(v1)
#pyechart操作之前都要进行初始化配置
pie = Pie(init_opts=opts.InitOpts(width='800px',height='400px'))
#饼图添加数据设置半径
pie.add('',[list(z) for z in zip(attr, v1)],radius=['40%','75%'])
#饼图全局配置项 设置标题 图例 工具箱(下载图片)
pie.set_global_opts(title_opts=opts.TitleOpts(title='抖音大V性别分布情况',pos_left='center'),
legend_opts=opts.LegendOpts(orient='vertical',pos_left='left'),
toolbox_opts=opts.ToolboxOpts(feature={'saveAsImage':{}})
)
#设置系统配置项
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie.render("抖音大V性别分布情况.html")
print('写出成功!')
creat_gender(df)
def create_fans(df):
# CSV文件排序操作
df.sort_values('fans',ascending=False)
#传入数据
attr = df['name'][0:10]
v1 = ['%.1f' % (float(i) / 10000) for i in df['fans'][0:10]]
print(v1)
#柱状图生成
bar = Bar(init_opts=opts.InitOpts(width='800px',height='400px'))
#XY数据设置
bar.add_xaxis(list(reversed(attr.tolist())))
bar.add_yaxis('',list(reversed(v1)))
#全局配置 标题 工具箱 分割线
bar.set_global_opts(title_opts=opts.TitleOpts(title='抖音粉丝数TOP10(万)',pos_left='center',pos_top= '18'),
toolbox_opts=opts.ToolboxOpts(feature={'saveAsImage':{}}),
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True))
)
#系统配置
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True,position='right',color='black'))
#xy反转
bar.reversal_axis()
#写出
bar.render('抖音粉丝数TOP10(万).html')
create_fans(df)
def create_province_map(df):
# 筛选数据
df = df[df["country"] == "中国"]
df1 = df.copy()
# 数据替换
df1["province"] = df1["province"].str.replace("省", "").str.replace("壮族自治区", "").str.replace("维吾尔自治区", "").str.replace("自治区", "")
# 分组计数
df_num = df1.groupby("province")["province"].agg(count="count")
df_province = df_num.index.values.tolist()
df_count = df_num["count"].values.tolist()
# 初始化配置
map = Map(init_opts=opts.InitOpts(width="800px", height="400px"))
# 中国地图
map.add("", [list(z) for z in zip(df_province, df_count)], "china")
# 设置全局配置项,标题、工具箱(下载图片)、颜色图例
map.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V省份分布情况", pos_left="center", pos_top="0"),
toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
# 设置数值范围0-600,is_piecewise标签值连续
visualmap_opts=opts.VisualMapOpts(max_=600, is_piecewise=False))
map.render("抖音大V省份分布情况.html")
create_province_map(df)
def create_wordcloud(df, picture):
words = pd.read_csv('file/chineseStopWords.txt', encoding='gbk', sep='\t', names=['stopword'])
# 分词
text = ''
df1 = df[df["signature"] != ""]
df1 = df1.copy()
for line in df1['signature']:
text += ' '.join(jieba.cut(str(line).replace(" ", ""), cut_all=False))
# 停用词
stopwords = set('')
stopwords.update(words['stopword'])
backgroud_Image = plt.imread('file/douyin.png')
# 使用抖音背景色
alice_coloring = np.array(Image.open(r"file/douyin.png"))
image_colors = ImageColorGenerator(alice_coloring)
wc = WordCloud(
background_color='white',
mask=backgroud_Image,
font_path='file/simhei.ttf',
max_words=2000,
max_font_size=70,
min_font_size=1,
prefer_horizontal=1,
color_func=image_colors,
random_state=50,
stopwords=stopwords,
margin=5
)
wc.generate_from_text(text)
wc.to_file(picture)
print('生成词云成功!')