主要内容
今天主要是学习如何制作词云,如何提取文档中出场最多的人物名
python如何读取文件
下面是具体实例展示
#读取文件 内置函数open
#file='文件的路径'使用相对路径即可,
#.当前文件夹 /代表文件夹之间的分割
#mode='r' 只读的方式
f = open(file='./threekingdom.txt',mode='r',encoding='UTF-8')
words = f.read()
print(words)
#打印文本
#关闭流
f.close()
print(len(words))
#计算文档字节长度
import的使用
#from 模块名字 import name1,name2...
from random import randint
#等效于
import random
random randint
# import turtle
# from turtle import done
如何绘制词云
首先要学会安装第三方库文件
可以在“terminal”下直接安装,或者进入该网站https://www.lfd.uci.edu/~gohlke/pythonlibs/
选择wordcloud文件下载到本地进行安装
这里需要提醒的是:python中大小写敏感,英文大小写不同起到不同的作用
下面进行词云绘制的具体实例展示:
#词云绘制
from wordcloud import WordCloud
#如何绘制简单词云
#举例英文词云
txt = 'I like python , python is the best project language in the world'
wc = WordCloud().generate(txt)#类
wc.to_file('python.png')
三国小说词云绘制
import jieba
from wordcloud import WordCloud
import imageio
#1.读取小说
#使用with 上下文管理器进行本地文件读取
mask = imageio.imread('china.jpg')
with open('threekingdom.txt','r',encoding='UTF-8') as f:
#与之前方法相比不需要关闭流
words = f.read()
# print(words)
#2.对小说字符串进行分词
words_list = jieba.lcut(words)
print(words_list)
#把返回的分词列表转化成字符串
words_text = ' '.join(words_list)
print(words_text)
#3.使用wordcloud进行绘制
WordCloud(
background_color = 'white',
width = 800,
height = 600,
font_path = 'MSYH.TTC',
mask = mask
).generate(words_text).to_file('三国词云.png')
python的排序
li = []
for i in range(10):
li.append(i)
print(li)
from random import shuffle
shuffle(li)
#第一种排序
print("顺序打乱后",li)
li.sort(reverse=True)
print("排序后列表",li)
- 字典排序
stu_info = [
{'name':'zhangsan', 'age':33},
{'name':'lisi', 'age':8},
{'name':'wangwu', 'age':66},
{'name':'tianqi', 'age':17},
]
print(stu_info)
# def 函数名():
# 函数体
def sort_by_age(dict_info):
return dict_info['age']
#
# 按照年龄进行倒序排序
# key是接受一个函数名 用于指定 按照什么进行排序
#
stu_info.sort(key=sort_by_age,reverse=True)
print('排序后', stu_info)
- 按照名字倒序排列
stu_info = [
{'name':'zhangsan', 'age':33},
{'name':'lisi', 'age':8},
{'name':'wangwu', 'age':66},
{'name':'tianqi', 'age':17},
]
print(stu_info)
def sort_by_name(dict_info):
return dict_info['name']
stu_info.sort(key=sort_by_name,reverse=True)
print('按照名字排序后', stu_info)
python交换和声明变量
具体实例:
#交换两个变量
a = 100
b = 10
a,b = b,a
print('a=',a)
print('b=',b)
#一次声明多个变量
c,d,e = 100,[90,33],'hehe'
print(c)
print(d)
print()
三国出场前十人物名字词云绘制
#1.读取文件
import jieba
from wordcloud import WordCloud
with open('threekingdom.txt','r',encoding='UTF-8') as f:
words = f.read()
print(words)
word_list = jieba.lcut(words)
excluss = {'将军','却说','丞相','二人','孔明曰','刘备','玄德曰','云长'}
#print(len(word_list))
#定义一个字典{'夏侯渊':788,'不来':55}
counts = {}
for word in word_list:
if len(word) ==1:
continue
else:
#往字典里添加元素
# counts[word] = 取出字典中原来计数 + 1
# counts[word] = count[word] + 1
counts[word] = counts.get(word,0) + 1
# print(counts)
counts['孔明'] = counts['孔明曰'] + counts['孔明']
counts['玄德'] = counts['玄德曰'] + counts['玄德'] + counts['刘备']
counts['关公'] = counts['关公'] + counts['云长']
#删除靠前与人名无关的词汇
for word in excluss:
del counts[word]
#将counts转换为列表
items = list(counts.items())
print(items)
def sort_by_count(x):
return x [1]
items.sort(key=sort_by_count,reverse=True)
# print(items)
#显示计数前20的词语
role_list = []
for i in range(10):
#拆包 序列解包
role_name,count = items[i]
print(role_name,count)
#给读代码的人看,下划线代表并没有使用临时变量
for _ in range(count):
role_list.append(role_name)
print(role_list)
text = ' '.join(role_list)
WordCloud(
background_color='white',
width=800,
height=600,
font_path='MSYH.TTC',
collocations=False
).generate(text).to_file('三国人物.png')
pass的站位
def 函数名():
print('haha')
pass #站位 不读取里面的内容
1~num之间的累加和
def caculate_num(num):
result = 0
for i in range(num+1):
result += i
return result
sum_num = caculate_num(100)
print(sum_num)
函数和方法
函数与方法:没区别
函数是针对于面向过程
方法是面向对象
匿名函数
格式:lambda 参数1,参数2,.....:表达式
缺点是不能反复调用
具体实例:
#做平方和加和
pf = lambda n:n*n
add =lambda x,y:x+y
print(pf(7))
print(add(3,4))
sorted和.sort的区别
- .sort()是列表特有的方法,sorted()适用于任何可迭代对象
- .sort()是在原来的列表上进行修改,sorted()是返回一个新的列表
- 调用形式不一样
列表推导式
#生成一个[0,1,2,···,9]
li = []
for i in range(20):
li.append(i)
print(li)
- 筛选出所有的偶数
new_li = []
for i in li:
if i %2 ==0:
new_li.append(i)
print(new_li)
#等价
li3 = [i for i in range(20) if i%2==0]
print(li3)
- 生成正负随机列表
from random import randint
li5 = []
for _ in range(10):
li5.append(randint(-20,20))
print(li5)
- 使用列表推导式生成Li5
li5 = [randint(-20,20) for _ in range(10)]
print(li5)
- 筛选所有大于零的数
res_list = [x for x in li5 if x > 0]
print(res_list)
- 语法
[表达式for 临时变量 in可迭代对象 筛选条件]
li2 = [i for i in range(10)]
print(li2)
切片 python中的特色
具体案例如下:
name = 'abcdefg'
print(name[0:3])#左闭右开 获取abc
#获取a c e g
print(name[0:8:2])#起始值终止值可以省略
print(name[::2])
#name进行反转 gfedcba
print(name[::-1])
#获取 f d b
print(name[-2::-2])
字符串输出
i = 3
grade = '十五'
print('这是我们上课的第{}天,我的修炼等级为{}级别'.format(i))
对分析的数据进行可视化展示
from matplotlib import pyplot as plt
#绘制条形图
import string
print(string.ascii_uppercase)
x = ['厂商{}'.format(i) for i in string.ascii_uppercase[:5]]
print(x)
from random import randint
y = [randint(200,300) for _ in range(5)]
print(y)
plt.bar(x,y)
plt.show()