初入数据分析笔记

数据分析的三个依赖包:Numpy、Pandas、Scipy

#依赖包导入
from __future__ import division #结果尽量不是0
import pandas as pd
import numpy as np
from scipy import stats

#读取数据
df = pd.read_csv("./data/train.csv")
label = df['TARGET']#把label拿出来,这是目标。就是名字TARGET
df =df.drop(['ID','TARGET'],axis=1)#不需要的值删除掉,轴等于1,意思就是列操作。


统计指标:
计数类:统计数值出现多少
分位点:值的分布
值的频数:最经常出现的值是谁


#计数类——————————————————
#缺失值
missSet = [np.nan,999999999,-9999999]#np.nan是numpy定义的缺失,后面的9999999都是缺失

#记一下有多少个值
#单列操作
len(df.iloc[:,0].unique())#取第一列([:,1]取第二列,:是指所有的行)。unique()返回数组形式,返回不同的特征值。len()提取出不同的特征值的个数。
#多列操作
count_un = df.iloc[:,0:3].apply(lambda x:len(x.unique()))#[:,0:3]取前三列的所有行,apply()对每一个特征值进行()中的函数的遍历。

#找有多少个值
#找多少个0
np.sum(df.iloc[:,0]==0)#第一列特征值有多少个零,sum()默认把true个数加起来,把false去掉
#多列操作
count_zero = df.iloc[:,0:3].apply(lambda x:np.sum(x==0))#同上


#均值/中位数—————————————
#均值
np.mean(df.iloc[:,0])#求均值,但是没有去处缺失值之前均值很低

#去除缺失值
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]#isin(a,b)判断a是否满足b(满足为true,不满足为false),返回一个true\false数组。~是取反操作。最后用[]引用

#一列去除缺失值后的均值
np.mean(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)])
#三列去除缺失值后的均值
df_mean = df.iloc[:,0:3].apply(lambda x:np.mean(x[~np.isin(x,missSet)]))


#中位数(方法同上,只是mean()改为median())
np.median(df.iloc[:,0])#求均值,但是没有去处缺失值之前均值很低

#去除缺失值
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]#同上
#一列去除缺失值后的中位数
np.madian(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)])
#三列去除缺失值后的中位数
df_madian = df.iloc[:,0:3].apply(lambda x:np.madian(x[~np.isin(x,missSet)]))


#众数——————————————————————!
df_mode = df.iloc[:,0:3].apply(lambda x:stats.mode(x[~np.isin(x,missSet)])[0][0])#mode()返回两个值,第一个值是众数,第二个值是众数出现个数。在后的的两个[0]:第一个[0]是这众数的名字,第二个[0]是把众数值取出来。

#众数出现个数
df_mode_count = df.iloc[:,0:3].apply(lambda x:stats.mode(x[~np.isin(x,missSet)])[1][0])#众数数量值是第二个值所以用[1]获取。
#样本出现比例
df_mode_perct = df_mode_count/df.shape[0]#df.shape[0]整个样本的数量


#最大值/最小值——————————————
#最小值
np.min(df.iloc[:,0])#求最小值,但是没有去处缺失值之前均值很低

#去除缺失值
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]#同上

#一列去除缺失值后的最小值
np.min(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)])
#三列去除缺失值后的最小值
df_mean = df.iloc[:,0:3].apply(lambda x:np.min(x[~np.isin(x,missSet)]))

#最大值
np.max(df.iloc[:,0])#求最大值,但是没有去处缺失值之前均值很低

#去除缺失值
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]#同上

#一列去除缺失值后的最大值
np.max(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)])
#三列去除缺失值后的最大值
df_mean = df.iloc[:,0:3].apply(lambda x:np.max(x[~np.isin(x,missSet)]))


#分位点——————————————————————
np.percentile(df.iloc[:,0],(1,5,25,50,75,95,99))#percentile()第一个参数是传入的值,第二个参数是想要显示第一个参数的分位点

#去除缺失值
df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)]#同上
#一列去除缺失值后的分位点
np.percentile(df.iloc[:,0][~np.isin(df.iloc[:,0],missSet)],(1,5,25,50,75,95,99))

#因为percentile()返回的的是一个数组,所以不能直接进行多列操作
#进行多列操作可以用字典+for的方法
json_quantile={}
for i,name in enumerate(df.iloc[:, 0:3].columns):#.columns输出全部的列名,enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
print('the {} columns: {}').format(i,name)
json_quantile[name] = np.percentile(df[name][~np.isin(df.iloc[:,0],missSet)],(1,5,25,50,75,95,99))
df_quantile = pd.DataFrame(json_quantile)[df.iloc[:,0:3].columns].T #.T转置,DataFrame是Pandas中的一个表结构的数据结构,包括三部分信息,表头(列的名称),表的内容(二维矩阵),索引(每行一个唯一的标记)。


#频数—————————————————————————
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]

#因为频数value_counts()不是一个一个的返回所以也不能用apply()
#多行操作
json_fre_name={}
json_fre_count={}

def fill_fre_top_5(x):
if(len(x))<=5:
new_array = np.full(5,np.nan)#生成一个5个值的数组,里面全是nan
new_array[0:len(x)] = x
return new_array

#两个例子
df['ind_varl_0'].value_counts()
df['imp_sal_varl6_ult1'].value_counts()

for i,name in enumerate(df[['ind_varl_0','imp_sal_varl6_ult1']].columns):
index_name = df[name][~np.isin(df[name],missSet)].value_counts()[0:5,].index.values#取频数名字
index_name = fill_fre_top_5(index_name)

json_fre_name[name] = index_name

index_count = df[name][~np.isin(df[name],missSet)].value_counts()[0:5,].values#取频数的值
index_count = fill_fre_top_5(index_count)

json_fre_count[name] = index_count

df_fre_name = pd.DataFrame(json__fre_name)[df[['ind_varl_0','imp_sal_varl6_ult1']].columns.T
df_fre_count = pd.DataFrame(json_fre_count)[df[['ind_varl_0','imp_sal_varl6_ult1']].columns].T

df_fre = pd.concat([df_fre_name,df_fre_count],axis=1)#对两个表进行列的合并


#缺失值——————————————————————
np.sum(np.isin(df.iloc[:0],missSet))#统计缺失值
df_miss = df.iloc[:,0:3].apply(lambda x:np.sum(np.isin(x,missSet)))#遍历前三列缺失值总数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值