Python3一些第3方库的使用和介绍

前言

是一些第三方库。包括一些绘图类库比如海龟绘图: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()

图片处理

http://imageio.github.io/

文字处理

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 关键字,使用异步库进行数据抓取,可以大大提高效率。



奖励一下