Pandas Libraryベース


Pandas Libraryとは?


Pythonプログラミング言語を使用して作成されたデータ操作と分析のためのソフトウェアライブラリ.
3種類の客体(seriesdataframeindex・)を有する.

1. series


indexとvalueからなり、indexプロパティを使用してアクセスできます.
  • ベクトル対応
  • 1次元アレイ
  • seriesは、次の2つの方法で作成できます.
    # 방법 1 (배열)
    import pandas as pd
    data1 = pd.Series([0.25, 0.5, 0.75, 1.0], index = ['a', 'b', 'c', 'd'])
    data2 = pd.Series([0.25, 0.5, 0.75, 1.0], index = [2, 3, 5, 7])
    # 방법 2 (dictionary) - key가 index 역할 
    price_dict = {'apple': 20000,
                  'banana': 10000,
                  'pineapple': 9000,
                  'strawberry': 9000,
                  'cherry': 17000}
    price = pd.Series(price_dict)

    2. dataframe


    機械学習モード学習の学習データの基本データ構造は、인덱스열이름の2次元配列を有するものと考えられる.
  • 複数系列からなる
  • マトリクス対応
  • 多次元配列
  • 行=record=instance
  • 列=特徴=属性=column
  • Dataframeは、次の3つの方法で作成できます.
    # 방법 1) pd.DataFrame(series, columns)
    data = [{'a': i, 'b': 2*i} for i in range(3)]
    pd.DataFrame(data)
    
    # 여러 series의 결합 (방법1)
    validity_dict = {'apple': '2021-11-30',
                    'banana': '2021-10-30',
                    'pineapple': '2021-10-20',
                    'strawberry': '2021-10-21',
                    'cherry': '2021-10-22',}
    validity = pd.Series(validity_dict)
    
    fruit = pd.DataFrame({'price': price, 'validity': validity})
    fruit
    # 방법 2) pd.DataFrame(dictionary list)
    data = [{'a': 1, 'b':2}, {'b': 3, 'c':4}]
    pd.DataFrame(data)
    # 방법 3) pd.DataFrame(numpy array, columns, index)
    import numpy as np
    
    pd.DataFrame(np.random.rand(3,2), 
                 columns =['foo', 'bar'],
                index = ['a', 'b', 'c'])

    3. Index

  • 不変の配列(要素の配列を追加、修正、削除できない)または整列した集合とともに動作する
  • シーケンスで提供されるインデックス、レール可能性
  • ind = pd.Index([2,3,5,7,11])
    ind[1] # 인덱싱
    ind[::2] # 슬라이싱
    ind[1] = 0 # Type error 발생 (요소 변경 불가)
    
    indA = pd.Index([1,3,5,7,9])
    indB = pd.Index([2,3,5,7,11])
    indA & indB # 집합 연산 가능 (교집합)
    indA | indB # 집합 연산 가능 (합집합)
    # key를 이용한 데이터 인덱싱
    data = pd.Series([0.25, 0.5, 0.75, 1.0], index = ['a', 'b', 'c', 'd'])
    'a' in data # 'a'가 data에 들어있는지 확인
    data.keys() # data의 key(index) 가져오기
    list(data.items()) # data의 key-value 가져오기 (data.items() x)
    data['e'] = 1.25 # 값 추가
    data['d'] = 9.9999 # 값 치환
    # key를 이용한 데이터 슬라이싱
    data['a':'c'] # explicit한 인덱스 사용 
    data[0:3] # implicit한 인덱스 사용
    data[(data>0.3) & (data<0.8)]
    data[['a', 'e']] # 팬시 인덱싱

    4.DataFrameインデックスとスライス

  • locindexer(位置ベースindexer):明示インデックス(indexオブジェクトの値を利用)
  • ilocindexer(integer-location based indexer):暗黙インデックス(インデックスオブジェクトの値に関係のないレコード順)を使用したインデックス
  • DataFrame経由可能or속성アクセス可能
    1.data['column']exデータ[「price」](推奨方式)
    2. data.column ex) data.price
  • インデックスは列参照、レールは挙動参照
  • データフレームの作成

    area = pd.Series([423967, 170312, 149995, 141297, 695662], 
                     index = ['California', 'Florida', 'Illinois', 'New York', 'Texas'])
    pop = pd.Series([38332521, 19552860, 12882135, 19651127, 26448193],
                    index = ['California', 'Florida', 'Illinois', 'New York', 'Texas'])
    
    df = pd.DataFrame({'area':area, 'pop':pop})
    df['density'] = df['pop']/df['area']
    df

    行単位索引

    # 행단위 인덱싱을 할 때는 인덱서를 꼭 사용해야함. 
    df['California'] # 잘못된 방식
    df.loc['California'] # 올바른 방식
    df.iloc[0]
    # 팬시 인덱싱
    ind1 = ['Florida', 'Texas']
    df.loc[ind1]
    df.iloc[[1,4]] 

    列ごとの索引付け

    # 열단위 인덱싱은 인덱서를 활용하지 않고 특징 이름을 활용. 
    df.loc['pop'] # 잘못된 방식
    df['pop'] # 올바른 방식 
    type(df['pop']) # 결과는 series
    # 팬시 인덱싱
    ind2 = ['pop', 'area']
    df[ind2]

    滑空する

    df.loc['Florida':'Texas']
    df['Florida':'Texas'] # 인덱서 생략가능

    列ごとにスライド

    # dataframe의 column 인덱스 객체를 활용
    df[df.columns[1:]]
    # dataframe의 암묵적 idnex를 활용 
    df.iloc[:,1:]
    # 팬시 인덱싱
    ind4 = df['density']>=100
    df[ind4]
    
    ind5 = df['area']>=150000
    df[ind4 & ind5] 

    5.実測値処理


    NaN (Not a Number)

  • sum()、max()、mun()などの統計演算でエラーが発生しない
  • float64 type
  • None

  • sum()、max()、mun()などの統計演算でエラー
  • NULL演算

    isnull():欠落値を示すブールmaskを生成notnull():isnull()反対のbool maskを生成dropna():欠落した値を消去するデータを返す
    df.dropna(axis=0) # nan을 포함하는 행을 삭제
    df.dropna(axis=1) # nan을 포함하는 열을 삭제
    fillna(x):欠落値xのデータコピーを返す
    df.fillna(method = 'ffill') # 이전값으로 채우기
    df.fillna(method = 'bfill') # 다음값으로 채우기

    6.重複データ処理

    drop_duplicates():Pandasデータフレームにおける冗長データの検証と処理方法
    drop_duplicates(subset = None, 
    		keep = ‘first’, 
    		inplace = False, 
    		ignore_index = False)
    df[df.duplicated(keep = False)] # 중복 데이터 '확인'
    df.drop_duplicates() # 중복 데이터 '삭제' 
    df.drop_duplicates(subset = [‘brand’]) # brand특징 중복 데이터 삭제

    7.データフレームのマージ


    concat関数

  • pd.concat([df1, df2])
  • seriesまたはdataframeの組合せ
  • default:連結(垂直)行単位
  • np.concatenate()と異なり、インデックスは変わらない
    =>解決方法:pd.concat([df1, df2], ignore_index=True)
  • merge関数

  • キー列名称同時:onキーワード使用
  • pd.merge(df1, df2, on = ['employee'])
  • キー列名が異なる:left_on & right_onキーワード使用
  • # employee(=name) 으로 결합
    pd.merge(df1, df3, left_on = 'employee', right_on='name')
  • 索引名同時:left_index & right_indexキーワード使用
  • pd.merge(df1, df3, left_index=True, right_index=True)