Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. import boto3
  2. import datetime
  3. import pandas as pd
  4. import numpy as np
  5.  
  6. now = datetime.datetime.utcnow()
  7. start = (now - datetime.timedelta(days=40)).strftime("%Y-%m-%d")
  8. end = now.strftime("%Y-%m-%d")
  9.  
  10. cd = boto3.client("ce",
  11. aws_access_key_id="XXX", aws_secret_access_key="XXX",)
  12.  
  13. results = []
  14.  
  15. token = None
  16. while True:
  17. if token:
  18. kwargs = {"NextPageToken": token}
  19. else:
  20. kwargs = {}
  21. data = cd.get_cost_and_usage(
  22. TimePeriod={"Start": start, "End": end},
  23. Granularity="DAILY",
  24. Metrics=["UnblendedCost"],
  25. GroupBy=[
  26. {"Type": "DIMENSION", "Key": "LINKED_ACCOUNT"},
  27. {"Type": "DIMENSION", "Key": "SERVICE"},
  28. ],
  29. **kwargs
  30. )
  31. results += data["ResultsByTime"]
  32. token = data.get("NextPageToken")
  33. if not token:
  34. break
  35.  
  36.  
  37. tp = list()
  38. ai = list()
  39. sn = list()
  40. am = list()
  41. for result_by_time in results:
  42. for group in result_by_time["Groups"]:
  43. TimePeriod = result_by_time["TimePeriod"]["Start"]
  44. account_id = group["Keys"][0]
  45. service_name = group["Keys"][1]
  46. amount = group["Metrics"]["UnblendedCost"]["Amount"]
  47. tp.append(TimePeriod)
  48. ai.append(account_id)
  49. sn.append(service_name)
  50. am.append(amount)
  51.  
  52. df = pd.DataFrame([tp, ai, sn, am]).T
  53. df.columns = ["date", "account_no", "service_name", "amount"]
  54. df.to_csv("myreport.csv")
  55.  
  56.  
  57.  
  58. ## EDA
  59.  
  60. import janitor
  61. from sklearn.feature_selection import VarianceThreshold
  62.  
  63. df = pd.read_csv("myreport.csv")
  64.  
  65. ndf = (
  66. df.groupby(["date", "account_no", "service_name"])["amount"].sum().unstack()
  67. )
  68.  
  69. ndf1 = ndf.astype(np.float)
  70. ndf1 = ndf1.fillna(0)
  71.  
  72. qconstant_filter = VarianceThreshold(threshold=1.01)
  73. ndf2 = qconstant_filter.fit_transform(ndf1)
  74.  
  75. mycols = ndf1.columns[qconstant_filter.get_support()]
  76. report = pd.DataFrame(ndf2, columns=mycols)
  77.  
  78. ndf1 = ndf1.reset_index()
  79. report["date"] = ndf1["date"]
  80.  
  81. df = report.rename_axis(index=None, columns=None)
  82. df = df.set_index("date")
  83. df.plot(kind="bar")
  84.  
  85. df = df[(df > 1).any(axis=1)]
  86.  
  87. df = df.clean_names(
  88. strip_underscores=True, case_type="lower", remove_special=True
  89. ).limit_column_characters(18)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement