一、简介

Python for Data Analysis这本书的特点是将numpy和pandas这两个工具介绍的很详细,这两个工具是使用Python做数据分析非常重要的一环,numpy主要是做矩阵的运算,pandas主要是做数据的预处理,另外本书还教了其他数据分析相关的工具,比如matplotlib用来作图,iPython用来测试、调试代码。本书着重在工具介绍,所以在阅读前最好要对数据分析的理论有一定的了解。

二、Jupyter和Python的介绍

Jupyter是结合代码输入、运行到结果显示为一体的工具,安装后可以直接在浏览器上面使用,非常方便,这边先略过介绍。如果对Python熟悉的话也可以先跳过前面的基础介绍,Python在数据分析方面要对列表(list)和字典(dict)这两个元素的操作非常熟悉,如果还不太熟悉的本书有非常完整的介绍。下面就挑几个重点指令来介绍吧。

1、decode

以前在做NLP爬虫、NLP项目上面在Unicode上面搞了很久,一般网页都会使用unicode来编码,所以用requests抓取下来的通常是编码后的字符,这个时候必须要先去查看网页的编码方式(看是用GBK还是utf-8),再使用decode+编码方式进行解码。

2、range

自动生成一个数列,range(开始值,结束值,间距)若是只输入一个默认开始值为0,间距为1。range在测试练习的时候很好用,也可以限制循环次数,避免一次跑过多的循环,或是拉数据的时候可以限制显示的数量,挺常用的一个指令。

3、sort、sorted

排序指令,可以将序列由小到大排好,也可以指定排列方式。排序我之前比较常用的是在推荐系统,可以将相似度比较高的前几名展示出来。reversed也是排序指令,只是他是顺序颠倒的(大的在前面)

4、lambda(匿名函数)

之前看过,当时不太了解用法,学完后觉得很简单,就是将函数匿名化并且写在同一行,例如lambda x : x+2,就是将这个函数定为传进来的数加2。

5、生成器

也是我之前比较不了解的东西,简单来说就是我编了一个数据生成规则,生成器会按照要求依次产生数据,比如gen = (x*2 for x in range(1000)), 每次调用gen他就会依次给我0,2,4,6...

三、Numpy的介绍

本书的精华之一,就是将numpy讲的很仔细,熟练numpy就可以更好的操控矩阵,利用矩阵代替for循环来做遍历检查可以节省大量的计算时间,是numpy最大的功效,之前看吴恩达的机器学习时也是花了很多时间才理解矩阵要怎么去使用。下面就是一些numpy的主要操作。

1、矩阵生成

要使用numpy需要先将numpy导入,代码为import numpy as np,接着就可以用np来进行操作了。data = np.random.randn(2,3)就可以生成一个2x3的随机数字矩阵。如果要生成矩阵就用data2 = np.array([1,2,3], [4,5,6])。使用data.shap来查看矩阵的行列数,data.dtype来查看矩阵里面的数据类型。

2、矩阵切片

矩阵切片可以将矩阵做切割,方式和序列的切片有点类似,首先要先了解numpy矩阵的选取方式,以上面的data2举例

data2 = [1, 2, 3],

[4, 5, 6]

data2[0]就是指[1, 2, 3],而data2[0][1]或是data2[0, 1]就是在指‘2’这个数。了解了numpy矩阵的定位方式,就要说明切片了,在python切片使用冒号(:),在numpy也是,比如data2[:1] = [1, 2, 3],而data2[:1, :2] = [1, 2],活用切片可以更好的从矩阵里选取要分析的数据。

3、轴对换、相乘

轴对换在矩阵计算中是一个很重要的概念,由于矩阵相乘的条件是前面的列需要=后面的行, 假如两个data2要相乘,需要把后面的先做行列转换,也就是轴对换,使用方式就是data2.T,变换后会变成

data2.T = [1, 4],

[2, 5],

[3, 6]

再使用np.dot做矩阵相乘的计算,代码为np.dot(data2, data2.T)或是data2.dot(data2.T),就可得到( [1*1 + 2*2 + 3*3, 1*4 + 2*5 + 3*6], [4*1 + 5*2 + 6*3, 4*4 + 5*5 + 6*6] )这个新的矩阵。

3、条件填入(where)

假如我们希望可以将矩阵里面的数据进行条件式的替换,例如将矩阵里面小于0的数字用0代替,就可以用where这个函数,where(条件,填入,否则),第一格输入填入条件,在这个案例就是arr<0,第二个是填入0,第三个就是所有arr>=0的都不变,就是arr。

4、通用函数

