成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python炒股常用函數(shù) python炒股軟件開(kāi)發(fā)

如何用Python和機(jī)器學(xué)習(xí)炒股賺錢

相信很多人都想過(guò)讓人工智能來(lái)幫你賺錢,但到底該如何做呢?瑞士日內(nèi)瓦的一位金融數(shù)據(jù)顧問(wèn) Ga?tan Rickter 近日發(fā)表文章介紹了他利用 Python 和機(jī)器學(xué)習(xí)來(lái)幫助炒股的經(jīng)驗(yàn),其最終成果的收益率跑贏了長(zhǎng)期處于牛市的標(biāo)準(zhǔn)普爾 500 指數(shù)。雖然這篇文章并沒(méi)有將他的方法完全徹底公開(kāi),但已公開(kāi)的內(nèi)容或許能給我們帶來(lái)如何用人工智能炒股的啟迪。

創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計(jì),甘德網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:甘德等地區(qū)。甘德做網(wǎng)站價(jià)格咨詢:18982081108

我終于跑贏了標(biāo)準(zhǔn)普爾 500 指數(shù) 10 個(gè)百分點(diǎn)!聽(tīng)起來(lái)可能不是很多,但是當(dāng)我們處理的是大量流動(dòng)性很高的資本時(shí),對(duì)沖基金的利潤(rùn)就相當(dāng)可觀。更激進(jìn)的做法還能得到更高的回報(bào)。

這一切都始于我閱讀了 Gur Huberman 的一篇題為《Contagious Speculation and a Cure for Cancer: A Non-Event that Made Stock Prices Soar》的論文。該研究描述了一件發(fā)生在 1998 年的涉及到一家上市公司 EntreMed(當(dāng)時(shí)股票代碼是 ENMD)的事件:

「星期天《紐約時(shí)報(bào)》上發(fā)表的一篇關(guān)于癌癥治療新藥開(kāi)發(fā)潛力的文章導(dǎo)致 EntreMed 的股價(jià)從周五收盤(pán)時(shí)的 12.063 飆升至 85,在周一收盤(pán)時(shí)接近 52。在接下來(lái)的三周,它的收盤(pán)價(jià)都在 30 以上。這股投資熱情也讓其它生物科技股得到了溢價(jià)。但是,這個(gè)癌癥研究方面的可能突破在至少五個(gè)月前就已經(jīng)被 Nature 期刊和各種流行的報(bào)紙報(bào)道過(guò)了,其中甚至包括《泰晤士報(bào)》!因此,僅僅是熱情的公眾關(guān)注就能引發(fā)股價(jià)的持續(xù)上漲,即便實(shí)際上并沒(méi)有出現(xiàn)真正的新信息。」

在研究者給出的許多有見(jiàn)地的觀察中,其中有一個(gè)總結(jié)很突出:

「(股價(jià))運(yùn)動(dòng)可能會(huì)集中于有一些共同之處的股票上,但這些共同之處不一定要是經(jīng)濟(jì)基礎(chǔ)。」

我就想,能不能基于通常所用的指標(biāo)之外的其它指標(biāo)來(lái)劃分股票。我開(kāi)始在數(shù)據(jù)庫(kù)里面挖掘,幾周之后我發(fā)現(xiàn)了一個(gè),其包含了一個(gè)分?jǐn)?shù),描述了股票和元素周期表中的元素之間的「已知和隱藏關(guān)系」的強(qiáng)度。

我有計(jì)算基因組學(xué)的背景,這讓我想起了基因和它們的細(xì)胞信號(hào)網(wǎng)絡(luò)之間的關(guān)系是如何地不為人所知。但是,當(dāng)我們分析數(shù)據(jù)時(shí),我們又會(huì)開(kāi)始看到我們之前可能無(wú)法預(yù)測(cè)的新關(guān)系和相關(guān)性。

選擇出的涉及細(xì)胞可塑性、生長(zhǎng)和分化的信號(hào)通路的基因的表達(dá)模式

和基因一樣,股票也會(huì)受到一個(gè)巨型網(wǎng)絡(luò)的影響,其中各個(gè)因素之間都有或強(qiáng)或弱的隱藏關(guān)系。其中一些影響和關(guān)系是可以預(yù)測(cè)的。

我的一個(gè)目標(biāo)是創(chuàng)建長(zhǎng)的和短的股票聚類,我稱之為「籃子聚類(basket clusters)」,我可以將其用于對(duì)沖或單純地從中獲利。這需要使用一個(gè)無(wú)監(jiān)督機(jī)器學(xué)習(xí)方法來(lái)創(chuàng)建股票的聚類,從而使這些聚類之間有或強(qiáng)或弱的關(guān)系。這些聚類將會(huì)翻倍作為我的公司可以交易的股票的「籃子(basket)」。

