一 . numpy

-- 数据分析:就是把一些看似杂乱无章的数据信息提炼出来,总结出所研究的内在规律
-- 数据分析三剑客:Numpy,Pandas,Matplotlib
-- Numpy(Numerical Python)是python语言的一个扩展程序库,支持大量的纬度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.

  1. 创建ndarray

import numpy# 一维数组的创建
array1 = numpy.array([1,2,3])# 二维数组的创建(通常用的是二维)
array2 = numpy.array([[1,'two',3],[4,5,6]])!!! 注意:
numpy默认里面的所有元素类型都是相同的,全是数字,全是字母等
如果传进来的列表中数据类型不统一,则统一为同一类型,优先级:str>float>int

    1.1 使用matplotlib.pyplot获取一个numpy数组,数据来源一张图片

import matplotlib.pyplot as plt
img_array = plt.imread('./sjl.jpg')
plt.imshow(img_array)   # 显示图片

操作numpy数据同步到图片中(修图底层就是这么实现的)
img_array = img_array - 50
plt.imshow(img_array)img_array.shape  # 得到(396, 406, 3), 前两个参数是像素,第三个是颜色,上面直接-50,是把这三个数都减了50

    1.2 numpy的一些用法(下面就默认已经导入了numpy啦)

numpy.full(shape=(5,6),fill_value=66)   # 返回5行6列,值为66的数组

numpy.linspace(0,100,num=10)  # 获得等差数列

numpy.arange(0,10,2)   # 从0-9,步长是2

numpy.random.randint(0,50,size=(3,3))   #0-50的随机数组成3x3的矩阵# 固定随机性(随机因子)
numpy.random.seed(5)  # 系统指定的当前时间戳,指定之后就不变了,怎么随机都是这些数
numpy.random.randint(0,50,size=(3,3))

  2. ndarry的属性

四个必须记住的参数:ndim(纬度)shape(形状,各维度的长度)    size(总长度)dtype(元素类型)应用: (img_array还是上面那个图片)
img_array.ndim   # 3

img_array.size   # 482328

img_array.dtype   # dtype('uint8')

type(img_array)   # numpy.ndarray

  3. ndarray的基本操作

    3.1 索引  (一维与列表一样,多维同理)

array2 = numpy.array([[1,'two',3],[4,5,6]])array2[0][1]   # two

    3.2 切片 (一维与列表一样,多维同理)

numpy.random.seed(1)
array3 = numpy.random.randint(0,100,size=(4,4))array3[0:2]   # 获取二维数组的前两行# 获取二数组的前两列
array3[:,0:2]   # 一个逗号用做二维数组,逗号前边是行,不要行数据的话用冒号表示

array3[0:2,0:2]   # 获取前两行中的前两列

array3[::-1]   # 将二维数组的 行 进行倒序

array3[:,::-1]   # 列倒序

array3[::-1,::-1]   # 全部都倒序# 这里可以应用到图片旋转上(还是上面那个图片)
# img_array[row,col,color]
plt.imshow(img_array[:,::-1,:])plt.imshow(img_array[::-1,::-1,::-1])

  3. 变形

# 将一维数组变成多维
array2 = [['1', 'two', '3'],['4', '5', '6']]
array2 .reshape((2,3))  # 改成2行,每行3个数据,正好6个  参数一定要是tuple# 将多维数组变成一维
arr = [['1', 'two', '3'],['4', '5', '6']]
arr = arr .reshape((6))  # array2这个二维数组一共有6个数,也就是说,里面的tuple参数一定要是 6 # 自动计算,用-1,前提必须其他的数都是已知数
arr.reshape((-1,2))  # 固定参数是2列,自动计算出3行

  4. 级联

numpy.concatenate()
一维,二维,多维数组的级联,实际操作中多数是二维数组# 先建3个数组
np.random.seed(5)
a1 = numpy.random.randint(0,50,size=(4,4))
a2 = numpy.random.randint(0,50,size=(4,4))
a3 = numpy.random.randint(0,50,size=(3,4))
display(a1,a2,a3)numpy.concatenate((a1,a2),axis=0)  # 二维数组axis只能是0或者1, 0代表列拼在一起,1代表行拼在一起

