
封面.png
數據挖掘概況
- 數據挖掘定義
數據挖掘是指從大量的數據中,通過統(tǒng)計學、人工智能、機器學習等方法挖掘出未知的且具有價值的信息和知識的過程。
- 數據挖掘和數據分析的區(qū)別
| 項目 | 數據分析 | 數據挖掘 |
|---|---|---|
| 定義 | 根據分析的目的,使用適當的分析方法及工具,對收集來的數據進行處理和分析,提取有價值的信息,發(fā)揮數據的作用 | 從大量的數據中,通過統(tǒng)計學、人工智能、機器學習等方法,挖掘出未知的、且具有價值的信息和知識的過程 |
| 作用 | 現(xiàn)狀分析、原因分析、預測分析 | 解決四類問題:分類、聚類、關聯(lián)、預測 |
| 方法 | 對比分析、分組分析、交叉分析、回歸分析等 | 決策樹、神經網絡、關聯(lián)規(guī)則、聚類分析等 |
| 結果 | 指標統(tǒng)計量結果,如總和、平均值 | 輸出模型或者規(guī)則 |
- 模型與算法
- 模型:定量(數學公式),定性:規(guī)則(年齡>30歲,收入>1萬元)
- 算法:實現(xiàn)數據挖掘的技術、模型的具體步驟與方法
數據挖掘常見的問題

屏幕快照 2019-07-21 下午1.37.03.png
- 分類特點
- 分類型目標變量(Y)——有監(jiān)督分類
- 使用已知目標分類歷史的樣本來訓練
- 需要對未知分類的樣本預測所屬的分類
常見的分類方法:決策樹、貝葉斯、KNN、支持向量機、神經網絡、邏輯回歸……
- 聚類特點
- 無分類目標變量——無監(jiān)督分類
- 物以類聚的思想
常見的聚類算法:劃分聚類、層次聚類、密度聚類、網格聚類、基于模型聚類……
- 關聯(lián)特點
- 無目標變量——無監(jiān)督分類
- 基于數據項關聯(lián),識別頻繁發(fā)生的模式
關聯(lián)常見的算法:Aprior算法、Carma算法、序列算法
- 預測特點
- 數值型目標變量——有監(jiān)督分類
- 須有已知目標值的的歷史樣本來訓練模型
- 對未知的樣本預測其的目標值
常見預測方法:簡單線性回歸分析、多重線性回歸分析、時間序列。
數據挖掘流程
文本分析
詞頻統(tǒng)計 - 語料庫的構建
語料庫:使我們要分析的所有文檔的集合
# -*- coding: utf-8 -*-
import os
import os.path
filePaths = []
for root, dirs, files in os.walk("./Sample"):
for name in files:
filePaths.append(os.path.join(root, name))
import codecs
filePaths = [];
fileContents = [];
for root, dirs, files in os.walk(
"D:\\PDM\\2.1\\SogouC.mini\\Sample"
):
for name in files:
filePath = os.path.join(root, name);
filePaths.append(filePath);
f = codecs.open(filePath, 'r', 'utf-8')
fileContent = f.read()
f.close()
fileContents.append(fileContent)
import pandas;
corpos = pandas.DataFrame({
'filePath': filePaths,
'fileContent': fileContents
})
詞頻統(tǒng)計 - 中文分詞
中文分詞是指將一個漢字序列切分為一個個單獨的詞
停用詞是指數據處理時需要過濾掉的詞
# -*- coding: utf-8 -*-
import jieba;
for w in jieba.cut("我愛Python"):
print(w)
for w in jieba.cut("""
工信處女干事
每月經過下屬科室都要親口交代
24口交換機等技術性器件的安裝工作
"""):
print(w)
#http://pinyin.sogou.com/dict/
seg_list = jieba.cut(
"真武七截陣和天罡北斗陣哪個更厲害呢?"
)
for w in seg_list:
print(w)
jieba.add_word('真武七截陣')
jieba.add_word('天罡北斗陣')
seg_list = jieba.cut(
"真武七截陣和天罡北斗陣哪個更厲害呢?"
)
for w in seg_list:
print(w)
jieba.load_userdict('./金庸武功招式.txt');
import os;
import os.path;
import codecs;
filePaths = [];
fileContents = [];
for root, dirs, files in os.walk("./Sample"):
for name in files:
filePath = os.path.join(root, name);
filePaths.append(filePath);
f = codecs.open(filePath, 'r', 'utf-8')
fileContent = f.read()
f.close()
fileContents.append(fileContent)
import pandas;
corpos = pandas.DataFrame({
'filePath': filePaths,
'fileContent': fileContents
});
import jieba
segments = []
filePaths = []
for index, row in corpos.iterrows():
filePath = row['filePath']
fileContent = row['fileContent']
segs = jieba.cut(fileContent)
for seg in segs:
segments.append(seg)
filePaths.append(filePath)
segmentDataFrame = pandas.DataFrame({
'segment': segments,
'filePath': filePaths
});
詞頻統(tǒng)計 - 實現(xiàn)
詞頻是指某個詞在該文檔中出現(xiàn)的次數。
# -*- coding: utf-8 -*-
import os;
import os.path;
import codecs;
filePaths = [];
fileContents = [];
for root, dirs, files in os.walk(
"D:\\PDM\\2.3\\SogouC.mini\\Sample"
):
for name in files:
filePath = os.path.join(root, name);
filePaths.append(filePath);
f = codecs.open(filePath, 'r', 'utf-8')
fileContent = f.read()
f.close()
fileContents.append(fileContent)
import pandas;
corpos = pandas.DataFrame({
'filePath': filePaths,
'fileContent': fileContents
});
import jieba
segments = []
filePaths = []
for index, row in corpos.iterrows():
filePath = row['filePath']
fileContent = row['fileContent']
segs = jieba.cut(fileContent)
for seg in segs:
segments.append(seg)
filePaths.append(filePath)
segmentDataFrame = pandas.DataFrame({
'segment': segments,
'filePath': filePaths
});
import numpy;
#進行詞頻統(tǒng)計
segStat = segmentDataFrame.groupby(
by="segment"
)["segment"].agg({
"計數":numpy.size
}).reset_index().sort(
columns=["計數"],
ascending=False
);
#移除停用詞
stopwords = pandas.read_csv(
"D:\\PDM\\2.3\\StopwordsCN.txt",
encoding='utf8',
index_col=False
)
fSegStat = segStat[
~segStat.segment.isin(stopwords.stopword)
]
import jieba
segments = []
filePaths = []
for index, row in corpos.iterrows():
filePath = row['filePath']
fileContent = row['fileContent']
segs = jieba.cut(fileContent)
for seg in segs:
if seg not in stopwords.stopword.values and len(seg.strip())>0:
segments.append(seg)
filePaths.append(filePath)
segmentDataFrame = pandas.DataFrame({
'segment': segments,
'filePath': filePaths
});
segStat = segmentDataFrame.groupby(
by="segment"
)["segment"].agg({
"計數":numpy.size
}).reset_index().sort(
columns=["計數"],
ascending=False
);