本人在私募,負責資料收集以及清洗,就是包括收集資料,按照領導要求,選出滿足條件的資料,用於校驗策略是否正確。
資料收集:
#期權資料收集
import akshare as ak
import pandas as pd
import numpy as np
import datetime
import time
#用於將千分位數字改為常規數字
from locale import atof
# 顯示所有列
pd.set_option(
'display.max_columns'
,none
)# 顯示所有行
pd.set_option(
'display.max_rows'
,none
)#收集資料,鐵礦石期權的全部資料
start =
'2019-02-09'
#獲得全部的交易日資料
dates = ak.tool_trade_date_hist_sina(
) today = time.strftime(
"%y-%m-%d"
)#篩選符合條件的日期
dates = dates.loc[
(dates[
'trade_date'
]>start)
&(dates[
'trade_date'
]]#建立儲存資料的df
last = pd.dataframe(
)last_2 = pd.dataframe(
)#迴圈獲取資料
for i in
range
(len
(dates)):
date = dates.iloc[i,0]
#print(date)
# 獲取當天所有合約
part_1, part_2 = ak.get_dce_option_daily(trade_date= i, symbol=
"鐵礦石期權"
)#print(part_1.head())
#print(part_2.head())
#增加日期,cp,年份,月份,行權價,
part_1[
'date'
]= date
part_1[
'cp'
]= part_1[
'合約名稱'].
(lambda x: x[6:
7]) part_1[
'year'
]= part_1[
'合約名稱'].
(lambda x: x[1:
3]) part_1[
'o_month'
]= part_1[
'合約名稱'].
(lambda x: x[3:
5]) part_1[
'x**'
]= part_1[
'合約名稱'].
(lambda x: x[8:
]) part_1[
'合約系列'
]= part_1[
'合約名稱'].
(lambda x: x[0:
5])#以日期作為index
part_1.set_index(
'date'
,inplace=
true
) part_2.columns =[[
'合約系列'
,'iv']]
#增加日期,年份,月份
part_2[
'date'
]= date
part_2.set_index(
'date'
) part_2[
'year'
]= part_2[
'合約系列'].
(lambda x: x[1:
3]) part_2[
'month'
]= part_2[
'合約系列'].
(lambda x: x[3:
])#儲存資料,為方便讀者復現,使用csv。(真實情況,直接存入sql資料庫,各種報錯,各種坑,資料缺失,格式不正確............)
last.to_csv(
'i.csv'
)last_2.to_csv(
'i2.csv'
)
資料處理:
df = pd.read_csv(
'i.csv'
)#預設期權持倉量為1,999這種千分位數字格式。
setlocale(lc_numeric,
'english_us'
)df[
'持倉量'
]= df[
'持倉量'].
(lambda x:atof(x)
)#根據每天的主力合約資料資訊,篩選最虛值合約,分為c,p兩塊,且持倉量最大。
#舉例:今天c端最虛c5800,持倉量1w,為c端最大持倉量,則符合條件保留。
defselect_xu
(df)
: df_c = df.loc[df[
'cp']==
'c']
#根據行權價排序,獲得最虛值,c端取最大值。
dfc = df_c.sort_values(by=
'x**'
,ascending=
true
).tail(1)
# print(df_c)
# print(dfc)
# print('-'*20)
df_p = df.loc[df[
'cp']==
'p']
#根據行權價排序,獲得最虛值,p端取最小值。
dfp = df_p.sort_values(by=
'x**'
,ascending=
true
).head(1)
# print(df_p)
# print(dfp)
ifmax
(dfc[
'持倉量'])
==max
(df_c[
'持倉量'])
: dfc = dfc
else
: dfc =
none
ifmax
(dfp[
'持倉量'])
==max
(df_p[
'持倉量'])
: dfp = dfp
else
: dfp =
none
return dfc ,dfp
#目標,裡面為日期和年份,月份
dfd = pd.read_excel(
'i.xlsx'
) last = pd.dataframe(
)last1 = pd.dataframe(
)last2 = pd.dataframe(
)if __name__ ==
'__main__'
:for i in
range
(len
(dfd)):
year = dfd.iloc[i,-2
] month = dfd.iloc[i,-1
] date = dfd.iloc[i,0]
#篩選資料
d = df.loc[
(df[
'year']==
int(year))&
(df[
'o_month']==
int(month))&
(df[
'date'
]==datetime.datetime.strftime(date,
'%y-%m-%d'))
]#如果資料不為空
iflen
(d)>0:
dfc,dfp =select_xu(d)
if dfc is
notnone
and dfp is
notnone
: s = pd.merge(dfc,dfp)
elif dfc is
none
and dfp is
notnone
: s = dfp
elif dfc is
notnone
and dfp is
none
: s = dfc
else
: s =
none
else
:pass
last.to_csv(
'i0.csv'
) last1.to_csv(
'i1.csv'
) last2.to_csv(
'i2.csv'
)
i.xlsx資料內容如下:
此時便可獲得滿足條件的期權資料。用於後續的校驗。
資料清洗之資料清洗概述
從廣泛的意義上來講,資料是乙個寬泛的概念,包括但不限於 我們要了解資料清洗,就需理解資料的內涵和外延 常見的資料有 其中,比較重要比較常見的分析資料是 資料。這裡重點介紹一些關於 資料的內容。資料 資料物件由屬性 attributes 及其值 value 構成 資料的特徵 什麼是資料清洗 資料清洗是...
excel資料清洗 資料清洗excel
資料清洗與加工 目的 獲得具備準確性 完整性和一致性符合分析質量的資料。資料處理第一步 資料清洗 1 資料去重 方式1 刪除重複項功能。適用於有重複項出現的列,並且這樣的重複無意義,比如標識列。操作 資料 選項卡下的 刪除重複值 按鈕 方式2 排序刪除重複項。適用於需要人工判斷無用重複項的資料,即將...
資料清洗技術 Excel資料清洗
1 了解 excel 的基本功能和用途 2 掌握 excel 資料清洗的基本步驟 3 了解 excel 資料清洗的方法 4 掌握 excel 常用的資料分析函式 5 掌握 excel 資料清洗常用的函式 作業系統 windows xp 7 8 10 excel版本 2007 2019 jdk版本 1...