数据集及源码:https://download.csdn.net/download/qq_42363032/12645777

文章目录

  • 预测
    • 1.读取数据
    • 2.提取X和Y
    • 3.连续型变量特征重要性筛选(相关系数)
      • 将相关系数小于0.1的删除(弱相关)
      • 筛选之后的数值型特征
    • 4.离散型变量特征筛选(方差分析)
      • 筛选之后的离散型特征
    • 5.特征重新拼接
      • 看一下连续型特征的基本统计量(EDA探索性分析)
      • 连续型变量处理
        • 对数处理
      • 看一下离散型特征的基本统计量(EDA探索性分析)
      • 离散型变量处理
    • 6.前向选择法筛选变量
    • 7.建立线性回归模型
  • 回归
    • 1.读入数据
      • 一个经验的做法,对特征去重,根据去重后的个数是否大于10,来判断特征是数值型还是离散型
    • 2.特征筛选(卡方检验)
      • 以DemGender列为例
      • 以StatusCat96NK列为例
    • 3.通过WOE、IV看一下特征筛选
      • 底层实现
      • 调包实现
        • 根据IV值筛选离散变量
        • 根据IV值筛选连续型变量
    • 4.EDA探索性分析
      • 消除异常值
        • 1.均值加减三倍标准差,盖帽法替换
        • 2.计算百分数
    • 5.针对有问题的变量进行修改
      • 连续型变量修改
      • 离散型变量修改
    • 6.通过随机森林对变量的重要性进行筛选
    • 7.变量聚类
    • 8.逻辑回归建模
    • 9.ROC曲线

预测

1.读取数据

做预测,所以离散列TARGET_B删除

import pandas as pd
import numpy as np
import matplotlib.pyplot as pltmodel_data = pd.read_csv("donations2.csv").drop(["ID","TARGET_B"],1)   # 做预测,离散值TARGET_B删除
model_data.head()

2.提取X和Y

做预测,Y是连续型

特征有好多列,既有数值型又有离散型,这里把数值型取出为一组,离散型取出为一组,分别用相关系数和方差分析做特征筛选

print(model_data.dtypes)  # 看一下数据类型
y = ["TARGET_D"]
# 提取X分为数值类型和非数值类型
var_c = ["GiftCnt36","GiftCntAll","GiftCntCard36","GiftCntCardAll","GiftTimeLast","GiftTimeFirst","PromCnt12","PromCnt36","PromCntAll","PromCntCard12","PromCntCard36","PromCntCardAll","StatusCatStarAll","DemAge","DemMedHomeValue","DemPctVeterans","DemMedIncome","GiftAvgLast","GiftAvg36","GiftAvgAll","GiftAvgCard36"]
var_d = ['DemGender', 'StatusCat96NK', 'DemCluster', 'DemHomeOwner']
X = model_data[var_c + var_d]
Y = model_data[y]

3.连续型变量特征重要性筛选(相关系数)

X和Y都是数值型用相关系数

corr_s = abs(model_data[y + var_c].corr(method = 'spearman'))   # spearman:斯皮尔曼相关系数
# print(corr_s['TARGET_D'])
corr_s = pd.DataFrame(corr_s.iloc[0,:])   # 第一列是TARGET_D
corr_p = abs(model_data[y + var_c].corr(method = 'pearson'))   # pearson:皮尔逊相关系数
corr_p = pd.DataFrame(corr_p.iloc[0,:])
corr_sp = pd.concat([corr_s,corr_p], axis = 1)
corr_sp.columns = ['spearman','pearson']
corr_sp

将相关系数小于0.1的删除(弱相关)

corr_sp[(corr_sp['spearman'] <= 0.1) & (corr_sp['pearson'] <= 0.1)]

筛选之后的数值型特征

var_c_s = set(var_c) - set(['PromCnt12','PromCnt36','PromCntCard12','DemAge','DemPctVeterans','DemMedIncome'])   # 集合的差集运算
var_c_s = list(var_c_s)
var_c_s

4.离散型变量特征筛选(方差分析)

