《Python数据分析与挖掘实战第三章》(笔记)
第三章
代码3-1
p=data.boxplot(reutrn_type='dict')#更正~
The parameter return_type can be used to select the type of element returned by boxplot. When return_type='axes' is selected, the matplotlib axes on which the boxplot is drawn are returned:
正确代码如下:
import pandas as pd
catering_sale='E:\python程序编辑\Python数据分析与挖掘实战\chapter3\demo\data\catering_sale.xls'
data=pd.read_excel(catering_sale,index_col=u'日期')#读取数据,以日期列为索引列
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#显示中文正常标签
plt.rcParams['axes.unicode_minus']=False#用来显示正常负号
plt.figure()#建立图像
p = data.boxplot(return_type='dict') #画箱线图,直接使用DataFrame的方法
x=p['fliers'][0].get_xdata()#'flies'即为异常值的标签
y=p['fliers'][0].get_ydata()
y.sort()
for i in range(len(x)):
if i>0:
plt.annotate(y[i],xy=(x[i],y[i]),xytext=(x[i]+0.05-0.8/(y[i]-y[i-1]),y[i]))
else:
plt.annotate(y[i],xy=(x[i],y[i]),xytext=(x[i]+0.08,y[i]))
plt.show()
fliers层表示离散点,使用 P['fliers'][0]获取点坐标,然后get_ydata()获取点纵坐标,get_xdata()是横坐标。
plt.annotate()的函数解析:
更详细的解释:plt.annotate()函数解析 - TeFuirnever的博客 - CSDN博客
plt.annotate(string, xy=(np.pi/2, 1.0), xytext=((np.pi/2)+0.15, 1,5), weight="bold", color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
string:图形内容的注释文本,xy:被注释图形内容的位置坐标,xytext:注释文本的位置坐标,weight:注释文本的字体粗细风格,color:注释文本的字体颜色,arrowprops:指示被注释内容的箭头的属性字典。
代码3-2
from __future__ imports must occur at the beginning of the file问题解决。解决方法(将 from_future_impotrt----前面所有的注释和文字全部删除即可)
pandas中loc和iloc的用法的区别:
详细说明见Pandas中loc和iloc函数用法详解 - 破晓时刻的博客 - CSDN博客
在python中出现了:
AttributeError: 'Series' object has no attribute 'sort'
将data.sort(ascending=False),改为data.sort_values(ascending=False)
2019.4.19
python中D.T表示矩阵D的转置
pandas中提供了一些非常方便使用的计算统计特征的函数,主要有累积计算cum(),和滚动计算pd.rolling()
cum系列函数是作为DataFrame和Series对象的方法而出现的,命令为D.cumsum(),而rolling系列是pandas的是函数,并不是DataFrame或Series的函数,它们的使用格式为pd.rolling_mean(D,k),意思是每k列计算一次均值,滚动计算。
3.3.2中代码复现出现的错误
运行pd.rolling_mean(D,1)会出现
AttributeError: module 'pandas' has no attribute 'rolling_mean'
将上述代码改为D.rolling(2).sum()
x=np.linspace(0,2*np.pi,50) #其中2*np.pi就是2pi的意思,只是在利用pi是调用了Python中的numpy库
plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',startangle=90,shadow=True)
autopct='%1.2f%%' 中1.2小数点前面的数对结果没有影响,后面的数表示保留几位小数。这个输出的是百分比形式的数字。
x.plot(label=u'原始数据',legend=True) 中的legend是是否显示标签的意思