关于一二线城市美食数据,包含字段:城市,菜系类型,餐馆名,综合评分,人均,点评数,口味,环境,服务,地址。
拿到数据先导入Jupyter Notebook做清洗,初处理,并且建模分析综合评分与三小类(口味,环境,服务)评分的关系。再导出Excel透视数据进行多维分析。
下面为正文:
from pandas import DataFrame
import pandas as pd
#若文件名含有中文,多做一步才能导进pandas
f = open('C:/数据/一二线城市美食07-26.csv')
data = pd.read_csv(f)
data[:2]
#对源数据做描述统计
data.describe()结果发现人均的最大值出现异常,决定把人均控制在1000以内
#删除数据中的异常值和空值
data=data.drop(data[data['人均']>1000].index,axis=0)
data=data.dropna()
data.count()
#最后剩下290831条数据
#输出综合评分与三小类评分的相关系数,高于0.6表示有继续建模的需要
print(data.corr())
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression
% matplotlib inline
#描绘散点图,发现存在的相关关系
sns.pairplot(data,x_vars=['口味','环境','服务'],y_vars='综合评分',size=7, aspect=0.8, kind='reg')
plt.show()画散点图和拟合线表现三小类与综合评分的关系
#建模前将分析字段的类型统一
data['综合评分'] = data['综合评分'].astype(float)
print(data.dtypes)
#建立模型,将数据分为两部分,一部分作为训练模型,一部分为检验模型
X_train,X_test,Y_train,Y_test = train_test_split(data.iloc[:,6:9],data.iloc[:,3],train_size=0.8)
model=LinearRegression()
model.fit(X_train,Y_train)
a = model.intercept_#截距
b = model.coef_#系数
print("拟合参数:截距:",a,",回归系数:",b)
print("最佳拟合线: Y = ",round(a,2),"+",round(b[0],2),"* X1 + ",round(b[1],2),"* X2 + ",round(b[2],2),"* X3")
#将模型预测值和样本真实值做对比
Y_pred = model.predict(X_test)
plt.plot(range(len(Y_pred)),Y_pred,'red', linewidth=1,label="predict data")
plt.plot(range(len(Y_test)),Y_test,'green',label="test data")
plt.legend(loc=2)
plt.show()
#将数据导出Excel,存为csv文件
data.to_csv('C:/0921.csv')
导入excel后主要以数据透视表作分析,
1、以菜系类型作维度,得到每种菜系人均消费的平均值,以蟹为主打的餐馆消费水平最高,接着是俄罗斯菜和日本菜。数据一共61种类型,截图截取前22种,总人均平均值为55.97元,可以说排名前五的属于高消费菜系。
2、以城市作维度,计算餐馆人均消费的平均值。一个城市各大餐馆的消费价格定位一定程度上体现了该城市人民在美食方面的消费水平。折线图展示上海和北京平均值大抛离其余城市,且高消费的蟹宴在上海分布最多,故小程度上拉高上海的平均值,但还是说明高消费水平城市的人民更注重美食,更懂得享受美食。
3、对餐馆名作透视,发现了国内餐饮连锁巨头。除了网传最多的“沙县小吃”,“兰州拉面”,“桂林米粉”,“黄焖鸡米饭”,不能小觑“重庆小面”,“重庆鸡公煲”的实力。
4、点评数跟该菜系下的餐馆开店数可反映受欢迎程度或人气热度,据结果,果然是这些年崛起的火锅热度最高,也是最多商家愿意参与的餐饮业。
总结:应用python里pandas模块对数据作初处理,分析了字段,缺失值,异常值。matplotlib模块画了简单图辅助分析方向。sklearn模块拟合了多元线性回归模型,不足在于综合评分实际是星级评分,可划等级,故选择逻辑回归模型可能会更佳。后面用excel作了多维度分析。数据缺失值较多,没有想到更好的办法有效补充缺失值,删掉的数据会影响到最后结果的全面性。