データ サイエンスの場合、通常、Python はデータの処理と変換に広く使用されています。Python は、データ処理をより柔軟にするための強力なデータ構造処理関数を提供します。ここでの「柔軟性」とは何を意味しますか?
これは、 Python では同じ結果を達成するには常に複数の方法がありますが、常にさまざまな方法があり、使いやすく、時間を節約し、より適切に制御できる方法を選択する必要があります。
これらの方法をすべてマスターすることは不可能です。そこで、あらゆる種類のデータを扱うときに知っておくべき Python の 4 つのヒントのリストをここに示します。
リスト内包表記 リスト内包表記は、リストを作成するためのエレガントで最も Python フレンドリーな方法です。 for ループや if ステートメントと比較すると、リスト内包表記では、既存のリストの値に基づいて新しいリストを作成するための構文がはるかに短くなります。それでは、この機能がリストのコピーをどのように取得するかを見てみましょう。
既存のリストのコピーを作成する必要がある場合があります。最も単純な答えは .copy() です。これを使用すると、あるリストの内容を別の (新しい) リストにコピーできます。
たとえば、整数のリストoriginal_list。
original_list = [10,11,20,22,30,34]
このリストは、.copy() メソッドを使用して簡単にコピーできます。
duplicated_list = original_list.copy()
リスト内包表記はまったく同じ出力を取得できます。リストのコピーは、リストの内包理解を理解するための良い例です。
以下のコードを見てください。
duplicated_list = [item for item in original_list]
これは、リストをコピーするときにリスト内包表記を使用する方が良いと言っているわけではありませんが、このケースがリスト内包表記の作業方法を導入するのに最適であると言っているのです。
次に、リストの内包表記によって、リストの各要素に対して数学的演算を実行する際の作業がどのように簡単になるかを見てみましょう。
乗算の最も簡単または直接的な方法は、乗算演算子を使用することです。これは、*
たとえば、スカラー (つまり、数値 5) リスト内の各項目を乗算します。ここでは、リストのコピーが 5 つ作成されるため、original_list*5 を使用することはできません。
このシナリオでは、次に示すように、リスト内包表記が最適な答えになります。
original_list = [10,11,20,22,30,34] multiplied_list = [item*5 for item in original_list] # Output [50, 55, 100, 110, 150, 170]
ここでの演算は数値の乗算に限定されません。元のリストの各要素に対して複雑な操作を実行できます。
たとえば、各項の平方根の 3 乗を計算するとします。これは 1 行で解決できます。
multiplied_list = [math.sqrt(item)**3 for item in original_list] # Output [31.6227766016838, 36.4828726939094, 89.4427190999916, 103.18914671611546, 164.31676725154983, 198.25236442474025]
数値の平方根の計算に使用される関数 sqrt はライブラリ math に属しているため、この例で使用する前にインポートする必要があります。
上記の組み込み関数と同様に、リストの各要素でユーザー定義関数を使用することもできます。
たとえば、次のような単純な関数です。
def simple_function(item): item1 = item*10 item2 = item*11 return math.sqrt(item1**2 + item2**2)
このユーザー定義関数は、リスト内の各項目に適用できます。
multiplied_list = [simple_function(item) for item in original_list] # Output [148.66068747318505, 163.52675622050356, 297.3213749463701, 327.0535124410071, 445.9820624195552, 505.4463374088292]
リスト内包表記は、実際のシナリオではさらに役立ちます。通常、分析タスクでは、nan 要素を削除するなど、リストから特定の種類の要素を削除する必要があります。リスト内包表記は、これらのタスクに最適なツールです。
特定の基準に基づいてデータをフィルタリングすることは、目的のデータ セットを選択する一般的なタスクの 1 つであり、同じロジックがリスト内包表記でも使用されます。
以下に示す数値のリストがあるとします。
original_list = [10, 22, -43, 0, 34, -11, -12, -0.1, 1]
このリストからは正の値のみを保持したいとします。したがって、論理的には、条件項目 > 0 について TRUE と評価される項目のみを保持したいと考えます。
new_list = [item for item in original_list if item > 0] # Output [10, 22, 34, 1]
if 句は負の値を削除するために使用されます。 if 句を使用して任意の条件を適用し、リストから任意の項目を削除できます。
たとえば、平方が 200 未満の項目をすべて削除したい場合は、以下のようにリスト合成で条件項目 **2 > 200 を指定するだけです。
new_list = [item for item in original_list if item**2 > 200] # Output [22, -43, 34]
実際のデータ セットを扱う場合、リスト項目をフィルタリングするための条件ははるかに複雑になる可能性がありますが、この方法は高速で理解しやすいです。
2 つのリストの値から辞書を作成する必要がある場合があります。それらを 1 つずつ入力する代わりに、辞書内包表記 (dictionary comprehension) を使用できます。これは、辞書を作成するためのエレガントで簡潔な方法です!
Itはリスト内包表記とまったく同じように機能しますが、唯一の違いは、リスト内包表記を作成する場合は、すべてを [] などの角括弧で囲みますが、辞書内包表記では、すべてを中括弧で囲みます ({} など)。
以下に示すように、フィールドと詳細という 2 つのリストがあるとします。
fields = [‘name’, ‘country’, ‘age’, ‘gender’] details = [‘pablo’, ‘Mexico’, 30, ‘Male’]
簡単な方法は、次のような辞書内包表記を使用することです -
new_dict = {key: value for key, value in zip(fields, details)} # Output {'name': 'pablo', 'country': 'Mexico', 'age': 30, 'gender': 'Male'}
ここで理解することが重要なのは、関数 zip がどのように機能するかです。
Python では、zip 関数は文字列、リスト、辞書などの反復可能なオブジェクトを入力として受け取り、それらをタプルに集約して返します。
つまり、この場合、zip はリスト フィールドと詳細から各項目のペアを形成します。辞書内包表記で key:value を使用する場合は、このタプルを個々のキーと値のペアに解凍するだけです。
Python の組み込み dict() コンストラクター (辞書作成用) を使用すると、dict() は辞書内包表記より少なくとも 1.3 倍高速になるため、このプロセスはさらに高速になります。
したがって、このコンストラクターを zip() 関数で使用する必要があります。その構文ははるかに単純です - dict(zip(fields,details))
で述べたように、まず、Python は同じ結果を達成する方法が複数あるため、非常に柔軟です。タスクの複雑さに応じて、それを達成するための最適な方法を選択する必要があります。
この記事があなたのお役に立てれば幸いです。この記事で述べたのと同じことを行う別の方法がある場合は、お知らせください。
以上がコードをより効率的にするための 4 つの Python 演繹的開発テクニックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。