Python建模复习:建模实操

第六部分 数据建模实操

导入常规库

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

数据读取

用pandas下的read_csv方法,读取csv文件;pd.read_csv(),如果文件名称包含中文,需要增加engine=’python’

用pandas的read_table方法,读取通用分隔符分割的数据文件到数据框;pd.read_table(file,sep=’’,names=列名)

默认读取方式读取txt,readlines直接返回完成内容,readline每次只读取一行,需要配合seek、next等完成遍历读取所有记录,read。

示例:fn = open('data.txt', 'r')    all_data = fn.readlines()  fn.close()

numpy的loadtxt方法,np.loadtxt(file_name,dtype=’’,delimiter=’’)

使用内置的Seaborn数据集,可以使用load_dataset()函数

打开xlsx文件

Pd.read_excel(file_name,sheet_name=)

import xlrd  # 导入库 xlsx = xlrd.open_workbook('demo.xlsx')

导出csv文件df.to_csv()

描述性统计,数据审查

查看前几行数据data.head()

数据行列数data.shape

查看数据类型,是否有缺失值data.info()

描述性统计data.describe(include=’all’) include='all'参数可使结果输出所有支持的统计量

数据探索——数据分布情况

各取值计数并降序分布data[‘’].value_counts(ascending=False) 

Unique 方法new_data['Brand'].unique()

所有变量直方图分布data.hist(figsize=(12,16),bins=50)

能够自动处理缺失值的模型包括:KNN、决策树和随机森林、神经网络和朴素贝叶斯、DBSCAN(基于密度的带有噪声的空间聚类)

数据清洗

sklearn.preprocessing中的Imputer、Pandas和Numpy

缺失值

丢弃缺失值df.dropna(),inplace=False是否原来基础上替换

data.dropna(thresh=1,subset=['state','IMEI']).count(),两个字段缺失一个的行就删除

使用sklearn将缺失值替换为特定值

nan_model = Imputer(missing_values='NaN', strategy='mean', axis=0)  # 建立替换规则:将值为Nan的缺失值以均值做替换,strategy填补策略,most-frequent众数

nan_result = nan_model.fit_transform(df)  # 应用模型规则

使用pandas将缺失值替换为特定值df.fillna(method =‘’),backfill用后面的值替换缺失值,pad用前面的值替换缺失值.

df.fillna(df.mean()['col2':'col4'])  # 用平均数代替,选择各自列的均值替换缺失值

df2[0] = df2[0].fillna(df2[0].mean())

单变量异常值识别

侦测方法:数据排序、平均值法、四分位法

数值型离群值处理方法:离群值视为空值、盖帽法、变量转换取对数(严重偏态分布的数据取对数)

盖帽法

# Compute boundray.

取对数

data['log_expd']=np.log(tmp+1)

from sklearn.preprocessing import FunctionTransformer

functionTF = FunctionTransformer(np.log1p)

log_data=functionTF.fit_transform(data[['call','traffic']])

类别型处理方法:直接忽略法、人工填补法、自动填补法、推论法

重复值

判断重复数据记录df.duplicated()

删除重复值drop_duplicates(),()可指定重复的列

替换replace()

数据合并merge()

数据预处理——满足模型输入要求

二进制化、离散化、哑编码、标准化、归一化(规范化Normalizer)

二值化

from sklearn.preprocessing import Binarizer

binarizer = Binarizer(threshold=0, copy=True) threshold阈值

data['has_IMEI'] = binarizer.fit_transform(data.IMEI.values.reshape(-1, 1))

等宽离散化pd.cut()可能有空值

from datetime import datetime

dura_col = datetime(2015, 1, 1) - pd.to_datetime(data['join_time'])

data['duration'] = dura_col.map

equal_width = pd.cut(data['duration'], 5)

data['churn'].groupby(equal_width).agg(['count', 'mean','sum'])

人工离散

bins = [-np.inf, 5, 12, 36, np.inf]

artificial_width = pd.cut(data['duration'], bins)

data['churn'].groupby(artificial_width).agg(['mean']).plot(kind='bar')

plt.show()

标准化

from sklearn import preprocessing

from sklearn.preprocessing import scale

scaler = preprocessing.StandardScaler().fit(train_data)

train_scaled = scaler.transform(train_data)

规范化

from sklearn.preprocessing import Normalizer

iris_norm = Normalizer().fit_transform(iris.data)

数据编码

Pandas

