本文共 4900 字,大约阅读时间需要 16 分钟。
数据的预处理是在对数据分类或分组之前所做的必要处理,内容包括:数据的审核、筛选、排序等。
数据审核:就是检查数据中是否存在错误。包括:完整性审核和正确性审核。
数据筛选:根据需要找出符合特定条件的某类数据。
数据排序:按一定的顺序将数据排列,以便于研究者通过浏览数据发现一些明显的特征或趋势,找到解决问题的线索。
大家都比较熟悉的Excel可以帮助实现上述功能。在工作中,Excel可能算得上是最常用的数据预处理工具了。
行业数据挖掘标准过程(CRISP-DM)—目前数据挖掘模型开发的标准过程。这个过程指出了数据挖掘过程的第一阶段为业务理解,或称为研究理解,其中企业和研究人员首先阐明项目目标,然后将这些目标转化为数据挖掘的问题定义,最后为完成这些目标制定初步策略。数据挖掘工作的展开,对于数据需要经过预处理,包括数据清理和数据变换两种形式。
为什么需要对数据进行清理呢?
因为各种来源收集的数据,可能存在如下的问题:
所以需要对将要进行数据分析和数据挖掘的数据进行预处理。
可以使用Python,或者直接使用 工具Anaconda方便的制作各种统计图。
我喜欢的工具是:Anaconda。它已经自带了以下库:Numpy,Scipy,Maplotlib,Pandas和Scikit-Learn。
Anaconda 的下载地址:
下面的图例就是通过Anaconda制作的,当然开发语言是使用Python。
扩展库 | 简介 |
---|---|
Numpy | 提供数组支持,以及相应的高效的处理函数 |
Scipy | 提供矩阵支持,以及矩阵相关的数值计算模块 |
Matplotlib | 强大的数据可视化工具、作图库 |
Pandas | 强大、灵活的数据分析和探索工具 |
StatsModels | 统计建模和计量经济学,包括描述统计、统计模型估计和推断 |
Scikit-Learn | 支持回归、分类、聚类等的强大的机器学习库 |
Keras | 深度学习库,用于建立神经网络以及深度学习模型 |
Gensim | 用来做文本主题模型的库,文本挖掘可能用到 |
对数据进行质量分析以后,接下来可以通过绘制图表、计算某些特征量等手段进行数据的特征分析。
茎叶图的思路是将数组中的数按位数进行比较,将数的大小基本不变或变化不大的位作为一个主干(茎),将变化大的位的数作为分枝(叶),列在主干的后面,这样就可以清楚地看到每个主干后面的几个数,每个数具体是多少。
与直方图的比较编辑
茎叶图是一个与直方图相类似的特殊工具,但又与直方图不同,茎叶图保留原始资料的资讯,直方图则失去原始资料的讯息。将茎叶图茎和叶逆时针方向旋转90度,实际上就是一个直方图,可以从中统计出次数,计算出各数据段的频率或百分比。从而可以看出分布是否与正态分布或单峰偏态分布逼近。茎叶图在质量管理上用途与直方图差不多,但它通常是作为更细致的分析阶段使用。由于它是用数字组成直方图,所以在做的时候比直方图时,通常我们常使用专业的软件进行绘制。
优点 (1)从统计图上没有原始数据信息的损失,所有数据信息都可以从茎叶图中得到; (2)茎叶图中的数据可以随时记录,随时添加,方便记录与表示。缺点
茎叶图只便于表示个位之前相差不大的数据,而且茎叶图只方便记录两组的数据。两个以上的数据虽然能够记录,但是没有表示两个记录那么直观、清晰。一个精心设计的图形是展示数据的有效工具。
一张好的图表应具有以下基本特征:
(1)显示数据
(2)让看图的人把注意力集中在图形的内容上,而不是制作图形的程序上。
(3)避免歪曲
(4)强调数据之间的比较
(5)服务于一个明确的目标
(6)有对图形的统计描述和文字说明
散点图
import numpy as npN=50# height=np.random.randint(150,180,20)# weight=np.random.randint(80,150,20)x=np.random.randn(N)y=np.random.randn(N)plt.scatter(x,y,s=50,c='r',marker='o',alpha=0.5)plt.show()
x = range(20) y = x + np.random.randn(20)*1.05 plt.figure(figsize=(10,8)) #plt.scatter(x,y)plt.plot(x,y,'*') plt.plot(x,x) plt.title('x VS y') plt.xlabel('X') plt.ylabel('Y') plt.legend(('real data','fitted line')) plt.show()
条形图
N=5y=[20,10,30,25,15]y1=np.random.randint(10,50,5)x=np.random.randint(10,1000,N)index=np.arange(N)plt.bar(x=index,height=y,color='red',width=0.3)plt.bar(x=index+0.3,height=y1,color='black',width=0.3)plt.show()
条形图样例二
N=5y=[20,10,30,25,15]y1=np.random.randint(10,50,5)x=np.random.randint(10,1000,N)index=np.arange(N)#plt.bar(x=index,height=y,color='red',width=0.3)#plt.bar(x=index+0.3,height=y1,color='black',width=0.3)#plt.barh() 加了h就是横向的条形图,不用设置orientationplt.bar(x=0,bottom=index,width=y,color='red',height=0.5,orientation='horizontal')plt.show()
直方图
m1=100sigma=20x=m1+sigma*np.random.randn(2000)plt.hist(x,bins=50,color="green",normed=True)plt.show()
plt.figure(figsize=(10,8)) plt.hist(y1) plt.title('Weight change in 15 months')plt.xlabel('Weight(kg)') plt.ylabel('frequency') plt.show()
plt.figure(figsize=(10,8)) gaussian_numbers = np.random.randn(1000) plt.hist(gaussian_numbers, 30 ,color = 'navy',alpha = 0.5) plt.title('Gaussian Histogram') plt.xlabel('value') plt.ylabel('frequency') plt.show()
#双变量的直方图#颜色越深频率越高#研究双变量的联合分布x=np.random.rand(1000)+2y=np.random.rand(1000)+3plt.hist2d(x,y,bins=40)plt.show()
饼形图
labes=['A','B','C','D']fracs=[15,30,45,10]explode=[0,0.1,0.05,0]#设置x,y轴比例为1:1,从而达到一个正的圆plt.axes(aspect=1)#labels标签参数,x是对应的数据列表,autopct显示每一个区域占的比例,explode突出显示某一块,shadow阴影plt.pie(x=fracs,labels=labes,autopct="%.0f%%",explode=explode,shadow=True)plt.show()
箱线图样例
import matplotlib.pyplot as pltimport numpy as npdata=np.random.normal(loc=0,scale=1,size=1000)#sym 点的形状,whis虚线的长度plt.boxplot(data,sym="o",whis=1.5)plt.show()
plt.figure(figsize=(10,5)) plt.boxplot([y1,y2]) plt.xticks([1,2],['A','B'])plt.xlabel('Different objects')plt.show()
误差线图
import pandas as pdimport numpy as npimport matplotlib.pylab as plterror=np.random.randn(10)y=pd.Series(np.sin(np.arange(10)))y.plot(yerr=error)plt.show()
折线图
x=np.linspace(-10000,10000,100) #将-10到10等区间分成100份y=x**2+x**3+x**7plt.plot(x,y)plt.show()
线形图
import matplotlib.pyplot as plt import numpy as np import seaborn as sns import warnings warnings.filterwarnings("ignore") x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] y = [102,134,154,122,143,243,355,342,276,299,241,287,260,231,100] plt.figure(figsize=(10,5)) plt.plot(x,y) plt.title('Weight change in 15 months') plt.xlabel('Month') plt.ylabel('kg') plt.show()
import matplotlib.pyplot as plt import numpy as np import seaborn as sns import warnings warnings.filterwarnings("ignore")y1 = [102,134,154,122,143,243,355,342,276,299,241,287,260,231,100] y2 = [244,250,245,256,234,241,230,267,266,255,248,239,233,221,227] plt.figure(figsize=(10,5)) plt.plot(x,y1,label = 'A') plt.plot(x,y2,label = 'B') plt.title('Weight change in 15 months') plt.xlabel('Month') plt.ylabel('kg') plt.legend(fontsize = 10) plt.show()
附:CRISP-DM 资源
CRISP-DM方法论(跨行业数据挖掘标准流程、Cross-Industry Standard Process for Data Mining)
链接:
转载地址:http://hsvdi.baihongyu.com/