参考资料:
EDA (Exploratory Data Analysis),也就是对数据进行探索性的分析,从而为之后的数据预处理和特征工程提供必要的结论。
主要的步骤是:
在分析数据的过程中,还必须要弄清楚的以下数据相关的问题:
核心方法是使用
pandas.read_csv
和pandas.read_table
等方法读取数据。
有多个文件组成数据则将他们连接,也经常把训练集和测试集合并起来处理,可用
pandas.concat
等方法,如df = pd.concat([train.assign(is_train=1), test.assign(is_train=0)])
。
read_csv
里的chunksize
参数读取部分数据用于train,如chunks = pd.read_csv('train.csv',iterator = True)
chunk = chunks.get_chunk(5)
也可以合并各个chunk,如
def get_df(file):
mylist=[]
for chunk in pd.read_csv(file,chunksize=1000000):
mylist.append(chunk)
temp_df=pd.concat(mylist,axis=0)
del mylist
return temp_df
注意下pandas读取数据时的编码方法要和原始数据对应。
def get_data(path, get_type=True):
features = []
for file in tqdm(os.listdir(path)):
file_path = os.path.join(path, file)
df = pd.read_csv(file_path)
if get_type:
features.append([df['x'].std(), df['x'].mean(),
df['y'].std(), df['y'].mean(),
df['速度'].mean(), df['速度'].std(),
df['方向'].mean(), df['方向'].std(),
file,
df['type'][0]])
else:
features.append([df['x'].std(), df['x'].mean(),
df['y'].std(), df['y'].mean(),
df['速度'].mean(), df['速度'].std(),
df['方向'].mean(), df['方向'].std(),
file])
df = pd.DataFrame(features)
if get_type:
df = df.rename(columns={len(features[0])-1:'label'})
df = df.rename(columns={len(features[0])-2:'filename'})
label_dict = {'拖网':0, '刺网':1, '围网':2}
df['label'] = df['label'].map(label_dict)
else:
df = df.rename(columns={len(features[0])-1:'filename'})
return df
df_train = get_data(trn_path)
df_test = get_data(test_path, False)
完成以下几点任务:
df.info()
df.columns
:显示所有的变量名
df.shape
:shape
df.head()
:给前几个样本
df.tail()
:给后几个样本
df.sample(10)
:随机给几个样本
df.describe()
:连续变量的一些描述信息,如基本统计量、分布等。
df.describe(include=['O'])
:分类变量的一些描述信息。
df.describe(include='all')
:全部变量的一些描述信息。
Y_train.value_counts()
:观察取值数量
# 列表汇总
train_df[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)
# 对比,直方图
g = sns.FacetGrid(train_df, col='Survived')
g.map(plt.hist, 'Age', bins=20)
# 散点图
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));
# 分类变量,箱图
var = 'OverallQual'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);
# 相关分析,热度图heatmaps1
corrmat = df_train.corr()
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True);
# 选出和目标变量最相关的k个变量
k = 10 #number of variables for heatmap
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df_train[cols].values.T)