数据分析 : 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律.

数据分析三剑客 -  Numpy Pandas Matplotlib

  1. # Numpy 基于一维或多维的数组 数组开辟的内存是连续的 数据容器 (是python的一个扩展程序库,支持大量的维度数组和矩阵运算,此外也针对数组原酸提供大量的数学函数库)
  2. import numpy as np
  3. ndarray 对象是用来存放同类型元素的多维数组,其中每个元素在内存中都有相同存储大小的区域
  4. # array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0) 数据源 默认整型
  5. arr1 = np.array([1,2,3,4,5]) 一维
  6. arr1 = np.array([[1,2,3],[3,4,"two"]]) 二维
  7. # 传进来的列表中包含了不同的数据类型,则统一为统一类型,优先级:str>float>int
  1. # 加载一张图片进来
  2. import matplotlib.pyplot as plt
  3. img_arr = plt.imread('./toy.jpg') #读图片 图像
  4. # img_arr # 三维数组
  5. plt.imshow(img_arr) # 显示图片
  6. img_arr = img_arr-10
  7. plt.imshow(img_arr)
    img_arr.shape #数组的形状(px,px,维度)
  8. --------------------------------------
  9. np routines 函数创建
    np.ones(shape,dtype,order) # 最后是排序
    np.zeros(shape,dtype,order) # float
  10. np.full(shape=(5,6,3),fill_value=12) # 几行几列 几纬度 数据填充
  11. np.linspace(0,100,10) # 基于等差数列的一位数组(不能,参数没有shape) 最后是个数
  12. np.arange(0,100,3) # 一维数组 [起止)步长
    ---------------------------------------

# 随机性固定 随机因子
 np.random.seed(10) #固定时间种子 产生的随机数就固定下来了
 np.random.randint(0,100,size=(6,7)) #[ )

 np.random.randn(d0,d1,d2 .. .. dn) #高斯分布 标准正态分布

 np.random.random(size=(4,5)) #[0.0, 1.0)半闭合

 np.eye(5) 返回一个二维数组,对角线上是1,其他地方是0. 2-D float

  1. # ndarray的属性
  2. ndim 维度
  3. shape 形状(各维度的长度)
  4. size 总长度
  5. dtype 元素类型
  6. img_arr.ndim 3
  7. img_arr.size 114027
  8. img_arr.shape (191, 199, 3)
  9. img_arr.dtype dtype('uint8')
  10. type(img_arr) numpy.ndarray
  1. ndarray 索引 一维与列表一样,多维时候同理
  2. arr1[0][0]
  3. --------- 切片---------------
  4. np.random.seed(1)
  5. arr = np.random.randint(0,100,size=(5,6))
  6. arr[:2] # 获取前两行
  7. arr[:,:2] # 获取前两列 #(行,列,三维度) 左行右列
  8. arr[0:2,:2] # 前2行/2列
  9. ---------- 倒叙 ------------
  10. # arr[::-1] 行倒叙
  11. # arr[:,::-1] 列倒序
  12. # arr[::-1,::-1] 行列都倒叙
  1. # 图片各种翻转
  2. plt.imshow(img_arr)
  3. plt.imshow(img_arr[:,::-1,:]) # 左右转 列倒
  4. plt.imshow(img_arr[::-1,:,:]) # 上下转 列倒序
  5. plt.imshow(img_arr[::-1,::-1,::-1]) # 全倒序
  1. 变形 ? reshape 参数是tuple
  2. 一维变二维 -1是自动计算
  3. 二维变一维 一维
  1. # 合并三张照片-------------------------------
  2. import matplotlib.pyplot as plt
    img_arr = plt.imread('./toy.jpg')
  3. im3 = np.concatenate((img_arr,img_arr,img_arr),1) #级联
  4. im9 = np.concatenate((im3,im3,im3),0)\
  5. plt.imshow(im9)
  6. # -- 切图 ----------------------------------
  7. plt.imshow(img_arr)
  8. plt.imshow(img_arr[40:110,50:133,:])
  9.  
  10. # 求和
  11. a1.sum(axis=0) #a.sum(axis=None, dtype=None, out=None, keepdims=False)
  12. # 排序
  13. np.sort(a1,axis=1) #不改变输入
  14. ndarray.sort() 本地处理 不占用空间 但改变输入
  1. 级联需要注意:
  2. 参数是列表: 一定要加[] ()
  3. 维度必须相同
  4. 形状相符 维度一致时,横向级联行数一样,纵向亦然
  5. 可通过axis 参数改变级联的方向

级联 知识

  1. 所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效。
  2. arr = np.array([1,2,3,4,5])
  3. a = arr.copy() #创建副本
  4. a[1] = 10
  1. np.sum
  2. np.max/ np.min 最大/小
  3. np.mean() 平均值

ndarray的聚合操作

  1. ndarray广播机制的三条规则:缺失维度的数组将维度补充为进行运算的数组的维度。缺失的数组元素使用已有元素进行补充
  2. 规则一:为缺失的维度补1(进行运算的两个数组之间的维度只能相差一个维度)
  3. 规则二:缺失元素用已有值填充
  4. 规则三:缺失维度的数组只能有一行或者一列

