【データ分析入門】高度なNumpy


pandas は、次のような強力なPython データ分析ライブラリです。データの処理と分析効率的で柔軟なツールを提供します。NumPyの上に構築されています構造化データ(表形式データなど)の処理そして時系列データ豊富なデータ構造とデータ操作メソッドを提供します

pandas は、 SeriesDataFrame という2 つの主要なデータ構造を提供しますSeries は、ラベル付きリストに似た1 次元のラベル付き配列です。さまざまな種類のデータを保存するDataFrame は、リレーショナル データベースのテーブルに似た2 次元の表形式のデータ構造です。複数のシリーズで構成され、各シリーズには共通のインデックスがありますこれにより、パンダはデータの処理と分析を非常に便利かつ効率的に行うことができます。

pandas を使用すると、データインポートデータクリーニングデータ変換データスクリーニングデータ分析などの操作を簡単に実行できますインデックス作成スライス、集計、結合並べ替え統計描画など豊富な機能とメソッドを提供し、データ分析をシンプルかつ直感的にします。

1. データの再構成

1.1 視点

3 つの列「Date」、「Type」、「Value 」を含むDataFrame df2  があるとします。「Type」列の一意の値を新しいデータフレームの列として使用し、「日付」列を新しいデータフレームのインデックスとして使用し、「値」列の対応する値を入力したいと考えています新しい DataFrame の対応する位置   今すぐ
行を列に変換する、次のようにコードを実装できます。

>>> df3= df2.pivot(index='Date',columns='Type', values='Value')

ここに画像の説明を挿入
pivot() 関数のパラメータを説明し   ましょう。
  索引:新しい DataFrame にインデックスを付ける列名を指定します。ここでは「Date」列です。
  :新しい DataFrame 列として列名を指定します。ここでは、「Type」列の一意の値を指定します。
  価値観:新しい DataFrame に入力される値の列名を指定します。ここでは「Value」列です。

1.2 ピボットテーブル

pd.pivot_table() 関数  使用して、ピボットテーブルを作成するpivot_table() 関数は、パンダでデータをピボットし、指定された行と列に従って DataFrame の値を集計するのに役立ちます
  今すぐ行を列に変換する、 できるよ:

>>> df4 = pd.pivot_table(df2,values='Value',index='Date',columns='Type'])

  その中に登場するパラメータの意味を説明しましょう。
  その中で、「df2」は元のデータフレーム、「」は集計する数値列の名前、「日付」は新しいデータフレームのインデックス列名、一方、「タイプ」は新しいデータフレームの列名
  pd.pivot_table() 関数は、df2 内のデータを「日付」と「タイプ」でグループ化し、各グループの「値」列の集計値を計算します (デフォルトは平均です)次に、集計結果を新しい DataFrame df4 に入力します各行は日付を表し、各列はタイプを表します
  ピボット テーブル操作に重複するインデックス/列の組み合わせがある場合、pivot_table() 関数はデフォルトの集計方法 (平均) を使用してマージします。他の集計関数を使用したい場合は、aggfunc パラメータを渡すことで設定できます。たとえば、aggfunc='sum' は合計を意味します。

1.3 スタック/アンスタック

  stack() と unstack() は、パンダで階層インデックスを処理するために使用される関数ですマルチレベルのインデックス付きデータフレームの行ラベルと列ラベルをピボットする

>>> stacked = df5.stack() 
# 透视列标签
# 使用 stack() 函数将列标签透视,即将列标签转换为行索引,并将相应的数据堆叠起来。这样可以创建一个具有多级索引的 Series
>>> stacked.unstack()
# 透视索引标签
# 上述代码则使用 unstack() 函数将索引标签透视,即将行索引转换为列标签,并将相应的数据重新排列。这样可以还原出原始的 DataFrame 结构

ここに画像の説明を挿入

1.3 融合

  私たちはする必要があります指定した列を観測列に変換する場合では、pd.melt() 関数を使用して、 DataFrame に対して融合操作 (メルト) を実行できます。
  列を行に変換します。

>>> pd.melt(df2,id_vars=["Date"],value_vars=["Type","Value"],value_name="Observations")

ここに画像の説明を挿入
  ここで、df2 は元の DataFrame で、 id_vars=["Date"] は 'Date' 列を非融合のままにすることを意味しますID変数(つまり、変更されない列)。value_vars=[“Type”, “Value”] は、融合する列を「Type」と「Value」として指定します。value_name="Observations" は、新しく生成された観測列の名前が「Observations」であることを示します。
  pd.melt() 関数は、指定された列に対して融合操作融合された DataFrame には4 つの列が含まれます。融合された ID 変数 (「日付」)融合された列名 (「変数」)融合された値('観察')同様に元のデータフレーム内の対応する観測値


