データサイエンス100本ノック(構造化データ加工編)- Python Part 1 (Q1 to Q20)

データサイエンス

 

データサイエンス100本ノック(構造化データ加工編)- Python Part 1 (Q1 to Q20)の解説です。

 

参照(Reference) : 「データサイエンティスト協会スキル定義委員」の「データサイエンス100本ノック(構造化データ加工編)」

 

The Data Scientist Society Github :

GitHub - The-Japan-DataScientist-Society/100knocks-preprocess: データサイエンス100本ノック(構造化データ加工編)
データサイエンス100本ノック(構造化データ加工編). Contribute to The-Japan-DataScientist-Society/100knocks-preprocess development by creating a...

 

Data Science 100 Knocks (Structured Data Processing) URL :

100knocks-preprocess/docker/work/answer/ans_preprocess_knock_Python.ipynb at master · The-Japan-DataScientist-Society/100knocks-preprocess
データサイエンス100本ノック(構造化データ加工編). Contribute to The-Japan-DataScientist-Society/100knocks-preprocess development by creating a...

 

解説:

df_receipt.head(10) というコードは、df_receipt という Pandas の DataFrame の最初の 10 行を表示するために使用されています。

Pandasでは、DataFrameは、潜在的に異なるデータ型の列を持つ2次元ラベル付きデータ構造です。これは、スプレッドシートやSQLのテーブルに似ています。

Pandas の .head() メソッドは、DataFrame の最初の n 行を表示するために使用されます。デフォルトでは、最初の5行が表示されます。この場合、.head(10)は、DataFrameの最初の10行を表示するために使用されます。
 
解説:

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].head(10) というコードは、df_receipt という Pandas DataFrame のカラムのサブセットの最初の 10 行を表示するために使用されています。

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] というコードは、DataFrame df_receipt からカラムのサブセットを選択するために使用されます。具体的には、sales_ymd、customer_id、product_cd、amountという名前のカラムが選択されます。

結果として得られるDataFrameには、これらの選択されたカラムのみが含まれます。そして、.head(10)メソッドを使用して、このサブセットDataFrameの最初の10行を表示します。
 
 
解説:

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].query('customer_id == "CS018205000001"') というコードは、df_receipt という Pandas DataFrame から customer_id 列が特定の値 (CS0182050001) と一致する行のサブセットを選択するために使用されています。

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] というコードは、DataFrame df_receipt からカラムのサブセットを選択するために使用されます。具体的には、sales_ymd、customer_id、product_cd、amount という名前のカラムを選択します。

次に、.query()メソッドを使用して、特定の条件に基づいて、DataFrameの行をフィルタリングしています。この場合、条件は customer_id 列が値 "CS018205000001" と等しいことです。最初の行の末尾にあるバックスラッシュ(⽊)は、読みやすくするためにコードを次の行に続けていることを表します。

結果として得られるDataFrameには、customer_idカラムが指定された値と一致する行のみが含まれます。
 
 
解説:

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']].query('customer_id == "CS018205000001"') というコードは、df_receipt という Pandas DataFrame から customer_id 列が特定の値 (CS0182050001) と一致する行のサブセットを選択するために使用されています。

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] というコードは、DataFrame df_receipt からカラムのサブセットを選択するために使用されます。具体的には、sales_ymd、customer_id、product_cd、amount という名前のカラムを選択します。

次に、.query()メソッドを使用して、特定の条件に基づいて、DataFrameの行をフィルタリングしています。この場合、条件は customer_id 列が値 "CS018205000001" と等しいことです。最初の行の末尾にあるバックスラッシュ(⽊)は、読みやすくするためにコードを次の行に続けていることを表します。

結果として得られるDataFrameには、customer_idカラムが指定された値と一致する行のみが含まれます。
 
解説:

コード df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] です。\ .query('customer_id == "CS018205000001" & amount >= 1000') は、df_receipt という Pandas DataFrame から行のサブセットを選択するために使用され、ここで customer_id 列は特定の値 (CS018205000001) と同じ、amount 列は 1000 以上となります。

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] というコードは、DataFrame df_receipt から列のサブセットを選択するために使用されています。具体的には、sales_ymd、customer_id、product_cd、amount という名前のカラムを選択します。

次に、.query()メソッドを使用して、複数の条件に基づいてDataFrameの行をフィルタリングしています。記号 & は、2 つの条件間の論理 AND 演算を示すために使用されます。最初の条件は、customer_idカラムが値「CS018205000001」に等しいことです。2つ目の条件は、amountカラムが1000以上であることです。

結果として得られるDataFrameには、両方の条件が満たされた行のみが含まれます。
 
解説:

コード df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount']]. query('customer_id == "CS018205000001" & (amount >= 1000 | quantity >=5)') は、df_receipt という Pandas DataFrame から行のサブセットを選択するために使われます。customer_id 列が特定の値 (CS018205000001) に等しく、umount 列が 1000 以上または quantity 列が 5 以上である。

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'quantity', 'amount']] というコードは、DataFrame df_receipt から列のサブセットを選択するために使用されるコードです。具体的には、sales_ymd、customer_id、product_cd、quantity、amount という名前のカラムを選択します。

次に、.query()メソッドを使用して、複数の条件に基づいてDataFrameの行をフィルタリングしています。記号 & は、2 つの条件間の論理 AND 演算を示すために使用されます。最初の条件は、customer_id列が値「CS018205000001」と等しいことです。2番目の条件は、括弧で囲まれ、論理OR演算を示す|記号で区切られた2つのサブ条件を含んでいます。最初のサブ条件は、金額列が1000以上であることである。2つ目のサブ条件は、quantity列が5以上であることである。

結果として得られるDataFrameには、customer_idが指定された値と等しく、かつamountが1000以上、quantityが5以上の行のみが含まれます。
 
 
解説:

コード df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] です。\ .query('customer_id == "CS018205000001" & 1000 <= amount <= 2000') は、df_receipt という Pandas DataFrame から行のサブセットを選択するために使用され、ここで customer_id 列は特定の値 (CS018205000001) と同じで、 amount 列は 1000 から 2000 (inclusive) までとなっています。

df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] というコードは、DataFrame df_receipt から列のサブセットを選択するために使用されます。具体的には、sales_ymd、customer_id、product_cd、amount という名前のカラムを選択します。

次に、.query()メソッドを使用して、複数の条件に基づいてDataFrameの行をフィルタリングしています。記号 & は、2 つの条件間の論理 AND 演算を示すために使用されます。最初の条件は、customer_id列が値「CS018205000001」に等しいことです。2つ目の条件は、比較演算子 <= と >= を使用して、amount 列の値の範囲を指定することです。

出来上がったDataFrameには、customer_idが指定された値と等しく、amountが1000から2000の間である行のみが含まれます(包括的な値)。
 
解説:

コード df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] です。\ df_receipt['customer_id == "CS018205000001" & product_cd != "P071401019"] は、Pandas DataFrame の df_receipt から行のサブセットを選択するために使用され、ここで customer_id 列は特定の値 (CS018205000001) と同じで、product_cd 列は特定の値(P0714019)と同じではない。

コード df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] は、DataFrame df_receipt から列のサブセットを選択するために使用します。具体的には、sales_ymd、customer_id、product_cd、amount という名前のカラムを選択します。

次に、.query()メソッドを使用して、複数の条件に基づいてDataFrameの行をフィルタリングしています。記号 & は、2 つの条件間の論理 AND 演算を示すために使用されます。最初の条件は、customer_id列が値「CS018205000001」に等しいことです。2つ目の条件は、product_cdカラムが値 "P071401019 "と等しくないことで、これは!=比較演算子を用いて実現されます。

結果として得られるDataFrameには、customer_idが指定された値と等しく、product_cdが指定された値と等しくない行のみが含まれます。
 
解説:

