• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞java代码 3年前 (2022-05-21) 40次浏览 已收录 0个评论

前言

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

数据准备

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

 

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

 

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

  • 读取数据后,将Stars列中评分为Unrated的替换为3分
  • 按照国家进行统计,求出评分个数,以及均值
  • 降序,选出Top 10
file = <span>"</span><span>ramen-ratings.csv</span><span>"</span><span>
df </span>=<span> pd.read_csv(file)
df[</span><span>"</span><span>Stars</span><span>"</span>].replace({<span>"</span><span>Unrated</span><span>"</span>: 3}, inplace=<span>True)
df[</span><span>"</span><span>Stars</span><span>"</span>] = pd.to_numeric(df[<span>"</span><span>Stars</span><span>"</span><span>])
</span><span>print</span><span>(df.info())
</span><span>#</span><span> get top 10</span>
df_stars = df.groupby(by=<span>"</span><span>Country</span><span>"</span>).agg({<span>"</span><span>Stars</span><span>"</span>: [<span>"</span><span>count</span><span>"</span>, <span>"</span><span>mean</span><span>"</span><span>]})
df_stars.sort_values(by</span>=(<span>"</span><span>Stars</span><span>"</span>, <span>"</span><span>count</span><span>"</span>), ascending=False, inplace=<span>True)
</span><span>print</span>(df_stars.head(10<span>))
top_10 </span>= df_stars.iloc[0:10, :]

www#gaodaima.com来源gaodai#ma#com搞@@代~&码网搞代码

 

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

 

绘制组合图Combo Chart

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

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

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

<span>#</span><span> standard plot</span>
fig, ax1 = plt.subplots(figsize=(10, 6<span>))
sns.barplot(data</span>=top_10, x=top_10.index, y=(<span>"</span><span>Stars</span><span>"</span>, <span>"</span><span>count</span><span>"</span>), ax=<span>ax1)
ax1.set_xlabel(</span><span>"</span><span>Country/Area</span><span>"</span><span>)
ax1.set_ylabel(</span><span>"</span><span>Count</span><span>"</span><span>)
ax1.set_ylim([0, </span>400<span>])
ax2 </span>= ax1.twinx() <span>#</span><span> share the x axis</span>
<span>print</span>(top_10[(<span>"</span><span>Stars</span><span>"</span>, <span>"</span><span>mean</span><span>"</span><span>)])
sns.lineplot(data</span>=top_10, x=top_10.index, y=<span>top_10[(
    </span><span>"</span><span>Stars</span><span>"</span>, <span>"</span><span>mean</span><span>"</span>)], marker=<span>"</span><span>*</span><span>"</span>, color=<span>"</span><span>k</span><span>"</span>, markersize=12<span>)
ax2.set_ylabel(</span><span>"</span><span>Rate</span><span>"</span><span>)
ax2.set_ylim([0, </span>5<span>])
ax1.set_title(</span><span>"</span><span>Ramen Quantities & Ratings in Areas</span><span>"</span><span>)
plt.tight_layout()
plt.show()</span>

 

 

自定义星级Ticks

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

两个问题摆在我们面前:

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

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

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

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

<span>def</span><span> stars(x,pos):
    </span><span>return</span> r<span>"</span><span>$igstar$</span><span>"</span> *<span> int(x)
ax2.yaxis.set_major_formatter(FuncFormatter(stars))</span>

 

 

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

总结

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

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

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

转载地址

<code><span class="hljs-attribute">https:<span class="hljs-comment">//www.gaodaima.com/fei347795790?t=1</span></span></code>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python数据可视化:拉面数据分析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址