Python中numpy数据分析库知识点总结

Python中numpy数据分析库知识点总结2.4 数组的拼接和行列交换2.5 创建特殊类型的数组2.6 numpy中常用统计函数一、numpy读取数据

推荐读入CSV( CSV:Comma-Separated Value,逗号分隔值文件 )格式的文件

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

二、对已读取数据的处理

我们默认要处理的数据命名为 t

如果,你不方便读入可以以下面的 t 为例子进行操作

t=np.array([[1,2,3],
            [4,5,6],
            [7,8,9]])

2.1 转置

读取数据后可能不符合日常操作习惯,这时可以对数据进行转置处理。

有三种办法进行转置,但是我只推荐前两种。

①第一种

t.transpose()

②第二种

t.T

③第三种

解释一下:这里通过交换0-axis和1-axis轴巧妙的将数据进行了转置

t.swapaxes(1,0)

2.2 数值的修改

这里通过举例子,来解释更容易理解!

①单边进行修改

这里其实是基于 numpy中布尔索引 ,感兴趣的同学可以自行百度。

例子:我们想要把t中小于3的数字替换为3

t[t<3]=3

②指定一个值,并对该值双边进行修改

例子:我们想把t中小于5的数字替换为0,把大于5的替换为1

这里的 np.where() 是 numpy 的三元运算符

np.where(t<5,0,1)

③指定两个值,并对第一个值的左侧和第二个值的右侧进行修改

例子:我们想把小于3的替换为3,大于5的替换为5

这里的 clip() 函数是修剪函数

np.clip(t,3,5)

2.3 索引和切片

这里通过举例子,来解释更容易理解!

①索引单个元素

例子:取出位于第一行第二列的元素

t[0,1]

②取出某行或某列

例子:取出第2行和第2列

t[1,:] # 第二行
t[:,1] # 第二列

③取出连续多行或多列

例子:取出第二行到第三行

取出第二行之后所有行(这个还是很有用的,因为,大多数情况下,我们数据的第一行都是标签)

t[1:3,:] # 第二行到第三行
t[1:,:] # 第二行之后所有行

④取出不连续的多行或多列

例子:取出第一行和第三行

t[[0,2],:] # 取出第一行和第三行

⑤取出多个交叉点的元素

例子:取出第2行和第2列的元素一和第3行和第3列的元素二,并组成一个新数组

t[[1,2],[1,2]]

2.4 数组的拼接和行列交换

我们大部分时间使用数组的拼接,很少用到数组的切割。因为我们如果需要切割,我们会首先选择切片。

①竖直拼接(np.vstack)

t1=np.array([[1,2],
             [3,4]])
t2=np.array([[5,6],
             [7,8]])
print(np.vstack((t1,t2)))

output:

[[1 2]
 [3 4]
 [5 6]
 [7 8]]

②水平拼接(np.hstack)

t1=np.array([[1,2],
             [3,4]])
t2=np.array([[5,6],
             [7,8]])
print(np.hstack((t1,t2)))

output:

[[1 2 5 6]
 [3 4 7 8]]

③行交换

将数组的二三行进行交换。

t[[1,2],:]=t[[2,1],:]

④列交换

将数组的二三列进行交换。

t[:,[1,2]]=t[:,[2,1]]

2.5 创建特殊类型的数组①创建一个全0的数组

np.zeros((3,4))

②创建一个全1的数组

np.ones((3,4))

③创建一个对角线为1的正方形数组(方阵)

np.eye(3)

2.6 numpy中常用统计函数

根据情况需要,选择传入 axis=0 或者 axis=1 或者不传入 axis 参数。

t.sum(axis=None)

t.mean(a,axis=None)

np.median(t,axis=None)

④最大值

t.max(axis=None)

⑤最小值

t.min(axis=None)

⑥最大值减去最小值

np.ptp(t,axis=None)

⑦标准差

t.std(axis=None)

⑧获取最大值的位置

np.argmax(t,axis=0)

⑧获取最小值的位置

np.argmin(t,axis=1)

三、几个注意点3.1 numpy中的nan和inf

np.nan (not a number)表示不是一个数字。

我们的数据中如果出现这种情况,不要着急删除整行或是整列数据,因为数据是宝贵的。我们可以将其 替换为 该行或该列的均值、中值等。

同时, np.nan 具有一些特殊的性质,下面用代码来说。

