1.缺失值分析及箱型图

数据:catering_sale.xls(餐饮日销额数)

缺失值使用函数:describe()函数,能算出数据集的八个统计量

 

import pandas as pd
catering_sale = r'.\catering_sale.xls' #餐饮数据
data = pd.read_excel(catering_sale, index_col=u'日期')  # 读取数据,指定“日期”列为索引
describe = data.describe() #describe()函数能算出数据集的八个统计量
print(describe)
count = describe.loc['count']   #loc统计对应的数值
print("缺失值为:% d" % (len(data) - int(count)))  # 记录有201条,但count只有200,说明缺失值数为1

 

结果分析:该数据表有一个缺失值,其中共有200个数据,最大值为2755.2147,最小值为22.00

极差-变异系数-四分位数间距:

data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
data = data[(data[u'销量'] > 400)&(data[u'销量'] < 5000)] #过滤异常数据
statistics = data.describe() #保存基本统计量

statistics.loc['range'] = statistics.loc['max']-statistics.loc['min'] #极差
statistics.loc['var'] = statistics.loc['std']/statistics.loc['mean'] #变异系数
statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%'] #四分位数间距

print(statistics)

 

结果:

 

 

箱型图:

# 画出数据的箱线图
import matplotlib.pyplot as plt  # 导入图像库

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签,plt.reParams是一个配置表
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

plt.figure()
p = data.boxplot(return_type='dict')  # 画箱线图,处理异常值
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('3148Tang-箱型图',fontsize=15)
plt.show()

分析:由图看出有一个离群点,大部分数据集中在2000-4000之间,也有少部分数据位于下界,箱型图提供了一个异常值标准

 

 

 2.频率分布直方图

数据:catering_fish_congee.xls (“捞起生鱼片”每日销售额)

频率直方图:

 

# 代码3-3 捞起生鱼片的季度销售情况
import pandas as pd
import numpy as np
catering_sale = './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)
# aggResult = data.groupby(by=['sale分层'])['sale'].agg({'sale',np.size})
aggResult = data.groupby(by=['sale分层'])['sale'].agg(np.size)
print(aggResult)

pAggResult = round(aggResult/aggResult.sum(), 2, ) * 100
print(pAggResult)

import matplotlib.pyplot as plt
plt.figure(figsize=(10,6))  # 设置图框大小尺寸
pAggResult.plot(kind='bar',width=0.8,fontsize=10)  # 绘制频率直方图
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.title('3148-Tang季度销售额频率分布直方图',fontsize=20)
plt.show()

 

3.绘制饼图

 

数据:catering_dish_profit.xls (不同菜品在某段时间的销售分布)

 

 

 

 

import pandas as pd
import matplotlib.pyplot as plt
catering_dish_profit = './catering_dish_profit.xls'  # 餐饮数据
data = pd.read_excel(catering_dish_profit)  # 读取数据

#绘制饼图
x = data['盈利']
labels = data['菜品名']
plt.figure(figsize=(10,6))  # 设置图框大小尺寸
plt.pie(x,labels=labels)# 绘制饼图
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.title('3148-Tang菜品销售量分布(饼图)',fontsize=15)
plt.axis('equal')
plt.show()

 

4.条形图:

 

#绘制条形图
x = data['菜品名']
y = data['盈利']
plt.figure(figsize=(10,6))  # 设置图框大小尺寸
plt.bar(x,y,color='g')# 绘制饼图
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.xlabel('菜品')
plt.ylabel('销量')
plt.title('3148-Tang菜品销售量分布(条形图)',fontsize=15)
plt.show()

 

 

5.用于比较数据--折线图

数据:dish_sale.xls,不同部门各月份的销售额

折线图:

 

#部门之间销售金额比较
data = pd.read_excel("./dish_sale.xls")  # 读取数据

plt.figure(figsize=(10,6))  # 设置图框大小尺寸

plt.plot(data['月份'],data['A部门'],color='skyblue',label='A部门',marker='o')
plt.plot(data['月份'],data['B部门'],color='red',label='B部门',marker='*')
plt.plot(data['月份'],data['C部门'],color='yellow',label='C部门',marker='s')

plt.legend()#显示图例
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.title('3148-Tang部门之间销售金额比较',fontsize=15)
plt.ylabel('销售额(万元)')
plt.show()

 

 

数据:dish_sale_b'.xls,B部门各年份之间销售金额比较

折线图:

#B部门各年份之间销售金额比较
data = pd.read_excel("./dish_sale_b.xls")  # 读取数据

