numpy
将数组a中大于30的值替换为30,小于10的值替换为10
- a = np.random.uniform(1, 50, 20)
import numpy as np
np.set_printoptions(precision=2)
np.random.seed(100)
a = np.random.uniform(1, 50, 20)
print(a)
b = np.clip(a, a_min=10, a_max=30)
print(b)
对于给定的一维数组,计算窗口大小为3的移动平均值
- z = np.random.randint(10, size=10)
import numpy as np
np.random.seed(100)
z = np.random.randint(10, size=10)
print(z)
def MovingAverage(arr, n=3):
a = np.cumsum(arr)
a[n:] = a[n:] - a[:-n]
return a[n - 1:] / n
r = MovingAverage(z, 3)
print(np.around(r, 2))
对一个5x5的随机矩阵做归一化
- z = np.random.randint(10, size=10)
import numpy as np
np.random.seed(100)
z = np.random.randint(10, size=10)
print(z)
def MovingAverage(arr, n=3):
a = np.cumsum(arr)
a[n:] = a[n:] - a[:-n]
return a[n - 1:] / n
r = MovingAverage(z, 3)
print(np.around(r, 2))
对一个5x5的随机矩阵做归一化
-Z = np.random.random((5,5))
Z = np.random.random((5,5)) Zmax, Zmin = Z.max(), Z.min() Z = (Z - Zmin)/(Zmax - Zmin) print(Z)
用五种不同的方法去提取一个随机数组的整数部分
- Z = np.random.uniform(0,10,10)
Z = np.random.uniform(0,10,10)
print (Z - Z%1)
print (np.floor(Z))
print (np.ceil(Z)-1)
print (Z.astype(int))
print (np.trunc(Z))
考虑一维数组Z,构建一个二维数组,其第一行为(Z [0],Z [1],Z [2]),随后的每一行都移位1(最后一行应为(Z [ -3],Z [-2],Z [-1])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]-------->
p.arange(10).itemsize
from numpy.lib import stride_tricks
def rolling(a, window):
shape = (a.size - window + 1, window)
strides = (a.itemsize, a.itemsize)
return stride_tricks.as_strided(a, shape=shape, strides=strides)
Z = rolling(np.arange(10), 3)
print (Z)
考虑两组点集P0和P1去描述一组线(二维)和一个点p,如何计算点p到每一条线 i (P0[i],P1[i])的距离?
- P0 = np.random.uniform(-10,10,(10,2)) P1 = np.random.uniform(-10,10,(10,2)) p = np.random.uniform(-10,10,( 1,2))
import numpy as np
def distance(P0,P1,p):
A=-1/(P1[:,0]-P0[:,0])
B=1/(P1[:,1]-P0[:,1])
C=P0[:,0]/(P1[:,0]-P0[:,0])-P0[:,1]/(P1[:,1]-P0[:,1])
return np.abs(A*p[:,0]+B*p[:,1]+C)/np.sqrt(A**2+B**2)
P0 = np.random.uniform(-10,10,(10,2))
P1 = np.random.uniform(-10,10,(10,2))
p = np.random.uniform(-10,10,( 1,2))
print (distance(P0, P1, p))
画正弦函数和余弦函数, x = np.arange(0, 3 * np.pi, 0.1)?
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(0, 3*np.pi, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1)
plt.plot(x, y2)
减去矩阵每一行的平均值 ?
X = np.random.rand(5, 10)
Y = X - X.mean(axis=1, keepdims=True)
Y = X - X.mean(axis=1).reshape(-1, 1)
print(Y)
获取5到10 之间的所有元素。
- a = np.array([2, 6, 1, 9, 10, 3, 27])
import numpy as np
a = np.array([2, 6, 1, 9, 10, 3, 27])
mask = np.logical_and(np.greater_equal(a, 5), np.less_equal(a, 10))
x = np.where(mask)
print(a[x])
对于两个随机数组A和B,检查他们是否相等
- A = np.random.randint(0,2,5) B = np.random.randint(0,2,5)
A = np.random.randint(0,2,5)
B = np.random.randint(0,2,5)
equal = np.allclose(A,B)
print(equal)
何对布尔值取反,或者原位(in-place)改变浮点数的符号(sign)?
Z = np.array([0,1])
print(Z)
np.logical_not(Z, out=Z)
Z = np.array([0.2,1.15])
print(Z)
np.negative(Z, out=Z)
找出数组中与给定值最接近的数
import numpy as np from matplotlib import pyplot as plt x = np.arange(0, 3*np.pi, 0.1) y1 = np.sin(x) y2 = np.cos(x) plt.plot(x, y1) plt.plot(x, y2)
减去矩阵每一行的平均值 ?
X = np.random.rand(5, 10)
Y = X - X.mean(axis=1, keepdims=True)
Y = X - X.mean(axis=1).reshape(-1, 1)
print(Y)
获取5到10 之间的所有元素。
- a = np.array([2, 6, 1, 9, 10, 3, 27])
import numpy as np
a = np.array([2, 6, 1, 9, 10, 3, 27])
mask = np.logical_and(np.greater_equal(a, 5), np.less_equal(a, 10))
x = np.where(mask)
print(a[x])
对于两个随机数组A和B,检查他们是否相等
- A = np.random.randint(0,2,5) B = np.random.randint(0,2,5)
A = np.random.randint(0,2,5)
B = np.random.randint(0,2,5)
equal = np.allclose(A,B)
print(equal)
何对布尔值取反,或者原位(in-place)改变浮点数的符号(sign)?
Z = np.array([0,1])
print(Z)
np.logical_not(Z, out=Z)
Z = np.array([0.2,1.15])
print(Z)
np.negative(Z, out=Z)
找出数组中与给定值最接近的数
- a = np.array([2, 6, 1, 9, 10, 3, 27])
import numpy as np a = np.array([2, 6, 1, 9, 10, 3, 27]) mask = np.logical_and(np.greater_equal(a, 5), np.less_equal(a, 10)) x = np.where(mask) print(a[x])
对于两个随机数组A和B,检查他们是否相等
- A = np.random.randint(0,2,5) B = np.random.randint(0,2,5)
A = np.random.randint(0,2,5)
B = np.random.randint(0,2,5)
equal = np.allclose(A,B)
print(equal)
何对布尔值取反,或者原位(in-place)改变浮点数的符号(sign)?
Z = np.array([0,1])
print(Z)
np.logical_not(Z, out=Z)
Z = np.array([0.2,1.15])
print(Z)
np.negative(Z, out=Z)
找出数组中与给定值最接近的数
Z = np.array([0,1]) print(Z) np.logical_not(Z, out=Z) Z = np.array([0.2,1.15]) print(Z) np.negative(Z, out=Z)
找出数组中与给定值最接近的数
Z=np.array([[0,1,2,3],[4,5,6,7]]) print(Z) z=5.1 np.abs(Z - z).argmin() print(Z.flat[np.abs(Z - z).argmin()])
pandas基础笔记
Pandas 是 Python 语言的一个扩展程序库,用于数据分析;
作为一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具;
是一个强大的分析结构化数据的工具集,基于 Numpy;可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据,对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征;
添加了numpy数组没有的标签, 非常适用于数据清晰、挖掘、分析。
pandas数组有两种类型:
一维数组,带有标签的,称为Series(序列);
二维数组,带有标签的,成为DataFrame (数据框);
多个Series组合就是DataFrame, DataFrame也是用的最多的pandas结构, 让数据分析变得舒服自然。
文件读取
pandas可读取的文件格式主要为csv, excel, txt文件。
公共参数--header=None表示第一行不作为列名,index_col表示把某一列或几列作为索引,usecols表示读取列的集合,默认读取所有的列,parse_dates表示需要转化为时间的列,nrows表示读取的数据行数。
读取txt文件时,经常遇到分隔符非空格的情况,read_table有一个分割参数sep,它使得用户可以自定义分割符号,进行txt数据的读取。
基本数据结构
pandas中具有两种基本的数据存储结构,存储一维values的Series和存储二维values的DataFrame
1. Series
Series一般由四个部分组成,分别是序列的值data、索引index、存储类型dtype、序列的名字name。索引也可以指定它的名字,默认为空。
object类型
object代表了一种混合类型,正如上面的例子中存储了整数、字符串以及Python的字典数据结构。此外,目前pandas把纯字符串序列也默认认为是一种object类型的序列,但它也可以用string类型存储。
2. DataFrame
DataFrame在Series的基础上增加了列索引,一个数据框可以由二维的data与行列索引来构造,在数据框中可以取出相应的属性。
常用基本函数
1. 汇总函数(head,tail,info,describe)
2. 特征统计函数(sum, mean, median, var, std, max, min)
3.唯一值函数(unique,nunique)
4. 替换函数(replace,str.replace,cat.codes)
5. 排序函数(sort_values,sort_index)
6. apply方法
窗口对象
2. 特征统计函数(sum, mean, median, var, std, max, min)
3.唯一值函数(unique,nunique)
4. 替换函数(replace,str.replace,cat.codes)
5. 排序函数(sort_values,sort_index)
6. apply方法
窗口对象
4. 替换函数(replace,str.replace,cat.codes)
5. 排序函数(sort_values,sort_index)
6. apply方法
窗口对象
6. apply方法
窗口对象
滑动窗口rolling、扩张窗口expanding以及指数加权窗口ewm
matplotlib初识Matplotlib
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形;能让使用者很轻松地将数据图形化,并且提供多样化的输出格式,可以用来绘制各种静态,动态,交互式的图表;是一个非常强大的 Python 画图工具,可以使用该工具将很多数据通过图表的形式更直观的呈现出来。
Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等;通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
1.Matplotlib中的基本图表包括的元素
x轴和y轴
水平和垂直的轴线
x轴和y轴刻度
刻度标示坐标轴的分隔,包括最小刻度和最大刻度
x轴和y轴刻度标签
表示特定坐标轴的值
绘图区域
实际绘图的区域
2.hold属性
hold属性默认为True,允许在一幅图中绘制多个曲线;将hold属性修改为False,每一个plot都会覆盖前面的plot。
但是不推荐去动hold这个属性,这种做法(会有警告)。因此使用默认设置即可。
3.网格线
grid方法
使用grid方法为图添加网格线
设置grid参数(参数与plot函数相同)
.lw代表linewidth,线的粗细
.alpha表示线的明暗程度
4.axis方法
如果axis方法没有任何参数,则返回当前坐标轴的上下限
5.xlim方法和ylim方法
除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
6.legend方法
Matplotlib初进阶Matplotlib可用于Python脚本,Python和IPython Shell、Jupyter notebook,Web应用程序服务器和各种图形用户界面工具包等;已经成为python中公认的数据可视化工具。
绘图例子
Matplotlib的图像是画在figure(如windows,jupyter窗体)上的,每一个figure又包含了一个或多个axes(一个可以指定坐标系的子区域)。最简单的创建figure以及axes的方式是通过pyplot.subplots命令,创建axes以后,可以使用Axes.plot绘制最简易的折线图。和MATLAB命令类似,你还可以通过一种更简单的方式绘制图像,matplotlib.pyplot方法能够直接在当前axes上绘制图像,如果用户未指定axes,matplotlib会帮你自动创建一个。
Figure的组成
通过一张figure解剖图,一个完整的matplotlib图像通常会包括以下四个层级,也被称为容器(container)。在matplotlib的世界中,我们将通过各种命令方法来操纵图像中的每一个部分,从而达到数据可视化的最终效果,一副完整的图像实际上是各类子元素的集合。Figure:顶层级,用来容纳所有绘图元素Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成。Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素Tick:axis的下属层级,用来处理所有和刻度有关的元素
两种绘图接口:matplotlib提供了两种最常用的绘图接口:显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style),依赖pyplot自动创建figure和axes,并绘图!
作业
你在工作或学习中通常何时会用到数据可视化,希望通过可视化达到什么目的?
通过可视化,实现将繁杂的数据文字信息转化为图形或者表格,使视觉上一目了然,利用图像表示、建立数据模型、立体数据结构等,化繁为简!



