一、项目前言
Yelp是美国著名商户点评网站,创立于2004年,囊括各地餐馆、购物中心、酒店、旅游等领域的商户,用户可以在Yelp网站中给商户打分,提交评论,交流购物体验等。在Yelp中搜索一个餐厅或者旅馆,能看到它的简要介绍以及网友的点论,点评者还会给出多少星级的评价,通常点评者都是亲身体验过该商户服务的消费者,评论大多形象细致。因此对其数据进行分析与可视化。
该项目基于一次实训做出的大数据分析,因此以下内容主要为了记录与介绍我所完成的工作内容。
二、数据源
下载地址:Yelp Dataset
三、数据源文件说明
3.1 business表(yelp_academic_dataset_business.json)
字段名 | 类型 | 说明 | 备注 |
business_id | string | 22 character unique string business id | |
name | string | the business's name | |
address | string | the full address of the business | |
city | string | the city | |
state | string | 2 character state code, if applicable | |
postal code | string | the postal code | |
latitude | float | latitude | |
longitude | float | longitude | |
stars | float | star rating, rounded to half-stars | 平均评分 |
review_count | integer | number of reviews | |
is_open | integer | 0 or 1 for closed or open, respectively | |
attributes | object | business attributes to values. note: some attribute values might be objects | 属性、设施 |
categories | array | an array of strings of business categories | 类别 |
hours | object | an object of key day to value hours, hours are using a 24hr clock | 开门时间 |
3.2 review表(yelp_academic_dataset_review.json)
字段名 | 类型 | 说明 | 备注 |
review_id | string | 22 character unique review id | |
user_id | string | 22 character unique user id, maps to the user in user.json | |
business_id | string | 22 character business id, maps to business in business.json | |
stars | integer | star rating | |
date | string | date formatted YYYY-MM-DD | |
text | string | the review itself | |
useful | integer | number of useful votes received | |
funny | integer | number of funny votes received | |
cool | integer | number of cool votes received |
四、使用的平台及语言
主要使用了Ambari管理Hadoop集群,其中HDFS实现分布式存储,YARN提供计算,HIVE建表,zeppelin实现可视化。部分功能比如生成词云、关系图这些zeppelin无法实现(主要是zeppelin导入不了外部依赖,我在网上查了很久也没有找到解决办法)因此转移到了pycharm中实现。
语言是使用的pyspark。
五、项目功能实现
5.1 准备数据创建HIVE表
这里先用了xshell中的xftp来把下载好的文件传入hdfs中以便于建表。
上传数据完成后我们就可以开始创建HIVE表进行大数据分析:
5.1.1 创建business 外部表并解析数据
CREATE TABLE business
(
business_id string,
name string,
address string,
city string,
state string,
postal_code string,
latitude float,
longitude float,
stars float,
review_count int,
is_open tinyint,
attributes string,
categories string,
hours string
);
FROM json_business
INSERT
OVERWRITE
TABLE
business
SELECT get_json_object(json_body, '$.business_id'),
get_json_object(json_body, '$.name'),
get_json_object(json_body, '$.address'),
get_json_object(json_body, '$.city'),
get_json_object(json_body, '$.state'),
get_json_object(json_body, '$.postal_code'),
get_json_object(json_body, '$.latitude'),
get_json_object(json_body, '$.longitude'),
get_json_object(json_body, '$.stars'),
get_json_object(json_body, '$.review_count'),
get_json_object(json_body, '$.is_open'),
cast(get_json_object(json_body, '$.attributes') AS string),
get_json_object(json_body, '$.categories'),
get_json_object(json_body, '$.hours');
5.1.2 创建review 外部表并解析数据
CREATE TABLE review
(
review_id string,
rev_user_id string,
rev_business_id string,
rev_stars int,
rev_useful int,
rev_funny int,
rev_cool int,
rev_text string,
rev_timestamp string,
rev_date date
);
FROM json_review
INSERT
OVERWRITE
TABLE
review
SELECT get_json_object(json_body, '$.review_id'),
get_json_object(json_body, '$.user_id'),
get_json_object(json_body, '$.business_id'),
get_json_object(json_body, '$.stars'),
get_json_object(json_body, '$.useful'),
get_json_object(json_body, '$.funny'),
get_json_object(json_body, '$.cool'),
regexp_replace(regexp_replace(get_json_object(json_body, '$.text'), '\n', ' '), '\r', ' '),
get_json_object(json_body, '$.date'),
cast(substr(get_json_object(json_body, '$.date'), 0, 10) as date);
5.2 Zeppelin实现可视化数据分析
5.2.1 商户分析
5.2.1.1 找出美国最常见商户(前20)
5.2.1.2 找出美国商户最多的前10个城市
5.2.1.3 找出美国商户最多的前5个州
5.2.1.4 找出美国最常见商户,并显示平均评分(前20)
5.2.1.5 统计评分最高的城市(前10)
5.2.1.6 统计category的数量
5.2.1.7统计最多的category及数量(前10)
5.2.1.8 收获五星评论最多的商户(前20)
5.2.1.9 统计不同类型(中国菜、美式、墨西哥)的餐厅类型及数量
5.2.1.10 统计不同类型(中国菜、美式、墨西哥)的餐厅的评论数量
5.2.1.11 统计不同类型(中国菜、美式、墨西哥)的餐厅的评分分布
5.2.2 评论分析
5.2.2.1 统计每年的评论数
5.2.2.2 统计有用(helpful)、有趣(funny)及酷(cool)的评论及数量
5.2.2.3 每年全部评论用户排行榜
5.2.2.4 从评论中提取最常见的Top20词语
5.2.2.5 计算单词的关系图
这部分我选取了cheese这个单词,是否有关系的判断逻辑是是否出现在同一评论中,且每个点越大说明该单词与cheese共同出现的次数越多。
5.2.3 综合分析,为餐饮类商家经营提供一些合理建议
5.2.3.1 商家设施服务方面:
通过筛选评分不小于4的餐馆所支持的排名前20位的设施服务可以给出一些建议:
1. 提供多元化的支付方式:接受多种支付方式,包括信用卡,可以为顾客提供更多的便利,从而提升他们的购物体验。
2. 注重设施的完善:提供停车位等设施,可以吸引更多的顾客,包括停车场、街边、代客泊车。
3. 提供便利的服务:提供外卖服务、预约服务、团体用餐等服务,可以满足顾客的不同需求,从而提升他们的满意度。
4. 营造良好的氛围:提供户外座位、电视、欢乐时光等,可以营造一个舒适和愉快的氛围,使顾客愿意在你的商家消费更多的时间。
5. 关注顾客的需求:提供一些就餐的特定氛围,可以显示出你的商家关注并满足顾客的个人需求。
5.2.3.2 商家价格设置方面:
1. 定价策略:大多数评分高的商家的价格等级为1或2,这表明顾客可能更倾向于价格适中的商家。因此,商家可能需要考虑他们的定价策略,确保他们的价格既能吸引顾客,又能拥有良好的利润。
2. 高端市场:尽管价格等级为3和4的商家数量较少,但这也可能意味着在高端市场上的竞争较小。如果商家提供的产品或服务具有高质量,并且能满足高端市场的需求,那么他们可能会在这个市场上取得成功。
5.2.3.3 商家选址方面:
选择评论数量多的城市:评论数量可以反映出该地区的商业活跃度和消费者的参与度。例如,Philadelphia、New Orleans、Nashville、Tampa和Tucson这些城市的评论数量较多,这可能意味着这些城市的消费者更愿意在Yelp上留下评论,从而为商家提供更多的反馈和曝光机会。
5.2.3.4 餐馆菜系选择:
夏威夷菜系的餐馆平均评分在4分以上,说明夏威夷菜在该地区的认可度较高,餐馆质量普遍较高。
六、总结
实训还是收获颇多,谨以此记录下第一次的大数据分析项目。谢谢你的观看!
源代码链接: https://pan.baidu.com/s/1jUad0qNBOnLopM2Poi-_jg 提取码: 1229
如果对你有帮助的话还希望能给个赞,谢谢!