Python数据可视化:拉面数据分析

python

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

数据准备

今天我们就用一组实战数据来画出上图,数据集是一份拉面数据集。没错,就是下面的拉面。

 

数据来源https://www.theramenrater.com/(拉面爱好者)的评论,数据集预览如下,该数据集可以来分析各个国家的拉面店评分以及风格等。

 

本案例需要分析拉面品牌数量前十的国家(或地区)的拉面店平均评分星级。为了达到上述分析目的,我们需要对数据进行简单的处理:

  • 读取数据后,将Stars列中评分为Unrated的替换为3分
  • 按照国家进行统计,求出评分个数,以及均值
  • 降序,选出Top 10

file = "ramen-ratings.csv"

df = pd.read_csv(file)

df["Stars"].replace({"Unrated": 3}, inplace=True)

df["Stars"] = pd.to_numeric(df["Stars"])

print(df.info())

# get top 10

df_stars = df.groupby(by="Country").agg({"Stars": ["count", "mean"]})

df_stars.sort_values(by=("Stars", "count"), ascending=False, inplace=True)

print(df_stars.head(10))

top_10 = df_stars.iloc[0:10, :]

最后我们的数据预览如下:

 

绘制组合图Combo Chart

上面的组合图包含柱状图和曲线图, 采用barplot 和lineplot可以轻易分别画出。

关键问题是如何进行组合。这里有个小技巧:所谓组合,其实是障眼法,只不过是两幅图的x轴重叠罢了。在matplotlib里面,可以采用twinx来共享x轴,y轴的次坐标与主坐标分布两侧。

所以知道上述技巧后,代码的编写就是轻而易举的事情。

# standard plot

fig, ax1 = plt.subplots(figsize=(10, 6))

sns.barplot(data=top_10, x=top_10.index, y=("Stars", "count"), ax=ax1)

ax1.set_xlabel("Country/Area")

ax1.set_ylabel("Count")

ax1.set_ylim([0, 400])

ax2 = ax1.twinx() # share the x axis

print(top_10[("Stars", "mean")])

sns.lineplot(data=top_10, x=top_10.index, y=top_10[(

"Stars", "mean")], marker="*", color="k", markersize=12)

ax2.set_ylabel("Rate")

ax2.set_ylim([0, 5])

ax1.set_title("Ramen Quantities & Ratings in Areas")

plt.tight_layout()

plt.show()

 

自定义星级Ticks

上面的标准组合图中右侧的次坐标Ticks 默认为数字,分别表示0-5个星级评分。我们可以自定义Ticks 让其显示更加友善----直接替换为★级个数。比如★★★★★ (五星)。

两个问题摆在我们面前:

  • ★ 怎么画?
  • ★怎么替换Ticks 标签?

答案很简单,matplotlib都考虑到了。

数学里面包含大量的特殊符号,比如≥,⊙,♣,∰等你想的到想不到的符号,都在TeX符号集中包含,像★ 就可以用‘$igstar$’来表达。

怎么替换Ticks 标签?当然是用函数了,我们写一个函数,将数字替换为★级个数,然后用yaxis.set_major_formatter调用该函数即可。

def stars(x,pos):

return r"$igstar$" * int(x)

ax2.yaxis.set_major_formatter(FuncFormatter(stars))

 

这样,右侧次坐标的Ticks 换成了星级★符号。

总结

本文展示了matplotlib 的一些画图小技巧,并且在拉面数据集上进行了展示:

  • 通过共享x轴,实现柱状图和曲线图的组合绘制,类似Excel组合图
  • 通过LaTex符号以及自定义Ticks ,将Ticks 替换为星级★符号,更加美观

以下文章来源于Python小例子,作者 无尘

转载地址

https://blog.csdn.net/fei347795790?t=1

以上是 Python数据可视化:拉面数据分析 的全部内容, 来源链接: utcz.com/z/530220.html

回到顶部