美國金融投訴數據---利用Python進行簡要分析

文中主要使用Python的第三方包Pandas和Numpy進行分析

首先,說一下數據分析步驟:

提出問題→理解數據→數據清洗→構建模型→數據可視化

一、提出問題

  1. 平均每月會收到多少條投訴數據?
  2. 投訴最多的是哪一種金融產品?
  3. 有多少條投訴未及時回復?
  4. 投訴最多和投訴最少的公司?
  5. 投訴途徑主要有哪些?

二、理解數據

文中數據是美國消費者對金融公司的產品和服務的投訴。

  • 數據來源:

kaggle.com/cfpb/us-cons

  • 欄位含義(18個欄位名)

1.讀取數據

#導入Pandas包,讀取excel數據
import pandas as pd
filename=E:\myself\consumer_complaints.xlsx
df=pd.read_excel(filename)

另一種讀取方法如下:

import pandas as pd
filename=E:\myself\consumer_complaints.xlsx
df=pd.read_excel(filename)

2.行列數

df.shape

3.每一列的數據類型

df.dtypes

三、清洗數據

選擇子集→列名重命名→缺失數據處理→數據類型轉換→數據排序→異常值處理

1.選擇子集

方法1:pandas中的DataFrame

col_n =[date_received,product,issue,company,
submitted_via,company_response_to_consumer,timely_response]
a = pd.DataFrame(df,columns = col_n)

方法2:loc屬性用於根據索引獲取值

subdf=df.loc[0:4,[date_received,product,issue,company,
submitted_via,company_response_to_consumer,timely_response]]

2.列名重命名

rename方法、columns參數

df.rename(columns={submitted_via: via,
company_response_to_consumer: c_response}, inplace=True)

凡是會對原數組作出修改並返回一個新數組的,往往都有一個 inplace可選參數,inplace=Ture數據框本身會進行改動

3.缺失數據處理

1)統計數據中的每一列是否有空值:

df.isnull().any()

2)統計空值列數

df.isnull().any().sum()

但可發現有空值的列,並不是我們需要的分析子集里,所以不影響,只需要刪除這些列就行了

df.dropna(axis=1, how=all)

ps:這裡說一下,如果識別出空值,怎麼處理。常用的缺失值處理手段主要包含刪除、填補。

刪除手段主要應用於數據缺失很少或很多的情況。刪除命令常使用pandas中的dropna()完成。在dropna()函數中還有一個非常重要的參數how,默認how=any,表示此行(或列)只要有一個NaN值,就要刪除所在行(或列)。當how=all是表示只有當此行(或列)全部都是NaN值時,才執行此操作。

  • 刪除缺失值所在行:數據缺失較少,且數據分布較為均勻,不適用眾數、均值補足

#刪除所有值均為缺失值的行
df.dropna(how = all)

  • 刪除缺失值所在列(即刪除對應變數)

#刪除所有含缺失值的行,how=any在給定的任何一列中有缺失值就刪除
df.dropna()
#默認how = any

3)識別刪除重複值

df.drop_duplicates()

發現並沒有重複值

這裡還是把不需要的列給刪了比較好

#刪除不需要的列
df.drop(columns=[sub_product,sub_issue,consumer_complaint_narrative,
company_public_response,state,zipcode,tags,consumer_consent_provided],
inplace=True)

4.數據類型轉換

字元串轉換成日期格式,pandas中的to_datetime( )

df[date_received] = pd.to_datetime(df[date_received])

這裡轉換日期我真的轉換了好多次好多次,喜(cao)極(ni)而(ma)泣

5.排序

by:按哪幾列排序

ascending=True 表示升序排列,ascending=False表示降序排列

na_position=True表示排序的時候,把空值放到前列,這樣可以比較清晰的看到哪些地方有空值。

#按日期列進行升序排列
df=df.sort_values(by=date_received,
ascending=True,
na_position=first)
print(排序後的數據集)
df.head(5)

重命名行索引值(index):排序後的列索引值是之前的行號,需要修改成從0到N按順序的索引值

reset_index可以還原索引,重新變為默認的整型索引

df=df.reset_index(drop=True)

6.異常值處理

本次分析數據無異常值,主要是分析欄位中大多是文本數據。

四、構建模型以及得出結論

問題1:平均每月會收到多少條投訴數據?

step1:確定總投訴次數total

step2:確定時間範圍,有幾個月?

step3:月均投訴=總投訴次數/月份數

---------------------------------------------後面的問題將用到pandas的高級功能以及繪圖等更多高級數據分析功能,將在後期跟新本篇文章。

推薦閱讀:

TAG:Python入門 | Python |