【Python基础】1.2.1 字典统计词频

语言:Python
IDE:Python.IDE

  1. IPO描述
    通过文件“data.txt”(一篇英文文章)输出出现频率前十的字母的频率柱状图
    I:输入文件
    P:处理数据并附入Turtle类实现
    O:一个完整柱状图

  2. 源码段

import turtle
#扫描行
def processLine(line,wordCounts):
    line=replacePunctuations(line)    //函数
    words=line.split()
    for word in wordCounts:
        wordCounts[word]+=1
    else:
        wordCounts[word]=1
#替换函数
def replacePunctuations(line):
    for ch in line:
        if ch in ",./;'[]-=\_+{}|:<>?"""   //一个并不够聪明的判断
            line=line.replace(ch,"")
    return line
#统计词频_输入文件名
     filename=input("Enter a filename").strip()   //strip移除字符串头尾的空格
     infile.open(filename,"r")
#建立空字典
    wordCounts={}
    for line in infile:
        processLine(line.lower(),wordCounts)     //lower改小写
#统计词频
    pairs=list(wordCounts.items())               //找出字典列表
    items=[[x,y] for (y,x) in pairs]             //交换顺序
    items.sort()                                 //排序
#绘制函数初始化
    turtle.title('柱形图')
    turtle.setup(900,750,0,0)
    t.turtle.Turtle()
    t.hideturtle()
    t.width(3)
    drawGraph(t)
#参量初始化
    counts=10                   //词频个数
    data=[]                     //单词频率(y)
    words=[]                    //单词(x)
    yScale=6
    xScale=30                   //放大倍数
#(x1,y1)->(x2,y2)绘图
def drawLine(t,x1,y1,x2,y2)
    t.penup()                   //抬起笔
    t.goto(x1,y1)
    t.pendown()
    t.goto(x2,y2)
#(x.y)写字
def drawText(t,x,y,text)
    t.penup()
    t.goto(x,y)
    t.pendown()
    t.write(text)
#柱体
def drawRectangle(t,x,y)
    x=x*xScale
    y=y*yScale                     //扩大
    drawLine(t,x-5,0,x-5,y)
    drawLine(t,x-5,y,x-5,y)
    drawLine(t,x+5,y,x*5,0)
    drawLine(t,x+5,0,x-5,0) 
#实现多个
def drawBar(t)
    for i in range(count):
        drawRectangle(t,i+1,data[i])
#绘制轴
def drawGraph(t)
    drawLine(t,0,0,360,0)
    drawLine(t,0,300,0,0)
#x轴坐标描述
    for x in range(count):
    x=x+1
    drawText(t,x*xScale-4,-20,words[x-1])
    drawText(t,x*xScale-4,data[x-1]*yScale+10,data[x-1])
    drawBar(t)
#来自Mrlboro
main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值