Script 171: Target (Impr Clicks Views)

Purpose

Python script to add dimensions tag based on campaign name.

To Elaborate

The Python script solves the problem of adding dimensions tags to campaign names. It takes a dataset with campaign names and adds a tag to each campaign name based on a specific location in the name. The script then outputs the dataset with the added tags.

Walking Through the Code

  1. The script starts by defining configurable parameters, such as the separator and the location of the tag in the campaign name.
  2. It then defines column constants for the input and output datasets.
  3. The script includes a function called get_tag_from_campaign_name that takes a campaign name as input and returns the tag based on the specified location in the name.
  4. The script creates a copy of the input dataset as the output dataset.
  5. It loops through each row in the input dataset.
  6. For each row, it retrieves the existing tag and campaign name.
  7. It calls the get_tag_from_campaign_name function to get the tag from the campaign name.
  8. It prints the campaign name and tag.
  9. If the tag is different from the existing tag and not empty, it updates the output dataset with the new tag.
  10. If the tag is empty or the same as the existing tag, it sets the tag in the output dataset as NaN.
  11. The script filters the output dataset to include only rows with non-empty tags.
  12. If the output dataset is not empty, it prints the tableized output dataset.
  13. If the output dataset is empty, it prints “Empty outputDf”.

Vitals

  • Script ID : 171
  • Client ID / Customer ID: 1306924185 / 60269297
  • Action Type: Bulk Upload
  • Item Changed: Campaign
  • Output Columns: Account, Campaign, Target (Impr/Clicks/Views)
  • Linked Datasource: M1 Report
  • Reference Datasource: None
  • Owner: ascott@marinsoftware.com (ascott@marinsoftware.com)
  • Created by ascott@marinsoftware.com on 2023-06-07 17:19
  • Last Updated by ascott@marinsoftware.com on 2023-12-06 04:01
> See it in Action

Python Code

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#
# Add Dimensions Tag based on Campaign Name (minimal Pandas)
#
#
# Author: Michael S. Huang
# Date: 2023-05-17
#

########### Configurable Params - START ##########

SEP = '_'
TAG_LOCATION = 5 # comes after first separator

########### Configurable Params - END ###########

RPT_COL_CAMPAIGN = 'Campaign'
RPT_COL_ACCOUNT = 'Account'
RPT_COL_TEST = 'Target (Impr/Clicks/Views)'
BULK_COL_ACCOUNT = 'Account'
BULK_COL_CAMPAIGN = 'Campaign'
BULK_COL_TEST = 'Target (Impr/Clicks/Views)'

# define function to parse tag from campaign name
def get_tag_from_campaign_name(campaign_name):
    vals = campaign_name.split(SEP)
    # assume tag value is after 1st separator
    tag = ''
    try:
      tag = str(vals[TAG_LOCATION])
    except:
      tag = ''

    return tag

# copy all input rows to output
outputDf = inputDf.copy()

# loop through all rows
for index, row in inputDf.iterrows():
  existing_tag = row[RPT_COL_TEST]
  campaign_name = row[RPT_COL_CAMPAIGN]
  tag = get_tag_from_campaign_name(campaign_name)
  print("Campaign [%s] => Tag [%s]" % (campaign_name, tag))

  # only tag if it's different than existing tag
  if (len(tag) > 0) &  (tag != existing_tag):
    outputDf.at[index, BULK_COL_TEST] = tag
  else:
    outputDf.at[index, BULK_COL_TEST] = np.nan  

# only include non-empty tags in bulk
outputDf = outputDf.loc[ outputDf[BULK_COL_TEST].notnull() ]

if not outputDf.empty:
  print("outputDf", tableize(outputDf))
else:
  print("Empty outputDf")

Post generated on 2024-05-15 07:44:05 GMT

comments powered by Disqus