一、数据挖掘的建模过程:
1.1定义挖掘目标:
1.1.1动态的菜品推荐
1.1.2客户进行细分,关注最有价值的客户
1.1.3基于菜品的历史销售情况,对菜品销量进行预测,预备原材料
1.1.4基于大数据,优化选址,菜式调整
1.2数据取样
随机抽样,分类抽样,等距抽样
1.3数据探索
1.3.1异常值分析
1.3.2缺失值分析
1.3.3相关性分析
1.3.4周期性分析
1.4数据预处理
1.4.1缺失值处理
1.4.2异常值处理
1.4.3数据降维
1.5挖掘建模
1.5.1关联规则:智能推荐
1.5.2聚类算法:客户价值分析
1.5.3分类预测:菜品销量,新店选址
1.6模型评价
SAS
SPSS
SQL SERVER
PYTHON
WEKA
KNIME
RAPIDMINER
TIPDM
#-*-coding:utf-8-*-# import pandas as pd catering_sale = 'catering_sale.xls' data=pd.read_excel(catering_sale,index_col=u'日期') print data.describe() print len(data) ''' count 200.000000 mean 2755.214700 std 751.029772 min 22.000000 25% 2451.975000 50% 2655.850000 75% 3026.125000 max 9106.440000 201 ''' import matplotlib.pyplot as plt #导入图像库 plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 plt.figure() #建立图像 p = data.boxplot(return_type='dict') #画箱线图,直接使用DataFrame的方法 x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签 y = p['fliers'][0].get_ydata() y.sort() #从小到大排序,该方法直接改变原对象 #用annotate添加注释 #其中有些相近的点,注解会出现重叠,难以看清,需要一些技巧来控制。 #以下参数都是经过调试的,需要具体问题具体调试。 for i in range(len(x)): if i>0: plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i])) else: plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i])) plt.show() #展示箱线图
#-*-coding:utf-8-*-# import pandas as pd ''' catering_sale = 'catering_sale.xls' data = pd.read_excel(catering_sale) data = data[(data[u'销量']>400)&(data[u'销量']<5000)] statistics = data.describe() ''' dish_profile='catering_dish_profit.xls' data=pd.read_excel(dish_profile,index_col=u'菜品名') data=data[u'盈利'].copy() data.sort(ascending = False) import matplotlib.pyplot as plt #导入图像库 plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 #贡献率分析--------帕累托法则,百分之八十的李瑞常常来自于百分之二十最畅销的产品 plt.figure() data.plot(kind='bar') plt.ylabel(u'盈利(元)') p = 1.0*data.cumsum()/data.sum()#累计的曲线图 p.plot(color='r',secondary_y=True,style='-o',linewidth=2) #第一个是值,第二个是目标位置,第三个是标记位置,最后一个是箭头的样式 plt.annotate(format(p[6], '.4%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #添加注释,即85%处的标记。这里包括了指定箭头样式。 plt.ylabel(u'盈利(比例)') plt.show()
#-*- coding:utf-8 -*- import pandas as pd import numpy as np ''' catering_sale='catering_sale_all.xls' data=pd.read_excel(catering_sale) print data.corr(method='spearman') print data.corr()[u'百合酱蒸凤爪'] print data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']) ''' data=pd.DataFrame(np.random.randn(6,5)) data2=pd.DataFrame([range(0,7),range(1,8)]) print data print data2 s1=data2.loc[0] s2=data2.loc[1] print s1.corr(s2) ''' cumsum rolling_sum ''' data=pd.Series(range(0,10)) print data print data.cumsum() print pd.rolling_sum(data,2) #x=range(0,10) x=np.linspace(0,10) y=np.sin(x) ''' plot ''' import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 plt.figure(1) plt.plot(x,y,'b*--') plt.show() ''' pie ''' plt.figure(2) labels='Frogs','Hogs','Dogs','Logs'#标签 sizes=[15,30,45,10]#每块大小 colors=['yellowgreen','gold','lightskyblue','lightcoral']#每块颜色 explode=[0,0.1,0,0]#突出显示 plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=90) plt.axis('equal')#显示为圆,避免压缩显示为椭圆 plt.show() plt.figure(3) x=np.random.randn(1000) plt.hist(x,10)#第二个参数为间隔 plt.show() plt.figure(4) x=np.random.randn(1000) D=pd.DataFrame([x,x+1]).T D.plot(kind='box') plt.show() plt.figure(5) x=pd.Series(np.exp(np.arange(200))) x.plot(label=u'原始数据',legend=True) plt.show() x.plot(logy=True,label=u'对数数据图',legend=True) plt.show() plt.figure(6) error = np.random.randn(10) y=pd.Series(np.sin(np.arange(10))) print 'error:',error,'y:',y y.plot(yerr = error) plt.show()