利用csv、random、datetime、pandas和matplotlib库完成5项编程任务。 (1)利用csv、random和datetime创建1个WPF商店2018年营业额模拟数据文件data.csv,此文件中包含两列数据(日期date、销量amount)。模拟数据随机生成共365条,数据日期date起于2018-01-01止于2018-12-31,数据销量amount的取值范围为[300,600]之间 (2)利用pandas读取文件data.csv中数据,创建1个行列索引的数据结构DataFrame,并删除其中的所有缺失值。 (3)利用matplotlib生成折线图,按每天进行统计,显示商店每天的销量情况,并把图形保存为本地文件day_amount_plot.png。 (4)利用matplotlib生成柱状图,按月份进行统计,显示商店每月的销量情况,并把图形保存为本地文件month_amount_bar.png。同时,找出相邻两个月最大涨幅,并把涨幅最大的月份写入到文件maxMonth.txt中。 利用matplotlib生成饼状图,按季度进行统计,显示商店4个季度的销量分布情况,并把图形保存为本地文件season_amount_pie.png
时间: 2024-03-02 09:52:21 浏览: 147
好的,以下是实现代码:
```python
import csv
import random
from datetime import timedelta, date
import pandas as pd
import matplotlib.pyplot as plt
# 生成数据并写入csv文件
start_date = date(2018, 1, 1)
end_date = date(2018, 12, 31)
delta = timedelta(days=1)
with open('data.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['date', 'amount'])
while start_date <= end_date:
amount = random.randint(300, 600)
writer.writerow([start_date.strftime('%Y-%m-%d'), amount])
start_date += delta
# 读取csv文件并创建DataFrame
df = pd.read_csv('data.csv', index_col='date', parse_dates=True)
# 删除缺失值
df.dropna(inplace=True)
# 每天的销量折线图
day_amount = df['amount'].resample('D').sum()
plt.plot(day_amount)
plt.title('Daily Sales')
plt.savefig('day_amount_plot.png')
plt.show()
# 每月的销量柱状图
month_amount = df['amount'].resample('M').sum()
plt.bar(month_amount.index, month_amount)
plt.title('Monthly Sales')
plt.savefig('month_amount_bar.png')
plt.show()
# 找出相邻两个月最大涨幅,并将涨幅最大的月份写入文件maxMonth.txt
max_increase = 0
max_month = ''
for i in range(len(month_amount)-1):
increase = month_amount[i+1] - month_amount[i]
if increase > max_increase:
max_increase = increase
max_month = month_amount.index[i+1].strftime('%Y-%m')
with open('maxMonth.txt', 'w') as file:
file.write(max_month)
# 每个季度的销量饼状图
season_amount = df['amount'].resample('Q').sum()
plt.pie(season_amount, labels=['Q1', 'Q2', 'Q3', 'Q4'])
plt.title('Seasonal Sales')
plt.savefig('season_amount_pie.png')
plt.show()
```
解释一下代码:
首先,我们按照实验要求生成了数据并写入csv文件。然后,我们使用pandas库的read_csv()方法读取csv文件,并创建了一个行列索引的DataFrame数据结构。接下来,我们使用dropna()方法删除其中的所有缺失值。
接着,我们使用matplotlib库生成了三种不同类型的图表。第一种是按每天进行统计的销量折线图,我们使用了DataFrame数据结构的resample()方法将数据按天进行重采样,并计算每天的销量总和。然后,我们使用plot()方法绘制了销量折线图,并使用了title()方法设置了图表标题。最后,我们使用savefig()方法将图表保存为本地文件day_amount_plot.png,并使用show()方法显示图表。
第二种是按每月进行统计的销量柱状图,我们使用了resample()方法将数据按月进行重采样,并计算每月的销量总和。然后,我们使用bar()方法绘制了销量柱状图,并使用了title()方法设置了图表标题。最后,我们使用savefig()方法将图表保存为本地文件month_amount_bar.png,并使用show()方法显示图表。
第三种是按季度进行统计的销量饼状图,我们使用了resample()方法将数据按季度进行重采样,并计算每个季度的销量总和。然后,我们使用pie()方法绘制了销量饼状图,并使用了title()方法设置了图表标题。最后,我们使用savefig()方法将图表保存为本地文件season_amount_pie.png,并使用show()方法显示图表。
最后,我们找出相邻两个月最大涨幅,并将涨幅最大的月份写入文件maxMonth.txt。我们使用了一个for循环遍历了每个月的销量数据,并计算了相邻两个月的涨幅,找出了涨幅最大的月份。最后,我们将涨幅最大的月份写入文件maxMonth.txt。
阅读全文