美文网首页
Python建模复习:建模实操

Python建模复习:建模实操

作者: 啾啾二一 | 来源:发表于2019-07-10 20:37 被阅读0次

    第六部分 数据建模实操

    导入常规库

    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建模复习:建模实操

          本文链接:https://www.haomeiwen.com/subject/rvmkkctx.html