日知录(八):python 人工智能基础和数据分析基础

人工智能作为当前最火的一个热词,我也想紧抓一把潮流,不过人工智能设计知识面极广,很多知识点参差不齐,其实更多自学者面临的是不知道怎么入门,不知道开始学什么,嘴上说着人工智能,机器学习,深度学习,可又不太清楚自己到底搜索哪个词,从哪个技术贴开始看。
我也是一直在门外观望,期待能找到一个可以好好入门的方式。
在这里先记录这一星期学到的一些基础知识

文章目录

  • 一、人工智能
    • 1、概念
    • 2、人工智能的主要分支
      • 2.1感知(computer version CV)
      • 2.2通讯
      • 2.3行动
    • 3、机器学习工作流程
      • 3.1获取数据集
      • 3.2数据基本处理:
      • 3.3特征工程:
      • 3.4机器学习(模型训练)
        • 3.4.1监督学习
        • 3.4.2 无监督学习
        • 3.4.3半监督学习
        • 3.4.4强化学习
        • 3.4.5模型评估
    • 4.环境和库的配置
      • 4.1 matplotlib模块
      • 4.1.1图形基础显示与保存
        • 1.简单的折线图显示数据
        • 2.一个城市一小时内温度变化图
        • 3.自定义显示x,y轴刻度,网格
        • 4.添加对x,y,标题的描述,添加对象
        • 5.面对对象的画图方法,在多个坐标系显示
      • 4.1.2常见图形
        • 1.折线图
        • 2.散点图
        • 3.柱状图
        • 4.直方图
        • 5.饼图
      • 4.1.3各种图形的演示
      • 4.2 numpy模块
        • 4.2.1 numpy的定义
        • 4.2.2 numpy 的属性,形状和类型
        • 4.2.3 基本操作
        • 4.2.4 数组索引切片
        • 4.2.5 数组运算
        • 4.2.6矩阵运算
      • 4.3 pandas模块
        • 4.3.1 介绍和数据基本操作

一、人工智能

1、概念

这一概念自上世纪中期被提出之后历经不断发展到今天。机器学习是人工智能实现的一个途径,深度学习是机器学习的一个方法(神经网络)发展而来的。

2、人工智能的主要分支

2.1感知(computer version CV)

1.计算机视觉,主要用于人脸识别,图像检测
注:yolo算法目标检测

2.2通讯

自然语言处理(NLP),
1.语音识别(声纹识别,鸡尾酒效应)
2.文本挖掘
3.机器翻译MIT

2.3行动

1.工业机器人(几自由度机械臂)
2.家庭机器人,更具交流性

3、机器学习工作流程

机器学习的必备要素就是足够多的数据,合适的算法,准确快速的计算力(GPU加速)。基本工作流程就是 从数据分析得到模型,用训练模型进行预测。

3.1获取数据集

数据集:
一行数据称为一个样本
一列数据称为一个特征
数据类型:

  1. 特征值+目标值(标签)
    2.只有特征值(属性)
    目标值分为离散或连续
    数据划分:训练集(构建模型,所以占比大),测试集(测试模型,占比小)

3.2数据基本处理:

对数据进行缺失值、去除异常值的处理

3.3特征工程:

提取出数据的特征,将图片,声音等数据转化为机器容易识别的数字特征。

“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。”
巧妇难为无米之炊。
特征提取
特征预处理
特征降维:3d---->2d

3.4机器学习(模型训练)

选择合适的算法对模型进行训练。

算法分类
监督学习,无监督学习,半监督学习,强化学习

3.4.1监督学习

定义:输入数据是由输入特征和目标值组成

  • 回归:函数的输出可以是一个连续的值,平滑的曲线
  • 分类:输出是有限个离散值
  • eg回归问题:预测房价,根据样本集拟合出一条连续的曲线
  • eg分类问题:比如,垃圾邮件还是非垃圾邮件,欺诈交易还是正常交易,良性还是恶性。还涉及到是二分类还是多分类问题。
