这两门课挺不错,入门挺好
本文主要包含了numpy、matploitlib、pandas、requests、beautiful soup、re库的简单入门笔记
用字典表示或数据表示格式(json,xml,yaml)
numpy的引用import numpy as np
ndarray应该由同质的对象组成
np.array(列表或元组,dtype=自己指定的数据类型,如果不指定,自动匹配)
从文件中读取特定格式
切片:a[起始:终止:步长];多维数组可用a[::,1::2,3:5:1]
其实是对数组的每一个值进行运算,相关函数
np.rint(x)对数组各元素四舍五入
np.modf(x)将数组各元素的小数和整数部分以两个独立的数组形式返回
数组之间也可用加减乘除等,数数组元素与对应另一个数组元素之间的运算。还可使用比较符,产生一个相同形式的布尔类型的数组
csv只能读取存取一维二维数组
将数据保存为csv文件:np.savetxt(frame,array,fmt=‘%.18e‘,delimiter=None)
trame:文件,字符串或产生器
array:存入文件的数组
fmt:写入文件的格式
delimiter:分隔字符串,默认为任何空格
读入csv文件:np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=Falase)
dtype:数据类型
unpack:默认读入一个数组,如果为true,读入属性分别写入不同变量
1、存入文件:数组.tofile(frame,sep=‘‘,format)
保存的为一个没有维度的文件
sep指定分割符如果不指定分割符,将保存为二进制文件
format表示写入数据的格式
2、读取文件:数组.fromfile(frame,dtype,count=-1,sep=‘‘)
count默认为-1即读入整个文件,也可以指定读入文件的个数
3、numpy自定义的文件存取:
np.save(fname,array)或np.savez(fname,array)
np.load(fname)
rand(1,2,3)生成元素是0到1之间的浮点数的3,4,5维度的数组
randn()与上相似,元素为符合正态分布的数
randint(1,4,shape)生成元素为1到4之间的整数,且形式为shape的数组
seed(s)s为给定种子值
shuffle(a)将数组a的最外维度的第一个轴进行随机排列,会改变原本数组
permutation(a)与上相同,不改变原数组
choice(a,size,replace,p)从a数组中选取元素,形成size形状的数组,replace表示为是否可以重复选取,默认为ture,p为每个元素选取的概率,默认为等概率
uniform(low,high,size)产生具有均匀分布的数组,low起始值,high结束值,size形状
normal(loc,scale,size)产生正态分布的数组,Loc均值,scale标准差,size形状
poisson(lam,size)产生具有泊松分布的数组,lam随机事件发生率
sum(a,axis=None)根据给定轴计算数组a相关元素之和
mean(a,axis=NOne)求期望
average(a,axis=None,weights=None)加权平均
std(a,axis=None)标准差
var(a,axis=None)方差
min(a)最小值
max(a)最大值
argmin(a) argmax(a)数组a降1维后的下标
unravel_index(index,shape)一维下标转化为shape形状的多维下标
ptp(a)最大最小值差
median(a)中位数
np.gradient(f)计算数组f中元素的梯度
from PIL import Image
import numpy as np
'''图像手绘化
灰度变化模拟人眼视觉明暗效果,梯度是灰度变化率
通过改变梯度值,间接改变图像的明暗
通过虚拟深度值增加3D效果
'''
im=np.array(Image.open('C:/Users/Desktop/1.jpg').convert('L')).astype('float')
depth=20. #虚拟深度值范围为0到100
grad=np.gradient(im) #提取梯度值
grad_x,grad_y=grad
#根据深度添加对梯度值的影响因素,除以100为归一化
grad_x=grad_x*depth/100
grad_y=grad_y*depth/100
#虚拟光源效果
el=np.pi/2.2#俯视角
az=np.pi/4.#方位角
dx=np.cos(el)*np.cos(az)#光源对x方向影响
dy=np.cos(el)*np.sin(az)#y
dz=np.sin(el)#z
#梯度归一化
A=np.sqrt(grad_x**2+grad_y**2+1.)#构造x和y轴梯度的三维归一化单位坐标系
uni_x=grad_x/A#各个面的单位法向量
uni_y=grad_y/A
uni_z=1./A
b=255*(dx*uni_x+dy*uni_y+dz*uni_z)#梯度和光源相互作用,将梯度转化为灰度
b=b.clip(0,255)#避免越界
im=Image.fromarray(b.astype('uint8'))
im.save('C:/Users/Desktop/2.jpg')
matplotlib.pylot是绘制各类可视化图形的子库
引入import matplotlib.pylot as plt
import matplotlib.pyplot as plt
plt.subplot(2,3,4)
plt.plot([1,4,7,2,8],[0,3,2,6,5])
plt.xlabel("number")
plt.ylabel('grade')
plt.axis([0,10,0,9])
plt.show()
plt.savefig('C:/Users/Guoyang/Desktop/t',dpi=600)
subplot将区域分为2行3列,在第四个区域显示
plot(x,y,format_string,kwargs)
format_string包含线条颜色,线条形式,值点的样式的控制,如‘bo-‘值画的线为蓝色实线,值点为o的形状,kwargs指一个图可以包含其它多条线。还可通过一些参数值进行控制
plot一个参数时作为y轴,x轴为对应序号。两个参数时为xy轴,xlable可为x轴设置轴名称
axis设置轴的x,y起始和终止坐标
savefig保存文件dpi设置保存图像的质量
在有中文的地方增加frontproperties如plt.ylabel(‘成绩‘,frontproperties=‘字体‘)
xlabel
ylabel
title对整体加文本
text(2,1,‘文本‘)在任意位置加文本,在x轴为2,y轴为1的地方显示文本
annotate(s,xy=,xytext=,arrowprops=dict)增加带箭头的注解,s为注解,xy为箭头位置,xytext为注解位置,arrowprops为表示箭头风格,需传入dict字典类型
import matplotlib.gridspec as gridspec#引入该类
gs=gridspec.GridSpec(3,3)#将区域分成3行三列
ax1=plt.subplot(gs[1,:1])#取第2行,列至第2列
ax2=plt.subplot(gs[1:,2])#取第2行至所有,第三列
共有16种
plt.pie()
lables='dog','cat','pig','bird'#每一块的名字
sizes=[15,30,45,10]#每一块占的大小
explode=(0,0.1,0,0)#是否突出,突出多少
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=90)
#autopct数字显示形式,shadow带不带阴影,startangle饼图起始显示角度
plt.axis('equal')#将饼图变为正圆形
plt.hist()
plt.hist(a,10,normed=1,histtype='stepfilled',facecolor='b',alpha='0.75')
#a为一个数组,10为bin参数即将a中最小值和最大值之间划分10个区域,normed为1则纵坐标为每个区域比例为小数,为0则纵坐标显示每个区域值的个数,histtype为条形形状,facecolor为颜色,alpha为透明度
ax=plt.subplot(111,projection='polar')
#可以使用如下绘制
bars=ax.bar(left,height,width)#left即从哪开始,height即极径有多高,width即有多宽
#也可以使用如下
ax.plot(theta,r)#theta角度,r极径
fig,ax=plt.subplots()
ax.plot(x,y,'o')#x,y点的横纵坐标,'o'点的形状
提供两种数据类型Series(一维),DataFrame(二维多维)
import pandas as pd
由数据和相关的索引组成
index指定标签的值,如果没有,会自动生成
从range函数等创建
自动对齐问题:运算时按相同索引自动对齐
二维带标签的数组
共用相同索引的一组列,常用2维:0轴(index),1轴(column)
一维ndarray字典创建 字典{a:Series()},键名为column,键值中的ndex为DataFrame的index,键值中的值为值。字典{a:列表}也可以。
.drop()删除指定行和列索引,默认为0轴,使用参数axis=1操作1轴
比较运算,运算结果为bool,在同维度需要大小相同,不进行补齐,不同维度广播运算
NaN统一放到末尾
.sort_index(axis=0,ascending=True)根据索引进行排序,默认升序
.sort_value(axis=0,ascending=True)在DataFrame中还增加一个参数by,可以通过索引指定哪一行那一列排序
基本的求平均和等如numpy中sum mean等
Series特有的:argmin argmax 最大最小值自动索引的位置idxmin idxmax最大最小值自定义索引的位置
describe()对0轴进行所有各种统计,返回Series或DataFrame对象
.cumsum() .cumprod() .summax() .cummin()计算前1、2、n个数的和积等
.rolling(w).sum() .rolling(w).mean()等计算相邻w个元素的和,平均等
.cov()计算协方差
.corr()计算相关系数,如pearson等 b.corr(a)计算b与a的
key={'id':3}
r=requests.request('get','http://www.baidu.com',params=key)
#r.url=http://www.baidu.com?id=3
key={'user-agent':'chrome'}
r=requests.request('get','http://www.baidu.com',headers=key)
fs={'file':open(文件)}
r=requests.request('POST','http://www.baidu.com',files=fs)
cert本地ssl证书路径
r=requests.get(url,params=None,**kwargs)url为链接,params为url的额外参数,kwargs为其它额外控制参数。r.status_code返回请求状态,r.text返回对应页面内容,r.encoding从header中猜测的内容编码,r.apparent_encoding从内容分析的编码方式,r.content内容的二进制形式,r.raise_for_status()判断是否为200,如果不是,引发异常
requests.head().post() .put() .patch() .delete()等,与http的方法一一对应
from bs4 import BeautifulSoup
soup=BeautifulSoup(内容,解释器)
解释器有html.parser,lxml(需要安装lxml库),xml(需要安装lxml库),html5lib(需要安装html5lib库)
prettify()使相关内容更好显示,便于阅读
<p class="abc">123</p>
soup.p.string返回p标签包含的内容,即为123
.descendants子孙节点的迭代类型
for child in soup.body.children:
print(child)
string查找尖括号包围的内容
#CrawUnivRankingA.py
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def fillUnivList(ulist, html):
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):
tds = tr('td')
ulist.append([tds[0].string, tds[1].string, tds[3].string])
def printUnivList(ulist, num):
print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
for i in range(num):
u=ulist[i]
print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
def main():
uinfo = []
url = 'https://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
html = getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 20) # 20 univs
main()
[\u4e00-\u9fa5]匹配中文字符
rst=re.search(正则式,字符串)
面向对象
pat=re.compile(正则式)
rst=pat.serch(字符串)
re默认采用贪婪匹配,如果要使用最小匹配,可在*,+,?,{m,n}后加?
re.sub(pattern,repl,string,count,flags=0)将匹配的串替换为repl指定的串,count为最大匹配次数
原文:https://www.cnblogs.com/Qi-Lin/p/12178265.html