数据分析+金融量化分析入门
今日内容:
1.数据分析的概述 2.数据分析的常见包:numpy,pandas,matplotlib 3.经融的知识:量化的平台,策略
一.数据分析的概述
1.数据分析是什么? 数据就是信息,而数据分析就是可以让我们可以发挥这些信息功能的重要手段.2.数据分析能干什么? 淘宝可以观察用户的购买记录,搜索记录以及人们在社交媒体上发布的内容选择商品推荐 股票可以根据相关的数据进行买进卖出 今日头条可以将数据分析应用到新闻推送排行算法中 PS:现在我们一般称呼今日头条这种定向推送新闻视频的算法 叫做投喂,这个也称为现代社会的毒品,用户喜欢什么,我们就推送什么 用户想要啥,我们就推送啥,这样用户的粘合度才会比较高 头条最厉害的也就是这个算法,推荐算法. 头条的推荐算法是百度的人开发的,头条一开始就是从百度挖的人3.为什么要利用Python进行数据分析? 1).python的语法简单易学 2).python可以很容易的整合C,C++等语言的代码 3).python有大量可以用于科学计算的库 4).python不仅可以用于研究和原型构建,同时也可以用于构建生产系统 python没有火之前,使用的是R语言进行数据分析 但是R语言有很多弊端,现在python可以实现R语言所有的功能 而且实现更加简单,更为方便
python的主要的几个方向以及介绍:1).web方向(但是世界上百分之80的网站都是php写的)2).自动化运维(ansible,saltstack)3).数据分析+爬虫4).人工智能(目前并不是很看好人工智能)
4.数据的来源? 1).小公司一般用爬虫爬取 2).大公司一般自己产生数据5.数据分析的过程概述 提出问题==>>整理数据(收集数据,评估数据,清理数据)==>>探索性数据分析===>>得出结论===>>传达结果
二.数据分析的常见包
1.numpy
numpy是Numerical Python的简写,主要可以用来做python数值计算,它提供了多种数据结构,算法,以及大部分涉及python计算所需要的接口.基于C,C++ 构建的
1.快速高效的多维数组对象ndarray2.基于元素的数组计算以及直接对数组执行数学运算的函数3.用于读写硬盘上基于数据的数据集的工具4.线性代数运算,傅里叶变换以及随机数生成5.有用于将C,C++,Fortran代码集成到python的工具
2.pandas
pandas是我们进行数据分析的一个主要工具,它所包含的数据结构和数据处理工具的设计,使得python中进行数据清洗和分析非常快捷,pandas一般也是和其他数值计算工具一起使用的,支持大部分numpy语言风格的数组计算,pandas和numpy最大的区别就是pandas是用来处理表格型或者异质性数据的,而numpy刚好相反,它更适合处理同质型的数值类型数组数据.基于numpy构建的.
3.matplotlib
matplotlib是最流行的用于绘制数据图标的python库
4.Scipy
Scipy是科学计算领域正对不同标准问题域的包集合,提供了强大的科学计算方法,(矩阵分析,信号分析,数据分析)
5.IPyton和Juypyter notebook
Ipython是一个加强版的python解释器,juypyter notebook s是一种基于web的代码笔记本,最初也是源于ipython
6.写代码的工具
在实际的数据分析过程中,我们一般都不直接使用pycharm等工具进行代码的编辑工作.因为pycharm集成了大量的Django等框架,这些东西都是在数据分析中使用不到的,显得比较繁重,影响数据处理的效率与速度,为了更快的进行数据分析与处理,一般公司用的比较多的都是:jupyter notebook(一种网页版的编译器)来进行数据分析与处理
jupyter notebook有两种安装方式:
1).命令行的安装
在CMD窗口输入python 之后,可以进行一些代码的编辑,但是代码没有提示,没有高亮,不是很方便,但是安装一个ipython之后,就可以了,具体安装步骤如下:
在cmd终端输入命令:pip3 install ipython
然后就可以进行代码编辑了.
这是我们的ipython模块,安装好之后可以测试玩一下,现在我们要介绍的这个jupyter notebook 就是基于这个ipython 构建的
exit() 之后,在命令行窗口输入pip 3 install jupyter进行安装
安装之后启动jupyter notebook ,
默认是在当前路径下启动,所以,在启动之前,你要进入到你想启动的项目目录中:
D:
cd +你制定的项目路径名
jupyter notebook
然后就自动启动了jupyter notebook ,
如果你设置了默认浏览器,会自动启动一个浏览器,如果没有设置默认浏览器,
就会有以下这种运行结果:
To access the notebook, open this file in a browser: file:///C:/Users/DELL/AppData/Roaming/jupyter/runtime/nbserver-18292-open.html Or copy and paste one of these URLs: http://localhost:8888/?token=3b492dc8f460a022e24bba0b55ead6454ef3c2089f14a929 or http://127.0.0.1:8888/?token=3b492dc8f460a022e24bba0b55ead6454ef3c2089f14a929
将这个URLs拷贝到浏览器中打开,就可以了.
2).安装一个anaconda,这个里面集成了jupyter notebook .
下面具体介绍numpy的一些细节
import numpy as np
shop_car = [2,3,1,7] ###购物车中商品的数量price = [12,23,10,45] ### 商品对应的价格####现在要求总价
###传统的方法sum = [0,0,0,0]for i in range(0,4): index = price[i] * shop_car[i] sum[i] = index print(sum)
[24, 69, 10, 315]
##使用Numpy 的方法shop_car_np = np.array(shop_car)price_np = np.array(price)sum = shop_car_np*price_npprint(sum)########## 将这两个一维数组对应相乘
[ 24 69 10 315]
####示例 2 rmb = [2,10,100,20]rmb_np = np.array(rmb)print(rmb_np*5)## [ 10 50 500 100][ 10 50 500 100]###常见的属性arr = np.array([1,2,3,4,5])print(arr[1])print(arr.size)## 类似于python中的length25### 高维数组arr2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])print(arr2)[[ 1 2 3 4 5] [ 6 7 8 9 10]]### 转置 print(arr2.T)[[ 1 6] [ 2 7] [ 3 8] [ 4 9] [ 5 10]arr2.dtype ### 查看数据类型##dtype('int32')
dtype('int32')
ndarry的创建
arr3 = np.array([1,2,3,4,5])print(arr3[0])
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.linspace(0,10,10) ### 在0和10之间等分切取10个数字
array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444, 5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])
np.zeros(5) ### 生成5 个零的向量
array([0., 0., 0., 0., 0.])
np.ones(10) ### 生成10 个1 的向量
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.eye(3,3) ### 生成 3 行 3 列的单位矩阵#array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
数组切片
记住数组(向量)的切片和列表的切片是一模一样的
arr4 = np.array([1,2,3,4,5,6,7,8,9,10])arr5 = arr4[1:5] ##够头不顾尾print(arr5)
[2 3 4 5]
arr6 = np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7]])print(arr6)
[[1 2 3 4] [2 3 4 5] [3 4 5 6] [4 5 6 7]]
print(arr6[1,3])### 输出数组的第2行第4列
5
print(arr6[1:3,1:4])##多维矩阵切片,逗号前面表示行数的起始和终止 ## 逗号后面表示列数的起始和终止 ## 注意这里的行数列数都是从零开始,顾头不顾尾
[[3 4 5] [4 5 6]]
arr7 = np.arange(10)print(arr7)
[0 1 2 3 4 5 6 7 8 9]
### 现在要将这个一维的长度为10的数组切分成多维的
arr7.reshape(2,5) ### 将这个1行10列变成2行5列##array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) ## 注意这里的行数和列数的乘积要保持不变 ,否则会报错
array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]])
数组的向量运算
arr8 = np.array([1,2,3,4,5,6])arr9 = np.array([6,5,4,3,2,1])arr10 = arr8+arr9 ## 向量加法print(arr10)arr11 = arr8-arr9 ### 向量减法print(arr11) arr12 = arr8 * arr9 ### 向量乘法print(arr12)arr13 = arr8 / arr9 ### 向量除法 print(arr13) ### 必须数组对应长度相等,才能做这个加减乘除arr14 = arr8.reshape(3,2)arr15 = arr9.reshape(3,2)arr16 = arr15 * arr14print(arr16)### [7 7 7 7 7 7]## [-5 -3 -1 1 3 5]## [ 6 10 12 12 10 6]## [0.16666667 0.4 0.75 1.33333333 2.5 6. ]## [[ 6 10]## [12 12]## [10 6]]
[7 7 7 7 7 7] [-5 -3 -1 1 3 5] [ 6 10 12 12 10 6] [0.16666667 0.4 0.75 1.33333333 2.5 6. ] [[ 6 10] [12 12] [10 6]]
import randomli = [random.randint(1,10) for _ in range(30)]
a = np.array(li)print(a)
[ 1 5 9 8 5 10 5 7 5 4 10 10 8 4 9 8 7 5 3 10 3 10 5 9 5 3 5 2 2 9]
a[a>5]a>5## array([False, False, True, True, False, True, False, True, False, False, True, True, True, False, True, True, True, False, False, True, False, True, False, True, False, False, False, False, False, True])
array([False, False, True, True, False, True, False, True, False, False, True, True, True, False, True, True, True, False, False, True, False, True, False, True, False, False, False, False, False, True])
通用函数
能对数组中所有元素同时进行运算的函数就是通用函数常见的通用函数: