提取日期數(shù)據(jù)基本語(yǔ)法
發(fā)展壯大離不開(kāi)廣大客戶(hù)長(zhǎng)期以來(lái)的信賴(lài)與支持,我們將始終秉承“誠(chéng)信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠(chéng)服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及成都木包裝箱等,在成都網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開(kāi)發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。
from WindPy import w
w.start()
當(dāng)出現(xiàn).ErrorCode==-103說(shuō)明沒(méi)連接上,要start一下
w.wsd(security, fields, startDate = None, endDate= None , options = None)
opion 可選(period, 日期類(lèi)型, 貨幣類(lèi)型,前后復(fù)權(quán))
提取財(cái)務(wù)數(shù)據(jù)基本語(yǔ)法
w.wss(security, fields, options = None)
提取板塊日序列基本語(yǔ)法
w.wses(sectorCode, fields, startDate = None, endDate = None, options = None)
提取板塊日截面數(shù)據(jù)基本語(yǔ)法
w.wsee(sectorCode, fields, options=None)
提取宏觀數(shù)據(jù)基本語(yǔ)法
w.edb(codes, startDate =None, endDate =None, options=None)
1.日期序列基本語(yǔ)法
ts.get_hist_data(stock,start,end)
注意:1.stock不能是集合,只能單個(gè)股票 2.需要帶上.sz或.sh 3.沒(méi)有field,只能取出數(shù)據(jù)后再切除.
2.pro用法
pro.daily(code, start, end, fields)
tushare引用語(yǔ)句
弊端也很明顯,一方面不能stock集合輸入,一次只能調(diào)取一個(gè)股票對(duì)應(yīng)數(shù)據(jù),另一方面tushare雖是免費(fèi)試用,但有權(quán)限限制。
基本語(yǔ)法
wb.get_data_yahoo(code, start, end)
wb.DataReader(code, 'yahoo', start, end)
沒(méi)法添加fields, 雖能集合適用,但出來(lái)的索引挺奇怪的
推薦使用定義函數(shù)或用for循環(huán)批量獲取數(shù)據(jù)
總體感覺(jué)wind api最舒服,但需要賬號(hào),mac也不能直接調(diào)用wind api。還是推薦tushare的pro用法。
小白學(xué)習(xí)中,請(qǐng)指教=v=
python很多庫(kù)支持了對(duì)nc格式文件的讀取,比如NetCDF4,PyNio(PyNio和PyNgl可以看做是NCL的Python版本)以及Xarray等等。
我最初使用PyNio,但是由于NCL到Python的移植并不完全,導(dǎo)致目前遠(yuǎn)不如直接使用NCL方便,而在接觸Xarray庫(kù)后,發(fā)現(xiàn)其功能強(qiáng)大遠(yuǎn)超NCL(也可能是我NCL太菜的原因)。
安裝同其它庫(kù)一致:
我這里以一套中國(guó)逐日最高溫度格點(diǎn)資料(CN05.1)為例,其水平精度為0.5°X0.5°。
可以看到,文件的坐標(biāo)有時(shí)間, 經(jīng)度,緯度,變量有日最高溫
我們將最高溫?cái)?shù)據(jù)取出
這與Linux系統(tǒng)中的ncl_filedump指令看到的信息是類(lèi)似的
Xarray在讀取坐標(biāo)信息時(shí),自動(dòng)將時(shí)間坐標(biāo)讀取為了datetime64 格式,這對(duì)我們挑選目的時(shí)間十分方便。Xarray通常與pandas配合使用。
比如我們想選取1979.06.01-1979.06.20時(shí)期數(shù)據(jù),我們只需
再比如我們想選取夏季數(shù)據(jù)時(shí),只需
更多的時(shí)間操作同python的datetime函數(shù)類(lèi)似。
當(dāng)我們想選取特定經(jīng)緯度范圍(高度)的數(shù)據(jù)時(shí),.loc[]函數(shù)同樣可以解決。
在這里,我選取了40°N-55°N,115°E-135°E范圍的數(shù)據(jù)
甚至,我們還可以套娃,同時(shí)疊加時(shí)間和范圍的選取
這足夠滿(mǎn)足常用到的數(shù)據(jù)索引要求。
對(duì)于這類(lèi)簡(jiǎn)單排列的.txt文件,可以通過(guò)np.load讀取,用pandas的.read_csv更為方便
讀取txt的同時(shí),對(duì)每列賦予了一個(gè)列名,通過(guò)data.a可以直接按列名調(diào)用相應(yīng)數(shù)據(jù)。
對(duì)于較復(fù)雜的.txt文件,仍可通過(guò)該函數(shù)讀取
skiprows=5跳過(guò)了前5行的文件頭,sep='\s+'定義了數(shù)據(jù)間隔為空格,這里用的是正則表達(dá)。
pd.read_csv函數(shù)有很多的參數(shù),可以處理各種復(fù)雜情況下的文本文件讀取。
grib文件可通過(guò)pygrib庫(kù)讀取
import pygrib
f = pygrib.open('xxx.grb')
可以指定整個(gè)DataFrame或各個(gè)列的數(shù)據(jù)類(lèi)型:
pandas提供了多種方法來(lái)確保列僅包含一個(gè)dtype。例如,可以使用read_csv()的converters參數(shù):
或者,可以在讀取數(shù)據(jù)后使用to_numeric()函數(shù)強(qiáng)進(jìn)行類(lèi)型轉(zhuǎn)換。
可以通過(guò)指定dtype ='category'或dtype = CategoricalDtype(類(lèi)別,有序)直接解析類(lèi)別列。
可以使用dict指定將某列為Category類(lèi)型:
指定dtype ='category'將導(dǎo)致無(wú)序分類(lèi),其類(lèi)別是數(shù)據(jù)中觀察到的唯一值。
要更好地控制類(lèi)別和順序,可以創(chuàng)建CategoricalDtype,然后將其傳遞給該列的dtype。
使用dtype = CategoricalDtype時(shí),dtype.categories之外的“意外”值將被視為缺失值。
文件可能包含標(biāo)題行,也可能沒(méi)有標(biāo)題行。 pandas假定第一行應(yīng)用作列名:
通過(guò)指定name與header,可以重命名列以及是否丟棄標(biāo)題行:
如果標(biāo)題不在第一行中,則將行號(hào)傳遞給標(biāo)題,將跳過(guò)header前面的行:
如果文件或標(biāo)題包含重復(fù)的名稱(chēng),默認(rèn)情況下,pandas會(huì)將它們區(qū)分開(kāi),以防止覆蓋數(shù)據(jù).
usecols參數(shù)允許您使用列名,位置號(hào)或可調(diào)用的方法選擇文件中列的任何子集.
如果指定了comment參數(shù),則將忽略注釋行。 默認(rèn)情況下,空行也將被忽略。
如果skip_blank_lines = False,則read_csv將不會(huì)忽略空行:
警告:被忽略的行的存在可能會(huì)導(dǎo)致涉及行號(hào)的歧義; 參數(shù)標(biāo)題使用行號(hào)(忽略注釋/空行),而行首使用行號(hào)(包括注釋/空行).
如果同時(shí)指定了skiprows和header,則header將相對(duì)于skiprows的末尾。 例如:
為了更好地使用日期時(shí)間數(shù)據(jù),read_csv()使用關(guān)鍵字參數(shù)parse_dates和date_parser允許用戶(hù)指定列的日期/時(shí)間格式,將string轉(zhuǎn)換為日期時(shí)間對(duì)象。
通常,我們可能希望分別存儲(chǔ)日期和時(shí)間數(shù)據(jù),或分別存儲(chǔ)各種日期字段。 parse_dates關(guān)鍵字可用于指定列的組合,以從中解析日期和/或時(shí)間。 您可以指定要parse_dates的列或嵌套列表,結(jié)果日期列將被添加到輸出的前面(以便不影響現(xiàn)有的列順序),新的列名為各列Name的連接。
默認(rèn)情況下,解析器會(huì)刪除組件日期列,可以選擇通過(guò)keep_date_col關(guān)鍵字保留它們:
請(qǐng)注意,如果您希望將多個(gè)列合并為一個(gè)日期列,則必須使用嵌套列表。 換句話說(shuō),parse_dates = [1,2]表示第二和第三列應(yīng)分別解析為單獨(dú)的日期列,而parse_dates = [[1,2]]意味著應(yīng)將這兩列解析為單個(gè)列。
還可以使用字典來(lái)指定自定義名稱(chēng)列:
重要的是要記住,如果要將多個(gè)文本列解析為單個(gè)日期列,則在數(shù)據(jù)前添加一個(gè)新列。
index_col參數(shù)基于這組新列而不是原始數(shù)據(jù)列:
注意:如果列或索引包含不可解析的日期,則整個(gè)列或索引將作為對(duì)象數(shù)據(jù)類(lèi)型原樣返回。 對(duì)于非標(biāo)準(zhǔn)日期時(shí)間解析,請(qǐng)?jiān)趐d.read_csv之后使用to_datetime()。
注意:read_csv具有用于解析iso8601格式的日期時(shí)間字符串的fast_path,例如“ 2000-01-01T00:01:02 + 00:00”和類(lèi)似的變體。 如果可以安排數(shù)據(jù)以這種格式存儲(chǔ)日期時(shí)間,則加載時(shí)間將明顯縮短,約20倍。
最后,解析器允許您指定自定義date_parser函數(shù),以充分利用日期解析API的靈活性:
Pandas不能原生表示具有混合時(shí)區(qū)的列或索引。 如果CSV文件包含帶有時(shí)區(qū)混合的列,則默認(rèn)結(jié)果將是帶有字符串的object-dtype列,即使包含parse_dates。
要將混合時(shí)區(qū)值解析為datetime列,請(qǐng)將部分應(yīng)用的to_datetime()傳遞給utc = True作為date_parser。
本來(lái)是想爬取之后作最佳羈絆組合推算,但是遇到知識(shí)點(diǎn)無(wú)法消化(知識(shí)圖譜),所以暫時(shí)先不組合了,實(shí)力有限
庫(kù)的安裝
1.requests? #爬取棋子數(shù)據(jù)
2.json? #棋子數(shù)據(jù)為js動(dòng)態(tài),需使用json解析
3.BeautifulSoup
實(shí)戰(zhàn)前先新建個(gè)lol文件夾作為工作目錄,并創(chuàng)建子目錄data,用于存放數(shù)據(jù)。
1.爬取數(shù)據(jù),新建個(gè)py文件,用于爬取云頂數(shù)據(jù),命名為data.py
1.1定義個(gè)req函數(shù),方便讀取。//需設(shè)定編碼格式,否則會(huì)出現(xiàn)亂碼
def Re_data(url):
re = requests.get(url)
re.encoding = 'gbk'
data = json.loads(re.text)
return data['data']
1.2定義個(gè)Get函數(shù),用于讀取數(shù)據(jù)并使用保存函數(shù)進(jìn)行保存數(shù)據(jù),保存格式為json。
def Get_data():
# 獲取數(shù)據(jù)并保存至data目錄
base_url = ''
chess = Re_data(base_url + 'chess.js')
race = Re_data(base_url + 'race.js')
job = Re_data(base_url + 'job.js')
equip = Re_data(base_url + 'equip.js')
Save_data(chess,race,job,equip)
1.3定義save函數(shù)實(shí)現(xiàn)讀取的數(shù)據(jù)進(jìn)行文件保存,保存目錄為工作目錄下的data文件夾。
def Save_data(t_chess,t_race,t_job,t_equip):
with open('./data/chess.json','w') as f:
json.dump(t_chess,f,indent='\t')
with open('./data/race.json','w') as f:
json.dump(t_race,f,indent='\t')
with open('./data/job.json','w') as f:
json.dump(t_job,f,indent='\t')
with open('./data/equip.json','w') as f:
json.dump(t_equip,f,indent='\t')
1.4定義主函數(shù)main跑起來(lái)
if __name__ == '__main__':
start = time.time()
Get_data()
print('運(yùn)行時(shí)間:' + str(time.time() - start) + '秒')
至此,數(shù)據(jù)爬取完成。
2.種族和職業(yè)進(jìn)行組合。
2.1未完成 //未完成,使用窮舉方法進(jìn)行組合會(huì)出現(xiàn)內(nèi)存不夠?qū)е陆M合失?。╢or循環(huán)嵌套導(dǎo)致數(shù)組內(nèi)存超限)
//待學(xué)習(xí),使用知識(shí)圖譜建立組合優(yōu)選,可參考:
期間遇到的問(wèn)題:
1.爬取棋子數(shù)據(jù)時(shí)為動(dòng)態(tài)js加載,需通過(guò)json模塊的loads方法獲取
2.3層for循環(huán)嵌套數(shù)據(jù)量大,導(dǎo)致計(jì)算失敗,需優(yōu)化計(jì)算方法。
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
folder_location='D:/Users/RE/'? -- 文件所在文件夾位置。
inputfile=folder_location+'數(shù)據(jù)底表.xlsx'? #打開(kāi)csv文件
data=pd.read_excel(inputfile)
df=data
這說(shuō)明數(shù)據(jù)已經(jīng) 從xls文件里面讀取到了 python中。
之后可以根據(jù)一些簡(jiǎn)單的groupby 等語(yǔ)句進(jìn)行操作。
以下是函數(shù)可選參數(shù)
pd.read_excel(io, sheetname=0,header=0,skiprows=None,index_col=None,names=None,
? ? ? ? ? ? arse_cols=None,date_parser=None,na_values=None,thousands=None,
? ? ? ? ? ? convert_float=True,has_index_names=None,converters=None,dtype=None,
? ? ? ? ? ? true_values=None,false_values=None,engine=None,squeeze=False,**kwds)
常用參數(shù)解析:
io ?:excel 路徑;? 必填項(xiàng) 路徑需要包含文件名
sheetname :默認(rèn)是sheetname為0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe。
header ?:指定作為列名的行,默認(rèn)0,即取第一行,數(shù)據(jù)為列名行以下的數(shù)據(jù);若數(shù)據(jù)不含列名,則設(shè)定 header = None;
1、print()函數(shù):打印字符串;
2、raw_input()函數(shù):從用戶(hù)鍵盤(pán)捕獲字符;
3、len()函數(shù):計(jì)算字符長(zhǎng)度;
4、format()函數(shù):實(shí)現(xiàn)格式化輸出;
5、type()函數(shù):查詢(xún)對(duì)象的類(lèi)型;
6、int()函數(shù)、float()函數(shù)、str()函數(shù)等:類(lèi)型的轉(zhuǎn)化函數(shù);
7、id()函數(shù):獲取對(duì)象的內(nèi)存地址;
8、help()函數(shù):Python的幫助函數(shù);
9、s.islower()函數(shù):判斷字符小寫(xiě);
10、s.sppace()函數(shù):判斷是否為空格;
11、str.replace()函數(shù):替換字符;
12、import()函數(shù):引進(jìn)庫(kù);
13、math.sin()函數(shù):sin()函數(shù);
14、math.pow()函數(shù):計(jì)算次方函數(shù);
15、os.getcwd()函數(shù):獲取當(dāng)前工作目錄;
16、listdir()函數(shù):顯示當(dāng)前目錄下的文件;
17、time.sleep()函數(shù):停止一段時(shí)間;
18、random.randint()函數(shù):產(chǎn)生隨機(jī)數(shù);
19、range()函數(shù):返回一個(gè)列表,打印從1到100;
20、file.read()函數(shù):讀取文件返回字符串;
21、file.readlines()函數(shù):讀取文件返回列表;
22、file.readline()函數(shù):讀取一行文件并返回字符串;
23、split()函數(shù):用什么來(lái)間隔字符串;
24、isalnum()函數(shù):判斷是否為有效數(shù)字或字符;
25、isalpha()函數(shù):判斷是否全為字符;
26、isdigit()函數(shù):判斷是否全為數(shù)字;
27、 lower()函數(shù):將數(shù)據(jù)改成小寫(xiě);
28、upper()函數(shù):將數(shù)據(jù)改成大寫(xiě);
29、startswith(s)函數(shù):判斷字符串是否以s開(kāi)始的;
30、endwith(s)函數(shù):判斷字符串是否以s結(jié)尾的;
31、file.write()函數(shù):寫(xiě)入函數(shù);
32、file.writeline()函數(shù):寫(xiě)入文件;
33、abs()函數(shù):得到某數(shù)的絕對(duì)值;
34、file.sort()函數(shù):對(duì)書(shū)數(shù)據(jù)排序;
35、tuple()函數(shù):創(chuàng)建一個(gè)元組;
36、find()函數(shù):查找 返回的是索引;
37、dict()函數(shù):創(chuàng)建字典;
38、clear()函數(shù):清楚字典中的所有項(xiàng);
39、copy()函數(shù):復(fù)制一個(gè)字典,會(huì)修改所有的字典;
40、 get()函數(shù):查詢(xún)字典中的元素。
…………