百词斩第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()
补充:
- 数据排序函数
.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结束位置]