1. 程式人生 > >資料基本探索(python資料分析與挖掘實戰篇)

資料基本探索(python資料分析與挖掘實戰篇)

# -*- coding: utf-8 -*-
"""
Created on Mon Jul  2 09:33:58 2018

@author: 87671
"""

###############
#資料探索
###############

import pandas as pd
data=pd.read_excel('catering_sale.xls',index_col=u'日期')#指定日期為index 
data.describe()

########檢測異常值
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')
# 'flies'即為異常值的標籤.[0]是用來標註第1列的異常值數值,同理[i]標註第i+1列的異常值.
x=p['fliers'][0].get_xdata()#資料只有一個列所以【0】
y=p['fliers'][0].get_ydata()
y.sort()
#用annotate添加註釋 
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()

#########資料特徵分析 
##定量資料分析
##定性資料分析 

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)


##########週期性分析 (累加圖)
from __future__ import print_function
data2=pd.read_excel('catering_dish_profit.xls',index=u'菜品名')
data2_copy=data2['盈利'].copy()
'''
AttributeError:'DataFrame' object has no attribute 'sort'
解決:將“sort”改為“sort_values”
'''
data2_copy.sort_values(ascending=False)

plt.figure()
data2_copy.plot(kind='bar')
plt.ylabel('盈利(元)')
#圖上的第二條線
p2=1.0*data2_copy.cumsum()/data.sum()#檢視一下p2[6]是85%
p2.plot(color='r',secondary_y=True,style='-o',linewidth=2)
#顯示的數格式 保留4位小數 
plt.annotate(format(p2[6],'.4%'), xy = (6, p2[6]), xytext=(6*0.9, p2[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #添加註釋,即85%處的標記。這裡包括了指定箭頭樣式。
plt.ylabel('盈利(比例)')
plt.show()


############相關性分析 
data3=pd.read_excel('catering_sale_all.xls',index=u'日期')
data3.corr()#相關係數矩陣 
data3.corr()[u'百合醬蒸鳳爪‘]#只顯示百合醬鳳爪的和其他才是的相關係數 
data3[u'百合醬蒸鳳爪'].corr(data3[u'翡翠蒸香茜餃']) #計算“百合醬蒸鳳爪”與“翡翠蒸香茜餃”的相關係數
'''
s1=df.loc[0]#提取第一行
s2=df.loc[1]#提取第二行 
s1.corr(s2,method='pearson'/'spearman')
'''