首先我下載了一個(gè)數(shù)據(jù)集:Public Company Hidden Relationship Discovery,這個(gè)數(shù)據(jù)集基于元素周期表中的元素和上市公司之間的關(guān)系。

然后我使用了 Python 和一些常用的機(jī)器學(xué)習(xí)工具——scikit-learn、numpy、pandas、matplotlib 和 seaborn,我開(kāi)始了解我正在處理的數(shù)據(jù)集的分布形狀。為此我參考了一個(gè)題為《Principal Component Analysis with KMeans visuals》的 Kaggle Kernel:Principal Component Analysis with KMeans visuals

import numpy as npimport pandas as pdfrom sklearn.decomposition import PCAfrom sklearn.cluster import KMeansimport matplotlib.pyplot as pltimport seaborn as sbnp.seterr(divide='ignore', invalid='ignore')# Quick way to test just a few column features# stocks = pd.read_csv('supercolumns-elements-nasdaq-nyse-otcbb-general-UPDATE-2017-03-01.csv', usecols=range(1,16))stocks = pd.read_csv('supercolumns-elements-nasdaq-nyse-otcbb-general-UPDATE-2017-03-01.csv')print(stocks.head())str_list = []for colname, colvalue in stocks.iteritems(): ? ?if type(colvalue[1]) == str:

str_list.append(colname)# Get to the numeric columns by inversionnum_list = stocks.columns.difference(str_list)stocks_num = stocks[num_list]print(stocks_num.head())

輸出:簡(jiǎn)單看看前面 5 行:

zack@twosigma-Dell-Precision-M3800:/home/zack/hedge_pool/baskets/hcluster$ ./hidden_relationships.py

Symbol_update-2017-04-01 ?Hydrogen ? Helium ?Lithium ?Beryllium ?Boron ?\

0 ? ? ? ? ? ? ? ? ? ? ? ?A ? ? ? 0.0 ?0.00000 ? ? ?0.0 ? ? ? ?0.0 ? ?0.0 ?

1 ? ? ? ? ? ? ? ? ? ? ? AA ? ? ? 0.0 ?0.00000 ? ? ?0.0 ? ? ? ?0.0 ? ?0.0 ?

2 ? ? ? ? ? ? ? ? ? ? AAAP ? ? ? 0.0 ?0.00461 ? ? ?0.0 ? ? ? ?0.0 ? ?0.0 ?

3 ? ? ? ? ? ? ? ? ? ? ?AAC ? ? ? 0.0 ?0.00081 ? ? ?0.0 ? ? ? ?0.0 ? ?0.0 ?

4 ? ? ? ? ? ? ? ? ? ?AACAY ? ? ? 0.0 ?0.00000 ? ? ?0.0 ? ? ? ?0.0 ? ?0.0 ?

Carbon ?Nitrogen ? ?Oxygen ?Fluorine ? ? ... ? ? ? Fermium ?Mendelevium ?\

0 ?0.006632 ? ? ? 0.0 ?0.007576 ? ? ? 0.0 ? ? ... ? ? ?0.000000 ? ? 0.079188 ?

1 ?0.000000 ? ? ? 0.0 ?0.000000 ? ? ? 0.0 ? ? ... ? ? ?0.000000 ? ? 0.000000 ?

2 ?0.000000 ? ? ? 0.0 ?0.000000 ? ? ? 0.0 ? ? ... ? ? ?0.135962 ? ? 0.098090 ?

3 ?0.000000 ? ? ? 0.0 ?0.018409 ? ? ? 0.0 ? ? ... ? ? ?0.000000 ? ? 0.000000 ?

4 ?0.000000 ? ? ? 0.0 ?0.000000 ? ? ? 0.0 ? ? ... ? ? ?0.000000 ? ? 0.000000 ?

Nobelium ?Lawrencium ?Rutherfordium ?Dubnium ?Seaborgium ?Bohrium ?Hassium ?\

0 ?0.197030 ? ? ?0.1990 ? ? ? ? 0.1990 ? ? ?0.0 ? ? ? ? 0.0 ? ? ?0.0 ? ? ?0.0 ?

1 ?0.000000 ? ? ?0.0000 ? ? ? ? 0.0000 ? ? ?0.0 ? ? ? ? 0.0 ? ? ?0.0 ? ? ?0.0 ?

2 ?0.244059 ? ? ?0.2465 ? ? ? ? 0.2465 ? ? ?0.0 ? ? ? ? 0.0 ? ? ?0.0 ? ? ?0.0 ?

3 ?0.000000 ? ? ?0.0000 ? ? ? ? 0.0000 ? ? ?0.0 ? ? ? ? 0.0 ? ? ?0.0 ? ? ?0.0 ?

4 ?0.000000 ? ? ?0.0000 ? ? ? ? 0.0000 ? ? ?0.0 ? ? ? ? 0.0 ? ? ?0.0 ? ? ?0.0 ?

Meitnerium ?

0 ? ? ? ? 0.0 ?

