-
1、掌握數據的統計指標
2、利用Python制作數據診斷工具
3、數據診斷工具的應用
數據大綱
1、依賴包介紹
2、基本描述統計值
3、特殊值描述值
4、缺失值? 情況多,需要單端處理
5、功能整合
查看全部 -
數據診斷
查看全部 -
定義缺失值。np.nan是Numpy缺失的一個表示?
計數值,
len來計數
apply函數遍歷每一列
df.iloc[指定的行數開頭:指定的行數結尾,指定的列數] unique函數看這一個特征有多少個不同的值
找0值
df.iloc[:,0:3]?==0?會返回每一個值是否是0的一個數組True或者False np.sum對數組取和(True當作1,False當作0)算出有多少個True
查看全部 -
統計指標可以自己去構建,以上是常規指標
查看全部 -
讀取下載的數據。把數據集都進來命名df
lable屬于預測目標,‘TARGET’就是特征的名字。在df中把因變量TARGET取出來命名為lable
刪除掉一些不需要的值。把ID,TARGET這兩列去掉重新賦值為df
查看全部 -
依賴包:Numpy
???????????? Pandas
???????????? Scipy
查看全部 -
依賴包:1、numpy 2、pandas 3、scipy
查看全部 -
數據診斷的目的:1、了解特征的分布,缺失和異常等情況? 2、統計指標可直接用于數據預處理
查看全部 -
測試
查看全部 -
統計指標介紹
查看全部 -
數據獲取與讀取1
查看全部 -
數據診斷目的
查看全部 -
數據診斷的目的
查看全部 -
python 制作數據分析工具查看全部
-
課程目標,掌握數據的統計指標
查看全部 -
1.# 2.Calculating Running time
import timeit
?
start = timeit.default_timer()
df_eda_summary = eda_analysis(missSet=[np.nan, 9999999999, -999999], df=df.iloc[:, 0:3])
print('EDA Running Time: {0:.2f} seconds'.format(timeit.default_timer() - start))
上面是時間的測試示例,我們去測試每一塊所用時間,由此可以判斷我們的優化重點,經過測試可知,眾數部分的時間較長,所以我們后期可對這一部分進行優化,優化的方法有:1)注釋掉沒用的代碼 2)使用更好的方法去替代原有方法。
查看全部 -
#?數據分析工具 from?__future__?import?division??#?除的結果是小數 import?pandas?as?pd import?numpy?as?np from?scipy?import?stats def?fill_fre_top_5(x):??#?頻數前五位的函數:若不足5,則nan補齊 ????if?(len(x))?<=?5: ????????new_array?=?np.full(5,?np.nan) ????????new_array[0:len(x)]?=?x ????????return?new_array def?eda_analysis(missSet=[np.nan,?9999999999,?-999999],?df=None): ????#?種類計數 ????count_un?=?df.apply(lambda?x:?len(x.unique())) ????count_un?=?count_un.to_frame('count')??#?轉成dataframe ????#?零的計數 ????count_zero?=?df.apply(lambda?x:?np.sum(x?==?0)) ????count_zero?=?count_zero.to_frame('count_zero') ????#?均值 ????df_mean?=?df.apply(lambda?x:?np.mean(x[~np.isin(x,?missSet)])) ????df_mean?=?df_mean.to_frame('mean') ????#?中位數 ????df_median?=?df.apply(lambda?x:?np.median(x[~np.isin(x,?missSet)])) ????df_median?=?df_median.to_frame('median') ????#?眾數 ????df_mode?=?df.apply(lambda?x:?stats.mode(x[~np.isin(x,?missSet)])[0][0]) ????df_mode?=?df_mode.to_frame('mode') ????#?眾數的頻數和比例 ????df_mode_count?=?df.apply(lambda?x:?stats.mode(x[~np.isin(x,?missSet)])[1][0]) ????df_mode_count?=?df_mode_count.to_frame('mode_count') ????df_mode_perct?=?df_mode_count?/?df.shape[0] ????df_mode_perct.columns?=?['mode_perct'] ????#?最小值 ????df_min?=?df.apply(lambda?x:?np.min(x[~np.isin(x,?missSet)])) ????df_min?=?df_min.to_frame('min') ????#?最大值 ????df_max?=?df.apply(lambda?x:?np.min(x[~np.isin(x,?missSet)])) ????df_max?=?df_max.to_frame('max') ????#?分位數 ????json_quantile?=?{} ????for?i,?name?in?enumerate(df.columns): ????????json_quantile[name]?=?np.percentile(df[name][~np.isin(df[name],?missSet)],?(1,?5,?25,?50,?75,?95,?99)) ????df_quantile?=?pd.DataFrame(json_quantile)[df.columns].T ????df_quantile.columns?=?['quan01',?'quan05',?'quan25',?'quan50',?'quan75',?'quan95',?'quan99'] ????#?頻數(產出為數組,不能使用apply) ????json_fre_name?=?{} ????json_fre_count?=?{} ????for?i,?name?in?enumerate(df.columns): ????????#?頻數前五的數 ????????index_name?=?df[name][~np.isin(df[name],?missSet)].value_counts().iloc[0:5,?].index.values ????????index_name?=?fill_fre_top_5(index_name) ????????json_fre_name[name]?=?index_name ????????#?頻數前五的數的頻數 ????????value_count?=?df[name][~np.isin(df[name],?missSet)].value_counts().iloc[0:5,?].values ????????value_count?=?fill_fre_top_5(value_count) ????????json_fre_count[name]?=?value_count ????df_fre_name?=?pd.DataFrame(json_fre_name)[df.columns].T ????df_fre_count?=?pd.DataFrame(json_fre_count)[df.columns].T ????df_fre?=?pd.concat([df_fre_name,?df_fre_count],?axis=1)??#?合并 ????df_fre.columns?=?['Value1',?'Value2',?'Value3',?'Value4',?'Value5',?'freq1',?'freq2',?'freq3',?'freq4',?'freq5'] ????#?缺失值 ????df_miss?=?df.apply(lambda?x:?np.sum(np.isin(x,?missSet))) ????df_miss?=?df_miss.to_frame('freq_miss') ????#?合并所有統計指標 ????df_eda_summary?=?pd.concat( ????????[count_un,?count_zero,?df_mean,?df_median,?df_mode,?df_mode_count,?df_mode_perct,?df_min,?df.max,?df_fre, ?????????df_miss],?axis=1) ????return?df_eda_summary
查看全部 -
工具 整合
查看全部 -
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遍歷
查看全部 -
#(11)Frequent Values
df.iloc[:,0].value_counts().iloc[0:5,]
df.iloc[:,0][~np.isin(df.iloc[:,0], missSet)]
df.iloc[:,0][~np.isin(df.iloc[:,0], missSet)].value_counts()[0:5,]
json_fre_name = {}
json_fre_count = {}
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()
len(df['imp_sal_var16_ult1'].value_counts())
for i,name in enumerate(df[['ind_var1_0','imp_sal_var16_ult1']].columns):
? ? index_name = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5,].index.values
? ? index_name = fill_fre_top_5(index_name)
? ??
? ? json_fre_name[name] = index_name
? ??
? ? values_count = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5,].values
? ? 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
查看全部 -
特殊描述值
查看全部 -
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)]))
查看全部 -
統計指標實例-眾數
# (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)? ?# 第一列==0,返回True或False的數組
?
count_zero = df.iloc[:, 0:3].apply(lambda x: np.sum(x == 0))
查看全部
舉報