-
1、掌握數(shù)據(jù)的統(tǒng)計(jì)指標(biāo)
2、利用Python制作數(shù)據(jù)診斷工具
3、數(shù)據(jù)診斷工具的應(yīng)用
數(shù)據(jù)大綱
1、依賴包介紹
2、基本描述統(tǒng)計(jì)值
3、特殊值描述值
4、缺失值? 情況多,需要單端處理
5、功能整合
查看全部 -
數(shù)據(jù)診斷
查看全部 -
定義缺失值。np.nan是Numpy缺失的一個(gè)表示?
計(jì)數(shù)值,
len來計(jì)數(shù)
apply函數(shù)遍歷每一列
df.iloc[指定的行數(shù)開頭:指定的行數(shù)結(jié)尾,指定的列數(shù)] unique函數(shù)看這一個(gè)特征有多少個(gè)不同的值
找0值
df.iloc[:,0:3]?==0?會(huì)返回每一個(gè)值是否是0的一個(gè)數(shù)組True或者False np.sum對(duì)數(shù)組取和(True當(dāng)作1,F(xiàn)alse當(dāng)作0)算出有多少個(gè)True
查看全部 -
統(tǒng)計(jì)指標(biāo)可以自己去構(gòu)建,以上是常規(guī)指標(biāo)
查看全部 -
讀取下載的數(shù)據(jù)。把數(shù)據(jù)集都進(jìn)來命名df
lable屬于預(yù)測(cè)目標(biāo),‘TARGET’就是特征的名字。在df中把因變量TARGET取出來命名為lable
刪除掉一些不需要的值。把ID,TARGET這兩列去掉重新賦值為df
查看全部 -
依賴包:Numpy
???????????? Pandas
???????????? Scipy
查看全部 -
依賴包:1、numpy 2、pandas 3、scipy
查看全部 -
數(shù)據(jù)診斷的目的:1、了解特征的分布,缺失和異常等情況? 2、統(tǒng)計(jì)指標(biāo)可直接用于數(shù)據(jù)預(yù)處理
查看全部 -
測(cè)試
查看全部 -
統(tǒng)計(jì)指標(biāo)介紹
查看全部 -
數(shù)據(jù)獲取與讀取1
查看全部 -
數(shù)據(jù)診斷目的
查看全部 -
數(shù)據(jù)診斷的目的
查看全部 -
python 制作數(shù)據(jù)分析工具查看全部
-
課程目標(biāo),掌握數(shù)據(jù)的統(tǒng)計(jì)指標(biāo)
查看全部 -
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))
上面是時(shí)間的測(cè)試示例,我們?nèi)y(cè)試每一塊所用時(shí)間,由此可以判斷我們的優(yōu)化重點(diǎn),經(jīng)過測(cè)試可知,眾數(shù)部分的時(shí)間較長(zhǎng),所以我們后期可對(duì)這一部分進(jìn)行優(yōu)化,優(yōu)化的方法有:1)注釋掉沒用的代碼 2)使用更好的方法去替代原有方法。
查看全部 -
#?數(shù)據(jù)分析工具 from?__future__?import?division??#?除的結(jié)果是小數(shù) import?pandas?as?pd import?numpy?as?np from?scipy?import?stats def?fill_fre_top_5(x):??#?頻數(shù)前五位的函數(shù):若不足5,則nan補(bǔ)齊 ????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): ????#?種類計(jì)數(shù) ????count_un?=?df.apply(lambda?x:?len(x.unique())) ????count_un?=?count_un.to_frame('count')??#?轉(zhuǎn)成dataframe ????#?零的計(jì)數(shù) ????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') ????#?中位數(shù) ????df_median?=?df.apply(lambda?x:?np.median(x[~np.isin(x,?missSet)])) ????df_median?=?df_median.to_frame('median') ????#?眾數(shù) ????df_mode?=?df.apply(lambda?x:?stats.mode(x[~np.isin(x,?missSet)])[0][0]) ????df_mode?=?df_mode.to_frame('mode') ????#?眾數(shù)的頻數(shù)和比例 ????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') ????#?分位數(shù) ????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'] ????#?頻數(shù)(產(chǎn)出為數(shù)組,不能使用apply) ????json_fre_name?=?{} ????json_fre_count?=?{} ????for?i,?name?in?enumerate(df.columns): ????????#?頻數(shù)前五的數(shù) ????????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 ????????#?頻數(shù)前五的數(shù)的頻數(shù) ????????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') ????#?合并所有統(tǒng)計(jì)指標(biāo) ????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.統(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遍歷
查看全部 -
#(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.統(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)]))
查看全部 -
統(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]) ??# 沒有去除缺失值之前的均值很低
?
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? 中位數(shù)
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)]) ?????# 去除缺失值后進(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? 統(tǒng)計(jì)值出現(xiàn)多少
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)? ?# 第一列==0,返回True或False的數(shù)組
?
count_zero = df.iloc[:, 0:3].apply(lambda x: np.sum(x == 0))
查看全部
舉報(bào)