“Python 语言程序设计实验2023春季”实验八 数据分析与可视化
(5)按季度统计该商场 2022年的营业额数据,绘制饼状图显示2022年4个季度的营业额分布情况,并把图形保存为本地文件Je.jpg。(5)按季度统计该商场 2022年的营业额数据,绘制饼状图显示2022年4个季度的营业额分布情况,并把图形保存为本地文件Je.jpg。(2)绘制折线图,显示该商场每天的营业额情况,并把图形保存为本地文件 Te.jpg;(2)绘制折线图,显示该商场每天的营业额情况,并
#实验八 数据分析与可视化
##一、实验学时:2学时
##二、实验目的
- 熟悉 CSV 和 TXT 文件操作。
- 熟练安装扩展库 numpy、pandas、matplotlib。
- 熟悉使用扩展库 pandas 进行数据分析的基本操作。
- 熟悉使用扩展库 matplotlib 进行数据可视化的基本操作。
##三、实验内容
- 使用以下代码,在当前文件夹中生成某商场营业额模拟数据文件 data.csv。数据文件有两列,分别为“日期”和“营业额”。日期从2022-1-1开始,共365天,365条营业数据。
import csv
import random
import datetime
fn = 'data.csv'
with open(fn, 'w') as fp:
# 创建 csv 文件写入对象
wr = csv.writer(fp)
# 写入表头
wr.writerow(['日期', '营业额'])
# 生成模拟数据
startDate = datetime.date(2022, 1, 1)
# 生成 365 个模拟数据
for i in range(365):
# 生成一个模拟数据,写入 csv 文件
amount = 500 + i*5 + random.randrange(100)
wr.writerow([str(startDate), amount])
# 下一天
startDate = startDate + datetime.timedelta(days=1)
依据以上生成的模拟数据文件,完成下面的任务:
(1)使用pandas读取文件data.csv中的数据,创建DataFrame对象,并删除其中所有缺失值。
(2)绘制折线图,显示该商场每天的营业额情况,并把图形保存为本地文件 Te.jpg;
(3)绘制柱状图,显示每个月份的营业额,并把图形保存为本地文件 Ye.jpg;
(4)按月份进行统计,找出相邻两个月最大涨幅,并把涨幅最大的月份写入文件maxMonth.txt;
(5)按季度统计该商场 2022年的营业额数据,绘制饼状图显示2022年4个季度的营业额分布情况,并把图形保存为本地文件Je.jpg。
##四、实验结果
使用以下代码,在当前文件夹中生成某商场营业额模拟数据文件 data.csv。数据文件有两列,分别为“日期”和“营业额”。日期从2022-1-1开始,共365天,365条营业数据。
import csv
import random
import datetime
fn = 'data.csv'
with open(fn, 'w') as fp:
# 创建 csv 文件写入对象
wr = csv.writer(fp)
# 写入表头
wr.writerow(['日期', '营业额'])
# 生成模拟数据
startDate = datetime.date(2022, 1, 1)
# 生成 365 个模拟数据
for i in range(365):
# 生成一个模拟数据,写入 csv 文件
amount = 500 + i*5 + random.randrange(100)
wr.writerow([str(startDate), amount])
# 下一天
startDate = startDate + datetime.timedelta(days=1)
依据以上生成的模拟数据文件,完成下面的任务:
(1)使用pandas读取文件data.csv中的数据,创建DataFrame对象,并删除其中所有缺失值。
#程序名:6-5.py
#功 能:根据提供的数据绘制相关的图像
#作 者:董斌
#学 号:20222501444
#日 期:2022.06.08
#思 路:使用pandas和matplotlib中的函数实现各种图像的绘制
import csv
import random
import datetime
fn = 'data.csv'
with open(fn, 'w') as fp:
# 创建 csv 文件写入对象
wr = csv.writer(fp)
# 写入表头
wr.writerow(['日期', '营业额'])
# 生成模拟数据
startDate = datetime.date(2022, 1, 1)
# 生成 365 个模拟数据
for i in range(365):
# 生成一个模拟数据,写入 csv 文件
amount = 500 + i*5 + random.randrange(100)
wr.writerow([str(startDate), amount])
# 下一天
startDate = startDate + datetime.timedelta(days=1)
import pandas as pd
import matplotlib.pyplot as plt
import datetime
# 读取数据文件
df = pd.read_csv('data.csv', encoding='gb2312')
# 删除缺失值
df.dropna(inplace=True)
(2)绘制折线图,显示该商场每天的营业额情况,并把图形保存为本地文件 Te.jpg;
# 折线图
plt.plot(df['日期'], df['营业额'])
plt.xlabel('日期')
plt.ylabel('营业额')
plt.title('商场每天的营业额情况')
plt.savefig('Te.jpg')
plt.show()
运行截图:
(3)绘制柱状图,显示每个月份的营业额,并把图形保存为本地文件 Ye.jpg;
# 柱状图
df['月份'] = pd.to_datetime(df['日期']).dt.month
monthly_sales = df.groupby('月份')['营业额'].sum()
plt.bar(monthly_sales.index, monthly_sales.values)
plt.xlabel('月份')
plt.ylabel('营业额')
plt.title('每个月份的营业额')
plt.savefig('Ye.jpg')
plt.show()
运行截图:
(4)按月份进行统计,找出相邻两个月最大涨幅,并把涨幅最大的月份写入文件maxMonth.txt;
# 最大涨幅统计
df['上一个月营业额'] = df['营业额'].shift(1)
df['涨幅'] = df['营业额'] - df['上一个月营业额']
df['月份'] = pd.to_datetime(df['日期']).dt.month
max_increase = 0
max_month = ''
for i in range(2, 13):
increase = df[df['月份'] == i]['涨幅'].max()
if increase > max_increase:
max_increase = increase
max_month = str(i) + '月'
with open('maxMonth.txt', 'w') as f:
f.write(max_month)
(5)按季度统计该商场 2022年的营业额数据,绘制饼状图显示2022年4个季度的营业额分布情况,并把图形保存为本地文件Je.jpg。
# 饼状图
df['季度'] = pd.to_datetime(df['日期']).dt.quarter
quarterly_sales = df.groupby('季度')['营业额'].sum()
labels = ['第1季度', '第2季度', '第3季度', '第4季度']
plt.pie(quarterly_sales.values, labels=labels, autopct='%1.1f%%')
plt.title('2022年各季度营业额占比')
plt.savefig('Je.jpg')
plt.show()
运行截图:
##五、实验小结
###问题与解决办法:
- 问题:import导入模块出现错误,找不到对应的模块。
解决办法:在pycharm中安装对应的模块。
- 问题:不知道如何将绘制的图像保存下来。
解决办法:使用savefig()函数实现图像的保存操作。
- 问题:读取文件出现错误。
解决办法:查找资料后得知,将编码格式改为gb2312。
- 问题:图像无法在屏幕上显示出来。
解决办法:使用show()函数将绘制的图像在屏幕上显示出来。
###心得体会:
-
多翻阅Python书籍有利于对语法的进一步掌握。
-
我们应当养成自主学习的习惯,提高自己搜索信息的能力,利用好网络带给我们的便利。
-
有自己难以解决的问题,要积极向老师同学请教。
-
Python学习需要不仅需要扎实的语法基础,还需要充足的实践。
更多推荐
所有评论(0)