資料基本探索(python資料分析與挖掘實戰篇)
阿新 • • 發佈:2019-02-13
# -*- 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') '''