九宫格照片
img_array = plt.imread('./sjl.jpg')
img_3 = np.concatenate((img_array,img_array,img_array),axis=0)
img_9 = np.concatenate((img_3,img_3,img_3),axis=1)
plt.imshow(img_9)

  

  5. 切分

与级联类似,三个函数完成切分工作:numpy.split(array,行号/列号,轴),参数2是一个列表类型numpy.vsplitnumpy.nsplita1 = np.random.randint(0,50,size=(4,4))
np.split(a1,[2],axis=0)  # 切的是列(就是横着切)# 裁剪图片,用切片方法
# img_array[row,col,color]
plt.imshow(img_array[20:280,100:300,])

  6.ndarry聚合操作

a1 = np.random.randint(0,50,size=(4,4))a1.sum(axis=0)  # axis=0,就列的和,axis=1,求行的和,不写参数,求所有数的和

最大值最小值:np.max/np.min 同理
平均值:np.mean() 同理

  7. numpy.array的排序

np.sort()nd.array.sort() 都可以,但有区别:np.sort()不改变原数组  常用这个,因为不要轻易改变数据
ndarray.sory()本地处理,但不占用空间,但改变原数组

二 . Pandas

  先导入包,下面所有的代码就直接用了,不在导包了

import pandas as pd
import numpy as np
from pandas import Series,DataFrame

  Series

Series是一种类似于一维数组的对象,由下面两个部分组成:values:一组数据(ndarray类型)index:相关的数据索引标签

  Series的创建

三种创建方式:1.列表创建2.numpy数组创建    3.字典创建
默认索引为0到n-1的整数索引

  Series的一些操作

# 使用列表创建Series 隐式索引(就是索引是下标0,1,2,3)
s1 = Series(data=[1,2,3,4])   # s1[0] 取到的是1# 使用列表创建Series 显示索引,(使用显示索引,也可以使用隐式索引)
s2 = Series(data=[1,2,3,4],index=['a','b','c','d'])   # s2[0]和s2['a'] 取到的都是1
================================================
# 使用numpy创建Series
s3 = Series(data=np.random.randint(0,20,size=(5,)))dic = {'English':100,'math':30
}
Series(data=dic)取索引的方法还有:s2.loc['a']  #一定要拿显示索引s2.iloc[1]  # 一定要拿隐式索引
s2['xxx'] = 666  # 添加

  可以通过shape,size,index,values等拿到series的属性

s2.shape   # (5,)
s2.size     # 5
s2.index  # 只能拿到显示索引   Index(['a', 'b', 'c', 'd', 'xxx'], dtype='object')
s2.values  # array([  1,   2,   3,   4, 666], dtype=int64)

head()与tail() 是查看前/后多少个元素
s2.head(2)   # 查看前两个

  对series去重与数据清洗

去重
s = Series(data=[1,1,1,1,2,2,2,2,3,3,3,4,4])
s.unique()  # array([1, 2, 3, 4], dtype=int64)

数据清洗
s3 = Series(data=[1,2,3,4],index=['a','b','c','d'])
s4 = Series(data=[1,2,3,4],index=['a','b','c','x'])s = s3 + s4
print(s)   # 发现d和x都是NaN

a    2.0
b    4.0
c    6.0
d    NaN
x    NaNs.isnull()
s.notnull()a     True
b     True
c     True
d    False
x    False
dtype: bools[s.notnull()]

  DataFrame

DataFrame是一个 表格型 的数据结构.DataFrame由按一定顺序排列的多列数据组成,设计初衷是将Series使用场景从一维拓展到多维,DateFrame既有行索引,又有列索引.
- 行索引: index
- 列索引: columns
- 值: values

  DataFrame的创建

