基于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

Logo

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

更多推荐