zoukankan      html  css  js  c++  java
  • 第一章:Python数据分析前的基础铺垫

    本节概要

    - 数据类型

    - 数据结构

    - 数据的常用操作方法


    数据类型

    基础铺垫

    定义

    • 我们搞数据时,首先要告诉Python我们的数据类型是什么
      • 数值型:直接写一个数字即可
      • 逻辑型:True,False(首字母大写)
      • 字符型:单引号、双引号、三引号

    赋值

    • 用等号给变量贴标签

    变量-赋值的对象是变量

    • 命名规则
    • 命名规则

    逻辑型(Logical)

    布尔值:只有两种取值(0和1,True和False)

    运算规则:

    运算符 注释 规则
    & 一个为假,结果为假
    一个为真,结果为真
    not 非真为假,非假为真

    数值型(Numeric)

    实数

    运算规则

    • 加、减、乘、除

    字符型(Character)

    如何定义字符串-单引号、双引号、三引号


    数据结构

    引言:为什么要将数据类型?
    前面的逻辑型、数值型、字符型都是针对一个数据来讲的;
    我们要研究现实问题时,数据往往是以集合的形式出现的

    如何理解?

    有关联的数据维度集合

    • 数据结构是一个理论性很强的知识点,但是这里我们不要纠结过多的原理,因为它真的很简单,可以这样理解,我们工作中大多EXCEL和SQL中有行和列的数据表格,都可以看作是数据结构的集合

    • 学python数据分析的朋友,一定要有SQL基础,我建议学Mysql,理由很简单,facebook、淘宝、京东、微博全都是用的mysql

    Pandas中的两种数据结构

    Series(系列)

    定义

    系列是用于存储一行或者一列的数据,以及与之相关的索引的集合

    index 姓名
    0 数据分析-jacky
    1 李嘉诚
    2 扎克伯格
    • 系列可以理解为Excel表格一列的数据,只是这一列是没有列名的,因为它只有一列,不需要列名。

    • 索引,类同于数据库,我们可以通过索引(index)对用的值,访问到数组(姓名)的值。

    • 在Pandas 中,默认索引都是从0开始的。

    如何定义一个系列

    • 从pandas包中导入Series对象
    from pandas import Series
    • 得到系列对象:使用Series对象的构造函数,把一个数组作为参数传入
    x=Series(['a',True,1])

    默认了索引为0、1、2

    这里写图片描述

    操作

    • 往一个定义好的数据中增加数据

    • 系列的append方法,只能增加系列,不能增加单个值

    这里写图片描述

    特别注意:

    n=Series(['9'])#要加引号;
    x.append(n)#只会返回到一个新的序列,并不会返回到变量x
    x=x.append(n)#特别关键的一步,这样才真正的给x变量增加了数据

    x.drop(0)#根据索引删除
    x.drop(x.index[3])#根据位置删除
    x['9'!=x.values]#使用保留的方法,把不是要删除的数据保留下来

    '9'in x.values #判断9这个值是否存在
    x[0:2]  #切片
    x[[1,2,0]]#这个比较重要,定位获取,用于随机抽样

    DataFrame(数据框)

    定义

    数据框是用来存储多行或多列的数据集合

    index age name
    0 19 Mr.liu
    1 30 Jacky
    2 42 Andy
    • 可以理解为Excel中的表格

    如何定义一个系列

    • 首先生成一个数据框,导入pandas中的数据框类
    from pandas import DataFrame
    • 使用DataFrame对象的构造函数,输入一个字典来构造数据框,这个数据框的写法,就是以列名作为Key,列数据以数组的方式在后面输入即可。
    df=DataFrame(
        data={
        'age':[19,30,42],
        'name':['Mr.liu','Jacky','Andy']
        },
        index=['0','1','2']
    )

    这里写图片描述

    • 做自定义索引与系统是形同的

    操作

    • 通过loc属性
    df.loc[len(df)]=[100,'zhuyuanlu']#增加行
    df['newColumn']=[111,222,333]

    • drop属性,根据axis轴参数,来确定是删除行,还是删除列,axis=0是行,axis=1是列
    df.drop('firs',axis=0) #删除行
    df.drop('age',axis=1) #删除列

    • 修改列名,查看columns属性,对columns属性重新赋值

    这里写图片描述

    • 修改行索引,index属性

    对于数据分析来说,增删改查,一定是查最重要

    df['age'] #按列访问,访问一列
    df[['age','name']]#按列访问,访问多列
    df[0:1] #按行访问,切片
    df.loc[['firs','seco']]#按行索引
    df.iloc[1:2,1:2]#按行列号访问
    df.at['their','age']
    

    这里写图片描述


    向量化(数组)运算

    pandas是以系列和数据框为基本运算对象,讲到这,有朋友会问了,jacky,我记得你讲python基础时说过,list 容器也有“类似于”pandas或numpy中数组的功能,那为什么我们还要学panda和numpy呢?
    拿numpy举例来说,numpy中基本的运算对象为数组,numpy数组在数值运算方面的效率要远远,远远优于Python提供的list容易,并且使用numpy可以在代码中省区很多的循环语句,因此其代码比等价的Python代码更为简洁。
    更重要的,或说更加实操的区别是:两者的输出结果在形式上会有明显的区别,numpysum()函数的输出不包含逗号,但是list容器一定是包含括号的,这点在数据可视化时会有明显的不同。

    代码中尽可能避免显式for循环
    过早的优化是魔鬼
    向量化运算非常优美和高效,所以我们尽量使用向量化计算


    基础课程回顾:

    range函数用法

    • range函数的参数:
    #第一个参数是for循环变量开始的值,第二个是参数是上限,但不含它,也就是循环停止的数据
    for i in range(12,16):
        print(i)
    • 以上代码显示:12 13 14 15
    range()函数也可以有第三个参数。前两个参数分别是起始值和终止值,第三个参数是“步长”。步长是每次迭代后循环变量增加的值。
    for i range(0,10,2):
        print(i)
    • 以上代码显示:0 2 4 6 8

    用range函数生成的等差数列只能是整数,用 for 循环才能将它输出来,只能用于遍历
    接下来我们用numpy包中arrange方法,该方法生成的就是一个数组对象,而且可以使用小数进行生成。

    四则运算

    这里写图片描述

    函数

    这里写图片描述

    • 使用numpy的乘方函数power,3次方

    比较运算

    矩阵运算

    是一种特殊的向量运算,它的运算规则可以结合线性代数看一下

    numpy.dot(r,r.T)
    sum(r*r)

    数据框的向量化运算

    #生成一个随机数的数据框
    from pandas import DataFrame
    df=DataFrame({
        'data1':numpy.random.randn(5),
        'data2':numpy.random.randn(5)   
    })
    #找出每一列的最小值
    df.apply(min)

    这里写图片描述

    • 按列最小值进行遍历,默认axis=0
    #找出每行最小值
    df.apply(min,axis=1)

    这里写图片描述

  • 相关阅读:
    hard example mining(困难样本挖掘)
    Docker
    cmake使用教程
    CFENet: An Accurate and Efficient Single-Shot Object Detector for Autonomous Driving
    Week1
    To-Read List
    《人性的弱点》读书笔记及读后感
    总结计划:2018:上半年——毕业前
    TCP网路程序设计
    Linux 串口驱动设计二
  • 原文地址:https://www.cnblogs.com/shujufenxi/p/7786597.html
Copyright © 2011-2022 走看看