Python基础学习(二)

文本词频统计

《哈姆雷特》单词词频分析
《哈姆雷特》文章

def get_text():
    text = open('F:\\PyStudy\\hamlet.txt', 'r').read() # 打开文章文件
    text = text.lower() # 方便统计,全部小写
    # 去掉无关字符
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        text = text.replace(ch, ' ') # 用空格替换无关单词
    return text

def main():
    hamlet_text = get_text()
    words = hamlet_text.split() # 以空格的形式拆分单词返回列表
    counts = {} # 空dict字典
    for word in words:
        counts[word] = counts.get(word, 0) + 1 # 计算键值
    items = list(counts.items()) # 字典键值元组化为列表
    items.sort(key=lambda x:x[1], reverse=True) # 使用列表sort算法,关键字按照元组的第二个元素逆序
    for i in range(10): # 使用最多的单词前10
        word, count = items[i]
        print("{:<10}{:>5}".format(word, count))

if __name__ == "__main__":
    main()

《三国演义》出场人物TOP分析
《三国演义》文章
条件
对中文分词操作,需要安装jieba库,jieba是优秀的中文分词的第三方库
(cmd命令行)pip install jieba

jieba库常用函数

jieba库常用函数

jieba分词要点jieba.lcut(s)函数

import jieba
txt = open("F:\\PyStudy\\threekingdoms.txt", "r", encoding="utf-8").read()
excludes = {"将军","却说","荆州","二人","不可","不能","如此",'商议','如何','主公','军士'\
            ,'左右','军马','引兵','次日','大喜','天下','东吴','于是','今日','不敢','魏兵'\
            ,'陛下','一人','都督','人马','不知','汉中','只见','众将','后主','蜀兵','上马'\
            ,'大叫','太守','此人'}
words = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1: # 统计单词
        continue
    elif word == "诸葛亮" or word == "孔明曰": # 分词优化
        rword = "孔明"
    elif word == "关公" or word == "云长":
        rword = "关羽"
    elif word == "玄德" or word == "玄德曰":
        rword = "刘备"
    elif word == "孟德" or word == "丞相":
        rword = "曹操"
    else:
        rword = word
    counts[rword] = counts.get(rword, 0) + 1
for word in excludes: # 删除无关单词
    del counts[word]
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
print('《三国演义》中人物出场TOP10')
for i in range(10):
    word, count = items[i]
    print("{:<10}{:>5}".format(word, count))

文本统计的主要步骤:

  1. 读取文件文本,剔除不需要统计的内容(符号等)
  2. 字符串转为列表
  3. 遍历列表,使用字典存储键和值
  4. 字典转为列表排序比较

sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作
sorted语法
sorted(iterable, key=None, reverse=False)

  • terable – 可迭代对象。
  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

文件

文件是数据的抽象和集合

  • 文件是存储在辅助存储器上的数据序列
  • 文件时数据存储的一种形式
  • 文件展现形态:文件文件和二进制文件
    文本文件vs.二进制文件
  • 文本文件和二进制文件只是文件的展示方式
  • 本质上,所有文件都是二进制形式存储
  • 形式上,所有文件采用两种方式展示

文件

文件打开:<变量名>/文件句柄 = open(<文件名>, <打开模式>)

文件打开方式

文件关闭:<变量名>/文件句柄.close()

文件读取函数

文件读取函数

文件的全文本操作一

fname = input('请输入要打开的文件名称:')
fo = open(fname, 'r')
txt = fo.read()
# 对全文txt进行处理
fo.close()

文件的全文本操作二

fname = input('请输入要打开的文件名称:')
fo = open(fname, 'r')
txt = fo.read(2)
while txt != '':
    txt = fo.read(2) # 逐步读取
fo.close()

文件的逐行操作一

fname = input('请输入要打开的文件名称:')
fo = open(fname, 'r')
for line in fo.readlines():
    print(line) # 一次读入,分行处理
fo.close()

文件的逐行操作二

fname = input('请输入要打开的文件名称:')
fo = open(fname, 'r')
for line in fo:
    print(line) # 分行读入,逐行处理
fo.close()

文件写入函数

文件写入

fo = open('filename', 'w')
ls = ['中国','法国','美国']
fo.writelines(ls) # 写入一个字符串列表
fo.seek(0)
for line in fo:
    print(line)
fo.close()

数据

一维数据的表示:

  • 如果数据间有序:使用集合类型
  • 如果数据间无序:使用列表类型

一维数据的存储:
存储方式一:空格分隔
中国 美国 日本 德国 法国 英国 意大利

  • 使用一个或多个空格空格分隔进行存储,不换行
  • 缺点:数据中不能存在空格

存储方式二:逗号分隔
中国,美国,日本,德国,法国,英国,意大利

  • 使用英文半角逗号分隔数据进行存储,不换号
  • 缺点:数据中不能有英文逗号

存储方式:其他方式

  • 使用其他符号或符号组合分隔,建议采用特殊符号
  • 缺点:需要根据数据特点定义,通用性较差
# 一维数据读取
txt = open(fname).read()
ls = txt.split() # txt.split(',') txt.split('$')

# 一维数据写入
ls = ['中国', '美国', '日本']
f = oepn(fname, 'w')
f.write(' '.join(ls)) # f.write('$'.join(ls)) 
f.close()

二维数据:

二维数据

数据读入
fo = open(fname)
ls = []
for line in fo:
    line = line.replace('\n', '')
    ls.append(line.split(','))
fo.close()

数据写入
ls = [[], [], []]
f = open(fname, 'w')
for item in ls:
    f.write(','.join(item)+'\n')
f.close()

wordcloud库

wordcloud库

词云的安装
(cmd命令行)pip install wordcloud

wordcloud库基本使用

  • wordcloud.WordCloud()代表一个文本对应的词云
  • 根据文本中词云出现的频率等参数绘制词云
  • 词云的绘制形状、尺寸和颜色都可以设定

python词云

# 实例
str = 'Python的设计哲学是“优雅”、“明确”、“简单”。因此,Pe' \
      'rl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。' \
      'Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。' \
      'Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。' \
      '虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。' \
      'Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004 年,Python 已在Google 内部使用,Google 召募许多 Python 高手,但在这之前就已决定使用Python,他们的目的是 Python where we can, C++ where we must,在操控硬件的场合使用C++,在快速开发时候使用 Python。”'
import wordcloud
import jieba
path = 'C:\\Windows\\Fonts\\simhei.ttf'
w = wordcloud.WordCloud(font_path=path, background_color='white', width=1000,height=800)
ls = jieba.lcut(str)
w.generate(' '.join(ls))
w.to_file('python.jpg')

计算思维

计算思维

计算思维:抽象和自动化

  • 抽象问题的计算过程,利用计算机自动化求解
  • 计算思维时基于计算机的思维方式

计算思维

计算思维与程序设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值