数据分析

介绍:

数据:就是21世纪的石油,而数据分析就是可以让我们发挥这些信息功能的重要手段。

数据分析可以做什么?

例子:

1.淘宝可以观察用户的购买记录,搜索记录以及人们在社交媒体上发布的内容选择商品推荐。

2.股票可以根据相应的数据选择买进卖出

3.今日头条可以将数据分析应用到新闻推送排行算法当中

4.爱奇艺可以为用户提供个性化电影推荐服务

 

为什么用python进行数据分析

1.python的代码语法简单易学

2.python可以很容易的整合C、C++等语言的代码

3.python有大量用于科学计算的库

4.python不仅可以用于研究和原型构建,同时也适用于构建生产系统

 

Ipython:

安装:pip install ipython

 

jupyter notebook

安装和启动有两种方式

一:命令行安装:

pip install jupyter

启动:

C:\Users\oldboy>jupyter notebook

缺点:

必须手动安装数据分析包

二:anaconda

Anaconda是Python的一个开源的发行版本,里面包含了很多科学计算相关的包,它和Python的关系就像linux系统中centos和Ubuntu的关系一样,不冲突,你可以同时在电脑上安装这两个东西。那至于为什么我已经在电脑上安装了pycharm还要安装这个Anaconda呢,主要有以下几点原因:

(1)Anaconda附带了一大批常用数据科学包,它附带了conda、Python和 150 多个科学包及其依赖项。因此你可以用Anaconda立即开始处理数据。

(2)管理包。Anaconda 是在 conda(一个包管理器和环境管理器)上发展出来的。在数据分析中,你会用到很多第三方的包,而conda(包管理器)可以很好的帮助你在计算机上安装和管理这些包,包括安装、卸载和更新包。

(3)管理环境。为什么需要管理环境呢?比如你在A项目中用到了Python2,而新的项目要求使用Python3,而同时安装两个Python版本可能会造成许多混乱和错误。这时候conda就可以帮助你为不同的项目建立不同的运行环境。还有很多项目使用的包版本不同,比如不同的pandas版本,不可能同时安装两个pandas版本。你要做的应该是在项目对应的环境中创建对应的pandas版本。这时候conda就可以帮你做到。

总结:Anaconda解决了官方Python的两大痛点:

(1)提供了包管理功能,Windows平台安装第三方包经常失败的场景得以解决

(2)提供环境管理功能,解决了多版本Python并存、切换的问题。

 

下载:https://www.anaconda.com/distribution/#download-section

 

 

 按照上面的路径点击下载,下载完成后就可以一路点击下一步完成安装,如果中间需要修改安装路径可以自己改一下。安装成功之后我们会发现,多出来几个应用

  • Anaconda Navigtor :用于管理工具包和环境的图形用户界面,后续涉及的众多管理命令也可以在 Navigator 中手工实现。
  • Jupyter notebook :基于web的交互式计算环境,可以编辑易于人们阅读的文档,用于展示数据分析的过程。
  • qtconsole :一个可执行 IPython 的仿终端图形界面程序,相比 Python Shell 界面,qtconsole 可以直接显示代码生成的图形,实现多行代码输入执行,以及内置许多有用的功能和函数。
  • spyder :一个使用Python语言、跨平台的、科学运算集成开发环境

配置环境变量

windows环境需要在控制面板\系统和安全\系统\高级系统设置\环境变量\用户变量\PATH当中添加anaconda的安装目录的Scripts文件夹。

验证:

打开命令行输入conda --version,如果能输出版本号就对了

 

 

 运行Anaconda

打开安装的Anaconda文件

 

 

 

点击Anaconda Navigator运行

 

 

选择图中圈起来的按钮,会弹出来四个选择,选择最后一个Jupyter Notebook就可以打开代码编辑工具,如果不是用谷歌浏览器打开的,先尝试修改默认浏览器,或者按照第七条的补充内容进行修改 

 

 

 

以上就是我们本机的根目录,就类似于windows系统的User目录,接下来就可以点击右上角的New按钮选择创建一个Python3文件,这个文件的后缀名是.ipynd.

接下来我们所有的程序都要在这个上面进行编写:

 

 

 Numpy的用法

简介

Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它。NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。

引用方法

import numpy as np

这是官方认证的导入方式,可能会有人说为什么不用from numpy import *,是因为在numpy当中有一些方法与Python中自带的一些方法,例如maxmin等冲突,为了避免这些麻烦大家就约定俗成的都使用这种方法。

 

ndarray-多维数组对象

Numpy的核心特征就是N-维数组对——ndarray.

为什么用ndarray?

需求:

已知若干家跨国公司的市值(美元),将其换算为人民币

按照Python当中的方法
第一种:是将所有的美元通过for循环依次迭代出来,然后用每个公司的市值乘以汇率
第二种:通过map方法和lambda函数映射

这些方法相对来说也挺好用的,但是再来看通过ndarray对象是如何计算的

 

 

 通过ndarray这个多维数组对象可以让这些批量计算变得更加简单,当然这只它其中一种优势,接下来就通过具体的操作来发现。

创建ndarray对象

np.array()

ndarray是一个多维数组列表

 

 

 

有的人可能会说了,这个数组跟Python中的列表很像啊,它和列表有什么区别呢?

  • 数组对象内的元素类型必须相同
  • 数组大小不可修改

