记录一次pyecharts新版本的可视化

pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,为了与 Python 进行对接,方便在 Python 中直接使用数据生成图,有三个大佬写了这个项目。以下是他们的GitHub地址:

pyecharts的官网: http://pyecharts.herokuapp.com/

pyecharts的版本有1.××0.5×之分。而且,这两个版本差别还挺大!
v0.5.x 和 V1 间不兼容,V1 是一个全新的版本,详见https://github.com/pyecharts/pyecharts/issues/892https://github.com/pyecharts/pyecharts/issues/1033

值得注意的是:

如何安装pyecharts?
如下安装:

# 安装 v1 以上版本
pip install pyecharts -U

# 如果需要安装 0.5.11 版本的开发者,可以使用
pip install pyecharts==0.5.11

这次可视化任务,我是帮一个群里认识的朋友做的。

其目的是进行一个词云可视化、以及词频分析;数据是关于B站的弹幕评论,然后再做一些对于情感分类的分析、评估。
首先,导库:

import pandas as pd
import numpy as np
import jieba
import collections
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.charts import Page, WordCloud,Grid
from pyecharts.globals import SymbolType

import warnings
warnings.filterwarnings("ignore", category=Warning)

读取数据:

data = pd.read_csv("data.csv",skiprows=1,names=['times','colors','id','content','program_period'])
print(data.head())

在这里插入图片描述并选择期档和评论数据,由于其它字段没用到,所以没有必要用。

data = data[['content','program_period']]

运用正则表达式,将评论中的数字和英文以及一些特殊字符去除:

data.content = data.content.str.replace('[0-9a-zA-Z]','')
data.content = data.content.str.replace(u'\t|\n|\.|-|:|;|\)|\(|\?|"','')

读入停止词,构造切词的自定义函数,并在切词过程中删除停止词 :

with open(r'stopword.txt', encoding='UTF-8') as words:
    stop_words = [i.strip() for i in words.readlines()]

def cut_word(sentence):
	#切词过程中删除停止词
    words = [i for i in jieba.lcut(sentence) if i not in stop_words]
    result = ' '.join(words)# 切完的词用空格隔开,当然,其它符号也行
    return(result)

对评论内容进行批量切词:

words = data.content.apply(cut_word)

取出切好的词:

def getworl(words):
    object_list = []
    for wordstr in words:
        wordL = wordstr.split(" ")
        for word in wordL:
            if (len(word) >= 2):
                object_list.append(word)
    return object_list
object_list = getworl(words)
object_list

进行词频统计:

#词频统计
word_counts = collections.Counter(object_list)

word_counts_dict = dict(word_counts) #先转成字典说不定有用

print(type(word_counts))  #返回<class 'collections.Counter'>
print(type(word_counts_dict))  #返回<class 'dict'>

#取频数最高的前50个词,并转换为字典格式
word_counts__dict_top100 = dict(word_counts.most_common(50))



#如果不转换为字典的话,word_counts.most_common(50)返回的将是如下格式(列表)的数据:
[('感觉', 4147),
 ('喜欢', 3566),
 ('真的', 3157),
 ('声音', 3153),
 ('厉害', 3104),
 ('新闻', 2501),
 ('主持人', 2440),
 ('节目', 2145),
 ('老师', 2084),
 ('弹幕', 1746)....]

进行一个条形图可视化:

def getBar(word_counts__dict):
    bar = Bar()
    bar.add_xaxis(list(word_counts__dict.keys())[:])
    bar.add_yaxis("词语", list(word_counts__dict.values())[:])
    bar.set_global_opts(
        title_opts=opts.TitleOpts(title="词频统计图"),
        datazoom_opts=opts.DataZoomOpts(),)
    
    return bar

word_counts__dict_top100 = dict(word_counts.most_common(50))  
bar = getBar(word_counts__dict_top100)
bar.render_notebook()
# bar.render(path="all_bar.html")  #这个是将图表保存为本地HTML文件。

在这里插入图片描述
进行一个词云图可视化:

def getWC(word_counts_top):
    wc = WordCloud()
    wc.add("",word_counts_top , word_size_range=[5, 100]) #取前面1000个
    wc.set_global_opts(title_opts=opts.TitleOpts(title="词云"))
    return wc

wc = getWC(word_counts.most_common(1000))
wc.render_notebook()
# wc.render(path="all_wc.html")

在这里插入图片描述
之后,我又取出每一期的数据进行一个可视化比较:

# 取出每一期的数据 [一、二、三、四]
programList = ['第一期','第二期','第三期','第四期']
def getprogram(dataframe,programList):
    programS = []
    for program in programList:
        data = dataframe[(dataframe['program_period']==program)]
        programS.append(data)
    return programS
    
def word_count4(programS,top,topdict):
    program1 = []
    program2 = []
    program3 = []
    program4 = []
    for program in programS:
        program = program.reset_index(drop=True)
        words = program.content.apply(cut_word)
        object_list = getworl(words)
        word_counts = collections.Counter(object_list)
        word_counts_top1000 = word_counts.most_common(top)
        word_counts_dict_ = dict(word_counts.most_common(topdict))
        if program['program_period'][0] == '第一期':
            program1.append(word_counts_top1000)
            program1.append(word_counts_dict_)
        if program['program_period'][0] == '第二期':
            program2.append(word_counts_top1000)
            program2.append(word_counts_dict_)
        if program['program_period'][0] == '第三期':
            program3.append(word_counts_top1000)
            program3.append(word_counts_dict_)
        if program['program_period'][0] == '第四期':
            program4.append(word_counts_top1000)
            program4.append(word_counts_dict_)
    return program1,program2,program3,program4

def getWCP(word_counts_top,Title):
    wc = WordCloud()
    wc.add("",word_counts_top , word_size_range=[5, 100]) #取前面1000个
    wc.set_global_opts(title_opts=opts.TitleOpts(title=Title))
    return wc

def getBarP(word_counts__dict,Title):
    bar = Bar()
    bar.add_xaxis(list(word_counts__dict.keys())[:])
    bar.add_yaxis("词语", list(word_counts__dict.values())[:])
    bar.set_global_opts(
        title_opts=opts.TitleOpts(title=Title),
        datazoom_opts=opts.DataZoomOpts(),)
    return bar
programS = getprogram(data,programList)
program1,program2,program3,program4 = word_count4(programS,1000,100)

对第一期进行条形图可视化: 【其它期类推】

bar = getBarP(program1[1],"第一期")
bar.render(path="p1_bar.html")
bar.render_notebook()

对第一期词云进行可视化: 【其它期类推】

wc = getWCP(program1[0],"第一期")
wc.render(path="p1_wc.html")
wc.render_notebook()

当然,还有一些是关于图形的分析、以及写了另一个文件是对于数据的分析。这篇博客的主题是可视化,所以就不去讨论那些分析了。

最后,附上两个好东西:

该pyecharts的使用手册: https://pyecharts.org/#/zh-cn/intro
该pyecharts的GitHub地址:https://github.com/pyecharts/pyecharts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tony Einstein

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值