①两个np.nan是不相等的

# 两个nan 是不相等的
print(np.nan==np.nan) # False
print(np.nan!=np.nan) # True

②np.nan的类型是

print(type(np.nan)) # 

③判断数组中的nan 的个数

注意,数组中的元素需要是 类型,才能有元素 np.nan 。

利用两个 np.nan 是不相等的性质

如果数组内有元素 np.nan ,就会在位置上返回 True ,其他位置均返回 False

print(t!=t)

利用现有函数 np.isnan()

np.isnan(t)

然后通过函数 np.count_nonzero() 数0(False)的个数就可以了。

④ndarry缺失值填充

下面是利用均值来填充缺失值

# 要注意的是这里的平均个数是删去nan元素后的数组个数
def fill_nan_by_col_mean(t):
    for i in range(t.shape[1]):
        t_col=t[:,i]
        if np.count_nonzero(np.isnan(t_col)) != 0:
            t_col[t_col!=t_col]=t_col[t_col==t_col].mean()
            # 没必要写这一句话,因为上面的t_col=t[:,i]属于view,属于浅拷贝,数据是同时变化的!
            t[:,i]=t_col
def fill_nan_by_row_mean(t):
    for i in range(t.shape[0]):
        t_row=t[i,:]
        if np.count_nonzero(np.isnan(t_row)) != 0:
            t_row[t_row!=t_row]=t_row[t_row==t_row].mean()
            # 没必要写这一句话,因为上面的t_row=t[i,:]属于view,属于浅拷贝,数据是同时变化的!
            t[i,:]=t_row

3.2 view(浅拷贝)和 copy(深拷贝)完全不复制

t1和t2相互影响。

t1=t2

view(浅拷贝)

视图的操作,一种切片,会创建新的对象,但是新的对象的数据完全由原对象保管,他们两个的数据变化是一致的。

t1=t2[:,1]

copy(深拷贝)

复制的操作,新的对象和原对象之间互不影响。

t1=t2.copy()

数据挖掘十大算法

数据挖掘算法算法目录18大DM算法包名目录名算法名AssociationAnalysisDataMining_AprioriApriori-关联规则挖掘算法AssociationAnalysisDataMining_FPTreeFPTree-频繁模式树算法BaggingAndBoostingDataMining_AdaBoostAdaBoost-装袋提升算法ClassificationDataMining_CARTCART-分类回归树算法ClassificationDataMining_ID3ID3-决策树分类算法ClassificationDataMining_KNNKNN-k最近邻算法工具类ClassificationDataMining_NaiveBayesNaiveBayes-朴素贝叶斯算法ClusteringDataMining_BIRCHBIRCH-层次聚类算法ClusteringDataMining_KMeansKMeans-K均值算法GraphMiningDataMining_GSpanGSpan-频繁子图挖掘算法IntegratedMiningDataMining_CBACBA-基于关联规则的分类算法LinkMiningDataMining_HITSHITS-链接分析算法LinkMiningDataMining_PageRankPageRank-网页重要性/排名算法RoughSetsDataMining_RoughSetsRoughSets-粗糙集属性约简算法SequentialPatternsDataMining_GSPGSP-序列模式分析算法SequentialPatternsDataMining_PrefixSpanPrefixSpan-序列模式分析算法StatisticalLearningDataMining_EMEM-期望最大化算法StatisticalLearningDataMining_SVMSVM-支持向量机算法其他经典DM算法包名目录名算法名OthersDataMining_ACOACO-蚁群算法OthersDataMining_BayesNetworkBayesNetwork-贝叶斯网络算法OthersDataMining_CABDDCCCABDDCC-基于连通图的分裂聚类算法OthersDataMining_ChameleonChameleon-两阶段合并聚类算法OthersDataMining_DBSCANDBSCAN-基于密度的聚类算法OthersDataMining_GAGA-遗传算法OthersDataMining_GA_MazeGA_Maze-遗传算法在走迷宫游戏中的应用算法OthersDataMining_KDTreeKDTree-k维空间关键数据检索算法工具类OthersDataMining_MSAprioriMSApriori-基于多支持度的Apriori算法OthersDataMining_RandomForestRandomForest-随机森林算法OthersDataMining_TANTAN-树型朴素贝叶斯算法OthersDataMining_ViterbiViterbi-维特比算法18大经典DM算法18大数据挖掘的经典算法以及代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面,后面都是相应算法的博文链接,希望能够帮助大家学。

