資料清洗,篩選

2021-10-25 19:20:01 字數 4719 閱讀 6257

本人在私募,負責資料收集以及清洗,就是包括收集資料,按照領導要求,選出滿足條件的資料,用於校驗策略是否正確。

資料收集:

#期權資料收集

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...