㈠ 怎麼用python計算股票
作為一個python新手,在學習中遇到很多問題,要善於運用各種方法。今天,在學習中,碰到了如何通過收盤價計算股票的漲跌幅。
第一種:
讀取數據並建立函數:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import spline
from pylab import *
import pandas as pd
from pandas import Series
a=pd.read_csv('d:///1.csv',sep=',')#文件位置
t=a['close']
def f(t):
s=[]
for i in range(1,len(t)):
if i==1:
continue
else:
s.append((t[i]-t[i-1])/t[i]*100)
print s
plot(s)
plt.show()
f(t)
第二種:
利用pandas裡面的方法:
import pandas as pd
a=pd.read_csv('d:///1.csv')
rets = a['close'].pct_change() * 100
print rets
第三種:
close=a['close']
rets=close/close.shift(1)-1
print rets
總結:python是一種非常好的編程語言,一般而言,我們可以運用構建相關函數來實現自己的思想,但是,眾所周知,python中裡面的有很多科學計算包,裡面有很多方法可以快速解決計算的需要,如上面提到的pandas中的pct_change()。因此在平時的使用中應當學會尋找更好的方法,提高運算速度。
㈡ r語言的bs()對應python里的哪個的函數
對應 python pandas 的iloc()函數
㈢ python 3D散點太密集怎麼辦
#三維點插值
#在三維空間中,利用實際點的值推算出網格點的值
import numpy as np
point_grid =np.array([[0.0,0.0,0.0],[0.4,0.4,0.4],[0.8,0.8,0.8],[1.0,1.0,1.0]])#網格點坐標def func(x, y, z): return x*(1-x)*np.cos(4*np.pi*x) * (np.sin(4*np.pi*y**2)**2)*z
points = np.random.rand(10, 3)#實際點坐標values = func(points[:,0], points[:,1],points[:,2])#實際點的值from scipy.interpolate import griddata
grid_z0 = griddata(points, values, point_grid, method='nearest')#插值計算,計算出網格點的值!
㈣ python 拉格朗日插值 不能超過多少個值
拉格朗日插值Python代碼實現
1. 數學原理
對某個多項式函數有已知的k+1個點,假設任意兩個不同的都互不相同,那麼應用拉格朗日插值公式所得到的拉格朗日插值多項式為:
直接編寫程序,可以直接插值,並且得到對應的函數值。但是不能得到系數,也不能對其進行各項運算。
123456789101112defh(x,y,a):ans=0.0foriinrange(len(y)):t=y[i]forjinrange(len(y)):ifi !=j:t*=(a-x[j])/(x[i]-x[j])ans+=treturnansx=[1,0]y=[0,2]print(h(x,y,2))上述代碼中,h(x,y,a)就是插值函數,直接調用就行。參數說明如下:
x,y分別是對應點的x值和y值。具體詳解下解釋。
a為想要取得的函數的值。
事實上,最簡單的拉格朗日插值就是兩點式得到的一條直線。
例如:
p點(1,0)q點(0,2)
這兩個點決定了一條直線,所以當x=2的時候,y應該是-2
該代碼就是利用這兩個點插值,然後a作為x=2調用函數驗證的。
3. 引用庫
3.1 庫的安裝
主要依賴與 scipy。官方網站見:https://www.scipy.org/install.html
安裝的方法很簡單,就是使用pip install scipy 如果失敗,則將whl文件下載到本地再利用命令進行安裝。
可能如果沒有安裝numpy
3.2 庫的使用
from scipy.interplotate import lagrange
直接調用lagrange(x,y)這個函數即可,返回 一個對象。
參數x,y分別是對應各個點的x值和y值。
例如:(1,2) (3,5) (5,9)這三個點,作為函數輸入應該這么寫:
x=[1,3,5]
y =[2, 5, 9]
a=lagrange(x,y)
直接輸出該對象,就能看到插值的函數。
利用該對象,能得到很多特性。具體參見:https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.poly1d.html
a.order得到階
a[]得到系數
a()得到對應函數值
此外可以對其進行加減乘除運算
3.3 代碼實現
1234567結果是:
<class 'numpy.lib.polynomial.poly1d'> 4
4 3 2
0.5472 x - 7.306 x + 30.65 x - 47.03 x + 28.13
5.0 7.0 10.0
28.1333333333 30.6527777778 -7.30555555556
解釋:
<class 'numpy.lib.polynomial.poly1d'> 4
這一行是輸出a的類型,以及最高次冪。
4 3 2
0.5472 x - 7.306 x + 30.65 x - 47.03 x + 28.13
第二行和第三行就是插值的結果,顯示出的函數。
第二行的數字是對應下午的x的冪,如果對應不齊,則是排版問題。
5.0 7.0 10.0
第四行是代入的x值,得到的結果。
也就是說,用小括弧f(x)的這種形式,可以直接得到計算結果。
28.1333333333 30.6527777778 -7.30555555556
㈤ 擬合直方圖與Python問題,怎麼解決
用代碼解決:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
import scipy.stats as st
sim = st.gamma(1,loc=0,scale=0.8) # Simulated
obs = st.gamma(2,loc=0,scale=0.7) # Observed
x = np.linspace(0,4,1000)
simpdf = sim.pdf(x)
obspdf = obs.pdf(x)
plt.plot(x,simpdf,label='Simulated')
plt.plot(x,obspdf,'r--',label='Observed')
plt.title('PDF of Observed and Simulated Precipitation')
plt.legend(loc='best')
plt.show()
plt.figure(1)
simcdf = sim.cdf(x)
obscdf = obs.cdf(x)
plt.plot(x,simcdf,label='Simulated')
plt.plot(x,obscdf,'r--',label='Observed')
plt.title('CDF of Observed and Simulated Precipitation')
plt.legend(loc='best')
plt.show()
# Inverse CDF
invcdf = interp1d(obscdf,x)
transfer_func = invcdf(simcdf)
plt.figure(2)
plt.plot(transfer_func,x,'g-')
plt.show()
㈥ 在Python程序中的插值誤差問題,怎麼解決
代碼如下所示:import numpy as npfrom matplotlib import pyplot as pltfrom scipy.interpolate import interp1dx=np.linspace(0,10*np.pi,num=20)y=np.sin(x)f1=interp1d(x,y,kind='linear')#線性插值f2=interp1d(x,y,kind='cubic')#三次樣條插值x_pred=np.linspace(0,10*np.pi,num=1000)y1=f1(x_pred)y2=f2(x_pred)plt.figure()plt.plot(x_pred,y1,'r',label='linear')plt.plot(x,f1(x),'b--','origin')plt.legend()plt.show()plt.figure()plt.plot(x_pred,y2,'b--',label='cubic')plt.legend()plt.show()
㈦ Python如何畫盒子圖與其它圖形同軸
mport pandas as pd #導入pandas
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
#fig,axes = plt.subplots(1,2,figsize=(8,4))
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2,sharex=True, figsize=(6, 3))
n_wrms_before_filtering=[]
e_wrms_before_filtering=[]
u_wrms_before_filtering=[]
n_wrms_after_filtering=[]
e_wrms_after_filtering=[]
u_wrms_after_filtering=[]
lines = open("D:\軟體安裝\SoftwareFile\Pycharm\PycharmProjects\\boxplot\data\wrms_neu1.dat", 'r').readlines()
for i in range(len(lines)):
# split data
fields = lines[i].split(' ')
n_wrms_before_filtering.append(float(fields[0]))
e_wrms_before_filtering.append(float(fields[1]))
u_wrms_before_filtering.append(float(fields[2]))
lines = open("D:\軟體安裝\SoftwareFile\Pycharm\PycharmProjects\\boxplot\data\wrms_neu2.dat", 'r').readlines()
for i in range(len(lines)):
# split data
fields = lines[i].split(' ')
n_wrms_after_filtering.append(float(fields[0]))
e_wrms_after_filtering.append(float(fields[1]))
u_wrms_after_filtering.append(float(fields[2]))
labels = 'N','E','U' #圖例
p1=ax1.boxplot([n_wrms_before_filtering, e_wrms_before_filtering, u_wrms_before_filtering],widths = 0.8,labels = labels,patch_artist = True)
color = ['#515151', '#f14040', '#1a6fdf'] # 有多少box就對應設置多少顏色
for box, c in zip(p1['boxes'], color):
# 箱體邊框顏色
box.set(color=c, linewidth=1.5)
# 箱體內部填充顏色
box.set(facecolor=c)
# 這里設置的是各個box的其他屬性
for whisker in p1['whiskers']:
whisker.set(color='#180405', linewidth=1.5)
for cap in p1['caps']:
cap.set(color='#180405', linewidth=1.5)
for median in p1['medians']:
median.set(color='#180405', linewidth=1.5)
for flier in p1['fliers']:
flier.set(marker='o', color='y', alpha=0.5)
labels = 'N','E','U' #圖例
p2=ax2.boxplot([n_wrms_after_filtering, e_wrms_after_filtering, u_wrms_after_filtering],widths = 0.8,labels = labels,patch_artist = True)
color = ['#515151', '#f14040', '#1a6fdf'] # 有多少box就對應設置多少顏色
for box, c in zip(p2['boxes'], color):
# 箱體邊框顏色
box.set(color=c, linewidth=1.5)
# 箱體內部填充顏色
box.set(facecolor=c)
# 這里設置的是各個box的其他屬性
for whisker in p2['whiskers']:
whisker.set(color='#180405', linewidth=1.5)
for cap in p2['caps']:
cap.set(color='#180405', linewidth=1.5)
for median in p2['medians']:
median.set(color='#180405', linewidth=1.5)
for flier in p2['fliers']:
flier.set(marker='o', color='y', alpha=0.5)
ax1.set(xlabel='Directions', ylabel='WRMS/mm')
ax2.set(xlabel='Directions', ylabel='WRMS/mm')
ax1.set_title('Before filtering')
ax2.set_title('After filtering')
plt.tight_layout()
#plt.subplots_adjust(left=0.129, bottom=0.11, right=0.9, top=0.88,wspace=0.2, hspace=0.2)
#plt.show()
plt.savefig('D:\軟體安裝\SoftwareFile\Pycharm\PycharmProjects\\boxplot\\123', dpi=600)