一:test01
scss
复制代码
任务背景:使用 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 多维数组转置
scss
复制代码
创建一个三维数组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
scss
复制代码
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
scss
复制代码
ls1 = np.hsplit(h_array,3)
print(ls1)
ls2 = np.split(h_array,3,axis=1)
print(ls2)
2.4. 垂直方向 vsplit split
ini
复制代码
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
ini
复制代码
#1.提取数据
closing_price = np.loadtxt(
"stock.csv",
dtype=np.float64,
delimiter=',',
encoding='utf-8',
usecols=(2)
)
print(closing_price)
#2.计算均值 中位数 中位数所在的索引位置 方差
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))
#3.计算成交量加权平均值 时间加权平均值
#成交量 收盘价 分别读取出来
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):
#nowDate = str(nowDate,'GB2312')
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}#将下标为1的这一列数据映射到date2str函数中
)
print("日期:",days)
#day_str = '2017/9/15'
#字符串转换成日期对象
#dt = datetime.datetime.strptime(day_str,'%Y/%m/%d')
#print(type(dt))
#print(dt.date().weekday()+1)
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)