1 ? ? ? ? 0.0 ?

2 ? ? ? ? 0.0 ?

3 ? ? ? ? 0.0 ?

4 ? ? ? ? 0.0 ?

[5 rows x 110 columns]

Actinium ?Aluminum ?Americium ?Antimony ? ? Argon ? Arsenic ?Astatine ?\

0 ?0.000000 ? ? ? 0.0 ? ? ? ?0.0 ?0.002379 ?0.047402 ?0.018913 ? ? ? 0.0 ?

1 ?0.000000 ? ? ? 0.0 ? ? ? ?0.0 ?0.000000 ?0.000000 ?0.000000 ? ? ? 0.0 ?

2 ?0.004242 ? ? ? 0.0 ? ? ? ?0.0 ?0.001299 ?0.000000 ?0.000000 ? ? ? 0.0 ?

3 ?0.000986 ? ? ? 0.0 ? ? ? ?0.0 ?0.003378 ?0.000000 ?0.000000 ? ? ? 0.0 ?

4 ?0.000000 ? ? ? 0.0 ? ? ? ?0.0 ?0.000000 ?0.000000 ?0.000000 ? ? ? 0.0 ?

Barium ?Berkelium ?Beryllium ? ?... ? ? ?Tin ?Titanium ?Tungsten ? Uranium ?\

0 ? ? 0.0 ? 0.000000 ? ? ? ?0.0 ? ?... ? ? ?0.0 ?0.002676 ? ? ? 0.0 ?0.000000 ?

1 ? ? 0.0 ? 0.000000 ? ? ? ?0.0 ? ?... ? ? ?0.0 ?0.000000 ? ? ? 0.0 ?0.000000 ?

2 ? ? 0.0 ? 0.141018 ? ? ? ?0.0 ? ?... ? ? ?0.0 ?0.000000 ? ? ? 0.0 ?0.004226 ?

3 ? ? 0.0 ? 0.000000 ? ? ? ?0.0 ? ?... ? ? ?0.0 ?0.000000 ? ? ? 0.0 ?0.004086 ?

4 ? ? 0.0 ? 0.000000 ? ? ? ?0.0 ? ?... ? ? ?0.0 ?0.000000 ? ? ? 0.0 ?0.000000 ?

Vanadium ?Xenon ?Ytterbium ? Yttrium ? ? ?Zinc ?Zirconium ?

0 ?0.000000 ? ?0.0 ? ? ? ?0.0 ?0.000000 ?0.000000 ? ? ? ?0.0 ?

1 ?0.000000 ? ?0.0 ? ? ? ?0.0 ?0.000000 ?0.000000 ? ? ? ?0.0 ?

2 ?0.002448 ? ?0.0 ? ? ? ?0.0 ?0.018806 ?0.008758 ? ? ? ?0.0 ?

3 ?0.001019 ? ?0.0 ? ? ? ?0.0 ?0.000000 ?0.007933 ? ? ? ?0.0 ?

4 ?0.000000 ? ?0.0 ? ? ? ?0.0 ?0.000000 ?0.000000 ? ? ? ?0.0 ?

[5 rows x 109 columns]

zack@twosigma-Dell-Precision-M3800:/home/zack/hedge_pool/baskets/hcluster$

概念特征的皮爾遜相關(guān)性(Pearson Correlation)。在這里案例中,是指來(lái)自元素周期表的礦物和元素:

stocks_num = stocks_num.fillna(value=0, axis=1)X = stocks_num.valuesfrom sklearn.preprocessing import StandardScalerX_std = StandardScaler().fit_transform(X)f, ax = plt.subplots(figsize=(12, 10))plt.title('Pearson Correlation of Concept Features (Elements Minerals)')# Draw the heatmap using seabornsb.heatmap(stocks_num.astype(float).corr(),linewidths=0.25,vmax=1.0, square=True, cmap="YlGnBu", linecolor='black', annot=True)sb.plt.show()

輸出:(這個(gè)可視化例子是在前 16 個(gè)樣本上運(yùn)行得到的)。看到元素周期表中的元素和上市公司關(guān)聯(lián)起來(lái)真的很有意思。在某種程度時(shí),我想使用這些數(shù)據(jù)基于公司與相關(guān)元素或材料的相關(guān)性來(lái)預(yù)測(cè)其可能做出的突破。

測(cè)量「已解釋方差(Explained Variance)」和主成分分析(PCA)

已解釋方差=總方差-殘差方差(explained variance = total variance - residual variance)。應(yīng)該值得關(guān)注的 PCA 投射組件的數(shù)量可以通過(guò)已解釋方差度量(Explained Variance Measure)來(lái)引導(dǎo)。Sebastian Raschka 的關(guān)于 PCA 的文章對(duì)此進(jìn)行了很好的描述,參閱:Principal Component Analysis

