アプリ版:「スタンプのみでお礼する」機能のリリースについて

鳥のEXCELのデータを修正したいのですが、
方法が分かりません。

Pythonで簡単に出来ると聞いたことはありますが、
プログラミングに関しては全く素人で、なかなか勉強する時間もとれない状況です。

1、重複を取り除く
2、各地点ごとの種数を計算する
3、緯度ごとに並び替える

1、重複を取り除く

まず、以下のようなEXCELのデータを扱っています。
「、」がセルの境です。

緯度、地点、種名、個体数
33.5、A、suzume、3
33.5、A、karasu、2
33.5、A、sekirei、3
33.5、A、suzume、1
33.5、A、kiji、1
33.5、B、suzume、3
33.5、B、karasu、2
33.5、B、hato、1
33.5、B、suzume、1
33.5、C、hato、5
40.0、A、suzume、2
40.0、A、karasu、3
40.0、B、sekirei、4
..........

これは単なる例で実際のデータではありませんが、
この場合、同じ地点内でsuzumeが重複してあります(はじめのAとB)。
2つ目以降のsuzumeを消して1つ目に個体数をたす。

2、各地点ごとの種数を計算する

地点はA、B、C、A、B、…
とアルファベットで表記されています。
それぞれの地点ごとに種数の合計を出す。

3、緯度ごとに並び替える

緯度の列に各数値が表記されてあります。
これはバラバラで、高緯度から低緯度になるように並び替える。

以上1,2,3のことをしたいです。
このようなことをする(プログラムを組む)場合、どのようなソースコードになりますか?

どなたかご教授お願い致します。

質問内容に関して意味の分からない部分がありましたらお申し付け下さい。

A 回答 (2件)

(日本語は母国語ではないので。

この文法がおかしかったらすみません…)

PythonでCSVファイルのデータをpython listに変換:

>>> import csv
>>> with open('foo.csv', 'rb') as f:
... r = csv.reader(f)
... l = [row for row in r]
...
>>> l
[['33.5', 'A', 'suzume', '3'], ['33.5', 'A', 'karasu', '2'], ['33.5', 'A', 'sekirei', '3'], ['33.5', 'A', 'suzume', '1'], ['33.5', 'A', 'kiji', '1'], ['33.5', 'B', 'suzume', '3'], ['33.5', 'B', 'karasu', '2'], ['33.5', 'B', 'hato', '1'], ['33.5', 'B', 'suzume', '1'], ['33.5', 'C', 'hato', '5'], ['40.0', 'A', 'suzume', '2'], ['40.0', 'A', 'karasu', '3'], ['40.0', 'B', 'sekirei', '4']]

これで「l」はlistのlistです。
CSVが「,」と違う文字でくぎる場合は (例えば「、」):

r = csv.reader(f, delimiter='、')

最後の1,2,3(l[x[3]])がいらないみたいので、それを消えればlistからsetにすると['33.5','A','suzume']を一つになります:

>>> l2 = list(set([tuple(z[0:3]) for z in l]))
>>> l2
[('33.5', 'A', 'suzume'), ('40.0', 'B', 'sekirei'), ('33.5', 'A', 'sekirei'), ('40.0', 'A', 'suzume'), ('33.5', 'C', 'hato'), ('40.0', 'A', 'karasu'), ('33.5', 'B', 'hato'), ('33.5', 'A', 'kiji'), ('33.5', 'B', 'karasu'), ('33.5', 'B', 'suzume'), ('33.5', 'A', 'karasu')]

x[1]、x[2]、(x[1],x[2])等で会計するのではfilterとlamdaが便利です:

>>> sum([float(z[0]) for z in filter(lambda x: x[1] == 'A', l2)])
214.0
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考にさせてもらいます。

Thank you for the answer.
I'll try with this reference.

お礼日時:2014/10/31 16:57

Pythonには「辞書型」という配列のようなものがあります。



通常、配列は ary[index]という形で 配列aryのindex番目のデータを使用します。
※ Excelで例えるなら、 A[5] は A列の5番目で A5 / R5C1 セル に相当

辞書型では、 dic[key] で、番号の代わりに、key (文字列等が使える) で選択します。

地点と緯度からkeyを作って、
個体数合計[key]=個体数合計[key] + 個体数
のように集計していきます。



元がテキストファイル(CSV等)なら、Pythonで読むのは簡単です。
ですが、Excel形式のファイル(XLS,XLSX)だと、まずは「Excelのデータを読み込む」部分を用意する必要があります。

ExcelVBAでも同様のことができるし、Excelにピボットテーブルで集計することもできます。
数回程度しかしないことなら、ピボットテーブルの使い方を勉強するのがいいと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!