python数据分析

numpy & pandas

数据结构

Series

通过[]来操作索引

DataFrame

iloc用于整数索引,loc用于标签索引
df2.loc[:,“上证”],df.loc[:,[“上证”,深证]],df.iloc[:,3]来访问,注意loc包含最后而iloc不包含
对列的访问可以通过df[“列名”],df.列名来获取一个Series,通过df[[“列名1”,“列名2”]]来获取多列
通过df.iloc[5,-1]来获取指定单元格数据,注意要么用标签索引,要么整数索引.如果不同则要转换一致df.loc[[],[]]
df[‘列名’]=“列值”,使用列值初始化所有单元格或者使用一个长度相同的列来初始化该列

操作

删除

drop

删除行,多行,通过参数axis=1来删除列

drop_duplicates

去重

dropna

删除缺失值

sort

sort_index ,sort_value 通过by来指定列名,同样通过axis=1来翻转成对一行数据排序

fillna

填充缺失值

set_index reset_index

set_index可以设置索引,当append设置为true时是添加
reset_index把索引还原

query

类似于where条件,相对于loc的方式可以一次搞定多个条件

rename

重命名index

stack unstack

将列索引转成行索引,可以只转换部分所应

concat append merge

数据表合并
merge实现类似sql的join…on语法

分组

groupby grouper

groupby用于分组,
而grouper生成一个用于分组的列(例如从时间生成月份)
groupby(function)按照函数结果进行分组(函数只能作用于索引列而不能作用于数据列)

聚合函数

count sum mean median

apply

df.groupby(key).apply(func,*args)
eg计算单只股票的上涨天数

def calc_upDays(prt_chg):
	return (pct_chg>0).sum()
	#pct_chg>0的返回值是布尔值,对布尔值求和是True是1,False是0

trade_stats=stock_data.group('sec_code')['pct_chg'].apply(calc_upDays)
trade_stats
grouypby(key).agg(arg)

对一列多行数据计算多个指标(例如max,min)
也可以多列数据进行计算,这个时候agg需要传入dict来实现

teade_stats=stock_data.groupby('sec_code').agg({'teade_amt':['sum'], #总成交额
	'close_price':['max','min'],})									 #最高价,最低价
移动窗口计算

groupby(key).rolling(n)
需要先排序,去掉重复的索引列
用于时间序列分析
rolling(n).mean(),对前n行数据进行mean计算,前两行为NaN

pivot_table

数据透视图

自动对齐

对于两个df运算时,没有的值(包括没有对应列和没有对应行)会使用NaN补上

广播机制

df-df.loc[2019],对df中所有的行的数都减去2019行数据
df/100
df.apply(function)将对所有行/列使用function
df.applymap(function)将对所有单元格使用function

实战

wind

import sqlite3
import pandas as pd
import numpy as np
from WindPy import w
# 启动api接口
w.start()
conn=sqlite3.connect('sample.db')
conn.execute('''create table stock_list(trade_date TEXT,sec_code TEXT,sec_name TEXT);''')
conn.commit()
wset_date=w.wset("sectorconstituent","date=2020-07-01;sectorid=a0010101000000000",usedf=True)
stock_list=wset_data[1]
#此时可以通过stock_list.head()可以查看获取的数据,发现列名与数据库不一致,下面代码处理这个问题
column={'date':'trade_date','wind_code':'sec_code'}
stock_list.rename(columns=column,inplace=True)
stock_list.set_index('sec_code',inplace=True)
#这时再通过stock_list.head()查看,数据已经是想要的了,下面保存到数据库
stock_list.to_sql('stock_list',conn,if_exists='replace')

一种从wind取数据不使用DataFrame的例子

wsd_data=w.wsd('.'.join(list(stock_list.index)),v,"2020-07-01","2020-07-01","")
tmp=pd.DataFrame(np.matrix(wsd_data.Data).T,columnswsd_data.Times,index=wsd_data.Codes)
tmp=tmp.stack().to_frame()
emp.reset_index(inplace=True)
# 下面和上面的例子类似

宏观经济

更多资料参见https://www.statsmodels.org/stable/examples/index.html

相关性

corr()函数
dropna()

Granger因果关系

预处理:变量减去均值/标准差
test_causality

趋势

移动平均

rooling(time).mean()

HP滤波

回归分析

model=sm.OLS(Y,X)

指数-主成分分析

将众多一定相关性指标重新组合
KernelPCA

债券

使用bokeh
read_sql读取数据库数据

财务分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值