# Calculating Eigenvectors and eigenvalues of Cov matirxmean_vec = np.mean(X_std, axis=0)cov_mat = np.cov(X_std.T)eig_vals, eig_vecs = np.linalg.eig(cov_mat)# Create a list of (eigenvalue, eigenvector) tupleseig_pairs = [ (np.abs(eig_vals[i]),eig_vecs[:,i]) for i in range(len(eig_vals))]# Sort from high to loweig_pairs.sort(key = lambda x: x[0], reverse= True)# Calculation of Explained Variance from the eigenvaluestot = sum(eig_vals)var_exp = [(i/tot)*100 for i in sorted(eig_vals, reverse=True)] cum_var_exp = np.cumsum(var_exp) # Cumulative explained variance# Variances plotmax_cols = len(stocks.columns) - 1plt.figure(figsize=(10, 5))plt.bar(range(max_cols), var_exp, alpha=0.3333, align='center', label='individual explained variance', color = 'g')plt.step(range(max_cols), cum_var_exp, where='mid',label='cumulative explained variance')plt.ylabel('Explained variance ratio')plt.xlabel('Principal components')plt.legend(loc='best')plt.show()

輸出:

從這個(gè)圖表中我們可以看到大量方差都來(lái)自于預(yù)測(cè)主成分的前 85%。這是個(gè)很高的數(shù)字,所以讓我們從低端的開(kāi)始,先只建模少數(shù)幾個(gè)主成分。更多有關(guān)分析主成分合理數(shù)量的信息可參閱:Principal Component Analysis explained visually

使用 scikit-learn 的 PCA 模塊,讓我們?cè)O(shè) n_components = 9。代碼的第二行調(diào)用了 fit_transform 方法,其可以使用標(biāo)準(zhǔn)化的電影數(shù)據(jù) X_std 來(lái)擬合 PCA 模型并在該數(shù)據(jù)集上應(yīng)用降維(dimensionality reduction)。

pca = PCA(n_components=9)

x_9d = pca.fit_transform(X_std)

plt.figure(figsize = (9,7))

plt.scatter(x_9d[:,0],x_9d[:,1], c='goldenrod',alpha=0.5)

plt.ylim(-10,30)

plt.show()

輸出:

這里我們甚至沒(méi)有真正觀察到聚類的些微輪廓,所以我們很可能應(yīng)該繼續(xù)調(diào)節(jié) n_component 的值直到我們得到我們想要的結(jié)果。這就是數(shù)據(jù)科學(xué)與藝術(shù)(data science and art)中的「藝術(shù)」部分。

現(xiàn)在,我們來(lái)試試 K-均值,看看我們能不能在下一章節(jié)可視化任何明顯的聚類。

K-均值聚類(K-Means Clustering)

我們將使用 PCA 投射數(shù)據(jù)來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 K-均值。

使用 scikit-learn 的 KMeans() 調(diào)用和 fit_predict 方法,我們可以計(jì)算聚類中心并為第一和第三個(gè) PCA 投射預(yù)測(cè)聚類索引(以便了解我們是否可以觀察到任何合適的聚類)。然后我們可以定義我們自己的配色方案并繪制散點(diǎn)圖,代碼如下所示:

# Set a 3 KMeans clustering

kmeans = KMeans(n_clusters=3)

# Compute cluster centers and predict cluster indices

X_clustered = kmeans.fit_predict(x_9d)# Define our own color map

LABEL_COLOR_MAP = {0 : 'r',1 : 'g',2 : 'b'}

label_color = [LABEL_COLOR_MAP[l] for l in X_clustered]

# Plot the scatter digram

plt.figure(figsize = (7,7))

plt.scatter(x_9d[:,0],x_9d[:,2], c= label_color, alpha=0.5)

plt.show()

輸出:

這個(gè) K-均值散點(diǎn)圖看起來(lái)更有希望,好像我們簡(jiǎn)單的聚類模型假設(shè)就是正確的一樣。我們可以通過(guò)這種顏色可視化方案觀察到 3 個(gè)可區(qū)分開(kāi)的聚類。

使用 seaborn 方便的 pairplot 函數(shù),我可以以成對(duì)的方式在數(shù)據(jù)框中自動(dòng)繪制所有的特征。我們可以一個(gè)對(duì)一個(gè)地 pairplot 前面 3 個(gè)投射并可視化:

# Create a temp dataframe from our PCA projection data "x_9d"

df = pd.DataFrame(x_9d)

df = df[[0,1,2]]

df['X_cluster'] = X_clustered

# Call Seaborn's pairplot to visualize our KMeans clustering on the PCA projected data

sb.pairplot(df, hue='X_cluster', palette='Dark2', diag_kind='kde', size=1.85)

sb.plt.show()

輸出:

構(gòu)建籃子聚類(Basket Clusters)

你應(yīng)該自己決定如何微調(diào)你的聚類。這方面沒(méi)有什么萬(wàn)靈藥,具體的方法取決于你操作的環(huán)境。在這個(gè)案例中是由隱藏關(guān)系所定義的股票和金融市場(chǎng)。

