데이터 전처리편~위성 화상 데이터와 심층 학습에 의한 호수의 엽록소 농도 추정~
개요
위성 화상 데이터와 심층 학습에 의한 호수의 엽록소 농도 추정의 연구를 실시하고 있습니다.
위성 화상 데이터를 취득해, 위성 화상 데이터로부터 해당하는 수질 거점의 위도 경도를 지정해 추출한 픽셀치(DN값)나, 구름의 정보를 바탕으로 표를 작성했습니다. 앞으로 또 딥 뉴럴넷에 학습시키기 위해서, 데이터의 전처리·성형하고 싶습니다. 그 때 도움이 된 Python 프로그래밍 모듈이나 메소드 등에 대해 이번에는 기술하고 싶습니다.
원본 데이터 테이블
이런 느낌의 데이터를 작성하고 있습니다.
왼쪽에서 위성 화상 데이터 취득일, 수질 거점, 수질 거점의 위도 경도, 위성 화상 데이터의 밴드 타입, 추출한 픽셀치(DN값), cloud 구름 정보(0 or 1 구름이라면 1, 아니면 0 ), terrian (육지 여부),
cloudconfidence(구름일 가능성.
이제 딥 신경망에 입력하기위한 모양으로 변환합니다.
pandas로 조건 추출한 다음 표를 Array 형식으로 변환
딥 신경망에 입력하려면 데이터를 Array 유형으로 변환해야 합니다.
변환했을 때의 프로그래밍은 이쪽↓
import numpy as np
import pandas as pd
all_data = pd.read_excel("表のPath")
time = []
time = all_data["Time"].unique()
kyoten = []
kyoten = all_data["name"].unique()
list = []
list2 = []
pixel = []
CH = []
Cloud = []
terrian = []
CC = []
CS = []
for t in time:
for n in kyoten:
pixel = all_data["pixel"][(all_data["Time"] == t) & (all_data["name"] == n)].values
CH = all_data["CH"][(all_data["Time"] == t) & (all_data["name"] == n)].values
Cloud = all_data["cloud"][(all_data["Time"] == t) & (all_data["name"] == n)].values
CC = all_data["cloudconfidence"][(all_data["Time"] == t) & (all_data["name"] == n)].values
CS = all_data["cloudshade"][(all_data["Time"] == t) & (all_data["name"] == n)].values
if len(CH2) != 0:
list += [[pixel2, Cloud[0], CC[0], CS[0]]]
list2 += [[CH[0]]]
data_array = np.array(list)
CH_array = np.array(list2)
여기서 사용한 모듈은 pandas와 numpy
기계 학습에는 필수 불가결한 두 가지군요.
여기서 포인트가 되는 것은 pandas 조건을 지정하여 테이블에서 값을 추출하는 방법 라고, 리스트로부터 np.array("list)로 array형으로 변환하고 있는 곳 정도군요.
그러나, 이런 느낌으로 3차원 이상의 불규칙한 array가 되고 있습니다.
다차원 목록을 1차원으로 평탄화하고 목록을 하위 목록으로 변환하는 방법
먼저 다차원 목록을 1차원으로 평탄화합니다.
참고로 한 사이트는 여기 → 다차원 목록을 1차원으로 평탄화하는 방법
for el in l:
if isinstance(el, collections.Iterable) and not isinstance(el, (str, bytes)):
yield from flatten(el)
else:
yield el
list1 = []
for x in data_array:
list1 += flatten(x)
이것만으로는 모든 데이터가 평탄화되고 있으므로, 일자 마다의 픽셀치~클로로필치의 서브 세트로 나눕니다. 목록을 n개의 하위 목록으로 분할하는 방법
def split_list(l, n):
"""
リストをサブリストに分割する
:param l: リスト
:param n: サブリストの要素数
:return:
"""
for idx in range(0, len(l), n):
yield l[idx:idx + n]
#14個の要素でリストを分割
inputs = np.array(list(split_list(list1, 14)))
이것으로 완성입니다! 이제 데이터를 정규화하여 학습 데이터와 테스트 데이터로 나눕니다.
데이터 정규화 및 학습 데이터 테스트 데이터로 분할하는 방법
학습 데이터 및 테스트 데이터로 분할하는 방법
0~1로 정규화하기 전에 로그를 취하고 있습니다. 이는 데이터 분포를 보다 정규 분포에 가깝게 하여 기계 학습에 효과적으로 하기 때문입니다.
필요한 모듈 가져오기
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
데이터의 로그를 취한 것을 0 ~ 1로 정규화
scaler = preprocessing.MinMaxScaler()
pixel_log = scaler.fit_transform(np.log(inputs[:, 0:11]))
cloud = scaler.fit_transform(inputs[:, 11:])
CH_log = scaler.fit_transform(np.log(CH_array))
픽셀 값과 구름 정보 등의 결합하고 위성 데이터와 엽록소 데이터의 결합 (일단 전부 셔플하기 위해
Numpy 배열을 결합하는 방법
input_log = np.concatenate((pixel_log, cloud), axis=1)
衛星データとクロロフィルデータの結合(いったん全部シャッフルするため)
zenbu = np.concatenate((input_log,CH_log),axis=1)
학습용 데이터와 테스트 데이터로 분할한 후 위성 데이터와 정답 엽록소 농도 데이터로 분할
zenbu_train, zenbu_test = train_test_split(zenbu, shuffle=True)
inputs_train = zenbu_train[:,0:14]
CH_train = zenbu_train[:,14:]
inputs_test = zenbu_test[:,0:14]
CH_test = zenbu_test[:,14:]
끝
이상 길어졌습니다만, 데이터의 전처리는 이것으로 끝입니다!
다음 번은 드디어 딥 뉴럴 넷 구축입니다!
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(데이터 전처리편~위성 화상 데이터와 심층 학습에 의한 호수의 엽록소 농도 추정~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/meinai929/items/f17590d8cb15184a024e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이런 느낌의 데이터를 작성하고 있습니다.
왼쪽에서 위성 화상 데이터 취득일, 수질 거점, 수질 거점의 위도 경도, 위성 화상 데이터의 밴드 타입, 추출한 픽셀치(DN값), cloud 구름 정보(0 or 1 구름이라면 1, 아니면 0 ), terrian (육지 여부),
cloudconfidence(구름일 가능성.
이제 딥 신경망에 입력하기위한 모양으로 변환합니다.
pandas로 조건 추출한 다음 표를 Array 형식으로 변환
딥 신경망에 입력하려면 데이터를 Array 유형으로 변환해야 합니다.
변환했을 때의 프로그래밍은 이쪽↓
import numpy as np
import pandas as pd
all_data = pd.read_excel("表のPath")
time = []
time = all_data["Time"].unique()
kyoten = []
kyoten = all_data["name"].unique()
list = []
list2 = []
pixel = []
CH = []
Cloud = []
terrian = []
CC = []
CS = []
for t in time:
for n in kyoten:
pixel = all_data["pixel"][(all_data["Time"] == t) & (all_data["name"] == n)].values
CH = all_data["CH"][(all_data["Time"] == t) & (all_data["name"] == n)].values
Cloud = all_data["cloud"][(all_data["Time"] == t) & (all_data["name"] == n)].values
CC = all_data["cloudconfidence"][(all_data["Time"] == t) & (all_data["name"] == n)].values
CS = all_data["cloudshade"][(all_data["Time"] == t) & (all_data["name"] == n)].values
if len(CH2) != 0:
list += [[pixel2, Cloud[0], CC[0], CS[0]]]
list2 += [[CH[0]]]
data_array = np.array(list)
CH_array = np.array(list2)
여기서 사용한 모듈은 pandas와 numpy
기계 학습에는 필수 불가결한 두 가지군요.
여기서 포인트가 되는 것은 pandas 조건을 지정하여 테이블에서 값을 추출하는 방법 라고, 리스트로부터 np.array("list)로 array형으로 변환하고 있는 곳 정도군요.
그러나, 이런 느낌으로 3차원 이상의 불규칙한 array가 되고 있습니다.
다차원 목록을 1차원으로 평탄화하고 목록을 하위 목록으로 변환하는 방법
먼저 다차원 목록을 1차원으로 평탄화합니다.
참고로 한 사이트는 여기 → 다차원 목록을 1차원으로 평탄화하는 방법
for el in l:
if isinstance(el, collections.Iterable) and not isinstance(el, (str, bytes)):
yield from flatten(el)
else:
yield el
list1 = []
for x in data_array:
list1 += flatten(x)
이것만으로는 모든 데이터가 평탄화되고 있으므로, 일자 마다의 픽셀치~클로로필치의 서브 세트로 나눕니다. 목록을 n개의 하위 목록으로 분할하는 방법
def split_list(l, n):
"""
リストをサブリストに分割する
:param l: リスト
:param n: サブリストの要素数
:return:
"""
for idx in range(0, len(l), n):
yield l[idx:idx + n]
#14個の要素でリストを分割
inputs = np.array(list(split_list(list1, 14)))
이것으로 완성입니다! 이제 데이터를 정규화하여 학습 데이터와 테스트 데이터로 나눕니다.
데이터 정규화 및 학습 데이터 테스트 데이터로 분할하는 방법
학습 데이터 및 테스트 데이터로 분할하는 방법
0~1로 정규화하기 전에 로그를 취하고 있습니다. 이는 데이터 분포를 보다 정규 분포에 가깝게 하여 기계 학습에 효과적으로 하기 때문입니다.
필요한 모듈 가져오기
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
데이터의 로그를 취한 것을 0 ~ 1로 정규화
scaler = preprocessing.MinMaxScaler()
pixel_log = scaler.fit_transform(np.log(inputs[:, 0:11]))
cloud = scaler.fit_transform(inputs[:, 11:])
CH_log = scaler.fit_transform(np.log(CH_array))
픽셀 값과 구름 정보 등의 결합하고 위성 데이터와 엽록소 데이터의 결합 (일단 전부 셔플하기 위해
Numpy 배열을 결합하는 방법
input_log = np.concatenate((pixel_log, cloud), axis=1)
衛星データとクロロフィルデータの結合(いったん全部シャッフルするため)
zenbu = np.concatenate((input_log,CH_log),axis=1)
학습용 데이터와 테스트 데이터로 분할한 후 위성 데이터와 정답 엽록소 농도 데이터로 분할
zenbu_train, zenbu_test = train_test_split(zenbu, shuffle=True)
inputs_train = zenbu_train[:,0:14]
CH_train = zenbu_train[:,14:]
inputs_test = zenbu_test[:,0:14]
CH_test = zenbu_test[:,14:]
끝
이상 길어졌습니다만, 데이터의 전처리는 이것으로 끝입니다!
다음 번은 드디어 딥 뉴럴 넷 구축입니다!
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(데이터 전처리편~위성 화상 데이터와 심층 학습에 의한 호수의 엽록소 농도 추정~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/meinai929/items/f17590d8cb15184a024e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import numpy as np
import pandas as pd
all_data = pd.read_excel("表のPath")
time = []
time = all_data["Time"].unique()
kyoten = []
kyoten = all_data["name"].unique()
list = []
list2 = []
pixel = []
CH = []
Cloud = []
terrian = []
CC = []
CS = []
for t in time:
for n in kyoten:
pixel = all_data["pixel"][(all_data["Time"] == t) & (all_data["name"] == n)].values
CH = all_data["CH"][(all_data["Time"] == t) & (all_data["name"] == n)].values
Cloud = all_data["cloud"][(all_data["Time"] == t) & (all_data["name"] == n)].values
CC = all_data["cloudconfidence"][(all_data["Time"] == t) & (all_data["name"] == n)].values
CS = all_data["cloudshade"][(all_data["Time"] == t) & (all_data["name"] == n)].values
if len(CH2) != 0:
list += [[pixel2, Cloud[0], CC[0], CS[0]]]
list2 += [[CH[0]]]
data_array = np.array(list)
CH_array = np.array(list2)
먼저 다차원 목록을 1차원으로 평탄화합니다.
참고로 한 사이트는 여기 → 다차원 목록을 1차원으로 평탄화하는 방법
for el in l:
if isinstance(el, collections.Iterable) and not isinstance(el, (str, bytes)):
yield from flatten(el)
else:
yield el
list1 = []
for x in data_array:
list1 += flatten(x)
이것만으로는 모든 데이터가 평탄화되고 있으므로, 일자 마다의 픽셀치~클로로필치의 서브 세트로 나눕니다. 목록을 n개의 하위 목록으로 분할하는 방법
def split_list(l, n):
"""
リストをサブリストに分割する
:param l: リスト
:param n: サブリストの要素数
:return:
"""
for idx in range(0, len(l), n):
yield l[idx:idx + n]
#14個の要素でリストを分割
inputs = np.array(list(split_list(list1, 14)))
이것으로 완성입니다! 이제 데이터를 정규화하여 학습 데이터와 테스트 데이터로 나눕니다.
데이터 정규화 및 학습 데이터 테스트 데이터로 분할하는 방법
학습 데이터 및 테스트 데이터로 분할하는 방법
0~1로 정규화하기 전에 로그를 취하고 있습니다. 이는 데이터 분포를 보다 정규 분포에 가깝게 하여 기계 학습에 효과적으로 하기 때문입니다.
필요한 모듈 가져오기
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
데이터의 로그를 취한 것을 0 ~ 1로 정규화
scaler = preprocessing.MinMaxScaler()
pixel_log = scaler.fit_transform(np.log(inputs[:, 0:11]))
cloud = scaler.fit_transform(inputs[:, 11:])
CH_log = scaler.fit_transform(np.log(CH_array))
픽셀 값과 구름 정보 등의 결합하고 위성 데이터와 엽록소 데이터의 결합 (일단 전부 셔플하기 위해
Numpy 배열을 결합하는 방법
input_log = np.concatenate((pixel_log, cloud), axis=1)
衛星データとクロロフィルデータの結合(いったん全部シャッフルするため)
zenbu = np.concatenate((input_log,CH_log),axis=1)
학습용 데이터와 테스트 데이터로 분할한 후 위성 데이터와 정답 엽록소 농도 데이터로 분할
zenbu_train, zenbu_test = train_test_split(zenbu, shuffle=True)
inputs_train = zenbu_train[:,0:14]
CH_train = zenbu_train[:,14:]
inputs_test = zenbu_test[:,0:14]
CH_test = zenbu_test[:,14:]
끝
이상 길어졌습니다만, 데이터의 전처리는 이것으로 끝입니다!
다음 번은 드디어 딥 뉴럴 넷 구축입니다!
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(데이터 전처리편~위성 화상 데이터와 심층 학습에 의한 호수의 엽록소 농도 추정~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/meinai929/items/f17590d8cb15184a024e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler()
pixel_log = scaler.fit_transform(np.log(inputs[:, 0:11]))
cloud = scaler.fit_transform(inputs[:, 11:])
CH_log = scaler.fit_transform(np.log(CH_array))
input_log = np.concatenate((pixel_log, cloud), axis=1)
衛星データとクロロフィルデータの結合(いったん全部シャッフルするため)
zenbu = np.concatenate((input_log,CH_log),axis=1)
zenbu_train, zenbu_test = train_test_split(zenbu, shuffle=True)
inputs_train = zenbu_train[:,0:14]
CH_train = zenbu_train[:,14:]
inputs_test = zenbu_test[:,0:14]
CH_test = zenbu_test[:,14:]
이상 길어졌습니다만, 데이터의 전처리는 이것으로 끝입니다!
다음 번은 드디어 딥 뉴럴 넷 구축입니다!
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(데이터 전처리편~위성 화상 데이터와 심층 학습에 의한 호수의 엽록소 농도 추정~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/meinai929/items/f17590d8cb15184a024e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)