1. 程式人生 > >Python資料分析與挖掘實戰學習筆記(一)

Python資料分析與挖掘實戰學習筆記(一)

資料預處理

1.     資料清洗

(1)缺失值處理

三種方法:刪除記錄、資料插補、不處理

常見插補方法:均值/中位數/眾數插補、使用固定值/期望值、迴歸方法(根據已有資料和其他與其有關變數等建立擬合模型來預測)、插值法(利用已知點建立合適的插值函式,如拉格朗日函式)

我們以餐廳銷量資料為例,使用拉格朗日插值法進行缺失值處理 ,使用缺失值前後各5個未缺失資料參與建模,得出結果如下。

應用拉格朗日插值法程式碼如下:

#拉格朗日插值程式碼
import pandas as pd #匯入資料分析庫Pandas
from scipy.interpolate import lagrange #匯入拉格朗日插值函式
inputfile = '../data/catering_sale.xls' #銷量資料路徑
outputfile = '../data/sales.xls' #輸出資料路徑
data = pd.read_excel(inputfile) #讀入資料
data[u'銷量'][(data[u'銷量'] < 400) | (data[u'銷量'] > 5000)] = None #過濾異常值,將其變為空值
#自定義列向量插值函式
#s為列向量,n為被插值的位置,k為取前後的資料個數,預設為5
def ployinterp_column(s, n, k=5):
    y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取數
    y = y[y.notnull()] #剔除空值
    return lagrange(y.index, list(y))(n) #插值並返回插值結果
  

#逐個元素判斷是否需要插值
for i in data.columns:
    for j in range(len(data)):
        if (data[i].isnull())[j]: #如果為空即插值。
            data[i][j] = ployinterp_column(data[i], j)

data.to_excel(outputfile) #輸出結果,寫入檔案

(2)異常值處理

在處理時,有些異常值可能蘊含有用資訊,需視情況而定。四種方法:刪除含有異常值的記錄、視為缺失值、平均值修正、不處理。

在資料量較多的時候我們不可能人工分辨,這裡受用describe函式檢視資料基本情況,並藉助箱線圖進行監測。程式碼如下:

import pandas as pd

catering_sale = '../data/catering_sale.xls' #餐飲資料
data = pd.read_excel(catering_sale, index_col = u'日期') #讀取資料,指定“日期”列為索引列
sums = data.describe()#檢視資料的基本情況
print("資料基本情況\n",sums)
print("總資料量:",len(data))
import matplotlib.pyplot as plt #匯入影象庫
plt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號
plt.figure() #建立影象
p = data.boxplot(return_type='dict') #畫箱線圖,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即為異常值的標籤
y = p['fliers'][0].get_ydata()
y.sort() #從小到大排序,該方法直接改變原物件
#用annotate添加註釋
#其中有些相近的點,註解會出現重疊,難以看清,需要一些技巧來控制。
#以下引數都是經過除錯的,需要具體問題具體除錯。
for i in range(len(x)): 
    if i>0:
        plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
    else:
        plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))
plt.show() #展示箱線圖

最終可以得出資料基本結果:

2.    資料整合

(1)     實體識別:同名異義、異名同義、單位不同意

(2)     冗餘屬性識別,可利用相關性分析對屬性進行檢測

相關性分析例項如下:我們以餐品銷量資料為例,以判定係數作為衡量標準,檢驗任何兩種餐品銷量之間的相關係數。

程式碼如下:

#餐飲銷量資料相關性分析
from __future__ import print_function
import pandas as pd
catering_sale = 'F:/fenxiyuwajue/dataandcode/chapter3/chapter3/demo/data/catering_sale_all.xls' #餐飲資料,含有其他屬性
data = pd.read_excel(catering_sale, index_col = u'日期') #讀取資料,指定“日期”列為索引列
data.corr() #相關係數矩陣,即給出了任意兩款菜式之間的相關係數
data.corr()[u'百合醬蒸鳳爪'] #只顯示“百合醬蒸鳳爪”與其他菜式的相關係數
data[u'百合醬蒸鳳爪'].corr(data[u'翡翠蒸香茜餃'])#計算“百合醬蒸鳳爪”與“翡翠蒸香茜餃”的相關係數

結果如下

3.     資料變換

(1)     簡單函式變換:平方、開放、取對數、差分運算

(2)     規範化:最小-最大規範化、零-均值規範化、小數定標規範化

程式碼示例:

#資料規範化
import pandas as pd
import numpy as np
datafile = '../data/normalization_data.xls' #引數初始化
data = pd.read_excel(datafile, header = None) #讀取資料
(data - data.min())/(data.max() - data.min()) #最小-最大規範化
(data - data.mean())/data.std() #零-均值規範化
data/10**np.ceil(np.log10(data.abs().max())) #小數定標規範化

(3)     連續屬性離散化

在資料的取值範圍內設定若干個離散的劃分點,將取值範圍劃分為若干個離散點,將取值範圍劃分為一些離散化的區間,最後用不同的符號或整數值代表落在每個子區間中的資料值。即確定分類數及將連續屬性值對映到這些分類值。

