Python數據挖掘入門

封面.png

數據挖掘概況

  1. 數據挖掘定義

數據挖掘是指從大量的數據中,通過統(tǒng)計學、人工智能、機器學習等方法挖掘出未知的且具有價值的信息和知識的過程。

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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容