1 前言
在上周,小编在《python数据可视化之公众号得分的柱状图》一文中,将各作者的得分数据与文章数通过pyecharts进行了简单的分析处理,但是数据的分析往往是通过多个方面来看的。所以今天,小编就继续将上次得到的数据进行可视化处理。
2 准备
首先是python环境不用多说,然后是可读取excel的xlrd模块和强大的可视化模块pyecharts。两者都通过pip安装即可。
pip install xlrd pip install pyecharts |
然后直接导入对应模块和类即可。
#导入模块 from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.charts import Line import xlrd #读取excel的模块 |
数据来源还是由上一篇文章中处理的excel表格。
图2.2上次获得的数据
3数据处理
3.1 平均得分
平均数是常用的最基本的一项指标。能够很好的反应数据整体的情况。
authorScore = {}##用来储存作者与每篇文章的得分 for i in range(1,table.nrows): #遍历表格中的每一行 look = table.row_values(i)[2] #在看 read = table.row_values(i)[3] #阅读数 like = table.row_values(i)[4] #点赞 score = look + read * (1 / 10) + like * (1 / 2) #每篇文章得分 if table.row_values(i)[1] not in allData.keys(): #判断储存数据的字典中是否有该作者 allData.get(table.row_values(i)[1]) #没有就添加 allData[table.row_values(i)[1]] = [1,score] #为这个作者添加值(文章数和得分) authorScore.get(table.row_values(i)[1]) # 没有就添加 authorScore[table.row_values(i)[1]] = [round(score,1)] # 为这个作者添加文章得分 else: allData[table.row_values(i)[1]][0] += 1 #有就文章数加一 allData[table.row_values(i)[1]][1] += score #累计得分 authorScore[table.row_values(i)[1]].append(round(score,1)) #每次文章得分 bar2 = (Bar() #对柱状图进行简单配置 .add_xaxis(author) #设置横坐标为作者 .add_yaxis('平均得分',averageScore) #纵坐标一为文章数 .set_global_opts( #全局配置,标题、副标题、坐标轴、主题等 #xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), title_opts=opts.TitleOpts(title = '公众号得分数据分析',subtitle = '近期作者发布文章数与得分情况') ) ) bar2.render("test2.html") #生成html文件 |
然后将得到的数据用pyecharts处理成柱状图。
xaxisData = ["第一篇","第二篇","第三篇","第四篇"] line = (Line() .add_xaxis(xaxisData) .add_yaxis(author[0],authorScore[author[0]]) .add_yaxis(author[1],authorScore[author[1]]) .add_yaxis(author[2],authorScore[author[2]]) .add_yaxis(author[3],authorScore[author[3]]) .add_yaxis(author[4],authorScore[author[4]]) .add_yaxis(author[5],authorScore[author[5]]) .add_yaxis(author[6],authorScore[author[6]]) .add_yaxis(author[7],authorScore[author[7]]) .add_yaxis(author[8],authorScore[author[8]]) .add_yaxis(author[9],authorScore[author[9]]) .add_yaxis(author[10],authorScore[author[10]]) .add_yaxis(author[11],authorScore[author[11]]) .add_yaxis(author[12],authorScore[author[12]]) .add_yaxis(author[13],authorScore[author[13]]) .add_yaxis(author[14],authorScore[author[14]]) .add_yaxis(author[15],authorScore[author[15]]) .add_yaxis(author[16],authorScore[author[16]]) .add_yaxis(author[17],authorScore[author[17]]) .add_yaxis(author[18],authorScore[author[18]]) .add_yaxis(author[19],authorScore[author[19]]) .add_yaxis(author[20],authorScore[author[20]]) .add_yaxis(author[21],authorScore[author[21]]) .add_yaxis(author[22],authorScore[author[22]]) .set_global_opts(title_opts=opts.TitleOpts(title="每篇文章得分") ) ) line.render("test3.html") |
averageScore = []#储存平均得分 variance = []#储存方差 scoreData = list(authorScore.values()) def varianceGet(scoreList,count,average): sum = 0 for o in scoreList: sum += ((o-average)**(2))/count return round(sum,1) n = 0 for i in datas: #遍历数据表 articleCount.append(i[0]) #添加文章数 articleScore.append(round(i[1],1)) #添加的得分 averageScore.append(round(i[1]/i[0],1)) variance.append(varianceGet(scoreData[n],i[0],round(i[1]/i[0],1))) n += 1 bar3 = (Bar() #对柱状图进行简单配置 .add_xaxis(author) #设置横坐标为作者 .add_yaxis('方差',variance) #纵坐标一为文章数 .set_global_opts( #全局配置,标题、副标题、坐标轴、主题等 #xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), title_opts=opts.TitleOpts(title = '公众号得分数据分析',subtitle = '近期作者发布文章数与得分情况') ) ) bar3.render("test4.html") #生成html文件 |