#查找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