写点什么

数据分析实际案例之:pandas 在餐厅评分数据中的使用

作者:程序那些事
  • 2022 年 2 月 16 日
  • 本文字数:1326 字

    阅读完需:约 4 分钟

数据分析实际案例之:pandas在餐厅评分数据中的使用

简介

为了更好的熟练掌握 pandas 在实际数据分析中的应用,今天我们再介绍一下怎么使用 pandas 做美国餐厅评分数据的分析。

餐厅评分数据简介

数据的来源是 UCI ML Repository,包含了一千多条数据,有 5 个属性,分别是:

userID: 用户 ID

placeID:餐厅 ID

rating:总体评分

food_rating:食物评分

service_rating:服务评分

我们使用 pandas 来读取数据:

import numpy as np
path = '../data/restaurant_rating_final.csv'df = pd.read_csv(path)df
复制代码


1161 rows × 5 columns

分析评分数据

如果我们关注的是不同餐厅的总评分和食物评分,我们可以先看下这些餐厅评分的平均数,这里我们使用 pivot_table 方法:

mean_ratings = df.pivot_table(values=['rating','food_rating'], index='placeID',                                 aggfunc='mean')mean_ratings[:5]
复制代码


然后再看一下各个 placeID,投票人数的统计:

ratings_by_place = df.groupby('placeID').size()ratings_by_place[:10]
复制代码


placeID132560     4132561     4132564     4132572    15132583     4132584     6132594     5132608     6132609     5132613     6dtype: int64
复制代码

如果投票人数太少,那么这些数据其实是不客观的,我们来挑选一下投票人数超过 4 个的餐厅:

active_place = ratings_by_place.index[ratings_by_place >= 4]active_place
复制代码


Int64Index([132560, 132561, 132564, 132572, 132583, 132584, 132594, 132608,            132609, 132613,            ...            135080, 135081, 135082, 135085, 135086, 135088, 135104, 135106,            135108, 135109],           dtype='int64', name='placeID', length=124)
复制代码

选择这些餐厅的平均评分数据:

mean_ratings = mean_ratings.loc[active_place]mean_ratings
复制代码


124 rows × 2 columns

对 rating 进行排序,选择评分最高的 10 个:

top_ratings = mean_ratings.sort_values(by='rating', ascending=False)top_ratings[:10]
复制代码


我们还可以计算平均总评分和平均食物评分的差值,并以一栏 diff 进行保存:

mean_ratings['diff'] = mean_ratings['rating'] - mean_ratings['food_rating']
sorted_by_diff = mean_ratings.sort_values(by='diff')sorted_by_diff[:10]
复制代码


将数据进行反转,选择差距最大的前 10:

sorted_by_diff[::-1][:10]
复制代码


计算 rating 的标准差,并选择最大的前 10 个:

# Standard deviation of rating grouped by placeIDrating_std_by_place = df.groupby('placeID')['rating'].std()# Filter down to active_titlesrating_std_by_place = rating_std_by_place.loc[active_place]# Order Series by value in descending orderrating_std_by_place.sort_values(ascending=False)[:10]
复制代码


placeID134987    1.154701135049    1.000000134983    1.000000135053    0.991031135027    0.991031132847    0.983192132767    0.983192132884    0.983192135082    0.971825132706    0.957427Name: rating, dtype: float64
复制代码

本文已收录于 http://www.flydean.com/02-pandas-restaurant/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 刚刚阅读数: 2
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
数据分析实际案例之:pandas在餐厅评分数据中的使用