python資料分析美國大選項目實戰(三)

來源:互聯網
上載者:User

標籤:otl   plt   sum   統計   判斷   ace   turn   類型   ane   

項目介紹

項目地址:https://www.kaggle.com/fivethirtyeight/2016-election-polls

 

包含了2015年11月至2016年11月期間對於2016美國大選的選票資料,共27列。

項目目的:分析每個月的民意調查統計趨勢。

涉及知識點:

  • 高階函數filter
  • numpy讀取文字檔
  • 處理日期格式資料
  • numpy的切片和索引
  • numpy的統計方法
  • 列表推導式
  • 資料結構zip
  • Matplotlib進行簡單的資料視覺效果

 

項目代碼
# -*- coding: utf-8 -*-import numpy as npimport datetimeimport matplotlib.pyplot as pltdef main():    # 資料檔案地址    filename = ‘./presidential_polls.csv‘    # 讀取列名,即第一行資料    with open(filename, ‘r‘) as f:        col_names_str = f.readline()[:-1]  # [:-1]表示不讀取末尾的分行符號‘\n‘    # 將字串拆分,並組成列表    col_name_lst = col_names_str.split(‘,‘)    # 使用的列名    use_col_name_lst = [‘enddate‘, ‘rawpoll_clinton‘, ‘rawpoll_trump‘, ‘adjpoll_clinton‘, ‘adjpoll_trump‘]    # 擷取相應列名的索引號    use_col_index_lst = [col_name_lst.index(use_col_name) for use_col_name in use_col_name_lst]    # 資料讀取    data_array = np.loadtxt(filename,  # 檔案名稱                            delimiter=‘,‘,  # 分隔字元                            skiprows=1,  # 跳過第一行,即跳過列名                            dtype=str,  # 資料類型                            usecols=use_col_index_lst)  # 指定讀取的列索引號    # 處理日期格式資料    enddate_idx = use_col_name_lst.index(‘enddate‘)    enddate_lst = data_array[:, enddate_idx].tolist()    # print enddate_lst    # 將日期文字格式統一,即‘yy/dd/mm‘    enddate_lst = [enddate.replace(‘-‘, ‘/‘) for enddate in enddate_lst]    # 將日期文字轉換成日期    date_lst = [datetime.datetime.strptime(enddate, ‘%m/%d/%Y‘) for enddate in enddate_lst]    # 構造年份-月份列表    month_lst = [‘%d-%02d‘ % (date_obj.year, date_obj.month) for date_obj in date_lst]    month_array = np.array(month_lst)    months = np.unique(month_array)    # print months    # 統計民意投票數    # cliton    # 未經處理資料 rawpoll    rawpoll_clinton_idx = use_col_name_lst.index(‘rawpoll_clinton‘)    rawpoll_clinton_data = data_array[:, rawpoll_clinton_idx]    # 調整後的資料 adhpool    adjpoll_clinton_idx = use_col_name_lst.index(‘adjpoll_clinton‘)    adjpoll_clinton_data = data_array[:, adjpoll_clinton_idx]    # trump    # 未經處理資料 rawpoll    rawpoll_trump_idx = use_col_name_lst.index(‘rawpoll_trump‘)    rawpoll_trump_data = data_array[:, rawpoll_trump_idx]    # 調整後的資料 adjpoll    adjpoll_trump_idx = use_col_name_lst.index(‘adjpoll_trump‘)    adjpoll_trump_data = data_array[:, adjpoll_trump_idx]    # 結果儲存    results = []    for month in months:        # clinton        # 未經處理資料 rawpoll        rawpoll_clinton_month_data = rawpoll_clinton_data[month_array == month]        # 統計當月的總票數        rawpoll_clinton_month_sum = get_sum(rawpoll_clinton_month_data)        # 調整資料 adjpoll        adjpoll_clinton_month_data = adjpoll_clinton_data[month_array == month]        # 統計當月的總票數        adjpoll_clinton_month_sum = get_sum(adjpoll_clinton_month_data)        # trump        # 未經處理資料 rawpoll        rawpoll_trump_month_data = rawpoll_trump_data[month_array == month]        # 統計當月的總票數        rawpoll_trump_month_sum = get_sum(rawpoll_trump_month_data)        # 調整資料 adjpoll        adjpoll_trump_month_data = adjpoll_trump_data[month_array == month]        # 統計當月的總票數        adjpoll_trump_month_sum = get_sum(adjpoll_trump_month_data)        results.append((month, rawpoll_clinton_month_sum, adjpoll_clinton_month_sum, rawpoll_trump_month_sum,                        adjpoll_trump_month_sum))    # print results    months, raw_cliton_sum, adj_cliton_sum, raw_trump_sum, adj_trump_sum = zip(*results)        # 可視化分析結果    fig, subplot_arr = plt.subplots(2, 2, figsize=(15, 10))    # 未經處理資料趨勢展示    subplot_arr[0, 0].plot(raw_cliton_sum, color=‘r‘)    subplot_arr[0, 0].plot(raw_trump_sum, color=‘g‘)    width = 0.25    x = np.arange(len(months))    subplot_arr[0, 1].bar(x, raw_cliton_sum, width, color=‘r‘)    subplot_arr[0, 1].bar(x + width, raw_trump_sum, width, color=‘g‘)    subplot_arr[0, 1].set_xticks(x + width)    subplot_arr[0, 1].set_xticklabels(months, rotation=‘vertical‘)    # 調整資料趨勢展示    subplot_arr[1, 0].plot(adj_cliton_sum, color=‘r‘)    subplot_arr[1, 0].plot(adj_trump_sum, color=‘g‘)    width = 0.25    x = np.arange(len(months))    subplot_arr[1, 1].bar(x, adj_cliton_sum, width, color=‘r‘)    subplot_arr[1, 1].bar(x + width, adj_trump_sum, width, color=‘g‘)    subplot_arr[1, 1].set_xticks(x + width)    subplot_arr[1, 1].set_xticklabels(months, rotation=‘vertical‘)    plt.subplots_adjust(wspace=0.2)    plt.show()def is_convert_float(s):    """    判斷一個字串能否轉換為float    """    try:        float(s)    except:        return False    return Truedef get_sum(str_array):    """    返回字串數組中數位總和    """    # 去掉不能轉換成數位資料    cleaned_data = filter(is_convert_float, str_array)    # 轉換資料類型    float_array = np.array(cleaned_data, np.float)    return np.sum(float_array)if __name__ == ‘__main__‘:    main()

 

python資料分析美國大選項目實戰(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.