数据分析入门--Numpy

python数据分析一些学习经历

  • 欢迎一起来讨论有关python分析的内容
  • 前言
  • 一、数据分析
  • 二、学习环境
    • 1.python
    • 2.编写代码环境
  • 三、Numpy基础(数组创建)
    • 1.数组(列表)创建
    • 2.Numpy一些特性
  • 三、Numpy基础(索引、切片)
    • 0.一些重点提示
    • 1.一维
    • 2.多维
    • 3.多行的花式索引
  • 四、Numpy 高级
    • (一)、形状改变
    • (二)、各种求值函数
    • (三)、搜索和排序
    • (四)、文件读写(仅学习掌握了genfromtxt方法)
    • (五)、字符串处理
    • (六)、随机数生成
    • (七)、统计及矩阵运算
  • 五、未完待续

欢迎一起来讨论有关python分析的内容

提示:小生是萌新研究生初入数据分析还请多多指教

学习目录

  • 欢迎一起来讨论有关python分析的内容
  • 前言
  • 一、数据分析
  • 二、学习环境
    • 1.python
    • 2.编写代码环境
  • 三、Numpy基础(数组创建)
    • 1.数组(列表)创建
    • 2.Numpy一些特性
  • 三、Numpy基础(索引、切片)
    • 0.一些重点提示
    • 1.一维
    • 2.多维
    • 3.多行的花式索引
  • 四、Numpy 高级
    • (一)、形状改变
    • (二)、各种求值函数
    • (三)、搜索和排序
    • (四)、文件读写(仅学习掌握了genfromtxt方法)
    • (五)、字符串处理
    • (六)、随机数生成
    • (七)、统计及矩阵运算
  • 五、未完待续


前言

该博文会从Numpy,Pandas,绘图基础开始一直更新,希望得到大家的监督以及指正


以下是学习内容

一、数据分析

数据分析大白话来说就是去把一堆杂乱,无序,不知所云的数据,弄得有点看头!弄得能从数据中分析出一些有用的东西的一个东西。作为一个数据挖掘方向研究生,第一次接触这个还是比较棘手的,先从基础慢慢深入,希望大家和我一起学习分享,在其中如果我遇到问题我也会提出,希望得到大家的解答。一起把这3年研究生生活肝下去!!

二、学习环境

1.python

我才用Anaconda开源发行本版本为Anaconda3-4.3.0-Windows-x86.exe
Anaconda官方下载的链接.

下载如果“网速”慢的话建议去下载镜像
Anaconda镜像下载的链接.

2.编写代码环境

采用的是Anaconda自带的juterpy notebook编辑器,这个可以很清晰,很简便地运行得到结果。

三、Numpy基础(数组创建)

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库

具体如何高效请慢慢看下去

1.数组(列表)创建

 1) array(列表,dtype=数据类型)
 2) arange(起始值,终止值,步长)  [起始值,终止值)  左闭右开区间
 3)linspace(起始值,终止值,数量,endpoint)
 4)  logspace(起始值,终止值,base,数量)
 5)特殊列表
#  No1: array  普通数组
import numpy as np 
np.array([1,0,2,4])  #====> array([1, 3, 4])

#在array方法中加入dytpe属性可以指定数组中数据的数据类型
np.array([1,0,2,4],dtype="str")  #====> array(['1', '0', '2', '4'], dtype='
#  No2: arange 带有步长的数组创建
import numpy as np 
np.arange(10,25,5)	 #====> array([10, 15, 20]) 左闭右开区间 可以取到10 不可以取到25
#  No3: linspace(起始值,终止值,数量,endpoint)  等差数列建列表
import numpy as np 
#规则:等差步长=(最终值-起始值)/(总个数-1)
np.linspace(1,10,12)	 #====> array([ 1.        ,  1.81818182,  2.63636364,  3.45454545,  4.27272727, 5.09090909,  5.90909091,  6.72727273,  7.54545455,  8.36363636,9.18181818, 10.        ])

#endpoit规则:会把最终值加1 取得上述结果再把最后一个值删除
#eg:  np.linspace(1,10,12,endpoint=false) 
#   会把这个东西看作np.linspace(1,11,12)
#	得到结果把11. 删除 

下面这个等比数列理解难一点!!!