一旦你的聚類使你滿意了,你就可以設(shè)置分?jǐn)?shù)閾值來(lái)控制特定的股票是否有資格進(jìn)入一個(gè)聚類,然后你可以為一個(gè)給定的聚類提取股票,將它們作為籃子進(jìn)行交易或使用這些籃子作為信號(hào)。你可以使用這種方法做的事情很大程度就看你自己的創(chuàng)造力以及你在使用深度學(xué)習(xí)變體來(lái)進(jìn)行優(yōu)化的水平,從而基于聚類或數(shù)據(jù)點(diǎn)的概念優(yōu)化每個(gè)聚類的回報(bào),比如 short interest 或 short float(公開(kāi)市場(chǎng)中的可用股份)。

你可以注意到了這些聚類被用作籃子交易的方式一些有趣特征。有時(shí)候標(biāo)準(zhǔn)普爾和一般市場(chǎng)會(huì)存在差異。這可以提供本質(zhì)上基于「信息套利(information arbitrage)」的套利機(jī)會(huì)。一些聚類則和谷歌搜索趨勢(shì)相關(guān)。

看到聚類和材料及它們的供應(yīng)鏈相關(guān)確實(shí)很有意思,正如這篇文章說(shuō)的一樣:Zooming in on 10 materials and their supply chains - Fairphone

我僅僅使用該數(shù)據(jù)集操作了 Cobalt(鈷)、Copper(銅)、Gallium(鎵)和 Graphene(石墨烯)這幾個(gè)列標(biāo)簽,只是為了看我是否可能發(fā)現(xiàn)從事這一領(lǐng)域或受到這一領(lǐng)域的風(fēng)險(xiǎn)的上市公司之間是否有任何隱藏的聯(lián)系。這些籃子和標(biāo)準(zhǔn)普爾的回報(bào)進(jìn)行了比較。

通過(guò)使用歷史價(jià)格數(shù)據(jù)(可直接在 Quantopian、Numerai、Quandl 或 Yahoo Finance 使用),然后你可以匯總價(jià)格數(shù)據(jù)來(lái)生成預(yù)計(jì)收益,其可使用 HighCharts 進(jìn)行可視化:

我從該聚類中獲得的回報(bào)超過(guò)了標(biāo)準(zhǔn)普爾相當(dāng)一部分,這意味著你每年的收益可以比標(biāo)準(zhǔn)普爾還多 10%(標(biāo)準(zhǔn)普爾近一年來(lái)的漲幅為 16%)。我還見(jiàn)過(guò)更加激進(jìn)的方法可以凈掙超過(guò) 70%?,F(xiàn)在我必須承認(rèn)我還做了一些其它的事情,但因?yàn)槲夜ぷ鞯谋举|(zhì),我必須將那些事情保持黑箱。但從我目前觀察到的情況來(lái)看,至少圍繞這種方法探索和包裝新的量化模型可以證明是非常值得的,而其唯一的缺點(diǎn)是它是一種不同類型的信號(hào),你可以將其輸入其它系統(tǒng)的流程中。

生成賣空籃子聚類(short basket clusters)可能比生成買空籃子聚類(long basket clusters)更有利可圖。這種方法值得再寫(xiě)一篇文章,最好是在下一個(gè)黑天鵝事件之前。

如果你使用機(jī)器學(xué)習(xí),就可能在具有已知和隱藏關(guān)系的上市公司的寄生、共生和共情關(guān)系之上搶占先機(jī),這是很有趣而且可以盈利的。最后,一個(gè)人的盈利能力似乎完全關(guān)乎他在生成這些類別的數(shù)據(jù)時(shí)想出特征標(biāo)簽(即概念(concept))的強(qiáng)大組合的能力。

我在這類模型上的下一次迭代應(yīng)該會(huì)包含一個(gè)用于自動(dòng)生成特征組合或獨(dú)特列表的單獨(dú)算法。也許會(huì)基于近乎實(shí)時(shí)的事件,這可能會(huì)影響那些具有只有配備了無(wú)監(jiān)督學(xué)習(xí)算法的人類才能預(yù)測(cè)的隱藏關(guān)系的股票組。

python 常用的系統(tǒng)函數(shù)有哪些

1.常用內(nèi)置函數(shù):(不用import就可以直接使用)

help(obj) 在線幫助, obj可是任何類型

callable(obj) 查看一個(gè)obj是不是可以像函數(shù)一樣調(diào)用

repr(obj) 得到obj的表示字符串,可以利用這個(gè)字符串eval重建該對(duì)象的一個(gè)拷貝

eval_r(str) 表示合法的python表達(dá)式,返回這個(gè)表達(dá)式

dir(obj) 查看obj的name space中可見(jiàn)的name

hasattr(obj,name) 查看一個(gè)obj的name space中是否有name

