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

データサイエンス

 

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

 

参照(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_product という名前の pandas DataFrame に対して 2 つの処理を実行します。

fillna()メソッドを使って、unit_priceとunit_cost列の欠損値を各列の丸めた平均値で埋めます。丸めた平均値は、NumPy ライブラリの np.round() と np.nanmean() 関数を使用して計算されています。fillna() メソッドは、引数として辞書を取り、キーは列名、値は欠損値を埋めるための値である。

そして、isnull()メソッドでDataFrameに欠損値が残っているかどうかをチェックし、sum()メソッドで各列の欠損値の数を合計します。その結果、更新されたDataFrame df_product_2の各列の欠損値の数が出力されます。

更新されたDataFrame df_product_2は、unit_priceとunit_cost列の欠損値がそれぞれの丸められた平均値に置き換えられ、2行目の出力は、fillna操作後のDataFrameにどれだけの欠損値が残っているかを示しています。
 
 
解説:

このコードでは、以下の処理を行います。

sklearn.imputeモジュールからSimpleImputerクラスをインポートしています。SimpleImputerクラスは、データセットの欠損値をインプットするために使用されます。

imp_meanというSimpleImputerのインスタンスを作成します。このインピュータは、欠損値(この場合、np.nanとして表現される)を対応する列の平均値で置き換えることになります。インピュテーションのストラテジーは 'mean' に設定されています。

fit_transform()メソッドを使用して、df_product DataFrameのunit_price列とunit_cost列にSimpleImputerオブジェクトを適用し、欠損値がインプットされた変換後のDataFrameを返します。

copy() メソッドを使用して、df_product_2 という元の df_product DataFrame のコピーを作成する。

df_product_2のunit_priceとunit_costの列を、imp_values.round()を代入してインプットした値で置き換えます。round()メソッドは、インプットされた値を最も近い整数に丸めるために使用されます。

isnull()メソッドでDataFrameに欠損値が残っていないかチェックし、sum()メソッドで各列の欠損値の数を集計します。結果として、更新されたDataFrame df_product_2の各列の欠損値の数が出力されます。

このコードの最終出力は、各列の平均値で欠損値を埋め込んだ後の、更新されたdf_product_2 DataFrameの欠損値の数を示しています。この方法は、特に欠損値の数が少ない場合、データセットの欠損データを処理するのに便利です。

 

解説:

このコードでは、まず、"df_product "という名前のDataFrameの "unit_price "と "unit_cost "という2つの列の欠損値を埋めています。このコードでは、以下の引数を持つfillnaメソッドを使って欠損値を埋めています。

第一引数は、"unit_price "と "unit_cost "という二つのキーを持つ辞書で、それぞれが対応する値にマッピングされています。これらの値は、DataFrameのそれぞれの列に適用されるNumPyライブラリのnanmedian関数を使って計算される。nanmedianは、NaNで表される欠損値を無視した上で、列の中央値を計算する。

このコードでは第2引数は省略されており、DataFrameの他の列の欠損値はそのまま残されることになります。

この操作の結果は、"df_product_3 "という新しいDataFrameになります。

次のコードでは、isnull()メソッドとsum()メソッドを呼び出して、"df_product_3 "のDataFrameにまだ欠損値があるかどうかをチェックします。これは、DataFrameの各列の欠落値の数を含むSeriesオブジェクトを返します。どちらの列にも欠損値がないことが出力されれば、fillnaの操作が成功したことが確認されます。
 
 
解説:

このコードは、scikit-learnのSimpleImputerを使って、DataFrame "df_product "の "unit_price "と "unit_cost "の列の欠損値のインピュテーションを実行する。

コードの最初の行は、"imp_mean "という名前のSimpleImputerのインスタンスを初期化しています。このクラスは、与えられたストラテジーで欠損値をインプットする方法を提供し、この場合、欠損していない値の中央値です。missing_values引数は、欠損とみなす値を指定するもので、この場合はNaNとなります。

コードの2行目は、"df_product" DataFrame の "unit_price" と "unit_cost" 列の欠損値をインプットするために "imp_mean" オブジェクトの fit_transform メソッドを使用します。このメソッドは、インプットされた値を含む "imp_values" という名前の NumPy 配列を返します。

コードの3行目は、"df_product "DataFrameのコピーを "df_product_3 "という名前で作成しています。これは、元のDataFrameを変更しないようにするためです。

コードの4行目は、"df_product_3 "DataFrameの "unit_price "と "unit_cost "カラムにインピュートの値を代入しています。imp_values」配列に対してround()メソッドが呼び出され、最も近い整数に値を丸めています。

コードの最後の行は、isnull()メソッドとsum()メソッドを呼び出して、「df_product_3」DataFrameにまだ欠けている値があるかどうかをチェックする。出力がどちらの列にも欠損値がないことを示す場合、インピュテーション操作が成功したことが確認されます。
 
解説:

このコードは、DataFrame "df_product" の "unit_price" と "unit_cost" 列の欠損値を、各カテゴリの中央値を用いてインピュテーションするものである。このコードでは、以下のステップでこれを実現しています。

最初の行は、DataFrame "df_product "を "category_small_cd "列でグループ化し、各グループの "unit_price "と "unit_cost "の中央値を計算する。出来上がったDataFrameは "df_tmp "と名付けられ、3つのカラムを持つ。"category_small_cd", "median_price", "median_cost "の3つの列を持つ。

2行目は、Pandasライブラリのmerge()メソッドを使用して、"category_small_cd "カラムに基づいて、"df_product "と "df_tmp "DataFrameを結合しています。結果のDataFrameである "df_product_4 "は、"df_product "の全てのカラムと "df_tmp "の "median_price "と "median_cost "のカラムを含みます。

3行目は、"df_product_4 "に "unit_price "という新しい列を作成する。"unit_price "と "median_price "の列にラムダ関数を適用して計算される。ラムダ関数は、"unit_price "列が存在しない(すなわち、NaN)かどうかをチェックし、存在する場合は "median_price "の丸められた値を返す。そうでない場合は、"unit_price "の元の値が返される。この操作により、"unit_price "カラムの欠損値が埋められる。

4行目は、"df_product_4 "に "unit_cost "という新しい列を作成する。"unit_cost "と "median_cost "の列に同様のラムダ関数を適用して計算される。この操作は、"unit_cost "列の欠損値を埋めるものである。

最後の行は、isnull()メソッドとsum()メソッドを呼び出して、"df_product_4" DataFrameにまだ欠損値があるかどうかをチェックします。出力がどちらの列にも欠損値がないことを示す場合、インピュテーション操作が成功したことが確認されます。

 

 
解説:

このコードは、DataFrame "df_product" の "unit_price" と "unit_cost" 列の欠損値を、各カテゴリの中央値を用いてインピュテーションするものである。このコードでは、以下のステップでこれを実現しています。

最初の行は、DataFrame "df_product "を "category_small_cd "列でグループ化し、各グループの "unit_price "と "unit_cost "の中央値を計算する。出来上がったDataFrameは "df_tmp "と名付けられ、3つのカラムを持つ。"category_small_cd", "median_price", "median_cost "の3つの列を持つ。

2行目は、Pandasライブラリのmerge()メソッドを使用して、"category_small_cd "カラムに基づいて、"df_product "と "df_tmp "DataFrameを結合しています。結果のDataFrameである "df_product_4 "は、"df_product "の全てのカラムと "df_tmp "の "median_price "と "median_cost "のカラムを含みます。

3行目は、"df_product_4 "にPandasのmask()メソッドで計算された "unit_price "という新しい列を作成しています。mask()メソッドは、"unit_price "の欠損値(つまりNaN)を "median_price "の丸めた値に設定します。この操作により、"unit_price "列の欠損値が埋まる。

4行目は、"df_product_4 "に "unit_cost "という新しい列を作り、"unit_price "と同様の方法で計算を行う。この操作により、"unit_cost "カラムの欠損値が埋められる。

最後の行は、isnull()メソッドとsum()メソッドを呼び出して、"df_product_4 "のDataFrameにまだ欠損値があるかどうかをチェックします。出力がどちらの列にも欠損値がないことを示す場合、インピュテーション操作が成功したことが確認されます。
 
 
解説:

このコードは、DataFrame "df_product" の "unit_price" と "unit_cost" 列の欠損値を、各カテゴリの中央値を用いてインピュテーションするものである。このコードでは、以下の手順でこれを実現しています。

1行目は、元のDataFrame「df_product」のコピーを作成し、「df_product_4」という名前を付けます。

2行目は、forループを開始し、列「unit_price」と「unit_cost」に対して反復処理を行います。

3行目は、各カラムの欠損値を埋めています。これは、fillna()メソッドを使用して、各列の欠損値をそれぞれのカテゴリの中央値で置き換えています。これは、「df_product_4」を「category_small_cd」列でグループ化し、transform()メソッドでそれぞれの列の中央値を計算することにより行われる。round()メソッドは、中央値を最も近い整数に丸めるために使用されます。

4行目は、isnull()メソッドとsum()メソッドを呼び出して、「df_product_4」DataFrameにまだ欠損値があるかどうかをチェックします。出力がどちらの列にも欠損値がないことを示す場合、インピュテーション操作が成功したことが確認されます。

このように、このコードは、各カテゴリの中央値を用いて、DataFrame "df_product "の "unit_price" と "unit_cost" 列の欠損値をインプットし、インプットした値で新しい DataFrame "df_product_4" を作成する。インピュテーションは、元のDataFrameをコピーし、各カテゴリの中央値を用いて各列の欠損値を埋め、欠損値が残っているかどうかを確認することで行われる。
 
解説:

このコードは、df_receiptというPandasのDataFrameに対してデータ処理を行い、2019年の顧客の総売上に対する売上率を算出します。以下、このコードが何をするのか、ステップバイステップで説明します。

最初の行は、df_receipt_2019という新しいDataFrameを作成し、2019年(20190101 <= sales_ymd <= 20191231)の売上だけを含むようにdf_receiptの行をフィルターします。そして、customer_idで行をグループ化し、各グループの金額列の合計を計算します。結果として得られるDataFrameは、customer_idとamount_2019の2つのカラムを持ちます。

2行目は、df_receipt_allという新しいDataFrameを作成し、df_receiptの行をcustomer_idでグループ化し、各グループの金額カラムの合計を計算します。出来上がったDataFrameは、customer_idとamount_allの2つのカラムを持ちます。

3行目はdf_sales_rateという新しいDataFrameを作成し、df_customerのcustomer_id列をdf_receipt_2019とdf_receipt_allのamount_2019列とamount_all列にそれぞれ結合しています。つまり、df_customerのすべての行が結果のDataFrameに含まれますが、df_receipt_2019とdf_receipt_allの一致する行だけが含まれます。結果のDataFrameには、customer_id、amount_2019、amount_allの3つのカラムがあります。

4行目と5行目では、amount_2019とamount_allのカラムに欠けている値を0で埋めています。

6行目は、amount_2019とamount_allの列にラムダ関数を適用して、df_sales_rateにamount_rateという新しい列を作成しています。λ関数は、amount_2019が0の場合は0を、それ以外の場合はamount_2019とamount_allの比を返します。結果として得られるamount_rate列は、各顧客の総売上高と比較した2019年における売上率を表しています。

7行目は、amount_rate列の欠損値を0に埋める。

8行目は、df_sales_rateの行をフィルタリングして、正のamount_rateを持つ顧客のみを含み、DataFrameをamount_rateで降順でソートし、最初の10行を返します。これらは、総売上高と比較して、2019年に最も高い売上率を持つ上位10名の顧客です。

 

 

 
解説:

このコードは、df_customer_1、df_store、df_tmpという3つのPandas DataFrameに対して、いくつかの地理空間計算とデータ処理を実行するものである。ここでは、このコードが何をするのか、ステップバイステップで説明します。

最初の行は、calc_distanceというPython関数を定義し、x1とy1(点1の緯度と経度)、x2とy2(点2の緯度と経度)という4つの引数を取ります。この関数は、半径6371kmの球形の地球を想定して、ハバーシンの公式を使って2点間の距離をキロメートル単位で計算する。結果はdistanceとして返されます。

2行目は、df_customer_1とdf_storeをそれぞれapplication_store_cdとstore_cdカラムでマージしてdf_tmpという新しいDataFrameを作成しています。つまり、両方のDataFrameで一致する値を持つ行だけが結果のDataFrameに含まれます。結果のDataFrameは両方のDataFrameの全てのカラムを持ち、さらにいくつかのリネームされたカラムを持ちます:address_xはcustomer_addressに、address_yはstore_addressにリネームされます。

3行目は、.apply()メソッドを使ってm_latitude、m_longitude、latitude、longitude列にcalc_distance関数を適用し、df_tmpにdistanceという新しい列を作成しています。.apply()メソッドは、axis=1の引数とともに、関数を行単位で適用するために使用されます。結果の距離値は、distance列に格納される。

4行目は、二重角括弧を使ってdf_tmpからカラムのサブセット(customer_id, customer_address, store_address, and distance)を選択し、.head(10)メソッドを用いて結果のDataFrameの最初の10行を表示しています。これは、顧客と店舗の情報を含むマージされたデータのサンプルと、それらの間の対応する距離を示しています。
 
 
解説:

このコードは、df_customer_1、df_store、df_tmpという3つのPandas DataFrameに対して、いくつかの地理空間計算とデータ処理を実行するものである。ここでは、このコードが何をするのか、ステップバイステップで説明します。

最初の行は、calc_distance_numpyというPython関数を定義し、x1とy1(点1の緯度と経度)、x2とy2(点2の緯度と経度)という4つの引数を取ります。この関数は、半径6371kmの球状の地球を想定して、ハバーシンの公式を使って2点間の距離をキロメートル単位で計算します。この実装では、以前の実装よりも効率的に計算を行うためにNumPy関数を使用しています。

2行目は、df_customer_1 と df_store をそれぞれ application_store_cd と store_cd 列でマージして、df_tmp という新しい DataFrame を作成しています。つまり、両方のDataFrameで一致する値を持つ行だけが結果のDataFrameに含まれます。結果のDataFrameは両方のDataFrameの全てのカラムを持ち、さらにいくつかのリネームされたカラムを持ちます:address_xはcustomer_addressにリネームされ、address_yはstore_addressにリネームされています。

3行目は、df_tmpの4つの列に対して、NumPyの配列操作を使ってcalc_distance_numpy関数を呼び出して、distanceという新しい列を作成しています。この実装では、.apply()メソッドを使用する代わりに、NumPyの配列に対して要素ごとの計算を行う機能を利用しています。結果の距離値は、distance列に格納されます。

4行目は、二重の角括弧を使ってdf_tmpからカラムのサブセット(customer_id, customer_address, store_address, and distance)を選択し、.head(10)メソッドを使って結果のDataFrameの最初の10行を表示しています。これは、顧客と店舗の情報を含むマージされたデータのサンプルと、それらの間の対応する距離を示しています。
 
解説:

このコードは、以下のタスクを実行します。

df_receiptデータフレームをcustomer_idでグループ化し、各顧客の金額の合計を計算する。結果のデータフレームはdf_receipt_tmpに格納される。

customer_id列に基づいて、df_customerデータフレームをdf_receipt_tmpデータフレームと結合します。これは左結合なので、df_customerのすべての顧客が結果のデータフレームdf_customer_uに含まれることになります。

sum_amountカラムの欠損値を0に置き換えます。

df_customer_uの行をsum_amountで降順に、customer_idで昇順にソートします。

customer_name列とpostal_cd列に基づいて、df_customer_uの重複を削除し、重複の最初の出現分だけを残す。結果のデータフレームがdf_customer_uに戻される。

元のdf_customerデータフレームの行数(df_customer_cnt)、更新後のdf_customer_uデータフレームの行数(df_customer_u_cnt)、両者の差(diff)をプリントアウトします。

全体として、このコードはデータクリーニングと操作を行い、新しいデータフレームdf_customer_uを作成しています。このデータフレームには、各顧客の合計購入金額(sum_amount)に関する情報が含まれ、この金額で降順にソートされ、重複するものはcustomer_nameとpostal_cd列に基づいて削除されます。
 
解説:

このコードは、df_customerとdf_customer_uという2つのデータフレームをマージして、名前と郵便番号に基づいてユニークな顧客を識別し、マッチングしています。

マージされた結果のデータフレームは、df_customer_nという新しいデータフレームに格納されます。2つのデータフレームを結合するためにmerge関数が使用され、on=['customer_name', 'postal_cd']という引数は、これら2つの列に基づいて結合を行うことを指定する。

マージされたデータフレームには、customer_id_xとcustomer_id_yという2つの顧客IDカラムが含まれます。混乱を避けるため、rename関数を使用して、これらの列の名前をそれぞれcustomer_idとintegration_idに変更します。

最後の行では、customer_idカラムのユニークな顧客IDの数とintegration_idカラムのユニークな顧客IDの数を比較します。差がゼロの場合、マージされたデータフレームに重複した顧客が存在しないことを意味します。差がゼロでない場合は、名前と郵便番号の照合がうまくいかなかった顧客がまだ存在し、そのIDが重複していることを意味します。

 

解説:

このコードは、各顧客の売上情報に基づいて、データの訓練とテストの分割を実行します。

まず、df_receipt dataframeをcustomer_idでグループ化し、amount列を合計することで、各顧客の売上情報を集計する。得られたデータフレームは、df_sales_customerに格納される。

次に、クエリメソッドを使用して、購入をしなかった顧客(すなわち、金額が0に等しい顧客)をフィルタリングし、これらの顧客のみを含むようにdf_sales_customerを更新する。

次に、df_sales_customerのcustomer_idカラムとdf_customerの内部結合を行い、購入を行った顧客のみを保持します。結果のデータフレームはdf_tmpに格納されます。

最後に、scikit-learnのtrain_test_splitメソッドを用いて、df_tmpをトレーニングセットとテストセットに分割します。テストサイズは0.2、ランダムステートは71です。そして、トレーニングセットとテストセットに含まれるデータの割合を表示する。
 
解説:

このコードは、以下のタスクを実行しています。

sales_ymd」列、「amount」列、「sales_ym」列を持つdf_ts_amount dataframeが作成される。sales_ym列はsales_ymd列の最初の6文字から文字列に変換されて作られる。

df_ts_amount データフレームを 'sales_ym' カラムでグループ化し、 'sum' 関数で 'amount' カラムを集計し、インデックスをリセットする。出来上がったデータフレームは同じ変数'df_ts_amount'に格納される。

関数split_dataは,df, train size, test size, slide window, start pointを引数に取る.split_data関数は、trainデータフレームとtestデータフレームの2つのデータフレームを返します。

split_data関数は、df_ts_amountデータフレームをtrainデータフレームとtestデータフレームに分割するために、毎回異なる引数で3回呼び出されます。訓練データとテストデータの3つのセットが作成され、df_train_1、df_test_1、df_train_2、df_test_2、df_train_3、df_test_3に保存されます。

データを複数に分割する目的は、時系列予測モデルの訓練セットと検証セットとして使用するためと思われます。データを異なる集合に分割することで、モデルを異なる期間で学習させ、異なるテスト期間で性能を評価することができる。これにより、オーバーフィッティングを回避し、モデルの性能をより正確に推定することができます。
 
 
解説:

このコードは、pandasのDataFrame df_ts_amountに対して時系列クロスバリデーションを実行しています。sklearn.model_selection モジュールの TimeSeriesSplit 関数を使用して、3 つの訓練とテストの分割を生成しています。

TimeSeriesSplitは、時系列データサンプルを分割するためのトレーニング/テストインデックスを提供するクロスバリデーターです。4つのパラメータを持ちます。

n_splits: 分割の数
max_train_size: 学習データの最大サイズ
test_size: テストデータの大きさ
gap: 新しいスプリットを開始する前にスキップするサンプル数

コードでは、n_splits=3、max_train_size=12、test_size=6、gap=0を設定して、学習期間12ヶ月、テスト期間6ヶ月の3分割を作成します。

次にコードは、2019年6月までの売上データのみを含むようにデータをフィルタリングし(df_ts_amount.query('sales_ym <= "201906"'))、リスト series_list を作成して TimeSeriesSplit で生成したトレーニングおよびテストセットを格納する。forループは、TimeSeriesSplitによって生成された分割を繰り返し、各分割をseries_listに追加しています。最後に,最初の訓練とテストの分割を df_train_1 と df_test_1 に,2番目の分割を df_train_2 と df_test_2 に,3番目の分割を df_train_3 と df_test_3 に割り当てています.

 

解説:

このコードは、バイナリターゲット変数is_buy_flagのバランスをとるためにランダムアンダーサンプリングを実行する。

まず、各顧客の購入金額の合計がgroupbyを使って計算され、df_tmpに格納されます。次に、df_customerとdf_tmpは左結合を使用してマージされ、たとえ購入をしていなくてもすべての顧客を含むようにします。is_buy_flag列は、np.whereを使用して、購入をした顧客に1を、購入しなかった顧客に0を割り当てることによって作成されます。

次に、imblearnライブラリのRandomUnderSampler関数を用いて、対象変数のバランスをとる。df_tmpに対して、is_buy_flag列を対象変数としてfit_resampleメソッドが適用されます。これにより、両方のターゲット変数の値に対して同数のケースを持つ新しいDataFrame、df_down_samplingが作成されます。

最後に、is_buy_flagの値が0と1のケースの数が出力され、ランダムアンダーサンプリングが成功したことが確認されます。

 

解説:

このコードでは、df_customer データフレームから 'gender_cd' と 'gender' 列を選択し、drop_duplicates() メソッドを使用して重複する行を削除することによって、df_gender_std を作成しています。これにより、'gender_cd' と 'gender' の値のユニークな組み合わせの新しいデータフレームが作成されます。

df_customer_std は、df_customer dataframe から 'gender' 列を、columns パラメータを 'gender' に設定した drop() メソッドを使用して削除することで作成されます。これにより、df_customerから'gender'カラム以外のすべてのカラムを持つ新しいdataframeが作成されます。

このコードの目的は、'gender_cd' と 'gender' のユニークな組み合わせを持つデータフレームと、df_customer の 'gender' 以外のすべてのカラムを持つデータフレームを別々に作成することにあります。これらのデータフレームは、さらなる分析やモデリングに使用することができます。

 

解説:

このコードは、2つのデータフレームdf_productとdf_categoryの間で、category_small_cd列で内部結合を実行します。結果のdf_product_fullはdf_productとdf_categoryのすべてのカラムを含み、結合はcategory_small_cdの一致する値に基づいています。

新しいデータフレームdf_product_fullには、df_categoryの追加カラム、特にcategory_major_name、category_medium_name、category_small_nameも含まれています。これらの列は、商品カテゴリに関するカテゴリ情報を含んでおり、両方のデータフレームで一致する値を持つ行だけを保持する、how='inner'オプションを使用してマージされたデータフレームに含まれます。.head(3)メソッドは、結果として得られるマージされたデータフレームの最初の3行を表示するために使用されます。
 
解説:

このコードは、PandasのDataFrame df_product_fullを、ファイルパスとファイル名を指定したCSVファイル ../data/P_df_product_full_UTF-8_header.csv にエクスポートしています。エクスポートされるCSVファイルは、幅広い文字をサポートするためにUTF-8エンコーディングを使用し、引数index=Falseは、DataFrameの行インデックスをエクスポートされるCSVファイルに含めないことを指定します。
 
 
解説:

このコードは、df_product_fullのDataFrameをP_df_product_full_UTF-8BOM_header.csvというファイル名のCSVファイルにエクスポートしています。

pandas DataFrameのto_csv()メソッドは、DataFrameの内容をCSVファイルに書き込むために使用されます。このメソッドには、ファイル名や使用するエンコーディングなど、いくつかのパラメータがあります。

この場合、filenameパラメータには'../data/P_df_product_full_UTF-8BOM_header.csv'が設定されており、CSVファイルのディレクトリとファイル名が指定されます。'./data/'の接頭辞は、ファイルを保存する相対ディレクトリを指定する。

encodingパラメータには、CSVファイルに使用するエンコード形式を指定する'utf_8_sig'が設定される。utf_8_sig」は、ファイルの先頭にバイトオーダーマーク(BOM)を含むUTF-8エンコーディングの一種である。BOMは、ファイルのバイトオーダーを示す特別なマーカーで、ファイルを開くときにプログラムがエンコード形式を判断するのに役立ちます。

indexパラメータはFalseに設定されており、DataFrameのインデックスをCSVファイルに含めないことを指定する。

 

解説:

このコードは、pandasのDataFrameであるdf_product_fullを、「./data/」ディレクトリの「P_df_product_full_CP932_header.csv」という名前のCSVファイルにエクスポートしています。

エクスポートされたCSVファイルは、「Windows-31J」とも呼ばれる日本語の文字エンコーディングである「CP932」文字エンコーディングを使用しています。このエンコーディングは、日本ではテキストデータによく使われており、Windowsオペレーティングシステムと互換性があります。

パラメータencoding='CP932'は、CSVファイルをエクスポートするときに使用する文字エンコーディングを指定します。

index=Falseパラメータは、エクスポートされたCSVファイルにindexカラムを含めないことを指定します。

 

解説:

df_product_full DataFrameを"../data/"ディレクトリの "P_df_product_full_UTF-8_noh.csv "というCSVファイルに保存するコードである。

第1引数には、CSVファイルの保存先となるファイル名とパスを指定する。header引数はFalseに設定され、DataFrameのヘッダー行は出力ファイルに含まれないことを意味する。encoding引数には'UTF-8'が設定され、ファイル書き込み時に使用する文字エンコーディングを指定する。これは、DataFrameのインデックスが出力ファイルに含まれないことを意味します。

全体として、このコードは、df_product_full DataFrameを、ヘッダー行を含まず、UTF-8エンコーディングでCSVファイルにエクスポートしています。

 

解説:

上記のコードは、UTF-8エンコーディングでヘッダー行がないCSVファイルP_df_product_full_UTF-8_noh.csvを読み込み、データフレームに列名を割り当てています。

pd.read_csv('../data/P_df_product_full_UTF-8_noh.csv', dtype={1:str, 2:str, 3:str}, encoding='UTF-8', header=None): ヘッダ行のないCSVファイルを読み込み、2列目、3列目、4列目を文字列データ型に設定します。結果として得られるデータフレームには、0、1、2、3、4、5、6、7、8という名前のカラムがあります。

df_product_full.columns = ['product_cd','category_major_cd', 'category_medium_cd', 'category_small_cd', 'unit_price','unit_cost','category_major_name', 'category_medium_name', 'category_small_name']: これは、データフレームのカラムに新しいカラム名を割り当てるものです。結果として得られるdataframeは、product_cd、category_major_cd、category_medium_cd、category_small_cd、unit_price、unit_cost、category_major_name、category_medium_name、およびcategory_small_nameという列を持つ。

df_product_full.head(3): df_product_fullの最初の3行を表示します。

 

解説:

このコードは、'../data' ディレクトリにある 'P_df_product_full_UTF-8_noh.csv' という名前の CSV ファイルを読み込む。names'パラメータでカラム名を指定し、'c_names'と呼ばれる文字列のリストとして使用する。dtype」パラメータは、「category_major_cd」、「category_medium_cd」、「category_small_cd」という名前の列のデータ型を「str」(文字列)で指定する。encoding」パラメータは、CSVファイルが「UTF-8」を使用してエンコードされることを指定する。最後に、'header' パラメータは、ファイルにヘッダー行がないことを示すために 'None' に設定される。

出来上がったデータフレームは変数 'df_product_full' に代入され、 'head' メソッドを用いて最初の3行が表示される。

 

 
解説:

このコードは、read_csv関数を使用して、CSVファイルをカスタマイズされたカラム名を持つPandas DataFrameに読み込むものです。

以下、コードの解説をします。

c_names: カスタマイズされたカラム名を定義する文字列のリストです。
pd.read_csv(): CSVファイルを読み込んでDataFrameを返すPandas関数です。
'../data/P_df_product_full_UTF-8_noh.csv': 読み込むCSVファイルのファイルパスです。

names=c_names: c_namesリストを使ってカスタマイズしたカラム名を指定します。
dtype={'category_major_cd':str, 'category_medium_cd':str, 'category_small_cd':str}: category_major_cd、category_medium_cd、category_small_cdのカラムのデータ型をstrにすることを指定する。

encoding='UTF-8': ファイルのエンコーディングが'UTF-8'であることを指定します。
header=None: CSVファイルにヘッダー行がないことを指定します。

最後に、head()メソッドを使用して、結果のDataFrameを表示し、最初の3行を表示します。

 

解説:

このコードは、df_product_fullというpandasのDataFrameの内容を、'../d/P_df_product_full_UTF-8_header.tsv'にあるTSV (Tab-Separated Values) ファイルに書いています。

.to_csv() メソッドは df_product_full DataFrame に対して呼び出され、これはデータを CSV (Comma-Separated Values) または TSV ファイルにエクスポートするために pandas が提供する方法です。

メソッドの第一引数である '../d/P_df_product_full_UTF-8_header.tsv' は、DataFrame を保存するためのファイルパスとファイル名です。ファイルは./d/ディレクトリにP_df_product_full_UTF-8_header.tsvという名で保存されます。

第2引数のsep='˶'は、ファイル内の値をカンマの代わりにタブで区切ることを指定する。

第3引数のencoding='UTF-8'は、ファイルのエンコーディングを、Unicode文字の標準エンコーディングであるUTF-8にすることを指定するものである。

第4引数のindex=Falseは、DataFrameのインデックスを出力ファイルに含めないことを指定する。

 

解説:

このコードでは、'../data/P_df_product_full_UTF-8_header.tsv'にあるTSV (Tab-Separated Values) ファイルからdf_product_fullというpandas DataFrameにデータを読み込んでいます。

ファイルからデータを読み込むために、pd.read_table()関数が呼び出されます。関数の第一引数である '../data/P_df_product_full_UTF-8_header.tsv' は、読み込むファイルのパスと名前を指定します。

関数の第二引数dtype={'category_major_cd':str, 'category_medium_cd':str, 'category_small_cd':str} は、DataFrameの特定の列のデータ型を指定する。具体的には、category_major_cd、category_medium_cd、category_small_cdの各列をstring(str)型に設定しています。

この関数の第3引数encoding='UTF-8'は、ファイルのエンコーディングがUTF-8であることを指定する。

そして、出来上がったDataFrameであるdf_product_fullをhead(3)メソッドで表示すると、DataFrameの最初の3行が表示されます。

 

解説:

このコードでは、'../data/P_df_product_full_UTF-8_header.tsv'にあるTSV (Tab-Separated Values) ファイルからdf_product_fullというpandas DataFrameにデータを読み込んでいます。

ファイルからデータを読み込むために、pd.read_csv()関数が呼び出されます。関数の第一引数である '../data/P_df_product_full_UTF-8_header.tsv' は、読み込むファイルのパスと名前を指定します。

関数の第二引数dtype={'category_major_cd':str, 'category_medium_cd':str, 'category_small_cd':str} は、DataFrameの特定の列のデータ型を指定する。具体的には、category_major_cd、category_medium_cd、category_small_cdの各列をstring(str)型に設定しています。

第3引数のsep='˶'は、ファイル内の値をカンマではなくタブで区切ることを指定する。

第4引数のencoding='UTF-8'は、ファイルのエンコーディングがUTF-8であることを指定する。

そして、出来上がったDataFrameであるdf_product_fullをhead(3)メソッドで表示すると、DataFrameの最初の3行が表示される。

 

Comment