dummies = pd.get_dummies(data.state, prefix='s')

data.join(dummies).head()

sklearn.preprocessing中的OneHotEncoder

enc = OneHotEncoder()  # 建立模型对象

df2_new = enc.fit_transform(transform_data).toarray()  # 标志转换

5、数据降维

主成分分析PCA

from sklearn.decomposition import PCA

iris_pca = PCA(n_components=2)

iris_pca_score = iris_pca.fit_transform(iris.data)

print(iris_pca.explained_variance_ratio_ )可解释方差变异

主成分分析PCA,因子分析FA

# 使用sklearn的DecisionTreeClassifier判断变量重要性

model_tree = DecisionTreeClassifier(random_state=0)  # 建立分类决策树模型对象

model_tree.fit(x, y)  # 将数据集的维度和目标变量输入模型

feature_importance = model_tree.feature_importances_  # 获得所有变量的重要性得分

print (feature_importance)  # 打印输出

特征工程

6、样本不均衡

抽样

过抽样(上采样)增加分类中少数类样本的数量来实现样本均衡,SMOTE算法

欠抽样(下采样)减少分类中多数类样本的数量实现均衡

样本权重熵

使用SVM的权重调节处理不均衡样本

from sklearn.svm import SVC  # SVM中的分类算法SVC

model_svm = SVC(class_weight='balanced')  # 创建SVC模型对象并指定类别权重

model_svm.fit(x, y)  # 输入x和y并训练模型

简单随机抽样、等距抽样、分层抽样、整群抽样

解决共线性问题:增大样本量、岭回归、逐步回归、主成分回归、人工去除

标准化

from sklearn import preprocessing

from sklearn.preprocessing import StandardScaler, scale

实现中心化和正态分布的Z-Score

zscore_scaler = preprocessing.StandardScaler()  # 建立StandardScaler对象

data_scale_1 = zscore_scaler.fit_transform(data)  # StandardScaler标准化处理

实现归一化的Max-Min

minmax_scaler = preprocessing.MinMaxScaler()  # 建立MinMaxScaler模型对象

data_scale_2 = minmax_scaler.fit_transform(data)  # MinMaxScaler标准化处理

用于稀疏数据的MaxAbs

离散化

# 针对时间数据的离散化single_data_tmp.weekday()  # 离散化为周几

# 针对多值离散数据的离散化

数据分析挖掘

划分测试集训练集

from sklearn.model_selection import train_test_split

train_data, test_data, train_target, test_target = train_test_split(

data, target, test_size=0.2, train_size=0.8, random_state=1234)

聚类

from sklearn.cluster import KMeans  # 导入sklearn聚类模块

from sklearn import metrics  # 导入sklearn效果评估模块

from sklearn.metrics import silhouette_score 轮廓系数

n_clusters = 3  # 设置聚类数量

model_kmeans = KMeans(n_clusters=n_clusters, n_init=15(初始化次数),random_state=0)  # 建立聚类模型对象

tele_kmeans.cluster_centers_聚类中心

model_kmeans.fit(X)  # 训练聚类模型

y_pre = model_kmeans.predict(X)  # 预测聚类模型

silhouette_s = metrics.silhouette_score(X, y_pre, metric='euclidean')  # 平均轮廓系数

交叉验证

from sklearn.model_selection import cross_val_score  # 交叉检验

结果验证

import sklearn.metrics as metrics

print(metrics.classification_report(test_target, clf.predirocct(test_data)))

随机森林+GridSearch

随机森林填补缺失值示例

def set_missing_ages(df):

    # 把已有的数值型特征取出来丢进Random Forest Regressor中

    age_df = df[['Age','Fare', 'Parch', 'SibSp', 'Pclass']]

    # 乘客分成已知年龄和未知年龄两部分

    known_age = age_df[age_df.Age.notnull()].as_matrix()

    unknown_age = age_df[age_df.Age.isnull()].as_matrix()

    # y即目标年龄

    y = known_age[:, 0]

    # X即特征属性值

    X = known_age[:, 1:]

    # fit到RandomForestRegressor之中

    rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)

    rfr.fit(X, y)

    # 用得到的模型进行未知年龄结果预测

    predictedAges = rfr.predict(unknown_age[:, 1:])

#    print predictedAges

    # 用得到的预测结果填补原缺失数据

    df.loc[ (df.Age.isnull()), 'Age' ] = predictedAges

return df, rfr

data=add_missing(data)第六部分 数据建模实操