等寬法:類似於製作頻率分佈表

等頻法:將相同數量的記錄放進每個區間

基於聚類分析方法:首先將連續屬性的值用聚類演算法進行聚類,然後將得到的蔟進行處理,合併到一個蔟的連續屬性值並做同一標記。需使用者指定蔟個數,決定產生的區間數。

此處我們選擇“醫學中中醫證型的相關數”進行連續屬性離散化的對比。

程式碼示例:

#資料規範化
import pandas as pd
import matplotlib.pyplot as plt
datafile = 'F:/fenxiyuwajue/dataandcode/chapter4/chapter4/demo/data/discretization_data.xls' #引數初始化
data = pd.read_excel(datafile) #讀取資料
data = data[u'肝氣鬱結證型係數'].copy()
k = 4
d1 = pd.cut(data, k, labels = range(k)) #等寬離散化,各個類比依次命名為0,1,2,3
#等頻率離散化
w = [1.0*i/k for i in range(k+1)]
w = data.describe(percentiles = w)[4:4+k+1] #使用describe函式自動計算分位數
w[0] = w[0]*(1-1e-10)
d2 = pd.cut(data, w, labels = range(k))
from sklearn.cluster import KMeans #引入KMeans
kmodel = KMeans(n_clusters = k, n_jobs = 4) #建立模型,n_jobs是並行數,一般等於CPU數較好
kmodel.fit(data.reshape((len(data), 1))) #訓練模型
c = pd.DataFrame(kmodel.cluster_centers_).sort_index() #輸出聚類中心,並且排序(預設是隨機序的)
#這裡注意,c是生成的series型別資料,自帶索引,sort是排序列表,這裡要用sort_index
w = pd.rolling_mean(c, 2).iloc[1:] #相鄰兩項求中點,作為邊界點
w = [0] + list(w[0]) + [data.max()] #把首末邊界點加上
d3 = pd.cut(data, w, labels = range(k))
def cluster_plot(d, k): #自定義作圖函式來顯示聚類結果
    plt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文標籤
    plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號
    plt.figure(figsize = (8, 3))
    for j in range(0, k):
        plt.plot(data[d==j], [j for i in d[d==j]], 'o')
    plt.ylim(-0.5, k-0.5)
    return plt
cluster_plot(d1, k).show()
cluster_plot(d2, k).show()
cluster_plot(d3, k).show()

結果如下:




今日的資料預處理部分結束,明天補充資料規約。

相關推薦

Python資料分析挖掘實戰學習筆記

資料預處理1.     資料清洗(1)缺失值處理三種方法:刪除記錄、資料插補、不處理常見插補方法:均值/中位數/眾數插補、使用固定值/期望值、迴歸方法(根據已有資料和其他與其有關變數等建立擬合模型來預測)、插值法(利用已知點建立合適的插值函式,如拉格朗日函式)我們以餐廳銷量資

Python資料分析挖掘實戰筆記資料探勘基礎

一、資料探勘的基本任務 利用分類與預測、聚類分析、關聯規則、時序模式、偏差檢測、智慧推薦等方法,幫助企業提取資料中蘊含的商業價值,提升企業的競爭力。 二、資料探勘建模過程 定義挖掘目標:任務目標和完

Python資料分析挖掘實戰筆記資料建模

分類與預測 主要分類與預測演算法 迴歸分析 確定預測值與其他變數關係。線性、非線性、Logistic、嶺迴歸、主成分迴歸等 決策樹 自頂向下分類 人工神經網路 用神經網路表示輸入與輸出之間的關係 貝葉斯網路 又稱信度網路,是不確定知識表達和推理領域最有效的理論模

Python資料分析展示》學習筆記numpy入門

一.資料分析的基礎 Python在資料科學領域有一套成熟的工具鏈,numpy就是整個工具鏈的基礎構件,就像數位電路中的與非門,是其他複雜電路的基礎。 numpy在數學中對應的理論就是線性代數,n

資料分析挖掘入門——學習筆記numpy的基本函式使用

numpy的基本函式使用 1 通用函式彙總 一元函式 函式 說明 abs,fabs 計算整數、浮點數或複數的絕對值,對於非複數值,可以使用更快的fabs sqrt 計算各元素的平方根 square

python資料分析挖掘實戰筆記-3.1程式碼問題

問題 今天看到《python資料分析與挖掘實戰》這本書的第三章的第一份程式碼,照著書上的程式碼敲了一遍,發現在異常值處理的部分會報錯。 x = p['fliers'][0].get_xdata() y = p['fliers'][0].get_ydata()

python資料分析挖掘實戰筆記二:第99頁神經網路訓練出現的錯誤'Some keys in session_kwargs are not supported at this time: %s'

在使用神經網路模型預測銷量高低時,系統指出模型訓練時出現錯誤: ValueError Traceback (most recent call last) <ipython-input-20-e46e29b76a5e> in <module&g

