利用 pandas 做一些简单的数据分析

import pandasas pd

import matplotlib.pyplotas plt

import numpyas np

from scipy.statsimport percentileofscore

from datetimeimport *

pd.options.display.max_columns= 777

#  通过列表 创建periodindex

data= pd.read_csv(r'pydata-notebook-master\examples\macrodata.csv')

index= pd.PeriodIndex(year = data['year'] ,quarter=data['quarter'] ,freq='Q-DEC')

data.index= index

rng= pd.date_range('2019/1/1',periods=100,freq='D')

ts= pd.Series(np.random.randn(len(rng)),index=rng)

ts= ts.resample('M',kind='period').mean()

# print(ts[:5])

''' 降采样'''

new= pd.date_range('2019/1/1',freq='M',periods=12)

ps= pd.Series(np.arange(len(new)),index=new)

pv= pd.Series(np.arange(len(new)),index=new)

# ohlc open high low close  四个值

# ps = ps.resample('5min',closed='right',label='right').ohlc()

# 分组采样

ps= ps.groupby(lambda x:x.weekday).sum()

pv= pv.groupby(lambda x:x.month).sum()

# 升采样

frame= pd.DataFrame(np.random.randn(2,4),index=pd.date_range('2019/3/1',freq='W-WED',periods=2))

fr= frame.resample('D',limit=2).ffill()

tr= frame.resample('w-thu').sum()

# 通过时期进行重采样

ftime= pd.DataFrame(np.random.randn(24,4),

index=pd.period_range('2018/1','2019/12',freq='M'),

columns=['Colorado','Texas','New York','Ohio']

)

ann_ftime= ftime.resample('A-DEC').mean()

q_ftime= ann_ftime.resample('M').mean().ffill()

print('--------------------------------')

close_px_all= pd.read_csv(r'pydata-notebook-master\examples\stock_px.csv',index_col=0,parse_dates=True)

close_px= close_px_all[['AAPL','MSFT','XOM']]

# close_px.index = close_px_all.index

cls= close_px.resample('B').ffill()

# cls.ix['1990'].plot(color='orange',title='Yahoo Finance',alpha=0.5)

# cls[['AAPL','MSFT']].ix['1990':'1997'].plot(color='red',alpha=0.6)

# aapl_px = close_px['AAPL'].resample('Q-DEC').ffill()

# aapl_px.ix['1990':'2000'].plot(color='blue',alpha=0.7)

# pd.rolling(close_px['AAPL'],250).plot()

# close_px['AAPL'].ix['2000'].rolling(3).mean().plot()

# close_px.rolling(40).mean().plot(logy=True)


# 指数加权运算

fig,axes = plt.subplots(2,1,figsize=(12,7))

aapl_px = close_px['AAPL'].ix['2000':'2005']

ma60 = aapl_px.rolling(60,min_periods=50).mean()

ewma60 = pd.DataFrame.ewm(aapl_px,span=60).mean()

# print(ewma60[:3])

aapl_px.plot(style='-',ax=axes[0])

ma60.plot(style='--',ax=axes[0])

aapl_px.plot(style='-',ax=axes[1])

ewma60.plot(style='--',ax=axes[1])

axes[0].set_title('Simaple MA')

axes[1].set_title('Exponentially-wiighted MA')


spx= close_px_all['SPX']

spx_rets= spx/ spx.shift(1)-1

returns= close_px.pct_change()

# min_periods 周期值

corr= returns['AAPL'].rolling(125,min_periods=100).corr(spx_rets)

# 多列数据之间的比较

spx_corr= returns.rolling(125,min_periods=100).corr(spx_rets)

# corr.plot()

# spx_corr.plot()

'''

# 百分之2的回报率的百分等级score_at = lambda x:percentileofscore(x,0.02)

result = returns['AAPL'].rolling(250).apply(score_at)

'''

# result.plot()

plt.xlabel('Time Line')

plt.xticks(rotation=90,fontsize=8)

plt.ylabel('Number Information')

# plt.title('Yahoo Finance')

plt.tight_layout()

frame= pd.DataFrame(np.random.randn(5,4),index=pd.date_range('2019/4/1',freq='D',periods=5))

f1= pd.DataFrame(frame[0],index=frame.index)

f2= pd.DataFrame(frame[1],index=frame.index.shift(1))

f3= f2.reindex(f1.index ,method='ffill')

infl= pd.date_range('2019/1/1 09:30' ,'2019/1/1 15:50' ,freq='T')

rng= infl.append([infl+ pd.offsets.BDay(i)for iin range(1,4)])

tsrng= pd.Series(np.arange(len(rng)),index=rng)

# print(tsrng[time(10,0)])

indexer= np.sort(np.random.permutation(len(tsrng))[700:])

irr_ts= tsrng.copy()

irr_ts[indexer]= np.nan

print(irr_ts.at_time(time(10,0)))

select_time= pd.date_range('2019/1/1 10:00',freq='B',periods=4)

irr_ts= irr_ts.asof(select_time)

print(irr_ts[time(10,0)])

print(np.ones((3,4))*2)

#收益指数和累计收益的计算

price= web.get_data_yahoo('AAPL','2018-01-01')['Adj Close']

# 两个时间点的累计百分比回报

price_adj= price['2018-10-01']/ price['2018-03-01']- 1

# 计算收益指数 方法一 获取当前数据的前后的百分比

returns= price.pct_change()

# 计算收益指数cumprod

re_index= (1 + returns).cumprod()

re_index[0]= 1

# 计算出某段时间的收益指数

m_returns= re_index.resample('BM',how='last').pct_change()

# 方法二

m_ret= (1 + returns).resample('M',how='prod',kind='period')- 1

print(m_ret)


# 数据分组分析

N= 1000

# 创建一个随机大写字符串

def rand(n):

    choices= string.ascii_uppercase

jionres= ''.join([random.choice(choices)for _in range(n)])

return jionres

# 生成N组 随机串

tickers= np.array([rand(5)for _in range(N)])

M= 500

df= pd.DataFrame({'Moement':np.random.randn(M)/ 200 - 0.2,

'Value':np.random.randn(M)/ 200 + 0.21,

'Short':np.random.randn(M)/ 200 - 0.12,

},index=tickers[:M])

ids_names= np.array(['FINANCIAL','TECH'])

# 生成N组 随机数字

sampler= np.random.randint(0,len(ids_names),N)

# 创建一个匹配  tickers 的series

industries= pd.Series(ids_names[sampler],index=tickers,name='industry')

# 分组 方法一

# df['bygroup'] = industries

# by_indus = df.groupby('bygroup')

# 分组

by_indus= df.groupby(industries)

def zscore(group):

    return (group - group.mean())/ group.std()

# zscore = by_indus.apply(zscore)

# zs_group = zscore.groupby(industries).agg(['mean','std'])

# 通过 rank 函数进行平均排名 然后进行聚合运算

id_rank= by_indus.rank(ascending=False)

rank_group= id_rank.groupby(industries).agg(['min','max'])

ran_std= by_indus.apply(lambda x:zscore(x.rank()))

print(ran_std)

这里是需要用到的数据分析的数据文件:

链接:https://pan.baidu.com/s/11ryc7VoD3VbtDMl6-kkvig

提取码:1n0e

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351