は、独自のCSVファイルに各Animal
を作成するには、動物の種類ごとに別のファイルを開く必要があります。これは辞書を使って各動物のファイルオブジェクトとcsvライターオブジェクトを保存することで可能です。終わりに、これはその後、正しく、すべてのファイルを閉じるために使用することができます
import csv
output_csvs = {} # e.g. {'1' : [file_object, csv_object]}
with open('input.csv', 'rb') as f_input:
csv_reader = csv.reader(f_input)
header = next(csv_reader)
for row in csv_reader:
animal = row[0]
if animal in output_csvs:
output_csvs[animal][1].writerow(row)
else:
f_output = open('animal_{}.csv'.format(animal), 'wb')
csv_output = csv.writer(f_output)
output_csvs[animal] = [f_output, csv_output]
csv_output.writerow(header)
csv_output.writerow(row)
for csv_file, csv_writer in output_csvs.values():
csv_file.close()
これはあなたに動物に従って命名出力CSVファイルのセットを与えるだろう、例えばまたanimal_1.csv
データがメモリに読み込まれるのに十分小さい場合、それはPythonのitertools.groupby()
機能を利用することにより、一度に動物と出力1つのブロックでソートすることができます
from itertools import groupby
import csv
with open('input.csv', 'rb') as f_input:
csv_reader = csv.reader(f_input)
header = next(csv_reader)
for animal, group in groupby(sorted(csv_reader), lambda x: x[0]):
with open('animal_{}.csv'.format(animal), 'wb') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow(header)
csv_output.writerows(group)
sorted()
を使用すると、同じ種類のすべての動物が確実にグループ化されます。これがすでにデータの場合は、ソートは必要ありません。
あなたがglob.glob()
を使用することができ、これらのファイルにアクセスするには:
import matplotlib.pyplot as plt
import glob
for animal_filename in glob.glob('animal_*.csv'):
with open(animal_filename, 'rb') as f_input:
csv_input = csv.reader(f_input)
heading = next(csv_input)
x, y = [], []
for row in csv_input:
x.append(int(row[1]))
y.append(int(row[2]))
fig, ax = plt.subplots()
plt.title(animal_filename)
ax.scatter(x, y)
plt.show()
どのように私はx-y座標をプロットするように、それらのプロセスを実行したい場合、新しく作成されたファイルを参照するのでしょうか? – Kevin
1つのプロットにつき、1つのグラフに1つのプロットが表示されますか? –
最後に、私はラスター形式に変換するarcpyを使用して最小境界ジオメトリを作成したいと思います。 – Kevin