导入常规库

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

数据读取

用pandas下的read_csv方法,读取csv文件;pd.read_csv(),如果文件名称包含中文,需要增加engine=’python’

用pandas的read_table方法,读取通用分隔符分割的数据文件到数据框;pd.read_table(file,sep=’’,names=列名)

默认读取方式读取txt,readlines直接返回完成内容,readline每次只读取一行,需要配合seek、next等完成遍历读取所有记录,read。

示例:fn = open('data.txt', 'r')    all_data = fn.readlines()  fn.close()

numpy的loadtxt方法,np.loadtxt(file_name,dtype=’’,delimiter=’’)

使用内置的Seaborn数据集,可以使用load_dataset()函数

打开xlsx文件

Pd.read_excel(file_name,sheet_name=)

import xlrd  # 导入库 xlsx = xlrd.open_workbook('demo.xlsx')

导出csv文件df.to_csv()

描述性统计,数据审查

查看前几行数据data.head()

数据行列数data.shape

查看数据类型,是否有缺失值data.info()

描述性统计data.describe(include=’all’) include='all'参数可使结果输出所有支持的统计量

数据探索——数据分布情况

各取值计数并降序分布data[‘’].value_counts(ascending=False) 

Unique 方法new_data['Brand'].unique()

所有变量直方图分布data.hist(figsize=(12,16),bins=50)

能够自动处理缺失值的模型包括:KNN、决策树和随机森林、神经网络和朴素贝叶斯、DBSCAN(基于密度的带有噪声的空间聚类)

数据清洗

sklearn.preprocessing中的Imputer、Pandas和Numpy

缺失值

丢弃缺失值df.dropna(),inplace=False是否原来基础上替换

data.dropna(thresh=1,subset=['state','IMEI']).count(),两个字段缺失一个的行就删除

使用sklearn将缺失值替换为特定值

nan_model = Imputer(missing_values='NaN', strategy='mean', axis=0)  # 建立替换规则:将值为Nan的缺失值以均值做替换,strategy填补策略,most-frequent众数

nan_result = nan_model.fit_transform(df)  # 应用模型规则

使用pandas将缺失值替换为特定值df.fillna(method =‘’),backfill用后面的值替换缺失值,pad用前面的值替换缺失值.

df.fillna(df.mean()['col2':'col4'])  # 用平均数代替,选择各自列的均值替换缺失值

df2[0] = df2[0].fillna(df2[0].mean())

单变量异常值识别

侦测方法:数据排序、平均值法、四分位法

数值型离群值处理方法:离群值视为空值、盖帽法、变量转换取对数(严重偏态分布的数据取对数)

盖帽法

# Compute boundray.

取对数

data['log_expd']=np.log(tmp+1)

from sklearn.preprocessing import FunctionTransformer

functionTF = FunctionTransformer(np.log1p)

log_data=functionTF.fit_transform(data[['call','traffic']])

类别型处理方法:直接忽略法、人工填补法、自动填补法、推论法

重复值

判断重复数据记录df.duplicated()

删除重复值drop_duplicates(),()可指定重复的列

替换replace()

数据合并merge()

数据预处理——满足模型输入要求

二进制化、离散化、哑编码、标准化、归一化(规范化Normalizer)

二值化

from sklearn.preprocessing import Binarizer

binarizer = Binarizer(threshold=0, copy=True) threshold阈值

data['has_IMEI'] = binarizer.fit_transform(data.IMEI.values.reshape(-1, 1))

等宽离散化pd.cut()可能有空值

from datetime import datetime

dura_col = datetime(2015, 1, 1) - pd.to_datetime(data['join_time'])

data['duration'] = dura_col.map

equal_width = pd.cut(data['duration'], 5)

data['churn'].groupby(equal_width).agg(['count', 'mean','sum'])

人工离散

bins = [-np.inf, 5, 12, 36, np.inf]

artificial_width = pd.cut(data['duration'], bins)

data['churn'].groupby(artificial_width).agg(['mean']).plot(kind='bar')

plt.show()

标准化

from sklearn import preprocessing

from sklearn.preprocessing import scale

scaler = preprocessing.StandardScaler().fit(train_data)

train_scaled = scaler.transform(train_data)

规范化

from sklearn.preprocessing import Normalizer

iris_norm = Normalizer().fit_transform(iris.data)


数据编码

Pandas

dummies = pd.get_dummies(data.state, prefix='s')

