python的推荐书籍有哪些
零基础如何学好python,作为一个学了python两三年的过来人,我当初也是从0开始一路摸索过来的,这里给想学python的小白们分享一点我的学习心得。
1.《笨方法学Python》、《流畅的python》、《EffectivePython:编写高质量Python代码的59个有效方法》、《PythonCookbook》。
2.《利用Python进行数据分析(原书第2版)》、《Python数据科学手册(图灵出品)》。
python数据分析与应用第三章代码3-5的数据哪来的
savetxt
importnumpyasnp
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
defdatestr2num(s):
returndatetime.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)
foriinrange(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)
defsummarize(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")#指定了文件名、需要保存的数组名、分隔符(在这个例子中为英文标点逗号)以及存储浮点数的格式。
0818b9ca8b590ca3270a3433284dd417.png
格式字符串以一个百分号开始。接下来是一个可选的标志字符:-表示结果左对齐,0表示左端补0,+表示输出符号(正号+或负号-)。第三部分为可选的输出宽度参数,表示输出的最小位数。第四部分是精度格式符,以”.”开头,后面跟一个表示精度的整数。最后是一个类型指定字符,在例子中指定为字符串类型。
numpy.apply_along_axis(func1d,axis,arr,*args,**kwargs)
>>>defmy_func(a):
..."""Averagefirstandlastelementofa1-Darray"""
...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.20.20.20.20.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计算指数移动平均线
指数移动平均线(exponentialmovingaverage)。指数移动平均线使用的权重是指数衰减的。对历史上的数据点赋予的权重以指数速度减小,但永远不会到达0。
x=np.arange(5)
print"Exp",np.exp(x)
#output
Exp[1.2.718281837.389056120.0855369254.59815003]
Linspace返回一个元素值在指定的范围内均匀分布的数组。
print"Linspace",np.linspace(-1,0,5)#起始值、终止值、可选的元素个数
#output
Linspace[-1.-0.75-0.5-0.250.]
(1)权重计算
N=int(sys.argv[1])
weights=np.exp(np.linspace(-1.,0.,N))
(2)权重归一化处理
weights/=weights.sum()
print"Weights",weights
#output
Weights[0.114050720.146444030.188037850.241445380.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的奇异值
printx,residuals,rank,s
#计算下一个预测值
printnp.dot(b,x)
3.28绘制趋势线
>>>x=np.arange(6)
>>>x=x.reshape((2,3))
array([[0,1,2],[3,4,5]])
>>>np.ones_like(x)#用1填充数组
array([[1,1,1],[1,1,1]])
zeros_like
empty_like
zeros
empty
3.30数组的修剪和压缩
a=np.arange(5)
print"a=",a
print"Clipped",a.clip(1,2)#将所有比给定最大值还大的元素全部设为给定的最大值,而所有比给定最小值还小的元素全部设为给定的最小值
#output
a=[01234]
Clipped[11222]
a=np.arange(4)
printa
print"Compressed",a.compress(a>2)#返回一个根据给定条件筛选后的数组
#output
[0123]
Compressed[3]
b=np.arange(1,9)
print"b=",b
print"Factorial",b.prod()#输出数组元素阶乘结果
#output
b=[12345678]
Factorial40320
print"Factorials",b.cumprod()
#output
python核心编程讲的是python2.x还是python3.x
解释python代码
l = []定义一个列表for i in range(3): # 循环输入3个数 range是生成一个序列 为了for循环使用的x = int(raw_input(integer:\n)) # 输入一个数字 因为输入的是字符串 还要转换成整数l.append(x) #把这个数字添加到列表中l.sort() # 对列表进行排序print l # 输出这个列表就是这个结果了integer:8integer:5integer:6[5, 6, 8]