-
1.統(tǒng)計指標示例-缺失值
# (12)Miss Value
np.sum(np.in1d(df.iloc[:, 0], missSet)) ????# 統(tǒng)計缺失值
df_miss = df.iloc[:, 0:3].apply(lambda x: np.sum(np.in1d(x, missSet))) ?# 遍歷每一個遍歷的缺失值情況,因為返回的是一個值,所以直接用apply遍歷
查看全部 -
1.統(tǒng)計指標示例-頻數(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)看出一些問題了
?
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] ????# 去除缺失值
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)].value_counts()[0:5] ????# 去除缺失值后進行頻數(shù)的統(tǒng)計
?
# 和分位點的處理方法類似,不能直接用apply
json_fre_name = {} ?# 名字
json_fre_count = {} ????# 計數(shù)
?
?
# 如果特征不夠5怎么辦?剩下的置空。有兩個目的:第一,定長,為了和前面的值一致;第二,留一些位置以便更好地拓展
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)計指標示例-分位點
# (10)quantile value
np.percentile(df.iloc[:, 0], (1, 5, 25, 50, 75, 95, 99)) ???# 第二個參數(shù)是分位點,這個設(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)) ?????# 去除缺失值后進行分位點計算
?
# 它沒法像df那樣做一個apply操作,apply返回的是一個數(shù)組,那么如何做呢?
json_quantile = {}
?
# 不用擔(dān)心循環(huán)的效率,因為我們的列不會有很多,雖然樣本(行)數(shù)會很大,所以一般情況足夠用于我們進行數(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)計描述拼接起來,所以需要和之前的結(jié)果保持一致,需要做一下轉(zhuǎn)置,但是列名不一致,需要先調(diào)用columns把所有的列按順序發(fā)過去之后再轉(zhuǎn)置
查看全部 -
1.統(tǒng)計指標示例-最小值/最大值
# (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)]) ??# 去除缺失值后進行最小值計算
?
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)]) ??# 去除缺失值后進行最大值計算
?
df_max = df.iloc[:, 0:3].apply(lambda x: np.max(x[~np.in1d(x, missSet)]))
查看全部 -
1.統(tǒng)計指標實例-眾數(shù)
# (6)Mode Value
df_mode = df.iloc[:, 0:3].apply(lambda x: stats.mode(x[~np.in1d(x, missSet)])[0][0]) ???# mode這個函數(shù)返回的是一個數(shù)組,對應(yīng)每一列出現(xiàn)頻率最高的數(shù)以及它出現(xiàn)的頻數(shù),[0][0]表示取的是這個數(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]表示取的這個眾數(shù)出現(xiàn)的頻數(shù)
?
df_mode_perct = df_mode_count/df.shape[0] ??????# df.shape[0]確定有多少個樣本
查看全部 -
1.# (4)Mean Value
np.mean(df.iloc[:, 0]) ??# 沒有去除缺失值之前的均值很低
?
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)]) ??# 去除缺失值后進行均值計算
?
df_mean = df.iloc[:, 0:3].apply(lambda x: np.mean(x[~np.in1d(x, missSet)]))
?
# (5)Median Value
np.median(df.iloc[:, 0]) ???# 沒有去除缺失值之前
?
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] ????# 去除缺失值
np.median(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]) ?????# 去除缺失值后進行計算
?
df_median = df.iloc[:, 0:3].apply(lambda x: np.median(x[~np.in1d(x, missSet)]))
??
重點是如何去除缺失值。
查看全部 -
1.統(tǒng)計指標示例-計數(shù)類
##1.Basic Analysis##
# (1)Missing Value
missSet = [np.nan, 9999999999, -999999] ????# np.nan是numpy中缺失值的表示,后面兩個數(shù)是分析得到的缺失值
?
# (2)Count distinct
len(df.iloc[:, 0].unique()) ????# df.iloc[:, 0]取第一列,unique()看這一列哪些不同的值,返回一個類似數(shù)組,然后len看有多少個
?
count_un = df.iloc[:, 0:3].apply(lambda x: len(x.unique())) ?# df.iloc[:, 0:3]取前三列,apply用于遍歷,看看前三列每一列有多少個不同的值
?
# (3)Zero Value ?看看每一列有多少個值為0
np.sum(df.iloc[:, 0] == 0)
?
count_zero = df.iloc[:, 0:3].apply(lambda x: np.sum(x == 0))
查看全部 -
1.統(tǒng)計指標介紹:
均值/中位數(shù)/最大值/最小值等
計數(shù)類
缺失值/方差等
分位點(值的分布)/值的頻數(shù)等
查看全部 -
1.數(shù)據(jù)獲?。篕aggle
Santander銀行希望對滿意和不滿意的用戶進行分類。背景是它存在一些潛在的不滿意的用戶,但無法提前知道。假如我們能提前知道的話,就可以提前為他們做好服務(wù)。我們需要通過它提供的用戶的行為特征和問卷調(diào)查得出的因變量來構(gòu)建一個模型,使用這個模型來盡早找到不滿意的用戶。這就是Kaggle比賽的背景。
1.?數(shù)據(jù)讀?。?/p>
##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:存儲和處理大型矩陣,對數(shù)組向量化
Pandas:把數(shù)據(jù)讀成dataframe形式,讀寫
Scipy:計算函數(shù)、眾數(shù)等
2.依賴包的導(dǎo)入:
# coding:utf-8
from __future__ import division ???????????# 確保一個數(shù)除以另外一個數(shù)不等于0,會返回一個浮點型的數(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)計指標可直接用于數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理就是指比如說特征缺失值的填充,缺失值的填充是建模常用的手段。填充的目的有很多。在填充的時候大家一般會采用很多種辦法。比如填一個0,-1,1這種常值進去,但是更多的人可能會填一些統(tǒng)計值,比如說中位數(shù)、眾數(shù)這樣的值進去。如果要用這種方法填數(shù)的話,一般需要對特征值重新計算一遍,如果每次都計算的話,這樣會影響整個模型的效率。更好的辦法:就是可以從前面預(yù)處理的過程和結(jié)果中把中位數(shù)和眾數(shù)取到,直接填到缺失里面去,這樣可以減少運行計算時間,因為我們只需要提取,不需要計算,這樣的話會減少耗時。除了這個以外,我們也有很多的判斷,比如數(shù)缺失值的比例,眾數(shù)的比例,也是形容特征工程的一個環(huán)節(jié)。當我們整個建模的流程形成之后,這些數(shù)據(jù)診斷的結(jié)果也可以起到判斷的作用。
查看全部 -
目標:
? 1.掌握數(shù)據(jù)的統(tǒng)計指標
? 2.利用Python制作數(shù)據(jù)診斷工具
? 3.數(shù)據(jù)診斷工具的應(yīng)用與測試
大綱:
? 1.依賴包介紹
? 2.基本描述統(tǒng)計值
? 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ù)獲?。簁aggle
? 2.數(shù)據(jù)讀取
? 數(shù)據(jù)鏈接:http://www.kaggle.com/c/santander-customer-satisfaction
查看全部 -
目標:
? 1.掌握數(shù)據(jù)的統(tǒng)計指標
? 2.利用Python制作數(shù)據(jù)診斷工具
? 3.數(shù)據(jù)診斷工具的應(yīng)用與測試
大綱:
? 1.依賴包介紹
? 2.基本描述統(tǒng)計值
? 3.特殊值描述值
? 4.缺失值
? 5.功能整合
查看全部 -
依賴包:
? 1.Numpy
? 2.Pandas
? 3.Scipy
依賴包的導(dǎo)入
例:
? #-*-coding:utf-8-*-
? from __future__ import division? #為了避免一個數(shù)除以另一個數(shù)不為0
? import pandas as pd
? import numpy as np
? from scipy import stats
查看全部
舉報