import pandas as pd
"""
需求
1.加载数据
2.查看数据的基本信息
3.指定数据截取,将如下字段的数据进行提取,其他数据舍弃 
    cand_nm: 候选人姓名
    contbr_nm : 捐赠人姓名
    contbr_st:捐赠人所在州
    contbr_employer : 捐赠人所在公司
    contbr_occupation : 捐赠人职业
    contb_receipt_amt : 捐赠数额 (美元
    contb_receipt_dt : 捐款的日期对新数据进行总览,查看是否存在缺失数据
4.用统计学指标快速描述数值型属性的概要空值处理。
5.可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为NOT PROVIDE异常值处理。
6.将捐款金额<=0的数据删除
7.新建一列为各个候选人所在党派party
8.查看party这一列中有哪些不同的元素
9.统计party列中各个元素出现次数
10.查看各个党派收到的政治献金总数contb receipt amt
11.查看具体每天各个党派收到的政治献金总数contb_receipt_amt
12.将表中日期格式转换为'yyyy-mm-dd。
13.查看老兵(捐献者职业)DISABLED VETERAN主要支持谁
"""

# 1.加载数据
df = pd.read_csv("./usa_selection.txt")

# 2.查看数据的基本信息
print(df.info())

# 3.指定数据截取,将如下字段的数据进行提取,其他数据舍弃
df = df[["cand_nm", "contbr_nm", "contbr_st",
         "contbr_employer", "contbr_occupation", "contb_receipt_amt", "contb_receipt_dt"]]
print(df.head())

# 4.用统计学指标快速描述数值型属性的概要空值处理。
print(df.describe())


# 5.可能因为忘记填写或者保密等等原因,相关字段出现了空值,将其填充为NOT PROVIDE异常值处理。
df.fillna(value="NOT PROVIDE", inplace=True)
print(df.info())

# 6.将捐款金额<=0的数据删除
index_0 = df.loc[df["contb_receipt_amt"] <= 0].index
df.drop(labels=index_0, axis=0, inplace=True)
print(df.info())

# 7.新建一列为各个候选人所在党派party
parties = {
    'Bachmann, Michelle': 'Republican',
    'Romney, Mitt': 'Republican',
    'Obama, Barack': 'Democrat',
    "Roemer, Charles E. 'Buddy' III": 'Reform',
    'Pawlenty, Timothy': 'Republican',
    'Johnson, Gary Earl': 'Libertarian',
    'Paul, Ron': 'Republican',
    'Santorum, Rick': 'Republican',
    'Cain, Herman': 'Republican',
    'Gingrich, Newt': 'Republican',
    'McCotter,Thaddeus G': 'Republican',
    'Huntsman, Jon': 'Republican',
    'Perry, Rick': 'Republican'
}
df["partie"] = df["cand_nm"].map(parties)
print(df.head())

# 8.查看party这一列中有哪些不同的元素
print(df['partie'].unique())
# ['Republican' 'Democrat' 'Reform' 'Libertarian' nan]

# 9.统计party列中各个元素出现次数
print(df['partie'].value_counts())

# 10.查看各个党派收到的政治献金总数contb_receipt_amt
print(df.groupby(by="partie")["contb_receipt_amt"].sum())

# 11.查看具体每天各个党派收到的政治献金总数contb_receipt_amt
print(df.groupby(by=["contb_receipt_dt", "partie"])["contb_receipt_amt"].sum())

# 12.将表中日期格式转换为'yyyy-mm-dd。
months = {
    "JAN": 1,
    "FEB": 2,
    "MAR": 3,
    "APR": 4,
    "MAY": 5,
    "JUN": 6,
    "JUL": 7,
    "AUG": 8,
    "SEP": 9,
    "OCT": 10,
    "NOV": 11,
    "DEC": 12
}


def tranformDate(d):
    day, month, year = d.split("-")
    month = months[month]
    return "20{0}-{1}-{2}".format(year, month, day)


df["contb_receipt_dt"] = df["contb_receipt_dt"].map(tranformDate,)

# 13.查看老兵(捐献者职业)DISABLED VETERAN主要支持谁
print(df.head())
old_man = df.loc[df["contbr_occupation"] == "DISABLED VETERAN"]
old_group = old_man.groupby(by="cand_nm")["contb_receipt_amt"].sum()
print(old_group)