pandas入门

运行下面的程序,在当前文件夹中生成饭店营业额模拟数据文件data.csv

import csv
import random
import datetime

fn = 'data.csv'
with open(fn, 'w') as fp:
    wr = csv.writer(fp)  # 创建csv文件写入对象
    wr.writerow(['日期', '销量'])  # 写入表头
    startDate = datetime.date(2017, 1, 1)  # 起始日期
    # 生成365个模拟数据,可以根据需要进行调整
    for i in range(365):
        # 生成一个模拟数据,写入csv文件
        amount = 300 + i * 5 + random.randrange(100)
        wr.writerow([str(startDate), amount])
        # 下一天
        startDate = startDate + datetime.timedelta(days=1)

要求编写程序,完成下面的任务:

1)使用pandas读取文件data.csv中的数据,创建DataFrame对象,并删除其中所有缺失值;

2)使用matplotlib生成折线图,反应该饭店每天的营业额情况,并把图形保存为本地文件first.jpg;

3)按月份进行统计,使用matplotlib绘制柱状图显示每个月份的营业额,并把图形保存为本地文件second.jpg;

4)按月份进行统计,找出相邻两个月最大涨幅,并把涨幅最大的月份写入文件maxMonth.txt;

5)按季度统计该饭店2017年的营业额数据,使用matplotlib生成饼状图显示2017年4个季度的营业额分布情况,并把图形保存为本地文件third.jpg。

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family'] = 'YouYuan'  # 幼圆字体
df = pd.read_csv('data.csv', encoding='936')  # 将csv文件读入DataFrame,并设置gbk编码
df = df.dropna()  # 删除所有缺失值,返回一个新的DataFrame
# 2)折线图,该饭店每天的营业额情况
df.plot(title='该饭店每天的营业额情况', xlabel='日期', ylabel='营业额')
# DataFrame的plot方法会在一个subplot中为各列绘制一条线,并自动创建图例
plt.savefig('first.jpg')
plt.clf()  # 清空当前figure
# 3)柱状图,显示每个月份的营业额
'''str.rfind()返回最后一个子字符串的第一个字符在str中的位置
Series的map方法可以接受一个函数或含有映射关系的字典型对象,这里传入函数,用x[:x.rfind('-')]保留年月'''
df['月份'] = df['日期'].map(lambda x: x[:x.rfind('-')])  # 添加一列'月份'
df_month = df.groupby('月份').sum()  # 按月份分组并求和,如果指定as_index=False则不以组标签为索引值
print(df_month)
df_month.plot.bar(title='该饭店每个月份的营业额', xlabel='月份', ylabel='营业额')  # df.plot(kind='bar')
plt.savefig('second.jpg')
plt.clf()
# 4)把涨幅最大的月份写入文件
# maxd = 0
# idx = 0
# for i in range(1, len(df_month['销量'])):
#     if maxd < df_month['销量'][i] - df_month['销量'][i - 1]:
#         maxd = df_month['销量'][i] - df_month['销量'][i - 1]
#         idx = i
df2 = df_month['销量'].diff()  # diff()计算Dataframe中某一元素与另一元素的差异(默认为前一行)
print(df2)
print(df2.nlargest(1))  # Dataframe.nlargest(n)返回按列降序的前n行
with open('maxMonth.txt', 'w') as fp:
    fp.write(df2.nlargest(1).keys()[0])  # keys()获取索引,第0号索引即月份
# 5)饼状图,四个季度的营业额分布情况
# y = [df_month[:3]['销量'].sum(), df_month[3:6]['销量'].sum(), df_month[6:9]['销量'].sum(), df_month[9:12]['销量'].sum()]
y = [df_month[3 * i:3 * i + 3]['销量'].sum() for i in range(4)]
plt.pie(y, labels=['第一季度', '第二季度', '第三季度', '第四季度'])
plt.savefig('third.jpg')

  • 11
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值