最常用的方法是传递一个字典来创建,DateFrame以字典的键作为每一列的名称,以字典的值(一个数组)作为每一列.此外,DataFrame会自动加上每一行的索引.使用字典创建DataFrame后,columns参数则不可用.同Series一样,若传入的类与字典的键不匹配,则相应的值为NaN.

df = DataFrame(data=np.random.randint(1,10,size=(3,3)),index=['a','b','c'],columns=['A','B','C'])
df.values
array([[1, 6, 5],[1, 8, 4],[7, 3, 1]])

  使用字典创建DataFrame

dic = {'张三':[150,150,150,150],'李四':[0,0,0,0]
}
df = DataFrame(data=dic,index=['语文','数学','英语','理综'])张三   李四
语文    150    0
数学    150    0
英语    150    0
理综    150    0

  DateFrame的索引

对列进行索引:- 通过类似字典的方式  df['key']
- 通过属性的方式  df.key
可以将DataFrame的列获取为一个Series.返回的Series拥有相同的索引,且name属性也已经设置好了,就是相应的列名# 修改列索引
df.columns = ['王五','赵六']# 获取列数据,用[]去只能去列并且只能是显示索引
df['王五']
df[['赵六','王五']]
df.loc['语文']对行进行索引
- 使用loc[] 里面写显示索引
- 使用iloc[] 里面写隐性索引 df.iloc[0]取出确定位置的数据   df.loc[row,col]
df.loc['理综','王五']# 王五的语文与数学成绩
df.loc[['语文','数学'],'王五']# 可用loc或iloc中取列
df.iloc[:,0]

  切片

!!!注意->直接用中括号时:- 索引表示的是列索引- 切片表示的行索引

  实操

# 切前2行数据
df[0:2]# 切前2列
df.iloc[:,0:2]# 通过索引切片,可以直接写显示索引
df.loc['语文':'数学']

  运算

first_exam = df
last_exam = df # 求first_exam与last_exam的平均成绩
(first_exam+last_exam)/2# 王五的first_exam语文成绩取消,为0
first_exam.loc['语文','王五'] = 0# 赵六的所有first_exam成绩加100
first_exam['赵六']=first_exam['赵六'] + 100

  pandas数据处理

# 删除重复元素
使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为Truekeep参数:指定保留哪一个重复的行数据

  创建具有重复元素行DataFrame

# 创建一个df
df = DataFrame(data=numpy.random.randint(0,100,size=(8,4)))
df.iloc[1] = [666,666,666,666]
df.iloc[3] = [666,666,666,666]
df.iloc[6] = [666,666,666,666]

  

   使用duplicated()函数检测重复的行

~df.duplicated(keep='first')  # False对应的重复的值,注意前面取反了,first保留第一行,last最后一行,False全不要
df.loc[~df.duplicated(keep='first')]

  

  使用df.drop_duplicates(keep='first/last'/False)删除重复的行

df.drop_duplicates(keep='first')

转载于:https://www.cnblogs.com/attila/p/10924441.html