In 有标签
Out 有反馈
目的 预测结果
案例 房价预测
算法 分类:K-近邻算法,贝叶斯分类,决策树与随进森林,逻辑回归,神经网络
回归:线性回归,岭回归

3.4.2 无监督学习

定义:输入数据由输入特征值组成

  • 输入数据没有被标记,也没有特定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类,即聚类(clustering)试图使类内差距最小化,类间差距最大化。
  • 加粗部分理解为:在最开始进行动物分类的时候,没有特定的分类标准,先都找共性,将一部分共性最多的化为一类,并且在此分类标准下,另一类和它的区别也要十分明确。
  • 监督学习和无监督学习的比较:
  • 监督学习输入数据有特征值也有标签,对其进行分类、回归,输出有标准答案
  • 无监督学习输入数据有特征值无标签,对其进行聚类,输出无标准答案。
In 无标签
Out 无反馈
目的 发现潜在结构
案例 “物以类聚,人以群分”
算法 聚类K-means,降维

3.4.3半监督学习

已知 训练样本data和待分类的类别
未知 训练样本有无标签均可
应用 训练数据量过多时,监督学习效果不能满足需求,因此用来增强效果

3.4.4强化学习

根据动态学习,有点类似自平衡小车在不断保持平衡的过程。

In 决策流程和激励系统
Out 一系列行动
目的 长期利益最大化,回报函数(只会提示你是否在朝着目标方向前进的延迟反馈)
案例 阿尔法狗下棋
算法 马尔科夫决策,动态规划

3.4.5模型评估

对训练好的模型进行评估。
大多是对监督学习的模型进行评估,模型分为分类模型和回归模型。
评估结果有 过拟合和欠拟合两种。
评估标准:

  1. 分类模型评估:
    准确率,精确率,召回率,FL-score,AUC指标
  2. 回归模型评估
    均方根误差,相对平方误差,平均绝对误差,相对绝对误差,决定系数

4.环境和库的配置

我使用的是在vscode里面使用jupyter notebook,方便可以写笔记,也可以直接看到数据运行结果,在这里将使用到matplotlib/numpy/pandas这三个模块对数据进行分析。其实前期的学习感觉和爬虫类似,爬虫,数据挖掘和分析。
配置方法参考博客:
VS Code 玩转 Jupyter Notebook

4.1 matplotlib模块

4.1.1图形基础显示与保存

matplotlib.pyplot包含了一系列类似于matlab的画图函数,它的函数作用于当前图形(figure)的当前坐标系(axes)。大概分为3个步骤:创建画布,创建图像,显示图像。

1.简单的折线图显示数据

# 导入包
import matplotlib.pyplot as plt

# 创建画布(容器层)
plt.figure (figsize=(10,10))

# 创建折线图(图像层)
x=[1,2,3,4,5]
y=[17,18,44,21,34]
plt.plot(x,y)     
#也可直接写成这样plt.plot([1,2,3,4,5],[17,18,44,21,34])

# 保存图像
plt.savefig("1.png")

# 显示图像
plt.show()

日知录(八):python 人工智能基础和数据分析基础_第1张图片

  1. 保存:plt.savefig() //图像保存要放到show前面

2.一个城市一小时内温度变化图

#某个城市13点到14点1小时内每分钟的温度变化折线图,温度范围在30~35

import random,matplotlib.pyplot as plt
# 数据准备
x = range(60)
y = [random.uniform(30,35) for i in x]#列表生成式
# 创建画布
plt.figure(figsize=(10,4),dpi=200)#figsize:画布大小,dpi:像素大小,清晰度
# 绘制图像
plt.plot(x,y)
#保存图像
plt.savefig("2.png")
# 展示图像
plt.show()

日知录(八):python 人工智能基础和数据分析基础_第2张图片

3.自定义显示x,y轴刻度,网格