X和Y既有离散型又有数值型用方差分析

# 当X和Y既有离散值又有连续值,通过方差分析看二者之间关系
# P值大于0.05的,需要删除,这些特征都是没有影响的没有关系的
import statsmodels.stats.anova as anova
from statsmodels.formula.api import ols
for i in var_d:formula = "TARGET_D ~ " + str(i)print(anova.anova_lm(ols(formula,data = model_data[var_d+['TARGET_D']]).fit()))  # 方差分析是线性方程的特例

P值大于0.05的需要删除,说明此特征对Y没有影响没有关系

筛选之后的离散型特征

var_d_s = list(set(var_d) - set(["DemHomeOwner"]))
var_d_s

5.特征重新拼接

X = model_data[var_c_s + var_d_s].copy()
Y = model_data[y].copy()
model_data[var_c_s+var_d_s].head()

看一下连续型特征的基本统计量(EDA探索性分析)

X[var_c_s].describe().T   # 看一下数值型特征的描述性信息,基本的统计量
# count代表有效值的数量

abs((X[var_c_s].mode().iloc[0,] - X[var_c_s].median()) /(X[var_c_s].quantile(0.75) - X[var_c_s].quantile(0.25)))
# (众数 - 中位数)/(上四分位数 - 下四分位数)【极差】
# 如果值大于0.8或者大于1,说明这个数稍微有点偏了,有可能存在异常值

看一下直方图和偏度值

X["PromCntAll"].hist()

X["DemMedHomeValue"].hist()

X["DemMedHomeValue"].describe().TX['DemMedHomeValue'].replace(0, np.nan, inplace = True)

说明PromCntAll和DemMedHomeValue需要做对数处理

连续型变量处理

1 - (X.describe().T["count"]) / len(X)

GiftAvgCard36_fill = X["GiftAvgCard36"].median()  # 中位数
DemMedHomeValue_fill = X["DemMedHomeValue"].median()
X["GiftAvgCard36"].fillna(GiftAvgCard36_fill,inplace = True)  # 用中位数进行缺失值填充
X["DemMedHomeValue"].fillna(DemMedHomeValue_fill,inplace = True)
skew_var_x = {}
for i in var_c_s:skew_var_x[i]=abs(X[i].skew())   # 看一下峰值
skew = pd.Series(skew_var_x).sort_values(ascending=False)
skew

var_x_ln = skew[skew >= 1].index  #返回大于等于1的索引
var_x_ln

对数处理
# 对数处理
for i in var_x_ln:if min(X[i]) <= 0:X[i] = np.log(X[i] + abs(min(X[i])) + 0.01)else:X[i] = np.log(X[i])
# 看一下峰值
skew_var_x = {}
for i in var_c_s:skew_var_x[i]=abs(X[i].skew())skew = pd.Series(skew_var_x).sort_values(ascending=False)
skew

看一下离散型特征的基本统计量(EDA探索性分析)

对于离散型的变量没有办法算统计量,一般情况做一下频数分布的计算

类别数一般6-8类就是比较不错的

X["DemGender"].value_counts()  # 这个特征只有3类,还可以

X["StatusCat96NK"].value_counts() #有的水平数量太少,需要合并,类别少的归成一类

X["DemCluster"].value_counts()[:10]  # 这个类别太多,好像50多个,也需要合并,比如合并到8-10类

离散型变量处理

对于DemCluster

