1、读取文件格式
numpy.loadtxt(
文件名,
delimiter = 分割符,
usecols = 选择列,
unpack = 是否解包(True/False),
dtype = 目标类型,
converters = 转换器
)
2、保存文件格式
numpy.savetxt(
文件名,
二维数组,
delimiter = 分隔符,
fmt=格式
)
3、练习代码
import numpy as np
a = np.arange(1, 10).reshape(3, 3) # 3行3列的二维数组
# 保存文本文件
# np.savetxt(r"0=数据源/test1.csv", a, delimiter=',', fmt="%d") # %d表示整数格式
# 读取文本文件,全部读取
# read_txt = np.loadtxt(r"0=数据源/test1.csv", delimiter=',', dtype='i4') # 表示4字节整数
# 读取第0列和第二列
# read_txt = np.loadtxt(r"0=数据源/test1.csv", delimiter=',', usecols=(0, 2), dtype='i4') # 表示4字节整数
# print(read_txt)
# 读取并解包:解包成两个一维数组
v1, v2 = np.loadtxt(r"0=数据源/test1.csv", delimiter=',', usecols=(0, 2), unpack=True, dtype='i4') # 表示4字节整数
print(v1, v2)
1、K线图概念
From秒懂百科:
股市及期货市场中的K线图的画法包含四个数据,即开盘价、最高价、最低价、收盘价,所有的k线都是围绕这四个数据展开,反映大势的状况和价格信息。如果把每日的K线图放在一张纸上,就能得到日K线图,同样也可画出周K线图、月K线图。
2、数据文件的准备
我们都知道,Numpy默认支持的就是csv文件,这种数据文件是以“,”逗号分隔开字段的,也就是在同一行里面,逗号分隔开的就是不同列。
3、测试代码
import datetime as dt
import numpy as np
import matplotlib.pylab as mp
import matplotlib.dates as md
# 转换时间格式
def dmy2ymd(dmy):
dmy = str(dmy, encoding='utf-8')
# 利用python能够解析日-月-年的时间格式,来解析成时间信息,再转化成年-月-日的numpy时间格式
date = dt.datetime.strptime(dmy, '%d-%m-%Y').date() # 得到日期子对象
ymd = date.strftime('%Y-%m-%d') # 将时间信息格式化成字符串
return ymd
# 解包取出:时间,开盘价,最高价,最低价,收盘价
dates, opening_prices, highest_prices, lowest_prices, closing_prices = np.loadtxt(
'0=数据源/beer_price.csv', delimiter=',',
usecols=(0, 1, 2, 3, 4), unpack=True,
dtype='M8[D], f8, f8, f8, f8',
converters = {
0:dmy2ymd}
)
# M是numpy 的时间数据类型,[]表示精度,D是日,以日为单位的时间
# 由于数据内时间格式是日-月-年,需要用converter转化成年月日
# {0:dmy2ymd}表示将第0列的数据全部用dmy2ymd执行一遍
# print(opening_prices)
# 图像基本参数
mp.figure('CandleStick', facecolor='lightgray')
mp.title('CandleStick', fontsize=20)
mp.xlabel('Date', fontsize=14) # 横轴、纵轴的标签
mp.ylabel('Price', fontsize=14)
# 坐标轴设置
ax = mp.gca() # 获取坐标轴
# 设置主、副刻度定位器
ax.xaxis.set_major_locator(
md.WeekdayLocator(byweekday=md.MO) # 星期定位器,MO(Monday)表示以星期一作为主刻度定位
)
ax.xaxis.set_minor_locator(
md.DayLocator() # 日定位器
)
# 日期的格式
ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y'))
mp.tick_params(labelsize=10) # 设置标签所用的字体
mp.grid(linestyle=':') # 网格线
# 将日期转换成matplotlib.dates(md)的类型
dates = dates.astype(md.datetime.datetime)
# 获取价格差:数组相减再做判断等于一个装满布尔值的数组
rise = closing_prices - opening_prices >= 0.01 # 上涨
fall = opening_prices - closing_prices >= 0.01 # 下跌
# 确定每根K线的颜色
# 初始化颜色数组为0,个数为dates的个数,颜色数据格式是3个float
fc = np.zeros(dates.size, dtype='3f4') # 填充色
ec = np.zeros(dates.size, dtype='3f4') # 边框色
fc[rise], fc[fall] = (1, 1, 1), (0, 0.5, 0)
# 将fc中为真的(上涨)设置颜色为(1, 1, 1)白色,下跌的设置为(0, 0.5, 0)绿色
ec[rise], ec[fall] = (1, 0, 0), (0, 0.5, 0)
# 画引线:矩形条
mp.bar(dates, highest_prices-lowest_prices, 0, lowest_prices, color=fc, edgecolor=ec)
# 纵坐标是最高价-最低价(数组),0表示矩形条宽度(最窄),1表示最宽;
# 起点位以最低价为起点,边框颜色是ec
mp.bar(dates, closing_prices-highest_prices, 0.8, opening_prices, color=fc, edgecolor=ec)
# 自动格式化水平方向的日期
mp.gcf().autofmt_xdate()
mp.show()