全栈 - 5 实战 西游记用字统计

作者: 宏伦工作室 | 来源:发表于2017-01-07 21:07 被阅读174次

    这是全栈数据工程师养成攻略系列教程的第五期:5 实战 西游记用字统计。

    我们将通过一个简单的实战项目,来巩固之前学习的Python基础。

    数据

    所使用的数据可以在我的Github上找到,https://github.com/Honlan/fullstack-data-engineer。将整个项目下载下来之后,里面的data文件夹中便包含了课程所需的全部数据和文件。

    这次我们将用到xyj.txt,里面是小说巨著《西游记》的文本内容,使用UTF8编码,文件大小为2.2MB。文学大师吴承恩毕生的作品,如今用2M左右的文件就可以全部存储,这正是信息时代所带来的进步和便利。

    目标

    我们将读入《西游记》的文本内容,并进行以下统计:

    1. 共出现了多少个不同的汉字;
    2. 每个汉字分别出现了多少次;
    3. 哪些汉字出现得最为频繁。

    xyj.txt的同级目录下,新建一个py文件,然后开始写代码吧!

    步骤

    首先,定义一个读文件,读取准备好的xyj.txt

    fr = open('xyj.txt', 'r')
    

    准备一个列表characters和一个字典stat,分别用来记录所出现的汉字和每个汉字出现的次数。

    characters = []
    stat = {}
    

    接下来遍历读文件中的每一行,并进行统计。统计结果显示,《西游记》中共出现了4511个不同的汉字。

    for line in fr:
        # 去掉每一行两边的空白
        line = line.strip()
        
        # 如果为空行则跳过该轮循环
        if len(line) == 0:
            continue
        
        # 将文本转为unicode,便于处理汉字
        line = unicode(line)
        
        # 遍历该行的每一个字
        for x in xrange(0, len(line)):
            # 去掉标点符号和空白符
            if line[x] in [' ', '\t', '\n', '。', ',', '(', ')', '(', ')', ':', '□', '?', '!', '《', '》', '、', ';', '“', '”', '……']:
                continue
            
            # 尚未记录在characters中
            if not line[x] in characters:
                characters.append(line[x])
            
            # 尚未记录在stat中
            if not stat.has_key(line[x]):
                stat[line[x]] = 0
            # 汉字出现次数加1
            stat[line[x]] += 1
    
    print len(characters)
    print len(stat)
    

    接下来对stat按值进行排序,排序之后会得到一个列表,因为字典是无序的,而列表是有序的。

    # lambda生成一个临时函数
    # d表示字典的每一对键值对,d[0]为key,d[1]为value
    # reverse为True表示降序排序
    stat = sorted(stat.iteritems(), key=lambda d:d[1], reverse=True)
    

    定义一个写文件,将统计和排序结果写入文件。

    fw = open('result.csv', 'w')
    for item in stat:
        # 进行字符串拼接之前,需要将int转为str
        fw.write(item[0] + ',' + str(item[1]) + '\n')
    

    最后,记得关闭读文件和写文件。

    fr.close()
    fw.close()
    

    总结

    通过这样的一个简单项目,我们温习了Python中的读文件和写文件,列表和字典的使用,以及字典的排序等内容。Python的功能很强大,打开你的脑洞,用Python去完成一些你能想到的事情吧~

    视频链接:西游记用字统计

    相关文章

      网友评论

      本文标题:全栈 - 5 实战 西游记用字统计

      本文链接:https://www.haomeiwen.com/subject/gonfbttx.html