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

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

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

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

Python

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

Q&A

解決済

3回答

15243閲覧

フォルダ内の画像をランダムで特定の割合に分けたい

redp

総合スコア49

Python 3.x

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

Python

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

0グッド

2クリップ

投稿2017/11/29 11:26

###実現したいこと
pythonにおいて指定したディレクトリ内の画像を例えば7:3とかの割合に(できればランダムで)分けて2つのディレクトリに保存したいと考えています。自分の知識では思いつかなかったので、皆様の力をお借りしたいです。

###階層例
例えば

img
|-img1.jpg
|-img2.jpg
.
.
.

というディレクトリを

img
|-dir1
| |-img1_1.jpg
| |-img1_2.jpg
| .
| .
| .
|-dir2
| |-img2_1.jpg
| |-img2_2.jpg
| .
| .
| .

というように2つのディレクトリに分けたいということです。図がわかりづらくて申し訳ありません。

###使用環境
python 3.6.3

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

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

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

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

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

wakame

2017/11/29 11:44

これは機械学習に使う学習データを7:3で分けるために上記のことをやろうとしていますか?
redp

2017/12/01 12:08

遅れてすみません。実際には機械学習では9:1くらいで分けるつもりです。
wakame

2017/12/01 12:27

機械学習に使うことを含めて回答を記述しました、参考にしてください。
guest

回答3

0

ベストアンサー

概念コードです。

  • 指定ディレクトリ配下から対象ファイルパスを取得する処理
  • 指定ファイルを指定ディレクトリに移動する処理

はご自身でコーディングください。

Python

1# 指定ディレクトリから対象ファイルパスを取得 2files = ['img%03d.jpg'%(i+1) for i in range(100)] 3print(files) 4 5# 乱数により移動先を振り分け 6import random 7for f in files: 8 if random.random() >= 0.3: # 70% 9 # dir1へ移動 10 print('dir1',f) 11 else: # 30% 12 # dir2へ移動 13 print('dir2',f)

投稿2017/11/29 11:52

can110

総合スコア38233

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

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

redp

2017/12/01 12:11

回答ありがとうございます。自分で考えて完成させようと思います。 ありがとうございました。
guest

0

質問の意向を完全に無視する形になりますがディレクトリに分けず、全ての画像データとラベルデータをひとまとめにして分けることを考えれば、例えばsklearnなどのライブラリを使えば簡単に分類することが可能です。

python

1from sklearn.cross_validation import train_test_split 2import numpy as np 3 4 5def main(): 6 data_set = np.array([ 7 [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], 8 [1, 1, 0, 1, 0, 1, 0, 1, 0, 1], 9 [2, 1, 0, 1, 0, 1, 0, 1, 0, 1], 10 [3, 1, 0, 1, 0, 1, 0, 1, 0, 1], 11 [4, 1, 0, 1, 0, 1, 0, 1, 0, 1], 12 [5, 1, 0, 1, 0, 1, 0, 1, 0, 1], 13 [6, 1, 0, 1, 0, 1, 0, 1, 0, 1], 14 [7, 1, 0, 1, 0, 1, 0, 1, 0, 1], 15 [8, 1, 0, 1, 0, 1, 0, 1, 0, 1], 16 [9, 1, 0, 1, 0, 1, 0, 1, 0, 1] 17 ]) 18 print(data_set.shape) 19 label = np.array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1]) 20 _train_x, _train_y, _test_x, _test_y = train_test_split( 21 data_set, 22 label, 23 test_size=0.1 24 ) 25 print(_train_x.shape) 26 print(_test_x.shape) 27 """ 28 >>> (10, 10) 29 >>> (9, 10) 30 >>> (9,) 31 test_sizeを変化させることによって割合を変えることができる。 32 今回は0.1指定なので9:1(train:test) 33 """ 34 35if __name__ == "__main__": 36 main() 37

参考:
sklearn.model_selection.train_test_split
scikit-learnでトレーニングデータとテストデータを分割する

投稿2017/12/01 12:26

wakame

総合スコア1170

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

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

redp

2017/12/02 17:39

回答ありがとうございます。なるほど、sklearnだと簡単にできそうですね。参考にさせていただきます。 ありがとうございました。
guest

0

問題を分割して考えるといいです。

  • ディレクトリ内のファイルリストを取得する方法
  • 7割のファイルを抽出する方法
  • ファイルを移動する方法

このうち、二番目だけちょっと詳しく書きます。

7割のファイルを抽出する方法

random.sampleを使うとよいでしょう。

Python

1import random 2 3file_to_dir1 = set(random.sample( 4 file_list, 5 int(len(file_list)*.7) 6)) 7file_to_dir2 = set(file_list) - file_to_dir1

投稿2017/11/29 11:42

編集2018/01/09 16:01
LouiS0616

総合スコア35658

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

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

redp

2017/12/01 12:10

回答ありがとうございます。setはあまりつかったことがなかったのでこれを機に使用してみようと思います。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問