week8-代码解析2

代码逐行解析

功能:读取《流浪地球》影评csv,统计评论最多的前10个城市,绘制柱状图

python 复制代码
# 任务1.2:影评数量最多的十个城市情况分析
# 步骤1:初始工作。导入相关包,Pandas从"CommentInfo.csv"文件中读取电影评论数据,设置Matplotlib绘图常用参数值。
# 导包
import matplotlib.pyplot as plt
import pandas as pd
# 读取数据
data = pd.read_csv('datasource/CommentInfo.csv', encoding='gbk')
# 设置绘图参数
plt.rcParams['font.sans-serif'] = 'SimHei'

# 步骤2:统计并取出前十个城市评论数量。
# 提出城市名称
city = data['citys'].apply(lambda x:x[2:-2])
# 城市名称为空,设置为'未知城市'
city = pd.Series(['未知城市' if i== '' else i for i in city])
# 统计十个城市评论数量
city = city.value_counts().sort_values(ascending=False)[:10]
print(city)
# 步骤3:绘制柱状图。横轴为城市,纵轴为城市对应的电影评论数量,显示前十个城市评论数据的情况。
plt.figure(figsize=(12,4))
# 绘制柱状图
plt.bar(city.index,city)
# 美化图形
plt.title('评论数量最多的十个城市')
plt.ylabel('评论数量')
plt.xticks(rotation=15)
for i,j in enumerate(city):
    plt.text(i,j,j)
# 显示图形
plt.show()

逐行详细解析

复制代码
# 任务1.2:影评数量最多的十个城市情况分析
# 步骤1:初始工作。导入相关包,Pandas从"CommentInfo.csv"文件中读取电影评论数据,设置Matplotlib绘图常用参数值。

# 导包
import matplotlib.pyplot as plt

导入matplotlib绘图库,简写plt,用于绘制柱状图。

复制代码
import pandas as pd

导入pandas数据分析库,简写pd,用来读取csv文件、清洗和统计数据。

复制代码
# 读取数据
data = pd.read_csv('datasource/CommentInfo.csv', encoding='gbk')

pd.read_csv()读取csv文件。 文件路径:datasource/CommentInfo.csv encoding='gbk':文件中文采用gbk编码,防止中文读取乱码。 读取后数据存入DataFrame变量data。

复制代码
# 设置绘图参数
plt.rcParams['font.sans-serif'] = 'SimHei'

设置matplotlib全局字体为黑体SimHei ,解决图表里中文变成方框的乱码问题。 补充:缺少 plt.rcParams['axes.unicode_minus'] = False,如果图中有负号,负号会显示成方框。

复制代码
# 步骤2:统计并取出前十个城市评论数量。

# 提出城市名称
city = data['citys'].apply(lambda x:x[2:-2])
  • data['citys']:取出data里名为citys的这一列(存储用户城市信息)

  • .apply():对这一列每一行数据执行后面lambda函数

  • lambda x:x[2:-2]:匿名函数,字符串切片。 x[2:-2]:从下标2开始取,到倒数第2个字符为止,去掉前后多余字符,提取纯净城市名。

    城市名称为空,设置为'未知城市'

    city = pd.Series(['未知城市' if i== '' else i for i in city])

  • 列表推导式,遍历city里每一个值i

  • 判断:如果i是空字符串'',替换文字为未知城市;否则保留原有城市名称

  • pd.Series():把处理后的列表重新转为pandas序列Series,方便后续统计

    统计十个城市评论数量

    city = city.value_counts().sort_values(ascending=False)[:10]

  1. .value_counts():统计每个城市出现次数(即该城市评论数量),默认降序排列

  2. .sort_values(ascending=False):再次指定降序(数量从大到小)

  3. [:10]:切片,取前10条数据,也就是评论最多的10个城市

  4. 结果存入city,此时city.index是城市名,city的值是评论数量

    print(city)

在控制台打印这个统计结果,方便查看前10城市和对应评论数量,用于调试。

复制代码
# 步骤3:绘制柱状图。横轴为城市,纵轴为城市对应的电影评论数量,显示前十个城市评论数据的情况。

plt.figure(figsize=(12,4))

创建画布,设置画布大小:宽度12英寸,高度4英寸。

复制代码
# 绘制柱状图
plt.bar(city.index,city)

plt.bar()绘制柱状图 第一个参数city.index:x轴,城市名称 第二个参数city:柱子高度,对应评论数量

复制代码
# 美化图形
plt.title('评论数量最多的十个城市')

设置图表的大标题。

复制代码
plt.ylabel('评论数量')

设置y轴(纵轴)标签文字。

复制代码
plt.xticks(rotation=15)

x轴刻度文字旋转15度,防止城市名字太长文字重叠挤在一起。

复制代码
for i,j in enumerate(city):
    plt.text(i,j,j)
  • enumerate(city):同时拿到索引i,和评论数量j

  • plt.text(x,y,文本):在坐标(i,j)位置添加文字

  • 作用:在每根柱子顶端标注对应的评论数字 小缺陷:没有设置水平对齐ha="center",文字不会居中对齐柱子。

    显示图形

    plt.show()

弹出窗口,展示绘制完成的图表。


代码缺陷补充(考试重点)

  1. 缺少 plt.rcParams['axes.unicode_minus'] = False,存在负号乱码风险
  2. plt.text(i,j,j) 缺少 ha='center',数字不在柱子正上方
  3. 保存图片代码 plt.savefig() 没有写,如果需要导出图片要添加
  4. city.value_counts()本身默认降序,.sort_values(ascending=False)属于重复操作,可以省略

整体执行流程

读取csv数据 → 切片提取城市名 → 空值替换为未知城市 → 统计城市评论频次,取TOP10 → 创建画布画柱状图 → 设置标题坐标轴,柱子顶部写数字 → 展示图片

要不要我帮你修复这段代码,补齐缺失参数,生成一份无bug完整版?

相关推荐
小虎牙^O^1 小时前
棋盘格隐写:基于奇偶相位的双图隐藏与还原
图像处理·python·安全
薛定猫AI1 小时前
【技术干货】基于本地优先架构的开源AI智能体Octopus系统设计与实战解析
python·机器学习·ai·大模型·技术实战
程序猿乐锅1 小时前
【从0-1学习Python | 第四篇】Python 字符串和元组
java·开发语言·笔记·后端·python·学习
Rebecca_aLi1 小时前
码匠教育:从手工表格到脚本自动化,Python 改造工作流的思路
运维·python·自动化
开开心心就好1 小时前
A3的PDF怎么切成A4?拖一下分割线就行
服务器·开发语言·python·算法·pdf·ocr·tornado
小黄人软件1 小时前
python 模块(Module)与包(Package)的区别,python xxx.py、python -m xxx 和 import xxx 三者的区别
开发语言·python
砚底藏山河2 小时前
量化新手误区:因子计算与行情数据的工程化解耦
java·数据库·python·金融
lzqrzpt2 小时前
LED驱动电源选型核心参数解析与工程适配准则
python·单片机·嵌入式硬件
李航19832 小时前
SketchUp国产平替来了,功能非常接近,还有AI版本自动建模
人工智能·python·计算机视觉·ai·ai编程