python程序设计及大数据挖掘-第五次课

龙圆芝-3-28

9.1

# 导入数学库中的平方根函数  
from math import sqrt  
  
# 定义getNum函数:用于获取用户的不定长输入  
def getNum():  
    nums = []  # 初始化一个空列表,用于存储用户输入的数字  
    iNumStr = input("请输入数字(直接输入回车退出): ")  # 获取用户输入的数字字符串  
    while iNumStr != "":  # 当用户输入不为空时,继续循环  
        nums.append(eval(iNumStr))  # 将用户输入的数字字符串转化为数字,并添加到nums列表中  
        iNumStr = input("请输入数字(直接输入回车退出): ")  # 再次获取用户输入  
    return nums  # 返回存储了所有用户输入数字的列表  
  
# 定义mean函数:用于计算数字列表的平均值  
def mean(numbers):  
    s = 0.0  # 初始化累加器为0  
    for num in numbers:  # 遍历数字列表  
        s = s + num  # 将每个数字累加到累加器中  
    return s / len(numbers)  # 返回累加器除以数字列表的长度,即平均值  
  
# 定义dev函数:用于计算数字列表的方差  
def dev(numbers, mean):  
    sdev = 0.0  # 初始化方差累加器为0  
    for num in numbers:  # 遍历数字列表  
        sdev = sdev + (num - mean)**2  # 计算每个数字与平均值的差的平方,并累加到方差累加器中  
    return sqrt(sdev / (len(numbers)-1))  # 返回方差累加器除以(数字列表长度-1)的平方根,即方差  
  