numpy提供了许多的通用函数,提供了快速计算的功能,就不逐个介绍,可以直接看下面的列表,或是需要的时候再去查询。

一元通用函数表

二元通用函数表

5、数据处理

前面提到,numpy在数据分析里面有个重要的任务,就是利用“矩阵”取代“for循环”,下面就来介绍如何取代和取代的成效。

假定我要对序列X = np.range(10000)做平方,下面为用for循环写和numpy运算的结果

可以发现用for循环要处理226秒的程序,numpy只用了1.84秒,可以见用numpy来替代for循环可以节省多少时间,另外numpy是将矩阵储存在连续的内存里做运算,所以内存占用也会减少,在处理TB级以上的数据运算可以大幅的提升效率。

这边先介绍numpy,接下来的文章将继续介绍pandas。

Python for Data Analysis 学习心得(一) - numpy介绍的更多相关文章

  1. Python for Data Analysis 学习心得(四) - 数据清洗、接合

    一.文字处理 之前在练习爬虫时,常常爬了一堆乱七八糟的字符下来,当时就有找网络上一些清洗数据的方式,这边pandas也有提供一些,可以参考使用看看.下面为两个比较常见的指令,往往会搭配使用. spli ...

  2. Python for Data Analysis 学习心得(二) - pandas介绍

    一.pandas介绍 本篇程序上篇内容,在numpy下面继续介绍pandas,本书的作者是pandas的作者之一.pandas是非常好用的数据预处理工具,pandas下面有两个数据结构,分别为Seri ...

  3. Python for Data Analysis 学习心得(三) - 文件读写和数据预处理

    一.Pandas文件读写 pandas很核心的一个功能就是数据读取.导入,pandas支援大部分主流的数据储存格式,并在导入的时候可以做筛选.预处理.在读取数据时的选项有超过50个参数,可见panda ...

  4. 数据分析---《Python for Data Analysis》学习笔记【03】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  5. 数据分析---《Python for Data Analysis》学习笔记【02】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  6. 数据分析---《Python for Data Analysis》学习笔记【01】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  7. 《python for data analysis》第四章,numpy的基本使用

    <利用python进行数据分析>第四章的程序,介绍了numpy的基本使用方法.(第三章为Ipython的基本使用) 科学计算.常用函数.数组处理.线性代数运算.随机模块…… # -*- c ...

  8. 学习笔记之Python for Data Analysis

    Python for Data Analysis, 2nd Edition https://www.safaribooksonline.com/library/view/python-for-data ...

  9. 数据分析---《Python for Data Analysis》学习笔记【04】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

随机推荐

  1. behavior planning——inputs to transition functions

    the answer is that we have to pass all  of the data into transition function except for the previous ...

  2. 阿里云ECS服务器活动99元一年,最高可买三年

    这几天阿里云 99一年.279三年的服务器活动如火如荼,和之前腾讯三年的服务器非常类似,非常低的价格换取非常高的价值,当然,通常情况下便宜没好货的,想要玩一下的老铁可以进阿里云去看看,阿里云270三年 ...

  3. Error: Cannot find module 'webpack/bin/config-yargs' 报错原因, webpack@4.X踩的坑~

    1 .使用webpack@4.32.2时, 当我通过package.json的script去执行webpack-dev-server时, 报以下错误:  Error: Cannot find modu ...

  4. pytorch lstm crf 代码理解

    好久没有写博客了,这一次就将最近看的pytorch 教程中的lstm+crf的一些心得与困惑记录下来. 原文 PyTorch Tutorials 参考了很多其他大神的博客,https://blog.c ...

  5. 4-10 items设计

    1,items相当于dict,但是又比字典好 2,parse.urljoin(response.url,post_url)方法,其中image_url是一个域名的话,其中的当前域名就不用再添加. yi ...

  6. H3C 调试OSPF

  7. linux一些重要数据结构

    如同你想象的, 注册设备编号仅仅是驱动代码必须进行的诸多任务中的第一个. 我们将很 快看到其他重要的驱动组件, 但首先需要涉及一个别的. 大部分的基础性的驱动操作包括 3 个重要的内核数据结构, 称为 ...

  8. Mail.Ru Cup 2018 Round 2 B. Alice and Hairdresser (bitset<> or 其他)

    传送门 题意: 给出你序列 a,在序列 a 上执行两种操作: ① 0 :查询有多少连续的片段[L,...,R],满足 a[L,...,R] > l: ② 1 p d :将第 p 个数增加 d: ...

  9. Java中的断言assert的用法

    Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在Java中,ass ...

  10. MD5登陆密码的生成

    package com.cinc.ecmp.userpermission.utils; import java.security.MessageDigest;import java.security. ...