業務上使用できるかなと思い、Pythonのpandasというライブラリを使用して広告レポートの加工をしてみたので紹介いたします。
実際にダウンロードした広告レポートをそのままDBに取り込むことが少なく、行の削除や列の追加をする必要があった為今回実行してみました。
前回の記事では広告レポートの自動取得を行ったのでその続きになっています。
作業環境はWindowsで、Pythonは事前にインストールされている前提で進めていきます。
pandasとは
pandasはデータ分析を支援する機能を搭載したライブラリで、CSVやExcelファイルなどにデータの入出力ができ、データ集計や加工を行う際に使用されています。事前準備
pandasのインストール
1 |
pip install pandas |
広告レポートデータの加工
前回同様今回も某媒体のクリエイティブレポートを対象にデータの加工を行おうと思います。加工前のレポートが↓です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
広告主名,クリエイティブ名,サムネイル,サイズ,インプレッション数,クリック数,CTR,コンバージョン数,CVR,消化金額 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,0,0,0,0,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,0,0,0,0,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,,,0,,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,,,0,,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1042,2,0.191,0,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1447,5,0.345,0,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1008,0,0,0,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1373,3,0.218,0,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1345,3,0.223,0,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1124,4,0.355,0,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1425,4,0.28,,0,0 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1331,5,0.375,0,0,0 |
下記の流れで処理を実行します。
①ダウンロードしたcsvファイルを読み込む
②インプレッション数・クリック数・コンバージョン数の空白箇所を0で埋める
(少し分かり辛いですが、4,5行目辺りが対象です)
③インプレッション数・クリック数・コンバージョン数が全て0のデータは不要の為削除する
④不足項目(項目名・日付・キャンペーン名)を追加する
⑤①~④で加工したファイルの出力を行う
コード化したものがこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
###広告レポートcsvファイルを加工する import pandas as pd from datetime import datetime , timedelta #ダウンロードしたcsvファイルの読み込み df = pd.read_csv('C:/Users/xxxxx/xxxxx/report.csv' , encoding="shift-jis") #IMP,CLICK,CVの空白を0にし、対象全てが0の行を削除 df.fillna({'インプレッション数':0 , 'クリック数':0 , 'コンバージョン数':0} , inplace=True) df.query('(インプレッション数 > 0.0) or (クリック数 > 0.0) or (コンバージョン数 > 0.0)' , inplace =True) #媒体名付与 df['媒体名'] = '広告媒体A' #前日日付付与 today = datetime.today() df['日付'] = (today - timedelta(days=1)).strftime('%Y-%m-%d') #キャンペーン名付与 df['キャンペーン名'] = 'キャンペーンA' #print(df) #加工したcsvファイルの出力 df.to_csv("C:/Users/xxxxx/xxxxx/report2.csv", index=False) |
解説
7行目ではレポートファイルの格納されているファイルパスを指定しています。今回ダウンロードしたレポートファイルはshift-jis形式であった為文字コードを指定しています。
この際utf-8を指定するとエラーになるので読み込むファイルの文字コードに関しては注意が必要です。
10,12行目では数値項目についての処理を行っています。
加工前ファイルには数値がついていない場合、0や空白が混ざっていたので空白行は0になるように統一しています。
対象列の空白を0に統一した後は、データとして不要のため対象列が全て0の行は削除しています。
fillnaメソッドを用いて空白行を0に置換し、queryメソッドを用いて条件に該当する行のみ抽出しています。
また、文末のinplaceはTrueを設定し、行が置換されるようにしています。
この時Falseを設定した場合、行の置換はされません。
18,19行目ではレポートに前日日付を追加しています。
広告レポートでは、当日ではなく前日日付でデータが確定するので、当日ではなく前日日付の追加としています。
日付のフォーマット自体は文末のstrftimeメソッドで指定できます。今回は年月日をしていますがマイクロ秒数まで設定することが可能です。
26行目では出力したいフォルダを指定して、加工後のファイルを出力します。
この時indexはFalseを指定していますが、Trueにするとファイル内に行番号も一緒に出力されてしまいます。
DBとして取り込む際には不要なので今回は除外しています。
処理を行い、加工した後のファイルの中身が↓です。
1 2 3 4 5 6 7 8 9 |
広告主名,クリエイティブ名,サムネイル,サイズ,インプレッション数,クリック数,CTR,コンバージョン数,CVR,消化金額,媒体名,日付,キャンペーン名 GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1042.0,2.0,0.191,0.0,0,0,広告媒体A,2022-06-19,キャンペーンA GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1447.0,5.0,0.345,0.0,0,0,広告媒体A,2022-06-19,キャンペーンA GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1008.0,0.0,0.0,0.0,0,0,広告媒体A,2022-06-19,キャンペーンA GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1373.0,3.0,0.218,0.0,0,0,広告媒体A,2022-06-19,キャンペーンA GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1345.0,3.0,0.223,0.0,0,0,広告媒体A,2022-06-19,キャンペーンA GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1124.0,4.0,0.355,0.0,0,0,広告媒体A,2022-06-19,キャンペーンA GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1425.0,4.0,0.28,0.0,0,0,広告媒体A,2022-06-19,キャンペーンA GMO NIKKO株式会社,{(IF)7月販売_GMONIKKO,https://gmonikko.png,ネイティブ,1331.0,5.0,0.375,0.0,0,0,広告媒体A,2022-06-19,キャンペーンA |
まとめ
いかがでしたでしょうか。とても簡単にレポートの加工ができたのではないかと思います。
pandasを使用したデータ加工は他にも様々な場面で活用できるのではないでしょうか。
次回は加工後データをGoogle CloudのCloud functionへアップデートする作業を自動化してみようと思います。
閲覧頂きありがとうございました。