代码改变世界

复合数据类型,英文词频统计

2019-03-14 13:03  CMis180kg  阅读(231)  评论(0编辑  收藏  举报

作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2696

1.列表,元组,字典,集合分别如何增删改查及遍历。

(1)列表

#列表list

list=["语文","数学","英语","生物","化学"];
print("列表:",list);

list.append("物理");
print("添加物理:",list);
list.insert(2,"地理");
print("添加地理,索引值为2(插入到第三个位置):",list)

list.pop();
print("删除最后一个值:",list);
list.pop(2);
print("删除第三个值:",list)

list[0]="历史";
print("修改第一个值:",list);

print("查找第五个值:",list[1]);

#遍历
print("遍历list:");
for l in list:
    print("\t",l);

执行效果图如下图所示:

 

(2)元组

tup=('语文','数学','英语',0)
tup2=('CM',)
tup3=tup+tup2
print("连接/增加元素 :{}".format(tup3))

#访问元素
tup=('语文','数学','英语',0)
print("访问元素 :tup[2]={},tup[0:1]={}".format(tup3[2],tup[0:2]))

#删除元素
tup=('语文','数学','英语',0)
print("删除元组")
del tup

#遍历元素
tup=('语文','数学','英语',0)
print("遍历元组:")
for t in tup:
    print(t)

执行效果如下图所示:

 

(3)字典

# 创建字典
textDict = {'张三':'80','李四':'90','王五':'95'}
print(textDict)

# 增加
textDict['赵六']='100'
print(textDict)

# 修改
textDict['张三']='100'
print(textDict)

# 删除
del textDict['张三']
print(textDict)

# 查找
print(textDict['李四'])

# 遍历
for s in textDict:
    print( "%s : %s"%(s,textDict[s]))

执行效果如下图所示:

 

(4)集合

set=set(["语文","数学","英语","化学","地理"]);
print("集合:",set);

set.add("语文");
print("增加‘语文’(无法增加,set中午重复值):",set);
set.add("生物");
print("增加‘生物’:",set);

if "英语" in set:
    set.remove("英语");
print("删除‘英语’:",set); set.pop();
print("删除一个值:",set);

#遍历
print("遍历set:")
for s in set: print("\t",s);

执行效果如下图所示:

 

2.总结列表,元组,字典,集合的联系与区别。参考以下几个方面:

  • 括号
  • 有序无序
  • 可变不可变
  • 重复不可重复
  • 存储与查找方式

列表(list):列表是一组有序项目的数字结构,列表的项目应该放在方括号[ ]中,列表是可以被改变和可重复的;按照索引的方式查找通过偏移存储并且元素可以任意类型存在。

元组(tuple):元组与列表十分相似,可重复也是通过偏移的方式进行存储,不过元组是不可变的即是你是不能对元组中的元素进行修改,而且用的是();元组的元素是固定的长度、异构,也是任意嵌套。

字典(dict):字典使用的是{},字典是无序的,但是可变可重复;使用键-值(key-value)进行存储,查找速度快;字典的key是不能变的,list不能作为key,字符串、元祖、整数等都可以。

集合(set):无序不可变,使用([ ]),与字典类似,但只包含键,而没有对应的值;元素可以是列表、元组、字典中的任意一个或多个。

  列表(list) 元组(tuple) 集合(set) 字典(dict)
括号 [ ] () ([]) {}
有无序
可不可变 可变 不可变 可变 可变
是否重复
查找方式 索引 索引 键值

 

3.词频统计

  • 1.下载一长篇小说,存成utf-8编码的文本文件 file

    2.通过文件读取字符串 str

    3.对文本进行预处理

    4.分解提取单词 list

    5.单词计数字典 set , dict

    6.按词频排序 list.sort(key=lambda),turple

    7.排除语法型词汇,代词、冠词、连词等无语义词

    • 自定义停用词表
    • 或用stops.txt

  8.输出TOP(20)

  • 9.可视化:词云

代码如下:

fo = open(r'C:\Users\Lenovo\PycharmProjects\cm\Jane Eyre.txt', encoding='utf-8-sig')
theLittlePrinceTxt = fo.read()
txt = theLittlePrinceTxt.lower()
fo.close()
sep = '''  ,./:?/! '\n  " [] ()  ~ '''
stops = {'ours', 'over', 'once', 'having', 'against', 'don', 'has', 'but', 'wouldn', 'with', 'other', 'doesn', 'itself', 'aren', 'when',}
for s in sep:
    txt = txt.replace(s, " ")
allWord = txt.split()
mset = set(allWord)  # 去掉重复的单词,将文本转换为集合
mset = mset - stops  # 去除停用词
mdict = {}  # 定义字典,作用输出
for m in mset:
    mdict[m] = allWord.count(m)  # 统计每个字典的key的频数
mlist = list(mdict.items())  # 字典转换成列表
mlist.sort(key=lambda x: x[1], reverse=True)  # 列表排序

#输出数目前20的词汇
print(mlist[0:10])
print(mlist[10:20])

# 排序好的单词列表word保存成csv文件
import pandas as pd
pd.DataFrame(data=word).to_csv('Harry Potter.csv',encoding='utf-8')

 

执行结果如下图所示:

 

词云可视化如下图所示: