Pandas+Matplotlib之csv檔案的建立、讀取與視覺化
阿新 • • 發佈:2019-01-09
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顯示2018年4個季度的營業額分佈餅狀圖,儲存為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')