python數(shù)據(jù)預(yù)處理 :數(shù)據(jù)抽樣解析
何為數(shù)據(jù)抽樣:
抽樣是數(shù)據(jù)處理的一種基本方法,常常伴隨著計算資源不足、獲取全部數(shù)據(jù)困難、時效性要求等情況使用。
抽樣方法:
一般有四種方法:
隨機抽樣 直接從整體數(shù)據(jù)中等概率抽取n個樣本。這種方法優(yōu)勢是,簡單、好操作、適用于分布均勻的場景;缺點是總體大時無法一一編號
系統(tǒng)抽樣 又稱機械、等距抽樣,將總體中個體按順序進(jìn)行編號,然后計算出間隔,再按照抽樣間隔抽取個體。優(yōu)勢,易于理解、簡便易行。缺點是,如有明顯分布規(guī)律時容易產(chǎn)生偏差。
群體抽樣 總體分群,在隨機抽取幾個小群代表總體。優(yōu)點是簡單易行、便與組織;缺點是群體劃分容易造成誤差
分層抽樣 先按照觀察指標(biāo)影響較大的某一種特征,將總體分若干個類別,再從每一層隨機抽取一定數(shù)量的單位合并成總體。優(yōu)點樣本代表性好,少誤差
以上四種基本抽樣方法都屬單階段抽樣,實際應(yīng)用中常根據(jù)實際情況將整個抽樣過程分為若干階段來進(jìn)行,稱為多階段抽樣。
各種抽樣方法的抽樣誤差一般是:整群抽樣≥單純隨機抽樣≥系統(tǒng)抽樣≥分層抽樣
python代碼實現(xiàn)
import random
import numpy as np
import pandas as pd
# 導(dǎo)入數(shù)據(jù)
df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/glass.csv')
df.index.size
# 214
##########隨機抽樣##########
#
# 使用pandas
# DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
# n是要抽取的行數(shù)。(例如n=20000時,抽取其中的2W行)
# frac是抽取的比列。(有一些時候,我們并對具體抽取的行數(shù)不關(guān)系,我們想抽取其中的百分比,這個時候就可以選擇使用frac,例如frac=0.8,就是抽取其中80%)
# replace:是否為有放回抽樣,取replace=True時為有放回抽樣。
# weights這個是每個樣本的權(quán)重,具體可以看官方文檔說明。
# random_state這個在之前的文章已經(jīng)介紹過了。
# axis是選擇抽取數(shù)據(jù)的行還是列。axis=0的時是抽取行,axis=1時是抽取列(也就是說axis=1時,在列中隨機抽取n列,在axis=0時,在行中隨機抽取n行)
df_0 = df.sample(n=20, replace=True)
df_0.index.size
# 20
# 數(shù)據(jù)準(zhǔn)備
data = df.values
# 使用random
data_sample = random.sample(list(data), 20)
len(data_sample)
# 20
##########等距抽樣##########
# 指定抽樣數(shù)量
sample_count = 50
# 獲取最大樣本量
record_count = data.shape[0]
# 抽樣間距
width = record_count//sample_count
data_sample = []
i = 0
# 本量小于等于指定抽樣數(shù)量并且矩陣索引在有效范圍內(nèi)是
while len(data_sample) <= sample_count and i * width <= record_count -1:
data_sample.append(data[i*width])
i += 1
len(data_sample)
# 51
##########分層抽樣##########
# 數(shù)據(jù)只是隨便找的分層僅限于演示
# 定義每個分層的抽樣數(shù)量
each_sample_count = 6
# 定義分層值域
label_data_unique = np.unique(data[:, -1])
# 定義一些數(shù)據(jù)
sample_list, sample_data, sample_dict = [], [], {}
# 遍歷每個分層標(biāo)簽
for label_data in label_data_unique:
for data_tmp in data: # 讀取每條數(shù)據(jù)
if data_tmp[-1] == label_data:
sample_list.append(data_tmp)
# 對每層數(shù)據(jù)都數(shù)據(jù)抽樣
each_sample_data = random.sample(sample_list, each_sample_count)
sample_data.extend(each_sample_data)
sample_dict[label_data] = len(each_sample_data)
sample_dict
# {1.0: 6, 2.0: 6, 3.0: 6, 5.0: 6, 6.0: 6, 7.0: 6}
##########整群抽樣##########
# 數(shù)據(jù)分群僅限于演示,不符合實際情況
# 定義整群的標(biāo)簽
label_data_unique = np.unique(data[:, -1])
# 隨機抽取2個群
sample_label = random.sample(list(label_data_unique), 2)
# 定義空列表
sample_data = []
# 遍歷每個整群標(biāo)簽值域
for each_label in sample_label:
for data_tmp in data:
if data_tmp[-1] == each_label:
sample_data.append(data_tmp)
len(sample_data)
# 83
需要注意的問題
數(shù)據(jù)抽樣過程中要注意一些問題
數(shù)據(jù)時效性 不能用過時的數(shù)據(jù)來分析現(xiàn)在的運營狀態(tài)
關(guān)鍵因素數(shù)據(jù) 整體數(shù)據(jù)的關(guān)鍵性數(shù)據(jù)必須要在模型中,如雙十一帶來的銷售增長
業(yè)務(wù)隨機性 抽樣數(shù)據(jù)要使各個場景的數(shù)據(jù)分布均衡
數(shù)據(jù)來源多樣性 數(shù)據(jù)覆蓋要全面
抽樣數(shù)據(jù)量問題
時間分布 能包含業(yè)務(wù)周期。月銷售預(yù)測,至少包含12個月數(shù)據(jù);時間還要考慮季節(jié)、節(jié)假日、特定促銷日等周期性。
做預(yù)測分析 考慮特征數(shù)據(jù)和特征值域的分布,通常數(shù)據(jù)記錄要同時是特征數(shù)量和特征值域的100倍以上。例如數(shù)據(jù)集有5個特征值,每個特征有2個值域,那么數(shù)據(jù)記錄數(shù)需要至少1000(10052)條以上
做關(guān)聯(lián)規(guī)則分析 根據(jù)關(guān)聯(lián)前后項數(shù)量(每個前項或后項可包含多個要關(guān)聯(lián)的主體,例如品牌+商品+價格關(guān)聯(lián)),每個主體需要至少1000條數(shù)據(jù)。例如只做單品銷售關(guān)聯(lián),那么單品的銷售記錄需要在1000條以上;如果要同時做單品+品牌的關(guān)聯(lián),那么需要至少2000條數(shù)據(jù)。
異常檢測 無論是監(jiān)督室還是非監(jiān)督式建模,對于異常數(shù)據(jù)本來就是小概率分布的,因此異常數(shù)據(jù)記錄一般越多越好。
以上這篇python數(shù)據(jù)預(yù)處理 :數(shù)據(jù)抽樣解析就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實戰(zhàn)之生成有關(guān)聯(lián)單選問卷
這篇文章主要為大家分享了一個Python實戰(zhàn)小案例——生成有關(guān)聯(lián)單選問卷,并且能根據(jù)問卷總分?jǐn)?shù)生成對應(yīng)判斷文案結(jié)果,感興趣的可以了解一下2023-04-04
python 讀取dicom文件,生成info.txt和raw文件的方法
今天小編就為大家分享一篇python 讀取dicom文件,生成info.txt和raw文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01