df_store.query('prefecture_cd != "13" & floor_area <= 900') というコードは、df_store という Pandas DataFrame から prefecture_cd 列が特定の値 (13) と等しくない、かつ floor_area 列が特定の値 (900) 以下である行にフィルターをかけるために使用されています。

.query()メソッドは、ブール式に基づいてDataFrameの行をフィルタリングするために使用されます。この場合、ブール式は 'prefecture_cd != "13" & floor_area <= 900' です。

!=演算子は、prefecture_cd列の各値が値「13」と等しくないかどうかをチェックするために使用される。演算子&は、この条件と、floor_area列の値が900以下かどうかをチェックする2番目の条件との間の論理AND演算を示すために使用されています。

結果として得られるDataFrameには、両方の条件がTrueである行のみが含まれます。
 
解説:

df_store.query("store_cd.str.startswith('S14')", engine='python').head(10) というコードは、df_store という Pandas DataFrame から store_cd 列が特定の文字列 (S14) で始まっている行にフィルターをかけるために使用されています。

.query() メソッドは、DataFrame の行をブール式に基づいてフィルタリングするために使用されます。この場合、ブール式は「store_cd.str.startswith('S14')」となります。この式は、engineパラメータが「python」に設定されているため、Python構文で記述されています。この式は、store_cdカラムが文字列'S14'で始まるかどうかをチェックする。

str.startswith()メソッドは、Pythonの文字列メソッドで、文字列が指定された接頭辞で始まる場合にTrueを返すものです。この場合、str.startswith('S14')メソッドがstore_cdカラムの各要素に適用されます。

結果として得られるDataFrameには、store_cdカラムの先頭が文字列「S14」である行のみが含まれます。

.head(10) メソッドを使用して、結果のDataFrameの最初の10行のみを返します。
 
解説:

このコードは、df_customer という名前の Pandas DataFrame からデータのサブセットを選択しています。サブセットは、query()メソッドで指定された条件に基づいてフィルタリングされます。

条件は、query()メソッドの引数として渡される文字列「customer_id.str.endswith('1')」によって定義されています。この条件は、df_customer DataFrameの行のうち、customer_idカラムの末尾が文字'1'であるものだけを含むようにフィルタリングします。

engine='python' パラメータはオプションで、条件の評価に Python エンジンを使用することを指定します。query()メソッドのデフォルトエンジン(pandas.eval)がすべての文字列操作をサポートしているとは限らないため、条件に文字列操作が含まれる場合はこの指定が必要です。

最後に、head(10) メソッドを使用して、フィルタリングされた DataFrame の最初の 10 行を返します。これはオプションで、ここでは出力を管理しやすいサイズに制限するために使用されています。
 
解説: 

具体的には、query()の引数として渡される "address.str.contains('横浜市') "という文字列で条件を定義する。この文字列は、df_storeのaddressカラムに'横浜市'という部分文字列が含まれているかどうかをチェックするboolean式である。

str.contains()メソッドは、Pandasの文字列メソッドで、与えられた文字列列の各要素が指定された部分文字列を含むかどうかを示すブール型配列を返します。今回は、df_storeのaddressカラムに適用しています。

engine='python'引数は、フィルタリング処理をデフォルトのnumexprエンジンではなく、Pythonの組み込みeval()関数で実行することを指定する。これは、str.contains()など、numexprエンジンではサポートされていない特定のタイプの文字列操作をクエリー式で使用する場合に必要です。
 
解説: 

df_customer は DataFrame オブジェクトです。

.query() は、特定の条件に基づいて行をフィルタリングするために Pandas が提供するメソッドです。条件は、文字列の引数として指定されます。

この場合の条件は、「status_cd.str.contains(r'^[A-F]')」です。これは、str.contains()メソッドを使って、DataFrameのstatus_cdカラムにAからFまでの文字で始まる文字列が含まれているかどうかをチェックするものです(包括的)。正規表現パターン '^[A-F]' の前の r は生の文字列リテラルを示し、バックスラッシュ文字 (\) がエスケープ文字としてではなく、文字通り解釈されることを保証します。