#添加自定义x,y刻度,plt.xticks(x,**kwargs),plt.yticks(y,**kwargs)
import random,matplotlib.pyplot as plt
# 数据准备
x = range(60)
y = [random.uniform(30,35) for i in x]
# 创建画布
plt.figure(figsize=(10,4),dpi=200)#figsize:画布大小,dpi:像素大小,清晰度
# 绘制图像
plt.plot(x,y)
#X,Y轴坐标
x_ticks_lable = ['13点{}分'.format(i) for i in x]
y_ticks_lable =  x
plt.xticks(x[::5],x_ticks_lable[::5])
 # 坐标的刻度不可以通过字符串刻度进行修改,注意先修改成数字,再用字符串进行替换
plt.yticks(y_ticks_lable[::5])
# 网格显示
plt.grid(True,linestyle = '--',alpha = 0.5)
#保存图像
plt.savefig("2.png")
# 展示图像
plt.show()

日知录(八):python 人工智能基础和数据分析基础_第3张图片

1.添加网格:
plt.grid(True,linestyle,alpha),True表示显示(可不写),第2个参数是绘制网格的方式,如虚线,第3个参数是透明度
2.加上这三行,保证中文可以正常输出
#coding:utf-8
plt.rcParams[‘font.sans-serif’]=[‘SimHei’] #用来正常显示中文标签
plt.rcParams[‘axes.unicode_minus’]=False #用来正常显示负号
3.添加X,Y轴的刻度:
plt.xticks(x,**kwargs),plt.yticks(y,**kwargs),第一个参数必须是数字,如果不是,必须进行值替换

4.添加对x,y,标题的描述,添加对象

描述:
plt.xlabel(“时间”)
plt.ylabel(“温度”)
plt.title(“一小时温度变化图”,fontsize=20)
添加对象:多次plot,直接进行绘制
显示图例:plt.legend(),在显示之前,声明plot里面的具体值。

# 导入模块
import random
import  matplotlib.pyplot as plt

# 数据准备
x = range(50)
y_beijing = [random.uniform(30,40) for i in x]
y_shanghai = [random.uniform(25,35) for i in x]# 再增加一条上海的温度的数据

# 创建画布
plt.figure(figsize=(8,4),dpi=100)

# 绘图两个城市的折线图,以及做好label标签表示不同的图例
plt.plot(x,y_beijing,label="北京")
plt.plot(x,y_shanghai,label="上海") # r表示红色,linestyle如果是空字符串,不会显示图像

# 添加x,y轴刻度
x_ticks_lable = ['13点{}分'.format(i) for i in x]# 构造x轴刻度标签
y_ticks_lable =  x# 构造y轴刻度标签

plt.xticks(x[::5],x_ticks_lable[::5]) # 坐标的刻度不可以通过字符串刻度进行修改
plt.yticks(y_ticks_lable[::5])

#添加网格
plt.grid(True,linestyle = '--',alpha = 0.5) 

# 添加描述
plt.xlabel('时间',fontsize=8) # x轴和字体大小
plt.ylabel('温度',fontsize=8) # y轴和字体大小
plt.title('上海市和北京市中午13点到14点之间的温度变化',fontsize=8) # 标题和字体大小

# 显示做好标签的图例,红蓝颜色表示区别
plt.legend(loc="best")

# 保存图像
plt.savefig('3.png') # 保存到指定目录

# 图像显示
plt.show()

日知录(八):python 人工智能基础和数据分析基础_第4张图片

注意:操作的最后一步是显示图像,倒数第二步是保存图像。
上图所示程序,如果把显示图例放在保存图像之后,再进行显示图像,是可以正常显示出图像也有左下角的北京上海的小图例的,但是保存的图像是没有左下角的那个北京、上海图例的,一定要注意这一点。

5.面对对象的画图方法,在多个坐标系显示

matplotlib.ptplot.subplots(nrows=1,ncols=1,**fig_kw)创建一个带有多个axes(坐标系/绘图区)的图
plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法,一个axes就是一个坐标系一个对象。
如果我们想要将上海和北京的天气图显示在同一个图的不同坐标系中:
图示源码把之前的plt.方法()都先注释掉,以显示二者的区别。

