Python数据分析--Numpy常用函数介绍(2)

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

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

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

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

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

1、保存或创建新文件

import numpy as npi = 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 npi = 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]
  1. 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 datetimedef 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 datetimedef 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 datetimedef 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©) #算术平均值np.max(h)) #获取最大值max()np.min(l)) #获取最小值min()np.ptp(h) ) 用ptp()函数计算了极值差,np.median©) 中位数median()函数,即多个数据中,处于中间的数np.msort©)函数对价格数组进行排序,np.var© 方差函数var()np.diff© 函数可以返回一个由相邻数组元素的差值构成的数组np.std(results) # 标准差np.diff( np.log© )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函数返回数组中最小元素的索引值

下一篇将介绍股市中常见的几个指标线,如移动均线、布林线等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bzoj3224: Tyvj 1728 普通平衡树(打个splay暖暖手)

&#xff08;其实今天好热啊&#xff1f; 题目大意&#xff1a;插入&#xff0c;删除&#xff0c;k小&#xff0c;前驱后继&#xff0c;数的排名。 splay和treap裸题...过几天补个treap的 splay: #include<iostream> #include<cstdlib> #include<cstring> #i…

手机相机自动识别语音提示

技术背景&#xff1a; 时下流行的手机拍照功能越来越多&#xff0c;在众多的手机拍照过程中&#xff0c;我们只在于手机拍照的效果和风景是否美好&#xff0c;甚至拿着手机自我狂拍&#xff0c;留下美好的记忆和回忆。 有时候根据手机相机的已有技术功能随便一设置就能拍到理想…

c# Invoke和BeginInvoke 区别

转自http://www.cnblogs.com/c2303191/articles/826571.html Control的Invoke和BeginInvoke是相对于支线线程&#xff08;因为一般在支线线程中调用&#xff0c;用来更新主线程ui&#xff09;Invoke立即插入主线程中执行&#xff0c;而BeginInvoke 要等主线程结束才执行 近日&a…

04 Springboot 格式化LocalDateTime

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

DNN使用非80端口和总是跳转到http://localhost问题的解决

2019独角兽企业重金招聘Python工程师标准>>> 我试图在一台服务器上安装一个DNN网站时&#xff0c;遇到了一些问题。问题一&#xff1a;遇到的第一个问题就是网站总是自动导向到localhost。不管我怎么试&#xff0c;只要我输入http://domain.com/dnn&#xff0c;总是…

Jmter操作数据库

1、导入jdbc的jar包&#xff0c;因为jmeter本身不能直接连接mysql&#xff0c;所以需要导入第三方的jar包&#xff0c;来连接mysql&#xff0c;如下操作&#xff1a;2、创建数据库连接如下&#xff1a; 3、配置mysql的url、端口号、账号、密码注意上面的Database URL&#xff1…

ComponentOne FlexGrid for WinForms 中文版快速入门(9)—过滤

C1FlexGrid过滤 表格中的数据过滤通常有两种形式&#xff1a; 基于表头&#xff1a;过滤器的图标出现在有一个过滤器适用于它的每一列。用户可以通过点击过滤器的图标来查看和编辑过滤器。这是Windows 7或Vista或C1FlexGrid控件使用的机制。这种类型的过滤器的主要优点是&…

Pycharm搜索导航之文件名、符号名搜索

1、准备一个工程 向你的工程中添加一个Python文件&#xff0c;并输入一些源码&#xff0c;例如&#xff1a; 2、转到对应文件、类、符号 Pycharm提供的一个很强力的功能就是能够根据名称跳转到任何文件、类、符号所在定义位置。 3、跳转到文件 按下CtrlShiftN快捷键&#xff0c…

分享网页设计当中使用进度条打造精美界面最佳例子

进度条是用户界面的重要组成部分&#xff0c;他向用户显示当前的下载进度&#xff0c;一个小的圆形因素使得界面不是更方便也更容易理解让我们举个例子&#xff0c;想象你去一个网站&#xff0c;你需要下载视频&#xff0c;你选择一个文件&#xff0c;按下"下载"按钮…

基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

软件项目管理 3.5.敏捷生存期模型

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

spark内核揭秘-02-spark集群概览

2019独角兽企业重金招聘Python工程师标准>>> Spark集群预览&#xff1a; 官方文档对spark集群的初步描述如下&#xff0c;这是一个典型的主从结构&#xff1a; 官方文档对spark集群中的一些关键点给出详细的指导&#xff1a; 其Worker的定义如下所示&#xff1a; 需…

使用docker创建和运行跨平台的容器化的mssql数据库

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

八十中集训解题报告

&#xff08;持续更新中…………&#xff09; 去八十中被屠成渣了&#xff0c;被屠得毫无还手之力&#xff0c;被屠得丧心病狂&#xff0c;停都停不下来&#xff0c;于是只好来写写题解了。 题目在openjudge上都有&#xff0c;自己去翻。 Day 1&#xff1a; 第一题&#xff1a;…

ER图

1、E-R图也称实体-联系图(Entity Relationship Diagram)&#xff0c;提供了表示实体类型、属性和联系的方法&#xff0c;用来描述现实世界的概念模型。2、它是描述现实世界概念结构模型的有效方法。是表示概念模型的一种方式&#xff0c;用矩形表示实体型&#xff0c;矩形框内写…

CXP 协议中upconnection 与downconnection的说明及其区别

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Eclipse之文件【默认编码格式设置】,防止乱码等问题

文件默认编码格式设置步骤如下&#xff1a; 这里显示的是workspace的视图 其他格式文件的视图如下&#xff1a; 转载于:https://www.cnblogs.com/TCB-Java/p/6857923.html

浏览器上写代码,4核8G微软服务器免费用,Codespaces真香

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

简单的创建一个性能计数器

一、性能监控的作用性能监控可以用于获取关于应用程序的正常行为的一般消息&#xff0c;性能监控是一个强大的工具&#xff0c;有助于理解系统的工作负载&#xff0c;观察变化和趋势&#xff0c;尤其是运行在服务器上的应用程序二、性能监控类&#xff08;System.Diagnostics&a…

dubbo是如何实现可扩展的?(二)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…