python 在线零售分析
文章目录
- 什么是RFM模型
- RFM模型的作用
- 数据源
- 数据清洗
- 统计各字段信息
- 描述性统计信息
- 模型分析
- Recency描述性统计
- Frequency描述性统计
- Monetary描述性统计
- 确定R、F、M值并对用户分类
- 基于统计模型来分类RFM模型
- K-means Clustering
- RFM模型的局限
什么是RFM模型
首先,RFM是三个指标的缩写
Recency:最近一次消费距离现在的时间,该值越小越好
Frequency:某段时间内的消费次数,这个值越大越好
Monetary:某段时间内的消费金额,对于企业来说,消费自然越多越好
这三个维度需要根据实际业务确定。
RFM模型的作用
RFM模型通常用来衡量客户的价值和客户的创利能力,我们把3个指标按价值从低到高排序,并把三个指标作为XYZ轴,就可以把空间分为8部分,进而把用户划分为8类。这样就可以对不同价值的用户采用不同的营销策略,对症下药,最大化挖掘用户的价值,同时最大程度的节省公司资源,即实现所谓的精细化运营
数据源
数据来源于英国在线零售数据。数据里涵盖了从2010年12月1号到2011年12月9号期间在英国注册的在线零售店发生的所有交易。该公司主要销售一些通用的节日礼品,其客户许多都是批发商。
主要字段信息:
info | name | info | name |
---|---|---|---|
InvoiceNo |
发票编号 c开头,表示取消 |
StockCode | 产品代码 |
Description | 产品名 | Quantity | 产品数量 |
InvoiceDate | 发票日期 | UnitPrice |
单价 英镑单位的产品价格 |
CustomerID | 客户编码 | Country | 每个客户所在的国家 |
数据清洗
from pandas import DataFrame,read_csv,Series,value_counts,concat
from sklearn.preprocessing import StandardScaler
from datetime import datetime
from copy import deepcopy
import numpy as np
import matplotlib.pyplot as plt
datas = read_csv("./datasets/Online Retail.csv")
datas.head()
InvoiceNo | StockCode | Description | Quantity | InvoiceDate | UnitPrice | CustomerID | Country | |
---|---|---|---|---|---|---|---|---|
0 | 536365 | 85123A | WHITE HANGING HEART T-LIGHT HOLDER | 6 | 2010/12/1 8:26 | 2.55 | 17850.0 | United Kingdom |
1 | 536365 | 71053 | WHITE METAL LANTERN | 6 | 2010/12/1 8:26 | 3.39 | 17850.0 | United Kingdom |
2 | 536365 | 84406B | CREAM CUPID HEARTS COAT HANGER | 8 | 2010/12/1 8:26 | 2.75 | 17850.0 | United Kingdom |
3 | 536365 | 84029G | KNITTED UNION FLAG HOT WATER BOTTLE | 6 | 2010/12/1 8:26 | 3.39 | 17850.0 | United Kingdom |
4 | 536365 | 84029E | RED WOOLLY HOTTIE WHITE HEART. | 6 | 2010/12/1 8:26 | 3.39 | 17850.0 | United Kingdom |
datas.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 541909 entries, 0 to 541908
Data columns (total 8 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 InvoiceNo 541909 non-null object 1 StockCode 541909 non-null object 2 Description 540455 non-null object 3 Quantity 541909 non-null int64 4 InvoiceDate 541909 non-null datetime64[ns]5 UnitPrice 541909 non-null float64 6 CustomerID 406829 non-null object 7 Country 541909 non-null object
dtypes: datetime64[ns](1), float64(1), int64(1), object(5)
memory usage: 33.1+ MB
统计各字段信息
def calc_info(datas):columns=["Types","Counts","Distincts","Nulls","Missing_ratio","Uniques","Skew","Kurt"]df = DataFrame(0,columns=columns,index=datas.columns)df.Types = datas.apply(np.dtype)df.Counts = datas.count()#总计df.Distincts = datas.apply(value_counts).count()#唯一值出现次数df.Nulls = datas.isnull().sum()#缺失值df.Missing_ratio = datas.isnull().sum()/datas.shape[0]*100df.Uniques = datas.apply(Series.unique,axis=0)#唯一值df.Skew = datas[["Quantity","UnitPrice"]].skew()#偏度df.Kurt = datas[["Quantity","UnitPrice"]].kurtosis()#峰度return df.sort_values("Counts")
df1 = calc_info(datas)
df1
Types | Counts | Distincts | Nulls | Missing_ratio | Uniques | Skew | Kurt | |
---|---|---|---|---|---|---|---|---|
CustomerID | object | 406829 | 4372 | 135080 | 24.926694 | [17850.0, 13047.0, 12583.0, 13748.0, 15100.0, ... | NaN | NaN |
Description | object | 540455 | 4223 | 1454 | 0.268311 | [WHITE HANGING HEART T-LIGHT HOLDER, WHITE MET... | NaN | NaN |
InvoiceNo | object | 541909 | 25900 | 0 | 0.000000 | [536365, 536366, 536367, 536368, 536369, 53637... | NaN | NaN |
StockCode | object | 541909 | 4070 | 0 | 0.000000 | [85123A, 71053, 84406B, 84029G, 84029E, 22752,... | NaN | NaN |
Quantity | int64 | 541909 | 722 | 0 | 0.000000 | [6, 8, 2, 32, 3, 4, 24, 12, 48, 18, 20, 36, 80... | -0.264076 | 119769.160031 |
InvoiceDate | datetime64[ns] | 541909 | 23260 | 0 | 0.000000 | [2010-12-01T08:26:00.000000000, 2010-12-01T08:... | NaN | NaN |
UnitPrice | float64 | 541909 | 1630 | 0 | 0.000000 | [2.55, 3.39, 2.75, 7.65, 4.25, 1.85, 1.69, 2.1... | 186.506972 | 59005.719097 |
Country | object | 541909 | 38 | 0 | 0.000000 | [United Kingdom, France, Australia, Netherland... | NaN | NaN |
描述性统计信息
datas.describe()
Quantity | UnitPrice | |
---|---|---|
count | 541909.000000 | 541909.000000 |
mean | 9.552250 | 4.611114 |
std | 218.081158 | 96.759853 |
min | -80995.000000 | -11062.060000 |
25% | 1.000000 | 1.250000 |
50% | 3.000000 | 2.080000 |
75% | 10.000000 | 4.130000 |
max | 80995.000000 | 38970.000000 |
redatas = datas.dropna()
redatas.shape
(406829, 8)
redatas = redatas[(redatas.Quantity>0)&(redatas.UnitPrice>0)]
redatas.shape
(397884, 8)
df2 = calc_info(redatas)
df2
Types | Counts | Distincts | Nulls | Missing_ratio | Uniques | Skew | Kurt | |
---|---|---|---|---|---|---|---|---|
InvoiceNo | object | 397884 | 18532 | 0 | 0.0 | [536365, 536366, 536367, 536368, 536369, 53637... | NaN | NaN |
StockCode | object | 397884 | 3665 | 0 | 0.0 | [85123A, 71053, 84406B, 84029G, 84029E, 22752,... | NaN | NaN |
Description | object | 397884 | 3877 | 0 | 0.0 | [WHITE HANGING HEART T-LIGHT HOLDER, WHITE MET... | NaN | NaN |
Quantity | int64 | 397884 | 301 | 0 | 0.0 | [6, 8, 2, 32, 3, 4, 24, 12, 48, 18, 20, 36, 80... | 409.892972 | 178186.243253 |
InvoiceDate | datetime64[ns] | 397884 | 17282 | 0 | 0.0 | [2010-12-01T08:26:00.000000000, 2010-12-01T08:... | NaN | NaN |
UnitPrice | float64 | 397884 | 440 | 0 | 0.0 | [2.55, 3.39, 2.75, 7.65, 4.25, 1.85, 1.69, 2.1... | 204.032727 | 58140.396673 |
CustomerID | object | 397884 | 4338 | 0 | 0.0 | [17850.0, 13047.0, 12583.0, 13748.0, 15100.0, ... | NaN | NaN |
Country | object | 397884 | 37 | 0 | 0.0 | [United Kingdom, France, Australia, Netherland... | NaN | NaN |
模型分析
为了方便后面对消费金额(M)的分析,我们根据销售数量和单价新增销售额(amount)字段
Recency描述性统计
本数据集的交易时间范围(InvoiceDate):2010/12/1-2011/12/9
将当前时间定义为2011/12/10,那么Recency为客户最后一次购买时间距离当前时间的间隔
4338个客户的Recency的描述性统计信息如下:最后一次购买时间距离当前时间的最小值为1天,最大值为374天,平均值为92天。
df = redatas.InvoiceDate.to_frame()
df.index = redatas.CustomerID
df.head()
InvoiceDate | |
---|---|
CustomerID | |
17850 | 2010-12-01 08:26:00 |
17850 | 2010-12-01 08:26:00 |
17850 | 2010-12-01 08:26:00 |
17850 | 2010-12-01 08:26:00 |
17850 | 2010-12-01 08:26:00 |
ids = set(list(df.index))
gdatas = df.groupby(by="CustomerID")
now = datetime.strptime("2011/12/10","%Y/%m/%d")
Recency = DataFrame(columns=ids,index=["recency"])
for ii in ids:Recency[ii] = -(df[df.index==ii]-now).max()[0].days
Recency
16384 | 16385 | 16386 | 16387 | 16389 | 16392 | 16393 | 16394 | 16395 | 16398 | ... | 16369 | 16370 | 16372 | 16374 | 16376 | 16377 | 16378 | 16379 | 16380 | 16383 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
recency | 90 | 61 | 29 | 323 | 54 | 270 | 3 | 57 | 61 | 155 | ... | 19 | 83 | 34 | 67 | 9 | 268 | 248 | 5 | 62 | 75 |
1 rows × 4338 columns
recency = Recency.T.describe().T
recency
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
recency | 4338.0 | 93.059474 | 100.012264 | 1.0 | 18.0 | 51.0 | 142.75 | 374.0 |
fig,ax = plt.subplots(figsize=(8,5))
Recency.T.hist(bins=50,density=True,ax=ax)
ax.set_xlabel('Recency')
ax.set_ylabel('Frequency')
plt.show()
Frequency描述性统计
统计用户在分析期间的消费频次,最少1次,最大209次,平均消费次数为4.27次。
Frequency = DataFrame(columns=ids,index=["frequency"])
for ii in ids:invo = redatas[redatas.CustomerID==ii].InvoiceNoFrequency[ii] = invo.value_counts().shape[0]
Frequency
16384 | 16385 | 16386 | 16387 | 16389 | 16392 | 16393 | 16394 | 16395 | 16398 | ... | 16369 | 16370 | 16372 | 16374 | 16376 | 16377 | 16378 | 16379 | 16380 | 16383 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
frequency | 2 | 3 | 2 | 1 | 4 | 1 | 13 | 5 | 5 | 2 | ... | 3 | 4 | 2 | 2 | 2 | 1 | 3 | 4 | 1 | 2 |
1 rows × 4338 columns
frequency = Frequency.T.describe().T
frequency
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
frequency | 4338.0 | 4.272015 | 7.697998 | 1.0 | 1.0 | 2.0 | 5.0 | 209.0 |
fig,ax = plt.subplots(ncols=2,figsize=(16,5))
Frequency.T.hist(bins=50,density=True,ax=ax[0])
ax[0].set_xlabel('Frequency')
ax[0].set_ylabel('Frequency')
Frequency[Frequency<50].T.hist(bins=12,density=True,ax=ax[1])
ax[1].set_xlabel('Frequency')
ax[1].set_ylabel('Frequency')
Monetary描述性统计
redatas["amount"] = redatas.Quantity*redatas.UnitPrice
Monetary = DataFrame(columns=ids,index=["monetary"])
for ii in ids:Monetary[ii] = redatas[redatas.CustomerID==ii].amount.sum()
Monetary
16384 | 16385 | 16386 | 16387 | 16389 | 16392 | 16393 | 16394 | 16395 | 16398 | ... | 16369 | 16370 | 16372 | 16374 | 16376 | 16377 | 16378 | 16379 | 16380 | 16383 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
monetary | 584.5 | 555.89 | 317.2 | 94.36 | 1382.07 | 221.19 | 3046.21 | 1555.34 | 1486.9 | 1705.8 | ... | 1553.66 | 1320.56 | 367.93 | 473.03 | 987.01 | 676.2 | 362.95 | 2157.4 | 1780.59 | 668.36 |
1 rows × 4338 columns
monetary = Monetary.T.describe().T
monetary
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
monetary | 4338.0 | 2054.26646 | 8989.230441 | 3.75 | 307.415 | 674.485 | 1661.74 | 280206.02 |
fig,ax = plt.subplots(ncols=2,figsize=(16,5))
Monetary.T.hist(bins=50,density=True,ax=ax[0])
ax[0].set_xlabel('Monetary')
ax[0].set_ylabel('Frequency')
Monetary[Monetary<50000].T.hist(bins=8,density=True,ax=ax[1])
ax[1].set_xlabel('Monetary')
ax[1].set_ylabel('Frequency')
确定R、F、M值并对用户分类
rfm = concat([Recency,Frequency,Monetary],axis=0)
rfm = rfm.T
rfm.insert(0,"CustomerID",rfm.index)
rfm = rfm.sort_values(by="CustomerID")
rfm = rfm.set_index(np.arange(rfm.shape[0]))
rfm.head()
CustomerID | recency | frequency | monetary | |
---|---|---|---|---|
0 | 12346 | 326.0 | 1.0 | 77183.60 |
1 | 12347 | 3.0 | 7.0 | 4310.00 |
2 | 12348 | 76.0 | 4.0 | 1797.24 |
3 | 12349 | 19.0 | 1.0 | 1757.55 |
4 | 12350 | 311.0 | 1.0 | 334.40 |
利用各指标的四分位数进行划分。
以Recency为例,其下四分位数为18,中位数为51,上四分位数为142。
- 当Recency小于18时,记R值为1;
- 当Recency在18到51之间时,R值记为2;
- 当Recency在51-142之间时,R值记为3;
- 当Recency大于142时,R值记为4。
具体如下表所示
<25% | 25%-50% | 50%-75% | >75% | |
---|---|---|---|---|
R | 1 | 2 | 3 | 4 |
F | 4 | 3 | 2 | 1 |
M | 4 | 3 | 2 | 1 |
def quantile(datas):rq = []xx = datas.describe().values[4:7]for i,da in datas.iteritems():if da > xx[2]:ii = 1elif da > xx[1]:ii = 2elif da > xx[0]:ii = 3else:ii = 4rq.append(ii)return np.array(rq)
rfm["r_quantile"] = 5-quantile(rfm.recency)
rfm["f_quantile"] = quantile(rfm.frequency)
rfm["m_quantile"] = quantile(rfm.monetary)
rfm["RFMScore"] = rfm.r_quantile*100+rfm.f_quantile*10+rfm.m_quantile
rfm.head()
CustomerID | recency | frequency | monetary | r_quantile | f_quantile | m_quantile | RFMScore | |
---|---|---|---|---|---|---|---|---|
0 | 12346 | 326.0 | 1.0 | 77183.60 | 4 | 4 | 1 | 441 |
1 | 12347 | 3.0 | 7.0 | 4310.00 | 1 | 1 | 1 | 111 |
2 | 12348 | 76.0 | 4.0 | 1797.24 | 3 | 2 | 1 | 321 |
3 | 12349 | 19.0 | 1.0 | 1757.55 | 2 | 4 | 1 | 241 |
4 | 12350 | 311.0 | 1.0 | 334.40 | 4 | 4 | 3 | 443 |
每个用户根据其Recency、Frequency、Monetary的大小都有了自己的R值、F值、M值,将其组合起来即为每个客户的RFM得分,该分数越小表示客户价值越高。
R分段 | 得分 | F分段 | 得分 | M分段 | 得分 |
---|---|---|---|---|---|
活跃用户 | 1 | 忠实客户 | 1 | 高贡献 | 1 |
沉默用户 | 2 | 成熟客户 | 2 | 中高贡献 | 2 |
睡眠用户 | 3 | 老客户 | 3 | 中贡献 | 3 |
流失用户 | 4 | 新客户 | 4 | 低贡献 | 4 |
据此打分,我们就可以对用户进行分类
RFM Level | RFM Score | R | F | M |
---|---|---|---|---|
1 | 111~121 |
1 1 |
1 2 |
1~ 4 1 |
2 | 122~222 |
1 1 2 2 |
2 3~ 4 1 2 |
2~ 4 1~ 4 1~ 4 1~ 2 |
3 | 223~332 |
2 2 3 3 |
2 3~ 4 1~ 2 3 |
3~ 4 1~ 4 1~ 4 1~ 2 |
4 | 333~444 |
3 3 4 |
3 4 1~ 4 |
3~ 4 1~ 4 1~ 4 |
- 0 - 122, 最有价值客户,价格不会是很敏感,所以主要推广忠实项目和新品
- 122 - 223,快要逐渐失去的客户,需要通过人工短信或电话联系,针对性召回
- 223 - 333, 最近没怎么购买的有价值客户,需要进一步激活,给一下打折,做一波推广
可以根据业务需要进一步细分.
基于统计模型来分类RFM模型
K-means Clustering
def calc_sl(rfm):rfmC = deepcopy(rfm)SS = {110:1,121:2,222:3,332:4}sl = []for sc in rfmC.RFMScore:for sk,sv in SS.items():if sc > sk:ll = svsl.append(ll)rfmC["RFMScore_Level"] = slreturn rfmC
#经过分类处理后的用户数据如下
rfmC = calc_sl(rfm)
rfmC.head()
CustomerID | recency | frequency | monetary | r_quantile | f_quantile | m_quantile | RFMScore | RFMScore_Level | |
---|---|---|---|---|---|---|---|---|---|
0 | 12346 | 326.0 | 1.0 | 77183.60 | 4 | 4 | 1 | 441 | 4 |
1 | 12347 | 3.0 | 7.0 | 4310.00 | 1 | 1 | 1 | 111 | 1 |
2 | 12348 | 76.0 | 4.0 | 1797.24 | 3 | 2 | 1 | 321 | 3 |
3 | 12349 | 19.0 | 1.0 | 1757.55 | 2 | 4 | 1 | 241 | 3 |
4 | 12350 | 311.0 | 1.0 | 334.40 | 4 | 4 | 3 | 443 | 4 |
## 各字段的描述性统计信息
rfmC.drop(columns=["CustomerID","RFMScore_Level"]).describe()
recency | frequency | monetary | r_quantile | f_quantile | m_quantile | RFMScore | |
---|---|---|---|---|---|---|---|
count | 4338.000000 | 4338.000000 | 4338.000000 | 4338.000000 | 4338.000000 | 4338.000000 | 4338.000000 |
mean | 93.059474 | 4.272015 | 2054.266460 | 2.494237 | 2.679806 | 2.500000 | 278.721761 |
std | 100.012264 | 7.697998 | 8989.230441 | 1.122059 | 1.143825 | 1.118369 | 119.256757 |
min | 1.000000 | 1.000000 | 3.750000 | 1.000000 | 1.000000 | 1.000000 | 111.000000 |
25% | 18.000000 | 1.000000 | 307.415000 | 1.000000 | 2.000000 | 1.250000 | 144.000000 |
50% | 51.000000 | 2.000000 | 674.485000 | 2.000000 | 3.000000 | 2.500000 | 244.000000 |
75% | 142.750000 | 5.000000 | 1661.740000 | 3.750000 | 4.000000 | 3.750000 | 394.250000 |
max | 374.000000 | 209.000000 | 280206.020000 | 4.000000 | 4.000000 | 4.000000 | 444.000000 |
rfm_log = DataFrame()
rfm_log["recency_log"] = rfm.recency.apply(np.log10)
rfm_log["frequency_log"] = rfm.frequency.apply(np.log10)
rfm_log["monetary_log"] = rfm.monetary.apply(np.log10)
rfm_log.tail()
recency_log | frequency_log | monetary_log | |
---|---|---|---|
4333 | 5.627621 | 0.000000 | 5.196285 |
4334 | 5.198497 | 0.000000 | 4.392224 |
4335 | 2.079442 | 0.693147 | 5.182064 |
4336 | 1.386294 | 2.772589 | 7.647252 |
4337 | 3.761200 | 1.098612 | 7.516041 |
fig,ax = plt.subplots(ncols=2,figsize=(16,5))
ax[0].scatter(rfm_log.recency_log,rfm_log.monetary_log)
ax[0].grid()
ax[0].set_xlabel("recency_log")
ax[0].set_ylabel("monetary_log")
ax[1].scatter(rfm_log.frequency_log,rfm_log.monetary_log)
ax[1].grid()
ax[1].set_xlabel("frequency_log")
ax[1].set_ylabel("monetary_log")
def standardized(data):ss = StandardScaler().fit(data)return ss.transform(data)
rfmlog = standardized(rfm_log)
rfmlog = DataFrame(rfmlog,columns=rfm_log.columns)
rfmlog.head()
recency_log | frequency_log | monetary_log | |
---|---|---|---|
0 | 1.435416 | -1.048610 | 3.698719 |
1 | -1.953393 | 1.111836 | 1.410201 |
2 | 0.382865 | 0.490522 | 0.716419 |
3 | -0.619183 | -1.048610 | 0.698706 |
4 | 1.401368 | -1.048610 | -0.617446 |
rfmlog.describe().T
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
recency_log | 4338.0 | -2.147146e-16 | 1.000115 | -2.747497 | -0.658264 | 0.094524 | 0.838502 | 1.534703 |
frequency_log | 4338.0 | -2.355833e-16 | 1.000115 | -1.048610 | -1.048610 | -0.279044 | 0.738267 | 4.882714 |
monetary_log | 4338.0 | -1.099986e-16 | 1.000115 | -4.179280 | -0.684183 | -0.060942 | 0.654244 | 4.721395 |
fig,ax = plt.subplots(ncols=2,figsize=(16,5))
ax[0].scatter(rfmlog.recency_log,rfmlog.monetary_log)
ax[0].grid()
ax[0].set_xlabel("recency_log")
ax[0].set_ylabel("monetary_log")
ax[1].scatter(rfmlog.frequency_log,rfmlog.monetary_log)
ax[1].grid()
ax[1].set_xlabel("frequency_log")
ax[1].set_ylabel("monetary_log")
from sklearn.cluster import KMeans
from mpl_toolkits.mplot3d import Axes3D
kmeans = KMeans(n_clusters=4)
labels = kmeans.fit_predict(rfmlog)
C = kmeans.cluster_centers_
fig = plt.figure(figsize=(9,6))
ax = Axes3D(fig,auto_add_to_figure=False)
fig.add_axes(ax)
ax.scatter(rfmlog.recency_log, rfmlog.frequency_log, rfmlog.monetary_log,c=labels)
ax.scatter(C[:, 0], C[:, 1], C[:, 2], marker='*', c='r', s=1000)
ax.set_xlabel("recency_log")
ax.set_ylabel("frequency_log")
ax.set_zlabel("monetary_log")
RFM模型的局限
RFM模型并不是万能的,具有相当多的局限性。尤其是在结合行业、产品特征来深入分析的时候,并不一定会符合模型。例如:
R值:对于手机电脑等电子产品,甚至房屋,汽车等大消费品,间隔时间或1-2年,或5-10年,或更久,此时R值大并不能说明用户流失风险高。
F值:如果某用户是忠诚的活动用户,啥时候有活动就啥时候买东西;或者用户固定每个月购买理财产品,这些行为都会导致F值可能是随机产生的,或是人为操控的,不太具有代表性。
M值:用户过去消费高并不一定代表未来消费高,例如购买耐用品可能一单可以用几年;或者用户趁开业活动薅羊毛囤货,都可能带来较高的M值。
python 在线零售分析相关推荐
- 利用Python进行数据分析之超市零售分析
Author Bryce230 e-mail iswangjt@163.com Software win10,Pycharm2019.3.3,Python3.7.7,jupyter notebook ...
- 电商客户消费预测模型-基于数千万真实在线零售数据__企业调研_论文科研_毕业设计
之前发过 <谁主沉浮?银行,消金,互联网公司的精准营销_智慧营销完全解读>介绍了智慧营销/精准营销目的是降低运营成本.但精准营销可以带来很多额外收益,例如提高销售利润,提高客户忠诚度,降低 ...
- NLP实战:利用Python理解、分析和生成文本 | 赠书
导读:本文内容参考自<自然语言处理实战:利用Python理解.分析和生成文本>一书,由Hobson Lane等人所著. 本书是介绍自然语言处理(NLP)和深度学习的实战书.NLP已成为深度 ...
- python在线-python+在线
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 百度语音提供了语音识别.语音合成和语音唤醒等产品的sdk免费资源,是面向 ...
- python在线投票系统 统计票数_分层分平台,让每个学生享受教育公平 ——冯敬益老师的Python编程教学探索...
在2月24日学校线上教学之前,冯敬益老师已早早告别了假期模式,投入到网络课程的建设之中. 为了让自己的课堂教学更有针对性,冯老师就任教的班级就同学们的学习条件展开调查.经统计,18-4H总人数28人, ...
- python商业分析_科研进阶 | 纽约大学 | 商业分析、量化金融:基于Python的商业分析工具...
科研进阶 | 纽约大学 | 商业分析.量化金融:基于Python的商业分析工具(8.22开课)mp.weixin.qq.com 课题名称 = 基于Python的商业分析工具 = 项目背景 数据分析为 ...
- python模型预测_《Python机器学习——预测分析核心算法》——1.5 构建预测模型的流程...
本节书摘来异步社区<Python机器学习--预测分析核心算法>一书中的第1章,第1.5节,作者:[美]Michael Bowles(鲍尔斯),更多章节内容可以访问云栖社区"异步社 ...
- Python在线办公系统毕业设计源码071116
Python在线办公系统 摘 要 一个企业实现办公自动化的程度是衡量其实现现代化管理的标准.办公自动化就是采用Internet技术,基于工作流的概念,使企业内部人员方便快捷地共享信息,高效协同工作. ...
- 在线零售的未来看起来就是网红的带货直播
直播购物活动已成为在线购物的最新前沿.沃尔玛.亚马逊.古驰和欧莱雅等各种零售商和品牌正在试验新的流媒体格式,以销售越来越多的美容产品.服装.电子产品和家居用品. 这些活动在 Facebook.Inst ...
最新文章
- 新工具一键安装Java环境!微软又双叒叕造福开发者
- 解决Outlook带有附件的邮件重复发送的问题
- eclipse中查看android源码
- idea+maven下jrebel的安装破解
- 解压版本的tomcat服务安装
- OPENCV-5 学习笔记
- 突然讨厌做前端,讨厌代码_有关互联网用户最讨厌的广告类型的新数据
- Flask werkzeug 源码解析
- 安卓手机备份_备份安卓手机中的APK安装文件?小编这儿有4种方法
- C语言判断点是否在矩阵内
- 微课|中学生可以这样学Python(8.4节):递归算法例题讲解2
- python数据分析要学多久_如何七周成为数据分析师18:Python的新手教程
- 解决使用elementUI框架el-upload上传组件时session丢失问题
- java架构-Spring MVC 与 Servlet
- wince下的地址映射知识点滴
- Mac vscode花屏问题解决
- 家(单位)电信宽带,50M上行带宽,不用浪费了,发布Web(网站)应用刚好
- 浅析Python文件操作
- java零项目经验,找工作前该如何准备项目?面试时又该怎么说?
- 新人职场要淡定 情商比智商更重要
热门文章
- QAD的“炫富挑战”Accepted
- 亚马逊AWS:一个字头的诞生
- 使用jasypt3.0默认加密,启动时报:Failed to bind properties under ‘xxx.xxx.xxx‘ to java.lang.String
- php 下载地址提取,PHP提取emule下载ed2k链接
- scrapy框架下设置代理ip
- 51的庞升东才是彩虹QQ幕后?
- 修改网站地址栏小图标
- win7 安装双系统centos7
- 互联网金融时代,必看的六种理财模式------------王艾老哥浅析
- 工程量计算稿_如何从工程图或线稿中删除背景