Numpy,Pandas,Matplotlib相关推荐

  1. python 数据分析工具之 numpy pandas matplotlib

    作为一个网络技术人员,机器学习是一种很有必要学习的技术,在这个数据爆炸的时代更是如此. python做数据分析,最常用以下几个库 numpy pandas matplotlib 一.Numpy库 为了 ...

  2. python科学计算之numpy+pandas+matplotlib+mysql

    简介 本文主要介绍了读取mysql中的数据,将其保存至numpy和pandas中,通过matplotlib进行可视化数据分析. 一.环境搭建 使用anaconda搭建科学计算环境,并安装相关软件包. ...

  3. Numpy+Pandas+Matplotlib学习

    参考的教程是哔哩哔哩孙兴华UP主的视频,边学边做 BV1ji4y157uB 代码及所用的数据已上传至Github learn_numpy_pandas_matplotlib 文章目录 Numpy Pa ...

  4. Python numpy+pandas+matplotlib学习笔记

    Python numpy+pandas+matplotlib 本文是根据b站路飞学城Python数据分析全套教程的学习视频整理归纳的学习文档,主要目的是方便自己进行查阅,详细的还得去b站看原视频.另外 ...

  5. python数据分析与机器学习(Numpy,Pandas,Matplotlib)

    机器学习怎么学? 机器学习包含数学原理推导和实际应用技巧,所以需要清楚算法的推导过程和如何应用. 深度学习是机器学习中神经网络算法的延伸,在计算机视觉和自然语言处理中应用更厉害一些. 自己从头开始做笔 ...

  6. numpy+pandas+matplotlib绘制误差条形图

    代码源于:Python数据分析与挖掘实战 绘制误差棒图: #-*- coding: utf-8 -*-import matplotlib.pyplot as plt import numpy as n ...

  7. numpy+pandas+matplotlib绘制对数函数图形

    代码来源: Python数据分析与挖掘实战 对x轴(y轴)使用对数刻度(以10为底),y轴(x轴)使用线性刻度,进行plot函数绘图 对数:如果a的x次方等于N(a>0,且a不等于0),那么数x ...

  8. numpy+pandas+matplotlib画箱形图

    代码源于: Python数据分析与挖掘实战 绘制样本数据的箱形图,样本由两组正态分布的随机数据组成.其中,一组数据均值为0,标准差为1,另一组数据均值为1,标准差为1 #-*- coding: utf ...

  9. python optimize_Python的五大常用库——numpy,pandas,matplotlib等

    Numpy Numpy 是python科学计算的基础包,本书大部分内容都基于numpy以及构建于其上的库.其功能有: 快速高效的多维数组对象ndarray 用于对数组执行元素级计算以及直接对数组执行数 ...

最新文章

  1. Android移动开发之【Android企业级项目实战教程】DAY1-图表库HelloCharts
  2. LINUX操作系统手机刷机包制作、修改方法
  3. MySQL连接方式:长连接或者短连接
  4. a与a:link、a:visited、a:hover、a:active
  5. Protobuf使用规范分享
  6. 新手学完Java可以面试哪些岗位?
  7. LeetCode笔记】剑指 Offer 35. 复杂链表的复制(Java、哈希表、原地算法)
  8. php 清空一个数组_php如何删除一个数组
  9. 面试精讲之面试考点及大厂真题 - 分布式专栏 07 说一说什么是正向代理,反向代理
  10. JavaScript学习笔记(十)构造函数封装、对象检测、对象继承
  11. UVa - 1617 - Laptop
  12. sort()与cmp()
  13. 【❤️万字长文总结❤️】一篇学会Redis高可用✔集群✔搭建详细教程
  14. php socket keepalive,使用keepalive和fastcgi_keep_conn打开Nginx php-fpm时出错
  15. 技巧篇-图层叠加之美(一)
  16. python就业方向-看完Python这五大就业方向的薪资待遇,你选择哪个?
  17. CentOS7 安装RabbitMQ 亲测(编写中,有大神请帮忙指点下文中遇到的问题,谢谢)...
  18. [乐意黎转载]GitHub上整理的一些工具集合
  19. Ubuntu 链接ln的使用:创建和删除符号链接
  20. pytyon 微妙_字体的微妙力量

热门文章

  1. Linux 更改主机的 host 名
  2. postgre SQL 中的 触发器 (实例应用,如何备份更新之前的差分数据)
  3. SQL Server复制需要有实际的服务器名称才能连接到服务器 错误解决方案
  4. FPGA图像加速解决方案来了
  5. 强制换行word-break:break-all或者word-wrap:break-word都无效的解决方法
  6. 关于多属性查找问题的sphinx解决方案
  7. url中向后台传递中文乱码解决方法
  8. IDEA 报 「Could not autowire. No beans of ‘UserMapper‘ type found」错误解决方案
  9. RestTemplate异常no suitable HttpMessageConverter found for request type [java.lang.Integer]
  10. mysql中文显示问号,不能识别中文的解决方案