質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1854閲覧

Google ColabolatoryでEarth EngineとTensorFlowを併用する際に失敗する

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/03/02 16:54

編集2019/03/02 17:00

Google Earth EngineからのデータをNumpy配列としてロードするために使用する関数がエラーを起こす

Google Earth EngineをPython APIにて書いています。
Earth Engine とTensorFlowを併用するためのコードを練習しています。

書いているコード

Python

1# 認証(成功) 2!pip install earthengine-api 3!earthengine authenticate 4 5#ライブラリのインポート(成功) 6import ee 7from IPython import display 8import math 9from matplotlib import pyplot 10import numpy 11from osgeo import gdal 12import tempfile 13import tensorflow as tf 14import urllib 15import zipfile 16 17#Earth Engineクライアントの初期化(成功) 18ee.Initialize() 19 20# 対応するFmaskデータと共にLandsatイメージのDL(成功) 21input_image = ee.Image('LANDSAT/LT5_L1T_TOA_FMASK/LT50100551998003CPE00') 22 23#Earth Engine画像のサムネイルを簡単に印刷できるようにするためのヘルパー関数を定義(成功) 24def print_image(image): 25 display.display(display.Image(ee.data.getThumbnail({ 26 'image': image.serialize(), 27 'dimensions': '360', 28 }))) 29 30# ヘルパー関数を定義して画像とデータを視覚化(成功) 31print_image(input_image.visualize( 32 bands=['B3', 'B2', 'B1'], 33 min=0, 34 max=0.3, 35)) 36print_image(input_image.visualize( 37 bands=['fmask'], 38 min=0, 39 max=4, 40 palette=['808080', '0000C0', '404040', '00FFFF', 'FFFFFF'], 41)) 42 43# Earth Engineから生データを numpy配列としてダウンロードするためのヘルパー関数をいくつか定義(成功) 44def download_tif(image, scale): 45 url = ee.data.makeDownloadUrl(ee.data.getDownloadId({ 46 'image': image.serialize(), 47 'scale': '%d' % scale, 48 'filePerBand': 'false', 49 'name': 'data', 50 })) 51 local_zip, headers = urllib.urlretrieve(url) 52 with zipfile.ZipFile(local_zip) as local_zipfile: 53 return local_zipfile.extract('data.tif', tempfile.mkdtemp()) 54 55def load_image(image, scale): 56 local_tif_filename = download_tif(image, scale) 57 dataset = gdal.Open(local_tif_filename, gdal.GA_ReadOnly) 58 bands = [dataset.GetRasterBand(i + 1).ReadAsArray() for i in range(dataset.RasterCount)] 59 return numpy.stack(bands, 2) 60 61# 有効なデータバンドを含むEarth Engineからのデータを numpy配列としてロードするためにこの関数を使用する、 またFmaskバンドをバイナリクラウドラベルに変換します(すなわち fmask = 4)(ここで失敗) 62mask = input_image.mask().reduce('min') 63data = load_image(input_image.addBands(mask), scale=240) 64data[:,:,7] = numpy.equal(data[:,:,7], 4)

エラーメッセージ

何を怒られたのかよくわかりません。何かがインストール不足でしょうか?

AttributeError Traceback (most recent call last) <ipython-input-9-935423fdb1d9> in <module>() 1 mask = input_image.mask().reduce('min') ----> 2 data = load_image(input_image.addBands(mask), scale=240) 3 data[:,:,7] = numpy.equal(data[:,:,7], 4) <ipython-input-8-6a10eb8a20f9> in load_image(image, scale) 11 12 def load_image(image, scale): ---> 13 local_tif_filename = download_tif(image, scale) 14 dataset = gdal.Open(local_tif_filename, gdal.GA_ReadOnly) 15 bands = [dataset.GetRasterBand(i + 1).ReadAsArray() for i in range(dataset.RasterCount)] <ipython-input-8-6a10eb8a20f9> in download_tif(image, scale) 6 'name': 'data', 7 })) ----> 8 local_zip, headers = urllib.urlretrieve(url) 9 with zipfile.ZipFile(local_zip) as local_zipfile: 10 return local_zipfile.extract('data.tif', tempfile.mkdtemp()) AttributeError: module 'urllib' has no attribute 'urlretrieve'

該当のソースコード

上記コードの動かない部分だけを抜粋します。

Python

1mask = input_image.mask().reduce('min') 2data = load_image(input_image.addBands(mask), scale=240) 3data[:,:,7] = numpy.equal(data[:,:,7], 4)

試したこと

ライブラリをインポートした際に、

Python

1import urllib

というコードを

Python

1import urllib.request

としてみたのですが、ダメでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単にurllib.urlretrieveがpython2の書き方というだけで、他のライブラリは関係ないですね。

import urllib.requestするところまでは正しくて、あとはurllib.urlretrieve(url)urllib.request.urlretrieve(url)と書き直せば動いたでしょう。惜しかったですね。

21.6. urllib.request --- URL を開くための拡張可能なライブラリ — Python 3.6.8 ドキュメント
python3 urlretrieve - Qiita

投稿2019/03/02 19:20

編集2019/03/02 19:20
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/03 01:14

ありがとうございます!解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問