目前追加了其他的一些经典的DM算法,在others的包中涉及聚类,分类,图算法,搜索算等等,没有具体分类。C4.5C4.5算法与ID3算法一样,都是数学分类算法,C4.5算法是ID3算法的一个改进。ID3算法采用信息增益进行决策判断,而C4.5采用的是增益率。详细介绍链接CARTCART算法的全称是分类回归树算法,他是一个二元分类,采用的是类似于熵的基尼指数作为分类决策,形成决策树后之后还要进行剪枝,我自己在实现整个算法的时候采用的是代价复杂度算法,详细介绍链接KNNK最近邻算法。给定一些已经训练好的数据,输入一个新的测试数据点,计算包含于此测试数据点的最近的点的分类情况,哪个分类的类型占多数,则此测试点的分类与此相同,所以在这里,有的时候可以复制不同的分类点不同的权重。近的点的权重大点,远的点自然就小点。详细介绍链接Naive Bayes朴素贝叶斯算法。朴素贝叶斯算法是贝叶斯算法里面一种比较简单的分类算法,用到了一个比较重要的贝叶斯定理,用一句简单的话概括就是条件概率的相互转换推导。详细介绍链接SVM支持向量机算法。支持向量机算法是一种对线性和非线性数据进行分类的方法,非线性数据进行分类的时候可以通过核函数转为线性的情况再处理。

其中的一个关键的步骤是搜索最大边缘超平面。详细介绍链接EM期望最大化算法。期望最大化算法,可以拆分为2个算法,1个E-Step期望化步骤,和1个M-Step最大化步骤。他是一种算法框架,在每次计算结果之后,逼近统计模型参数的最大似然或最大后验估计。详细介绍链接AprioriApriori算法是关联规则挖掘算法,通过连接和剪枝运算挖掘出频繁项集,然后根据频繁项集得到关联规则,关联规则的导出需要满足最小置信度的要求。详细介绍链接FP-Tree频繁模式树算法。这个算法也有被称为FP-growth算法,这个算法克服了Apriori算法的产生过多侯选集的缺点,通过递归的产生频度模式树,然后对树进行挖掘,后面的过程与Apriori算法一致。详细介绍链接PageRank网页重要性/排名算法。PageRank算法最早产生于Google,核心思想是通过网页的入链数作为一个网页好快的判定标准,如果1个网页内部包含了多个指向外部的链接,则PR值将会被均分,PageRank算法也会遭到LinkSpan攻击。详细介绍链接HITSHITS算法是另外一个链接算法,部分原理与PageRank算法是比较相似的,HITS算法引入了权威值和中心值的概念,HITS算法是受用户查询条件影响的,他一般用于小规模的数据链接分析,也更容易遭受到攻击。

详细介绍链接K-MeansK-Means算法是聚类算法,k在在这里指的是分类的类型数,所以在开始设定的时候非常关键,算法的原理是首先假定k个分类点,然后根据欧式距离计算分类,然后去同分类的均值作为新的聚簇中心,循环操作直到收敛。详细介绍链接BIRCHBIRCH算法利用构建CF聚类特征树作为算法的核心,通过树的形式,BIRCH算法扫描数据库,在内存中建立一棵初始的CF-树,可以看做数据的多层压缩。详细介绍链接AdaBoostAdaBoost算法是一种提升算法,通过对数据的多次训练得到多个互补的分类器,然后组合多个分类器,构成一个更加准确的分类器。详细介绍链接GSPGSP算法是序列模式挖掘算法。GSP算法也是Apriori类算法,在算法的过程中也会进行连接和剪枝操作,不过在剪枝判断的时候还加上了一些时间上的约束等条件。详细介绍链接PreFixSpanPreFixSpan算法是另一个序列模式挖掘算法,在算法的过程中不会产生候选集,给定初始前缀模式,不断的通过后缀模式中的元素转到前缀模式中,而不断的递归挖掘下去。详细介绍链接CBA基于关联规则分类算法。CBA算法是一种集成挖掘算法,因为他是建立在关联规则挖掘算法之上的,在已有的关联规则理论前提下,做分类判断,只是在算法的开始时对数据做处理,变成类似于事务的形式。

