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

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

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

Geolocation(ジオロケーション)は、携帯電話やインターネットに接続したコンピューターターミナルなど、オブジェクトの現実世界での地理的位置の情報を扱う技術であり、位置評価の実施や、実際に評価された位置を示す場合もあります。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

3回答

2823閲覧

Pythonのデータフレームの要素から都市名のみ取り出す

python3beginner

総合スコア16

Geolocation

Geolocation(ジオロケーション)は、携帯電話やインターネットに接続したコンピューターターミナルなど、オブジェクトの現実世界での地理的位置の情報を扱う技術であり、位置評価の実施や、実際に評価された位置を示す場合もあります。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/04/24 10:27

編集2018/04/24 14:47

要素がバラバラに並んだpandasのデータフレームから、Geocoderなどを使って、都市名が存在すればその都市名だけをとりだすことはできるでしょうか?例えば、

df1 = pd.DataFrame({'Information1' : ['New York', 'game','Prof. HANA YAMADA', 'tennis','NICK'], 'Information2' : ['books', 24, 'GroupA','A. ELIZABETH JONES.',26], 'Information3' : ['Mr. ADAMS', 'Rome', 'Japan', 23,'GroupB'], 'Information4' : ['teacher', 'MARCO', 25, 'Moscow','pilot']}, index = {'Person 1','Person 2','Person 3', 'Person 4','Person 5'} )

これを出力して

Information1     Information2 Information3 Information4 Person 1 New York books Mr. ADAMS    teacher Person 2 game 24 Rome    MARCO Person 3    Prof. HANA YAMADA     GroupA Japan   25 Person 4 tennis A. ELIZABETH JONES. 23    Moscow Person 5 NICK 26 GroupB   pilot

という情報の種類がばらばらに並んだデータフレームdf1とがあるとします。
この、それぞれの人のInformation1からInformation4までで都市名があればその都市名を抽出することはできるでしょうか?
もし都市名が見つからなければ、以下のデータフレームdf2のGroupA~GroupDと一致するGroup名を取り出したいです。

df2= pd.DataFrame({'Number' : [0, 1, 2, 3]}, index = {'GroupA','GroupB','GroupC', 'GroupD'} )

これを出力して

Number GroupC 0 GroupB 1 GroupD 2 GroupA 3

この、「都市名が見つからなければGroup名をいれる」というのはif関数でできそうですが、
やはり前半の「都市名」のみ取り出す方法がさっぱりわかりません。

最終的に次のようになるのが理想です。

Place Person 1 New York Person 2 Rome Person 3 GroupA Person 4 Moscow Person 5 GroupB

詳しい方がいらっしゃいましたら、ぜひご回答ください。
よろしくお願いいたします。

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

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

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

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

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

hayataka2049

2018/04/24 11:20

予め都市名として取り扱う文字列を決めておけばできますが、そういったものはありますか?
python3beginner

2018/04/24 13:14

いえ、そのような都市リストは作成しておりません。申し訳ありません…この例ですと5人分ですが、実際扱っているデータは一万を超えてしまっておりなかなかリスト化できないのです…。
hayataka2049

2018/04/24 16:00 編集

なるほど、では都市名は首都だけですか? あと、そのデータの出処は? 本来は、上流で然るべき綺麗なフォーマットにして処理すべきですが・・・不可能ですか?
python3beginner

2018/04/24 16:09

いえ、首都だけではないのです…複雑で申し訳ありません。こちらは、大昔に調査され紙面にしか残っていないデータをスキャンして取り込んだものです。綺麗なデータセットにするために同じ性格の要素ごとにまとめる一環で都市名など所属のみ取りだそうとしているのですが、やはり難しいですよね…。
guest

回答3

0

あなたのいう「都市名」というのをリストにしといて、それと比較して都市名かどうかを判定する、というテでしょうね

#都市名をリストで用意できるかどうかというのはべつのはなし

投稿2018/04/24 23:54

y_waiwai

総合スコア87747

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

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

0

ベストアンサー

最後は人手で手間(コスト)をかけて洗うことになると思いますが、できるだけ手間を省く方法を。
0. Group*が入っているデータは除去(そのまま決定)

  1. 大文字が含まれる文字列だけ(この辺りの工夫は任意。APIに投げられる回数の制限等があるかどうかにも関わってくるので、それに応じて適当に決めてください)R.shigemoriさんの方法で都市名かどうか判定。googleのAPI(Geocoderはこれのラッパーのはず)を使うならある程度は情報を投げてくれるはずなので、明らかに都市名ではないもの(道路の名前、お店の名前など)は省けると思います。
  2. 方針1か2のどちらか、あるいは別の方法。方法1と2は適当に思いついたものを書いただけです。工夫の余地は色々あると思います。

方針1:
重複除去して人手で洗い、都市名として取り扱うリストを作成。これをやるかどうかは任意です。明らかに重複が大量にあるならやる価値はあるかもしれません。
方針2:
1データに対して複数の都市名候補が出ちゃったものだけ人手で洗い、都市名を決定。

  1. うまく決まらなかったものを抽出して人手で洗う。

手間は(コーディングでよほど手間取らなければ)ぜんぶ人手でやるよりかなり減らせます。品質は人手より多少下がるかもしれませんが、それほど心配する必要はないと思います。

投稿2018/04/25 02:26

編集2018/04/25 02:27
hayataka2049

総合スコア30933

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

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

R.Shigemori

2018/04/25 03:36

geocoderの実装についてコメントします。 pythonのラッパー(geocoder)を使う方法もありますが、私はrequestsから直接web-APIを呼ぶ方法を使っています。requestsモジュールを使ったことがあれば、googlemapの仕様に沿って必要なパラメーターを設定するだけなので手間がないかと思います。 googlemapのgeocoderは優秀すぎるので、あらかじめ地名ではないものを除外する努力をするべきかもしれません。基本、mapに載るもの(ランドマーク)は結果が戻ってくるので、確認が手間になるかもしれません。また、県名だけでも結果が得られますので、都市の定義によってはこうしたものも除外したほうがいいでしょう。
python3beginner

2018/05/28 16:03

返答が遅くなり申し訳ありません。コメントありがとうございます、あらかじめ地名でないものを除外できるよう共通要素を見つけて試してみます!
guest

0

geocoderで検索をかけて結果が返ってくれば、地名とするというのでいけると思います。googlemap上に存在するものであれば、何でも結果を返してくれると記憶しています。その代わり、本当は名前なのに地名と同じだと誤判断される可能性があります。
いったん、これで機械的に処理したのちに人手でチェックという感じでしょうか。

投稿2018/04/24 18:08

編集2018/04/24 18:10
R.Shigemori

総合スコア3376

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問