Python資料分析挖掘實戰》第六章學習拓展——偷漏稅使用者識別

本文是繼上一篇文章中上機實驗之後的拓展思考部分的練習記錄。此拓展思考部分主要目標是依據附件所提供的汽車銷售企業的部分經營指標,來評估汽車銷售行業納稅人的偷漏稅傾向,建立偷漏稅行為識別模型。 本次拓展思考練習分以下幾個步驟進行: 資料初步探索分析 資料預處理

Python資料分析挖掘實戰》第八章學習-關聯規則Apriori

《Python資料分析與挖掘實戰》這本書其實已經在暑假結束的時候就已經基本上過了一遍,但是卻一直沒有堅持著記錄。最近幾天想著將之前的學習內容整理一遍,因此,再做記錄。 全文分為以下三個部分: Apriori演算法 Apriori的python實現 總結

菜鷄日記——《Python資料分析挖掘實戰》實驗6-1 拉格朗日插值法

實驗6-1 用拉格朗日插值法 題目描述:用拉格朗日插值法對missing_data.xls中表格的空值進行填補。 # p1, lab6 # Fill all of the null values with Lagrange's interpolation # Data file name i

Python資料分析挖掘實戰 pdf下載

Python資料分析與挖掘實戰是10餘位資料探勘領域資深專家和科研人員,10餘年大資料探勘諮詢與實施經驗結晶。從資料探勘的應用出發,以電力、航空、醫療、網際網路、生產製造以及公共服務等行業真實案例為主線,深入淺出介紹Python資料探勘建模過程,實踐性極強。 本書共15章,分兩個部分:基礎

推薦書籍《Python資料分析挖掘實戰》附下載連結

“10餘位資料探勘領域資深專家和科研人員,10餘年大資料探勘諮詢與實施經驗結晶。從資料探勘的應用出發,以電力、航空、醫療、網際網路、生產製造以及公共服務等行業真實案例為主線,深入淺出介紹Python資料探勘建模過程,實踐性極強。 本書共15章,分兩個部分:基礎

Python資料分析挖掘實戰挖掘建模

常用的分類與預測演算法 1迴歸模型分類 1線性迴歸---自變數因變數線性關係,最小二乘法求解 2非線性迴歸--自變數因變數非線性關係,函式變換為線性關係,或非線性最小二乘方法求解 3logistic迴

Python資料分析挖掘實戰Pandas,Matplotlib常用方法

作業系統:Windows Python:3.5 歡迎加入學習交流QQ群:657341423 上節講到資料分析和挖掘需要的庫,其中最主要的是Pandas,Matplotlib。 Pandas:主要是對資料分析,計算和統計,如求平均值,方差等。 Matplotl

Python資料分析挖掘實戰程式碼糾錯 程式碼3-1

我是通過這本書來開始學習資料探勘和分析,在目前學的內容中,發現了書上的程式碼有些地方是錯誤了,在此希望分享下我除錯好的程式碼,供大家參考,相互學習。 1、程式碼清單3-1 餐飲銷額資料異常值檢測程式碼 書上的程式碼如下: #-*- coding: utf-

Python資料分析挖掘實戰》第7章——kmeans

本文是基於《Python資料分析與挖掘實戰》的實戰部分的第七章的資料——《航空公司客戶價值分析》做的分析。旨在補充原文中的細節程式碼,並給出文中涉及到的內容的完整程式碼。 1)在資料預處理部分增加了屬性規約、資料變換的程式碼2)在模型構建的部分增加了一個畫出雷達圖的函式程式碼

python資料分析挖掘實戰 第六章 拓展思考

企業偷漏稅識別模型 1、資料探索 偷漏稅企業分佈 首先生成data import pandas as pd inputfile = r'E:\Download\百度雲\圖書配套資料、程式碼\chapter6\拓展思考\tax.xls' data =

Python資料分析挖掘實戰》第13章——迴歸+DNN

本文是基於《Python資料分析與挖掘實戰》的實戰部分的第13章的資料——《財政收入影響因素分析及預測模型》做的分析。旨在補充原文中的細節程式碼,並給出文中涉及到的內容的完整程式碼。在作者所給程式碼的基礎上增加的內容包括: 1)探索了灰色預測的原理 2)畫出預測結果圖3)由於

Python資料分析挖掘實戰》第15章——文字挖掘

本文是基於《Python資料分析與挖掘實戰》的實戰部分的第15章的資料——《電商產品評論資料情感分析》做的分析。旨在回顧對評論文字資料的處理和建模方法。1 挖掘背景與目標    對京東平臺上的熱水器評論進行文字挖掘分析,挖掘建模如下:1)分析某一個品牌熱水器的使用者情感傾向2

Python資料分析挖掘實戰』第五章:挖掘建模

# coding:utf-8 """ logistic 迴歸, 自動建模 """ import pandas as pd # 引數初始化 filename = r"C:\learning\DataMining\Book\Python_DataMining\Data\cha