《Python数据分析基础教程:Numpy学习指南》- 速记 - 第三章
2016-03-23 11:50
531 查看
3.2 读写文件
savetxtimport numpy as np i2 = np.eye(2) np.savetxt("eye.txt", i2)
3.4 读入CSV文件
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800 c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True) #index从0开始
3.6.1 算术平均值
np.mean(c) = np.average(c)3.6.2 加权平均值
t = np.arange(len(c))np.average(c, weights=t)
3.8 极值
np.min(c)np.max(c)
np.ptp(c) 最大值与最小值的差值
3.10 统计分析
np.median(c) 中位数np.msort(c) 升序排序
np.var(c) 方差
3.12 分析股票收益率
np.diff(c) 可以返回一个由相邻数组元素的差值构成的数组
returns = np.diff( arr ) / arr[ : -1] #diff返回的数组比收盘价数组少一个元素
np.std(c) 标准差
对数收益率
logreturns = np.diff( np.log(c) ) #应检查输入数组以确保其不含有零和负数
where 可以根据指定的条件返回所有满足条件的数
组元素的索引值。
posretindices = np.where(returns > 0)
np.sqrt(1./252.) 平方根,浮点数
3.14 分析日期数据
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800 dates, close=np.loadtxt('data.csv', delimiter=',', usecols=(1,6), converters={1:datestr2num}, unpack=True) print "Dates =", dates def datestr2num(s): return datetime.datetime.strptime(s, "%d-%m-%Y").date().weekday() # 星期一 0 # 星期二 1 # 星期三 2 # 星期四 3 # 星期五 4 # 星期六 5 # 星期日 6 #output Dates = [ 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 1. 2. 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4.]
averages = np.zeros(5) for i in range(5): indices = np.where(dates == i) prices = np.take(close, indices) #按数组的元素运算,产生一个数组作为输出。 >>> a = [4, 3, 5, 7, 6, 8] >>> indices = [0, 1, 4] >>> np.take(a, indices) array([4, 3, 6])
np.argmax(c) #返回的是数组中最大元素的索引值
np.argmin(c)
3.16 汇总数据
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800 #得到第一个星期一和最后一个星期五 first_monday = np.ravel(np.where(dates == 0))[0] last_friday = np.ravel(np.where(dates == 4))[-1] #创建一个数组,用于存储三周内每一天的索引值 weeks_indices = np.arange(first_monday, last_friday + 1) #按照每个子数组5个元素,用split函数切分数组 weeks_indices = np.split(weeks_indices, 5) #output [array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), array([11,12, 13, 14, 15])] weeksummary = np.apply_along_axis(summarize, 1, weeks_indices,open, high, low, close) def summarize(a, o, h, l, c): #open, high, low, close monday_open = o[a[0]] week_high = np.max( np.take(h, a) ) week_low = np.min( np.take(l, a) ) friday_close = c[a[-1]] return("APPL", monday_open, week_high, week_low, friday_close) np.savetxt("weeksummary.csv", weeksummary, delimiter=",", fmt="%s") #指定了文件名、需要保存的数组名、分隔符(在这个例子中为英文标点逗号)以及存储浮点数的格式。
格式字符串以一个百分号开始。接下来是一个可选的标志字符:-表示结果左对齐,0表示左端补0,+表示输出符号(正号+或负号-)。第三部分为可选的输出宽度参数,表示输出的最小位数。第四部分是精度格式符,以”.”开头,后面跟一个表示精度的整数。最后是一个类型指定字符,在例子中指定为字符串类型。
numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)
>>> def my_func(a): ... """Average first and last element of a 1-D array""" ... return (a[0] + a[-1]) * 0.5 >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]]) >>> np.apply_along_axis(my_func, 0, b) #沿着X轴运动,取列切片 array([ 4., 5., 6.]) >>> np.apply_along_axis(my_func, 1, b) #沿着y轴运动,取行切片 array([ 2., 5., 8.]) >>> b = np.array([[8,1,7], [4,3,9], [5,2,6]]) >>> np.apply_along_axis(sorted, 1, b) array([[1, 7, 8], [3, 4, 9], [2, 5, 6]])
3.20 计算简单移动平均线
(1) 使用ones函数创建一个长度为N的元素均初始化为1的数组,然后对整个数组除以N,即可得到权重。如下所示:N = int(sys.argv[1]) weights = np.ones(N) / N print "Weights", weights
在N = 5时,输出结果如下:
Weights [ 0.2 0.2 0.2 0.2 0.2] #权重相等
(2) 使用这些权重值,调用convolve函数:
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True) sma = np.convolve(weights, c)[N-1:-N+1] #卷积是分析数学中一种重要的运算,定义为一个函数与经过翻转和平移的另一个函数的乘积的积分。 t = np.arange(N - 1, len(c)) #作图 plot(t, c[N-1:], lw=1.0) plot(t, sma, lw=2.0) show()
3.22 计算指数移动平均线
指数移动平均线(exponential moving average)。指数移动平均线使用的权重是指数衰减的。对历史上的数据点赋予的权重以指数速度减小,但永远不会到达0。x = np.arange(5) print "Exp", np.exp(x) #output Exp [ 1. 2.71828183 7.3890561 20.08553692 54.59815003]
Linspace 返回一个元素值在指定的范围内均匀分布的数组。
print "Linspace", np.linspace(-1, 0, 5) #起始值、终止值、可选的元素个数 #output Linspace [-1. -0.75 -0.5 -0.25 0. ]
(1)权重计算
N = int(sys.argv[1]) weights = np.exp(np.linspace(-1. , 0. , N))
(2)权重归一化处理
weights /= weights.sum() print "Weights", weights #output Weights [ 0.11405072 0.14644403 0.18803785 0.24144538 0.31002201]
(3)计算及作图
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True) ema = np.convolve(weights, c)[N-1:-N+1] t = np.arange(N - 1, len(c)) plot(t, c[N-1:], lw=1.0) plot(t, ema, lw=2.0) show()
3.26 用线性模型预测价格
(x, residuals, rank, s) = np.linalg.lstsq(A, b) #系数向量x、一个残差数组、A的秩以及A的奇异值 print x, residuals, rank, s #计算下一个预测值 print np.dot(b, x)
3.28 绘制趋势线
>>> x = np.arange(6) >>> x = x.reshape((2, 3)) >>> x array([[0, 1, 2], [3, 4, 5]]) >>> np.ones_like(x) #用1填充数组 array([[1, 1, 1], [1, 1, 1]])
类似函数
zeros_like
empty_like
zeros
ones
empty
3.30 数组的修剪和压缩
a = np.arange(5) print "a =", a print "Clipped", a.clip(1, 2) #将所有比给定最大值还大的元素全部设为给定的最大值,而所有比给定最小值还小的元素全部设为给定的最小值 #output a = [0 1 2 3 4] Clipped [1 1 2 2 2]
a = np.arange(4) print a print "Compressed", a.compress(a > 2) #返回一个根据给定条件筛选后的数组 #output [0 1 2 3] Compressed [3]
b = np.arange(1, 9) print "b =", b print "Factorial", b.prod() #输出数组元素阶乘结果 #output b = [1 2 3 4 5 6 7 8] Factorial 40320 print "Factorials", b.cumprod() #output Factorials [ 1 2 6 24 120 720 5040 40320] #数组元素遍历阶乘
相关文章推荐
- python_selenium单元测试+自动生成测试结果
- Kemans算法及其Python 实现
- 简明Python教程学习笔记_8_异常
- 在windows系统中实现python3安装lxml
- Python读写文件乱码问题
- python3环境下面bytes类型转换成字典类型实例
- DBscan算法及其Python实现
- 简明Python教程学习笔记_7_输入输出和文件操作
- Python学习-机器学习实战-ch02KNN_part1
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- 由浅入深理解Python装饰器
- 强大的python 定时任务框架 APScheduler 类似java的Quartz
- Python命名规则
- 【Python】【学习笔记】1.快速入门
- python re模块
- python编写socket的简单步骤
- python一些细节小结(1)
- Python学习资源搜集
- Python-OpenCV(1)
- Solving install issues with Python 2.7.10 on Windows