getattr(obj,name) 得到一個(gè)obj的name space中的一個(gè)name

setattr(obj,name,value) 為一個(gè)obj的name space中的一個(gè)name指向vale這個(gè)object

delattr(obj,name) 從obj的name space中刪除一個(gè)name

vars(obj) 返回一個(gè)object的name space。用dictionary表示

locals() 返回一個(gè)局部name space,用dictionary表示

globals() 返回一個(gè)全局name space,用dictionary表示

type(obj) 查看一個(gè)obj的類型

isinstance(obj,cls) 查看obj是不是cls的instance

issubclass(subcls,supcls) 查看subcls是不是supcls的子類

類型轉(zhuǎn)換函數(shù)

chr(i) 把一個(gè)ASCII數(shù)值,變成字符

ord(i) 把一個(gè)字符或者unicode字符,變成ASCII數(shù)值

oct(x) 把整數(shù)x變成八進(jìn)制表示的字符串

hex(x) 把整數(shù)x變成十六進(jìn)制表示的字符串

str(obj) 得到obj的字符串描述

list(seq) 把一個(gè)sequence轉(zhuǎn)換成一個(gè)list

tuple(seq) 把一個(gè)sequence轉(zhuǎn)換成一個(gè)tuple

dict(),dict(list) 轉(zhuǎn)換成一個(gè)dictionary

int(x) 轉(zhuǎn)換成一個(gè)integer

long(x) 轉(zhuǎn)換成一個(gè)long interger

float(x) 轉(zhuǎn)換成一個(gè)浮點(diǎn)數(shù)

complex(x) 轉(zhuǎn)換成復(fù)數(shù)

max(...) 求最大值

min(...) 求最小值

用于執(zhí)行程序的內(nèi)置函數(shù)

complie 如果一段代碼經(jīng)常要使用,那么先編譯,再運(yùn)行會(huì)更快。

2.和操作系統(tǒng)相關(guān)的調(diào)用

系統(tǒng)相關(guān)的信息模塊 import sys

sys.argv是一個(gè)list,包含所有的命令行參數(shù).

sys.stdout sys.stdin sys.stderr 分別表示標(biāo)準(zhǔn)輸入輸出,錯(cuò)誤輸出的文件對(duì)象.

sys.stdin.readline() 從標(biāo)準(zhǔn)輸入讀一行 sys.stdout.write("a") 屏幕輸出a

sys.exit(exit_code) 退出程序

sys.modules 是一個(gè)dictionary,表示系統(tǒng)中所有可用的module

sys.platform 得到運(yùn)行的操作系統(tǒng)環(huán)境

sys.path 是一個(gè)list,指明所有查找module,package的路徑.

操作系統(tǒng)相關(guān)的調(diào)用和操作 import os

os.environ 一個(gè)dictionary 包含環(huán)境變量的映射關(guān)系 os.environ["HOME"] 可以得到環(huán)境變量HOME的值

os.chdir(dir) 改變當(dāng)前目錄 os.chdir('d:\\outlook') 注意windows下用到轉(zhuǎn)義

os.getcwd() 得到當(dāng)前目錄

os.getegid() 得到有效組id os.getgid() 得到組id

os.getuid() 得到用戶id os.geteuid() 得到有效用戶id

os.setegid os.setegid() os.seteuid() os.setuid()

os.getgruops() 得到用戶組名稱列表

os.getlogin() 得到用戶登錄名稱

os.getenv 得到環(huán)境變量

os.putenv 設(shè)置環(huán)境變量

os.umask 設(shè)置umask

os.system(cmd) 利用系統(tǒng)調(diào)用,運(yùn)行cmd命令

操作舉例:

os.mkdir('/tmp/xx') os.system("echo 'hello' /tmp/xx/a.txt") os.listdir('/tmp/xx')

os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt') os.remove('/tmp/xx/b.txt') os.rmdir('/tmp/xx')

用python編寫(xiě)一個(gè)簡(jiǎn)單的shell

#!/usr/bin/python

import os, sys

cmd = sys.stdin.readline()

while cmd:

os.system(cmd)

cmd = sys.stdin.readline()

用os.path編寫(xiě)平臺(tái)無(wú)關(guān)的程序

os.path.abspath("1.txt") == os.path.join(os.getcwd(), "1.txt")

os.path.split(os.getcwd()) 用于分開(kāi)一個(gè)目錄名稱中的目錄部分和文件名稱部分。

os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') 全成路徑名稱.

os.pardir 表示當(dāng)前平臺(tái)下上一級(jí)目錄的字符 ..

os.path.getctime("/root/1.txt") 返回1.txt的ctime(創(chuàng)建時(shí)間)時(shí)間戳

os.path.exists(os.getcwd()) 判斷文件是否存在

os.path.expanduser('~/dir') 把~擴(kuò)展成用戶根目錄

os.path.expandvars('$PATH') 擴(kuò)展環(huán)境變量PATH

