conda: 一个工具,用于包管理和环境管理,其中:包管理与pip类似,管理Python第三方库环境管理能够允许用户使用不同版本Python,并能灵活切换
anaconda:一个集合,包括conda、某版本Python、一批第三方库等
conda将工具、第三方库、Python版本、conda都当作包,同等对待
3.1413, 'pi', 3.1404, [3.1401, 3.1349], '3.1376'
3.1413, 'pi', 3.1404, [3.1401, 3.1349], '3.1376'
二维数据:由多个一维数据构成,是一维数据的组合形式
多维数据:由一维或二维数据在新维度上扩展形成
高维数据:仅利用最基本的二元关系展示数据间的复杂结构 键值对
dict = {
“firstName” : “Tian”,
“lastName” : “Song” ,
}
NumPy的数组对象:ndarray
NumPy是一个开源的Python科学计算基础库,是SciPy、Pandas等数据处理或科学计算库的基础。整合C/C++/Fortran代码的工具(运算速度快),线性代数、傅里叶变换、随机数生成等功能。
ndarray是一个多维数组对象,由两部分构成:
• 实际的数据
• 描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始
x = np.array(list/tuple)
x = np.array(list/tuple, dtype=np.float32)
当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型
(2)使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等
ndarray数组向列表的转换:ls = a.tolist()
注意:a[:,1:3,:],表示第一个维度不关心,第二个维度表示去取最外层每个元素中第一到第三不包括第三维度,第三个维度应该是取列,这里对列不关心
a[:,:, : :2]表示每个元素中每个维度都取到,列取从0开始,步长为2的全部维度
• frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
• array : 存入文件的数组
• fmt : 写入文件的格式,例如:%d %.2f %.18e
• delimiter : 分割字符串,默认是任何空格
用loadtxt将csv中的文件再读入的一个numpy的数组
• frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
• dtype : 数据类型,可选
• delimiter : 分割字符串,默认是任何空格
• unpack : 如果True,读入属性将分别写入不同变量
• frame : 文件、字符串
• sep : 数据分割字符串,如果是空串,写入文件为二进制
• format : 写入数据的格式
注意:如果没有写 sep,最后就是以二进制形式输出,二进制比别的字符更节省空间
从文本中还原出数据:p.fromfile(frame, dtype=float, count=‐1, sep=’’)
• frame : 文件、字符串
• dtype : 读取的数据类型
• count : 读入元素个数,‐1表示读入整个文件
• sep : 数据分割字符串,如果是空串,写入文件为二进制
- np.save(fname, array) 或 np.savez(fname, array)
• fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
• array : 数组变量
- np.load(fname)
• fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
这里的convert(‘L’)表示将a变为灰度图
图中的97行是必须要有的,把把数组转换为图像的类型
图像收回效果实例分析:对图像进行灰度化的基础上由立体效果和明暗效果堆叠而成的。灰度代表明暗变化,梯度值表示的是灰度的变化率。
手绘效果的几个特征:
• 黑白灰色
• 边界线条较重
• 相同或相近色彩趋于白色
• 略有光源效果
注意:立体效果通过修改立体深度值来体现
from PIL import Image
import numpy as np
a = np.asarray(Image.open('./beijing.jpg').convert('L')).astype('float')
depth = 10. # 构建虚拟深度值,范围(0-100)
grad = np.gradient(a) #取图像灰度的梯度值
grad_x, grad_y = grad #分别取横纵图像梯度值
grad_x = grad_x*depth/100. # 对深度值进行归一化
grad_y = grad_y*depth/100.
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
vec_el = np.pi/2.2 # 光源的俯视角度,弧度值
vec_az = np.pi/4. # 光源的方位角度,弧度值
#np.cos(vec_el)为单位光线在地平面上的投影长度
#dx, dy, dz是光源对x/y/z三方向的影响程度
dx = np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响
dz = np.sin(vec_el) #光源对z 轴的影响
b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化,梯度与光源相互作用,将梯度转化为灰度
b = b.clip(0,255)# 为避免数据越界,将生成的灰度值裁剪至0‐255区间
im = Image.fromarray(b.astype('uint8')) #重构图像
im.save('./beijingHD.jpg')
import matplotlib.pyplot as plt
-注意:plt.axis([-1, 10, 0, 6])表示横坐标从-1到10,纵坐标从0到6
plt.plot(x, y, format_string, **kwargs)
∙ x : X轴数据,列表或数组,可选
∙ y : Y轴数据,列表或数组
∙ format_string: 控制曲线的格式字符串,可选,由颜色字符、风格字符和标记字符组成
∙ **kwargs : 第二组或更多(x,y,format_string)
# 当绘制多条曲线时,各条曲线的x不能省略
plt.plot(x, y, format_string, **kwargs)
∙ **kwargs : 第二组或更多(x,y,format_string)
color : 控制颜色, color=‘green’
linestyle : 线条风格, linestyle=‘dashed’
marker : 标记风格, marker=‘o’
markerfacecolor: 标记颜色, markerfacecolor=‘blue’
markersize : 标记尺寸, markersize=20
pyplot并不默认支持中文显示,需要rcParams修改字体实现
在有中文输出的地方,增加一个属性:fontproperties和fontsize就可以了
-解释:其中第一个参数GridApec是一个元组,代表把网格分成一个3*3的区域;CurSpec表示当前选中的区域为第一行第0列;colspan表示从选定的(1,0)开始在列的方向上延伸两个长度,也就是选定长度和选定长度右边一列;向行的地方延伸用rowspan
import matplotlib.gridspec as gridspec
gs= gridspec.GridSpec(3,3) # 表明在一个区域中生成一个网格,这个网格是3*3阵列
ax1 = plt.subplot(gs[0, : ]) # 0表示第0行,后面表示覆盖所有列
ax2 = plt.subplot(gs[l, : -1]) # 行为第一行,列为0:-1不包括-1
ax3 = plt.subplot(gs[l:, -1])
ax4 = plt.subplot(gs[2, 0))
axS = plt.subplot(gs[2, 1])
import matplotlib.pyplot as plt
# labels给出了每个块对应的标签
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
# size约束了每一块的尺寸
sizes = [15, 30, 45, 10]
# explode指出了那一块要突出来
explode = (0, 0.1, 0, 0)
# autopct表示中心显示百分数的方式,shadow是用来决定饼图是个二维的还是有阴影的
# startangle饼图起始的角度值
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=False, startangle=90)
plt.axis('equal') # 表示绘图时x,y方向的尺寸应该是相等的
plt.show()
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
mu, sigma= 100, 20 #均值和标准差
a= np.random.normal(mu, sigma, size=100) # 生成指定的100个随机数
# hist的第二个参数bin表示直方的个数
# normed=1表示将直方图中每一个值出现的个数归一化为出现的概率
# normed=0显示每一个值出现的个数
plt.hist(a, 20, normed=1, histtype='stepfilled', facecolor='b',alpha=0.75)
plt.title ('Histogram')
plt.show()
#面向对象绘制极坐标图:
import numpy as np
import matplotlib.pyplot as plt
N = 20 #数据个数
theta = np.linspace(0.0,2*np.pi,N,endpoint=False)#0-360度,按个数等分N个不同的角度
radii = 10*np.random.rand(N) # 用rand函数生成每个角度对应的值
width = np.pi/4*np.random.rand(N)
ax = plt.subplot(111,projection="polar")#一个绘图区域,绘制极坐标
#绘制起始位置,中心点向边缘绘制的长度,每个绘图区域面积
bars = ax.bar(theta,radii,width,bottom=0.0)
#修改每个绘图区的颜色,没有多讲解
for r,bar in zip(radii,bars):
bar.set_facecolor(plt.cm.viridis(r/10.))
bar.set_alpha(0.5)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
a = 100*np.random.randn(33).reshape(3,11)
# 面向对象的写法
fig, ax = plt.subplots() # 将plt.subplots()赋值给对象,此时为空说明是1*1
colors = ["#99cc01","#ffff01","#0000fe","#a6a6a6","#d91021","#fff161","#0d8ecf"
,"#fa4d3d","#d2d2d2","#ffde45","#9b59b6"]
#分别设置X轴值,Y轴值,以及第三个参数值大小来显示气泡大小
ax.scatter(a[0,:],a[1,:],s=100*a[2,:],color=colors,alpha=0.6)
#ax.plot(10*np.random.randn(100),10*np.random.randn(100),"o"),x和y轴各生成100个值
ax.set_title("随机气泡图",fontproperties = "simHei",fontsize = 16)
ax.set_xlabel("随机X值",fontproperties = "simHei",fontsize = 14)
ax.set_ylabel("随机y值",fontproperties = "simHei",fontsize = 14)
ax.grid(True)
fig.tight_layout()
plt.show()
引力波:物理学中,引力波是因为时空弯曲对外以辐射形式传播的能量
爱因斯坦基于广义相对论预言了引力波的存在
2015年9月14日,LIGO合作组宣布探测到首个引力波信号。 2016年6月16日,LIGO合作组宣布2015年12月26日03:38:53(UTC),两台不同位置的引力波探测器同时探测到了一个引力波信号。
Pandas是Python第三方库,提供高性能易用数据类型和分析工具
import pandas as pd
Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用
两个数据类型:Series, DataFrame
Series:相对于一个以为数据类型
DataFrame:相对于二维到多维的数据类型
基于上述数据类型的各类操作:基本操作、运算操作、特征类操作、关联类操作
Series类型由一组数据及与之相关的数据索引组成
• Python字典,键值对中的“键”是索引,index从字典中进行选择操作
• ndarray,索引和数据都可以通过ndarray类型创建
• 其他函数,range()函数等
b的索引值类型就行index类型
Series类型的操作类似ndarray类型,因为series是基于ndarry设计的:
• 索引方法相同,采用[]
• NumPy中运算和操作可用于Series类型
• 自动索引和自定义索引并存,但是两套索引不能混用
• 可以通过自定义索引的列表进行切片
• 可以通过自动索引进行切片,如果存在自定义索引,则一同被切片
• series本身是索引加值的一种类型,对它的切片和运算全部都是生成series类型,也就是说有相关的值和值对应的索引,如果只选择其中的一个值如b[3],根据索引返回一个值,这时候就只返回值,没有索引。
• a+b索引值相同的进行运算,不相同的就不进行运算,并且变为NaN这叫对齐。
DataFrame类型可以由如下类型创建:
• 二维ndarray对象
• 由一维ndarray、列表、字典、元组或Series构成的字典
• Series类型
• 其他的DataFrame类型
注:由字典创建时字典的key会作为列索引。
DataFrame是二维带“标签”数组,基本操作类似Series,依据行列索引。
重新索引: .reindex (index=None, columns=None, …) 能够改变或重排Series和DataFrame索引
类型: Series和DataFrame的索引是Index类型,Index对象是不可修改类型
通过操作索引可以操作DataFrame的中间数据值
删除指定索引对象:.drop()能够删除Series和DataFrame指定行或列索引
-算术运算根据行列索引,只有索引值相同的位置行和列才进行运算,补齐后运算,运算默认产生浮点数
-补齐时缺项填充NaN (空值)
-二维和一维、一维和零维间为广播运算
-采用+ ‐ * /符号进行的二元运算产生新的对象
比较运算只能比较相同索引的元素,不进行补齐
二维和一维、一维和零维间为广播运算
采用> < >= <= == !=等符号进行的二元运算产生布尔对象
注:同维度运算,尺寸一致;不同维度,广播运算,默认在1轴
Series = 索引 + 一维数据
DataFrame = 行列索引 + 二维数据
理解数据类型与索引的关系,操作索引即操作数据
.sort_index(axis=0, ascending=True) 在指定轴上根据索引进行排序,默认升序
.sort_values() 在指定轴上根据数值进行排序,默认升序
-强调一句:pandas库对索引的操作就是对数据的操作
.sort_values() 方法在指定轴上根据数值进行排序,默认升序
Series.sort_values(axis=0, ascending=True)
DataFrame.sort_values(by, axis=0, ascending=True)
by:axis轴上的某个索引或索引列表
适用于Series和DataFrame类型:
适用于Series和DataFrame类型,滚动计算(窗口计算):
-456行代码中由于是在0轴方向以两个元素为单位进行运算,c对应这一行往上没有相邻元素,所以自动补NaN,NaN加任意数还是NaN