bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

python炒股常用函數 python炒股軟件開發

如何用Python和機器學習炒股賺錢

相信很多人都想過讓人工智能來幫你賺錢,但到底該如何做呢?瑞士日內瓦的一位金融數據顧問 Ga?tan Rickter 近日發表文章介紹了他利用 Python 和機器學習來幫助炒股的經驗,其最終成果的收益率跑贏了長期處于牛市的標準普爾 500 指數。雖然這篇文章并沒有將他的方法完全徹底公開,但已公開的內容或許能給我們帶來如何用人工智能炒股的啟迪。

創新互聯公司是一家專注于成都做網站、網站制作與策劃設計,甘德網站建設哪家好?創新互聯公司做網站,專注于網站建設十載,網設計領域的專業建站公司;建站業務涵蓋:甘德等地區。甘德做網站價格咨詢:18982081108

我終于跑贏了標準普爾 500 指數 10 個百分點!聽起來可能不是很多,但是當我們處理的是大量流動性很高的資本時,對沖基金的利潤就相當可觀。更激進的做法還能得到更高的回報。

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

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

在研究者給出的許多有見地的觀察中,其中有一個總結很突出:

「(股價)運動可能會集中于有一些共同之處的股票上,但這些共同之處不一定要是經濟基礎。」

我就想,能不能基于通常所用的指標之外的其它指標來劃分股票。我開始在數據庫里面挖掘,幾周之后我發現了一個,其包含了一個分數,描述了股票和元素周期表中的元素之間的「已知和隱藏關系」的強度。

我有計算基因組學的背景,這讓我想起了基因和它們的細胞信號網絡之間的關系是如何地不為人所知。但是,當我們分析數據時,我們又會開始看到我們之前可能無法預測的新關系和相關性。

選擇出的涉及細胞可塑性、生長和分化的信號通路的基因的表達模式

和基因一樣,股票也會受到一個巨型網絡的影響,其中各個因素之間都有或強或弱的隱藏關系。其中一些影響和關系是可以預測的。

我的一個目標是創建長的和短的股票聚類,我稱之為「籃子聚類(basket clusters)」,我可以將其用于對沖或單純地從中獲利。這需要使用一個無監督機器學習方法來創建股票的聚類,從而使這些聚類之間有或強或弱的關系。這些聚類將會翻倍作為我的公司可以交易的股票的「籃子(basket)」。

首先我下載了一個數據集:Public Company Hidden Relationship Discovery,這個數據集基于元素周期表中的元素和上市公司之間的關系。

然后我使用了 Python 和一些常用的機器學習工具——scikit-learn、numpy、pandas、matplotlib 和 seaborn,我開始了解我正在處理的數據集的分布形狀。為此我參考了一個題為《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())

輸出:簡單看看前面 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$

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

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()

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

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

已解釋方差=總方差-殘差方差(explained variance = total variance - residual variance)。應該值得關注的 PCA 投射組件的數量可以通過已解釋方差度量(Explained Variance Measure)來引導。Sebastian Raschka 的關于 PCA 的文章對此進行了很好的描述,參閱: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()

輸出:

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

