概述
一. 数据挖掘的过程主要有:
1.定义目标
2.获取数据(常用手段:爬虫获取、下载统计网站发布的数据)
3.数据探索:目的是及早发现数据的一些简单规律或特征。数据探索核心是:
(1)数据质量分析(跟数据清洗密切联系)
(2)数据特征分析(分布、对比、周期性、相关性、常见统计量等)
4.数据预处理(数据清洗【去除脏数据】、数据集成【集中】、数据变换【规范化】、数据规约【精简】)
数据清洗的目的是留下可靠数据,与数据探索没有严格先后顺序,经常在一个阶段进行。 数据清洗可以按如下步骤进行:
(1)缺失值处理(通过describe【所有有值的】与len【包含没有值的】直接发现、通过0数据发现【有些数据不能为0】)
(2)异常值处理(通过散点图发现)
一般遇到缺失值,处理方式为:删除、插补、不处理;
插补的方式主要有:均值插补、中位数插补、众数插补、固定值插补、最近数据插补、回归插补、拉格朗日插值、牛顿插值、分段插值等;
遇到异常值,一般处理方式为视为缺失值、删除、修补(平均数、中位数等)、不处理;
4.1 异常分析、分布分析
import matplotlib.pylab as pyl
import numpy as npy #数据
import pandas as pda
import pymysql
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="root",db="csdn")
data=pda.read_sql(sql,conn)
print(data.describe()) #括号不能省
print(len(data)) #发现缺失值 先把价格为0的数据置为空,再把空值处置为中值
#数据清洗
#发现缺失值
data["price"][data["price"]==0]=None
for i in data.columns:
for j in range(len(data)):
if(data[i].isnull())[j]: #若为0 插补法
data[i][j]="36"
x+=1
print(x) #处理的数据为0的数据个数
#异常值处理 循环中设置一个阈值,大于阈值则认为是异常值
#画散点图(横轴为价格,纵轴为评论数)
data2=data.T
price=data2.values[2] #得到价格 从0开始数的
comt=data2.values[3] #得到评论数
pyl.plot(price,comt,"o")
pyl.show()
#评论数异常>20万,价格异常>2300
line=len(data.values) #行
col=len(data.values[0]) #列
da=data.values
for i in range(0,line):
for j in range(0,col):
if(da[i][2]>2300):
print(da[i][j]) #输出异常情况
da[i][j]=36 #处理价格异常
if(da[i][3]>200000):
print(da[i][j]) #输出异常情况
da[i][j]=58
da2=da.T #挑出异常值后重新绘图
price=da2[2]
comt=da2[3]
pyl.plot(price,comt,"o")
pyl.show()
#分布分析
#极差:最大值-最小值
#组距:极差/组数 (组数可取12)
pricemax = da2[2].max()
pricemin = da2[2].min()
commentmax=da2[3].max()
commentmin=da2[3].min()
pricerg=pricemax-pricemin
commentrg=commentmax-commentmin
pricedst=price/12
commentdst=commentrg/12
#画价格的直方图
pricesty=npy.arange(pricemin,pricemax ,pricedst)
pyl.hist(da2[2],pricesty)
pyl.show()
#画评论的直方图
commentsty=npy.arange(commentmin,commentmax,commentdst)
pyl.hist(da2[3],commentsty)
pyl.show()
4.2 数据集成
数据集成一般是把不同来源的数据放在一起。但是来自多个地方的数据一定要做好实体识别与冗余属性识别,避免数据整合错误及数据重复。
一般来说,数据集成的过程如下:
(1)观察数据源,发现其中关系,详细查看是否有同名不同意,同意不同名的情况;(price与goodprice)
(2)进行数据读取与整合;
(3)去除重复数据。
import matplotlib.pylab as pyl
import numpy as npy #数据
import pandas as pda
import pymysql
a=numpy.array([[1,6,9],[23,5,6]])
b=numpy.array([[3,6,9],[24,56,7]])
c=numpy.concatenate((a,b)) #将a与b整合 集成函数
print(c)
4.3 数据变换
简单变换:
(1)数据变换的目的是将数据转化为更方便分析的数据;
(2)简单变换通常使用函数变换的方式进行,常见的函数变换包括:开方、平方、对数等。
数据规范化:
(1)离差标准化(最小最大标准化):消除量纲(单位)影响以及变异大小因素的影响;x1=(x-min)/(max-min)
(2)标准差标准化(零-均值标准化):消除单位影响以及变量自身变异影响;x1=(x-平均数)/标准差
(3)小数定标规范化:消除单位影响。x1=x/10**(k) k=log10(k由x的绝对值的最大值决定)
离散化:将连续数据离散化、将离散数据间隔变大
(1)等宽离散化
(2)等频率离散化:将相同频数的记录放进每一个区间
(3)一维聚类离散化
属性构造:可根据原来的属性得到一些新的属性
import matplotlib.pylab as pyl
import numpy as npy #数据
import pandas as pda
import pymysql #从数据库中读取数据所用的模块
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="root",db="csdn")
sql="select * from myhexun"
data=pda.read_sql(sql,conn)
print(data.describe())
#离差标准化
data2=(data-data.min())/(data.max()-data.min())
print(data2)
#标准差标准化 平均数是0,标准差是1
data3=(data-data.mean())/data.std()
print(data3)
#小数定标规范化
k=npy.ceil(npy.log10(data.abs().max())) #numpy下的进1取整
data4=data/10**(k)
print(data4)
#离散化
data5=data[u"price"].copy()
data6=data5.T
data7=data6.values
k=3 #划分为三段
#等宽离散化函数cut cut(数据,划分的区间(若第二个参数为正整数,则表示划分的段数),标签(每一份代表的什么))
#abc=[20,50,80,120]
#pda.cut(abc,20,labels=["便宜","适中","有点贵","天价"])
#pda.cut(abc,[20,60,90,150]) #非等宽,也可以加上标签
c1=pda.cut(data7,k,labels=["便宜","适中","贵"]) #等宽
print(c1)
c2=pda.cut(data7,[0,50,100,300,500,2000,5000],labels=["非常便宜","便宜","适中","有点贵","很贵","非常贵"]) #非等宽
#构造新属性,写进文档
ch=data[u"comment"]/data["hits"] #评论数除以点击率
data[u"评点比"]=ch
file="./hexun.xls"
data.to_excel(file,index=False) #to_excel:写进一个excel文件中 第二个参数表示索引
4.4 数据规约(精简):属性规约(主成分分析:主要是PCA)+数值规约(类似离散化)
主成分分析:https://blog.csdn.net/google19890102/article/details/27969459
要用到主成分分析法,首先要安装sklearn这个模块(pip3 install sklearn PCA安装后的目录:pythonlibsite-packagessklearndecompositionpca.py)
import matplotlib.pylab as pyl
import numpy as npy #数据
import pandas as pda
import pymysql #从数据库中读取数据所用的模块
from sklearn.decomposition import PCA
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="root",db="csdn")
sql="select hits,comment from myhexun" #确定导出的是哪部分数据
data=pda.read_sql(sql,conn)
print(data.describe())
#构造新属性,写进文档
ch=data[u"comment"]/data["hits"] #评论数除以点击率
data[u"评点比"]=ch
#file="./hexun.xls"
#data.to_excel(file,index=False) #to_excel:写进一个excel文件中 第二个参数表示索引
#主成分分析
pca1=PCA() #创建对象
pca1.fit(data9) #用fit函数处理加载的数据
charater=pca1.components_ #返回模型的特征向量
#print(charater)
#各个成分中各自方差的百分比,贡献率
#自动提示导入参考:https://blog.csdn.net/xjfirefox/article/details/51741661
rate=pca1.explained_variance_ratio_
#print(rate)
#降维
pca2=PCA(2) #参数为希望的维数
pca2.fit(data9)
dim_redu=pca2.transform(data9) #降维
#print(dim_redu)
recovery=pca2.inverse_transform(dim_redu) #恢复
#print(recovery)
5.挖掘建模(分类、聚类、关联、预测)
6.模型评价与发布
二. 相关模块简介:
1.numpy 可以高效处理数据,提供数组支持,很多模块都依赖它,如pandas、scipy、matplotlib,是基础模块;
2.pandas 主要用于数据搜索和数据分析;
3.matplotlib 作图模块,解决可视化问题;
4.scipy 主要用于数值计算,同时支持矩阵运算,并提供了很多高等数据处理功能,比如积分、傅里叶变换、微分方法求解等;
5.statsmodels 主要用于统计分析;
6.Gensim 主要用于文本挖掘;
7.sklearn 、kears前者机器学习,后者深度学习。
三. 模块安装的顺序与方式建议如下:
1.numpy、mkl(下载安装[先下载.whl文件,再安装]numpy+mkl的:pip3 install +...)
2.pandas(网络安装 pip3 install +...)
3.matplotlib(网络安装)
4.scipy(下载安装)
5.statsmodels(网络安装)
6.Gensim(网络安装)
四.模块使用:
1.numpy
import numpy as np
np.array([元素1,元素2,...,元素n])
np.array([ [ ],[ ],[ ],...[ ] ])
np.dtype #类型
a.sort() #排序
y1 = y.max() #取最大值操作
x1 = x[1:3] #切片
2.pandas
#Series
a = pda.Series([2,3,4,6]) #默认索引排序
b = pda.Series([2,4,5,7],index = ["one","two","three","four"]) #指定索引
c = pda.DataFrame([[5,6,2,3],[8,4,6,3],[6,4,31,5]]) #生成一个二维数据,且行和列都有默认索引
d= pda.DataFrame([[5,6,2,3],[8,4,6,3],[6,4,31,5]],columns = ["one","two","three","four"]) #对列名指定索引
e = pda.DataFrame({
"one":4,
"two":[2,5,7],
"three":list(str(986))})#通过字典形式创建数据
f = d.head(3) #头部数据,默认显示前3行
g = d.tail(2) #尾部数据,默认后2行
h= d.discribe() #按列统计数据(个数cout、平均数mean、标准差std、最小值、每一列的分位数(1,2, 3)、最大值)
i = d.T #转置
3.matplotlib
3.1 绘制折线图、直方图
#绘制折线图、散点图 plot绘制
#直方图 hist绘制
import matplotlib.pylab as pyl
import numpy as npy #数据
x=[1,2,3,6,8] #x轴的数据
y=[5,7,9,11,6]
#pyl.plot(x,y) #plot(x轴数据,y轴数据,展现形式(折线图/散点图、颜色))
#pyl.show() #折线图,颜色默认
#pyl.plot(x,y,'o') #散点图,第三个参数的颜色和形状可叠加
#pyl.show() #散点图
'''
颜色
c--青色 r--红色 m--品红 g--绿色
b--蓝色 y--黄色 k--黑色 w--白色
线条样式
- 直线 --虚线 -. -.形式 :细小虚线
点的样式
s--方形 h--六角形 H--六角形 *--星形
+--加号 x--x形 d--菱形 D--菱形
p--五角形
'''
#pyl.plot(x,y,'--y') #虚线+黄色
#pyl.plot(x,y,'*')#散点图
pyl.plot(x,y,"*")#散点图
#添加表头及坐标标签
#同一个图绘制多个线段 多次适用plot,最后一起show
'''
x1=[1,3,5,6,7,8,0,1]
y1=[4,6,8,0,2,4,6,8]
pyl.plot(x1,y1)
pyl.title("show") #标题
pyl.xlabel("ages") #x轴的名称
pyl.ylabel("hobby") #y轴的名称
pyl.xlim(0,20) #x轴的范围
pyl.ylim(3,15) #y轴的范围
pyl.show()
'''
#随机数生成
data1=npy.random.random_integers(1,20,100) #整数随机数(最小值,最大值,个数)
#生成具有正态分布的随机数
data2=npy.random.normal(5,2,10) #(均值,σ,个数)
print(data2)
#直方图hist 统计每一段数据出现的频数
data3=npy.random.normal(10,1,10000) #(均值,σ,个数)
#pyl.hist(data3)
#pyl.show()
data4=npy.random.random_integers(1,26,1000) #随机数直方图
#pyl.hist(data4)
#pyl.show()
#设置横坐标尺度
sty=npy.arange(1,30,2) #起点,终点,间距
pyl.hist(data4,sty)
pyl.hist(data4,sty,histtype='stepfilled') #histtype='stepfilled 取消直方图轮廓
pyl.show()
3.2 绘制子图
import matplotlib.pylab as pyl
import numpy as npy #数据
#子图划分
pyl.subplot(2,2,3) #参数:行数,列数,当前区域
#pyl.show()
#如何在子图中绘图
pyl.subplot(2,2,1) #4个位置中的第一个位置
x1=[1,2,4,6,8] #相应图片细节写在相应图
y1=[4,6,8,9,5]
pyl.plot(x1,y1,"o")
pyl.subplot(2,2,2)
x2=[3,6,8,5,2]
y2=[4,5,7,9,3]
pyl.plot(x2,y2)
pyl.subplot(2,1,2)
x3=[1,6,9,12,15,17]
y3=[1,3,6,8,9,10]
pyl.plot(x3,y3,"*")
pyl.show()
绘制图片如下图所示:
五.数据导入:
1.导入csv数据
csv是一种常见的数据存储格式,基本上我们遇到的数据都可以转为这种存储格式。在python数据分析中,可以使用pandas模块导入csv数据。
import pandas as pda
i = pda.read_csv("文件地址/../.csv")
i.describe()
p = pda.sort_values(by = "21") #按列表头为21这一列进行排序
2.导入excel数据
i = pda.read_excel("文件地址/../.xls")
3.导入MySQL数据库里的数据:是一种常见的数据库
import pymysql
conn = pymysql.connect(host = "127.0.0.1",user = "root",passwd="root",db="hexun")
sql="select * from myhexun"
k=pda.read_sql(sql,conn) #select * from myhexun
4.导入html数据:使用pandas,可以直接从html网页中加载对应table表格中的数据,但是在使用read_html()之前,需要先安装html5lib模块与beautifulsoup4模块。
m = pda.read_html("网页文件表格/本地html文件")
5.导入文本数据:有时我们希望直接导入txt文本数据。
n = pda.read_table("文件地址")
六.读取博客数据并可视化分析:读取csv文件
import matplotlib.pylab as pyl
import numpy as npy #数据
import pandas as pda
data=pda.read_csv("/../") #导入数据
i=data.shape #可查看多少行,多少列
j=data.values[1][2] #可查看具体值 第几行,第几列
k=data.T #转置
y1=k.values[3] #假设转置后的第三行表示阅读数
x1=k.values[4] #假设转置后的第四行表示评论数
pyl.plot(x1,y1) #这样就把导入数据与可视化结合起来
pyl.show()
x2=k.values[0] #假设转置后的第0行表示ID
#pyl.plot(x2,y1) #这样就把导入数据与可视化结合起来
#pyl.show()
最后
以上就是大方季节为你收集整理的数据挖掘简单介绍的全部内容,希望文章能够帮你解决数据挖掘简单介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复