广播机制

  1. 快速排序
  2. np.sort()与ndarray.sort()都可以,但有区别:
  3. np.sort()不改变输入
  4. ndarray.sort()本地处理,不占用空间,但改变输入
  5. 部分排序
  6. np.partition(a,k)
  7.  
  8. 有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。
  9.  
  10. k为正时,我们想要得到最小的k个数
  11. k为负时,我们想要得到最大的k个数

ndarray的排序

# Pandas

  1. # 级联 维度一样,横向级联,纵向级联,形状相符
    import numpy as np
  2. a1 = np.random.randint(0,100,size=(4,5))
  3. a2 = np.random.randint(0,100,size=(4,5))
  4. a3 = np.random.randint(0,100,size=(4,4))
  5. display(a1,a2,a3)
  6. np.concatenate((a1,a2),axis=1) #concatenate((a1, a2, ...), axis=0竖直轴向, out=None)
  7.  
  8. # 合并三张照片 九宫格图片
  9. import matplotlib.pyplot as plt
  10. img_arr = plt.imread('./toy.jpg') #读取图片
  11. plt.imshow(img_arr) # 查看图片
  12. im3 = np.concatenate((img_arr,img_arr,img_arr),1) #横向
  13. im9 = np.concatenate((im3,im3,im3),0) #纵向
  14. plt.imshow(im9)
    plt.imshow(img_arr[40:110,50:133,:]) #图片裁剪

a1 = np.random.randint(0,100,size=(4,5))

sum 求和

a1.sum(axis=0) #a.sum(axis=None, dtype=None, out=None, keepdims=False) 列
a1.sum(axis=1) # 行
a1.sum() #总和

排序
np.sort(a1,axis=0) #不改变输入(返回新的数组,原数组不变) axis = 1行 0列 不指定的话就是的所有的都排序
a1.sort() #本地处理,不占用空间,但改变输入 --直接修改原数组,不推荐使用 a.sort(axis=-1, kind='quicksort', order=None)#Sort an array, in-place.

  1. s1 = Series(data=[1,2,3,4,5]) # 隐式索引 默认索引
  2. s2 = Series(data=[1,2,3,4,5],index=['a','b','c','d','e']) #显示索引
  3. s1[0],
  4. s2[1],
  5. s2['a']
  6. s2[['a','b','c']] #拿多个值
  1. s3 = Series(data=np.random.randint(0,100,size=(9)),name='haha')
  2.   s3 #用 numpy 创建Series
    dic = { 'english':100, 'yuwen':120 } #字典创建series
      Series(data=dic) # 输出 类似于字典

s2.iloc[0:3] # iloc跟隐式 loc跟显示 切片
s2['aaa']=1000 #相当于添加键值对
s2.index # 显式索引
s2.tail(2) #后几个
s2.head(2) #前几个

# 去重
s = Series(data=[1,3,1,2,4,5,3,2,3,5,6,7,4,2,4,5,5])

s.unique()  # 返回值是 array     => array([1, 3, 2, 4, 5, 6, 7], dtype=int64) 横排打印,series竖排打印,包含索引

  1. # 排空
  2. s1 = Series(data=[1,2,3,4,5],index=['a','b','c','e','f'])
  3. s = s1 + s2 # 索引与之对齐的数相加 显示隐式都可以
  4. # 数据清洗 去空值
  5. s.isnull() # True Falses.notnull() #True False
  6. #s[[True,False,True,True,False,True,False]] # 只保留True对应的值 s[[0,1,2,3]]
  7. s[s.notnull()] #返回新的Series s原始的数据不变

索引与之对齐的加减乘除/运算

DataFrame 是由Series组成的 表格型数据结构 值 行索引 列索引   //一维拓展多维

  1. import pandas as pd
  2. from pandas import Series,DataFrame
  3. df = DataFrame(data=np.random.randint(60,120,size=(3,4)),index=['a','b','c'],columns=['A','B','C','D']) #numpy数据源
  4. #(data=None, index 行=None, columns 列=None, dtype=None, copy=False) 3行4列

dic = { 
'zhangsan':[11,22,33,44],
'lisi':[0,1,2,3]
} #字典数据源
df = DataFrame(data=dic,index=['语文','数学','英语','化学'])

df['zhangsan'] #列索引取值,只能用 显示索引
df[['lisi','zhangsan']] #取多列

df.loc['语文'] #取行 index
df.iloc[0] 整数

  1. df.values #所有元素
  2. df.index #行索引 index obj
  3. df.columns = ['张','李'] #列索引修改 obj
  4. df.shape #(3,3) 形状

df.loc['英语','zhangsan'] # 先取行,再取列
df.loc[['英语','化学'],'zhangsan'] # 取多个值

df.iloc[:,1] #隐式索引  左行右列

df[0:2]  #行切片 前两行
df.iloc[:,0:2] #列切片 前两列

df['lisi'] #索引拿到  列
df.loc[:,'lisi':'zhangsan'] #通过切片切出前两列

df.loc[['语文','数学']] #索引取行
df['语文':'数学'] #切片取行
df.loc['语文','zhangsan'] # 通过索引取元素

