代码1:餐饮日销额数据异常值检测(箱型图)
import pandas as pd import numpy as np catering_sale = "D:\\360MoveData\\Users\\86130\\Documents\\Tencent Files\\2268756693\\FileRecv\\catering_sale.xls" data = pd.read_excel(catering_sale,index_col='日期') #读取数据,指定“日期”列为索引列 print(data.describe()) #使用describe()方法查看数据的基本情况。 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.title('学号3110号') plt.show()
运行结果如下:
代码2:“捞起生鱼片”的季度销售情况(直方图)
import pandas as pd import numpy as np catering_sale = "D:\\360MoveData\\Users\\86130\\Documents\\Tencent Files\\2268756693\\FileRecv\\catering_fish_congee.xls" # 餐饮数据 data = pd.read_excel(catering_sale,names=['date','sale']) # 读取数据,指定“日期”列为索引 bins = [0,500,1000,1500,2000,2500,3000,3500,4000] labels = ['[0,500)','[500,1000)','[1000,1500)','[1500,2000)', '[2000,2500)','[2500,3000)','[3000,3500)','[3500,4000)'] data['sale分层'] = pd.cut(data.sale, bins, labels=labels)#cut:分层标记 print(data) aggResult = data.groupby(by=['sale分层'])['sale'].agg([('sale',np.size)])#groupby:分组函数,可以实现分组操作和组内运算。 print(aggResult) pAggResult = round(aggResult/aggResult.sum(), 2, ) * 100#round()是python自带的一个函数,用于数字的四舍五入。格式:round(number,digits) print(pAggResult) import matplotlib.pyplot as plt plt.figure(figsize=(10,6)) # 设置图框大小尺寸 pAggResult['sale'].plot(kind='bar',width=0.8,fontsize=10,color='g') # 绘制频率直方图 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.title('季度销售额频率分布直方图(学号3110)',fontsize=20) plt.show()
运行结果如下:
代码3:不同菜品在某段时间的销售量分布情况(饼图)(条形图)
import pandas as pd import matplotlib.pyplot as plt catering_dish_profit = "D:\\360MoveData\\Users\\86130\\Documents\\Tencent Files\\2268756693\\FileRecv\\catering_dish_profit.xls" data = pd.read_excel(catering_dish_profit) #读取数据 print(data.describe()) '''describe() 函数可以查看数据的基本情况, 包括: count 非空值数、 mean 平均值、 std 标准差、 max 最大值、 min 最小值、 (25%、50%、75%)分位数等。 ''' #绘制饼图 x = data['盈利'] labels = data['菜品名'] plt.figure(figsize=(8,6)) #设置画布大小 plt.pie(x,labels=labels) #绘制饼图 plt.rcParams['font.sans-serif'] = 'SimHei'# 添加这条可以让图形显示中文 plt.title('菜品销售量分布(饼图)(学号3110)') plt.axis('equal') plt.show()
运行结果如下:
#绘制条形图 x = data['菜品名'] y = data['盈利'] plt.figure(figsize=(8,4)) plt.bar(x,y) plt.rcParams['font.sans-serif'] = 'SimHei'# 添加这条可以让图形显示中文 plt.xlabel('菜品') plt.ylabel('销量') plt.title('菜品销售量分布(条形图)(学号3110)') plt.show()
运行结果如下:
代码4:不同部门各月份的销售对比情况
#部门之间销售金额比较 import pandas as pd import matplotlib.pyplot as plt data=pd.read_excel("D:\\360MoveData\\Users\\86130\\Documents\\Tencent Files\\2268756693\\FileRecv\\dish_sale.xls") print(data.describe()) plt.figure(figsize=(8,4)) plt.plot(data['月份'],data['A部门'],color='green',label='A部门',marker='o') plt.plot(data['月份'],data['B部门'],color='red',label='B部门',marker='s') plt.plot(data['月份'],data['C部门'],color='skyblue',label='C部门',marker='x') plt.legend() plt.ylabel('销售额(万元)') plt.title('3部门之间销售额的比较(学号3110)') plt.show()
运行结果如下:
代码6:某单位日用电量预测分析(时序图)
import pandas as pd import matplotlib.pyplot as plt #正常用户电量趋势分析 df_normal = pd.read_csv("D:\\360MoveData\\Users\\86130\\Documents\\Tencent Files\\2268756693\\FileRecv\\user.csv") plt.figure(figsize=(8,4)) plt.plot(df_normal["Date"],df_normal["Eletricity"]) plt.xlabel("日期") x_major_locator = plt.MultipleLocator(7) #设置x轴刻度间隔 ax = plt.gca() ax.xaxis.set_major_locator(x_major_locator) plt.ylabel("每日电量") plt.title("正常用户电量趋势(学号3110号)") plt.rcParams['font.sans-serif'] = ['SimHei'] plt.show #窃电用户用电趋势分析 df_steal = pd.read_csv("D:\\360MoveData\\Users\\86130\\Documents\\Tencent Files\\2268756693\\FileRecv\\user.csv") plt.figure(figsize=(10,9)) plt.plot(df_steal["Date"],df_steal["Eletricity"]) plt.xlabel("日期") plt.ylabel("日期") x_major_locator = plt.MultipleLocator(7) #设置x轴刻度间隔 ax = plt.gca() ax.xaxis.set_major_locator(x_major_locator) plt.title("窃电用户电量趋势(学号3110号)") plt.rcParams['font.sans-serif'] = ['SimHei'] plt.show
运行结果如下:
代码7:绘制菜品盈利数据帕累托图
#菜品盈利数据帕累托图 from __future__ import print_function import pandas as pd #初始化参数 dish_profit = "D:\\360MoveData\\Users\\86130\\Documents\\Tencent Files\\2268756693\\FileRecv\\catering_dish_profit.xls"#餐饮菜品盈利数据 data = pd.read_excel(dish_profit, index_col = u'菜品名') data = data[u'盈利'].copy() data.sort_values(ascending = False) import matplotlib.pyplot as plt #导入图像库 plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 plt.figure() data.plot(kind='bar') plt.ylabel(u'盈利(元)') p = 1.0*data.cumsum()/data.sum() p.plot(color = 'r', secondary_y = True, style = '-o',linewidth = 2) plt.annotate(format(p[6], '.4%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #添加注释,即85%处的标记。这里包括了指定箭头样式。 plt.ylabel(u'盈利(比例)') plt.title('学号3110号') plt.show()
运行结果如下:
代码8:绘制一条正弦虚线
import pandas as pd import numpy as np x=np.linspace(0,2*np.pi,25,endpoint=True)#范围是0~2π,25为点数 s=np.sin(x) #计算对应x的正弦值 plt.figure() plt.plot(x,s,'y--^',)#控制图形格式为黄色带^虚线 plt.xlabel("x",fontdict={'size':16}) plt.ylabel("y",fontdict={'size':16}) plt.legend("sin(x)") plt.title('学号3110号') plt.show()
运行结果如下:
代码9:绘制饼图
#绘制饼图 import matplotlib.pyplot as plt labels = 'Frogs','Hogs','Dogs','Logs' #定义标签 sizes = [15,30,45,10] #每一块的比例 colors = ['yellowgreen','gold','lightskyblue','lightcoral'] #每一块的颜色 explode = (0,0.1,0,0) #突出显示,这里仅仅突出显示第二块(即Hogs) plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=90) plt.axis('equal') #显示为圆(避免比例压缩为椭圆) plt.title('学号3110号') plt.show()
运行结果如下:
代码10:绘制二维条形直方图
import matplotlib.pyplot as plt import numpy as np x = np.random.randn(1000) #1000个服从正态分布的随机数 plt.hist(x,10,color='g') #分成10组绘制直方图,颜色为绿色 plt.title('学号3110号') plt.show
运行结果如下:
代码11:绘制箱型图
#绘制箱型图 import matplotlib.pyplot as plt import numpy as np import pandas as pd x = np.random.randn(1000) #1000个服从正态分布的随机数 D = pd.DataFrame([x,x+1]).T #构造两列的DataFrame D.plot(kind='box') #调用Series内置的绘图方法绘图,用kind参数指定箱型图(box) plt.title('学号3110号') plt.show()
运行结果如下:
代码12:使用plot(logy=True)函数进行绘图
#绘制y轴的对数图形的对比图 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 import numpy as np import pandas as pd x = pd.Series(np.exp(np.arange(20))) plt.figure(figsize=(8,9)) #设置画布大小 ax1 = plt.subplot(2,1,1) x.plot(label='原始数据图',legend=True) plt.title('学号3110号') ax1 = plt.subplot(2,1,2) x.plot(logy=True,label='对数数据图',legend=True) plt.title('学号3110号') plt.show()
运行结果如下:
代码13:绘制误差棒图
# 使用pyplot的errorbar()函数可以快速绘制误差棒图,errorbar()函数的语法格式如下所示: # errorbar(x,y, yerr=None, xerr=None, fmt='', ecolor=None, # elinewidth=None, capsize=None, barsabove=False, lolims=False, # uplims=False, xlolims=False, xuplims=False, errorevery=1, # capthick=None, *, data=None, **kwargs) # 该函数常用参数的含义如下。 # ·x,y:表示数据点的位置。 # ·xerr,yerr:表示数据的误差范围。 # ·fmt:表示数据点的标记样式和数据点之间连接线的样式。 # ·ecolor:表示误差棒的线条颜色。 # ·elinewidth:表示误差棒的线条宽度。 # ·capsize:表示误差棒边界横杆的大小。 # ·capthick:表示误差棒边界横杆的厚度。 # 使用errorbar()函数绘制一个误差棒图,代码如下。 import numpy as np import matplotlib.pyplot as plt x = np.random.randn(5) y = (25, 32, 34, 20, 25) y_offset = (3, 5, 2, 3, 3) plt.errorbar(x, y, yerr=y_offset, capsize=3, capthick=2) plt.title('学号3110号') plt.show() #绘制误差棒图 # import matplotlib.pyplot as plt # plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 # plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 # import numpy as np # import pandas as pd # error = np.random.randn(10) #定义误差列 # y = pd.Series(np.sin(np.arange(10))) #均值数据列 # y.plot(yerr=error) #绘制误差图 # plt.title('学号10号') # plt.show()
运行结果如下:
总结:
在数据可视化中,我们主要使用pandas作为数据探索和分析工具,通常绘图工具都是Matplotlib和pandas结合使用。一方面,Matplotlib是绘图工具的基础,pandas绘图依赖于它;另一方面,pandas绘图有着简单直接的优势,因此,两者互相结合,往往能够以最高的效率做出符合我们需要的图。