信息论-字母概率统计,求信息熵(含pyecharts条形图)

信息论-字母概率

介绍

本代码为统计text.txt文件当中各字母(分大小写)的概率,并计算信息熵
最后使用pyecharts生成条形图

完整代码

#coding:utf-8
from pyecharts.charts import Bar, Page
from pyecharts import options as opts
import math
with open("text.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

str_lines = ''.join(lines)
new_lines = str_lines.replace(' ','').replace(',','').replace('.','')   #去除标点符号
total = len(new_lines)    #总数

def letter():           #字母列表
   l1 = []
   for x in range(65,91):
      l1.append(chr(x))
   for x in range(97,123):
      l1.append(chr(x))
   return l1

def letter_frequency(s):    #统计个数
   l2 = []
   for i in [chr(x) for x in range(65,91)]:       #大写
      l2.append(s.count(i))            #统计每个字母数量
   for i in [chr(x) for x in range(97,123)]:      #小写
      l2.append(s.count(i))
   return l2

list1 = letter()
list2 = letter_frequency(new_lines)
list3 = []
for i in list2:
    list3.append(round(i/total,3))   #概率
dic = dict(zip(list1,list3))    #打包成字典
i = 1
for k,v in dic.items():
    print(k, v, '\t   ',end='')
    if i == 5:
        i=0
        print('\n')
    i+=1

above = 0     #求信息熵
for i in list3:
    if i != 0:
        above = -i*math.log(i,2) + above
print("\n信息熵:",round(above,3))
print(math.log(52,2))
print(2*math.log(13,2))

if __name__ == '__main__':      #画图
    # pyecharts=1.8.1
    # 安装 python -m pip install pyecharts
    page = Page(layout=Page.DraggablePageLayout)

    bar = Bar()
    #x坐标
    bar.add_xaxis(list1)
    bar.add_yaxis("",list3,itemstyle_opts=opts.ItemStyleOpts(color='#c4d2ec'))
    bar.set_global_opts(title_opts=opts.TitleOpts(title="字母概率"))

    # 将柱状图bar添加到page页面中
    page.add(bar)
    page.render("test.html")
    # os.system("test.html")
    # page.save_resize_html('test.html', cfg_file='chart_config.json', dest='test1.html')

运行过程

  • text.txt文件的内容如下
    信息论-字母概率统计,求信息熵(含pyecharts条形图)_第1张图片

  • 运行后的结果如下图所示:
    信息论-字母概率统计,求信息熵(含pyecharts条形图)_第2张图片

  • 在运行后,会在同目录下出现test.html文件
    信息论-字母概率统计,求信息熵(含pyecharts条形图)_第3张图片

  • 点击这个文件,然后使用浏览器打开,此时你可以拖动生成的图表到你想要的大小和位置,然后点击左上角的save config,会生成一个json文件,将这个文件存放到test.html同目录下
    信息论-字母概率统计,求信息熵(含pyecharts条形图)_第4张图片

信息论-字母概率统计,求信息熵(含pyecharts条形图)_第5张图片

  • 更改代码中的两行代码
    信息论-字母概率统计,求信息熵(含pyecharts条形图)_第6张图片

  • 再次运行,会发现生成了一个test1.html文件
    信息论-字母概率统计,求信息熵(含pyecharts条形图)_第7张图片

  • 打开这个文件,就是最终的不可更改的条形图
    信息论-字母概率统计,求信息熵(含pyecharts条形图)_第8张图片

总结

使用pyecharts生成过程较为复杂,也可以选择使用plt生成图表,其操作更为简单,如果需要plt版本,可以私聊
只是小编在做信息论的作业时写的代码,pyecharts生成的网页版可以有更好看的渲染,以及可以实现与鼠标的动态互动
如有问题,欢迎评论区留言!

你可能感兴趣的:(编程,python,开发语言,概率论,echarts)