Python3一些第3方库的使用和介绍
撰写时间: 2019-03-29 总共: 6170 字 转载请注明: BY-SA 4.0(除特别声明或转载文章外)
前言
是一些第三方库。包括一些绘图类库比如海龟绘图:turtle;数据可视化:matplotlib;
图片处理:imageio;
数据处理:Numpy;
文字处理:jieba,wordcloud等;
web:BeautifulSoup,flask,django等等
GUI:wxPython等
网络爬虫:Scrapy,Crawley,requests等
绘图类
turtle
库是一个很流行的绘制图像的函数库。
主要是画笔属性:
#画笔宽度
pensize()
#画笔颜色
pencolor(字符串:"red等"|rgb(3元组))
#画笔移动速度
speed(0~10)
行进的方向设置:
#向当前画笔方向移动distance像素长度
forward(distance)//fd()
#向当前画笔相反方向移动distance像素长度
backward(distance)
#顺时针移动degree°
right(degree)
#逆时针移动degree°
left(degree)
#将画笔移动到坐标为x,y的位置
goto(x,y)
画笔状态:
#移动时绘制图形,缺省时也为绘制
pendown()
#提起笔移动,不绘制图形,用于另起一个地方绘制
penup()
#隐藏画笔
hideturtle()
#显示画笔
showturtle()
七段数码管绘制显示当前日期:
#7段数码管时间
import turtle,time
def drawGap():#绘制数码管间隔
turtle.penup()
turtle.fd(5)
def drawLine(draw):#绘制单段数码管,设置draw取真假值,以中线左端为起点
drawGap()
turtle.pendown() if draw else turtle.penup()#如果darw为真,画笔落下,否则不落直接飞过去40px
turtle.fd(40)#行进40px
drawGap()
turtle.right(90)#转向右90度
def drawDigit(digit):#根据数字绘制,0<digit<9
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)#回到起点向左转90度
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup()#为绘制后续数字确定位置
turtle.fd(20)#移动到另一个位置绘制数字
def drawDate(date):#获得要输出的数字
for i in date:
if i=='-':
turtle.penup()
turtle.right(90)
turtle.fd(30)
turtle.write('年',font=("Arial",48,"normal"))
turtle.pencolor("green")
turtle.left(180)
turtle.fd(30)
turtle.right(90)
turtle.fd(70)
elif i=='=':
turtle.penup()
turtle.right(90)
turtle.fd(30)
turtle.write('月',font=("Arial",48,"normal"))
turtle.pencolor("blue")
turtle.left(180)
turtle.fd(30)
turtle.right(90)
turtle.fd(70)
elif i=='+':
turtle.penup()
turtle.right(90)
turtle.fd(30)
turtle.write('日',font=("Arial",48,"normal"))
turtle.left(180)
turtle.fd(30)
turtle.right(90)
turtle.fd(70)
else:
drawDigit(eval(i))#用eval()将数字变为整数
def main():
turtle.setup(1000,350,150,150)
turtle.pencolor('red')
turtle.penup()
turtle.fd(-450)
turtle.pensize(5)
t=time.gmtime()
timeStr=time.strftime("%Y-%m=%d+",t)
drawDate(timeStr)
turtle.hideturtle()
turtle.done()
main()
matplotlib
是一个Python 2D绘图库,可以生成各种硬拷贝格式和跨平台交互式环境的出版物质量数据.更多API看文档。
plot
函数的参数具体如下:
plt.plot(
kind='line',#指定折线图|柱状图|柱状图-横式|..
ax=None,
figsize=None, #指定图像大小
use_index=True, #将索引作为刻度标签
title=None,#图名
grid=None,#显示背景网格等同plt.grid()
legend=False,#显示图例等同plt.legend()
style=None,#指定字符串风格(点线颜色)
logx=False,
logy=False,
loglog=False,
xticks=None,#x轴刻度
yticks=None,#y轴刻度
xlim=None,#x界限
ylim=None,#y界限
rot=None,#旋转刻度
fontsize=None,
colormap=None,#颜色集
table=False,
yerr=None,
xerr=None,
label=None,#图例标签
secondary_y=False,
**kwds
)
数学类
数据表示:采用合适方式用程序表达数据
数据清洗:数据归一化,数据转换,异常值处理
数据统计:数据的概要理解,数量,分布,中位数等
数据可视化:直观展示数据内涵的方式
数据挖掘:从数据分析获得知识,产生数据外的价值
人工智能:数据、语言、图像、视觉等方面深度分析与决策
数据处理:Numpy
, Pandas
, SciPy
,
数据可视化:Matplotlib
, Seaborn
, Mayavi
,
文本处理:PyPDF2
, NLTK
, python-docx
,
机器学习:Scikit-learn
, TensorFlow
, MXNet
,
numpy
支持大量的维度数组和矩阵运算。提供了大量的数学函数库。
使用numpy
简单创建数组包括多维数组:
import numpy as np
arr1 = [1,2,3,4,5]
arr2 = np.array(arr1)
arr3 = np.array([
[1,2,3],
[4,5,6],
[7,8,9],
],int)
# 数组元素个数
print(arr3.size)
# 数组形状
print(arr3.shape)
# 数组维度
print(arr3.ndim)
# 数组元素类型
print(arr3.dtype)
结合matplotlib进行一个霍兰德人格分析的数据可视化:
#霍兰德人格分析
import numpy as np
#数据可视化
#matplotlib 软件包的 pyplot 子模块的 plot() 函数绘制
import matplotlib.pyplot as plt
import matplotlib
#Matplotlib 默认情况不支持中文
#用来正常显示中文标签,不加无法正常显示
plt.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParamsDefault['font.family']='SimHei'
radar_labels = np.array(['研究型(I)','艺术型(A)','社会型(S)',\
'企业型(E)','常规型(C)','现实型(R)'])
#数据值
data = np.array([
[0.40,0.32,0.35,0.30,0.30,0.88],
[0.85,0.35,0.30,0.40,0.40,0.30],
[0.43,0.89,0.30,0.28,0.22,0.30],
[0.30,0.25,0.48,0.85,0.45,0.40],
[0.20,0.38,0.87,0.45,0.32,0.28],
[0.34,0.31,0.38,0.40,0.92,0.28],
])
data_labels = ('艺术家','实验员','工程师','推销员','社会工作者','记事员')
angles = np.linspace(0,2*np.pi,6,endpoint=False)
data = np.concatenate((data,[data[0]]))
angles = np.concatenate((angles,[angles[0]]))
#设置窗口属性
fig = plt.figure(facecolor="white")
#建立网格
plt.subplot(111,polar=True)
#绘制
#指定plot的属性透明度等
plt.plot(angles,data,'o-',linewidth=1,alpha=0.2)
#填充颜色并指定透明度
plt.fill(angles,data,alpha=0.25)
plt.thetagrids(angles*180/np.pi, radar_labels)
plt.figtext(0.52,0.95,'霍兰德人格分析',ha='center',size=20)
#折线的名称和位置
legend = plt.legend(data_labels,loc=(0.94,0.80),labelspacing=0.1)
plt.setp(legend.get_texts(),fontsize='large')
plt.grid(True)
#指定保存的文件路径
plt.savefig(r'C:\Users\霁\Desktop\mytest\mypython\img\holland_radar.jpg')
#显示图像
plt.show()
图片处理
文字处理
jieba
分词和wordcloud
词云生成类库
import jieba
#中文分词
jieba.lcut(s) #精确模式,返回一个列表类型的分词结果
jieba.lcut(s,cut_all=True) #全模式,返回一个列表类型的分词结果,存在冗余
jieba.lcut_for_search(s) #搜索引擎模式,返回一个列表类型的分词结果,存在冗余
jieba.add_word(w) #向分词字典里增加新词w
wordcloud把词云当作一个对象,它可以将文本中词语出现的频率作为一个参数绘制词云,而词云的大小、颜色、形状等都是可以设定的。也有自带的分词但是不是很好所以这里使用jieba来进行分词。
w = wordcloud.WordCloud(
width,
hight,
min_font_size,
max_font_size,
font_step,#词语间隔,默认1
font_path,#词云的字体路径
max_words,#最大单词数量默认200
stop_words,#不显示的单词列表
mask,#指定词云生成的形状图片
background_color#指定背景颜色
)
import wordcloud,jieba
import matplotlib.pyplot as plt
from imageio import imread
#导入要生成图片形状
mymask=imread(r'C:\Users\霁\Desktop\mytest\mypython\mymask.jpg')
#配置词云对象参数
w = wordcloud.WordCloud(
font_path='C:\\Users\霁\\Desktop\\mytest\\mypython\\simsun.ttc',
width=1000,
height=700,
mask=mymask,
background_color='white'
)
#加载词云文本
f = open(
r'C:\Users\霁\Desktop\mytest\mypython\123.txt',
"r",
encoding="utf-8"
)
txt = f.read()
f.close()
#将所有分词列表以空格分隔的长条文本给wordcloud对象
words = " ".join(jieba.lcut(txt))
w.generate(words)
#输出词云文件 (如果不加说明默认的图片大小为400 * 200)
#在matplotlib查看生成的图片
plt.imshow(w)
plt.axis("off")
plt.show()
w.to_file(r"C:\Users\霁\Desktop\mytest\mypython\outfile.jpg")
Web
django
和 Pyramid
以及 Flask
各有所长,django应该是最广泛的了好像。
浏览器 –>http–>WSGI(web服务接口)–> (URLs)–>路由–>功能处理逻辑(文件,数据库)
Beautiful Soup
:HTML XML 解析库
Python-Goose
:提取文章类型web页面的功能库
from flask import Flask
myweb = Flask(__name__)
@myweb.route('/')
def hello_world():
return 'hello,world'
if __name__=='__main__':
myweb.run()
桌面图形化
wxPython
是一个轻量的GUI应用程序构建库
具体再说说。
教程:易百教程
爬虫
Scrapy
:很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)
Crawley
:高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为 JSON、XML 等。
Portia
:可视化爬取网页内容。
newspaper
:提取新闻、文章以及内容分析。
requests
:基于 urllib
编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。
selenium
:自动化测试工具。一个调用浏览器的 driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
aiohttp
:基于 asyncio 实现的 HTTP 框架。异步操作借助于 async/await 关键字,使用异步库进行数据抓取,可以大大提高效率。