提示:小生是萌新研究生初入数据分析还请多多指教
该博文会从Numpy,Pandas,绘图基础开始一直更新,希望得到大家的监督以及指正
以下是学习内容
数据分析大白话来说就是去把一堆杂乱,无序,不知所云的数据,弄得有点看头!弄得能从数据中分析出一些有用的东西的一个东西。作为一个数据挖掘方向研究生,第一次接触这个还是比较棘手的,先从基础慢慢深入,希望大家和我一起学习分享,在其中如果我遇到问题我也会提出,希望得到大家的解答。一起把这3年研究生生活肝下去!!
我才用Anaconda开源发行本版本为Anaconda3-4.3.0-Windows-x86.exe
Anaconda官方下载的链接.
下载如果“网速”慢的话建议去下载镜像
Anaconda镜像下载的链接.
采用的是Anaconda自带的juterpy notebook编辑器,这个可以很清晰,很简便地运行得到结果。
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
具体如何高效请慢慢看下去
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]])
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 #===>里面元素的数据类型
arr2 = arr1 这样赋值,改变一个另一个也会改变
arr2 = arr1.copy() 使用copy()方法改变仅对一个有效
np.array(可以传入元组,列表)
先事先定义arr =[1,2,3,4,5,6,7,8,9]
arr[0] #====> 1
arr[::-1] #===>数组逆序
arr[::1] #===>数组正序
arr[-1] #====>倒数第一个
arr[-3:-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] #===>满足要求的数据提取
~ #条件取反符号
先事先定义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]] #====>返回第一行和最后一行, 第一列和第二列 交集!
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) #满足条件输出,不满足不出
因为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同理
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,绘图,数据挖掘算法, 机器学习算法,计算智能…希望喜欢的人多多提意见,关注哦!谢谢大家!