engine='python'引数は、Pandasが使用するデフォルトのエンジンではなく、Pythonの組み込み正規表現エンジンを使用してフィルタリングを行うことを指定します。これは、デフォルトのエンジンが特定の正規表現機能をサポートしていなかったり、遅すぎたりする場合に有効である。

.head(10) メソッドは、フィルタリングされた DataFrame の最初の 10 行のみを返すために使用されています。

つまり、このコードは、全体として、status_cd列がAからFまでの文字で始まる行だけを含むようにdf_customer DataFrameをフィルタリングし、その結果のDataFrameの最初の10行を返しています。
 
 
解説: 

df_customer は DataFrame オブジェクトです。

.query() は、特定の条件に基づいて行をフィルタリングするために Pandas が提供するメソッドです。条件は、文字列の引数として指定されます。

この場合の条件は、「status_cd.str.contains(r'[1-9]$', regex=True)」となります。これは、str.contains()メソッドを使用して、DataFrameのstatus_cdカラムに1~9(含む)の数字で終わる文字列が含まれているかどうかをチェックします。文字$は文字列の終わりを表し、regex=True引数は、パターンが正規表現として解釈されることを示す。

engine='python'引数は、Pandasが使用するデフォルトのエンジンではなく、Pythonの組み込み正規表現エンジンを使用してフィルタリングを行うことを指定します。これは、デフォルトのエンジンが特定の正規表現機能をサポートしていなかったり、遅すぎたりするような場合に有効である。

.head(10)メソッドは、フィルタリングされたDataFrameの最初の10行のみを返すために使用されます。つまり、全体として、このコードは、status_cd列が1から9までの数字で終わる行のみを含むようにdf_customer DataFrameをフィルタリングし、結果としてDataFrameの最初の10行を返しています。
 
解説:

このコードでは、PythonのPandasライブラリを使用して、df_customerという名前のDataFrameから行をフィルタリングしています。フィルタリングは、query()メソッドで指定された条件に基づいて行われ、このメソッドはブール式を表す文字列引数を取ります。

status_cd: df_customer DataFrameのカラムであると仮定する。

.: Pythonでオブジェクトのメソッドや属性にアクセスする際に使用されるドット表記です。

str: str:status_cdカラムの文字列メソッドを指します。

contains() : カラムの各要素に、与えられた部分文字列または正規表現が存在するかどうかをチェックする文字列メソッドです。

r'^[A-F].*[1-9]$': これは、文字AからF(含む)で始まり、1から9(含む)の数字で終わる文字列にマッチする正規表現パターンです。パターンの前の r 接頭辞は、それが生の文字列であることを示します。これは、バックスラッシュがエスケープ文字ではなく、リテラルバックスラッシュとして扱われることを意味します。

また、query()メソッドでは、engineの引数に'python'という値が指定されています。これは、Pandasが使用するデフォルトのエンジンがnumexprで、クエリの種類によっては高速に処理できますが、すべての種類の正規表現に対応していない場合があるからです。python'エンジンを使用することで、正規表現がPython regexモジュールで処理されるようになります。

最後に、.head(10) メソッドを呼び出すと、フィルタ条件に一致する最初の10行に出力が制限されます。
 
解説:

このコードでは、PythonのPandasライブラリを使用して、df_storeという名前のDataFrameから行をフィルタリングしています。フィルタリングは、query()メソッドで指定された条件に基づいて行われ、このメソッドはブール式を表す文字列引数を取ります。

tel_no : df_store DataFrameのカラムであると仮定する。

. : Pythonでオブジェクトのメソッドや属性にアクセスする際に使用されるドット記法です。

str: tel_noカラムの文字列メソッドを参照する。

contains() : カラムの各要素に与えられた部分文字列または正規表現が存在するかどうかをチェックする文字列メソッドです。

