上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: 陈公子的话 - 

可视化分析总结

[复制链接]
  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 532 天

    [LV.9]以坛为家II

    148

    主题

    420

    回帖

    1215

    积分

    版主

    积分
    1215

    油中2周年生态建设者

    发表于 2020-12-28 18:32:13 | 显示全部楼层 | 阅读模式

    主要用到的库

    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('生成词云成功!')
    已有1人评分好评 贡献 理由
    李恒道 + 1 + 1 ggnb!

    查看全部评分 总评分:好评 +1  贡献 +1 

    I don't hate programming but the fucking world.
  • TA的每日心情

    2022-11-22 08:37
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    2

    主题

    20

    回帖

    27

    积分

    助理工程师

    积分
    27
    发表于 2022-10-4 11:18:07 | 显示全部楼层
    没有效果图吗?
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表