2. 反復

  df.iteritems()DataFrame のイテレータ メソッドDataFrame を列ごとに反復処理しますこれは、各反復で列インデックスと対応する列のシーケンスを含むキーと値のペアを生成するジェネレーターを返します
  df.iterrows()DataFrame のイテレータ メソッドDataFrame を行ごとに反復しますこれは、一連の行インデックスと対応する行を各反復で含むキーと値のペアを生成するジェネレーターを返します

>>> df.iteritems() 
# (列索引,序列)键值对
>>> df.iterrows()
# (行索引,序列)键值对

  基本的な操作をいくつか示します。

for column_index, column in df.iteritems():
    # 对每一列进行操作
    print(column_index)  # 打印列索引
    print(column)  # 打印列的序列

for index, row in df.iterrows():
    # 对每一行进行操作
    print(index)  # 打印行索引
    print(row)  # 打印行的序列

3. 高度なインデックス

3.1 基本的な選択

  DataFrame の条件に基づいて列を選択する操作は次のとおりです。これはいくつかの基本操作です。

>>> df3.loc[:,(df3>1).any()] 
# 选择任一值大于1的列
>>> df3.loc[:,(df3>1).all()] 
# 选择所有值大于1的列
>>> df3.loc[:,df3.isnull().any()] 
# 选择含 NaN值的列
>>> df3.loc[:,df3.notnull().all()] 
# 选择含 NaN值的列

3.2 isinによる選択

  多くの場合、必要なことは条件に基づいて列を選択するという単純な操作だけではないため、 DataFrame のさらなる選択とフィルター操作を学習する必要があります

>>> df[(df.Country.isin(df2.Type))] 
# 选择为某一类型的数值 
>>> df3.filter(items=”a”,”b”]) 
# 选择特定值
>>> df.select(lambda x: not x%5) 
# 选择指定元素

3.3 場所による選択

  where() はPandas Series オブジェクトのメソッドであり、条件を満たすサブセットを選択するために使用することもできます

>>> s.where(s > 0)
# 选择子集

3.4 クエリによる選択

>>> df6.query('second > first')
# 查询DataFrame

  df6.query('2 番目 > 最初')DataFrame オブジェクトに対するクエリ操作, DataFrame df6 の「2 番目 > 1 番目」の条件を満たす行をクエリします。ここで、「2 番目」と「1 番目」は列名、比較する 2 つの列を示します。条件を満たす行のみが選択され、新しい DataFrame として返されます


3.5 インデックスの設定/解除

>>> df.set_index('Country')
# 设置索引
>>> df4 = df.reset_index()
# 取消索引
>>> df = df.rename(index=str,columns={
    
    "Country":"cntry","Capital":"cptl","Population":"ppltn"})
# 重命名DataFrame列名

3.6 インデックスのリセット

場合によっては、 Series のインデックスを再作成する  必要があります
  Series のインデックスを ['a', 'c', 'd', 'e', 'b'] に再配置し、新しい Series を返します。もし新しいインデックス値は元のインデックスに存在しないため対応する値は NaN (欠損値) に設定されます。

>>> s2 = s.reindex(['a','c','d','e','b'])

3.6.1 前方パディング

>>> df.reindex(range(4), method='ffill')
   Country Capital  Population
 0 Belgium Brussels 11190846
 1 India  New Delhi 1303171035
 2 Brazil  Brasília 207847528
 3 Brazil  Brasília 207847528

3.6.2 埋め戻し

>>> s3 = s.reindex(range(5), method='bfill')
 0 3 
 1 3
 2 3
 3 3
 4 3

3.7 複数のインデックス

>>> arrays = [np.array([1,2,3]),
np.array([5,4,3])]
>>> df5 = pd.DataFrame(np.random.rand(3, 2), index=arrays)
>>> tuples = list(zip(*arrays))
>>> index = pd.MultiIndex.from_tuples(tuples, 
 names=['first', 'second'])
>>> df6 = pd.DataFrame(np.random.rand(3, 2), index=index)
>>> df2.set_index(["Date", "Type"]) 

4. データの重複

>>> s3.unique() 
# 返回唯一值
>>> df2.duplicated('Type')
# 查找重复值
>>> df2.drop_duplicates('Type', keep='last') 
# 去除重复值
>>> df.index.duplicated()
# 查找重复索引

