基于hadoop的餐饮平台数据分析
餐饮外卖平台向广大用户提供网上订餐服务,其市场占有量在近年不断增加。当用户在Z平台订餐完成后,平台会引导用户对于品尝过的菜品进行评价打分,最高为5分,最低为1分。通过用户的评分数据,可以分析外卖平台的受欢迎度、客户的体验度,现总结为用户评分数据(见附件评分.txt)和菜品数据集(见附件菜品.txt)。要求如下:技术栈:hadoop,mapduce,hive(1)代码(2)运行结果(3)清洗后数据食
基于hadoop的餐饮平台数据分析
引言
餐饮外卖平台向广大用户提供网上订餐服务,其市场占有量在近年不断增加。当用户在Z平台订餐完成后,平台会引导用户对于品尝过的菜品进行评价打分,最高为5分,最低为1分。通过用户的评分数据,可以分析外卖平台的受欢迎度、客户的体验度,现总结为用户评分数据(见附件评分.txt)和菜品数据集(见附件菜品.txt)。要求如下:
技术栈:hadoop,mapduce,hive
1.创建数据库和表并导入数据。
2.数据清洗(通过mr程序去除缺失值、异常值等)
(1)代码
package com.itbys.test;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import java.io.IOException;
import java.util.*;
/**
* Author xx
* Date 2023/4/22
* Desc 数据清洗
*/
public class Test {
public static class Map extends Mapper<LongWritable, Text, Text, Text> {
Text k = new Text();
Text v = new Text();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//input: A6SQN5G68G4TKH,N/N,BO00H1HASD,NULL,1.0,N/N,20230415,666,同事们都很喜欢
String line = value.toString();
//清洗数据
if (line.length() > 0 && line.split(",").length == 9) {
String replace = line.trim().replace(",N/N", "").replace(",NULL", "");
k.set("1");
v.set(replace);
context.write(k, v);
}
}
}
public static class Reduce extends Reducer<Text, Text, Text, Text> {
Text v = new Text();
@Override
protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
//写出
for (Text value : values) {
v.set(value.toString());
context.write(null, v);
}
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
/**
* 本地运行
*/
// 1 获取配置信息以及封装任务
Configuration configuration = new Configuration();
Job job = Job.getInstance(configuration);
// 2 设置jar加载路径
job.setJarByClass(Test.class);
// 3 设置map和reduce类
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
// 4 设置map输出
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
// 5 设置最终输出kv类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
// 6 设置输入和输出路径
FileInputFormat.setInputPaths(job, new Path("input/"));
FileOutputFormat.setOutputPath(job, new Path("output/01"));
// 7 提交
boolean result = job.waitForCompletion(true);
System.exit(result ? 0 : 1);
}
}
(2)运行结果
(3)清洗后数据
3.数据探索(探索字段间的关系)
食物数据
评价数据
其中食物数据的第二列为菜品id和评价数据第二列一样,可以关联
4.数据统计分析(如:统计热门菜品和用户评分等)
1)根据用户评分数据统计日销量和日用户量
2)统计同时有评分和评分内容的记录
3)分析用户的评分分布情况,以百分比显示
4)统计10大热销菜品 ,按销售数量从高到低排序
5)统计10大评分为5的热销菜品,按销售数量从高到低排序
6)统计单日评分超过2次的用户数
7)找出评分次数超过两次的用户中,每个用户评分最高的记录
通过对餐饮平台提供的数据进行相应的处理,分析用户和菜品信息,为餐饮平台提供营销策略。
其他
疑问、完整代码和数据等可留言或ping我:ari.chen.cn@gmail.com

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)