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

可视化分析总结

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 96 天

    [LV.6]常住居民II

    143

    主题

    525

    帖子

    848

    积分

    版主

    Rank: 8Rank: 8

    积分
    848

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 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 

    bilibili:陈公子的话   公众号:陈公子的话

    发表回复

    本版积分规则

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