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

简介: 数据分析实际案例之: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


userID placeID rating food_rating service_rating
0 U1077 135085 2 2 2
1 U1077 135038 2 2 1
2 U1077 132825 2 2 2
3 U1077 135060 1 2 2
4 U1068 135104 1 1 2
... ... ... ... ... ...
1156 U1043 132630 1 1 1
1157 U1011 132715 1 1 0
1158 U1068 132733 1 1 0
1159 U1068 132594 1 1 1
1160 U1068 132660 0 0 0


1161 rows × 5 columns


分析评分数据


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


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


food_rating rating
placeID
132560 1.00 0.50
132561 1.00 0.75
132564 1.25 1.25
132572 1.00 1.00
132583 1.00 1.00


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


ratings_by_place = df.groupby('placeID').size()
ratings_by_place[:10]


placeID
132560     4
132561     4
132564     4
132572    15
132583     4
132584     6
132594     5
132608     6
132609     5
132613     6
dtype: 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


food_rating rating
placeID
132560 1.000000 0.500000
132561 1.000000 0.750000
132564 1.250000 1.250000
132572 1.000000 1.000000
132583 1.000000 1.000000
... ... ...
135088 1.166667 1.000000
135104 1.428571 0.857143
135106 1.200000 1.200000
135108 1.181818 1.181818
135109 1.250000 1.000000


124 rows × 2 columns


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


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


food_rating rating
placeID
132955 1.800000 2.000000
135034 2.000000 2.000000
134986 2.000000 2.000000
132922 1.500000 1.833333
132755 2.000000 1.800000
135074 1.750000 1.750000
135013 2.000000 1.750000
134976 1.750000 1.750000
135055 1.714286 1.714286
135075 1.692308 1.692308


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


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


food_rating rating diff
placeID
132667 2.000000 1.250000 -0.750000
132594 1.200000 0.600000 -0.600000
132858 1.400000 0.800000 -0.600000
135104 1.428571 0.857143 -0.571429
132560 1.000000 0.500000 -0.500000
135027 1.375000 0.875000 -0.500000
132740 1.250000 0.750000 -0.500000
134992 1.500000 1.000000 -0.500000
132706 1.250000 0.750000 -0.500000
132870 1.000000 0.600000 -0.400000


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


sorted_by_diff[::-1][:10]


food_rating rating diff
placeID
134987 0.500000 1.000000 0.500000
132937 1.000000 1.500000 0.500000
135066 1.000000 1.500000 0.500000
132851 1.000000 1.428571 0.428571
135049 0.600000 1.000000 0.400000
132922 1.500000 1.833333 0.333333
135030 1.333333 1.583333 0.250000
135063 1.000000 1.250000 0.250000
132626 1.000000 1.250000 0.250000
135000 1.000000 1.250000 0.250000


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


# Standard deviation of rating grouped by placeID
rating_std_by_place = df.groupby('placeID')['rating'].std()
# Filter down to active_titles
rating_std_by_place = rating_std_by_place.loc[active_place]
# Order Series by value in descending order
rating_std_by_place.sort_values(ascending=False)[:10]


placeID
134987    1.154701
135049    1.000000
134983    1.000000
135053    0.991031
135027    0.991031
132847    0.983192
132767    0.983192
132884    0.983192
135082    0.971825
132706    0.957427
Name: rating, dtype: float64


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

相关文章
|
6天前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
22 2
|
3天前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。
|
6天前
|
数据采集 数据挖掘 数据处理
Python数据分析:Numpy、Pandas高级
在上一篇博文中,我们介绍了Python数据分析中NumPy和Pandas的基础知识。本文将深入探讨NumPy和Pandas的高级功能,并通过一个综合详细的例子展示这些高级功能的应用。
|
5天前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。 今天给小伙伴们分享的这份Python数据分析入门手册本着实用性的目的,着眼于整个数据分析的流程,介绍了从数据采集到可视化的大致流程。
|
6天前
|
数据采集 数据挖掘 数据处理
Python数据分析:Numpy、Pandas基础
本文详细介绍了 Python 中两个重要的数据分析库 NumPy 和 Pandas 的基础知识,并通过一个综合的示例展示了如何使用这些库进行数据处理和分析。希望通过本篇博文,能更好地理解和掌握 NumPy 和 Pandas 的基本用法,为后续的数据分析工作打下坚实的基础。
|
8天前
|
数据可视化 数据挖掘 数据处理
【python】python农产品数据分析可视化(源码+论文+数据)【独一无二】
【python】python农产品数据分析可视化(源码+论文+数据)【独一无二】
|
9天前
|
数据可视化 数据挖掘 Python
【python】python学生成绩数据分析可视化(源码+数据+论文)【独一无二】
【python】python学生成绩数据分析可视化(源码+数据+论文)【独一无二】
|
4天前
|
Python
Pandas 读取Eexcel - 间隔N行,读取某列数据
Pandas 读取Eexcel - 间隔N行,读取某列数据
9 0
|
5天前
|
存储 数据可视化 数据挖掘
Python 3 中使用 pandas 和 Jupyter Notebook 进行数据分析和可视化
Python 3 中使用 pandas 和 Jupyter Notebook 进行数据分析和可视化
12 0
|
11天前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。

热门文章

最新文章