详细介绍链接RoughSets粗糙集算法。粗糙集理论是一个比较新颖的数据挖掘思想。这里使用的是用粗糙集进行属性约简的算法,通过上下近似集的判断删除无效的属性,进行规制的输出。详细介绍链接GSpangSpan算法属于图挖掘算法领域。,主要用于频繁子图的挖掘,相较于其他的图算法,子图挖掘算法是他们的一个前提或基础算法。gSpan算法用到了DFS编码,和Edge五元组,最右路径子图扩展等概念,算法比较的抽象和复杂。详细介绍链接Others目录下的算法:GA遗传算法。遗传算法运用了生物进化理论的知识来寻找问题最优解的算法,算法的遗传进化过程分选择,交叉和变异操作,其中选择操是非常关键的步骤,把更适应的基于组遗传给下一代。详细介绍链接DbScan基于空间密度聚类算法。dbScan作为一种特殊聚类算法,弥补了其他算法的一些不足,基于空间密,实现聚类效果,可以发现任意形状的聚簇。详细介绍链接GA_Maze遗传算法在走迷宫游戏中的应用。将走迷宫中的搜索出口路径的问题转化为遗传算法中的问题通过构造针对此特定问题的适值函数,基因移动方向的定位,巧的进行问题的求解。详细介绍链接CABDDCC基于连通图的分裂聚类算法。

也是属于层次聚类算法主要分为2个阶段,第一阶段构造连通图。第二个阶段是分裂连通图,最终形成聚类结果。详细介绍链接Chameleon两阶段聚类算法。与CABDDCC算法相反,最后是通过对小簇集合的合并,形成最终的结果,在第一阶段主要是通过K近邻的思想形成小规模的连通图,第二阶段通过RI(相对互连性)和RC(相对近似性)来选一个最佳的簇进行合并。详细介绍链接RandomForest随机森林算法。算法思想是决策树+boosting.决策树采用的是CART分类回归数,通过组合各个决策树的弱分类器,构成一个最终的强分类器,在构造决策树的时候采取随机数量的样本数和随机的部分属性进行子决策树的构建,避免了过分拟合的现象发生。详细介绍链接KDTreeK-Dimension Tree。多维空间划分树,数据在多维空间进行划分与查找。主要用于关键信息的搜索,类似于在空间中的二分搜索,大大提高了搜索效率,在寻找目标元素时,使用了DFS深度优先的方式和回溯进行最近点的寻找。详细介绍链接MS-Apriori基于多支持度的Apriori算法。是Apriori算法的升级算法,弥补了原先Apriori算法的不足,还增加了支持度差别限制以及支持度计数统计方面的优化,无须再次重新扫描整个数据集,产生关联规则的时候可以根据子集的关系避免一些置信度的计算。

详细介绍链接ACO蚁群算法。蚁群算法又称为蚂蚁算法。同GA遗传算法类似,也是运用了大自然规律的算法,用于在图中寻找最优路径的概率型算法。灵感来源于蚂蚁在寻找食物时会散播信息素的发现路径行为。详细介绍链接BayesNetwork贝叶斯网络算法。弥补了朴素贝叶斯算法中必须要事件独立性的缺点,利用了贝叶斯网络的DAG有向无环图,允许各个事件保留一定的依赖关系,网络结构中的每个节点代表一种属性,边代表相应的条件概率值,通过计算从而能得到精准的分类效果。详细介绍链接TAN树型朴素贝叶斯算法。此算法又被称为加强版朴素贝叶斯算法。在满足原有朴素贝叶斯条件的基础上,他允许部条件属性直接的关联性。形成树型的结构。详细介绍链接Viterbi维特比算法。给定一个隐马尔科夫模型以及一个观察序列,求出潜在的状态序列信息,每个潜在状态信息又会受到前一个状态信息的影响。算法使用方法在每个算法中给出了3大类型,主算法程序,调用程序,输入数据,调用方法如下:将需要数据的测试数据转化成与给定的输入格式相同然后以Client类的测试程序调用方式进行使用。也可以自行修改算法程序,来适用于自己的使用场景

本站内容来自用户投稿,如果侵犯了您的权利,请与我们联系删除。联系邮箱:835971066@qq.com

本文链接:http://news.xiuzhanwang.com/post/2061.html

发表评论

评论列表

还没有评论,快来说点什么吧~

友情链接: