广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python数据分析之NumPy常用函数使用详解
  • 349
分享到

Python数据分析之NumPy常用函数使用详解

2024-04-02 19:04:59 349人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录文件读入1、保存或创建新文件 2、读取csv文件的函数loadtxt3、常见的函数4、股票的收益率等5、对数收益与波动率6、日期分析总结本篇我们将以分析历史股价为例,介

本篇我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数、学习读写文件的方法,并尝试函数式编程和NumPy线性代数运算,来学习NumPy的常用函数。

文件读入

读写文件是数据分析的一项基本技能

CSV(Comma-Separated Value,逗号分隔值)格式是一种常见的文件格式。通常,数据库的转存文件就是CSV格式的,文件中的各个字段对应于数据库表中的列。

NumPy中的 loadtxt 函数可以方便地读取CSV文件,自动切分字段,并将数据载入NumPy数组

1、保存或创建新文件 

import numpy as np

i = np.eye(3) #eye(n)函数创建n维单位矩阵
print(i)
np.savetxt('test.txt', i) #savetxt()创建并保存test.txt文件

savetxt()函数,如果有已经文件则更新,如目录中没有,则创建并保存test.txt文件

运行结果如下:

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

2、读取csv文件的函数loadtxt

1)先在保存程序的目录下创建一个名称为data.csv的文件,并设置数据如下图:

2)读取文件,如下:

c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)

usecols 的参数是一个元组,以获取第7字段至第8字段的数据,也就是上述文件中 股票的收盘价和成交量数据。 unpack 参数设置为 True ,是分拆存储不同列的数据,即分别将收盘价和成交量的数组赋值给变量c和v。

3、常见的函数

成交量加权平均、时间加权、算术平均值、中位数、方差等

import numpy as np

i = np.eye(3) #eye(n)函数创建n维单位矩阵
print(i)
np.savetxt('test.txt', i) #savetxt创建并保存test.txt文件

#读取csv文件
c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)
"""usecols 的参数为一个元组,以获取第7字段至第8字段的数据,也就是股票的收盘价和成交量数据。 unpack 参数设置为 True ,是分拆存储不同列的数据,即分别将收
盘价和成交量的数组赋值给变量c和v"""
vwap = np.average(c, weights=v)  #调用了average函数,将v作为权重参数使用,
print(vwap)
print('\n')
print( np.mean(c)) #算术平均值
print('\n')
t = np.arange(len(c))
print( t )
print('\n')
twap =np.average(c, weights=t) #按时间权重
print( twap )
print('\n')
h,l=np.loadtxt('data.csv',delimiter=',', usecols=(4,5), unpack=True)
# 获取第4字段至第5字段的数据,即股票的最高价和最低价

print ( np.max(h)) #获取最大值max()
print ( np.min(l)) #获取最小值min()
print('\n')
print( np.ptp(h) ) # 用ptp()函数计算了极差,即最大值和最小值之间的差值
print( np.ptp(l) )
print('\n')
print( np.median(c)) # 中位数median()函数,即多个数据中,处于中间的数
print( np.msort(c))#msort(( ))函数对价格数组进行排序,可以验证上述中位数
#方差的计算
variance = np.var(c) #方差函数var()
print(variance)

用代码、excel进行相关计算,运行结果如下:

为后面计算,将data.csv中的数据多增加几行,修改如下并保存(为后面日期读写与修改,日期形式修改成如下):

603112,2022-4-1,,13.56,13.97,13.55,13.87,3750000603112,2022-4-2,,13.75,14.25,13.69,14.03,4003500603112,2022-4-3,,13.69,14.11,13.61,13.95,3956500603112,2022-4-4,,14.3,14.3,13.73,13.89,4250000603112,2022-4-5,,14.1,14.5,13.93,14,4013500603112,2022-4-6,,14.5,15.4,14.35,15.4,9056500603112,2022-4-7,,16,16.94,15.85,16.94,3750000

4、股票的收益率等

股市中最常见的就是涨幅,也就是今日收盘价相对昨日涨跌的比例,即  (今日收盘价-昨天收盘价)/昨日收盘价*100,numpy中的 diff() 函数可以返回一个由相邻数组元素的差值构成的数组,由于相邻数据相减,因此diff()数组数据较原数组少一个。

如上述修改后,有7天的收盘价,diff()计算出的结果就只有6位,

import numpy as np

#读取csv文件
c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)

#股票的简单收益率
# diff 函数可以返回一个由相邻数组元素的差值构成的数组
results = np.diff(c)
print(results)
print('\n')
results1 = np.diff(c)/c[:-1]*100  #相对前一天的涨幅
print(results1)
print('\n')
Standard_deviation =np.std(results) # 计算出标准差
print(Standard_deviation)

运行结果,代码、excel进行相比较:

5、对数收益与波动率

1)对数收益:log 函数得到每一个收盘价的对数,再对结果使用 diff 函数即可,

logreturns = np.diff( np.log(c) )
print(logreturns)

运行结果:

[ 0.01146966 -0.00571839 -0.00431035  0.00788817  0.09531018  0.09531018]

2) where的作用

 where 函数可以根据指定的条件返回所有满足条件的序列索引值,比如上述logreturns中有两个小于0的数据。

posretindices = np.where(results1 > 0) 
print('Indices with positive returns1',posretindices)

运行结果:

Indices with positive returns1 (array([0, 3, 4, 5], dtype=int64),)

3)波动率:波动率=对数收益率的标准差除以其均值,再除以交易周期倒数的平方根。下面代码分别为以年、月进行统计的波动率.

annual_volatility =(np.std(logreturns)/np.mean(logreturns))/np.sqrt(1./252.)#使用浮点数才能得到正确的结果
print ( annual_volatility )
#月波动率
month_volatility =(np.std(logreturns)/np.mean(logreturns))/np.sqrt(1./12.)
print ( month_volatility )

6、日期分析

处理日期总是很烦琐。NumPy是面向浮点数运算的,因此需要对日期做一些专门的处理。

通过上述代码,我们知道,修改函数np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)中的参数 usecols=(6,7)就可以读取不同的列,日期是在第2列,即下标应该为1(数列下标是从0开始的),可以重新定义新日期数列并获取后存入。

代码如下:

dates, c=np.loadtxt('data.csv', delimiter=',', usecols=(1,6), unpack=True) #读取下标为1、6的数据,分别存入到dates和c数列中。

但实际运行过程中会报错,

代码需要作如下修改:

import numpy as np
from datetime import datetime

def datestr2num(s): #定义一个函数
    return datetime.strptime(s.decode('ascii'),"%Y-%m-%d").date().weekday()  
#decode('ascii') 将字符串s转化为ascii码

#读取csv文件
dates,close=np.loadtxt('data.csv',delimiter=',', usecols=(1,6),converters={1:datestr2num},unpack=True)
print(dates)

运行结果:[4. 5. 6. 0. 1. 2. 3.],也是从0开始,到6结束。为了更好地说明数据,可以采用真实的数据,即从通信达软件直接下载真实的交易数据,如下图所示:

(注意:较原来少了一列空格列)

修改代码如下:

import numpy as np
from datetime import datetime

def datestr2num(s): #定义一个函数
    return datetime.strptime(s.decode('ascii'),"%Y-%m-%d").date().weekday()  
#decode('ascii') 将字符串s转化为ascii码

#读取csv文件
dates,c=np.loadtxt('data.csv',delimiter=',', usecols=(1,5),
                       converters={1:datestr2num},unpack=True)
print(dates)

print(len(dates)) #统计导出的天数

运行结果:

如上图,导出有420天数据。

按周一到周五,统计相关数据:

averages = np.zeros(5) #创建包含5个元素的数组,保存交易日收盘价,0-4分别代表周一到周五五个交易日
for i in range(5):  #遍历0到4的日期标识
    indices =np.where(dates==i)   #where函数得到各工作日的索引值并存储在 indices 数组
    prices=np.take(c,indices)   #take函数获取各个工作日的收盘价。
    avg= np.mean(prices) #每个工作日计算出平均值存放在 averages 数组
    averages[i] = avg  #每个工作日计算出平均值存放在 averages 数组
    print('day', i)
    #print('prices', prices)
    print("Average", avg)

print(averages)

当然除了上述外,还可以求得420天里的最大值、最小值以及交易日平均值中最大值、最小值等,对代码进行如下修:

import numpy as np
from datetime import datetime

