Python学习第二天

2019-07-23  本文已影响0人  乡村蝙蝠侠

GUI界面安装第三方库

如何获取文件的路径

读取txt文件

当前文件夹 /代表文件夹之间的分割
mode='r' 代表只读的方式
案例:

f=open(file='./threekingdom.txt',mode='r',encoding='UTF-8')
words=f.read()
print(words)
print(type(words))
#关闭流
f.close()
print(len(words))
image.png

即输出txt内容以及类型和字节。

import语句

在开始使用一个模块中的函数之前,必须用import语句导入该模块。
结构格式:
from 模块名 import name1,name2
例如:
from random import randint
等效于
import random
random.randint

如何绘制一个简单的词云

案例:

from wordcloud import WordCloud

#如何绘制一个简单的词云
#1、英文词云
#类
txt='i like python,python is the best project language in the world'
wc=WordCloud().generate(txt)
wc.to_file('python.png')

输出结果:


python.png

绘制三国小说词云

案例:

#@file:绘制三国小说词云.py
#@Software: PyCharm
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')

输出结果:


三国词云.png

常用的排序方法

案例:

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)

输出结果:


image.png

字典排序

首先创建一个字典,如下:
案例:

stu_info = [
    {'name':'zhangsan', 'age':33},
    {'name':'lisi', 'age':8},
    {'name':'wangwu', 'age':66},
    {'name':'tianqi', 'age':17},
]

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 函数名():
#     函数体
def sort_by_age(dict_info):
    return dict_info['age']
#
# 按照年龄进行倒序排序
# key是接受一个函数名  用于指定 按照什么进行排序
#
stu_info.sort(key=sort_by_age,reverse=True)
print('排序后', stu_info)

输出结果:


image.png

*按姓名倒序输出
案例:

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)

输出结果:


image.png

元组按序输出

stu_info = [
    ('zhangsan', 89),
    ('lisi', 7),
    ('wangwu ', 222),
    ('zhaoliu', 44)
]
print(stu_info)
def sort_by_tuple(x):
    return x[1]

stu_info.sort(key=sort_by_tuple)

print('排序后', stu_info)

输出结果:


image.png

交换两个变量

在C语言中交换两个变量需要引入中间变量进行交换,在python中要简单的多。
在C语言中交换两个变量如下所示:
int a=10
int b=100
temp=a
a=b
b=temp
python中交换两个变量代码如下:
案例:

a=10
b=100
a,b=b,a
print('a=',a)
print('b=',b)

输出结果:


image.png

可以看出,C语言中三行代码在Python中只需要一行代码就可以解决。

一次声明多个变量

案例:

c,d,e=100,[90,33],'hehe'
print(c)
print(d)
print(e)

输出结果:


image.png

函数和lambda表达式

案例:

def 函数名():
    print(('haha'))
    pass#站位
#调用
函数名()

输出结果:


image.png

1~num之间的累加和

案例:

def caculate_num(num):
   result=0
   for i in range(num+1):
       result +=i
   return result
   pass
sum_num=caculate_num(100)
print(sum_num)

输出结果:


image.png

函数和方法:没区别
函数是针对于面向过程
方法是面向对象

匿名函数

lambda 参数1 ,参数2。。。。。。。:表达式

pingfang=lambda n:n*n
add=lambda x,y:x+y
print(add(3,4))
print(pingfang(7))

输出结果:


image.png
stu_info = [
    {'name':'zhangsan', 'age':33},
    {'name':'lisi', 'age':8},
    {'name':'wangwu', 'age':66},
    {'name':'tianqi', 'age':17},
]
stu_info.sort(key=lambda x:x['age'])
print('排序后',stu_info)

输出结果:


image.png
stu_info = [
    ('zhangsan', 89),
    ('lisi', 7),
    ('wangwu ', 222),
    ('zhaoliu', 44)
]
stu_info.sort(key=lambda x:x[1])
print('排序后',stu_info)
#或者(输出结果相同)
#stu_info=sorted(stu_info,key=lambda x:x[1])
#print(stu_info)

输出结果:


image.png

.sort()和sorted 的区别

列表推导式

# 生成一个[0,1,......9]
li=[]
for i in range (20):
    li.append(i)
print(li)

输出结果:


image.png
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)

输出结果:


image.png
li=[]
for i in range (20):
    li.append(i)
print(li)
#生成正负随机的列表
from random import randint
li5=[]
for _ in range(10):
    li5.append(randint(-20,20))
print(li5)

输出结果:


image.png
li2=[i for i in range(10)]
print(li2)

输出结果:


image.png
# 使用列表推导式生成li5
from random import randint
li5=[randint(-20,20) for _ in range(10)]
print(li5)

输出结果:


image.png
li=[]
for i in range (20):
    li.append(i)
print(li)
#生成正负随机的列表
# 使用列表推导式生成li5
from random import randint
li5=[randint(-20,20) for _ in range(10)]
print(li5)
#筛选所有大于零的
res_list=[x for x in li5 if x>0]
print(res_list)

输出结果:


image.png

切片(Python中的特色 slice)

案例:

name='abcdefg'
#左闭右开
#获取abc
print(name[0:4])
 #a c e f
print(name[0:8:2])
print(name[::2])
#name
print(name[::])
#name进行反转 gfdecba
print(name[::-1])
#g e c a
print(name[::-2])
#f d b
print(name[-2::-2])
# 起始值终止值 可以省略

输出结果:


image.png

字符串输出

案例:

i=2
grade='十五'
print('这是我们上课的第{}天,我的修炼等级达到了{}级别'.format(i,grade))

输出结果:


image.png

对分析的数据进行可视化展示

bar pie scatter plot
as 还是起别名
名字来源于matlab
案例:

from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘制条形图
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()

输出结果:


image.png image.png

将三国人物出场TOP10输出条形图

import jieba
from wordcloud import WordCloud
#1、读取文件
with open('threekingdom.txt','r',encoding='UTF-8')as f:
    words=f.read()
    word_list=jieba.lcut(words)
    excludes = {"将军", "却说", "丞相", "二人", "不可", "荆州", "不能", "如此", "商议",
                "如何", "主公", "军士", "军马", "左右", "次日", "引兵", "大喜", "天下",
                "东吴", "于是", "今日", "不敢", "魏兵", "陛下", "都督", "人马", "不知",
                '孔明曰', '玄德曰', '刘备', '云长'}
    # print(word_list)
    # print(len(word_list))
    #定义一个字典{‘夏侯渊’:788,‘不来’:56}
    counts={}
    for word in word_list:

    #删除靠前与人名无关的词汇
        if len(word)==1:
            continue
        else:
    #往字典里添加元素
    # count[word]=取出字典中原来的计数+1
    # count[word]=count[word]+1
            counts[word]=counts.get(word,0)+1
    # print(counts)
    counts['孔明']=counts['孔明曰'] + counts['孔明']
    counts['玄德']=counts['玄德曰'] + counts['玄德'] + counts['刘备']
    counts['关公']=counts['关公'] + counts['云长']
    #将counts转化成列表
    for word in excludes:
        del counts[word]
    items=list(counts.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(1):
    #         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('top10.png')

    import  matplotlib.pyplot as plt
    plt.rcParams["font.sans-serif"] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    # print(items)
    print(items[0:10:1])
    dict1=dict(items[0:10:1])
    print(dict1)

    x = ["{}".format(i) for i in dict1.keys()]
    print(x)
    y = [i for i in dict1.values()]
    print(y)
    # 绘制 条形图
    plt.bar(x, y)
    plt.show()

输出结果:


image.png
上一篇下一篇

猜你喜欢

热点阅读