python :numpy函式
阿新 • • 發佈:2018-11-10
一、陣列相關的其他函式
1、求階乘
語法:np. prod()
#隨機建立一個數組
arr = np.array(np.arange(1,6))
#計算陣列的階乘
np.prod(arr)
2.計算陣列元素的累積乘積
語法:np. cumprod()
np.cumprod(arr)
3.陣列的修剪
語法:ndarray.clip()
np.ndarray.clip(min,max):大於max的值會被重設成max,小於min的值會被重設成min;不指定min max預設為min 可以只選一個 也可以都選
#建立一個數組
arr1=np.arange( 10)
#修剪陣列
arr1.clip(2,5) #給定一個最小值2,最大值5,所有比2小的值都變成2(最小值),所有比5大的值都變成5(最大值)
array([2, 2, 2, 3, 4, 5, 5, 5, 5, 5])
4.陣列的壓縮
語法:ndarray.compress()
返回一個根據給定條件篩選後的陣列,用於資料的篩選
# 陣列的壓縮 ndarray.compres() :返回一個根據給定條件 篩選後的陣列
scores = np.random.randint(60,100,9) # 60-100以內的隨機數9個
#輸出score陣列中大於90的數
mark = scores> 90 # 輸出的是布林值
#法一:
scores[mark] #輸出的是大於90的值
#法二:
scores.compress(mark)
5.求和
語法:np.sum()
# 求和 np.sum()
np.sum(scores)
二、日期處理函式-datetime模組
import numpy as np
from datetime import datetime
1.datatime. strptime(‘指定日期’,’格式字串’)
str='2018-10-01 08:09:10.11'
time1=datetime.strptime(str,'%Y-%m-%d %H:%M:%S.%f' )
time1
datetime.datetime(2018, 10, 1, 8, 9, 10, 110000)
將日期轉換為字串
# 將日期轉化為字串
str1 = time1.strftime('%Y-%m-%d %H:%M:%S.%f')
str1
'2018-10-01 08:09:10.110000'
2.獲取date型別
只能獲取年月日
time1.date()
datetime.date(2018, 10, 1)
獲取time1的時分秒
time1.time()
datetime.time(8, 9, 10, 110000)
3.獲取星期幾
time1.weekday() #10月1號是週一,下標為0
#真實的周幾,從1開始 isoweekday()
time1.isoweekday()
4.獲取年、月、日、時、分、秒、毫秒、當前時間
time1.year#年
time1.month#月
time1.day #日
time1.hour#小時
time1.minute#分
time1.second#秒
time1.microsecond#微秒
nowtime=datetime.now() #當前時間
注意:獲取年~微秒都沒有加括號
5.直接生成指定日期
nextyear=datetime(2019,2,5) #只有年月日有值
6.計算時間差
nextyear-nowtime #計算時間差
datetime.timedelta(116, 16934, 726639)
只有三個引數,第一個引數是days(天),第二個引數是seconds(秒),第三個引數是microseconds(毫秒)
(nextyear-nowtime).days #時間差按天數計算
(nextyear-nowtime).seconds #時間差按秒計算
(nextyear-nowtime).microseconds # 時間差顯示毫秒
7.時間間隔
from datetime import timedelta #匯入模組
time_d=timedelta(10,0,0)#引數是 天,秒,毫秒
nowtime+time_d #現在的時間加上一個時間間隔
三、案例
獲取給定時間範圍內交易日週一、週二、週三、週四、週五分別對應的平均收盤價及哪天的平均收盤價最高,哪天的平均收盤價最低。
步驟:
1.將給定的日期轉換 datetime.strptime()
2.求出日期對應是星期幾
3.處理data.csv檔案中的日期
4.分別求出各星期的平均收盤價
5.比較高低
1-2步:
#日期是 日-月-年,定義一個函式,將字串型別的資料轉換為datetime型別.並且返回是周幾的數字.
#因為我的CSV檔案是gbk編碼的,所以我在後加上了decode('utf-8')
def weekdayNum(datestr):
return datetime.strptime(datestr.decode('utf-8'),'%d-%m-%Y').isoweekday()
3-4步:
讀取資料 loadtxt 引數 converters = {colNum(第幾列):函式名}
#讀取資料 讀取檔案的時候,原始檔是什麼編碼比較重要,預設是gbk,如果原始檔是utf-8,則要加上 encoding='utf-8'
#如果原始檔不是utf-8,記得讀取的字串需要解碼,在函式處解決問題即可。
dates,close = np.loadtxt('data.csv',delimiter=',',unpack=True,usecols=(1,-2),
skiprows=1,converters={1:weekdayNum}) # 對第一列的資料使用weekdayNum 這個函式 轉化為星期幾,一般使用converters引數都要定義函式。
#現在我們要將週一、週二、週三、週四、週五的收盤價分別打包起來
#建立一個數組來存週一~週五的值
averages = np.zeros(5)
#遍歷週一-週五的所有資料
for i in range(1,6):
#獲取每個數1-5在原始資料中的下標
indices=np.where(dates==i)
# print(i,indices)
#獲取結果集
# result = np.take(close,indices) #法一
# result=close[indices]#法二
result = close.compress(dates==i) #法三
print(result)
averages[i-1]=np.mean(result)
5步:
使用np.argmax() 和np.argmin() 獲取最大值和最小值對應的下標
maxIndex=np.argmax(averages)
minIndex=np.argmin(averages)
print('一週中星期',maxIndex+1,'平均收盤價最高')
print('一週中星期',minIndex+1,'平均收盤價最低')