数据分析小总结
数据挖掘的十大算法
分类算法
C4.5,朴素贝叶斯(Naive Bayes),SVM,KNN,Adaboost,CART
聚类算法
K-Means,EM
关连分析
Apriori
[‘eɪprɪ’ɔ:rɪ] 先验的
Aprion是一种挖掘关联规则( association rules)的算法,它通过挖掘频繁项集( frequent item sets)来揭示物品之间的关联关系,被广泛应用到商业挖掘和网络安全等领域中。频繁项集是指经常岀现在一起的物品的集合,关联规则暗示着两种物品之间可能存在很强的关系。
连接分析
PageRank
PageRank起源于论文影响力的计算方式,如果一篇文论被引入的次数越多,就代表这篇论文的影响力越强。同样 PageRank被 Google创造性地应用到了网页权重的计算中:当一个页面链岀的页面越多,说明这个页面的“参考文献”越多,当这个页面被链入的频率越高,说明这个页面被引用的次数越高。基于这个原理,我们可以得到网站的权重划分。
Numpy之再回首
使用NumPy让Python科学计算更高效
列表list的元素在系统内存中是分散存储的,而 NumPy数组存储在一个均匀连续的内存块中。这样数组计算遍历所有的元素,不像列表list还需要对內存地址进行査找,从而节省了计算资源。由之前的NumPy博客可得知详情。
Python数据科学手册 NumPy入门 | ZDK’s blog
然而一旦确定下来numpy数组后,就不能在增加元素了。
另外在内存访问模式中,缓存会直接把字节块从RAM加载到CPU寄存器中。因为数据连续的存储在内存中, NumPy直接利用现代CPU的矢量化指令计算,加载寄存器中的多个连续浮点数。
NumPy中的矩阵计算可以采用多线程的方式,充分利用多核CPU计算资源,大大提升了计算效率。python因为有GIL锁,因此多线程也只能使用一个处理器,但是numpy是例外,因为numpy内部是用C写的,不经过python解释器,因此它本身的矩阵运算(array operations)都可以使用多核。
除了使用 NumPy外,你还需要一些技巧来提升内存和提高计算资源的利用率。一个重要的规则就是:避免采用隐式拷贝,而是采用就地操作的方式。举个例子,如果我想让一个数值x是原来的两倍,可以直接写成x =2,而不要写成y=x 2。这样速度能快2倍甚至更多。
NumPy里有两个重要的对象:ndarray(N-dimensional array object)解决了多维数组问题。ufunc(universal function object)则是解决对数组进行处理的函数。
ndarray对象
axis为0是跨行(纵向),axis为1是跨列(横向)。
创建数组
运行结果
结构数组
如果想统计一个班级里面学生的姓名,年龄,以及语文数学英语成绩,可以用数组的下标来代表不同的字段,但是这样不显性,可以自己定义一个数据结构。
运行结果
注意在定义数组时,用array中指定了结构数组的类型dtype=persontype
ufunc运算
它能对数组中每个元素进行函数操作,NumPy中很多ufunc函数计算速度非常快,因为都是采用C语言实现的。
连续数组的创建
np. arange和np.linspace起到的作用是一样的,都是创建等差数组。这两个数组的结果x1,x2都是[1 3 5 7 9]。结果相同,但是创建的方式是不同的。
arange()类似内置函数 range(),通过指定初始值、终值、步长来创建等差数列的一维数组,默认是不包括终值的。
linspace是 linear space的缩写,代表线性等分向量的含义。 linspace()通过指定初始值,终值、元素个数来创建等差数列的一维数组,默认是包括终值的。
算术运算
运行结果
取余函数里,既可以用remainder,也可以用mod,结果是一样的。
统计函数
统计数组矩阵的最大值函数amax(),最小值函数amin()
运行结果
统计最大值与最小值之差ptp()
运行结果
统计数组的百分位数percentile()
运行结果
percentile()代表着第p个百分位数,这里p的取值范围是0-100,如果p=0,那么就是求最小值,如果p=50就是求平均值,如果p=100就是求最大值。同样你也可以求得在axs=0和axis=1两个轴上的p%的百分位数。
统计数组中的中位数median(),平均数mean()
运行结果
统计数组中的加权平均值average()
运行结果
统计数组中的标准差std(),方差var()
运行结果
NumPy排序
这些排序算法在NumPy中实现起来其实非常简单,一条语句就可以搞定。这里你可以使用sort函数,sort(a,axis=-1,kind= quicksort, order=None),默认情况下使用的是快速排序;在kind里,可以指定 quicksort、 mergesort、 heapsort分别表示快速排序、合并排序、堆排序。同样axis默认是-1,即沿着数组的最后一个轴迸行排序,也可以取不同的axis轴,或者axis=None代表采用扁平化的方式作为一个向量进行排序。另外 order字段对于结构化的数组可以指定按照某个字段进行排序。
运行结果
练习题
统计全班的成绩
假设一个团队里有5名学员,成绩如下表所示。你可以用 NumPy统计下这些人在语文、英语、数学中的平均成绩、最小成绩、最大成绩、方差、标准差。然后把这些人的总成绩排序,得出名次进行成绩输出。
PythonCode/统计全班的成绩.py at master · zdkswd/PythonCode · GitHub
Pandas之再回首
在NumPy中数据结构是围绕ndarray展开的,在Pandas中,核心数据结构是Series和DataFrame。Pandas的基础是NumPy。
数据结构:Series和DataFrame
Series是个定长的字典序列,说是定长是因为在存储时,相当于两个ndarray,这也是和字典结构最大的不同,因为在字典结构中元素的个数是不固定的。
Series有两个基本属性,Index和values。在Series结构中,index默认是0,1,2递增的整数序列,当然也可以自己来指定索引,index=[‘a’, ‘b’, ‘c’, ‘d’]。
运行结果
还可以用字典方式来创建Series。
运行结果
DataFrame类型数据结构类似数据库表
数据库表
DataFrame是由相同索引的Series组成的字典类型。
import pandas as pd
from pandas import Series, DataFrame
data = {‘Chinese’: [66, 95, 93, 90,80],’English’: [65, 85, 92, 88, 90],’Math’: [30, 98, 96, 77, 90]}
df1= DataFrame(data)
df2 = DataFrame(data, index=[‘ZhangFei’, ‘GuanYu’, ‘ZhaoYun’, ‘HuangZhong’, ‘DianWei’], columns=[‘English’, ‘Math’, ‘Chinese’])
print df1
print df2
df1的输出:
df2的输出:
数据导入和输出
xlsx,csv
数据清洗
数据清洗是数据准备中必不可少的环节,Pandas也为我们提供了数据清洗的工具。
删除DataFrame中不必要的行或列
Pandas中drop()方法来删除我们不想要的列或行。
将语文这列删掉
将张飞这行删掉
重命名列名columns,让列表名更容易识别
例如把列名Chinese改为YuWen,English改为YingYu。
去重复的值
数据采集可能存在重复的行,这时只要使用 drop_duplicates就会自动把重复的行去掉。
格式问题
更改数据格式
这是个比较常用的操作,因为很多时候数据格式不规范,我们可以使用 astype函数来规范数据格式,比如我们把 Chinese字段的值改成str类型,或者int64可以这么写。
数据间的空格
有时候我们先把格式转成了str类型,是为了方便对数据进行操作,这时想要删除数据间的空格,我们就可以使用strip函数。
想要删除特殊符号,同样可以使用strip函数,比如删除美元符号。
大小写转换
查找空值
数据量大的情况下,有些字段存在空值NaN的可能,这时需要Pandas中的isnull函数进行查找。
如果想看哪些地方存在空值NaN,可以针对数据表df进行df.isnull()
如果想要知道哪列存在空值,可以使用df.isnull().any()
使用apply函数对数据进行清洗
apply是Pandas中自由度非常高的函数,使用频率也非常高。
比如想对name列的数值都进行大写转化:
可以定义个函数,在apply中进行使用。
还可以定义更复杂的函数
其中axis=1代表按照列为轴进行操作,axis=0代表按照行为轴进行操作,args是传递的两个参数,即n=2,m=3,在plus函数中使用到了n和m,从而生成新的df。
数据统计
在数据清洗后,就要对数据进行统计了。Pandas和NumPy一样都有常用的统计函数,如果遇到空值NaN,会自动排除。
数据表合并
创建两个DataFrame。
使用的是merge()函数,有五种形式。
基于指定列进行连接
inner内连接
left左连接
左连接是第一个DataFrame为主进行连接,第二个DataFrame作为补充。
right右连接
右连接是以第二个DataFrame为主进行的连接,第一个DataFrame作为补充。
outer外连接
外连接相当于求两个DataFrame的并集。
用SQL方式打开Pandas
pandasql。
pandas中的主要函数是sqdf,它接收两个参数:一个SQL查询语句,还有一组环境变量globals()或 locals()。这样我们就可以在 Python里,直接用SQL语句中对 Data Frame进行操作,举个例子。
运行结果
其中lambda是用来定义一个匿名函数的。具体形式为:
argument_list 是参数列表,expression是关于参数的表达式,会根据expression表达式计算结果进行输出返回。