5. データのグループ化

5.1 集計

>>> df2.groupby(by=['Date','Type']).mean()
>>> df4.groupby(level=0).sum()
>>> df4.groupby(level=0).agg({
    
    'a':lambda x:sum(x)/len(x),
'b': np.sum})

5.2 変換

>>> customSum = lambda x: (x+x%2)
>>> df4.groupby(level=0).transform(customSum)

6. 欠損値

>>> df.dropna()
# 去除缺失值NaN
>>> df3.fillna(df3.mean())
# 用预设值填充缺失值NaN
>>> df2.replace("a", "f") 
# 用一个值替换另一个值

7. データの結合

7.1 マージ-マージ

ここに画像の説明を挿入

>>> pd.merge(data1, data2, how='left', on='X1')

data1data2 を2 つの DataFrame として  結合します。「X1」列で左結合し、新しいデータフレームを返します。左結合はdata1 のすべての行を保持しdata2 の修飾された行を data1 にマージします。data2 に data1 と一致する行がない場合、対応する列の値は NaN (欠損値) に設定されます。
ここに画像の説明を挿入

>>> pd.merge(data1, data2, how='right', on='X1')

  右接続もdata1data2のDataFrameを組み合わせた接続方法です「X1」列で右結合し、新しいデータフレームを返します。data2 のすべての行を保持しdata1 の修飾された行を data2 にマージします。data1 に data2 と一致する行がない場合、対応する列の値は NaN (欠損値) に設定されます。
ここに画像の説明を挿入

>>> pd.merge(data1, data2,how='inner',on='X1')

data1data2をその 'X1' 列に従って  内部結合し、新しい DataFrame を返すことは、いわゆる内部結合 (inner join )ですそれdata1 と data2 のうち、列 'X1' に一致する行のみを保持します。、それらをマージします。
  パラメータのhow='inner'の意味内部結合を使用してマージする他の可能な値は「left」、「right」、「outer」です。これらは、次に説明する左結合右結合、および外部結合を表します。on='X1' は、'X1' 列をマージキー (つまり、共通列) として使用することを意味します。
ここに画像の説明を挿入

>>> pd.merge(data1, data2, how='outer',on='X1')

2 つの DataFrame data1data2 を'X1' 列で外部  結合し、新しい DataFrame を返します外部結合 (外部結合) はマージ方法であり、data1 と data2 のすべての行を保持し、「X1」列の値に従ってそれらをマージします。
  外部結合では、ある DataFrame の行が別の DataFrame で一致しない場合、対応する列の値は NaN (欠損値) に設定され、データが欠損していることを示します。


7.2 接続 - 結合

>>> data1.join(data2, how='right')

7.3 スプライシングと連結

7.3.1 縦ステッチ

>>> s.append(s2)

7.3.2 縦横ステッチ

>>> pd.concat([s,s2],axis=1, keys=['One','Two']) 
>>> pd.concat([data1, data2], axis=1, join='inner')

8. 日付

>>> df2['Date']= pd.to_datetime(df2['Date'])
>>> df2['Date']= pd.date_range('2000-1-1', periods=6, freq='M')
>>> dates = [datetime(2012,5,1), datetime(2012,5,2)]
>>> index = pd.DatetimeIndex(dates)
>>> index = pd.date_range(datetime(2012,2,1), end, freq='BM')

9. 視覚化

Matplotlib は、データ視覚化グラフを描画するための Python ライブラリです。折れ線グラフ、散布図、ヒストグラム、円グラフなど、さまざまなタイプのグラフを作成するためのさまざまな機能とツールが提供されます。

  次に、Matplotlib ライブラリをインポートし、名前を plt に変更します。このようにして、私たちは、plt オブジェクトを使用して Matplotlib 関数とメソッドを呼び出す、グラフを作成および変更するため。

>>> import matplotlib.pyplot as plt

ここで、 Matplotlib ライブラリをインポートして、 Pandas ライブラリのSeriesオブジェクトを使用して  みましょう.plot() メソッドMatplotlibライブラリplt.show() 関数データのデフォルトのグラフを生成して表示します。

>>> s.plot()
>>> plt.show()

ここに画像の説明を挿入
Pandas ライブラリのDataFrameオブジェクトを使用することもできます.plot() メソッドMatplotlibライブラリplt.show() 関数データのデフォルトのグラフを生成して表示します。

>>> df2.plot()
>>> plt.show()

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/m0_65748531/article/details/132310557