Pythonで2次元データをsort !collectionsのcounterを使った手法

Pythonのcollectionsモジュールとは

Pythonのcollectionsモジュールは、様々なデータ型を拡張したものを提供するモジュールです。これにより、より高度なデータ操作を行うことが可能になります。

Counterオブジェクトの基本的な使い方

Counterオブジェクトは、要素の出現回数をカウントするためのオブジェクトです。以下は、Counterオブジェクトの基本的な使い方です。

from collections import Counter
data = [1,2,3,4,5,5,5,6,6,7,8,8,8,8,8]
counter = Counter(data)
print(counter)

上記のコードを実行すると、以下のように出力されます。

Counter({8: 5, 5: 3, 6: 2, 1: 1, 2: 1, 3: 1, 4: 1, 7: 1})

上記のように、要素の出現回数が辞書形式で返されます。

2次元データのCounterオブジェクトへの適用方法

2次元データのCounterオブジェクトへの適用方法は、以下のようになります。

from collections import Counter
data = [[1,2,3],[4,5,6],[1,2,3],[7,8,9]]
counter = Counter(tuple(row) for row in data)
print(counter)

上記のコードを実行すると、以下のように出力されます。

Counter({(1, 2, 3): 2, (4, 5, 6): 1, (7, 8, 9): 1})

上記のように、2次元データ全体をタプルに変換して、Counterオブジェクトに適用します。

Counterオブジェクトのsortについて

Counterオブジェクトのsortメソッドは、要素の出現回数に基づいて要素をソートするためのメソッドです。

2次元データに対するCounterオブジェクトのsortの例

以下は、2次元データに対するCounterオブジェクトのsortの例です。

from collections import Counter
data = [[1,2,3],[4,5,6],[1,2,3],[7,8,9]]
counter = Counter(tuple(row) for row in data)
sorted_data = sorted(counter.items(), key=lambda x: (-x[1], x[0]))
print(sorted_data)

上記のコードを実行すると、以下のように出力されます。

[((1, 2, 3), 2), ((4, 5, 6), 1), ((7, 8, 9), 1)]

上記のように、要素の出現回数が多い順に、出現回数が同じ場合は要素の値の小さい順にソートされます。

Counterとsortを活用したデータ分析の応用例

以下は、Counterとsortを活用したデータ分析の応用例です。

from collections import Counter
import csv
with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    data = list(reader)
counter = Counter(tuple(row) for row in data)
sorted_data = sorted(counter.items(), key=lambda x: (-x[1], x[0]))
with open('result.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(sorted_data)

上記のコードは、CSVファイルからデータを読み込んで、Counterとsortを使用してデータを分析し、結果をCSVファイルに書き出す例です。

まとめ

PythonのcollectionsモジュールのCounterオブジェクトを使用することで、要素の出現回数をカウントすることができます。2次元データに対しても、Counterオブジェクトを使用することができます。また、sortメソッドを使用することで、要素をソートすることができます。