数据挖掘简单介绍

一. 数据挖掘的过程主要有:

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] #得到价格
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安装后的目录:python\lib\site-packages\sklearn\decomposition\pca.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) #头部数据,默认显示前5行
g = d.tail(2)  #尾部数据,默认后5行
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()

猜你喜欢

转载自blog.csdn.net/juliarjuliar/article/details/81004055
今日推荐