python的强大不在于它同样的功能需求下精简的代码实现,AI的潮流下带动了python的一波盲流也并不是因为python在语言上的优越性能。
客观地说,它有以下几个特点:
一:简单上手,简单到认真去学,基本语法一周学会,两周熟练。毕竟语言只是工具,能用并且方便就好。与其花费数月时间去掌握Java或者C++还不如数天时间搞定python。
二:用户群大,开源社区的便捷使得各种库都很成熟,并且代码易读性强,用起来也比较舒服。
三:效率不算慢,0.1s和0.001s的感官有时候差距不是那么大。
四:AI潮流下也不可避免地有一些潮流吹捧因素在其中。
不过,个人感觉,python真正的强大还在于其强大的科学计算和数据分析能力。
既然提到了科学计算和数据分析,那就不得不提一下Scipy集合库了,Scipy库主要包括numpy、pandas和mataplotlib等等。
这里面
numpy主要用于常规的数据运算,比如矩阵运算。
pandas则主要用于数据分析,包括数据的引入,特征的提取以及数据的清洗转移等等。
matplotlib则主要用于数据的可视化。
首先浅试一下numpy
既然是矩阵运算工具,那么主要关心其矩阵的生成和矩阵的操作。
比较常用的矩阵(数组)生成:
1、常规矩阵:自己指明元素array2、零矩阵/一矩阵zeros/ones
3、指定始末位置加步长的一维数组arange
4、等差距离/等比距离 一维矩阵#linspace/logspace
5、随机元素矩阵random/rand/randn/randint
6、矩阵的合并和扩展tile/hstack/vstack
可以看到,有两种方式主要是生成一维数组,那么这两种方式是否可以拓展到二维甚至多维呢,显然可以,即通过使用形状修改:reshape。
每个矩阵(数组)都有自己的维度及维数,reshape顾名思义及重新修改形状,由于其不影响原数组的安全性,故使用频次相对较高。
示例:
那么到这里,绝大部分简单需求的矩阵都可以随心生成了,虽然自己生数据往往只是少量试验,虽然自己生数据往往只是单机玩玩,但毕竟可以有矩阵数据可以玩了不是。
接下来便是矩阵的常用基本操作了。
1、与标量之间的运算以及相应位置元素计算只要直接怼上符号即可。
例如:
arr1 * arr2#对应元素相乘
arr1 ** 2#所有元素求平方
2、跑不掉的矩阵积运算
np.dot(arr1,arr2)#矩阵相乘前提是arr1列数等于arr2行数
3、核心要求是元素定位
arr1 = np.arange(1,17).reshape(4,4) #这个数组简直闭目可观,4行4列,元素1到16。
各种情况的元素定位:
取到元素才能修改,才能读取值,才能后面进一步分析,所以这一个无论在哪里都是基础中的核心,屌丝操作中的战斗丝级操作。
4、特殊元素的替换还得靠where
#使用起来效果类似于Java的问号表达式
示例:将arr1中所有异常数字直接替换成0
数据没用,练而放之,意义深远,转而存之。
既有读,则有取。
其次入手Pandas:numpy的豪华升级版
numpy是基础,却也是让python突出出来的一个强项点。
而Pandas则是numpy的一个升级版,正因为是升级版,所以,它更多是在numpy的数据基础上做的一些数据操作。
Pandas中两个主要的数据结构是Series与DataFrame,而DataFrame更像是Series组成的字典。
因此,DataFrame的生成可以在Series的基础上进一步添加列属性即可。
同时,相比Series,简单来说,DataFrame除了可以是多维数据外,也多出了列属性以及在列上的一些相关操作。
所以这里咱们先撇开Series,来谈谈DataFrame的一些家常吧。
对于DataFrame而言,一个DataFrame对象对应的数据,看起来更像是一张数据表,而对于数据表,基础关注点必然是增删改查操作。当然,pandas分析数据高效的地方还在于它可以直接对表数据进行函数操作来获取到自己希望的结果。
无论是带列索引还是不带列索引的表,数据是基本,也是根本,故而首先需要有数据,而数据的来源既可以是通过numpy生成,也可以是从文件中读取。当然,从文件中读取出来直接生成DataFrame也未尝不可的。
1、获取数据表
方式一:已有数据文件,直接获取并生成
方式二:在Series的基础上,直接生成
方式三:已有datas数据(可以是读文件获得,也可以是numpy生成),直接生成
2、增删改查操作
DataFrame的增删改查操作需要区分行列
关于列操作:
而关于行操作,则主要使用loc与iloc,即loc对应于index的选择,而iloc则主要对应于数字下标的行数据选择。
3、数据过滤及预处理
数据过滤关键也在于数据查询,行列数据查询过程给予赋值,即得到新数据
当然,由于DataFrame的行列属性,也可针对于行列属性进行数据选择
异常数据值的处理,一般分两类,一类为去除,另一类为填充。
关于去除异常数据
关于填充异常数据:
关于值替换:
因此若想要使用fillna的指定列填充,则可以首先将目标值替换成np.nan,然后择列指定规则即可。
4、表数据合并
5、常见数据筛选操作
按columnA列数据排列,选择最高前十条数据
统计各个name对应词频
6、使用函数
仅使用单个函数进行数据操作:
场景:分隔出某列关于时间具体年月日信息(原始格式,例如2018-01-17)
同时使用多个函数:
场景:根据columnA分组后查看B数据,包括B的均值,最值及最值之差
到这里对于表数据的常用点基本已经备齐了,此外还有一些点,包括成员判断,去重操作,自定义分组,相关系数,协方差计算以及多层次索引等,但就数据分析展示而言,用起来以后会发现还是以上内容相对使用比较频繁广泛。
扎实的基础是后期发力的关键,更是未来走远的根本。
日积跬步,终能行至千里路。
领取专属 10元无门槛券
私享最新 技术干货