百词斩第35题

题目:

可圆是一位拉面爱好者,她从网上获取了一份拉面数据,存储在 "/Users/keyuan/ramenRatings.csv" 路径下:




数据可视化李伊第二版 数据可视化课后题答案_数据


"Area"代表国家/地区,"Bowl"代表碗装拉面品牌数量,"Cup"代表杯装拉面品牌数量,"Pack"代表袋装拉面品牌数量,"rating"代表该国家/地区整体拉面评分。

可圆想要通过双y轴叠加图,展示拉面品牌数量前五的国家/地区的拉面评分。

具体步骤如下:

1. 读取文件后,计算每个国家/地区的拉面品牌数量总和

2. 根据品牌数量总和,将原数据降序排序,并选出排名前5的行数据

3. 以这5行数据的国家/地区("Area")作为x轴,绘制对比这5个国家/地区的碗装("Bowl")、杯装("Cup")和袋装("Pack")拉面品牌数量的簇形柱状图,并将x轴标题设置为"国家/地区",y轴标题设置为"品牌总量"

4. 然后,在同一个x轴上,添加另一个y轴,根据前5行数据绘制一个折线图,以这5行数据的国家/地区("Area")作为x轴,整体拉面评分("rating")作为y轴。同时,将折线图的标记设置为"*",颜色设置为"crimson",y轴标题设置为"评分"。

#导入pandas、matplotlib模块
import pandas as pd
import matplotlib.pyplot as plt

#读取文件
df = pd.read_csv("/Users/keyuan/ramenRatings.csv")

#设置中文字体
plt.rcParams["font.sans-serif"]="Arial Unicode MS"

#计算每个国家/地区的拉面品牌数量总和
df["sum"] = df["Bowl"]+df["Cup"]+df["Pack"]

#根据品牌数量总和,将原数据降序排序,并选出排名前5的行数据
df.sort_values(by="sum",ascending=False,inplace=True)
sum_data = df.iloc[0:5]

'''以这5行数据的国家/地区("Area")作为x轴,绘制对比这5个国家/地区的碗装("Bowl")、杯装("Cup")和袋装("Pack")拉面品牌数量的簇形柱状图,并将x轴标题设置为"国家/地区",y轴标题设置为"品牌总量".'''
sum_data.plt.bar("Area",["Bowl","Cup","Pack"])
plt.xlabel("国家/地区")
plt.ylabel("品牌总量")


'''在同一个x轴上,添加另一个y轴,根据前5行数据绘制一个折线图,以这5行数据的国家/地区("Area")作为x轴,整体拉面评分("rating")作为y轴。同时,将折线图的标记设置为"*",颜色设置为"crimson",y轴标题设置为"评分"。'''
plt.twinx()
plt.plot(sum_data["Area"],sum_data["rating"],marker="*",color="crimson")
plt.ylabel("评分")

#展示图像
plt.show()

补充:

  1. 数据排序函数

.sort_values(by="需排序得数据列",ascending=False,inplace=True)

ascending=False:降序

inplace参数:是否用排序后的数据集替换原来的数据,默认为False

df.sort_values(by="sum",ascending=False,inplace=True)

2.访问列数据

①访问一列数据

#按列索引(columns)访问
data["columns"]

②访问多列数据

data[["columns_1","columns_2",...]]

3.访问行数据

①按照index的值访问行数据--.loc

#访问某一行
.loc[index的值]
#访问连续的某几行,包含结束index的值
.loc[起点index的值:结束index的值]
#访问不连续的某几行
.loc[[第一个index的值,第二个index的值,...]]
#访问元素
#访问单个元素
.loc[index的值,columns的值]
#访问多个元素
.loc[index的切片或列表,columns切片或列表]

②按照行位置访问行数据--.iloc

#访问某一行
.iloc[index的位置]
#访问连续的某几行,不包含结束index的值
.iloc[index起点位置:index结束位置]