Pandas+Matplotlib之csv文件的创建、读取与可视化

Pandas+Matplotlib之csv文件的创建、读取与可视化

#在当前文件夹中生成饭店营业额模拟数据文件data.csv
import csv
import random
import datetime
fn='E:/Spyder/data.csv'
with open(fn,'w')as fp:
    wr=csv.writer(fp)  #一行一行写入csv文件
    wr.writerow(['日期','销量'])  #写入表头
    startDate=datetime.date(2017,1,1) #生成模拟时间
    for i in range(365):#生成365个模拟数据,写入csv
        amount=300+5*i+random.randrange(100)
        wr.writerow([str(startDate),amount])
        startDate=startDate+datetime.timedelta(days=1)#下一天  
#使用pandas读取数据文件,创建DataFrame对象,并删除其中所有缺失值;
#使用matplotlib生成每天营业额折线图,保存图形为first.jpg
#使用matplotlib绘制每个月营业额柱状图,保存为second.jpg
#找出相邻两个月最大涨幅,并写入maxMonth.txt
#使用matplotlib显示20184个季度的营业额分布饼状图,保存为third.jpg
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif']=['SimHei'] #pyplot中文显示
df=pd.read_csv('data.csv',encoding='cp936')
df=df.dropna()#读取数据,丢弃缺失值
#生成天营业额折线图
plt.figure()  
df.plot(x='日期')   
plt.savefig('E:/Spyder/first.jpg')
#生成月营业额柱状图
plt.figure()  
df1=df[:]  #str1.rindex(str2)返回子串 str2 在串str1中最后出现位置,如果没有匹配的字符串会报异常
df1['month']=df1['日期'].map(lambda x:x[:x.rindex('-')])#提取出月份,新建了一个month列出来??
df1=df1.groupby(by='month',as_index=False).sum() #as_inside=False不把month作为新的index
df1.plot(x='month',kind='bar')
plt.savefig('E:/Spyder/second.jpg')
#查找涨幅最大月份,写入文件
plt.figure()
df2=df1.drop('month',axis=1).diff()#在销量列中每月跟上月相减的差集
m=df2['销量'].nlargest(1).keys()[0]#查找销量列中差集最大的一个数所对应的索引
with open('E:/Spyder/maxMonth.txt','w')as fp:
   fp.write(df1.loc[m,'month'])#索引m对应的month
#生成季度营业额饼状图
plt.figure()
one=df1[:3]['销量'].sum()
two=df1[3:6]['销量'].sum()
three=df1[6:9]['销量'].sum()
four=df1[9:12]['销量'].sum()
plt.pie([one,two,three,four],labels=['one','two','three','four'])
plt.savefig('E:/Spyder/third.fig')

Pandas+Matplotlib之csv文件的创建、读取与可视化_第1张图片

你可能感兴趣的:(Python)