# as_index 的默认值为True, 对于聚合输出,返回以组标签作为索引的对象。仅与DataFrame输入相关。as_index = False实际上是“SQL风格”的分组输出
DemC_group = model_data[['DemCluster','TARGET_D']].groupby('DemCluster',as_index = False)
DemC_C= DemC_group['TARGET_D'].agg({'mean' : 'mean','count':'count',"median":"median"}).sort_values(["median","mean"])
DemC_C["count_cumsum"] = DemC_C["count"].cumsum()
DemC_C["new_DemCluster"] = DemC_C["count_cumsum"].apply(lambda x:x//(len(model_data)/10)+1)
DemC_C["new_DemCluster"] = DemC_C["new_DemCluster"].astype(int)
DemC_C

len(model_data)

DemCluster_new_class = DemC_C[["DemCluster","new_DemCluster"]].set_index("DemCluster")
X["DemCluster"] = X["DemCluster"].map(DemCluster_new_class.to_dict()['new_DemCluster'])
new_DemGender = {"F":1,"M":2,"U":3}
X['DemGender'] = X['DemGender'].map(new_DemGender)

对于StatusCat96NK

StatusCat96NK_group = model_data[['StatusCat96NK','TARGET_D']].groupby('StatusCat96NK', as_index = False)
StatusCat96NK_class = StatusCat96NK_group['TARGET_D'].agg({'mean' : 'mean', 'count':'count',"median":"median"}).sort_values(["median","mean"])
StatusCat96NK_class

new_StatusCat96NK = {"S":1,"A":2,"E":2,"N":2,"F":2,"L":2}
X['StatusCat96NK'] = X['StatusCat96NK'].map(new_StatusCat96NK)
X.head()

6.前向选择法筛选变量

import statsmodels.formula.api as smf
def forward_selected(data, response):remaining = set(data.columns)remaining.remove(response)selected = []current_score, best_new_score = 0.0, 0.0while remaining and current_score == best_new_score:scores_with_candidates = []for candidate in remaining:formula = "{} ~ {} + 1".format(response,' + '.join(selected + [candidate]))score = smf.ols(formula, data).fit().rsquared_adjscores_with_candidates.append((score, candidate))scores_with_candidates.sort()best_new_score, best_candidate = scores_with_candidates.pop()if current_score < best_new_score:remaining.remove(best_candidate)selected.append(best_candidate)current_score = best_new_scoreformula = "{} ~ {} + 1".format(response,' + '.join(selected))model = smf.ols(formula, data).fit()return selected
XX=pd.concat([X[var_c_s+var_d_s],Y],axis = 1)final_var = forward_selected(XX,'TARGET_D')var_c_s = list(set(var_c_s)&set(final_var))
var_c_s

var_d_s = list(set(var_d_s)&set(final_var))
var_d_s

model_final = pd.concat([X[var_d_s + var_c_s],Y], axis = 1)
model_final.columns

7.建立线性回归模型

import statsmodels.api as sm
from statsmodels.formula.api import ols
X = model_final.iloc[:,:-1]
Y = model_final.iloc[:,-1]
formula = 'TARGET_D ~ ' + '+'.join(final_var)
donation_model = ols(formula,model_final).fit()
print(donation_model.summary())

model_final[final_var].corr()

用DemMedHomeValue做线性回归模型看一下结果

formula = 'TARGET_D ~ DemMedHomeValue'
model = ols(formula,model_final).fit()
print(model.summary())

看一下特征共线性

final_varN = ['GiftAvgAll','GiftAvgLast','GiftAvg36','GiftCntAll','GiftAvgCard36','GiftCntCard36','DemGender','PromCntCardAll','GiftCnt36']
formula = 'DemMedHomeValue ~ ' + '+'.join(final_varN)
model = ols(formula,model_final).fit()
print(model.summary())

formula = 'TARGET_D ~ ' + '+'.join(final_varN)
model = ols(formula,model_final).fit()
print(model.summary())

回归

1.读入数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# ID TARGET_D 删除这两列
model_data=pd.read_csv("donations2.csv").drop(["ID","TARGET_D"],1)
model_data.head()

一个经验的做法,对特征去重,根据去重后的个数是否大于10,来判断特征是数值型还是离散型

比如,判断GiftCntAll这一列是数值型还是离散型

len(model_data['GiftCntAll'].drop_duplicates())     # 69,大于10,说明是数值型
model_data.dtypes
y = 'TARGET_B'
# 数值类型
var_c = ["GiftCnt36","GiftCntAll","GiftCntCard36","GiftCntCardAll","GiftTimeLast","GiftTimeFirst","PromCnt12","PromCnt36","PromCntAll","PromCntCard12","PromCntCard36","PromCntCardAll","StatusCatStarAll","DemAge","DemMedHomeValue","DemPctVeterans","DemMedIncome","GiftAvgLast","GiftAvg36","GiftAvgAll","GiftAvgCard36"]
# 类别类型
var_d = ['StatusCat96NK', 'DemHomeOwner', 'DemGender', 'DemCluster']
X = model_data[var_c + var_d].copy()
Y = model_data[y].copy()

2.特征筛选(卡方检验)

当Y和X都是离散型时,用卡方检验做特征筛选

以DemGender列为例

先看一下频数统计

model_data['DemGender'].value_counts()

看一下列联交叉表

# 非参数统计------------------列联交叉表
cross = pd.crosstab(model_data['TARGET_B'],model_data['DemGender'])
cross

用这个列联交叉表做这个特征的卡方检验

from scipy import stats
from pprint import pprint
pprint(stats.chi2_contingency(cross))   # 卡方值、概率P值、自由度

DemGender列的概率P值是大于0.05的,所以是需要删除的,它对结果没有影响

以StatusCat96NK列为例

频数统计

model_data['StatusCat96NK'].value_counts()

列联交叉

# 非参数统计------------------列联交叉表
cross = pd.crosstab(model_data['TARGET_B'],model_data['StatusCat96NK'])
cross

卡方检验

from scipy import stats
from pprint import pprint
pprint(stats.chi2_contingency(cross))   # 卡方值、概率P值、自由度

3.通过WOE、IV看一下特征筛选

底层实现

def CalcWOE(df, col, target):''':param df: 包含需要计算WOE的变量和目标变量:param col: 需要计算WOE、IV的变量,必须是分箱后的变量,或者不需要分箱的类别型变量,也就是离散型:param target: 目标变量,0、1表示好、坏:return: 返回WOE和IV'''total = df.groupby([col])[target].count()   # 对col列根据类别标签做一下分组统计,求的是每个col标签的样本总数total = pd.DataFrame({'total': total})      # 下面需要做表关联,转换成数据框bad = df.groupby([col])[target].sum()      # 每个col标签的坏样本总数(1的)bad = pd.DataFrame({'bad': bad})regroup = total.merge(bad, left_index=True, right_index=True, how='left')regroup.reset_index(level=0, inplace=True)   # 索引重置N = sum(regroup['total'])B = sum(regroup['bad'])regroup['good'] = regroup['total'] - regroup['bad']   # 好样本数G = N - Bregroup['bad_pcnt'] = regroup['bad'].map(lambda x: x*1.0/B)   # 坏样本率regroup['good_pcnt'] = regroup['good'].map(lambda x: x * 1.0 / G)   # 好样本率regroup['WOE'] = regroup.apply(lambda x: np.log(x.good_pcnt*1.0/x.bad_pcnt),axis = 1)WOE_dict = regroup[[col,'WOE']].set_index(col).to_dict(orient='index')for k, v in WOE_dict.items():WOE_dict[k] = v['WOE']IV = regroup.apply(lambda x: (x.good_pcnt-x.bad_pcnt)*np.log(x.good_pcnt*1.0/x.bad_pcnt),axis = 1)IV = sum(IV)return {"WOE": WOE_dict, 'IV':IV}
dic = CalcWOE(model_data, 'StatusCat96NK', 'TARGET_B')
dic['IV']
dic['WOE']

一般来说某个特征的IV值大于0.02,越大越好,越大说明特征越重要,可以理解随机森林的特征重要度等价

WOE入摸

model_data['StatusCat96NK_woe'] = model_data['StatusCat96NK'].map(dic['WOE'])
model_data[['StatusCat96NK_woe','StatusCat96NK']].head()

调包实现

from woe import WoE
iv_d = {}
for i in var_d:iv_d[i] = WoE(v_type='d').fit(X[i].copy(), Y.copy()).iv
iv_d
根据IV值筛选离散变量
from woe import WoE
iv_d = {}
for i in var_d:iv_d[i] = WoE(v_type='d').fit(X[i].copy(), Y.copy()).iv   # 参数是离散型 v_type=‘d’
iv_d

pd.Series(iv_d).sort_values(ascending = False)

var_d_s = ['StatusCat96NK', 'DemCluster']
根据IV值筛选连续型变量
iv_c = {}
for i in var_c:iv_c[i] = WoE(v_type='c',t_type='b',qnt_num=3).fit(X[i],Y).iv   # 参数是数值型 v_type=‘c’
sort_iv_c = pd.Series(iv_c).sort_values(ascending=False)
sort_iv_c

保留iv值大于0.02的

var_c_s = list(sort_iv_c[sort_iv_c > 0.02].index)
var_c_s

X = model_data[var_c_s + var_d_s].copy()
Y = model_data[y].copy()
X[var_c_s].describe().T

4.EDA探索性分析

就是描述性统计加可视化

(众数 - 中位数)/(分位数极差)

经验来看,一般这个值大于0.8,说明它有偏,画一下直方图看看

abs((X[var_c_s].mode().iloc[0,] - X[var_c_s].median()) /(X[var_c_s].quantile(0.75) - X[var_c_s].quantile(0.25)))

plt.hist(X["PromCntAll"], bins=20)

柱形图右面偏离是异常值

# 箱线图
# 上边缘的计算方法是 上四分位数+1.5倍极差
import seaborn as sns
sns.boxplot(X["PromCntAll"])

消除异常值

1.均值加减三倍标准差,盖帽法替换
prc_mean = X["PromCntAll"].mean()
prc_std = X["PromCntAll"].std()
high = prc_mean + 3*prc_std
low = prc_mean - 3*prc_std
def s(x):if x > high:return highelif x < low:return lowelse:return x
2.计算百分数
# 计算百分位数
p1 = X["PromCntAll"].quantile(0.01)
p99 = X["PromCntAll"].quantile(0.99)
print(p1)
print(p99)

用均值加减三倍标准差消除异常值

X["PromCntAll"] = X["PromCntAll"].map(s)
X["PromCntAll"].describe()

X["PromCntAll"][X["PromCntAll"] > low][X["PromCntAll"] < high].describe()

5.针对有问题的变量进行修改

1 - X.count()/ len(X)

X.isnull().sum()/len(X)

1 - (X.describe().T["count"]) / len(X)

X.describe().T

连续型变量修改

fill_GiftAvgCard36 = X.GiftAvgCard36.median()
X.GiftAvgCard36.fillna(value=fill_GiftAvgCard36, inplace=True)X.GiftAvgCard36.fillna(method='ffill', inplace=True)model_data[['DemCluster','TARGET_B']].head()

model_data[['DemCluster','TARGET_B']].groupby('DemCluster',as_index = False).agg(list).head()

离散型变量修改

# 统计每个水平的对应目标变量的均值,和每个水平数量DemCluster_grp = model_data[['DemCluster','TARGET_B']].groupby('DemCluster',as_index = False)DemC_C = DemCluster_grp['TARGET_B'].agg({'mean' : 'mean','count':'count'}).sort_values("mean")# 将这些类别尽量以人数大致均等的方式以响应率为序归结为10个大类
DemC_C["count_cumsum"] = DemC_C["count"].cumsum()
DemC_C["new_DemCluster"] = DemC_C["count_cumsum"].apply(lambda x: x//(len(model_data)/10)).astype(int)
DemC_C

X_rep = X.copy()
for i in var_d_s:X_rep[i+"_woe"] = WoE(v_type='d').fit_transform(X_rep[i],Y)
X_rep.head()

StatusCat96NK_woe = X_rep[["StatusCat96NK","StatusCat96NK_woe"]].drop_duplicates().set_index("StatusCat96NK").to_dict()
StatusCat96NK_woe

StatusCat96NK_woe = X_rep[["StatusCat96NK","StatusCat96NK_woe"]].drop_duplicates().set_index("StatusCat96NK").to_dict()
DemCluster_woe = X_rep[["DemCluster","DemCluster_woe"]].drop_duplicates().set_index("DemCluster").to_dict()
del X_rep["StatusCat96NK"]
del X_rep["DemCluster"]
X_rep.rename(columns={"StatusCat96NK_woe":"StatusCat96NK","DemCluster_woe":"DemCluster"},inplace=True)
X_rep

6.通过随机森林对变量的重要性进行筛选

import sklearn.ensemble as ensemble
rfc = ensemble.RandomForestClassifier(criterion='entropy', n_estimators=3, max_features=0.5, min_samples_split=5)
rfc_model = rfc.fit(X_rep, Y)
rfc_model.feature_importances_
rfc_fi = pd.DataFrame()
rfc_fi["features"] = list(X.columns)
rfc_fi["importance"] = list(rfc_model.feature_importances_)
rfc_fi=rfc_fi.set_index("features",drop=True)
var_sort = rfc_fi.sort_values(by="importance",ascending=False)
var_sort.plot(kind="bar")

7.变量聚类

每一类选一个具有代表性的

权重向量稀疏解的一个计算

from VarSelec import Var_Select,Var_Select_auto
X_rep_reduc = Var_Select_auto(X_rep)
X_rep_reduc.head()

list(X_rep_reduc.columns)

8.逻辑回归建模

import sklearn.model_selection as model_selection
ml_data = model_selection.train_test_split(X_rep_reduc, Y, test_size=0.3, random_state=0)
train_data, test_data, train_target, test_target = ml_data
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
train_data = min_max_scaler.fit_transform(train_data)
test_data = min_max_scaler.fit_transform(test_data)
train_data
import sklearn.linear_model as linear_model
logistic_model = linear_model.LogisticRegression(class_weight = None,dual = False,fit_intercept = True,intercept_scaling = 1,penalty = 'l2',random_state = None,tol = 0.001)
from sklearn.model_selection import ParameterGrid, GridSearchCV
C = np.logspace(-3,0,20,base=10)
param_grid = {'C': C}
clf_cv = GridSearchCV(estimator=logistic_model, param_grid=param_grid, cv=5, scoring='roc_auc')
clf_cv.fit(train_data, train_target)
import statsmodels.api as sm
import statsmodels.formula.api as smf
model=X_rep_reduc.join(train_target)
formula = "TARGET_B ~ " + "+".join(X_rep_reduc)
lg_m = smf.glm(formula=formula, data=model, family=sm.families.Binomial(sm.families.links.logit)).fit()
lg_m.summary()

9.ROC曲线

test_est = logistic_model.predict(test_data)
train_est = logistic_model.predict(train_data)
test_est_p = logistic_model.predict_proba(test_data)[:,1]
train_est_p = logistic_model.predict_proba(train_data)[:,1]
import sklearn.metrics as metrics
fpr_test, tpr_test, th_test = metrics.roc_curve(test_target, test_est_p)
fpr_train, tpr_train, th_train = metrics.roc_curve(train_target, train_est_p)
plt.figure(figsize=[6,6])
plt.plot(fpr_test, tpr_test)
plt.plot(fpr_train, tpr_train)
plt.title('ROC curve')
print('AUC = %6.4f' %metrics.auc(fpr_test, tpr_test))

数据挖掘---营销推广预测响应相关推荐

  1. 中国筋膜枪行业销售状况及营销前景预测报告(2022-2027年版)

    中国筋膜枪行业销售状况及营销前景预测报告(2022-2027年版) ******************************************* [报告编号]: BG418168 [出版时间 ...

  2. 《淘宝店铺营销推广一册通》一2.2 选择店铺行业

    本节书摘来异步社区<淘宝店铺营销推广一册通>一书中的第2章,作者: 葛存山 责编: 赵轩, 更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 选择店铺行业 ...

  3. 如何做好企业网络营销推广?从本质上去理解互联网开始!

    原文地址:https://www.luohaibin.com/wangluotuiguang/92.html 作者:网络营销策划-骆海滨 网络营销推广方案策划_骆海滨最近一直围绕着传统企业互联网化的话 ...

  4. 盘点移动广告联盟排名丨掌握移动营销推广新走向

    在这个营销为王的互联网时代,各大企业都想通过互联网取得更好的发展,不仅要努力提高自身的核心竞争力,还要借助各大移动广告平台来推广自己,吸引更多的用户,从而打开市场,赢得商机.其实,想要找到更加专业的移 ...

  5. 跨境人必须了解:7种跨境电商营销推广理念

    你是否正在寻找新的方式来推广你的电商业务?如果是这样的话,你可以阅读我为你列出的7种电子商务促销理念,并使用这些理念来在线宣传你的产品和线上商店: 1. 关注客户体验 第一个电商促销策略首先是关注客户 ...

  6. 网络营销推广怎么做 自媒体如何让商品消失不见

    网络营销推广怎么做 如今的商业经济是变化莫测的社会,各式商品琳琅满目,目不暇接,由于商品的繁多,带给了用户多种选择.多种渠道.对于企业来说,营销与产品设计有着密切相关的联系.近几年由于自媒体产业的兴起 ...

  7. 中国吸尘器市场竞争格局及营销前景预测报告(新版)2022-2027年

    中国吸尘器市场竞争格局及营销前景预测报告(新版)2022-2027年 [报告编号]: BG417887 [出版时间]: 2022年2月 [出版机构]: 中智正业研究院 内容简介: 第一章 吸尘器行业相 ...

  8. 【云服务架构】阿里云ECS+RDS+OSS+SLB全域旅游营销推广解决方案

    全域旅游营销推广 智慧旅游通过旅游数据分析,挖掘旅游热点和游客兴趣点,引导旅游企业策划对应的旅游产品,制定对应的营销主题,从而推动旅游行业的产品创新和营销创新 功能特点 全面性 海量互联网行为数据分析 ...

  9. 强大的ChatGpt为企业营销推广提供了全方位的加持

    chatgpt,一个火出圈的"聊天机器人".从写作文,到写代码,似乎没有什么是它干不了的. ChatGpt在工业中的应用场景有哪些? 在工业领域,它可以用于提高生产效率,缩短生产周 ...

最新文章

  1. 使用下列 else-if 排列来处理多个条件:
  2. EventBus设计与实现分析——订阅者的注册
  3. Oracle数据库入门——常用的数据字典
  4. GDI+用PNG图片做半透明异型窗口
  5. 互联网日报 | 2月23日 星期二 | 华为发布新一代折叠旗舰Mate X2;字节跳动游戏官网正式上线;携程设立轮值制度...
  6. [转]双线性插值(Bilinear interpolation)
  7. 基于DTW和HMM算法的语音识别系统对比研究-毕业小结
  8. WTA (winner-take-all) 与 自组织映射 SOM (self organizing map)的理解
  9. SQL函数字符串分拆
  10. this.controls指所有控件吗?_PPT特效制作案例:2019年小目标,你定了吗?(用文本框控件制作)...
  11. MIT 线性代数 Linear Algebra 25: 对称矩阵的特征值特征向量,正定矩阵
  12. __ieee80211_data_to_8023
  13. 如何手动开启Windows远程桌面服务
  14. web前端html5+css3学习笔记(2)
  15. 数据分析-思维分析逻辑day04
  16. 机器学习_深度学习毕设题目汇总——肿瘤
  17. SSM 框架整合-1
  18. 计算机的启动及关闭方法,如何关闭开机启动项
  19. Docker CentOS 7.x underlay网络 桥接网络配置
  20. C语言:短整型数据的溢出.2021-02-10

热门文章

  1. Mac检查固态硬盘状态————附带自己更换ssd
  2. luogu 2331
  3. if(!)什么意思?
  4. js拆字分图程序 _拆分古籍_梦溪笔谈方法
  5. 输入身份证号打印(小实例)
  6. 如何去掉文本中的标点符号
  7. Oracle转换函数详解
  8. 耳机Sense线作用说明
  9. 记录python requests模块及请求重试
  10. 中国电信DPDK技术白皮书v1.0