#  No4: logspace  等比数列
import numpy as np 
#简单使用 4为底数 从4的0次幂到4的9次幂 公比为4的等比数列并且设置数量为10
 np.logspace(0,9,10,base=4)  #====>array([1.00000e+00, 4.00000e+00, 1.60000e+01, 6.40000e+01, 2.56000e+02,1.02400e+03, 4.09600e+03, 1.63840e+04, 6.55360e+04, 2.62144e+05])

#结合等差数列的使用np.logspace(初始值,最终值,base,num)
#引例:
	np.logspace(1,3,base=2,num=5)  #====>array([2.        , 2.82842712, 4.        , 5.65685425, 8.        ])
	
#这个等价于下面的式子
	2 ** np.linspace(1,3,5)  #====>array([2.        , 2.82842712, 4.        , 5.65685425, 8.        ])

	
#  No5: 特殊列表
import numpy as np 
#全0列表(矩阵)
np.zero(6) # 六个元素都是0 的列表
np.zero([2,2]) #2*2的全零矩阵

#全一列表(矩阵)
np.ones(2)  #===>array([1., 1.])注意是浮点数
np.ones([2,2]) #===>array([[1., 1.],[1., 1.]])

#主对角线全一的矩阵
np.eye(3) #====》array([[1., 0., 0.],[0., 1., 0.], [0., 0., 1.]])

#对角阵(列表代表的主对角线的元素,其余全0)
np.diag([1,0,2,4]) #====>array([[1, 0, 0, 0],[0, 0, 0, 0],[0, 0, 2, 0], [0, 0, 0, 4]])

2.Numpy一些特性

 1) 矩阵运算简洁
 2) 查看数组(列表)属性
#矩阵加法
import numpy as np 
arr1 = np.array([1,0,2,4])
(arr1 + 1)  #===>每个元素都加1 

#而如果用python列表 需要用一个循环语句 否则报错
arr2 = [1,0,2,4]
(arr2+1)  #====>TypeError: can only concatenate list (not "int") to list(使用python自带的列表需要如下操作)
#处理矩阵很不方便 
arr= [1,0,2,4]
[i+1 for i in arr]  
#arr 是一个np创建出来的数组  arr = np.array(...)
#查看数组形状
arr.shape #===>如(3,2) 即3 行 2 列
#查看维度
arr.ndin #====> 几维
#查看数据类型
arr.dtype #===>里面元素的数据类型

三、Numpy基础(索引、切片)

0.一些重点提示

arr2 = arr1 这样赋值,改变一个另一个也会改变
arr2 = arr1.copy() 使用copy()方法改变仅对一个有效
np.array(可以传入元组,列表)

1.一维

先事先定义arr =[1,2,3,4,5,6,7,8,9]

	arr[0] #====> 1
	arr[::-1]  #===>数组逆序
	arr[::1]  #===>数组正序
	arr[-1] #====>倒数第一个
	arr[-3:-2] #====>倒数第三个到倒数第二个 左闭右开 则倒数第二个不能取
	

2.多维

先事先定义arr =[ [2,3,4], [3,4,2], [3,2,1]]

	arr[0] #====> 第三行所有 [2,3,4]
	arr[0,0]  #===>返回1行1列
	arr[:,0:2]  #===>返回第1列和第二列  [0,2)
	arr[0:2] #====>返回第1行到第2行 [0,2)
	arr[1:,2:] #====>返回从第二行 开始 第3列开始 交集的地方
	
	arr>2 #====>返回True/False的数组
	arr[arr>2] #===>满足要求的数据提取
	~    #条件取反符号

3.多行的花式索引

先事先定义arr =[ [2,3,4], [3,4,2], [3,2,1]]

	arr[[2,1]] #====>返回第三行和第二行
	arr[[1,2],[0,1]] #===>返回2行,3行 2行的1列  3行的2列
	arr[:,[2,0]]  #===>返回第三列和第一列
	arr[[0,-1]][:,[0,1]] #====>返回第一行和最后一行, 第一列和第二列  交集!

四、Numpy 高级

(一)、形状改变

1、 reshape和resize区别!
reshape方法只是一个临时的转换,需要赋一个值才能保存下来
resize方法是可以直接变成转换后的shape

	arr.reshape(10,4) #===>换为10行4列
	arr.reshape(-1,4) #====>有一个未知的时候numpy会自动计算并转换
	
	arr.resize(10,4) #=====>换成10行4列