# 4、面对对象的画图方法
import random
import  matplotlib.pyplot as plt
# 数据准备
x = range(60)
y_beijing = [random.uniform(30,40) for i in x]
y_shanghai = [random.uniform(25,35) for i in x]

# 创建画布
#plt.figure(figsize=(10,4),dpi=100)
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=100)# 一行两列

# 绘图两个城市的折线图,以及做好label标签表示不同的图例
#plt.plot(x,y_beijing,label="北京")
#plt.plot(x,y_shanghai,label="上海") 
axes[0].plot(x,y_beijing,label="北京")# 坐标系1
axes[1].plot(x,y_shanghai,label="上海") #坐标系2

# 添加x,y轴刻度
x_ticks_lables = ['13点{}分'.format(i) for i in x]# 构造x轴刻度标签
y_ticks =  x# 构造y轴刻度标签

#plt.xticks(x[::5],x_ticks_lable[::5]) 
#plt.yticks(y_ticks_lable[::5])

axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_lables[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_lables[::5])

#添加网格
#plt.grid(True,linestyle = '--',alpha = 0.5) 
axes[0].grid(True,linestyle = '--',alpha = 0.5) 
axes[1].grid(True,linestyle = '--',alpha = 0.5) 

# 添加描述
#plt.xlabel('时间',fontsize=8) # x轴和字体大小
#plt.ylabel('温度',fontsize=8) # y轴和字体大小
#plt.title('上海市和北京市中午13点到14点之间的温度变化',fontsize=8) 
axes[0].set_xlabel('时间',fontsize=8)
axes[0].set_ylabel('温度',fontsize=8) # y轴和字体大小
axes[0].set_title('北京市中午13点到14点之间的温度变化',fontsize=8)
axes[1].set_xlabel('时间',fontsize=8)
axes[1].set_ylabel('温度',fontsize=8) # y轴和字体大小
axes[1].set_title('上海市中午13点到14点之间的温度变化',fontsize=8)

# 显示图像
#plt.legend(loc="best")
axes[0].legend(loc="best")
axes[1].legend(loc="best")
# 保存图像
plt.savefig('5.png') # 保存到指定目录

# 图像显示
plt.show()

日知录(八):python 人工智能基础和数据分析基础_第5张图片

4.1.2常见图形

1.折线图

能够显示数据的变化趋势、反映事物的变化情况
在4.1.1中主要讲述的就是折线图,在此不赘述。

2.散点图

用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种数据关联或总结坐标点的分布模式
api: plt.scatter(x,y)

3.柱状图

排列在工作列表的列或行中的数据可以绘制到柱状图中
统计/对比
api: plt.bar(x,width,allgn=‘center’,**kwargs)
width:柱状图的宽度
allgn:{‘center’,‘edge’}每个柱状图的位置对齐方式
**kwargs :color,选择柱状图的颜色

4.直方图

由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据范围,纵轴表示分布情况。
统计,展示分布情况
api : matplotlib.pyplot.hist(x,bins=None)
bins,组距

5.饼图

表示不同分类的占比情况
api: plt.pie(x,labels=,autopct=,colors)
x:数据
labels:每部分名称
autopct:占比显示指定%1.2f%
color:每部分颜色

4.1.3各种图形的演示


# 1.散点图
# # 数据准备
x= [1,24,5,2,5,3,54,65,7,5,74,2,22,4,5,4,65,65,5,7,5,6,45,3,]
y=[33,35,6,5,56,32,24,2,42,74,6,34,2,1,4,3,54,65,75,33,1,22,55,66]

# 创建画布
plt.figure(figsize=(20,8),dpi=100)

# 图像绘制散点图
plt.scatter(x,y)

# 图像保存
plt.savefig('6.png')
# 图像显示
plt.show

日知录(八):python 人工智能基础和数据分析基础_第6张图片


# 2.柱状图
# 准备数据
# 电影名字
movies_name={'阿甘正传','寻梦环游记','奇迹男孩','正义联盟'}
# 横坐标
x =range(len(movies_name))
# 票房数据,数据是自己乱写的。
y={43253,54364,53553,65655}

# 创建画布
plt.figure(figsize=(20,8),dpi=100)

# 绘制柱状图
plt.bar(x,y,width=0.5,color=['b','r','g','y'])

# 修改x轴的刻度显示
plt.xticks(x,movies_name,fontsize=20)

# 添加网格显示
plt.grid()

# 添加标题
plt.title("电影票房收入对比",fontsize=20)

#保存图像
plt.savefig('7.png')

# 显示图像
plt.show()


日知录(八):python 人工智能基础和数据分析基础_第7张图片
更多matplotlib的方法参考官网matplotlib

4.2 numpy模块

4.2.1 numpy的定义

1.numpy(numerical python)是一个开源的python科学计算库,
用于快速处理任意维度的数组。
2.Numpy 支持常见的数组和矩阵操作。 对于同样的数值计算任务,使用Numpy 比直接使用python要简洁得多。
3 Numpy使用ndarray 对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
4.优势:
内存块风格–一体式存储 //支持并行化运算// 效率高于纯python代码 //
底层使用了C,内部释放了GIL

#初步显示
 import numpy as np
 score =np.array([[1,23,3,4,5],[2,4,3,5,6,8],[44,11,33,21,24]])

4.2.2 numpy 的属性,形状和类型

属性 说明
ndarray.shape 数组维度的元组
ndarray.ndim 数组维数
ndarraay.size 数组中的元素数量
ndarray.itemsize 一个数组元素的长度(字节)
ndarray.dtype 数组元素的类型
 
 #初步显示
 import numpy as np
score = np.array([
    [80,89,86,67,79],
    [78,97,89,67,81],
    [90,94,90,67,69],
    [91,91,90,67,69],
    [76,87,75,67,86],
    [70,79,84,67,84],
    [94,92,93,67,64],
    [86,85,83,67,80]
])

# 属性演示
score.shape # 数组的行列
(8, 5)

score.ndim # 数组的维数
2

score.size # 数组的元素个数
40

score.itemsize # 数组中每个元素所占的字节数4
4

score.dtype # 数组的类型
dtype('int32')

4.2.3 基本操作

1.生成数组的方法

生成0和1 的数组
·np.ones()
·np.ones_likes()
·np.zeros()
·np.zeros_like()


>>>import numpy as np
>>>zero=np.zeros([3,4])

>>>zero
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

2.从现有数组生成
np.array()深拷贝
np.asarray()浅拷贝

>>>import numpy as np
>>>a= np.zeros([3,4])
# 从现有的数组当中创建
>>>a1=np.array(a)
# 相当于索引的形式,并没有真正的创建一个新的
>>>a2=np.asarray(a)
>>>a1,a2
(array([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]),
 array([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]))

>>>a[0]=78
>>>a1
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
>>>a2
array([[78., 78., 78., 78.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

3.生成固定范围数组
(1)np.linspace(start,stop,num,endpoint):生成等间隔的多少个
start, 序列的起始值
stop,序列的终止值
num,要生成的等间隔样例数量,默认为50
endpoint, 序列中是否包含stop值,默认为true
(2)numpy.arrange(start,stop,step,dtype):每间隔多少生成数据
(3)numpy.logspace(start,stop,num):生成以10的N次幂的数据

>>>import numpy as np
# 1.
>>>np.linspace(0,100,21)
array([  0.,   5.,  10.,  15.,  20.,  25.,  30.,  35.,  40.,  45.,  50.,
        55.,  60.,  65.,  70.,  75.,  80.,  85.,  90.,  95., 100.])

#2.

>>>np.arange(10,50,2)
array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,
       44, 46, 48])
       
#3.
>>>np.logspace(0,2,3)
array([  1.,  10., 100.])

4.生成随机数组
np.random模块
(1).均匀分布
np.random.uniform()
low ,high,size
np.random.rand()
np.random.randint()

import random
import numpy as np
import matplotlib.pyplot as plt
# 生成均匀分布的随机数
x1=np.random.uniform(0,1,100000000)

# 画图看分布状况
# 创建画布
plt.figure(figsize=(20,8),dpi=100)

# 绘制直方图
plt.hist(x=x1,bins=1000)# x代表要使用的数据,bins表示要划分区间数

#保存图像
plt.savefig('7.png')

# 显示图像
plt.show()

日知录(八):python 人工智能基础和数据分析基础_第8张图片

(2).正态分布
一个服从正态分布的随机变量的均值,决定图形的左右位置;一个是这个随机变量的方差
np.random.randn()
np.random.normal(loc=0.0,scale=1.0,size=None)
loc:float,此概率分布的均值
scale: float ,此概率分布的标准差,对应于分布的宽度
size: int or tuple of ints. 输出的shape,默认为None,只输出一个值。
np.random.standard_normal()

# 生成正态分布数据
import random
import numpy as np
import matplotlib.pyplot as plt

x1=np.random.normal(1.75,1,100000000)

# 画图看分布状况
# 创建画布
plt.figure(figsize=(20,8),dpi=100)

# 绘制直方图
plt.hist(x=x1,bins=1000)# x代表要使用的数据,bins表示要划分区间数

#保存图像
plt.savefig('7.png')

# 显示图像
plt.show()

日知录(八):python 人工智能基础和数据分析基础_第9张图片

4.2.4 数组索引切片

1.eg.随机生成8只股票两周的交易日涨幅数据
两周的交易日数量为10天
随机生成涨跌幅在某个正态分布内,比如 均值0,方差 1

# 股票涨跌幅,数组索引,切片
# 直接索引
# 先对行进行索引,再进行列索引
# 高维数组索引,从宏观到微观
>>>import random
>>>import numpy as np
>>>stock_change =np.random.normal(0,1,(8,10))
>>>stock_change
array([[-1.36594426e+00,  1.46200093e+00,  9.13215542e-01,
         1.14692714e+00,  1.09884372e+00,  3.16765232e-02,
         6.08335502e-01,  5.38290755e-01, -1.90379441e+00,
        -1.94725017e-01],
       [ 2.44947204e-03,  2.81483998e-02, -1.62279486e+00,
        -1.51070292e+00,  7.54557047e-01, -5.86838996e-01,
         5.19210315e-01, -3.95683397e-01,  1.25462182e+00,
        -6.25952974e-01],
       [ 7.90748799e-04,  6.79753324e-01, -6.37851032e-01,
        -2.12284676e+00,  4.24193911e-02,  1.96020430e+00,
         1.32790054e+00, -1.20717718e-01, -4.18715572e-01,
        -1.33086237e+00],
       [ 9.64285006e-01,  1.21460410e+00,  7.41830787e-01,
        -2.77707197e-01,  8.88210848e-01, -1.31238734e+00,
        -3.37759344e-02, -2.31105458e-01,  1.50448499e+00,
         8.99345024e-01],
       [ 2.22052593e-01, -1.23050565e+00, -5.18642183e-01,
         7.92137339e-01,  1.75913999e+00, -8.57013149e-01,
        -7.61342247e-01, -5.43356336e-01,  1.17559103e+00,
         4.45639951e-02],
       [ 7.21212520e-01,  2.04394286e-01, -3.96069879e-01,
        -1.50668077e-01,  2.85052065e-01, -1.97526492e-01,
        -1.72041543e+00, -1.63498939e-01,  4.65590579e-01,
        -6.55741840e-01],
       [-1.55974000e-01,  7.05740416e-01,  8.68340637e-01,
         1.63919081e-01, -9.26949387e-01, -2.38599750e+00,
        -2.23651939e-01, -1.70950974e+00,  1.95574527e+00,
        -5.47184974e-01],
       [ 3.33567247e-01, -1.03334777e+00, -6.36157866e-01,
         7.54950892e-01,  4.80523866e-01, -3.12486834e-01,
        -2.70482513e-01,  1.12658193e+00, -7.70224357e-03,
        -6.75504856e-01]])
# 二维数组索引
>>>stock_change[0:2,0:3] #前两行前3列
array([[-1.36594426,  1.46200093,  0.91321554],
       [ 0.00244947,  0.0281484 , -1.62279486]])

# 三维数组索引
import numpy as np
a=np.array([[[80, 89, 86, 67, 79],
        [78, 97, 89, 67, 81]],

       [[90, 94, 90, 67, 69],
        [91, 91, 90, 67, 69]],

       [[76, 87, 75, 67, 86],
        [70, 79, 84, 67, 84]],

       [[94, 92, 93, 67, 64],
        [86, 85, 83, 67, 80]]])
>>>a[0,0,0]
80
>>>a[2,0,1]
87

2.形状修改,即数组的行列修改

  • (1)ndarray.reshape() :return an array containing the same data with a new shape.产生新变量,不进行行列互换。
    日知录(八):python 人工智能基础和数据分析基础_第10张图片

  • (2)ndarray.resize():change shape and size of array in-place.对原来的值进行更改,进行行列互换。
    日知录(八):python 人工智能基础和数据分析基础_第11张图片

  • (3)ndarray.T():数组的转置,进行行列互换。
    日知录(八):python 人工智能基础和数据分析基础_第12张图片
    3.类型修改

  • nparray.astype(type)

  • nparray.tostring()
    日知录(八):python 人工智能基础和数据分析基础_第13张图片
    4.数组的去重

  • ndarray.unique()

# 数组去重
>>>arr =np.array([[[1,2,13],[4,5,6]],[[12,13,140],[4,5,88]]])
>>>np.unique(arr)

array([  1,   2,   4,   5,   6,  12,  13,  88, 140])

4.2.5 数组运算

日知录(八):python 人工智能基础和数据分析基础_第14张图片
日知录(八):python 人工智能基础和数据分析基础_第15张图片
日知录(八):python 人工智能基础和数据分析基础_第16张图片
日知录(八):python 人工智能基础和数据分析基础_第17张图片

4.2.6矩阵运算

1.数组和数运算
日知录(八):python 人工智能基础和数据分析基础_第18张图片
2.矩阵之间的运算
np.matmul,支持矩阵之间相乘,不支持矩阵与数字相乘。
np.dot(点乘),两者都支持。

4.3 pandas模块

4.3.1 介绍和数据基本操作

专门用于数据挖掘的开源python库,以Numpy为基础,借助numpy在计算方面性能高的又是,基于matplotlib,可以简便画图,以及本身独特的数据结构。
特点:数据处理能力高,读取文件方便,封装了matplotlib,numpy的画图和计算。

日知录(八):python 人工智能基础和数据分析基础_第19张图片
日知录(八):python 人工智能基础和数据分析基础_第20张图片

创建DataFrame:
pd.DataFrame(ndarray)

DataFrame 结构:(类比于numpy 的二维数组)
行索引:index,0轴,axis-0
列索引:columns,1轴,axis=1

日知录(八):python 人工智能基础和数据分析基础_第21张图片
创建日期
pd.data_range()

start: 开始 end:结束 period: 时间跨度 freq:统计时间方式

日知录(八):python 人工智能基础和数据分析基础_第22张图片

DataFrame 属性:
shape 获取是几行几列的数组
index 行索引列表
columns 列索引列表
values 直接获取其中array的值
T 转置
head()默认看前5行
tail()默认看后5行

日知录(八):python 人工智能基础和数据分析基础_第23张图片
日知录(八):python 人工智能基础和数据分析基础_第24张图片
日知录(八):python 人工智能基础和数据分析基础_第25张图片
日知录(八):python 人工智能基础和数据分析基础_第26张图片
日知录(八):python 人工智能基础和数据分析基础_第27张图片
日知录(八):python 人工智能基础和数据分析基础_第28张图片
日知录(八):python 人工智能基础和数据分析基础_第29张图片
未完待续…

你可能感兴趣的:(笔记,数据挖掘,python,数据分析,机器学习)