r'^[0-9]{3}-[0-9]{3}-[0-9]{4}$': これは、北米の電話番号の形式(3桁、ハイフン、さらに3桁、さらにハイフン、さらに4桁)を持つ文字列にマッチする正規表現パターンである。パターンの前のr接頭辞は、それが生の文字列であることを示し、これはバックスラッシュがエスケープ文字ではなく、リテラルバックスラッシュとして扱われることを意味します。中括弧{}は、直前のパターンを指定回数繰り返すことを示し、末尾の$は文字列の終わりを意味する。

また、query()メソッドでは、engineの引数に'python'という値が指定されています。これは、Pandasが使用するデフォルトのエンジンがnumexprで、クエリの種類によっては高速に処理できますが、すべての種類の正規表現に対応していない場合があるからです。python' エンジンを使用すると、正規表現が Python regex モジュールによって処理されるようになります。

結果として、df_store DataFrameから、tel_noカラムに有効な北米の電話番号を持つ行だけを残すフィルタが作成されます。
 
解説:

このコードでは、PythonのPandasライブラリを使用して、df_customerというDataFrameの行をbirth_day列の値に基づいて昇順でソートしています。その結果、ソートされたDataFrameは、head()メソッドを使用して、最初の10行に限定されます。

df_customer: これは、ソートされるDataFrameの名前です。

sort_values() : これは、1つ以上のカラムの値に基づいてDataFrameをソートするために使用されるPandasのメソッドである。この場合、birth_dayカラムがソートキーとして指定されています。

'birth_day' : ソートキーとして使用されるカラムの名前です。

.head(10): これは、出力をソートされたDataFrameの最初の10行に制限するメソッド呼び出しです。

結果として、df_customer DataFrameの最初の10行が、birth_dayカラムの値に基づいて昇順にソートされた状態で出力されることになります。これにより、birth_dayが顧客の生年月日を表していると仮定して、データセット内の最も古い10人の顧客を確認することができます。
 
解説:

このコードでは、PythonのPandasライブラリを使用して、df_customerというDataFrameの行をbirth_day列の値に基づいて降順でソートしています。その結果、ソートされたDataFrameは、head()メソッドを使用して、最初の10行に限定されます。

df_customer: これは、ソートされるDataFrameの名前です。

sort_values() : これはPandasのメソッドで、1つ以上のカラムの値に基づいてDataFrameをソートするために使用されます。この場合、birth_dayカラムがソートキーとして指定されています。

'birth_day' : ソートキーとして使用されるカラムの名前です。

ascending=False : この引数は、ソート順をデフォルトの昇順ではなく、降順にすることを指定するために使用されます。

.head(10): これは、出力をソートされたDataFrameの最初の10行に制限するメソッド呼び出しです。

結果として出力されるのは、df_customer DataFrameの最初の10行で、birth_day列の値に基づいて降順でソートされます。これにより、birth_dayが顧客の生年月日を表していると仮定して、データセット内の最も若い10人の顧客を確認することができます。
 
解説:

与えられたコードは、以下の処理を実行しています。

pd.concat()関数を使用して、2つのデータフレームdf_receipt[['customer_id', 'amount']] と df_receipt['amount'].rank(method='min', ascending=False) を列軸 (axis=1) に沿って連結しています。得られたデータフレームは、変数df_tmpに代入される。最初のdataframe df_receipt[['customer_id', 'amount']]には、より大きなdataframe df_receiptから2つの列 'customer_id' と 'amount' が含まれていますが、2番目のdataframeは 'min' 法で計算した 'amount' 列の降順の順位となっています。

連結されたdf_tmpのカラムを、df_tmp.columns属性を用いて、'customer_id', 'amount', 'ranking'にリネームする。

sort_values()メソッドでdf_tmpのデータフレームを'ranking'列で昇順にソートし、head(10)メソッドで上位10行を返します。

全体として、このコードはdf_receipt dataframeの'customer_id'と'amount'カラムと'min'メソッドで計算した'amount'の順位を降順に連結しています。結果として得られるdataframeは、'ranking'カラムでソートされ、最も高いランクを持つ上位10行を返します。これは、購入に最もお金をかけた顧客を表しています。
 

 

 

 

Comment