一:test01
任务背景:使用 NumPy 提供的函数tolist()和compress()快速筛选数据和转换数据结构。
任务要求:
1、使用 NumPy 创建一个 3x4 的随机整数数组,模拟一个季度内四个地区每个月的销售额(单位:千元),数值范围在 10 到 100 之间,并打印输出。
import numpy as np
arr = np.random.randint(10, 100, (3, 4), dtype=np.int64)
print(arr)
2、使用 compress() 函数,从销售数据中提取出所有销售额大于 50 千元的值,并打印输出。
print("销售额大于50千元的值:",arr.compress((arr>50).flatten()))
3、使用 tolist() 方法将原始销售数据数组转换为 Python 列表,并打印输出。
ls = arr.tolist()
print(ls)
ls = list(range(1,5))
print(ls)
arr = np.arange(1,5)
print(arr)
二.
2.1. transpose 多维数组转置
创建一个三维数组2x2x3
arr = np.array([[np.arange(1,4),np.arange(4,7)],[np.arange(7,10),np.arange(10,13)]])
print(arr.shape)
2x3x2 转置
brr = arr.transpose(0,2,1)#(0,1,2,3,4,5)
print(arr)
print(brr)
print(brr.shape)
2.2. hstack vstack concatenate hsplit split vsplit split
arr = np.array([np.arange(1,4),np.arange(2,5)])
print(arr)
brr = np.array([np.arange(3,6),np.arange(4,7)])
print(brr)
h_array = np.hstack([arr,brr])
h_array=np.concatenate((arr,brr),axis=1)
print("按行拼接:\n",h_array)
h_array=np.hstack([arr,brr])
v_array = np.concatenate((arr,brr),axis=0)
print("按列拼接:\n",v_array)
2.3. 水平方向分割 hsplit split
ls1 = np.hsplit(h_array,3)
print(ls1)
ls2 = np.split(h_array,3,axis=1)
print(ls2)
2.4. 垂直方向 vsplit split
ls3 = np.vsplit(v_array,2)
print(ls3)
ls4 = np.split(v_array,2,axis=0)
print(ls4)
data=np.loadtxt(
"test.csv",
delimiter=",",
encoding="thf-8",
skiprows=1,
dtype=np.int64
)
print(data)
print(v_array)
np.savetxt(
"data.csv",
v_array,
encoding="utf-8",
delimiter=',',
fmt=%d,
newlilne="\n",
header="1月,2月,3月",
footer="结尾",
comments="#"
)
三.test02
closing_price = np.loadtxt(
"stock.csv",
dtype=np.float64,
delimiter=',',
encoding='utf-8',
usecols=(2)
)
print(closing_price)
print("收盘价的均值为:",closing_price.mean())
print("收盘价的中位数为:",np.median(closing_price))
print("中位数所在的索引位置:",np.where(closing_price==23.95))
print("收盘的方差为:",closing_price.var())
high_price,low_price=np.loadtxt(
"stock.csv",
dtype=np.float64,
delimiter=",",
encoding="utf-8",
usecols=(3,4),
unpack=True
)
print("该股票最高价为:",high_price)
print("该股票最低价为:",low_price)
print("该股票的最高值为:",high_price.max())
print("该股票的最低值为:",low_price.max())
print("该股票的中间值为:",high_price.max()+low_price.max()/2)
print("该股票最高价为:",np.ptp(high_price))
print("该股票最低价为:",np.ptp(low_price))
volime = np.loadtxt(
"stock.csv",
dtype=np.float64,
delimiter=",",
encoding="utf-8",
usecols=(11)
)
print("成交量:",volime)
vwap = np.average(closing_price,weights=volime)
print("该股票的成交量加权平均值为%0.2f"% vwap)
t = np.arange(closing_price.shape[0])
print("时间序列为:",t)
twap = np.average(closing_price,weights=t)
print("该股票的时间加权平均值为%0.2f" % twap)
import datetime
def date2str(nowDate):
return datetime.datetime.strptime(\
nowDate,"%Y/%m/%d").date().weekday()+1
days = np.loadtxt(
"stock.csv",
delimiter=',',
encoding='utf-8',
dtype=np.int64,
usecols=(1),
converters={1: date2str}
)
print("日期:",days)
for i in range(days.size):
print("发生交易的天数是星期%d,当天的收盘价为%0.2f"% (days[i],closing_price[i]))
price_avg = np.zeros(5)
for i in range(1,6):
index = np.where(days==i)
print("所有礼拜",i,"对应的下标为: \n",index)
price = np.take(closing_price,index)
print("所有礼拜",i,"对应的收盘价为: \n",price)
avg = price.mean()
print("所有礼拜", i ,"对应的平均收盘价为:",price)
price_avg[i-1] = avg
print("星期",i,"对应的平均收盘价为: ",avg)