数据挖掘学习总结

(第一次写,可能很多错误)
自己总结的,可能会有很多错误,先更新一部分,主要学习(python

其中主要包括5个种类:数据、分类、回归、关联分析、异常检测数据

0.数据包的导入
数据挖掘的第一步就是各种数据包的导入,主要包括:

%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

导入warnings库主要是避免烦人的版本更新等消息,最好加上,上面是主要的数据处理库。
其中主要的数据处理过程包括这一次先更新一部分(图来自Kaggle上面):在这里插热过分入图片描述人人
1.处理数据
对于数据包括类别类别属性和连续属性。
一般使用pandas比较方便,即用DataFramege格式进行操作,为了对数据有一个全面的认识,可以使用:

df.describe();
df.shpe()
df.info()

其中df.info()能知道数据的分布情况,是什么类型的数据;一共有多少个;这对于下面处理缺失值数据也能做到大致了解。

df.head(n)#n表示前几行
df.tail(n)

为了统计数据的缺失情况,需要使用到如下,代表了统计一个维度中缺失值的情况,第二个表示缺失在这一列中的缺失比例:

df_train['参数名‘].isnull().sum()
df_train['参数名‘].isnull().sum()/len(df_train['参数名'])

想要显示数据中缺失的值具体在哪里,可以使用如下代码:

test[test.Open.isnull()]

对于数据填充,最简单粗暴是:

# 1.先查找数据列中的众数:使用df.mode()方法
#  解释:df.mode(0或1,0表示对列查找,1表示对行查找)[需要查找众数的df列的index(就是df中的第几列)],将返回数据列中的众数
# 2.使用.fillna()方法进行填充
也
all_data["参数1"] = all_data["参数"].fillna("None")#用None来填充缺失值
all_data['参数2'] = all_data['参数2].fillna(all_data['参数2'].mode()[0])#用众数排第一个的来填充

有使用RandomFroest来填充数据的,效果貌似更好,代码如下:

from sklearn.ensemble import RandomForestRegressor

dataWind0 = data[data["windspeed"]==0]
dataWindNot0 = data[data["windspeed"]!=0]
rfModel_wind = RandomForestRegressor()
windColumns = ["season","weather","humidity","month","temp","year","atemp"]
rfModel_wind.fit(dataWindNot0[windColumns], dataWindNot0["windspeed"])

wind0Values = rfModel_wind.predict(X= dataWind0[windColumns])
dataWind0["windspeed"] = wind0Values
data = dataWindNot0.append(dataWind0)
data.reset_index(inplace=True)
data.drop('index',inplace=True,axis=1)

有时候给的数据集中将NAN自动用0来补全了,这是需要我们自己来发现的,为此我么需要统计每一列中各个数字出现的数目,除了value_counts()能统计数目之外,还可以指定一列中等于某数值的数目统计:

(df_train['参数名'] == 0).astype(int).sum()

上述分别表示查看数据的前几行,数据的末尾几行,n表示查看的数据行数。这一步是很重要的!train['Survived'].value_counts()统计数据中Survived这个维度的分布情况,这对于后续采样很重要,假如是二分类问题,对于预测结果的统计是必不可少的。

删除数据
对于一些用不到的参数特征,可以选择删除,如数据中的index和Id等特征,见下:

train.drop(['Id'], axis=1, inplace=True)
test.drop(['Id'], axis=1, inplace=True)

删除行之后,数据的index不一致了,需要重新进行编号,因此需要用到如下的:

#由于删去了部分行,故此时train矩阵中的index列并不连续。使用reset_index命令,在固定非index数据的顺序的前提下(inplace=True),重新对index编号(drop=True)。
train.reset_index(drop=True, inplace=True)

对于一些特征较多的数据集,分类出数字型和类别型的特征至关重要,为此有一下代码:

quantitative = [f for f in train.columns if train.dtypes[f] != 'object']
quantitative.remove('SalePrice')
quantitative.remove('Id')
qualitative = [f for f in train.columns if train.dtypes[f] == 'object']

一些暂时想到的使用技巧
1.对于时间序列的数据,datatime无法直接使用的,可以增加year,month,day,hour等时间属性,取代原来的时间。代码如下:

df["hour"] = [t.hour for t in pd.DatetimeIndex(df.datetime)]
df["day"] = [t.dayofweek for t in pd.DatetimeIndex(df.datetime)]
df["month"] = [t.month for t in pd.DatetimeIndex(df.datetime)]
df['year'] = [t.year for t in pd.DatetimeIndex(df.datetime)]
df['year'] = df['year'].map({2011:0, 2012:1})
df.head()

2.对于一些分布几种在一段区间内的连续数值变量,有时候可以采用分段处理,用有序数列0,1,2,3…来表示。如下所示:

new_df['temp_bin']=np.floor(new_df['temp'])//5
new_df['temp_bin'].unique()
# now we can visualize as follows

先更新这么多,后续争取把整个流程全部更新完!谢谢你们,点个关注呗!
后续打算整套流程做完之后,好好写kaggle/天池上面比赛项目,写几个总结,之后会陆续更新!

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