def datestr2num(s): #定义一个函数
    return datetime.strptime(s.decode('ascii'),"%Y-%m-%d").date().weekday()  
#decode('ascii') 将字符串s转化为ascii码

#读取csv文件
dates,c=np.loadtxt('data.csv',delimiter=',', usecols=(1,5),
                       converters={1:datestr2num},unpack=True)

averages = np.zeros(5) #创建包含5个元素的数组,保存交易日收盘价,0-4分别代表周一到周五五个交易日
for i in range(5):  #遍历0到4的日期标识
    indices =np.where(dates==i)   #where函数得到各工作日的索引值并存储在 indices 数组
    prices=np.take(c,indices)   #take函数获取各个工作日的收盘价。
    avg= np.mean(prices) 
    averages[i] = avg  #每个工作日计算出平均值存放在 averages 数组,共有5个数值
    print('day', i)
    #print('prices', prices)
    print("Average", avg)

print(averages)
print('\n')

print('the top close price:',np.max(c)) #最高收盘价
print('the low close price:',np.min(c)) #最低收盘价
print('\n')

top = np.max(averages)  #找出averages数列中的最大值
print ("Highest average", top)
print ("Top day of the week", np.argmax(averages)) #argmax函数返回的是averages数组中最大元素的索引值
print('\n')

bottom = np.min(averages) #找出averages数列中的最小值
print ("Lowest average", bottom)
print ( "Bottom day of the week", np.argmin(averages))#argmin函数返回的是averages数组中最小元素的索引值

运行结果如下:

总结

本篇初步导入了真实的股票交易信息,并利用numpy常见函数对进行了初步的计算,列举了下列常用函数:

loadtxt() 函数可以方便地读取CSV文件,自动切分字段,并将数据载入NumPy数组。

savetxt()创建并保存test.txt文件

np.loadtxt('data.csv', delimiter=',', usecols=(6,7),)usecols参数用来选择读取的数列

np.average(c, weights=v) 加权平均,将v作为权重参数使用,

np.mean(c)) #算术平均值

np.max(h)) #获取最大值max()

np.min(l)) #获取最小值min()

np.ptp(h) ) 用ptp()函数计算了极值差,

np.median(c)) 中位数median()函数,即多个数据中,处于中间的数

np.msort(c))函数对价格数组进行排序,

np.var(c) 方差函数var()

np.diff(c) 函数可以返回一个由相邻数组元素的差值构成的数组

np.std(results) # 标准差

np.diff( np.log(c) )

np.where(results1 > 0) 选择

np.sqrt()#平方根sqrt(),浮点数

s.decode('ascii') 将字符串s转化为ascii码

np.take(c,indices) #take函数获取各个工作日的收盘价。

np.argmax(averages)) #argmax函数返回数组中最大元素的索引值

np.argmin(averages))#argmin函数返回数组中最小元素的索引值

以上就是python数据分析之NumPy常用函数使用详解的详细内容,更多关于Python NumPy常用函数的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python数据分析之NumPy常用函数使用详解