os.path.isfile(os.getcwd()) 判斷是否是文件名,1是0否

os.path.isdir('c:\Python26\temp') 判斷是否是目錄,1是0否

os.path.islink('/home/huaying/111.sql') 是否是符號(hào)連接 windows下不可用

os.path.ismout(os.getcwd()) 是否是文件系統(tǒng)安裝點(diǎn) windows下不可用

os.path.samefile(os.getcwd(), '/home/huaying') 看看兩個(gè)文件名是不是指的是同一個(gè)文件

os.path.walk('/home/huaying', test_fun, "a.c")

遍歷/home/huaying下所有子目錄包括本目錄,對(duì)于每個(gè)目錄都會(huì)調(diào)用函數(shù)test_fun.

例:在某個(gè)目錄中,和他所有的子目錄中查找名稱是a.c的文件或目錄。

def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是訪問(wèn)的目錄名稱

if filename in names: //names是一個(gè)list,包含dirname目錄下的所有內(nèi)容

print os.path.join(dirname, filename)

os.path.walk('/home/huaying', test_fun, "a.c")

文件操作

打開(kāi)文件

f = open("filename", "r") r只讀 w寫(xiě) rw讀寫(xiě) rb讀二進(jìn)制 wb寫(xiě)二進(jìn)制 w+寫(xiě)追加

讀寫(xiě)文件

f.write("a") f.write(str) 寫(xiě)一字符串 f.writeline() f.readlines() 與下read類同

f.read() 全讀出來(lái) f.read(size) 表示從文件中讀取size個(gè)字符

f.readline() 讀一行,到文件結(jié)尾,返回空串. f.readlines() 讀取全部,返回一個(gè)list. list每個(gè)元素表示一行,包含"\n"\

f.tell() 返回當(dāng)前文件讀取位置

f.seek(off, where) 定位文件讀寫(xiě)位置. off表示偏移量,正數(shù)向文件尾移動(dòng),負(fù)數(shù)表示向開(kāi)頭移動(dòng)。

where為0表示從開(kāi)始算起,1表示從當(dāng)前位置算,2表示從結(jié)尾算.

f.flush() 刷新緩存

關(guān)閉文件

f.close()

regular expression 正則表達(dá)式 import re

簡(jiǎn)單的regexp

p = re.compile("abc") if p.match("abc") : print "match"

上例中首先生成一個(gè)pattern(模式),如果和某個(gè)字符串匹配,就返回一個(gè)match object

除某些特殊字符metacharacter元字符,大多數(shù)字符都和自身匹配。

這些特殊字符是 。^ $ * + ? { [ ] \ | ( )

字符集合(用[]表示)

列出字符,如[abc]表示匹配a或b或c,大多數(shù)metacharacter在[]中只表示和本身匹配。例:

a = ".^$*+?{\\|()" 大多數(shù)metachar在[]中都和本身匹配,但"^[]\"不同

p = re.compile("["+a+"]")

for i in a:

if p.match(i):

print "[%s] is match" %i

else:

print "[%s] is not match" %i

在[]中包含[]本身,表示"["或者"]"匹配.用

表示.

^出現(xiàn)在[]的開(kāi)頭,表示取反.[^abc]表示除了a,b,c之外的所有字符。^沒(méi)有出現(xiàn)在開(kāi)頭,即于身身匹配。

-可表示范圍.[a-zA-Z]匹配任何一個(gè)英文字母。[0-9]匹配任何數(shù)字。

\在[]中的妙用。

\d [0-9]

\D [^0-9]

\s [ \t\n\r\f\v]

\S [^ \t\n\r\f\v]

\w [a-zA-Z0-9_]

\W [^a-zA-Z0-9_]

\t 表示和tab匹配, 其他的都和字符串的表示法一致

\x20 表示和十六進(jìn)制ascii 0x20匹配

有了\,可以在[]中表示任何字符。注:?jiǎn)为?dú)的一個(gè)"."如果沒(méi)有出現(xiàn)[]中,表示出了換行\(zhòng)n以外的匹配任何字符,類似[^\n].

regexp的重復(fù)

{m,n}表示出現(xiàn)m個(gè)以上(含m個(gè)),n個(gè)以下(含n個(gè)). 如ab{1,3}c和abc,abbc,abbbc匹配,不會(huì)與ac,abbbc匹配。

m是下界,n是上界。m省略表下界是0,n省略,表上界無(wú)限大。

*表示{,} +表示{1,} ?表示{0,1}

最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一個(gè)?.

match object的end可以得到匹配的最后一個(gè)字符的位置。

re.compile("a*").match('aaaa').end() 4 最大匹配

re.compile("a*?").match('aaaa').end() 0 最小匹配

使用原始字符串

字符串表示方法中用\\表示字符\.大量使用影響可讀性。

解決方法:在字符串前面加一個(gè)r表示raw格式。