使用 scikit-learn 的 PCA 模塊,讓我們設 n_components = 9。代碼的第二行調用了 fit_transform 方法,其可以使用標準化的電影數據 X_std 來擬合 PCA 模型并在該數據集上應用降維(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()

輸出:

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

現在,我們來試試 K-均值,看看我們能不能在下一章節可視化任何明顯的聚類。

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

我們將使用 PCA 投射數據來實現一個簡單的 K-均值。

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

# 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()

輸出:

這個 K-均值散點圖看起來更有希望,好像我們簡單的聚類模型假設就是正確的一樣。我們可以通過這種顏色可視化方案觀察到 3 個可區分開的聚類。

使用 seaborn 方便的 pairplot 函數,我可以以成對的方式在數據框中自動繪制所有的特征。我們可以一個對一個地 pairplot 前面 3 個投射并可視化:

# 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()

輸出:

構建籃子聚類(Basket Clusters)

你應該自己決定如何微調你的聚類。這方面沒有什么萬靈藥,具體的方法取決于你操作的環境。在這個案例中是由隱藏關系所定義的股票和金融市場。

一旦你的聚類使你滿意了,你就可以設置分數閾值來控制特定的股票是否有資格進入一個聚類,然后你可以為一個給定的聚類提取股票,將它們作為籃子進行交易或使用這些籃子作為信號。你可以使用這種方法做的事情很大程度就看你自己的創造力以及你在使用深度學習變體來進行優化的水平,從而基于聚類或數據點的概念優化每個聚類的回報,比如 short interest 或 short float(公開市場中的可用股份)。

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

看到聚類和材料及它們的供應鏈相關確實很有意思,正如這篇文章說的一樣:Zooming in on 10 materials and their supply chains - Fairphone

我僅僅使用該數據集操作了 Cobalt(鈷)、Copper(銅)、Gallium(鎵)和 Graphene(石墨烯)這幾個列標簽,只是為了看我是否可能發現從事這一領域或受到這一領域的風險的上市公司之間是否有任何隱藏的聯系。這些籃子和標準普爾的回報進行了比較。

通過使用歷史價格數據(可直接在 Quantopian、Numerai、Quandl 或 Yahoo Finance 使用),然后你可以匯總價格數據來生成預計收益,其可使用 HighCharts 進行可視化:

我從該聚類中獲得的回報超過了標準普爾相當一部分,這意味著你每年的收益可以比標準普爾還多 10%(標準普爾近一年來的漲幅為 16%)。我還見過更加激進的方法可以凈掙超過 70%。現在我必須承認我還做了一些其它的事情,但因為我工作的本質,我必須將那些事情保持黑箱。但從我目前觀察到的情況來看,至少圍繞這種方法探索和包裝新的量化模型可以證明是非常值得的,而其唯一的缺點是它是一種不同類型的信號,你可以將其輸入其它系統的流程中。

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

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

我在這類模型上的下一次迭代應該會包含一個用于自動生成特征組合或獨特列表的單獨算法。也許會基于近乎實時的事件,這可能會影響那些具有只有配備了無監督學習算法的人類才能預測的隱藏關系的股票組。

python 常用的系統函數有哪些

1.常用內置函數:(不用import就可以直接使用)

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

callable(obj) 查看一個obj是不是可以像函數一樣調用

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

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

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

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

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

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

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

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

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

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

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

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

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

類型轉換函數

chr(i) 把一個ASCII數值,變成字符

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

oct(x) 把整數x變成八進制表示的字符串

hex(x) 把整數x變成十六進制表示的字符串

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

list(seq) 把一個sequence轉換成一個list

tuple(seq) 把一個sequence轉換成一個tuple

dict(),dict(list) 轉換成一個dictionary

int(x) 轉換成一個integer

long(x) 轉換成一個long interger

float(x) 轉換成一個浮點數

complex(x) 轉換成復數

max(...) 求最大值

min(...) 求最小值

用于執行程序的內置函數

complie 如果一段代碼經常要使用,那么先編譯,再運行會更快。

2.和操作系統相關的調用

系統相關的信息模塊 import sys

sys.argv是一個list,包含所有的命令行參數.

sys.stdout sys.stdin sys.stderr 分別表示標準輸入輸出,錯誤輸出的文件對象.

sys.stdin.readline() 從標準輸入讀一行 sys.stdout.write("a") 屏幕輸出a

sys.exit(exit_code) 退出程序

sys.modules 是一個dictionary,表示系統中所有可用的module

sys.platform 得到運行的操作系統環境

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

操作系統相關的調用和操作 import os

os.environ 一個dictionary 包含環境變量的映射關系 os.environ["HOME"] 可以得到環境變量HOME的值

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

os.getcwd() 得到當前目錄

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 得到環境變量

os.putenv 設置環境變量

os.umask 設置umask

os.system(cmd) 利用系統調用,運行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編寫一個簡單的shell

#!/usr/bin/python

import os, sys

cmd = sys.stdin.readline()

while cmd:

os.system(cmd)

cmd = sys.stdin.readline()

用os.path編寫平臺無關的程序

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

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

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

os.pardir 表示當前平臺下上一級目錄的字符 ..

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

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

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

os.path.expandvars('$PATH') 擴展環境變量PATH

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

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

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

os.path.ismout(os.getcwd()) 是否是文件系統安裝點 windows下不可用

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

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

遍歷/home/huaying下所有子目錄包括本目錄,對于每個目錄都會調用函數test_fun.

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

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

if filename in names: //names是一個list,包含dirname目錄下的所有內容

print os.path.join(dirname, filename)

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

文件操作

打開文件

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

讀寫文件

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

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

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

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

f.seek(off, where) 定位文件讀寫位置. off表示偏移量,正數向文件尾移動,負數表示向開頭移動。

where為0表示從開始算起,1表示從當前位置算,2表示從結尾算.

f.flush() 刷新緩存

關閉文件

f.close()

regular expression 正則表達式 import re

簡單的regexp

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

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

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

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

字符集合(用[]表示)

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

a = ".^$*+?{\\|()" 大多數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

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

表示.

^出現在[]的開頭,表示取反.[^abc]表示除了a,b,c之外的所有字符。^沒有出現在開頭,即于身身匹配。

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

\在[]中的妙用。

\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 表示和十六進制ascii 0x20匹配

有了\,可以在[]中表示任何字符。注:單獨的一個"."如果沒有出現[]中,表示出了換行\n以外的匹配任何字符,類似[^\n].

regexp的重復

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

m是下界,n是上界。m省略表下界是0,n省略,表上界無限大。

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

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

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

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

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

使用原始字符串

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

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

a = r"\a" print a 結果是\a

a = r"\"a" print a 結果是\"a

使用re模塊

先用re.compile得到一個RegexObject 表示一個regexp

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

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

RegxObject常用函數:

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

_sre.SRE_Match object at 0x81d43c8

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

None 注:從str的開頭開始匹配

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

_sre.SRE_Match object at 0x81d43c8

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

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

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

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

MatchObject的常用函數

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

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

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

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

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

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

print m.span()

高級regexp

| 表示聯合多個regexp. A B兩個regexp,A|B表示和A匹配或者跟B匹配.

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

$ 表示只匹配一行的結尾

\A 表示只匹配第一行字符串的開頭 ^匹配每一行的行首

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

\b 只匹配詞的邊界 例:\binfo\b 只會匹配"info" 不會匹配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 ") #沒有使用raw \b表示退格符號

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時,可以有一些flag用來調整RegxObject的詳細特征.

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

IGNORECASE, I 忽略大小寫

LOCALES, L 讓\w \W \b \B和當前的locale一致

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

VERBOSE, X verbose模式

怎么用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()。因此在平時的使用中應當學會尋找更好的方法,提高運算速度。

當前文章:python炒股常用函數 python炒股軟件開發
標題網址:http://vcdvsql.cn/article8/hejhip.html

成都網站建設公司_創新互聯,為您提供網站收錄建站公司靜態網站用戶體驗商城網站營銷型網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設