Python数据分析学习笔记五

来源:互联网 发布:淘宝上的avada主题 编辑:程序博客网 时间:2024/04/27 06:11

NumPy常用函数一


文件读写:

1、创建单位矩阵,所谓单位矩阵就是主对角线上所有元素都是1,其他地方全是0的二维数组,numpy可以很方便地创建这样的矩阵,即利用eye函数,例:
import numpy as npa = np.eye(5)print a

输出结果:

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

2、利用savetxt函数将单位矩阵写入txt文件

import numpy as npa = np.eye(5)np.savetxt("save.txt", a)

save txt函数中需要传入两个参数,第一个参数传入的要写入的文件名,如果文件不存在,则会自动创建该文件。默认的文件位置是与程序执行文件在同一个文件夹下的。如需保存在其他位置,则需在文件名前加上其路径。
文件内容:

1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+000.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+000.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+000.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+000.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00

3、读入csv文件
通常数据库的转存文件就是csv文件,文件中的各个字段对应于数据库表中的列,excel也可以处理csv文件。在numpy中loadtxt函数可以方便的进行csv文件的读取,并且可以自动识别不同字段。
以股票代码000875的股票为例:
csv文件内容:
其中分为几个不同的字段,依次为:日期、开盘价、最高价、收盘价、最低价……我们只关心开盘价和收盘价

2016-04-27,6.01,6.04,5.95,5.92,151508.7,-0.02,-0.34,5.966,6.189,6.299,178545.49,275472.56,366315.7,1.362016-04-26,5.93,5.97,5.97,5.89,126277.68,0.05,0.84,5.986,6.256,6.309,250581.85,368244.46,372865.3,1.142016-04-25,6.0,6.0,5.92,5.84,172768.88,-0.08,-1.33,6.08,6.296,6.328,265084.7,381901.72,380733.86,1.562016-04-22,5.95,6.01,6.0,5.92,185749.47,0.01,0.17,6.18,6.35,6.351,287188.5,402764.62,386066.2,1.672016-04-21,6.06,6.08,5.99,5.98,256422.73,-0.06,-0.99,6.29,6.385,6.369,313467.15,420483.84,400645.43,2.312016-04-20,6.46,6.46,6.05,5.9,511690.5,-0.39,-6.06,6.412,6.433,6.392,372399.63,463586.86,405791.36,4.612016-04-19,6.46,6.47,6.44,6.39,198791.91,0.02,0.31,6.526,6.471,6.413,485907.08,451513.18,407063.63,1.792016-04-18,6.55,6.56,6.42,6.42,283287.91,-0.13,-1.99,6.512,6.473,6.417,498718.73,486015.14,434016.28,2.552016-04-15,6.63,6.63,6.55,6.51,317142.69,-0.05,-0.76,6.52,6.459,6.412,518340.73,484362.59,450034.2,2.862016-04-14,6.59,6.62,6.6,6.5,551085.12,-0.02,-0.3,6.48,6.438,6.391,527500.53,486393.04,452167.34,4.962016-04-13,6.4,6.85,6.62,6.4,1079227.75,0.25,3.92,6.454,6.409,6.363,554774.08,457158.84,439511.19,9.722016-04-12,6.45,6.45,6.37,6.32,262850.19,-0.09,-1.39,6.416,6.362,6.333,417119.29,377486.14,396281.35,2.37

我们将开盘价和收盘价提取出来,并且分别存放在c和v两个数组中,代码为:

import numpy as npc,v = np.loadtxt("000875.csv",delimiter=',',usecols=(1,3),unpack=True)print cprint "\n\n"print v

输出结果为:

[ 6.01  5.93  6.    5.95  6.06  6.46  6.46  6.55  6.63  6.59  6.4   6.45][ 5.95  5.97  5.92  6.    5.99  6.05  6.44  6.42  6.55  6.6   6.62  6.37]

在上例中,loadtxt函数传入了几个参数,第一个为要读取的文件名,第二个参数代表我们使用半角字符’,’作为分隔符,第三个参数代表读取第1,3两列,这是一个元组,最后一个参数设置为True代表分拆存储不同列的数据.

在这里出现过一个错误

Traceback (most recent call last):  File "/Users/wujian/PycharmProjects/untitled/ravel.py", line 3, in <module>    c,v = np.loadtxt("/Users/wujian/Desktop/000875.csv",delimiter=',',usecols=(1,3),unpack=True)  File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/numpy/lib/npyio.py", line 805, in loadtxt    items = [conv(val) for (conv, val) in zip(converters, vals)]ValueError: invalid literal for float(): open

原因是我在这里用的文件是从网络中下载而来的,在下载的过程中,把字段名也存储到了文件中,也就是形成了下面这样的文件内容:

date,open,high,close,low,volume,price_change,p_change,ma5,ma10,ma20,v_ma5,v_ma10,v_ma20,turnover2016-04-27,6.01,6.04,5.95,5.92,151508.7,-0.02,-0.34,5.966,6.189,6.299,178545.49,275472.56,366315.7,1.362016-04-26,5.93,5.97,5.97,5.89,126277.68,0.05,0.84,5.986,6.256,6.309,250581.85,368244.46,372865.3,1.14

所以在第一行的时候无法识别,只需要把第一行去掉就可以了。

0 0
原创粉丝点击