常用属性

属性                           描述

T                           数组的转置

dtype                     数组的数据类型

size                        数组元素的个数

ndim                       数组的维数

shape                     数组的维度大小(以元组的形式)

T:转置
li1 = [
    [1,2,3],
    [4,5,6]
] 
a = np.array(li1)
a.T
执行结果:
array([[1, 4],
       [2, 5],
       [3, 6]])
就相当于是将行变成列,列变成行,它也是一个比较常用的方法

数据类型

类型           描述

布尔型        bool_

整型           int_ int8 int16 int32 int 64   

无符号整型     uint8 uint16 uint32 uint64

浮点型             float_ float16 float32 float64

复数型           complex_ complex64 complex128

int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数

无符号整型:
只能用来存正数,不能用来存负数

补充:
astype()方法可以修改数组的数据类型

ndarray创建

方法                           描述 

array()                       将列表转换为数组,可选择显式指定dtype

arange()                    range的numpy版,支持浮点数

linspace()                  类似arange(),第三个参数为数组长度

zeros()                       根据指定形状和dtype创建全0数组

ones()                        根据指定形状和dtype创建全1数组

empty()                       根据指定形状和dtype创建空数组(随机值)

eye()                           根据指定边长和dtype创建单位矩阵

1、arange():
np.arange(1.2,10,0.4)
执行结果:
array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. ,
       6.4, 6.8, 7.2, 7.6, 8. , 8.4, 8.8, 9.2, 9.6])
# 在进行数据分析的时候通常我们遇到小数的机会远远大于遇到整数的机会,这个方法与Python内置的range的使用方法一样
-----------------------------------------------------------------
2、linspace()
np.linspace(1,10,20)
执行结果:
array([ 1.        ,  1.47368421,  1.94736842,  2.42105263,  2.89473684,
        3.36842105,  3.84210526,  4.31578947,  4.78947368,  5.26315789,
        5.73684211,  6.21052632,  6.68421053,  7.15789474,  7.63157895,
        8.10526316,  8.57894737,  9.05263158,  9.52631579, 10.        ])
# 这个方法与arange有一些区别,arange是顾头不顾尾,而这个方法是顾头又顾尾,在1到10之间生成的二十个数每个数字之间的距离相等的,前后两个数做减法肯定相等
----------------------------------------------------------------
3、zeros()
np.zeros((3,4))
执行结果:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
# 会用0生成三行四列的一个多维数组
---------------------------------------------------------------------
4、ones()
np.ones((3,4))
执行结果:
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
# 会用1生成三行四列的一个多维数组
------------------------------------------------------------------------
5、empty()
np.empty(10)
执行结果:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
# 这个方法只申请内存,不给它赋值
-----------------------------------------------------------------------
6、eye()
np.eye(5)
执行结果:
array([[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.]])

索引和切片

li1 = [
    [1,2,3],
    [4,5,6]
] 
a = np.array(li1)
a * 2
运行结果:
array([[ 2,  4,  6],
       [ 8, 10, 12]])

索引

# 将一维数组变成二维数组
arr = np.arange(30).reshape(5,6) # 后面的参数6可以改为-1,相当于占位符,系统可以自动帮忙算几列
arr

# 将二维变一维
arr.reshape(30)

# 索引使用方法
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])
现在有这样一组数据,需求:找到20
列表写法:arr[3][2]
数组写法:arr[3,2]  # 中间通过逗号隔开就可以了

切片

arr数组
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])
arr[1:4,1:4]   # 切片方式
执行结果:
array([[ 7,  8,  9],
       [13, 14, 15],
       [19, 20, 21]])

切片不会拷贝,直接使用的

 

 

 布尔型索引

li = [random.randint(1,10) for _ in range(30)]
a = np.array(li)
a[a>5]
执行结果:
array([10,  7,  7,  9,  7,  9, 10,  9,  6,  8,  7,  6])
----------------------------------------------
原理:
a>5会对a中的每一个元素进行判断,返回一个布尔数组
a > 5的运行结果:
array([False,  True, False,  True,  True, False,  True, False, False,
       False, False, False, False, False, False,  True, False,  True,
       False, False,  True,  True,  True,  True,  True, False, False,
       False, False,  True])
----------------------------------------------
布尔型索引:将同样大小的布尔数组传进索引,会返回一个有True对应位置的元素的数组

 

花式索引

就是数组里面套数组,然后里面的数组存放索引。

 

通用函数

能对数组中所有元素同时进行运算的函数就是通用函数。

 

一元函数

函数                       功能

abs                         分别是计算整数和浮点数的绝对值

sqrt                        计算各元素的平方根

square     计算各元素的平方

exp        计算各元素的指数e**x

log       计算自然对数

sign        计算各元素的正负号

cell       计算各元素的ceiling值

floor      计算各元素floor值,即小于等于该值的最大整数

rint      计算各元素的值四舍五入到最接近的整数,保留dtype

modf      将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似

isnan      计算各元素的正负号

isinf      表示那些元素是无穷的布尔型数组

cos,min,tan    普通型和双曲型三角函数

二元函数

 

 

数学统计方法

 

 

 随机数

随机数生成函数在np.random的子包当中

 

 

 

 

 

 

 

 

 

 

posted @ 2019-12-02 19:49  帅气逼人23  阅读(227)  评论(0编辑  收藏  举报