-
1.統(tǒng)計(jì)指標(biāo)示例-缺失值
# (12)Miss Value
np.sum(np.in1d(df.iloc[:, 0], missSet)) ????# 統(tǒng)計(jì)缺失值
df_miss = df.iloc[:, 0:3].apply(lambda x: np.sum(np.in1d(x, missSet))) ?# 遍歷每一個(gè)遍歷的缺失值情況,因?yàn)榉祷氐氖且粋€(gè)值,所以直接用apply遍歷
查看全部 -
1.統(tǒng)計(jì)指標(biāo)示例-頻數(shù)
# (11)Frequent Value
df.iloc[:, 0].value_counts().iloc[0:5, ] ?????# value_counts是pandas中dataframe的方法,顯示指定特征按照頻數(shù)由大到小排序,我們一般取前五位頻繁出現(xiàn)的值以及它的頻數(shù)
# 至于選擇0:5還是0:10,根據(jù)業(yè)務(wù)定義,一般選取前五位就已經(jīng)看出一些問(wèn)題了
?
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] ????# 去除缺失值
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)].value_counts()[0:5] ????# 去除缺失值后進(jìn)行頻數(shù)的統(tǒng)計(jì)
?
# 和分位點(diǎn)的處理方法類似,不能直接用apply
json_fre_name = {} ?# 名字
json_fre_count = {} ????# 計(jì)數(shù)
?
?
# 如果特征不夠5怎么辦?剩下的置空。有兩個(gè)目的:第一,定長(zhǎng),為了和前面的值一致;第二,留一些位置以便更好地拓展
def fill_fre_top_5(x):
????if(len(x)) <= 5:
????????new_array = np.full(5, np.nan)
????????new_array[0:len(x)] = x
????????return new_array
?
?
df['ind_var1_0'].value_counts() ??# 小于5
df['imp_sal_var16_ult1'].value_counts() ???# 大于5
?
for i, name in enumerate(df[['ind_var1_0', 'imp_sal_var16_ult1']].columns): ??# columns取其列名
????# 1.Index Name
????index_name = df[name][~np.in1d(df[name], missSet)].value_counts().iloc[0:5, ].index.values
????# 1.1 If the length of array is less than 5
????index_name = fill_fre_top_5(index_name)
?
????json_fre_name[name] = index_name
?
????# 2.Value Count
????values_count = df[name][~np.in1d(df[name], missSet)].value_counts().iloc[0:5, ].values
????# 2.1 If the length of array is less than 5
????values_count = fill_fre_top_5(values_count)
?
????json_fre_count[name] = values_count
?
df_fre_name = pd.DataFrame(json_fre_name)[df[['ind_var1_0', 'imp_sal_var16_ult1']].columns].T ??# 為了保證格式一致
df_fre_count = pd.DataFrame(json_fre_count)[df[['ind_var1_0', 'imp_sal_var16_ult1']].columns].T
?
df_fre = pd.concat([df_fre_name, df_fre_count], axis=1) ????# concat合并
查看全部 -
1.統(tǒng)計(jì)指標(biāo)示例-分位點(diǎn)
# (10)quantile value
np.percentile(df.iloc[:, 0], (1, 5, 25, 50, 75, 95, 99)) ???# 第二個(gè)參數(shù)是分位點(diǎn),這個(gè)設(shè)置和用戶定義有關(guān)
?
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] ????# 去除缺失值
np.percentile(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)], (1, 5, 25, 50, 75, 95, 99)) ?????# 去除缺失值后進(jìn)行分位點(diǎn)計(jì)算
?
# 它沒(méi)法像df那樣做一個(gè)apply操作,apply返回的是一個(gè)數(shù)組,那么如何做呢?
json_quantile = {}
?
# 不用擔(dān)心循環(huán)的效率,因?yàn)槲覀兊牧胁粫?huì)有很多,雖然樣本(行)數(shù)會(huì)很大,所以一般情況足夠用于我們進(jìn)行數(shù)據(jù)分析了
for i, name in enumerate(df.iloc[:, 0:3].columns):
????print('the {} columns: {}'.format(i, name))
????json_quantile[name] = np.percentile(df[name][~np.in1d(df[name], missSet)], (1, 5, 25, 50, 75, 95, 99))
?
df_quantile = pd.DataFrame(json_quantile)[df.iloc[:, 0:3].columns].T ???# 為了和之前的統(tǒng)計(jì)描述拼接起來(lái),所以需要和之前的結(jié)果保持一致,需要做一下轉(zhuǎn)置,但是列名不一致,需要先調(diào)用columns把所有的列按順序發(fā)過(guò)去之后再轉(zhuǎn)置
查看全部 -
1.統(tǒng)計(jì)指標(biāo)示例-最小值/最大值
# (8)Min Value
np.min(df.iloc[:, 0])
?
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] ????# 去除缺失值
np.min(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]) ??# 去除缺失值后進(jìn)行最小值計(jì)算
?
df_min = df.iloc[:, 0:3].apply(lambda x: np.min(x[~np.in1d(x, missSet)]))
?
# (9)Max Value
np.max(df.iloc[:, 0])
?
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] ????# 去除缺失值
np.max(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]) ??# 去除缺失值后進(jìn)行最大值計(jì)算
?
df_max = df.iloc[:, 0:3].apply(lambda x: np.max(x[~np.in1d(x, missSet)]))
查看全部 -
1.統(tǒng)計(jì)指標(biāo)實(shí)例-眾數(shù)
# (6)Mode Value
df_mode = df.iloc[:, 0:3].apply(lambda x: stats.mode(x[~np.in1d(x, missSet)])[0][0]) ???# mode這個(gè)函數(shù)返回的是一個(gè)數(shù)組,對(duì)應(yīng)每一列出現(xiàn)頻率最高的數(shù)以及它出現(xiàn)的頻數(shù),[0][0]表示取的是這個(gè)數(shù)字
?
# (7)Mode Percetage
df_mode_count = df.iloc[:, 0:3].apply(lambda x: stats.mode(x[~np.in1d(x, missSet)])[1][0]) ??# [1][0]表示取的這個(gè)眾數(shù)出現(xiàn)的頻數(shù)
?
df_mode_perct = df_mode_count/df.shape[0] ??????# df.shape[0]確定有多少個(gè)樣本
查看全部 -
1.# (4)Mean Value
np.mean(df.iloc[:, 0]) ??# 沒(méi)有去除缺失值之前的均值很低
?
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] ???# 去除缺失值,np.in1d(df.iloc[:, 0], missSet)找到缺失值的位置,是缺失值返回true,但我們要找的是去除缺失值之后的數(shù)據(jù)
np.mean(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]) ??# 去除缺失值后進(jìn)行均值計(jì)算
?
df_mean = df.iloc[:, 0:3].apply(lambda x: np.mean(x[~np.in1d(x, missSet)]))
?
# (5)Median Value
np.median(df.iloc[:, 0]) ???# 沒(méi)有去除缺失值之前
?
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] ????# 去除缺失值
np.median(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]) ?????# 去除缺失值后進(jìn)行計(jì)算
?
df_median = df.iloc[:, 0:3].apply(lambda x: np.median(x[~np.in1d(x, missSet)]))
??
重點(diǎn)是如何去除缺失值。
查看全部 -
1.統(tǒng)計(jì)指標(biāo)示例-計(jì)數(shù)類
##1.Basic Analysis##
# (1)Missing Value
missSet = [np.nan, 9999999999, -999999] ????# np.nan是numpy中缺失值的表示,后面兩個(gè)數(shù)是分析得到的缺失值
?
# (2)Count distinct
len(df.iloc[:, 0].unique()) ????# df.iloc[:, 0]取第一列,unique()看這一列哪些不同的值,返回一個(gè)類似數(shù)組,然后len看有多少個(gè)
?
count_un = df.iloc[:, 0:3].apply(lambda x: len(x.unique())) ?# df.iloc[:, 0:3]取前三列,apply用于遍歷,看看前三列每一列有多少個(gè)不同的值
?
# (3)Zero Value ?看看每一列有多少個(gè)值為0
np.sum(df.iloc[:, 0] == 0)
?
count_zero = df.iloc[:, 0:3].apply(lambda x: np.sum(x == 0))
查看全部 -
1.統(tǒng)計(jì)指標(biāo)介紹:
均值/中位數(shù)/最大值/最小值等
計(jì)數(shù)類
缺失值/方差等
分位點(diǎn)(值的分布)/值的頻數(shù)等
查看全部 -
1.數(shù)據(jù)獲取:Kaggle
Santander銀行希望對(duì)滿意和不滿意的用戶進(jìn)行分類。背景是它存在一些潛在的不滿意的用戶,但無(wú)法提前知道。假如我們能提前知道的話,就可以提前為他們做好服務(wù)。我們需要通過(guò)它提供的用戶的行為特征和問(wèn)卷調(diào)查得出的因變量來(lái)構(gòu)建一個(gè)模型,使用這個(gè)模型來(lái)盡早找到不滿意的用戶。這就是Kaggle比賽的背景。
1.?數(shù)據(jù)讀取:
##0.Read Data##
df = pd.read_csv("./data/train.csv")?????????# 將數(shù)據(jù)文件讀到內(nèi)存中
label = df['TARGET']????????# 將數(shù)據(jù)集中TARGET列賦值給label
df = df.drop(['ID','TARGET'],axis=1)???????# 刪除數(shù)據(jù)集中ID、TARGET兩列
查看全部 -
1.依賴包包括:
Numpy:存儲(chǔ)和處理大型矩陣,對(duì)數(shù)組向量化
Pandas:把數(shù)據(jù)讀成dataframe形式,讀寫
Scipy:計(jì)算函數(shù)、眾數(shù)等
2.依賴包的導(dǎo)入:
# coding:utf-8
from __future__ import division ???????????# 確保一個(gè)數(shù)除以另外一個(gè)數(shù)不等于0,會(huì)返回一個(gè)浮點(diǎn)型的數(shù),另外一種方法是使分母和分子做類型轉(zhuǎn)換
import numpy as np
import pandas as pd
from scipy import stats
查看全部 -
1.?數(shù)據(jù)診斷的目的:
1)?了解特征的分布,缺失和異常等情況。(了解了這些情況我們才能更好地做特征工程和數(shù)據(jù)預(yù)處理)
2)統(tǒng)計(jì)指標(biāo)可直接用于數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理就是指比如說(shuō)特征缺失值的填充,缺失值的填充是建模常用的手段。填充的目的有很多。在填充的時(shí)候大家一般會(huì)采用很多種辦法。比如填一個(gè)0,-1,1這種常值進(jìn)去,但是更多的人可能會(huì)填一些統(tǒng)計(jì)值,比如說(shuō)中位數(shù)、眾數(shù)這樣的值進(jìn)去。如果要用這種方法填數(shù)的話,一般需要對(duì)特征值重新計(jì)算一遍,如果每次都計(jì)算的話,這樣會(huì)影響整個(gè)模型的效率。更好的辦法:就是可以從前面預(yù)處理的過(guò)程和結(jié)果中把中位數(shù)和眾數(shù)取到,直接填到缺失里面去,這樣可以減少運(yùn)行計(jì)算時(shí)間,因?yàn)槲覀冎恍枰崛?,不需要?jì)算,這樣的話會(huì)減少耗時(shí)。除了這個(gè)以外,我們也有很多的判斷,比如數(shù)缺失值的比例,眾數(shù)的比例,也是形容特征工程的一個(gè)環(huán)節(jié)。當(dāng)我們整個(gè)建模的流程形成之后,這些數(shù)據(jù)診斷的結(jié)果也可以起到判斷的作用。
查看全部 -
目標(biāo):
? 1.掌握數(shù)據(jù)的統(tǒng)計(jì)指標(biāo)
? 2.利用Python制作數(shù)據(jù)診斷工具
? 3.數(shù)據(jù)診斷工具的應(yīng)用與測(cè)試
大綱:
? 1.依賴包介紹
? 2.基本描述統(tǒng)計(jì)值
? 3.特殊值描述值
? 4.缺失值
? 5.功能整合
查看全部 -
##0.Read Data##
df = pd.read_csv("./data/train.csv")
label = df['TARGET']
df = df.drop(['ID','TARGET'],axis=1)
查看全部 -
數(shù)據(jù)獲取與讀取
? 1.數(shù)據(jù)獲取:kaggle
? 2.數(shù)據(jù)讀取
? 數(shù)據(jù)鏈接:http://www.kaggle.com/c/santander-customer-satisfaction
查看全部 -
目標(biāo):
? 1.掌握數(shù)據(jù)的統(tǒng)計(jì)指標(biāo)
? 2.利用Python制作數(shù)據(jù)診斷工具
? 3.數(shù)據(jù)診斷工具的應(yīng)用與測(cè)試
大綱:
? 1.依賴包介紹
? 2.基本描述統(tǒng)計(jì)值
? 3.特殊值描述值
? 4.缺失值
? 5.功能整合
查看全部 -
依賴包:
? 1.Numpy
? 2.Pandas
? 3.Scipy
依賴包的導(dǎo)入
例:
? #-*-coding:utf-8-*-
? from __future__ import division? #為了避免一個(gè)數(shù)除以另一個(gè)數(shù)不為0
? import pandas as pd
? import numpy as np
? from scipy import stats
查看全部
舉報(bào)