a = r"\a" print a 結(jié)果是\a

a = r"\"a" print a 結(jié)果是\"a

使用re模塊

先用re.compile得到一個(gè)RegexObject 表示一個(gè)regexp

后用pattern的match,search的方法,得到MatchObject

再用match object得到匹配的位置,匹配的字符串等信息

RegxObject常用函數(shù):

re.compile("a").match("abab") 如果abab的開(kāi)頭和re.compile("a")匹配,得到MatchObject

_sre.SRE_Match object at 0x81d43c8

print re.compile("a").match("bbab")

None 注:從str的開(kāi)頭開(kāi)始匹配

re.compile("a").search("abab") 在abab中搜索第一個(gè)和re_obj匹配的部分

_sre.SRE_Match object at 0x81d43c8

print re.compile("a").search("bbab")

_sre.SRE_Match object at 0x8184e18 和match()不同,不必從開(kāi)頭匹配

re_obj.findall(str) 返回str中搜索所有和re_obj匹配的部分.

返回一個(gè)tuple,其中元素是匹配的字符串.

MatchObject的常用函數(shù)

m.start() 返回起始位置,m.end()返回結(jié)束位置(不包含該位置的字符).

m.span() 返回一個(gè)tuple表示(m.start(), m.end())

m.pos(), m.endpos(), m.re(), m.string()

m.re().search(m.string(), m.pos(), m.endpos()) 會(huì)得到m本身

m.finditer()可以返回一個(gè)iterator,用來(lái)遍歷所有找到的MatchObject.

for m in re.compile("[ab]").finditer("tatbxaxb"):

print m.span()

高級(jí)regexp

| 表示聯(lián)合多個(gè)regexp. A B兩個(gè)regexp,A|B表示和A匹配或者跟B匹配.

^ 表示只匹配一行的開(kāi)始行首,^只有在開(kāi)頭才有此特殊意義。

$ 表示只匹配一行的結(jié)尾

\A 表示只匹配第一行字符串的開(kāi)頭 ^匹配每一行的行首

\Z 表示只匹配行一行字符串的結(jié)尾 $匹配第一行的行尾

\b 只匹配詞的邊界 例:\binfo\b 只會(huì)匹配"info" 不會(huì)匹配information

\B 表示匹配非單詞邊界

示例如下:

print re.compile(r"\binfo\b").match("info ") #使用raw格式 \b表示單詞邊界

_sre.SRE_Match object at 0x817aa98

print re.compile("\binfo\b").match("info ") #沒(méi)有使用raw \b表示退格符號(hào)

None

print re.compile("\binfo\b").match("\binfo\b ")

_sre.SRE_Match object at 0x8174948

分組(Group) 示例:re.compile("(a(b)c)d").match("abcd").groups() ('abc', 'b')

#!/usr/local/bin/python

import re

x = """

name: Charles

Address: BUPT

name: Ann

Address: BUPT

"""

#p = re.compile(r"^name:(.*)\n^Address:(.*)\n", re.M)

p = re.compile(r"^name:(?P.*)\n^Address:(?P.*)\n", re.M)

for m in p.finditer(x):

print m.span()

print "here is your friends list"

print "%s, %s"%m.groups()

Compile Flag

用re.compile得到RegxObject時(shí),可以有一些flag用來(lái)調(diào)整RegxObject的詳細(xì)特征.

DOTALL, S 讓.匹配任意字符,包括換行符\n

IGNORECASE, I 忽略大小寫(xiě)

LOCALES, L 讓\w \W \b \B和當(dāng)前的locale一致

MULTILINE, M 多行模式,只影響^和$(參見(jiàn)上例)

VERBOSE, X verbose模式

怎么用python計(jì)算股票

作為一個(gè)python新手,在學(xué)習(xí)中遇到很多問(wèn)題,要善于運(yùn)用各種方法。今天,在學(xué)習(xí)中,碰到了如何通過(guò)收盤(pán)價(jià)計(jì)算股票的漲跌幅。

第一種:

讀取數(shù)據(jù)并建立函數(shù):

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

總結(jié):python是一種非常好的編程語(yǔ)言,一般而言,我們可以運(yùn)用構(gòu)建相關(guān)函數(shù)來(lái)實(shí)現(xiàn)自己的思想,但是,眾所周知,python中里面的有很多科學(xué)計(jì)算包,里面有很多方法可以快速解決計(jì)算的需要,如上面提到的pandas中的pct_change()。因此在平時(shí)的使用中應(yīng)當(dāng)學(xué)會(huì)尋找更好的方法,提高運(yùn)算速度。

當(dāng)前文章:python炒股常用函數(shù) python炒股軟件開(kāi)發(fā)
標(biāo)題網(wǎng)址:http://jinyejixie.com/article8/hejhip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄建站公司、靜態(tài)網(wǎng)站、用戶體驗(yàn)商城網(wǎng)站、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)