Reverse+Data+Frame

13132 ワード

Python乱数生成とデータボックスへの逆順配列
(Reverse Pandas Data Frame)
Erik Marsjaのブログで、データボックスを逆順序でソートする方法について言及されているのをネット上で見た.詳細はエリックのブログを参照
乱数の生成
  numpyのrandomモジュールには乱数を生成する方法が多く,今回のデータ構築過程で用いられた2つの乱数を生成する方法はnormalとbinomialであり,詳細は以下の通りである.
1. np.random.normal
ジルコニウムnp.random.normalの役割は,正規(Gauss)分布上のランダムサンプル点を得ることである.正規分布は自然界でよく発生する.例えば、微小でランダムな干渉の影響を受ける多数の試料の一般的な分布を記述し、ここでは正規分布の密度関数とその解釈を以下に示す.
p(x)=12πσ2−−−−√e−(x−μ)22σ2 p ( x ) = 1 2 π σ 2 e − ( x − μ ) 2 2 σ 2
  • μ μ 平均値
  • σ σ 標準偏差です.

  •   は正規分布に対応し、関数フォーマットは:numpy.random.normal(loc=0.0, scale=1.0, size=None)¶パラメータ解釈は以下の通りである.
  • loc:分布の平均値(中心);
  • scale:分布の標準偏差(拡張または幅);
  • size:出力の個数または形態、e.g.、(m,n,k).

  •   コードの例は次のとおりです.
    import numpy as np                  #      
    mu, sigma = 0, 0.1                  #       
    s = np.random.normal(mu, sigma, 10) #      
    s                                   #     
    array([ 0.16981948, -0.1163046 , -0.04132508,  0.06968584, -0.09236869,
           -0.01983998, -0.00139769,  0.0211951 , -0.13173266, -0.0554029 ])
    

      出力結果は0を平均(中心)、0.1を標準差、長さ10のランダム数列である.
    2. np.random.binomial
      np.random.binomial`の役割は,二項分布上のランダムサンプル点を取得することである.二項分布の確率密度関数とその展示は以下の通りである.
    P(N)=(nN)pN(1−p)n−N P ( N ) = ( n N ) p N ( 1 − p ) n − N
  • nは試験数である.
  • pは成功の確率である.
  • Nは成功したイベント数である.

  •   は二項分布に対応し、関数フォーマットはnumpy.random.binomial(n, p, size=None)であり、パラメータは以下のように解釈される.
  • n:分布パラメータ、値>=0;
  • p:確率分布パラメータ、値は0-1の間である.
  • size:出力の個数または形態、e.g.、(m,n,k).

  • コードの例は次のとおりです.
    import numpy as np               #      
    n, p = 10, .5                    #            
    s = np.random.binomial(n, p, 10) #      
    s                                #     
    array([5, 5, 6, 5, 3, 5, 5, 5, 4, 5])
    

      出力結果は10を分布数,0.5を確率分布パラメータ,長さ10の乱数列とした.データの準備
      は、上述npを紹介する.randomにおけるnormal(正規分布)とbinomial(二項分布)はデータを構築し,蒋データはデータボックスの形式に構築した.
    ##       
    import pandas as pd
    import numpy as np
    
    distracted = [1 for i in range(15)]                               #   15   1 list
    normal_perf = [0 for i in range(15)]                              #   15   0 list
    
    sex = ['Male' if i%2 == 0 else 'Female' for i in range(30)]       #   0/1      
    
    rt_distracted = np.random.normal(1660, 100, 15)                   #   15  1660   ,100             
    rt_normal_perf = np.random.normal(1054, 97, 15)                   #   15  1054   ,197             
    
    accuracy_distracted = np.random.binomial(1, .79, 15)              #   15  n=1,p=0.75        
    accuracy_normal_perf = np.random.binomial(1, .87, 15)             #   15  n=1,p=0.85        
    
    
    rt = np.concatenate((rt_distracted, rt_normal_perf))              #   rt_distracted rt_normal_perf   
    acc = np.concatenate((accuracy_distracted, accuracy_normal_perf)) #   accuracy_distracted accuracy_normal_perf   
    distracted.extend(normal_perf)                                    #      normal_perf  
    
    subject_id = [i for i in range(1,31)]                             #   1-30 id  
    
    data = {'Sub_id':subject_id, 'Condition':distracted, 'RT':rt,     #          
             'Accuracy':acc, 'Gender':sex}
    data_frame = pd.DataFrame(data)                                   #       
    data_frame.head()                                                 #        

    .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
    Sub_id
    Condition
    RT
    Accuracy
    Gender
    0
    1
    1
    1409.502116
    0
    Male
    1
    2
    1
    1500.290857
    1
    Female
    2
    3
    1
    1490.126112
    1
    Male
    3
    4
    1
    1624.817239
    0
    Female
    4
    5
    1
    1621.716861
    0
    Male
    ##逆順で並べ替え
      まず、最初の列と最後の列の対調、およびすべての列の逆順配列を含む列別逆順配列について説明します.
    1.交換GenderおよびAccuracy列
    columns = data_frame.columns.tolist() #         list
    columns = columns[-1:] + columns[:-1] #           
    data_frame = data_frame[columns]      #            
    
    data_frame.head()                     #        

    .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
    Gender
    Sub_id
    Condition
    RT
    Accuracy
    0
    Male
    1
    1
    1409.502116
    0
    1
    Female
    2
    1
    1500.290857
    1
    2
    Male
    3
    1
    1490.126112
    1
    3
    Female
    4
    1
    1624.817239
    0
    4
    Male
    5
    1
    1621.716861
    0
    2.データ・ボックスの列を昇順に並べ替えます.[注意:アルファベット順]
    data_frame = data_frame.sort_index(axis=1 ,ascending=True) #             
    data_frame.head()                                          #        

    .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
    Accuracy
    Condition
    Gender
    RT
    Sub_id
    0
    0
    1
    Male
    1409.502116
    1
    1
    1
    1
    Female
    1500.290857
    2
    2
    1
    1
    Male
    1490.126112
    3
    3
    0
    1
    Female
    1624.817239
    4
    4
    0
    1
    Male
    1621.716861
    5
    3.すべての列は、columns[::-1]またはcolumns.reverse()によって逆配列される.
    columns = data_frame.columns.tolist() #         list
    columns = columns[::-1]               #           
    #columns.reverse()                    #             【  2】
    data_frame = data_frame[columns]      #             
    data_frame.head()                    #        

    .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
    Sub_id
    RT
    Gender
    Condition
    Accuracy
    0
    1
    1409.502116
    Male
    1
    0
    1
    2
    1500.290857
    Female
    1
    1
    2
    3
    1490.126112
    Male
    1
    1
    3
    4
    1624.817239
    Female
    1
    0
    4
    5
    1621.716861
    Male
    1
    0
    ##逆順で並べ替え
      データボックスは、同様に行を逆順序に並べ替えることができ、操作前に以前の方法でデータを並べ替えることができる.
    data_frame = data_frame.sort_index(axis=1 ,ascending=True)  #             
    data_frame.head()                                           #        

    .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
    Accuracy
    Condition
    Gender
    RT
    Sub_id
    0
    0
    1
    Male
    1409.502116
    1
    1
    1
    1
    Female
    1500.290857
    2
    2
    1
    1
    Male
    1490.126112
    3
    3
    0
    1
    Female
    1624.817239
    4
    4
    0
    1
    Male
    1621.716861
    5
      データボックスは、同様に行を逆順序に並べ替えることができ、操作前に以前の方法でデータを並べ替えることができる.
    1.ilocでデータ・ボックスを逆順序でソートします.
    data_frame = data_frame.iloc[::-1] #   iloc          
    data_frame.head()                  #        

    .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
    Accuracy
    Condition
    Gender
    RT
    Sub_id
    29
    1
    0
    Female
    909.743587
    30
    28
    1
    0
    Male
    1156.069566
    29
    27
    1
    0
    Female
    1021.911590
    28
    26
    1
    0
    Male
    1095.878107
    27
    25
    1
    0
    Female
    1173.376446
    26
    2.df.sort_indexのうちaxis=0を設けて行を逆順に並べ替えることにより、このときの逆順操作によりデータボックスの並べ替えが復元されるようにしてもよい.
    data_frame = data_frame.sort_index(ascending=True, axis=0) #   sort_index        
    data_frame.head()                                          #        

    .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
    Accuracy
    Condition
    Gender
    RT
    Sub_id
    0
    0
    1
    Male
    1409.502116
    1
    1
    1
    1
    Female
    1500.290857
    2
    2
    1
    1
    Male
    1490.126112
    3
    3
    0
    1
    Female
    1624.817239
    4
    4
    0
    1
    Male
    1621.716861
    5
    3.最後に、reindexによってデータ・ボックスを再インデックスすることによって、行の逆順序配列の効果を達成することができる.
    data_frame = data_frame.reindex(index=data_frame.index[::-1]) #   reindex        
    data_frame.head()                                             #        

    .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
    Accuracy
    Condition
    Gender
    RT
    Sub_id
    29
    1
    0
    Female
    909.743587
    30
    28
    1
    0
    Male
    1156.069566
    29
    27
    1
    0
    Female
    1021.911590
    28
    26
    1
    0
    Male
    1095.878107
    27
    25
    1
    0
    Female
    1173.376446
    26
    まとめ
      本稿では,2つの分布のランダム数の確立方法と,データボックスの行と列を逆順序に配列する方法を概説した.初めてこのブログに书き込みましたが、まだまだですがよろしくお愿いします.何か质问があればメッセージをください.
    Escher
    2018/9/15