#查找index函數的幫助
help(str.index)
#for循環和break語句
from math import sqrt
for i in range(2,101):
flag=1
k=int(sqrt(i))
for j in range(2,k+1):
if i%j==0:
flag=0
break
if(flag):
print i
#continue語句,滿足條件跳出continue后面的語句
sumA=0
i=1
while i<=5:
sumA+=i
i+=1
if i==3:
continue
print 'i=%d,sum=%d'%(i,sumA)
#循環中的else語句
k=5
for i in range(1,10):
if k==3:
break
else:
print i
#自定義函數/素材1-100間素數
from math import sqrt
def isprime(x):
if x==1:
return False
k=int(sqrt(x))
for j in range(2,k+1):
if x%j==0:
return False
return True
for i in range(2,101):
if isprime(i):
print i
def f(x,y=True): #默認參數要放在參數列表的最后
'x and y both correct words or not'
if y:
print x,'and y both correct'
print x,'is Ok'
f(68)
f(68,False)
#傳遞函數
def addme2me(x):
return(x+x)
def self(f,y):
print f(y)
self(addme2me,2.2)
#lambda函數
my_add=lambda x,y:x+y
my_add(5,6)
#數據獲取與表示
f=open(r'E:\360Downloads\firstpro.txt','w') #新建一個文件
f.write('hello,world') #f為對象,write寫入文件
f.close()
f=open(r'E:\360Downloads\firstpro.txt','r') #r代表讀出
p1=f.read(5) #5代表讀出的字節數
p2=f.read()
print p1,p2
f.close
f1=open(r'E:\360Downloads\companies.txt')
cname=f1.readlines()
for i in range(0,len(cname)):
cname[i]=str(i+1)+''+cname[i]
f1.close
f2=open(r'E:\360Downloads\scompanies.txt','w')
f2.writelines(cname)
f2.close()
#網絡數據獲取
import urllib
r=urllib.urlopen('http://z.cn/')
html=r.read
#序列
#標准類型運算符
'apple'<'banana'
[1,2,3]!=[4,5,6]#值比較
atuple=('ba',126.4)
btuple=atuple
btuple is not atuple#對象身份比較
('86.40'<'122.64') and ('apple'<'banana')#布爾運算
#序列類型運算符
week=['mondy','tuesday','wednesday','thursday','firday','satuday','sunday']
print week[1],week[-2],'\n',week[1:4],'\n',week[:6],'\n',week[::-1]#序列值的序號是從0開始到N-1或者從-1到N
'apple'*3
'ba' in ('ba','the boeingcompany')
#序列類型轉換工廠函數
list('hello,world')#將字符串轉成列表
tuple('hello,world')#將字符串轉成元組
#字符串
s1='''hello
'a'
''b''
world!'''
s1 #三引號可以保持里面字符串的原貌
s2=r'd:\python\a.py'
s2
ccode=['axp','ba','cat','csco','cvx']
cprice=['86.40','122.64','99.44','23.78','115.91']
for i in range(5):
print '%d%8s:%8s' %(i,ccode[i],cprice[i]) #%8s指的占8個字符
print 'i get %d%%!' %32 #兩個%%會留下一個
astr='what do you think of this saying "no pain,no gain"?'
tempstr=astr.split('\"')[1] #\"為轉義字符
if tempstr.istitle():
print 'it is title format'
else:
print 'it is not title format'
print tempstr.title()
astr='\101\t\x41\n'#\八進制數000代表的字符 \t代表橫向制表符
print astr
#列表
jscores=[9,9,8.5,10,7,8,8,9,8,10]
ascore=9
jscores.sort()
jscores.pop() #去掉最高分
jscores.pop(0) #去掉最低分
jscores.append(ascore) #合並
avescore=sum(jscores)/len(jscores)
print avescore
week=['monday','tuesday','wednesday','thursday','firday']
weekend=['saturday','sunday']
week.extend(weekend)#extend合並函數
for i,j in enumerate(week):#enumerate函數 產生從0開始的序列
print i+1,j
numlist=[3,11,5,8,16,1]
numlist.sort(reverse=True) #按逆序排列
numlist
fruitlist=['apple','banana','pear','lemon','avocado']
fruitlist.sort(key=len)
fruitlist #按字符長度排序
#列表解析
[x**2 for x in range(10)]
[x**2 for x in range(10) if x**2<50]
[(x+1,y+1) for x in range(2) for y in range(2)]
#元組
atruple=(1,2,3)
atruple
atruple[1:]
len(atruple)
btruple=(['monday',1],2,3)
btruple[0][1]
2014, #創建元組2014
alist=['axp','ba','cat']
atruple=('axp','ba','cat')
alist[1]='alibaba'
atruple[1]='alibaba'#元組是不可變的,列表是可變的
alist=[3,5,2,4]
alist.sort() #改變原來列表
alist
alist=[3,5,2,4]
sorted(alist) #sorted只是新生成一個列表的副本,原來的列表並沒有改變
alist
#但元組就只能使用sorted,不能用sort,因為不能改變元組
atruple=(3,5,2,4)
atruple.sort #會報錯
def func(args1,args2='world'):#元組作為函數形式的參數
print args1,args2
func('hello',)
func(args2='apple',args1='hello')
def func(args1,*args):
print args1
print args
func('hello,','wangdachui','liuyuan','linlin')
#返回值類型為元組的函數enumerate()、coerce()
#字典
ainfo={'wangdachui':3000,'niuyun':2000,'linlin':3000} #直接創建字典
info=[('wangdachui',3000),('niuyun',2000),('linlin',3000)]
binfo=dict(info) #利用dict函數創建字典
cinfo=dict([['wangdachui',3000],['niuyun',2000],['linlin',3000]])
dinfo=dict(wangdachui=3000,niuyun=2000,linlin=3000)
adict={}.fromkeys(('wangdachui','niuyun','linlin'),3000) #fromkeys函數將所有的keys初始值設置為3000
adict
plist=[('axp','american express','86.40'),('ba','the boeing company','122.64'),('cat','caterpillar inc.','99.44')]
alist[]
blist[]
for i in range(2):
astr=plist[i][0]
bstr=plist[i][2]
alist.append(astr)
blist.append(bstr)
adict=dict(zip(alist,blist)) #zip函數
#字典的使用
#字典的基本操作
ainfo={'wangdachui':3000,'niuyun':2000,'linglin':4500,'tianqi':8000}
ainfo['niuyun'] #鍵值查找
ainfo['niuyun']=9999#更新
ainfo
ainfo['funyun']=1000#查找
'mayun' in ainfo #成員判斷
del ainfo #刪除字典
ainfo={'wangdachui':3000,'niuyun':2000,'linglin':4500,'tianqi':8000}
for key in ainfo.keys():
print 'name=%s,salary=%s' %(key,ainfo[key])
"niuyun's salary is %(niuyun)s." %ainfo #%(key) 格式說明符 %字典對象名
ainfo={'wangdachui':3000,'niuyun':2000,'linglin':4500,'tianqi':8000}
ainfo.keys()
ainfo.values()
ainfo={'wangdachui':3000,'niuyun':2000,'linglin':4500,'tianqi':8000}
binfo={'wangdachui':3000,'niuyun':9999,'linglin':4500,'wangzi':8000}
ainfo.update(binfo)#update函數 快速更改
ainfo
astock={'axp':86.4,'ba':122.64}
bstock=astock
astock={} #此時只會講astock清空,不會將bstock清空,需要用clear函數才會將關聯的都刪除
bstock
astock.clear()
bstock
#字典作為函數的形式參數
def func(args1,*argst,**argsd): #一個*是可變長位置參數,**可變長關鍵字參數
print args1
print argst
print argsd
func('hello','wangdachui','niuyun','linglin',a1=1,a2=2,a3=3)
#集合
names=['wangdachui','niuyun','wangzi','wangdachui','lingling','niuyun']
namesset=set(names) #set刪除重復對象,因為集合的元素都不重復
namesset
aset=set('hello')
aset
fset=frozenset('hello')
fset
#集合比較
aset=set('sunrise')
bset=set('sunset')
'u' in aset
aset==bset
set('sun')<aset
aset&bset #集合關系運算
aset|bset
aset-bset
aset^bset #不能同時屬於兩個集合
aset-=set('sun') #運算符可復合
#集合內建函數
aset=set('sunrise')
bset=set('sunset')
aset.issubset(bset) #是否為子集
aset.intersection(bset) #交集
aset.difference(bset)#差補
cset=aset.copy() #拷貝
#面向可變集合的函數
aset=set('sunrise')
aset.add('!')
aset
aset.update('yeah')
aset.remove('!')
aset.clear()
#擴展庫scipy
import numpy as np
xarray=np.ones((3,4)) #生產3*4的全部為1的矩陣
xarry
from scipy import linalg
arr=np.array([[1,2],[3,4]])
linalg.det(arr)
#ndarry
from numpy import *
aarray=array([1,2,3])
aarray
barray=array([(1,2,3),(4,5,6)])
barray
zeros((2,2))
arange(1,5,0.5)
aarray=array([(1,2,3),(4,5,6)])
sin(aarray)
aarray.shape #數組的維度
barray=aarray.reshape(3,2)
barray
aarray.sum()
aarray.sum(axis=0) #通過設置參數,分別行、列求和
aarray.sum(axis=1)
carray=array([1,3,5])
carray[:1] #切片功能
darray=array([2,4,6])
earray=array([7,8,9])
where(carray>2,darray,earray) #where函數
def fun(x,y):
return (x+1)*(y+1)
arr=fromfunction(fun,(9,9)) #fromfunction函數
arr
#ufunc函數能對數組中每個元素進行操作,包括add等函數
import numpy as np
a=np.arange(1,5)
b=np.arange(2,6)
np.add(a,b)
np.add.accumulate([2,3,8])
np.multiply.accumulate([2,3,8])
#series
#series 類似於一維數組的對象,由數據和索引組成
from pandas import Series
import pandas as pd
aser=pd.Series([1,2.0,'a'])
bser=pd.Series(['apple','peach','lemon'],index=[1,2,3])
bser.index
bser.values
aser['a']
import numpy as np
np.exp(aser)
#series數據對齊
data={'axp':'86','csco':'122','ba':'94'}
sindex=['axp','csco','aapl']
aser=pd.Series(data,index=sindex)
aser
pd.isnull(aser)
#series的name屬性
aser.name='cnames'
aser.index.name='volume'
aser
#dataframe表結構
#大致可以看成共享一個index的series的集合
data={'name':['wangdachui','linlin','niuyun'],'pay':[4000,5000,6000]}
frame=pd.DataFrame(data)
frame['name']
frame.pay
frame.ix[2] #索引所對應的數據
#dataframe對象的修改和刪除
frame['name']='admin' #對name下的所有元素進行更改
del frame['pay']
frame
frame.index.name='no'
#便捷數據獲取
#便捷網絡數據 雅虎財經
from matplotlib.finance import quotes_historical_yahoo
from datetime import date
import pandas as pd
today=date.today()
start=(today.year-1,today.month,today.day)
quotes=quotes_historical_yahoo('AXP',start,today)
df=pd.DataFrame(quotes)
print df
#自然語言工具包NLTK
from nltk.corpus import gutenberg
import nltk
print gutenberg.fileids()
#數據准備
from matplotlib.finance import quotes_historical_yahoo
from datetime import date
import pandas as pd
today=date.today()
start=(today.year-1,today.month,today.day)
quotes=quotes_historical_yahoo('AXP',start,today)
fields=['date','open','close','high','low','volume']
quotesdf=pd.DataFrame(quotes,columns=fields) #通過columns數據加屬性名
quotesdf=pd.DataFrame(quotes,index=range(1,len(quotes)+1,columns=fields)
print quotesdf
from datetime import date
from datetime import datetime
y=datetime.strftime(x,'%Y-%m-%d') #將日期轉換成固定格式
import pandas as pd
dates=pd.date_range('20141001',periods=7) #自己創建時間序列
dates
#數據顯示
djidf.index
djidf.columns
djidf.values
djidf.describe#顯示數據描述
djidf.head(5)#顯示前五行數據
djidf.tail(5)
#數據選擇
quotesdf[u'2013-12-02':u'2013-12-06'] #dataframe可以使用索引選擇
djidf['code']
djidf.loc[1:5,] #通過loc通過標簽選擇數據,第一個參數是行標簽,第二個參數是列標簽
djidf.loc[:,['code','lasttrade']] #前面這個:需要
djidf.loc[1:6,[0,2]] #通過的行位置,列位置選擇標簽
quotesdf[quotesdf.index>=u'2014-01-01']
quotesdf[(quotesdf.index>=u'2014-01-01')&(quotesdf.close>=95)]#條件篩選
#簡單統計預處理
djidf.mean(columns='lasttrade')#最近一次成交價的平均值
djidf[djidf.lasttrade>=120].name#最近一次成交價大於等於120的公司名
len(quotesdf[quotesdf.close>quotesdf.open]) #股票漲的天數
len(quotesdf)-131
status=np.sign(np.diff(quotesdf.close)) #np.diff相鄰兩天數據的差
status[np.where(status==1.)].size
djidf.sort(columns='lasttrade')[27:].name#排序結果列出前三甲的公司名 ,一共是30條記錄,所以是[27:]
t=quotesdf[(quotesdf.index>=u'2014-01-01')&(quotesdf.index<=u'2014-02-01')]
len(t) #統計2014年1月份的股票開盤天數
#分組
tempdf.groupby('month').count().month #每個月的股票開盤天數
tempdf.groupby('month').sum().volume #每個月的股票總成交量
g=tempdf.groupby('month')
gvolume=g['volume']
print gvolume.sum()
#合並
#append追加 縱向
p=quotesdf[:2]
q=quotesdf[u'2014-01-01':u'2014-01-05']
p.append(q)
#concat連接
pieces=[tempdf[:5],tempdf[len(tempdf)-4:]]
pd.concat(pieces)
#兩個不同邏輯結構的對象能否連接 縱向
piece1=quotesdf[:3]
piece2=tempdf[:3]
pd.concat([piece1,piece2],ignore_index=True)
#join連接 橫向
pd.merge(djidf,akdf,on='code')
pd.merge.(djidf,akdf,on='code').drop(['lasttrade'],axis=1)
#聚類分析
from pylab import *
from scipy.cluster.vq import *
list1=[88,74,96,85]
list2=[92,99,95,94]
list3=[91,87,99,95]
list4=[78,99,97,81]
list5=[88,78,98,84]
list6=[100,95,100,92]
data=vstack((list1,list2,list3,list4,list5,list6))
centroids,_=kmeans(data,2)
result,_=vq(data,centroids)
print result