本文链接: https://www.lsjlt.com/news/118211.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python数据分析之NumPy常用函数使用详解
    目录文件读入1、保存或创建新文件 2、读取csv文件的函数loadtxt3、常见的函数4、股票的收益率等5、对数收益与波动率6、日期分析总结本篇我们将以分析历史股价为例,介...
    99+
    2022-11-11
  • Python数据分析之Numpy库的使用详解
    目录前言🧡Numpy库介绍💙ndarray 类常用属性💚Numpy常用函数🍓array函数🥝arang...
    99+
    2022-11-12
  • Python数据分析之pandas函数详解
    目录一、apply和applymap二、排序三、处理缺失数据一、apply和applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df...
    99+
    2022-11-12
  • Python数据分析Numpy中常用相关性函数
    目录摘要:一、股票相关性分析二、多项式三、求极值的知识摘要: NumPy中包含大量的函数,这些函数的设计初衷是能更方便地使用,掌握解这些函数,可以提升自己的工作效率。这些函数包括数组...
    99+
    2022-11-11
  • Python之Numpy 常用函数总结
    目录通用函数常见的简单数组函数一元函数二元函数通用函数 常见的简单数组函数 先看看代码操作: mport numpy as np # # 产生一个数组 arr=np.arange(1...
    99+
    2022-11-11
  • Python数据分析Numpy中常用相关性函数是什么
    今天小编给大家分享一下Python数据分析Numpy中常用相关性函数是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。摘要...
    99+
    2023-06-30
  • Pandas数据分析之groupby函数用法实例详解
    目录正文一、了解groupby二、数据文件简介三、求各个商品购买量四、求各个商品转化率五、转化率最高的30个商品及其转化率小小の总结正文 今天本人在赶学校课程作业的时候突然发现gro...
    99+
    2022-11-11
  • 详解如何使用numpy提高Python数据分析效率
    目录1、数组初始化2、数组元素计算3、数组元素提取NumPy是Python语言的一个第三方库,其支持大量高维度数组与矩阵运算。 作为python科学计算领域的三剑客之一,numpy在...
    99+
    2023-05-15
    Python numpy提高数据分析效率 Python提高数据分析效率 Python numpy数据分析 Python numpy
  • 玩数据必备Python库之numpy使用详解
    目录前言1. ndarray介绍2. ndarray的基本操作生成数组数组索引、切片修改数组形状修改数组类型数组去重删除元素3. ndarray运算逻辑运算统计运算数组运算4. ma...
    99+
    2022-11-13
  • python数据分析Numpy库的常用操作
    numpy库的引入: import numpy as np 1、numpy对象基础属性的查询 lst = [[1, 2, 3], [4, 5, 6]] def numpy_typ...
    99+
    2022-11-12
  • Python Asyncio库之asyncio.task常用函数详解
    目录前记0.基础1.休眠--asyncio.sleep2.屏蔽取消--asyncio.shield3.超时--asyncio.wait_for4.简单的等待--wait5.迭代可等待...
    99+
    2023-03-01
    Python Asyncio asyncio.task Python Asyncio Python asyncio.task
  • Pandas数据分析常用函数的使用
    目录一、数据导入导出二、数据加工处理三、列表格式设置Pandas是数据处理和分析过程中常用的Python包,提供了大量能使我们快速便捷地处理数据的函数和方法,在此主要整理数据分析过程...
    99+
    2023-01-16
    Pandas数据分析 Pandas数据分析函数
  • Python数据分析之堆叠数组函数怎么使用
    今天小编给大家分享一下Python数据分析之堆叠数组函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。numpy 堆...
    99+
    2023-07-05
  • python常用函数random()函数详解
    目录random()random.seed()randint()random() 方法返回随机生成的一个实数,它在[0,1)范围内。 random() 返回随机生成的一个实...
    99+
    2023-02-22
    python random()函数 python random
  • python常用函数详解
    1.函数的介绍 为什么要有函数?因为在平时写代码时,如果没有函数的话,那么将会出现很多重复的代码,这样代码重用率就比较低。。。并且这样的代码维护起来也是很有难度的,为了解决这些问题,就出现了函数,用来将一些...
    99+
    2022-06-04
    详解 函数 常用
  • Python数据分析之matplotlib绘图详解
    目录多子图散点图水平柱状图同位置柱状图多子图 figure是绘制对象(可以理解为一个空白的画布),一个figure对象可以包含多个Axes子图,一个Axes是一个绘图区域,不加设置时...
    99+
    2022-11-11
  • Pandas数据分析常用函数如何使用
    本篇内容介绍了“Pandas数据分析常用函数如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Pandas是数据处理和分析过程中常用的P...
    99+
    2023-07-05
  • Python数据分析 Numpy 的使用方法
    目录简介多维数组创建数组的数据类型数组维度简介 使用 Python 进行数据分析时,比较常用的库有 Numpy、Pandas、Matplotlib,本篇文章就来说一下 Numpy 的...
    99+
    2022-11-11
  • 详解Python之find函数的使用
    目录          一、find函数的官方定义          二、find函数的详细函数使用解释 一、find函数的官方定义 首先,Python的find函数多用在字符串的处理上,也是Python计算机二级的小考点。 定义:P...
    99+
    2023-10-12
    python
  • Python常用数据类型之列表使用详解
    目录1.常用数据结构之列表2.定义和使用列表2.1列表的运算符2.2列表元素的遍历3.列表的方法3.1添加和删除元素3.2元素位置和次数3.3元素排序和反转4.列表的生成式5.嵌套的...
    99+
    2022-11-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作