plt.figure(figsize=(10,6))  # 设置图框大小尺寸

plt.plot(data['月份'],data['2012年'],color='green',label='2012年',marker='o')
plt.plot(data['月份'],data['2013年'],color='yellow',label='2013年',marker='*')
plt.plot(data['月份'],data['2014年'],color='purple',label='2014年',marker='s')

plt.legend()#显示图例
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.title('3148-TangB部门各年份之间销售金额比较',fontsize=15)
plt.ylabel('销售额(万元)')
plt.show()

 

分析:总体来看,3个部门的销售额呈递减趋势,A部门与C部门的递减趋势比较平稳;B部门的销售额下降趋势比较明显,进一步分析造成这种现象的原因,可能是原材料不足

6.周期性分析

数据:user.csv(某单位日用电量)

import pandas as pd
import matplotlib.pyplot as plt

df_normal = pd.read_csv("./user.csv") #读入数据
plt.figure(figsize=(10,6))
plt.plot(df_normal["Date"],df_normal["Eletricity"],color='green')
plt.xlabel("日期")
plt.ylabel("每日电量")

# 设置x轴刻度间隔
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.title("3148Tang-正常用户电量趋势")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.show()  # 展示图片

 

数据:Steal user.csv(窃电用户数据)

# 窃电用户用电趋势分析
df_steal = pd.read_csv("./Steal user.csv")
plt.figure(figsize=(10, 6))
plt.plot(df_steal["Date"],df_steal["Eletricity"],color='yellow')
plt.xlabel("日期")
plt.ylabel("日期")

# 设置x轴刻度间隔
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.title("3148Tang-窃电用户电量趋势",fontsize=15)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.show()  # 展示图片

 

 

 7.帕累托图

 

import pandas as pd

#初始化参数
dish_profit = './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'盈利(元)')#左侧y轴,右侧y轴
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("3148Tang-菜品盈利数据帕累托图",fontsize=15)
plt.show()

 

 

 

 

8.相关性分析

import pandas as pd
catering_sale = './catering_sale_all.xls' #餐饮数据,含有其他属性
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
 #相关系数矩阵,即给出了任意两款菜式之间的相关系数
data.corr()
pd.options.display.float_format = '{:,.2f}'.format ## 指定小数位数
data.corr()

 #只显示“百合酱蒸凤爪”与其他菜式的相关系数
print(data.corr()[u'百合酱蒸凤爪'])
data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']) #计算“百合酱蒸凤爪”与“翡翠蒸香茜饺”的相关系数

结果:

 

 9.python主要数据探索函数

参考链接

(1)计算协方差矩阵 cov()

 

# 计算6x5随机矩阵的协方差矩阵
import pandas as pd 
import numpy as np
D = pd.DataFrame (np.random. randn (6, 5) ) #产生6X5随机矩阵
D.cov() #计算协方差矩阵

 

(2)绘制正弦与余弦虚线

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,2*(np.pi))
y1 = np.sin(x)
y2 = np.cos(x)
plt.figure()
plt.plot(x,y1,'r-o')
plt.plot(x,y2,'b-*')
plt.legend("sin(x)")

 

(3)饼图  hist()

 

import matplotlib.pyplot as plt #导入作图库
%matplotlib inline
# The slices will be ordered and plotted counter-clockwise.
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.show()

 

(4)函数图

import matplotlib.pyplot as plt  # 导入作图库
import numpy as np
import pandas as pd

%matplotlib inline
plt. rcParams ['font.sans-serif' ] = [ 'SimHei' ] #用来正常显示中文标签 
plt. rcParams [ 'axes.unicode_minus'] = False #用来正常显示负号 
x = pd. Series (np.exp (np. arange (20) ) ) #原始数据
x.plot (label = u'原始数据图',legend = True,color='lightskyblue')
plt.title('3148-Tang',fontsize=15)
plt.show()
x.plot (logy = True,label = u'原始数据图',legend = True,color='lightcoral') 
plt.show()

                                                     

 

(5)误差棒图

import matplotlib.pyplot as plt  # 导入作图库
import numpy as np
import pandas as pd
%matplotlib inline
error = np. random. randn (10) #定义误差列
y = pd.Series (np. sin (np. arange (10) ) ) #均值数据列
y .plot (yerr = error) #绘制误差图
plt.title('3148-Tang误差棒图',fontsize=15)
plt.show()

 

posted on 2023-02-25 16:04  小黄&  阅读(981)  评论(0)    收藏  举报