# 定义median函数:用于计算数字列表的中位数  
def median(numbers):  
    sorted(numbers)  # 对数字列表进行排序,但这里缺少将排序结果重新赋值给numbers的步骤  
    size = len(numbers)  # 获取数字列表的长度  
    if size % 2 == 0:  # 如果长度是偶数  
        med = (numbers[size//2-1] + numbers[size//2])/2  # 则中位数为中间两个数的平均值  
    else:  
        med = numbers[size//2]  # 如果长度是奇数,则中位数为中间的数  
    return med  # 返回中位数  
  
# 主体部分  
n = getNum()  # 调用getNum函数,获取用户输入的数字列表  
m = mean(n)  # 调用mean函数,计算数字列表的平均值  
  
# 输出结果  
print("平均值:{},方差:{:.2f},中位数:{}.".format(m, dev(n,m),median(n)))  # 打印平均值、方差和中位数,注意方差格式化为两位小数

10.1

# 定义一个函数getText,用于从文件中读取文本内容并进行预处理  
def getText():  
    # 打开名为"hamlet.txt"的文件,并以只读模式读取文件内容,赋值给变量txt  
    txt = open("hamlet.txt", "r").read()  
    # 将文本内容转换为小写,以便后续的统计不受大小写影响  
    txt = txt.lower()  
    # 遍历定义的特殊字符集合  
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':  
        # 将文本中的特殊字符替换为空格,以便于后续的单词分割  
        txt = txt.replace(ch, " ")  
    # 返回预处理后的文本内容  
    return txt  
  
# 调用getText函数,并将返回的文本内容赋值给变量hamletTxt  
hamletTxt = getText()  
  
# 使用空格分割处理后的文本,得到一个包含所有单词的列表  
words  = hamletTxt.split()  
  
# 定义一个空字典counts,用于统计单词出现的次数  
counts = {}  
  
# 遍历单词列表  
for word in words:  
    # 使用字典的get方法获取单词word的当前计数,默认为0  
    # 然后将计数加1,并更新到字典counts中  
    counts[word] = counts.get(word,0) + 1  
  
# 将counts字典的键值对转换为列表items  
items = list(counts.items())  
  
# 对items列表进行排序,按照单词出现的次数从多到少排序  
# 使用lambda函数作为排序的key,提取每个元组的第二个元素(即计数)  
items.sort(key=lambda x:x[1], reverse=True)  
  
# 遍历排序后的前10个单词及其计数  
for i in range(10):  
    # 从items列表中提取第i个元素,并解包为word和count两个变量  
    word, count = items[i]  
    # 使用格式化字符串打印单词及其计数,左对齐单词占10个字符宽度,右对齐计数占5个字符宽度  
    print ("{0:<10}{1:>5}".format(word, count))

 

10.2

 

# 定义一个集合excludes,包含一些不需要统计的常用单词  
excludes = {"the","and","of","you","a","i","my","in"}  
  
# 定义getText函数,用于从文件读取并处理文本内容  
def getText():  
    # 打开名为"hamlet.txt"的文件,以只读模式读取内容,并赋值给变量txt  
    txt = open("hamlet.txt", "r").read()  
    # 将文本内容转换为小写  
    txt = txt.lower()  
    # 遍历定义的特殊字符集合  
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':  
        # 将文本中的特殊字符替换为空格  
        txt = txt.replace(ch, " ")  
    # 返回处理后的文本内容  
    return txt  
  
# 调用getText函数,并将返回的文本内容赋值给变量hamletTxt  
hamletTxt = getText()  
  
# 使用空格分割处理后的文本,得到一个包含所有单词的列表  
words  = hamletTxt.split()  
  
# 定义一个空字典counts,用于统计单词出现的次数  
counts = {}  
  
# 遍历单词列表  
for word in words:  
    # 如果单词已经在counts字典中,则增加其计数;否则,设置其计数为1  
    counts[word] = counts.get(word,0) + 1  
  
# 遍历excludes集合,从counts字典中删除这些不需要统计的单词  
for word in excludes:  
    del(counts[word])  
  
# 将counts字典的键值对转换为列表items  
items = list(counts.items())  
  
# 对items列表进行排序,按照单词出现的次数从多到少排序  
items.sort(key=lambda x:x[1], reverse=True)  
  
# 遍历排序后的前10个单词及其计数  
for i in range(10):  
    # 解包items列表中的第i个元素,分别赋值给word和count  
    word, count = items[i]  
    # 使用格式化字符串打印单词及其计数,左对齐单词,右对齐计数  
    print ("{0:<10}{1:>5}".format(word, count))

10.3

# 导入jieba分词库  
import jieba  
  
# 定义一个空字典excludes,用于存储需要排除的单词,此处未初始化任何单词  
excludes = {} #{"将军","却说","丞相"}  # 示例中排除了三个词,但在当前代码中未实际排除  
  
# 打开名为"三国演义.txt"的文件,以只读模式读取内容,并指定编码为utf-8,然后将内容赋值给变量txt  
txt = open("三国演义.txt", "r", encoding='utf-8').read()  
  
# 使用jieba的lcut函数对文本txt进行分词,得到一个包含所有单词的列表,赋值给变量words  
words  = jieba.lcut(txt)  
  
# 定义一个空字典counts,用于统计单词出现的次数  
counts = {}  
  
# 遍历单词列表words  
for word in words:  
    # 如果单词的长度为1(即单个字符),则跳过不统计  
    if len(word) == 1:  
        continue  
    else:  
        # 否则,如果单词已经在counts字典中,则增加其计数;否则,设置其计数为1  
        counts[word] = counts.get(word,0) + 1  
  
# 遍历excludes字典(当前为空),从counts字典中删除这些不需要统计的单词  
# 注意:因为excludes为空,所以此循环实际上不会执行任何操作  
for word in excludes:  
    del(counts[word])  
  
# 将counts字典的键值对转换为列表items  
items = list(counts.items())  
  
# 对items列表进行排序,按照单词出现的次数从多到少排序  
items.sort(key=lambda x:x[1], reverse=True)  
  
# 遍历排序后的前15个单词及其计数  
for i in range(15):  
    # 解包items列表中的第i个元素,分别赋值给word和count  
    word, count = items[i]  
    # 使用格式化字符串打印单词及其计数,左对齐单词,右对齐计数  
    print ("{0:<10}{1:>5}".format(word, count))

10.4

# 导入jieba分词库  
import jieba  
  
# 定义一个包含需要排除的单词的集合  
excludes = {"将军", "却说", "荆州", "二人", "不可", "不能", "如此"}  
  
# 打开名为"三国演义.txt"的文件,以只读模式读取内容,并指定编码为utf-8  
txt = open("三国演义.txt", "r", encoding='utf-8').read()  
  
# 使用jieba的lcut函数对文本txt进行分词,得到一个包含所有单词的列表  
words = jieba.lcut(txt)  
  
# 定义一个空字典counts,用于统计单词出现的次数  
counts = {}  
  
# 遍历单词列表words  
for word in words:  
    # 如果单词的长度为1(即单个字符),则跳过不统计  
    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字典中  
    counts[rword] = counts.get(rword, 0) + 1  
  
# 遍历excludes集合,从counts字典中删除这些不需要统计的单词  
for word in excludes:  
    del(counts[word])  
  
# 将counts字典的键值对转换为列表items  
items = list(counts.items())  
  
# 对items列表进行排序,按照单词出现的次数从多到少排序  
items.sort(key=lambda x: x[1], reverse=True)  
  
# 遍历排序后的前5个单词及其计数  
for i in range(5):  
    # 解包items列表中的第i个元素,分别赋值给word和count  
    word, count = items[i]  
    # 使用格式化字符串打印单词及其计数,左对齐单词,右对齐计数  
    print("{0:<10}{1:>5}".format(word, count))

版权声明:
作者:夜阑
链接:http://yelan.xyz/index.php/2024/03/28/python%e7%a8%8b%e5%ba%8f%e8%ae%be%e8%ae%a1%e5%8f%8a%e5%a4%a7%e6%95%b0%e6%8d%ae%e6%8c%96%e6%8e%98-%e7%ac%ac%e4%ba%94%e6%ac%a1%e8%af%be/
来源:夜阑的小站
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>