2、 ravel和flatten区别!
ravel方法只是一个临时的转换,需要赋一个值才能保存下来
flatten方法是可以直接变成转换后

	arr.ravel() #====>横向降为1维
	arr.ravel(order=''F) #====>纵向降为1维度
	
	arr.flatten()  #====>同上

3、合并
纵向:vstack
横向:hstack
concatenate((arr1,arr2,…), axis=0) 由axis 来区分纵横

	np.vstack([arr1,arr2])
	
	np.hstack([arr1,arr2])

4、增加一个轴,使得一维变二维

#arr是一维度
arr[np.newaxis,:]

(二)、各种求值函数

预设定 arr1(4行3列) arr2(4行3列) arr3(1行3列)

arr1 + arr2 ---->加法
arr1 + arr3 ----->arr3的每列去相加 (用到了numpy的广播机制

	np.add(arr1,arr2)
	np.subtract(arr1,arr2)  #前减后
	np.divid(arr1,arr2)
	np.multiply(arr1,arr2)
	np.power(arr,指数)
	np.unique(arr)  #去重
	np.in1d(arr1,arr2) #判断arr1是否在arr2中
	np.intersect1d(arr1,arr2) #返回交集
	np.equal(arr1,arr2)  #比较
	np.greater(arr1,arr2).all()  #也可以.any()   all:一个F返回F  any:一个T返回T

	#numpy判空
	np.isnan(arr)

(三)、搜索和排序

	np.sort(arr)  #默认升序  加reverse=True 则降序
	sorted(arr)
	
	np.argsort(arr) #返回排序后各元素在原数组的位置
	arr.argmax()  #最大值所在的下标
	arr.argmin()
	
	#多维可以按行/列
	arr.argnax(axis =1 )
	
	#条件判断
	arr.where(条件,满足则赋值这,不满足则赋值这)
	
	np.extract(arr1>arr2,arr1) #满足条件输出,不满足不出

	

(四)、文件读写(仅学习掌握了genfromtxt方法)

因为Pandas才是文件读写的主流,因此对于Numpy就没有多做了解

直接进行举例:

	#读取文件(可以txt,也可以csv)  csv文件需要去掉表头 加入一个 skip_header=1 属性
	myfile = np.genfromtxt(r'路径',delimiter="分隔符")
		#myfile 是 numpy.ndarray格式的数据
	
	#存储
	np.savetxt(路径,myfile,delimiter="分隔符",fmt="以什么格式存")
	#fmt举例: "%.3f" 即保留3位小数

(五)、字符串处理

np.char.upper(arr) ----->全改大写
np.char.add(数组可以多个) ------>加入
np.char.multiply(arr,2) ---->全部变成两变
np.char.join(["-",","],[“hello”,“my”]) h-e-l-l-o m,y ---->加入间隔符
np.char.replace(arr,旧内容,新内容)----> 把旧内容替换为新内容
np.char.strip(arr,“字符”)---->(可左右) 去指定字符
np.char.find(arr,“内容”)—>检查有没有指定内容
np.char.islower(arr)—>是否全是小写
np.char.isdigit(arr)—>是否全是数字
np.char.count(arr,“内容”)—>检查指定内容的出现数量
np.char.startswith(arr,“内容”)—>检查有没有以指定内容开头的 endswith同理

(六)、随机数生成

数据分析入门--Numpy_第1张图片

数据分析入门--Numpy_第2张图片

(七)、统计及矩阵运算

	arr.sum(axis=1) #简单求和
	arr.mean()    #求均值
	arr.cumsum()  #求累计和
	np.percentile(arr,[10,20,30]) #返回10分位,20分位,30分位
	np.median(arr) #中位数  等价于  50分位
	np.ptp(arr)  #极差

	
#矩阵乘法
	np.dot(arr1,arr2)

#对应值相乘
	arr1 * arr2

#转置
	np.transpose(arr)

#求逆
	np.linalg.inv(arr)

#解方程组
	a1x+a2y+a3z = b1
	a4x+a5y+a6z = b2
	a7x+a8y+a9z = b3
	
	A = np.array([[a1,a2,a3],[a4,a5,a6],[a7,a8,a9]])
	b = np.array([[b1],[b2],[b3]])
	
	X = np.linalg.solve(A,b) 
	
	

五、未完待续

接下来会有后续的笔记更新,暂定Pandas,绘图,数据挖掘算法, 机器学习算法,计算智能…希望喜欢的人多多提意见,关注哦!谢谢大家!

你可能感兴趣的:(numpy,数据分析,机器学习)