Python之数据分析(Numpy中读取与保存数据文件、将数据文件制成K线图)

文章目录

      • 一、读取与保存文件
      • 二、将数据文件制成K线图

一、读取与保存文件

1、读取文件格式

numpy.loadtxt(
    文件名,
    delimiter = 分割符,
    usecols = 选择列,
    unpack = 是否解包(True/False),
    dtype = 目标类型,
    converters = 转换器
)
  • unpack = False:最终会输出一个二维数组
  • unpack = True:一列一维数组的集合

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)

二、将数据文件制成K线图

1、K线图概念

From秒懂百科:
股市及期货市场中的K线图的画法包含四个数据,即开盘价、最高价、最低价、收盘价,所有的k线都是围绕这四个数据展开,反映大势的状况和价格信息。如果把每日的K线图放在一张纸上,就能得到日K线图,同样也可画出周K线图、月K线图。
Python之数据分析(Numpy中读取与保存数据文件、将数据文件制成K线图)_第1张图片

2、数据文件的准备
我们都知道,Numpy默认支持的就是csv文件,这种数据文件是以“,”逗号分隔开字段的,也就是在同一行里面,逗号分隔开的就是不同列。
Python之数据分析(Numpy中读取与保存数据文件、将数据文件制成K线图)_第2张图片

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()

4、测试效果
最终就绘制成这样一个K线图
Python之数据分析(Numpy中读取与保存数据文件、将数据文件制成K线图)_第3张图片

你可能感兴趣的:(Python进阶者,python,大数据,numpy,csv,数据分析)