标签:else 图像 元素 append 坐标 gb2312 处理 -- 时序
由于之前没有过实际处理的经验,所以这个程序还是值得一看,涉及了处理表格数据的基本方法:
import matplotlib.pyplot as plt
import pandas as pd
# csv读取文件
data = pd.read_csv(‘OutOrder.csv‘,encoding=‘gb2312‘)
# 每一列都兼容numpy的方法
a = data[‘方式‘].values
# 获取本列的内容的各种可能
typename = []
for i in a:
if i not in typename:
typename.append(i)
# 获取每种可能的数目
typenum = []
for i in typename:
typenum.append(sum(a==i))
print(typenum)
# 绘制饼图
plt.axis(‘equal‘)
plt.pie(typenum,labels=typename,shadow=True,
labeldistance=1.1,autopct=‘%3.1f%%‘,
startangle=0,pctdistance=0.8)
plt.legend()
plt.show()

有两个地方值得注意:
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
import datetime
data = pd.read_csv(‘OutOrder.csv‘,encoding=‘gb2312‘)
def toDT(a):
return datetime.datetime.strptime(a,‘%m/%d/%Y %H:%M‘) # 注意时序字符串处理
# 转换str成datetime格式
a = data[u‘时间‘].apply(toDT) # <-------显示使用datetime处理时间字符串
# a = pd.to_datetime(data[u‘时间‘]) # <-------pandas内置处理时间字符串方法,和上面等价
print(a)
# X用来存月份,Y用来存金额,Z用来存人数
X=[];Y=[];Z=[]
for i in range(12):
start_time = datetime.datetime(2015, i+1, 1)
if i + 2 > 12:
end_time = datetime.datetime(2016, 1, 1)
else:
end_time = datetime.datetime(2015, i+2, 1)
idx = np.where((a>start_time)&(a<end_time)) # np.where返回含有一个数组的单元素索引元组:(array数组,),所以加[0]
if len(idx[0])>0:
X.append(i + 1)
Y.append(sum(data[‘金额‘].values[idx[0]]))
Z.append(len(idx[0]))
width = 0.25
fig, ax1 = plt.subplots()
ax1.bar(np.array(X)-width, Y, width, facecolor=‘#9999ff‘, edgecolor=‘white‘)
ax1.set_ylabel(‘money‘, color=‘b‘)
ax1.set_xlabel(‘month‘)
# ax1.bar(np.array(X)+1, Z, width, facecolor=‘#ff9999‘, edgecolor=‘white‘) # 普通的伴生图绘制方法
ax2 = ax1.twinx() # <-------伴生图绘制方法(使用同样的横坐标,但是不共用纵轴)
ax2.bar(X, Z, width, facecolor=‘#ff9999‘, edgecolor=‘white‘)
ax2.set_ylabel(‘people num‘, color=‘r‘)
plt.grid(True)
plt.show()
输出图像:

不使用双纵坐标轴的输出图:

『python』科学计算专项_科学绘图库matplotlib学习(下)
标签:else 图像 元素 append 坐标 gb2312 处理 -- 时序
原文地址:http://www.cnblogs.com/hellcat/p/7116812.html