【Pythonデータ分析】1 st-データ探索とデータ前処理


「Pythonデータ分析と発掘実戦」読書ノートのデータ探索とデータ前処理
文書ディレクトリ
  • @[toc]
  • ##一、データ探索Pythonにおけるデータ探索のためのライブラリは主にPandas(データ分析)とMatplotlib(データ可視化)である.
    ###データ分析内容データ品質分析:欠落値分析:異常値分析:一致性分析
    データフィーチャー解析
    ぶんぷぶんせき
    ひかくぶんせき
    とうけいりょうかいせき
    しゅうきぶんせき
    寄与度分析
    相関解析
    ###異常値検出コード
    #-*- coding: utf-8 -*-
    
    import sys
    reload(sys)
    
    sys.setdefaultencoding('utf-8')
    
    import pandas as pd
    
    catering_sale = '../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() #     
    
    プログラムを実行して箱型図pythonを得て箱型図で異常値検出を行う
    ###貢献度分析コード(野菜収益パレート図コード)
    #-*- coding: utf-8 -*-
    
    #           
    from __future__ import print_function
    import pandas as pd
    import sys
    
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    #     
    dish_profit = '../data/catering_dish_profit.xls' #        
    data = pd.read_excel(dish_profit, index_col = u'   ')
    data = data[u'  '].copy()
    data.sort_values(ascending=False)
    #sorted(data,reverse=True)  #     
    
    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.show()
    
    ##二、データ前処理###データ前処理内容データ洗浄:欠落値処理:異常値処理
    データ集積データ変換でーた集積データ変換:関数変換かんすうへんかん:正規化(正規化):連続属性離散化(一部のアルゴリズムではデータが分類属性形式であることが要求される):属性構造ぞくせい:ウェーブレット変換ウェーブレットへんかん
    ###データ洗浄コード(ラグランジュ法による補間)
    #coding=utf-8
    #        
    import pandas as pd #       Pandas
    from scipy.interpolate import lagrange #          
    pd.options.mode.chained_assignment = None #default='warn'
    inputfile = '../data/catering_sale.xls' #      
    outputfile = '../tmp/sales.xls' #      
    
    data = pd.read_excel(inputfile) #    
    data[u'  '][(data[u'  '] < 400) | (data[u'  '] > 5000)] = None #     ,      
    #data.loc[:,(u'  ',)][(data[u'  '] < 400) | (data[u'  '] > 5000)] = None #            ,         
    
    #row_indexs=(data[u'  ']<400|(data[u'  ']>5000))
    #data.loc[row_indexs,u'  ']=None
    
    #          
    #s    ,n       ,k         ,   5
    def ployinterp_column(s, n, k=5):
      y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #  
      y = y[y.notnull()] #    
      return lagrange(y.index, list(y))(n) #         
    
    #            
    for i in data.columns:
      for j in range(len(data)):
        if (data[i].isnull())[j]: #       。
          data[i][j] = ployinterp_column(data[i], j)
          #data.loc[j,i]=ployinterp_column(data[i],j)
    
    data.to_excel(outputfile) #    ,    
    
    Pandasエラー:Setting With Copy Warning pd.options.mode.chained_assignment = None #default='warn'を追加するか、または「.loc」pandas SettingWithCopyWarningを使用します(このコードの異常値は空ではありません).
    ###データ離散化コード
    #-*- coding: utf-8 -*-
    #     
    import pandas as pd
    atafile = '../data/discretization_data.xls' #     
    data = pd.read_excel(datafile) #    
    data = data[u'        '].copy()
    k = 4
    
    d1 = pd.cut(data, k, labels = range(k)) #     ,         0,1,2,3
    
    #      
    w = [1.0*i/k for i in range(k+1)]
    w = data.describe(percentiles = w)[4:4+k+1] #  describe         
    w[0] = w[0]*(1-1e-10)
    d2 = pd.cut(data, w, labels = range(k))
    
    from sklearn.cluster import KMeans #  KMeans
    kmodel = KMeans(n_clusters = k, n_jobs = 4) #    ,n_jobs    ,    CPU   
    kmodel.fit(data.values.reshape((len(data), 1))) #    
    c = pd.DataFrame(kmodel.cluster_centers_).sort_values(0) #      ,    (       )
    w = pd.rolling_mean(c, 2).iloc[1:] #       ,     
    w = [0] + list(w[0]) + [data.max()] #        
    d3 = pd.cut(data, w, labels = range(k))
    
    def cluster_plot(d, k): #              
      import matplotlib.pyplot as plt
      plt.rcParams['font.sans-serif'] = ['SimHei'] #          
      plt.rcParams['axes.unicode_minus'] = False #        
      
      plt.figure(figsize = (8, 3))
      for j in range(0, k):
        plt.plot(data[d==j], [j for i in d[d==j]], 'o')
        plt.ylim(-0.5, k-0.5)
      return plt
    
    cluster_plot(d1, k).show()
    cluster_plot(d2, k).show()
    cluster_plot(d3, k).show()
    
    kmeans()意味Python-kmeansアルゴリズム学習ノート
    ヒントに従ってerrorとwarning(warningは変更しなくてもよい)reshape is deprecated and will raise in a subsequent releaseを修正する.DataFrameソートsortの問題
    #-*- coding: utf-8 -*-
    #        
    import pandas as pd
    import numpy as np
    
    #     
    inputfile = '../data/principal_component.xls'
    outputfile = '../tmp/dimention_reducted.xls' #      
    
    data = pd.read_excel(inputfile, header = None) #    
    
    from sklearn.decomposition import PCA
    
    pca = PCA()
    pca.fit(data)
    pca.components_ #           
    pca.explained_variance_ratio_ #              
    
    pca=PCA(3)
    pca.fit(data)
    low_d=pca.transform(data) #    
    print low_d
    #df=pd.DataFrame(low_d)
    #print df
    #df.to_html('a.html')
    pd.DataFrame(low_d).to_html('a.html') #    html
    #pd.DataFrame(low_d).to_exel(outputfile)
    pca.inverse_transform(low_d)
    
    Error:‘DataFrame’ object has no attribute ‘to_Excel'が解決せずhtmlに書き込む
    DataFrame基本操作pythonでデータ分析4|pandasライブラリ紹介のDataFrame基本操作Pandas dataframeデータ書き込みファイルとデータベース