-
1.統計指標示例-缺失值
# (12)Miss Value
np.sum(np.in1d(df.iloc[:, 0], missSet)) ????# 統計缺失值
df_miss = df.iloc[:, 0:3].apply(lambda x: np.sum(np.in1d(x, missSet))) ?# 遍歷每一個遍歷的缺失值情況,因為返回的是一個值,所以直接用apply遍歷
查看全部 -
1.統計指標示例-頻數
# (11)Frequent Value
df.iloc[:, 0].value_counts().iloc[0:5, ] ?????# value_counts是pandas中dataframe的方法,顯示指定特征按照頻數由大到小排序,我們一般取前五位頻繁出現的值以及它的頻數
# 至于選擇0:5還是0:10,根據業務定義,一般選取前五位就已經看出一些問題了
?
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)] ????# 去除缺失值
df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)].value_counts()[0:5] ????# 去除缺失值后進行頻數的統計
?
# 和分位點的處理方法類似,不能直接用apply
json_fre_name = {} ?# 名字
json_fre_count = {} ????# 計數
?
?
# 如果特征不夠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.統計指標示例-分位點
# (10)quantile value
np.percentile(df.iloc[:, 0], (1, 5, 25, 50, 75, 95, 99)) ???# 第二個參數是分位點,這個設置和用戶定義有關
?
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返回的是一個數組,那么如何做呢?
json_quantile = {}
?
# 不用擔心循環的效率,因為我們的列不會有很多,雖然樣本(行)數會很大,所以一般情況足夠用于我們進行數據分析了
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 ???# 為了和之前的統計描述拼接起來,所以需要和之前的結果保持一致,需要做一下轉置,但是列名不一致,需要先調用columns把所有的列按順序發過去之后再轉置
查看全部 -
1.統計指標示例-最小值/最大值
# (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.統計指標實例-眾數
# (6)Mode Value
df_mode = df.iloc[:, 0:3].apply(lambda x: stats.mode(x[~np.in1d(x, missSet)])[0][0]) ???# mode這個函數返回的是一個數組,對應每一列出現頻率最高的數以及它出現的頻數,[0][0]表示取的是這個數字
?
# (7)Mode Percetage
df_mode_count = df.iloc[:, 0:3].apply(lambda x: stats.mode(x[~np.in1d(x, missSet)])[1][0]) ??# [1][0]表示取的這個眾數出現的頻數
?
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,但我們要找的是去除缺失值之后的數據
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.統計指標示例-計數類
##1.Basic Analysis##
# (1)Missing Value
missSet = [np.nan, 9999999999, -999999] ????# np.nan是numpy中缺失值的表示,后面兩個數是分析得到的缺失值
?
# (2)Count distinct
len(df.iloc[:, 0].unique()) ????# df.iloc[:, 0]取第一列,unique()看這一列哪些不同的值,返回一個類似數組,然后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.統計指標介紹:
均值/中位數/最大值/最小值等
計數類
缺失值/方差等
分位點(值的分布)/值的頻數等
查看全部 -
1.數據獲?。篕aggle
Santander銀行希望對滿意和不滿意的用戶進行分類。背景是它存在一些潛在的不滿意的用戶,但無法提前知道。假如我們能提前知道的話,就可以提前為他們做好服務。我們需要通過它提供的用戶的行為特征和問卷調查得出的因變量來構建一個模型,使用這個模型來盡早找到不滿意的用戶。這就是Kaggle比賽的背景。
1.?數據讀?。?/p>
##0.Read Data##
df = pd.read_csv("./data/train.csv")?????????# 將數據文件讀到內存中
label = df['TARGET']????????# 將數據集中TARGET列賦值給label
df = df.drop(['ID','TARGET'],axis=1)???????# 刪除數據集中ID、TARGET兩列
查看全部 -
1.依賴包包括:
Numpy:存儲和處理大型矩陣,對數組向量化
Pandas:把數據讀成dataframe形式,讀寫
Scipy:計算函數、眾數等
2.依賴包的導入:
# coding:utf-8
from __future__ import division ???????????# 確保一個數除以另外一個數不等于0,會返回一個浮點型的數,另外一種方法是使分母和分子做類型轉換
import numpy as np
import pandas as pd
from scipy import stats
查看全部 -
1.?數據診斷的目的:
1)?了解特征的分布,缺失和異常等情況。(了解了這些情況我們才能更好地做特征工程和數據預處理)
2)統計指標可直接用于數據預處理
數據預處理就是指比如說特征缺失值的填充,缺失值的填充是建模常用的手段。填充的目的有很多。在填充的時候大家一般會采用很多種辦法。比如填一個0,-1,1這種常值進去,但是更多的人可能會填一些統計值,比如說中位數、眾數這樣的值進去。如果要用這種方法填數的話,一般需要對特征值重新計算一遍,如果每次都計算的話,這樣會影響整個模型的效率。更好的辦法:就是可以從前面預處理的過程和結果中把中位數和眾數取到,直接填到缺失里面去,這樣可以減少運行計算時間,因為我們只需要提取,不需要計算,這樣的話會減少耗時。除了這個以外,我們也有很多的判斷,比如數缺失值的比例,眾數的比例,也是形容特征工程的一個環節。當我們整個建模的流程形成之后,這些數據診斷的結果也可以起到判斷的作用。
查看全部 -
目標:
? 1.掌握數據的統計指標
? 2.利用Python制作數據診斷工具
? 3.數據診斷工具的應用與測試
大綱:
? 1.依賴包介紹
? 2.基本描述統計值
? 3.特殊值描述值
? 4.缺失值
? 5.功能整合
查看全部 -
##0.Read Data##
df = pd.read_csv("./data/train.csv")
label = df['TARGET']
df = df.drop(['ID','TARGET'],axis=1)
查看全部 -
數據獲取與讀取
? 1.數據獲?。簁aggle
? 2.數據讀取
? 數據鏈接:http://www.kaggle.com/c/santander-customer-satisfaction
查看全部 -
目標:
? 1.掌握數據的統計指標
? 2.利用Python制作數據診斷工具
? 3.數據診斷工具的應用與測試
大綱:
? 1.依賴包介紹
? 2.基本描述統計值
? 3.特殊值描述值
? 4.缺失值
? 5.功能整合
查看全部 -
依賴包:
? 1.Numpy
? 2.Pandas
? 3.Scipy
依賴包的導入
例:
? #-*-coding:utf-8-*-
? from __future__ import division? #為了避免一個數除以另一個數不為0
? import pandas as pd
? import numpy as np
? from scipy import stats
查看全部
舉報