-----------------------------------------------

dic = {
'zhangsan':[11,22,33,44],
'lisi':[0,1,2,3]
}
df = DataFrame(data=dic,index=['语文','数学','英语','化学'])
df_qz = df
qimo = df_qz
qimo['zhangsan']=[88,99,100,110]
(df_qz+qimo)/2            #期中期末平均成绩
df_qz.loc['数学','zhangsan']=0   #数学改0分
df_qz['lisi'] =df_qz['lisi']+100 #lisi所有成绩加100
df_qz = df_qz + 10          #所有人的各门课都加10

Numpy Pandas的更多相关文章

  1. Ipython自动导入Numpy,pandas等模块

    一.引言 最近在学习numpy,书上要求安装一个Ipythpn,可以自动导入Numpy,pandas等数据分析的模块,可是当我安装后,并不能自动导入numpy模块,还需要自己import.我就去查了一 ...

  2. Numpy&Pandas

    Numpy & Pandas 简介 此篇笔记参考来源为<莫烦Python> 运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, ...

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

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

  4. 有关python numpy pandas scipy 等 能在YARN集群上 运行PySpark

    有关这个问题,似乎这个在某些时候,用python写好,且spark没有响应的算法支持, 能否能在YARN集群上 运行PySpark方式, 将python分析程序提交上去? Spark Applicat ...

  5. 第一章:AI人工智能 の 数据预处理编程实战 Numpy, Pandas, Matplotlib, Scikit-Learn

    本课主题 数据中 Independent 变量和 Dependent 变量 Python 数据预处理的三大神器:Numpy.Pandas.Matplotlib Scikit-Learn 的机器学习实战 ...

  6. Numpy+Pandas读取数据

    1.为什么使用Numpy+Pandas 在使用Numpy读取csv文件时,文件中含有字符串时,会出现ValueError错误 2.Pandas读取csv文件:

  7. linux下安装numpy,pandas,scipy,matplotlib,scikit-learn

    python在数据科学方面需要用到的库: a.Numpy:科学计算库.提供矩阵运算的库. b.Pandas:数据分析处理库 c.scipy:数值计算库.提供数值积分和常微分方程组求解算法.提供了一个非 ...

  8. Python: NumPy, Pandas学习资料

    NumPy 学习资料 书籍 NumPy Cookbook_[Idris2012] NumPy Beginner's Guide,3rd_[Idris2015] Python数据分析基础教程:NumPy ...

  9. 常用统计分析python包开源学习代码 numpy pandas matplotlib

    常用统计分析python包开源学习代码 numpy pandas matplotlib 待办 https://github.com/zmzhouXJTU/Python-Data-Analysis

随机推荐

  1. Unable to guess the mime type as no guessers are available (Did you enable the php_fileinfo extension?)

    原因是没有开启php的php_fileinfo扩展,开启即可. 找到php.ini文件,搜索到php_fileinfo,去掉前面的分号,然后重启服务器apache.nginx下同理. extensio ...

  2. Hibernate项目的基本步骤和一些错误提示

    以数据库中有一张user表为例: 1.编写POJO持久化类User.javaPOJO(Plain Old Java Objects),简单的Java对象.一个POJO类不用继承任何类,也无须实现任何接 ...

  3. js基础 之 引用类型

    引用类型的值(对象)是引用类型的一个实例.引用类型是一种数据结构,用于将数据和功能组织在一起 对象是某个特定引用类型的实例.新对象是使用new操作符后跟一个构造函数来创建的.构造函数本身就是一个函数, ...

  4. 2-第一个Django程序

    第一个Django程序 从本章节开始将通过实现一个投票应用程序,来让用户逐步的了解Django.这个程序由两步分组成: 公共站点,允许用户访问进行投票,和查看投票. 站点管理,允许添加,删除,修改投票 ...

  5. redis源码(八)redis-check-aof.c

    /* * Copyright (c) 2009-2012, Pieter Noordhuis <pcnoordhuis at gmail dot com> * Copyright (c) ...

  6. BeautifulReport报告

    Project description BeautifulReport 一个基于unittest.TestResult模块实现的测试用例模板, 可把测试中的结果通过BeautifulReport整合成 ...

  7. pyautocad

    首部必须 #!/usr/bin/env python # -*- coding: utf-8 -*- 导入pyautocad import pyautocad import re # 设置python ...

  8. zabbix4.2配置邮件+脚本报警:以QQ邮箱为例

    一.邮箱配置:开启smtp服务和授权 开启smtp选项后,系统会生成一个授权,你需要记住这个授权码,后面需要写入配置文件. 二.配置管理mailx: (1)安装mailx:[root@zabbix-s ...

  9. tomcat8.5优化配置

    参考文章: https://www.cnblogs.com/steven-snow/p/9262025.html 1.Tomcat内存使用调整 windows系统在bin/catalina.bat文件 ...

  10. codeforces E. The Contest(最长上升子序列)

    题目链接:https://codeforces.com/contest/1257/problem/E 题意:给三个序列k1,k2,k3,每个序列有一堆数,k1是前缀,k3是后缀,k2是中间,现可以从任 ...