測定値の処理

4683 ワード

実測値は何ですか。


名前の通り、これは測定されていない値です.
どんな値段も取らないし、もちろんゼロではありません.
通常nullまたはNaNとして表される.
(bigqueryではieee divide関数はnullとNaNの区切り記号のように見えますが...これはさらに理解する必要があります)
自然発生する可能性のある決断値もあります.
たとえば、小切手カード決済データに決済試行ログデータテーブルがあることを想像すると、決済試行金額と実際の決済金額の列があります.
また、残高が不足していれば実際に支払うことはないので、NULL値に設定できます.

処理方法


null値では何も分析できません.
したがって、ローの値が空の場合、完全なデータのセットだけで分析できます.これは最も簡単かもしれません.以下の場合、そのような決定を簡単にすることは難しい.
1.データを1つずつ送信するのが惜しい場合.つまり、観測されたデータセット自体が小さいと、
2.季節性を有するデータについて、ある特定の季節性時期のデータが失われた場合、分析結果も影響を受ける.データセットの規模が小さいほど、影響が大きくなります.

残念なことにnullの代わりに値を検索します。


方法特定の値で配置
方法平均値(代表値)として入れる
方法前/後の値として
方法補間
まずデータセットを検索し、bigquery-public-dataセットに天気表があります.
    select 
                date,
                sum(case when postal_code = '10054' then avg_temperature_air_2m_f end) avg_10054,
                sum(case when postal_code = '10056' then avg_temperature_air_2m_f end) avg_10056,
                sum(case when postal_code = '12014' then avg_temperature_air_2m_f end) avg_12014,
                sum(case when postal_code = '22014' then avg_temperature_air_2m_f end) avg_22014,
                sum(case when postal_code = '23025' then avg_temperature_air_2m_f end) avg_23025,
                sum(case when postal_code = '24123' then avg_temperature_air_2m_f end) avg_24123,

      from 
                `bigquery-public-data.covid19_weathersource_com.postal_code_day_history`

     where      1=1
       and      country = 'IT' # 국가 코드 IT는 이탈리아라 함. 출처: [국가코드조회](https://eminwon.qia.go.kr/common/CountrySP.jsp)
       and      date between date( '2021-04-13' ) and date( '2021-04-17' ) # null값 주변의 날짜들도 같이 가져오기 위해
       and      postal_code in ( '10054', '10056', '12014', '22014', '23025', '24123' ) # 예시를 위해 지정한 임의의 우편번호

  group by      date
  order by      date
  • クエリー結果
  • 4月15日の平均気温はゼロであることが確認できた.
    方法特定の値で配置
    df_specific_value.fillna(0)  # 0으로 채워넣기
  • 0の結果

    記入しましたが、役に立たないようです.0で埋めると良い場合があります
  • 方法平均値(代表値)として入れる
    平均値ではなく、mode(チェ・フィンチ)やmedian(中位数)などの適当な代表値であれば使用できる方法だ.
    # 각 지역(우편번호)마다의 평균값을 준비 하기
    mean_10054 = df[ 'avg_10054' ].mean()
    mean_10056 = df[ 'avg_10056' ].mean()
    mean_12014 = df[ 'avg_12014' ].mean()
    mean_22014 = df[ 'avg_22014' ].mean()
    mean_23025 = df[ 'avg_23025' ].mean()
    mean_24123 = df[ 'avg_24123' ].mean()
    # 준비한 평균값을으로 결측치를 대신하기
    df_mean['avg_10054'].fillna(mean_10054, inplace = True)
    df_mean['avg_10056'].fillna(mean_10056, inplace = True)
    df_mean['avg_12014'].fillna(mean_12014, inplace = True)
    df_mean['avg_22014'].fillna(mean_22014, inplace = True)
    df_mean['avg_23025'].fillna(mean_23025, inplace = True)
    df_mean['avg_24123'].fillna(mean_24123, inplace = True)
    df_mean
  • の平均値(代表値)で満たされた結果
  • 0で埋めるよりずっと自然に見えます.
    しかしこの場合、前後2日間の日付しか持ってこなかったのですが、1年だったら?上のデータはイタリアの気温で、イタリアはわが国のように四季がはっきりしています.
    これにより、代表値で測定値を加えると、データが歪む可能性が完全にあります.
    (例えば、夏の気温データが実測であれば、年中平均気温は入力できません)
    方法前または後の値
    季節的な特徴があれば、考えられる方法です.
    しかし、欠点はnullが最初または最後に現れると使用できないことです.
    # 직전 값으로 넣기
    df_forward.fillna(method = 'pad', inplace = True)
  • 以前の結果
  • # 직후 값으로 넣기
    df_backward.fillna(method = 'bfill', inplace = True)
  • 以降の結果
  • この時期の季節性はよく反映されていますが、前後が滑らかな感じではありません.
    方法補間
    線形補間法を用いて,空の値の各位置を測定値の代わりに線形補間法を用いた.
    df_interpolate.interpolate( method = 'linear', inplace = True)
  • ステップの結果
  • null値が2つより大きい場合にも適用できます.
    例:
    0
    1.25
    null
    null
    2
    上記のデータを実測値の代わりに補間すると、
    0
    1.25
    1.5
    1.75
    2
    結果は以上の通りです.
    テーブル・カラム・データのnull値を解放せずに、置換する値を検索すると、
    時期の流れを示すとともにnull値を滑らかに塗りつぶすことが重要であるため,この点を考慮して方法が望ましい.
    断面がテーブル列でない場合は、代表値を加算できます.
    (データ分析の聖地タイタニック生存分析では、費用が空の値に支払われると、測定値を平均データに置き換えて分析するノートも見られます…)