data.join(dummies).head()

sklearn.preprocessing中的OneHotEncoder

enc = OneHotEncoder()  # 建立模型对象

df2_new = enc.fit_transform(transform_data).toarray()  # 标志转换

5、数据降维

主成分分析PCA

from sklearn.decomposition import PCA

iris_pca = PCA(n_components=2)

iris_pca_score = iris_pca.fit_transform(iris.data)

print(iris_pca.explained_variance_ratio_ )可解释方差变异

主成分分析PCA,因子分析FA

# 使用sklearn的DecisionTreeClassifier判断变量重要性

model_tree = DecisionTreeClassifier(random_state=0)  # 建立分类决策树模型对象

model_tree.fit(x, y)  # 将数据集的维度和目标变量输入模型

feature_importance = model_tree.feature_importances_  # 获得所有变量的重要性得分

print (feature_importance)  # 打印输出

特征工程

6、样本不均衡

抽样

过抽样(上采样)增加分类中少数类样本的数量来实现样本均衡,SMOTE算法

欠抽样(下采样)减少分类中多数类样本的数量实现均衡

样本权重熵

使用SVM的权重调节处理不均衡样本

from sklearn.svm import SVC  # SVM中的分类算法SVC

model_svm = SVC(class_weight='balanced')  # 创建SVC模型对象并指定类别权重

model_svm.fit(x, y)  # 输入x和y并训练模型

简单随机抽样、等距抽样、分层抽样、整群抽样

解决共线性问题:增大样本量、岭回归、逐步回归、主成分回归、人工去除

标准化

from sklearn import preprocessing

from sklearn.preprocessing import StandardScaler, scale

实现中心化和正态分布的Z-Score

zscore_scaler = preprocessing.StandardScaler()  # 建立StandardScaler对象

data_scale_1 = zscore_scaler.fit_transform(data)  # StandardScaler标准化处理

实现归一化的Max-Min

minmax_scaler = preprocessing.MinMaxScaler()  # 建立MinMaxScaler模型对象

data_scale_2 = minmax_scaler.fit_transform(data)  # MinMaxScaler标准化处理

用于稀疏数据的MaxAbs

离散化

# 针对时间数据的离散化single_data_tmp.weekday()  # 离散化为周几

# 针对多值离散数据的离散化

数据分析挖掘

划分测试集训练集

from sklearn.model_selection import train_test_split

train_data, test_data, train_target, test_target = train_test_split(

data, target, test_size=0.2, train_size=0.8, random_state=1234)

聚类

from sklearn.cluster import KMeans  # 导入sklearn聚类模块

from sklearn import metrics  # 导入sklearn效果评估模块

from sklearn.metrics import silhouette_score 轮廓系数

n_clusters = 3  # 设置聚类数量

model_kmeans = KMeans(n_clusters=n_clusters, n_init=15(初始化次数),random_state=0)  # 建立聚类模型对象

tele_kmeans.cluster_centers_聚类中心

model_kmeans.fit(X)  # 训练聚类模型

y_pre = model_kmeans.predict(X)  # 预测聚类模型

silhouette_s = metrics.silhouette_score(X, y_pre, metric='euclidean')  # 平均轮廓系数


交叉验证

from sklearn.model_selection import cross_val_score  # 交叉检验

结果验证

import sklearn.metrics as metrics

print(metrics.classification_report(test_target, clf.predirocct(test_data)))

随机森林+GridSearch

随机森林填补缺失值示例

def set_missing_ages(df):


    # 把已有的数值型特征取出来丢进Random Forest Regressor中

    age_df = df[['Age','Fare', 'Parch', 'SibSp', 'Pclass']]


    # 乘客分成已知年龄和未知年龄两部分

    known_age = age_df[age_df.Age.notnull()].as_matrix()

    unknown_age = age_df[age_df.Age.isnull()].as_matrix()


    # y即目标年龄

    y = known_age[:, 0]


    # X即特征属性值

    X = known_age[:, 1:]


    # fit到RandomForestRegressor之中

    rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)

    rfr.fit(X, y)


    # 用得到的模型进行未知年龄结果预测

    predictedAges = rfr.predict(unknown_age[:, 1:])

#    print predictedAges

    # 用得到的预测结果填补原缺失数据

    df.loc[ (df.Age.isnull()), 'Age' ] = predictedAges


return df, rfr

data=add_missing(data)

你可能感兴趣的:(Python建模复习:建模实操)